**目录**
—
** 1、BAPI进行MIGO过账新增字段 **
BAPI新增收货行号字段,保存外围系统的数据
** 2、MATDOC表新增收货行号 **
** 3、MSEG表新增收货行号 **
创建DDL视图用于扩展NSDM_E_MSEG
** 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.
...