特性值
特性值是为了控制一些特定属性,特性字段可以在SAP里配置,以方便管控物料或者订单。
后台表
特性值涉及到的SAP后台表有:
CABN,CABNT,CAWN,CAWNT,KSML,KLAH,AUSP
- CABN,CABNT,CAWN,CAWNT
包含内部特性号及其描述字段 - KSML
包含内部等级号字段,与CABN表连接可获取内部特性值(atinn) - KLAH
包含内部等级号,类,类别等字段 - AUSP
包含对象,内部特性号,计数器,类等字段
2024.05.07新增
表INOB:内部编号与对象号之间的关系
批次特性值
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.
2024.05.07新增
上述的函数取值新版本下可能已经不太适用了,函数参数的数据对象也变了,建议还是直接从表取值
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' atinn用字符串查询会失败
** 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'. 通过atnam得到atinn号值
* 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.
2024.05.07新增
对于对象号怎么找呢,需要通过表INOB查找
DATA: lv_matnr TYPE matnr,
lv_charg TYPE charg_d,
lv_werks TYPE werks_d,
lv_djpfs TYPE p LENGTH 10 DECIMALS 3.
DATA: lv_objectkey TYPE bapi1003_key-object.
DATA:BEGIN OF gt_inob OCCURS 0,
cuobj TYPE inob-cuobj,
objek TYPE inob-objek,
objek2 TYPE kssk-objek,
matnr TYPE mara-matnr,
werks TYPE marc-werks,
charg TYPE mch1-charg,
END OF gt_inob.
DATA:BEGIN OF gt_data OCCURS 0,
charg TYPE mch1-charg,
matnr TYPE mara-matnr,
werks TYPE marc-werks,
maktx TYPE makt-maktx,
class TYPE klah-class,
objek TYPE inob-objek,
djpfs TYPE p LENGTH 10 DECIMALS 3,
lifnr TYPE lfa1-lifnr,
shrq TYPE sy-datum,
END OF gt_data.
FIELD-SYMBOLS <fs_data> LIKE LINE OF gt_data.
DATA:gt_ausp TYPE TABLE OF ausp WITH HEADER LINE.
FIELD-SYMBOLS <fs_inob> LIKE LINE OF gt_inob.
DATA: gv_r_fld TYPE char10.
DATA: lv_cuobj TYPE inob-cuobj,
lv_objek TYPE inob-objek,
lv_ATFLV TYPE ausp-atflv.
SELECT
cuobj,
objek
INTO TABLE @gt_inob
FROM inob
WHERE klart EQ '022' "分类号要根据实际情况来
AND obtab EQ 'MCHA'. “这里表也要根据实际情况来,MCH1,MARA都是可以的
LOOP AT gt_inob ASSIGNING <fs_inob>.
<fs_inob>-objek2 = <fs_inob>-cuobj.
<fs_inob>-matnr = <fs_inob>-objek+0(40).
<fs_inob>-werks = <fs_inob>-objek+40(4).
<fs_inob>-charg = <fs_inob>-objek+44(10).
ENDLOOP.
*DELETE gt_inob WHERE matnr <> lv_matnr.
*DELETE gt_inob WHERE objek2 NS '15033'.
IF gt_inob[] IS NOT INITIAL.
SELECT *
INTO TABLE @gt_ausp
FROM ausp
FOR ALL ENTRIES IN @gt_inob
WHERE objek EQ @gt_inob-objek2
AND klart EQ '022'.
SORT gt_ausp BY objek.
ENDIF.
LOOP AT gt_inob ASSIGNING <fs_inob>.
READ TABLE gt_ausp WITH KEY objek = <fs_inob>-objek2 BINARY SEARCH TRANSPORTING NO FIELDS.
IF sy-subrc EQ 0.
LOOP AT gt_ausp FROM sy-tabix.
IF gt_ausp-objek NE <fs_inob>-objek2.
EXIT.
ENDIF.
CLEAR gv_r_fld.
CASE gt_ausp-atinn.
WHEN '0000000808'."单卷平方数
CALL FUNCTION 'MC_FLTP_CHAR'
EXPORTING
fc_a_fld = gt_ausp-atflv
IMPORTING
fc_r_fld = gv_r_fld.
CONDENSE gv_r_fld NO-GAPS.
gt_data-djpfs = gv_r_fld.
WHEN '0000000819'."供应商帐户号
GT_DATA-LIFNR = GT_AUSP-ATWRT.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = GT_DATA-LIFNR
IMPORTING
OUTPUT = GT_DATA-LIFNR.
WHEN '0000000820'."最近的收货日期
CALL FUNCTION 'MC_FLTP_CHAR'
EXPORTING
FC_A_FLD = GT_AUSP-ATFLV
IMPORTING
FC_R_FLD = GV_R_FLD.
CONDENSE GV_R_FLD NO-GAPS.
GT_DATA-SHRQ = GV_R_FLD.
ENDCASE.
gt_data-matnr = <fs_inob>-matnr.
gt_data-werks = <fs_inob>-werks.
gt_data-charg = <fs_inob>-charg.
APPEND gt_data.
CLEAR gt_data.
ENDLOOP.
ENDIF.
ENDLOOP.
"查询单条
SELECT SINGLE
inob~cuobj,
inob~objek,
ausp~atflv
INTO ( @lv_cuobj,@lv_objek,@lv_atflv )
FROM inob
INNER JOIN ausp
ON inob~cuobj = ausp~objek
INNER JOIN cabn
ON ausp~atinn = cabn~atinn
WHERE inob~klart EQ '022'
AND inob~obtab EQ 'MCHA'
AND cabn~atnam EQ 'Z_UNITCONVERSION'
AND inob~objek LIKE @lv_wech.
CALL FUNCTION 'MC_FLTP_CHAR'
EXPORTING
fc_a_fld = lv_ATFLV
IMPORTING
fc_r_fld = gv_r_fld.
CONDENSE gv_r_fld NO-GAPS.
gt_data-scrq = gv_r_fld.
3.前台查看批次特性值,事务码MSC3N,里面会有类别,类=类别种类指示
生产订单特性值
1.生产订单特性值前台在订单抬头分类控制里