特性值
特性值是为了控制一些特定属性,特性字段可以在SAP里配置,以方便管控物料或者订单。
后台表
特性值涉及到的SAP后台表有:
CABN,CABNT,CAWN,CAWNT,KSML,KLAH,AUSP
- CABN,CABNT,CAWN,CAWNT
包含内部特性号及其描述字段
- KSML
包含内部等级号字段,与CABN表连接可获取内部特性值(atinn)
- KLAH
包含内部等级号,类,类别等字段
- AUSP
包含对象,内部特性号,计数器,类等字段
批次特性值
1.可根据函数来读取或者更改特性值
VB_BATCH_2_CLASS_OBJECT
BAPI_OBJCL_GETDETAIL
DATA: lv_objek TYPE OBJNUM,
lv_obtab TYPE TABELLE,
lv_klart TYPE KLASSENART,
lv_class TYPE KLASSE_D.
DATA: lt_num TYPE TABLE OF BAPI1003_ALLOC_VALUES_NUM,
lt_char TYPE TABLE OF BAPI1003_ALLOC_VALUES_CHAR,
lt_curr TYPE TABLE OF BAPI1003_ALLOC_VALUES_CURR,
lt_return TYPE TABLE OF BAPIRET2.
DATA: lt_numnew TYPE TABLE OF BAPI1003_ALLOC_VALUES_NUM,
lt_charnew TYPE TABLE OF BAPI1003_ALLOC_VALUES_CHAR,
lt_currnew TYPE TABLE OF BAPI1003_ALLOC_VALUES_CURR,
lt_returnnew TYPE TABLE OF BAPIRET2.
DATA: ls_char TYPE BAPI1003_ALLOC_VALUES_CHAR,
ls_return TYPE BAPIRET2.
CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT' "获取对象,类等
EXPORTING
i_matnr = '000000001200005491'
i_charg = '0001356318'
I_WERKS = '2050'
IMPORTING
E_OBJEK = lv_objek
E_OBTAB = lv_obtab
E_KLART = lv_klart
E_CLASS = lv_class.
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL' "获取已维护特性值
EXPORTING
objectkey = lv_objek
objecttable = lv_obtab
classnum = lv_class
classtype = lv_klart
tables
allocvaluesnum = lt_num
allocvalueschar = lt_char
allocvaluescurr = lt_curr
return = lt_return.
lt_numnew[] = lt_num[].
lt_charnew[] = lt_char[].
lt_currnew[] = lt_curr[].
lt_returnnew[] = lt_return[].
IF lt_charnew[] IS NOT INITIAL. "新特性值赋值
LOOP AT lt_charnew INTO ls_char.
ls_char-value_char = '1233333333'.
ls_char-value_neutral = '1233333333'.
MODIFY lt_charnew FROM ls_char.
ENDLOOP.
ELSE.
ls_char-CHARACT = 'Z_MO'.
ls_char-value_char = '1233333333'.
ls_char-value_neutral = '1233333333'.
APPEND ls_char TO lt_charnew[].
ENDIF.
CALL FUNCTION 'BAPI_OBJCL_CHANGE' "新特性值更新
EXPORTING
objectkey = lv_objek
objecttable = lv_obtab
classnum = lv_class
classtype = lv_klart
tables
allocvaluesnumnew = lt_numnew
allocvaluescharnew = lt_charnew
allocvaluescurrnew = lt_currnew
return = lt_returnnew
.
LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'.
WRITE: ls_return-MESSAGE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
EXIT.
ENDLOOP.
IF sy-subrc <> 0.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
ENDIF.
2.可根据后台表来读取特性值
DATA: lv_zmuju TYPE ausp-atwrt,
lt_ausp TYPE TABLE OF ausp.
DATA: BEGIN OF lt_cabn OCCURS 0,
atinn TYPE cabn-atinn,
ATNAM TYPE cabn-ATNAM,
atbez TYPE CABNT-atbez,
END OF lt_cabn.
*SELECT SINGLE atwrt INTO lv_zmuju FROM ausp "得到对象
* WHERE OBJEK = '000000000001525818'.
** AND ATINN = 'Z_REMARKS'
** AND atwrt = '7777777777'.
SELECT
CABN~ATINN "内部特性号
ATNAM
ATBEZ "特性描述
INTO CORRESPONDING FIELDS OF TABLE 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 = '023'.
LOOP AT lt_cabn.
ENDLOOP.
* read table lt_cabn with key atnam = 'Z_REMARKS'.
* lv_atinn = lt_cabn-atinn.
*
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_ausp FROM ausp "得到对象
WHERE OBJEK = '000000000001525818'
AND ATINN = '0000000991'. "备注Z_REMARKS
* AND atwrt = '7777777777'.
WRITE lv_zmuju.
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_ausp FROM ausp "得到对象
WHERE OBJEK = 'OR003000006229'
AND ATINN = '0000000953'. "返工原因
* AND atwrt = '7777777777'.
WRITE lv_zmuju.
"2022.3.18新增
SELECT SINGLE atinn
FROM cabn
INTO lv_atinn
WHERE atnam = 'Z_PP_REWORK3'.
IF sy-subrc = 0.
ENDIF.
3.前台查看批次特性值,事务码MSC3N,里面会有类别,类=类别种类指示
生产订单特性值
1.生产订单特性值前台在订单抬头分类控制里