MIGO 创建及增强

作者:斌将军 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, MM, 开发, 物料管理
MIGO 创建及增强 - 封面图
MIGO 创建及增强 - 封面图

**目录**

01.BAPI_GOODSMVT_CREATE创建及增强

02.MIGO生产订单入库写入批次特性增强

** 1、BAPI进行MIGO过账新增字段 **

BAPI新增收货行号字段,保存外围系统的数据

** 2、MATDOC表新增收货行号 **

MIGO 创建及增强 - 封面图
MIGO 创建及增强 - 封面图

** 3、MSEG表新增收货行号 **

MIGO 创建及增强 - 封面图
MIGO 创建及增强 - 封面图

创建DDL视图用于扩展NSDM_E_MSEG

MIGO 创建及增强 - 封面图
MIGO 创建及增强 - 封面图

** 4、BADI:MB_BAPI_GOODSMVT_CREATE **

调用方法IF_EX_MB_BAPI_GOODSMVT_CREATE~EXTENSIONIN_TO_MATDOC

"-----------------------------------------@斌将军--------------------------------------------METHOD IF_EX_MB_BAPI_GOODSMVT_CREATE~EXTENSIONIN_TO_MATDOC.

DATA: c_lenstruc TYPE i VALUE 30, wa_bapi_mb_header TYPE bapi_te_xmkpf, wa_bapi_mb_item TYPE bapi_te_xmseg, wa_extension_in TYPE bapiparex.

FIELD-SYMBOLS: <fs_imseg> TYPE imseg.

CHECK NOT extension_in[] IS INITIAL.

• Analyze IMSEG for document structure and assign LINE_IDs if necessary CALL METHOD cl_mmim_line_id_manager=>analyze_mb_create CHANGING ct_imseg = ct_imseg[] EXCEPTIONS duplicate_line_id = 1 OTHERS = 2.

LOOP AT extension_in INTO wa_extension_in. CASE wa_extension_in-structure.* extension of MKPF WHEN 'BAPI_TE_XMKPF'. MOVE wa_extension_in+c_lenstruc TO wa_bapi_mb_header. MOVE-CORRESPONDING wa_bapi_mb_header TO cs_imkpf.* extension of MSEG WHEN 'BAPI_TE_XMSEG'. MOVE wa_extension_in+c_lenstruc TO wa_bapi_mb_item. READ TABLE ct_imseg WITH KEY line_id = wa_bapi_mb_item-matdoc_itm ASSIGNING <fs_imseg>. IF sy-subrc EQ 0. MOVE-CORRESPONDING wa_bapi_mb_item TO <fs_imseg>. ENDIF. ENDCASE. ENDLOOP. ENDMETHOD."-----------------------------------------@斌将军--------------------------------------------

** 5、BAPI传值 **

"-----------------------------------------@斌将军--------------------------------------------DATA:ls_imseg TYPE bapi_te_xmseg.DATA: ls_header TYPE bapi2017_gm_head_01, ls_mode TYPE bapi2017_gm_code, ls_goodsmvt_headret TYPE bapi2017_gm_head_ret, lt_goodsmvt_item TYPE STANDARD TABLE OF bapi2017_gm_item_create WITH HEADER LINE,* lt_goodsmvt_serialnumber TYPE STANDARD TABLE OF bapi2017_gm_serialnumber WITH HEADER LINE, lt_return TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE.

DATA:lv_message TYPE char200, lv_check TYPE char1.* 01:采购订单的收货* 02:生产订单的收货* 03:发货* 04:转移发布* 05:其他收货* 06:货物移动的逆转* 07:关于转包订单的后续调整 ls_header-pr_uname = sy-uname. "用户名ls_header-doc_date = '20220315'."gs_template1-bldat."LV_DATE. "凭证日期ls_header-pstng_date = '20220315'."gs_template1-budat."LV_DATE. "过账日期ls_header-header_txt = ''."gs_template1-id."LV_DATE. "抬头文本 ls_mode-gm_code = '05'. lt_goodsmvt_item-material = '000000000000210103'."lt_goodsmvt_item-plant = '2000'."lt_goodsmvt_item-stge_loc = '2021'."存储地点lt_goodsmvt_item-move_type = '531'."移动类型lt_goodsmvt_item-entry_qnt = '1'."以录入项单位表示的数量lt_goodsmvt_item-entry_uom = 'KPC'."单位lt_goodsmvt_item-orderid = '000100000349'."订单号APPEND lt_goodsmvt_item. CLEAR:ls_imseg.ls_imseg-matdoc_itm = l_line_id.ls_imseg-zline = lwa_pcsx-zline. CLEAR:ls_exte.ls_exte-structure = 'BAPI_TE_XMSEG'.ls_exte-valuepart1 = ls_imseg.APPEND ls_exte TO lt_exte. CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = ls_header goodsmvt_code = ls_mode IMPORTING goodsmvt_headret = ls_goodsmvt_headret TABLES goodsmvt_item = lt_goodsmvt_item[] extensionin = lt_exte* goodsmvt_serialnumber = lt_goodsmvt_serialnumber[] return = lt_return.

CLEAR:lv_message,lv_check.

LOOP AT lt_return WHERE type CA 'EAX'. lv_check = 'E'. CONCATENATE lv_message lt_return-message INTO lv_message. CLEAR lt_return.ENDLOOP."BAPI调用成功IF lv_check = 'E'. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'.ENDIF.

"-----------------------------------------@斌将军--------------------------------------------

** 1、生产订单入库 **

MIGO根据生产订单入库时,将生产订单中的字段,写入到批次特性中

** 2、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.

...

斌将军

关于作者:斌将军

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「MIGO创建及增强.md」整理生成,仅用于内部技术分享与学习交流。