一、生产订单入库
MIGO根据生产订单入库时,将生产订单中的字段,写入到批次特性中
二、BADI:MB_MIGO_BADI
调用BADI中的IF_EX_MB_MIGO_BADI~POST_DOCUMENT方法
"-----------------------------------------@斌将军--------------------------------------------
METHOD if_ex_mb_migo_badi~post_document.
"MIGO生产订单入库时产品编号写入批次特性
DATA: ls_mseg TYPE mseg.
DATA: lv_object TYPE bapi1003_key-object.
DATA:gv_objek TYPE cuobn,
gs_objek TYPE bapi1003_key-object,
gv_obtab TYPE tabelle,
gv_klart TYPE klassenart,
gv_class TYPE klasse_d,
objectkey TYPE bapi1003_key-object,
gs_objectkeytable TYPE bapi1003_object_keys,
gt_objectkeytable TYPE STANDARD TABLE OF bapi1003_object_keys,
gt_values_char TYPE TABLE OF bapi1003_alloc_values_char,
gs_values_char TYPE bapi1003_alloc_values_char,
gt_values_num TYPE TABLE OF bapi1003_alloc_values_num,
gs_values_num TYPE bapi1003_alloc_values_num,
gt_values_curr TYPE TABLE OF bapi1003_alloc_values_curr,
gs_values_curr TYPE bapi1003_alloc_values_curr,
gs_status TYPE bapi1003_key-status,
gt_return TYPE STANDARD TABLE OF bapiret2,
gt_return2 TYPE STANDARD TABLE OF bapiret2,
gt_return3 TYPE STANDARD TABLE OF bapiret2,
gt_return4 TYPE STANDARD TABLE OF bapiret2,
gs_return TYPE bapiret2.
DATA:return_message TYPE char200, "返回消息
lv_value TYPE char70,
lv_check TYPE char2.
IF it_mseg[] IS NOT INITIAL.
SELECT
aufnr,
zgh,
zxz
FROM aufk
INTO TABLE @DATA(lt_aufk)
FOR ALL ENTRIES IN @it_mseg
WHERE aufnr = @it_mseg-aufnr.
ENDIF.
LOOP AT it_mseg INTO ls_mseg WHERE charg IS NOT INITIAL
AND aufnr IS NOT INITIAL AND bwart = '101'
AND ( werks = 'XXXX' OR werks = 'XXXX' ).
READ TABLE lt_aufk INTO DATA(ls_aufk) WITH KEY aufnr = ls_mseg-aufnr.
IF sy-subrc EQ 0.
CLEAR:gv_objek,gv_obtab,gv_klart,gv_class.
CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'
EXPORTING
i_matnr = ls_mseg-matnr
i_charg = ls_mseg-charg "批次
i_werks = ls_mseg-werks
IMPORTING
e_objek = gv_objek
e_obtab = gv_obtab
e_klart = gv_klart
e_class = gv_class.
IF gv_objek IS INITIAL AND gv_obtab IS INITIAL AND gv_klart IS INITIAL AND gv_class IS INITIAL.
return_message = '批次维护失败:未查询到相关类别'.
MESSAGE e001(00) WITH return_message.
ENDIF.
"当批次创建成功,获取物料和批次,获取key值
FREE:gt_objectkeytable.
CLEAR : gs_objectkeytable.
gs_objectkeytable-key_field = 'MATNR'.
gs_objectkeytable-value_int = ls_mseg-matnr."物料
APPEND gs_objectkeytable TO gt_objectkeytable.
CLEAR : gs_objectkeytable.
gs_objectkeytable-key_field = 'WERKS'.
gs_objectkeytable-value_int = ls_mseg-werks.
APPEND gs_objectkeytable TO gt_objectkeytable.
CLEAR : gs_objectkeytable.
gs_objectkeytable-key_field = 'CHARG'.
gs_objectkeytable-value_int = ls_mseg-charg.
APPEND gs_objectkeytable TO gt_objectkeytable.
FREE gt_return.
CLEAR:objectkey.
CALL FUNCTION 'BAPI_OBJCL_CONCATENATEKEY'
EXPORTING
objecttable = gv_obtab "表名
IMPORTING
objectkey_conc = objectkey
TABLES
objectkeytable = gt_objectkeytable
return = gt_return.
LOOP AT gt_return INTO gs_return WHERE type CA 'EAX'.
return_message = '批次维护失败:未查询到分类密钥'.
MESSAGE e001(00) WITH return_message.
ENDLOOP.
"获取特征
REFRESH:gt_values_num[], gt_values_char[], gt_values_curr[],gt_return[].
gs_objek = objectkey.
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
EXPORTING
objectkey = gs_objek
objecttable = gv_obtab
classnum = gv_class
classtype = gv_klart
* IMPORTING
* status = gs_status
TABLES
allocvaluesnum = gt_values_num
allocvalueschar = gt_values_char
allocvaluescurr = gt_values_curr
return = gt_return.
READ TABLE gt_values_char ASSIGNING FIELD-SYMBOL(<fs_char>) WITH KEY charact = 'ZPP_ZGH'.
IF sy-subrc EQ 0.
CLEAR:lv_value.
lv_value = ls_aufk-zgh.
<fs_char>-value_char = lv_value.
<fs_char>-value_neutral = lv_value.
<fs_char>-value_char_long = lv_value.
<fs_char>-value_neutral_long = lv_value.
ELSE.
CLEAR gs_values_char.
gs_values_char-charact = 'ZPP_ZGH'."产品编号
gs_values_char-value_char = ls_aufk-zgh.
APPEND gs_values_char TO gt_values_char.
ENDIF.
READ TABLE gt_values_char ASSIGNING <fs_char> WITH KEY charact = 'ZPP_ZXZ'.
IF sy-subrc EQ 0.
CLEAR:lv_value.
lv_value = ls_aufk-zxz.
<fs_char>-value_char = lv_value.
<fs_char>-value_neutral = lv_value.
<fs_char>-value_char_long = lv_value.
<fs_char>-value_neutral_long = lv_value.
ELSE.
CLEAR gs_values_char.
gs_values_char-charact = 'ZPP_ZXZ'."行走机构编号
gs_values_char-value_char = ls_aufk-zxz.
APPEND gs_values_char TO gt_values_char.
ENDIF.
"更新特征值
FREE:gt_return.
CALL FUNCTION 'BAPI_OBJCL_CHANGE'
EXPORTING
objectkey = objectkey
objecttable = gv_obtab
classnum = gv_class
classtype = gv_klart
* status = gs_status
TABLES
allocvaluesnumnew = gt_values_num
allocvaluescharnew = gt_values_char
allocvaluescurrnew = gt_values_curr
return = gt_return.
lv_check = 'S'.
return_message = '批次维护失败:'.
LOOP AT gt_return INTO gs_return WHERE type CA 'AEX'.
CONCATENATE return_message gs_return-message INTO return_message.
lv_check = 'E'.
CLEAR:gs_return.
ENDLOOP.
IF lv_check = 'S'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
MESSAGE e001(00) WITH return_message.
ENDIF.
ENDIF.
ENDLOOP.
ENDMETHOD.
"-----------------------------------------@斌将军--------------------------------------------