SAP物料特性值;分类(转)
原文链接:https://segmentfault.com/a/1190000015080591
物料特性值相关表:
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.
每天学习一个知识点,累积就是财富。