PERFORM frm_goodsmvt_create.
*&---------------------------------------------------------------------*
*& Form frm_goodsmvt_create
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_goodsmvt_create .
DATA: ls_header TYPE bapi2017_gm_head_01,
ls_code TYPE bapi2017_gm_code,
lv_mat_doc TYPE bapi2017_gm_head_ret-mat_doc,
lv_doc_year TYPE bapi2017_gm_head_ret-doc_year,
lt_return TYPE TABLE OF bapiret2,
lt_item TYPE TABLE OF bapi2017_gm_item_create,
ls_item TYPE bapi2017_gm_item_create,
ls_exten_val TYPE TABLE OF zmms_mseg_ext,
lt_exten TYPE TABLE OF bapiparex,
ls_exten TYPE bapiparex.
CLEAR: ls_header, ls_code, lv_mat_doc, lv_doc_year.
REFRESH: lt_return, lt_item, lt_exten.
" 根据T158B移动类型过滤出M*开头的TCODE, 后在T158G表根据TCODE找GM_CODE, 选择其中一个就可以了,
" 或参考旧版本使用哪个TCODE直接以它找对应的GM_CODE(OMJJ配置T158B内容)
" 01 MB01
" 02 MB31
" 03 MB1A
" 04 MB1B
" 05 MB1C
" 06 MB11
" 07 MB04
" 移动类型分配事务代码
ls_code-gm_code = 'GM_CODE'.
" 抬头
ls_header-pstng_date = 'BUDAT'. " 过账日期
ls_header-doc_date = 'BLDAT'. " 凭证日期
ls_header-ref_doc_no = 'XBLNR'. " 参考凭证编号
ls_header-bill_of_lading = 'FRBNR'. " 收货时提单号
ls_header-gr_gi_slip_no = 'XABLN'. " 收货/发货单编号
ls_header-pr_uname = 'UNAME'. " 用户名
ls_header-header_txt = 'BKTXT'. " 抬头文本
ls_header-ref_doc_no_long = 'XBLNR_LONG'. " 参考凭证号(对相关性参看长文本)
ls_header-bill_of_lading_long = 'FRBNR_LONG'. " 组的捡配单编号
ls_header-bar_code = 'SAEBARCODE'. " 条形码
" 行项目
ls_item-move_type = 'BWART'. " 移动类型
ls_item-material = 'MATNR'. " 商品编码
ls_item-entry_qnt = 'MENGE'. " 数量
ls_item-entry_uom = 'MEINS'. " 单位
ls_item-item_text = 'SGTXT'. " 行项目文本
ls_item-profit_ctr = 'PRCTR'. " 利润中心
ls_item-costcenter = 'KOSTL'. " 成本中心
ls_item-orderid = 'AUFNR'. " 生产订单
ls_item-reserv_no = 'RSNUM'. " 预留
ls_item-res_item = 'RSPOS'. " 预留行项目
ls_item-po_number = 'EBELN'. " 采购订单
ls_item-po_item = 'EBELP'. " 采购行项目
ls_item-vendor = 'LIFNR'. " 供应商
ls_item-customer = 'KUNNR'. " 客户
ls_item-sales_ord = 'VBELN_VA'. " 销售订单
ls_item-s_ord_item = 'POSNR_VA'. " 销售行项目
ls_item-sched_line = 'ETENR'. " 计划行
ls_item-val_type = 'BWTAR'. " 评估类型
ls_item-deliv_numb_to_search = 'VBELN_VL'. " 交货
ls_item-deliv_item_to_search = 'POSNR_VL'. " 交货项目
CASE ls_item-move_type.
WHEN '311'. " 调拨
ls_item-plant = 'WERKS'. " 发货工厂
ls_item-stge_loc = 'LGORT'. " 发货库存地点
ls_item-batch = 'CHARG'. " 发货批次
ls_item-move_plant = 'UMWRK'. " 收货工厂
ls_item-move_stloc = 'UMLGO'. " 收货库存地点
ls_item-move_batch = 'UMCHA'. " 收货批量
WHEN OTHERS.
ls_item-plant = 'WERKS'. " 工厂
ls_item-stge_loc = 'LGORT'. " 库存地点
ls_item-batch = 'CHARG'. " 库存地点
ENDCASE.
IF ls_item-move_type = '101'.
" B 按采购订单的货物移动
" F 有关生产单的货物移动
" L 有关交货通知的货物移动
" K 看板需求的货物移动
" O "提供物料"消耗的后续调整
" W 比例的后续调整/产品单位物料
IF ls_item-po_number IS NOT INITIAL AND ls_item-po_item IS NOT INITIAL.
ls_item-mvt_ind = 'B'.
ELSEIF ls_item-orderid IS NOT INITIAL.
ls_item-mvt_ind = 'F'.
ENDIF.
ENDIF.
APPEND ls_item TO lt_item.
CLEAR ls_item.
" 扩展字段
ls_exten_val = VALUE #(
line_id = 'LINE_ID' " 参考数据元素MB_LINE_ID NUMC06 , 赋值行项目必输
zzmatnr = '增强字段'
zzmaktx = '增强字段'
).
ls_exten-structure = 'ZMMS_MSEG_EXT'.
CALL METHOD cl_abap_container_utilities=>fill_container_c
EXPORTING
im_value = ls_exten_val
IMPORTING
ex_container = ls_exten+30
EXCEPTIONS
illegal_parameter_type = 1
OTHERS = 2.
APPEND ls_exten TO lt_exten.
CLEAR ls_exten.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = ls_header
goodsmvt_code = ls_code
testrun = 'TESTRUN' " 启用测试, 赋值X或变量控制
IMPORTING
materialdocument = lv_mat_doc
matdocumentyear = lv_doc_year
TABLES
goodsmvt_item = lt_item
return = lt_return.
IF 'TESTRUN' = abap_true.
LOOP AT lt_return INTO DATA(ls_return) WHERE type CA 'EAX'.
CONCATENATE lv_zmsg ls_return-message INTO DATA(lv_zmsg).
ENDLOOP.
IF lv_zmsg IS NOT INITIAL.
CONCATENATE '模拟过账失败' lv_zmsg INTO lv_zmsg.
ELSE.
lv_zmsg = '模拟过账成功'.
ENDIF.
ELSE.
IF lv_mat_doc IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
" lv_mat_doc 物料凭证
" lv_doc_year 凭证年度
lv_zmsg = '过账成功'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
lv_zmsg = '过账失败'.
ENDIF.
ENDIF.
ENDFORM.
*--------------------------------------------------------------------*
* BADI: MB_BAPI_GOODSMVT_CREATE
* EXTENSIONIN_TO_MATDOC
* 扩展字段时先确认CS_IMKPF和CT_IMSEG结构中有字段, 否则赋值无效
*--------------------------------------------------------------------*
* EXTENSION_IN TYPE BAPIPAREX_T
* CS_IMKPF TYPE IMKPF
* CT_IMSEG TYPE TY_T_IMSEG
* CT_RETURN TYPE BAPIRET2
DATA: wa_extension TYPE bapiparex,
ext_value(960) TYPE c,
wa_accit TYPE accit,
l_ref TYPE REF TO data.
FIELD-SYMBOLS: <l_struc> TYPE any,
<l_field> TYPE any.
CHECK NOT extension_in[] IS INITIAL.
SORT extension_in BY structure.
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 DATA(wa_extension_in).
AT NEW structure.
CREATE DATA lr_data TYPE (wa_extension_in-structure).
ASSIGN lr_data->* TO <l_struc>.
ENDAT.
ex_value = wa_extension_in+30.
** CONCATENATE wa_extension_in-valuepart1
** wa_extension_in-valuepart2
** wa_extension_in-valuepart3
** wa_extension_in-valuepart4 INTO ex_value.
<l_struc> = ext_value.
ASSIGN COMPONENT 'LINE_ID' OF STRUCTURE <l_struc> TO <l_field>.
IF <l_field> IS ASSIGNED.
READ TABLE ct_imseg WITH KEY line_id = <l_field> ASSIGNING FIELD-SYMBOL(<fs_imseg>).
IF sy-subrc EQ 0.
MOVE-CORRESPONDING <l_struc> TO <fs_imseg>.
ELSE.
MOVE-CORRESPONDING <l_struc> TO cs_imkpf.
ENDIF.
ENDIF.
ENDLOOP.
07-29
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交