sap物料特性值;分类

物料特性值相关表:

KLAH:记录用事务代码CL01在每个类类行下边建立的类别的相关信息.关键字为内部类号.

在创建类别时需要指定类别的特性.特性用事物代码CT04创建.
图片描述

KSML:记录了每个类别下的特性值.已内部类别号为关键字段和表KLAH相关.
图片描述

TCLA:记录了类类型的相关信息包括表信息.
图片描述

CABN:记录了内部特性编号和特性名称的转换关系,以及特性的数据类型,长度,小数位,单位以及是否为范围值,字段:ATINT='X'.特性的格式信息可以用于通过RTTS(Runtime type services)动态生成变量.
图片描述

CABNT:记录了特性的描述信息:主键为内部特性号和语言代码
图片描述

AUSP:特性值:记录了特性的值,如果特性值是char类型则存放在ATWRT(特征值)字段,如果是num类型则存放在ATFLV(值从),如果特性为范围则结束值存放在ATFLB(值到)字段.主键为objek(对象,对于物料分类来说就是物料编码),ATINN(内部特性号).
图片描述

以下为参考代码:通过cabn表中的数据类型相关信息生成动态内表.

SELECT
      CABN~ATINN,  "内部特性号
      ATNAM,  "特征名称
      ATFOR ,  "格式
      ANZST,   "字符数
      ANZDZ,   "小数
      ATINT ,   "间隔值
      ATBEZ   "特性描述
      INTO TABLE @DATA(LT_CABN)
      FROM CABN
      INNER JOIN CABNT ON CABN~ATINN = CABNT~ATINN AND CABNT~SPRAS = @SY-LANGU
      INNER JOIN KSML ON KSML~IMERK = CABN~ATINN
      WHERE KLART = '001'.

    LOOP AT LT_CABN INTO DATA(LW_CABN).
      LV_LENG = LW_CABN-ANZST.
      LV_DECI = LW_CABN-ANZDZ.
      IF LW_CABN-ATINT = 'X'.
        GW_COMP-NAME = LW_CABN-ATNAM.
        GW_COMP-TYPE ?= CL_ABAP_ELEMDESCR=>GET_STRING( ) .
        APPEND GW_COMP TO GT_COMP2.
        CLEAR GW_COMP.
      ELSEIF LW_CABN-ATFOR = 'NUM'.
        GW_COMP-NAME = LW_CABN-ATNAM.
        GW_COMP-TYPE ?= CL_ABAP_ELEMDESCR=>GET_P( P_LENGTH = LV_LENG P_DECIMALS = LV_DECI ).
        APPEND GW_COMP TO GT_COMP2.
        CLEAR GW_COMP.
      ELSEIF LW_CABN-ATFOR = 'DATE'.
        GW_COMP-NAME = LW_CABN-ATNAM.
        GW_COMP-TYPE ?= CL_ABAP_ELEMDESCR=>GET_C( P_LENGTH = 8 ).
        APPEND GW_COMP TO GT_COMP2.
        CLEAR GW_COMP.
      ELSE.
        GW_COMP-NAME = LW_CABN-ATNAM.
        GW_COMP-TYPE ?= CL_ABAP_ELEMDESCR=>GET_C( P_LENGTH = LV_LENG  ).
        APPEND GW_COMP TO GT_COMP2.
        CLEAR GW_COMP.
      ENDIF.
      CLEAR: LV_DECI, LV_LENG.
      PERFORM FRM_FIELDCAT USING LW_CABN-ATNAM LW_CABN-ATBEZ.
    ENDLOOP.

赋特性值给动态内表:

F <FS_TABLE> IS NOT INITIAL AND P_CLASS IS NOT INITIAL.
    SELECT               "取特征值
    OBJEK ,
    ATNAM,
    ATFOR,       " 数据类型
    MSEHI,       "单位
    ATINT,       "间隔值
    ATWRT,        "char特性值
    ATFLV,         "num特性值从
    ATFLB         "num间隔特性值到
    INTO TABLE @DATA(LT_AUSP)
    FROM AUSP
    INNER JOIN CABN ON CABN~ATINN = AUSP~ATINN
    INNER JOIN MARA ON AUSP~OBJEK = MARA~MATNR
    WHERE MATNR IN @S_MATNR
    AND MARA~MATNR IN @S_MATNR
      AND MARA~MTART IN @S_MTART
      AND MARA~MATKL IN @S_MATKL
    AND    KLART = '001'.
  ENDIF.

 LOOP AT LT_AUSP INTO DATA(LW_AUSP) WHERE OBJEK = <FS_MATNR>.
        ASSIGN COMPONENT LW_AUSP-ATNAM OF STRUCTURE <FS_LINE> TO <FS_FIELD>.
        IF SY-SUBRC = 0 .
          IF LW_AUSP-ATINT = 'X'.
            LV_NUM = LW_AUSP-ATFLV.
            <FS_FIELD> = <FS_FIELD> && LV_NUM && LW_AUSP-MSEHI && '--'.
            LV_NUM = LW_AUSP-ATFLB.
            <FS_FIELD> = <FS_FIELD> && LV_NUM && LW_AUSP-MSEHI.

          ELSEIF LW_AUSP-ATFOR = 'CHAR'.

            <FS_FIELD> = LW_AUSP-ATWRT.
          ELSEIF LW_AUSP-ATFOR = 'DATE' AND LW_AUSP-ATFLV IS NOT INITIAL.

            LV_DATE  = LW_AUSP-ATFLV.
            <FS_FIELD> = LV_DATE.
          ELSEIF LW_AUSP-MSEHI = '%' AND LW_AUSP-ATFLV IS NOT INITIAL.

            <FS_FIELD> = LW_AUSP-ATFLV / 100.
          ELSEIF LW_AUSP-ATFLV IS NOT INITIAL.

            <FS_FIELD> = LW_AUSP-ATFLV .
          ENDIF.
        ENDIF.
      ENDLOOP.
  • 5
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值