物料特性值相关表:
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.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。