首页 > 技术文章 > MIGO生产订单入库写入批次特性增强

BinGeneral 2021-10-25 11:09 原文

一、生产订单入库

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.
"-----------------------------------------@斌将军--------------------------------------------

 

推荐阅读