物料转移过账BAPI_GOODSMVT_CREATE

物料转移过账BAPI_GOODSMVT_CREATE
<!--StartFragment --><!--StartFragment -->REPORTzppmm_mb1b.
TABLES:mseg,
mkpf,
rm07m,
t158b,
t001l,
msegk.


DATA:mat_docLIKEbapi2017_gm_head_ret-mat_doc.

DATA:save_codeLIKEsy-ucomm,
ok_codeLIKEsy-ucomm,
loc_msg(50),
gmngaLIKEafru-gmnga,
mtsnrLIKErm07m-mtsnr,
errflag..

DATA:BEGINOFgt_afpoOCCURS0.
INCLUDESTRUCTUREafpo.
DATA:ENDOFgt_afpo.

DATA:gmheadLIKEbapi2017_gm_head_01.

DATA:BEGINOFgmcode.
INCLUDESTRUCTUREbapi2017_gm_code.
DATA:ENDOFgmcode.

DATA:BEGINOFmthead.
INCLUDESTRUCTUREbapi2017_gm_head_ret.
DATA:ENDOFmthead.

DATA:BEGINOFitabOCCURS100.
INCLUDESTRUCTUREbapi2017_gm_item_create.
DATA:ENDOFitab.

DATA:BEGINOFerrmsgOCCURS10.
INCLUDESTRUCTUREbapiret2.
DATA:ENDOFerrmsg.

INITIALIZATION.
t001l-lgort='1051'.
mseg-lgort='1050'.
mseg-werks='1000'.
mkpf-bldat=sy-datum.
mkpf-budat=sy-datum.
t158b-bwart='311'.
rm07m-sobkz='E'.
rm07m-werks='1000'.
rm07m-lgort='1050'.
mseg-erfme='PC'.
gmcode-gm_code='04'."MB1B
CALLSCREEN100.

*&----------------------------------------------------*
*&ModuleSTATUS_0100OUTPUT
*&-----------------------------------------------------*
*text
*--------------------------------------------------------*
MODULEstatus_0100OUTPUT.
SETPF-STATUS'FOR0100'.
SETTITLEBAR'100'.

ENDMODULE."STATUS_0100OUTPUT
*&--------------------------------------------------*
*&ModuleUSER_COMMAND_0100INPUT
*&----------------------------------------------------*
*text
*-----------------------------------------------------*
MODULEuser_command_0100INPUT.
save_code=ok_code.
CLEARok_code.
CASEsave_code.
WHEN'SAVE'.
PERFORMform_save.
WHEN'EXIT'OR'BACK'.
LEAVETOSCREEN0.
WHEN'CLOSE'.
LEAVEPROGRAM.
ENDCASE.
ENDMODULE."USER_COMMAND_0100INPUT
*&-----------------------------------------------------*
*&FormFORM_SAVE
*&-------------------------------------------------*
*text
*---------------------------------------------------------*
*-->p1text
*<--p2text
*---------------------------------------------------*
FORMform_save.
IFmkpf-bldat=''
ORmkpf-budat=''
ORrm07m-mtsnr=''
ORmseg-matnr=''
ORmseg-lgort=''
ORmseg-erfmg=''
ORmseg-erfme=''
ORt001l-lgort=''
ORmsegk-mat_kdauf=''
ORmsegk-mat_kdpos=''.
MESSAGEi000(znyj13)WITH'信息不完整'.
RETURN.
ENDIF.
IFgmnga<mseg-erfmg.
MESSAGEi000(znyj13)WITH'移动数量应小于确认数量'.
mseg-erfmg=''.
RETURN.
ENDIF.
gmhead-pstng_date=sy-datum."mkpf-bldat.
gmhead-doc_date=sy-datum."mkpf-budat.
gmhead-ref_doc_no=rm07m-mtsnr.
gmhead-pr_uname=sy-uname.
gmhead-header_txt=mkpf-bktxt.
*APPENDgmhead.


itab-material=mseg-matnr.
itab-plant='1000'.
itab-stge_loc=mseg-lgort.
itab-move_type=t158b-bwart."rm07m-bwartwa.
itab-spec_stock=rm07m-sobkz.
itab-entry_qnt=mseg-erfmg.
itab-entry_uom=mseg-erfme.
*itab-batch=mseg-charg.
*itab-orderid=rm07m-mtsnr.
*itab-order_itno=msegk-mat_kdpos.
itab-move_mat=mseg-matnr.
itab-move_plant='1000'.
itab-move_stloc=t001l-lgort.
itab-val_sales_ord=msegk-mat_kdauf.
itab-val_s_ord_item=msegk-mat_kdpos.
itab-nb_slips=1.

APPENDitab.
CALLFUNCTION'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header=gmhead
goodsmvt_code=gmcode
IMPORTING
goodsmvt_headret=mthead
materialdocument=mat_doc
TABLES
goodsmvt_item=itab
return=errmsg.

LOOPATerrmsg.
CLEARloc_msg.
CONCATENATE'过帐成功!'errmsg-messageINTOloc_msg.
IFerrmsg-typeEQ'E'.

MESSAGEerrmsg-messageTYPE'E'.
errflag='X'.
ELSE.
MESSAGEloc_msgTYPE'S'.
ENDIF.
ENDLOOP.


IFerrflagISINITIAL.
COMMITWORKANDWAIT.
CLEARloc_msg.
IFsy-subrcNE0.

MESSAGE'过帐操作出现错误,请稍后重试!'TYPE'E'.
EXIT.
ELSE.

CONCATENATE'物料凭证:'mat_doc'已成功创建!'INTOloc_msg.
MESSAGEi000(znyj13)WITHloc_msg.

gmhead-ref_doc_no=''.
gmhead-header_txt=''.
mseg-matnr=''.
msegk-mat_kdauf=''.
msegk-mat_kdpos=''.
mseg-erfmg=''.
rm07m-mtsnr=''.
gmnga=''.
mkpf-bktxt=''.
ENDIF.
ELSE.
MESSAGE'这不是正确的发料单或者已经创建凭证!'TYPE'E'.
ENDIF.

CALLFUNCTION'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait='X'.

ENDFORM."FORM_SAVE
*&-----------------------------------------------*
*&ModuleRM07M-MTSNRINPUT
*&----------------------------------------------*
*text
*------------------------------------------------*
MODULErm07m-mtsnrINPUT.
CONCATENATE'0000'rm07m-mtsnrINTOmtsnr.
*SELECTSINGLEgmngaINTOgmngaFROMafruWHEREaufnr=rm07m-mtsnr.
IFsy-subrc=0.
SELECT*INTOCORRESPONDINGFIELDSOFTABLEgt_afpo
FROMafpo
WHEREaufnr=mtsnr.
IFsy-subrc=0.
READTABLEgt_afpoINDEX1.
msegk-mat_kdauf=gt_afpo-kdauf.
msegk-mat_kdpos=gt_afpo-kdpos.
mseg-matnr=gt_afpo-matnr.
gmnga=gt_afpo-wemng.
ENDIF.
ELSE.
CONCATENATE'订单:'rm07m-mtsnr'不存在!'INTOloc_msg.
MESSAGEi000(znyj13)WITHloc_msg.

RETURN.
ENDIF.
ENDMODULE."RM07M-MTSNRINPUT
<!--StartFragment --> PROCESSBEFOREOUTPUT.
MODULESTATUS_0100.
*
PROCESSAFTERINPUT.
MODULEUSER_COMMAND_0100.
FIELDRM07M-MTSNRMODULERM07M-MTSNRONREQUEST.
* BAPI TO Upload Inventory Data
*
* GMCODE Table T158G - 01 - MB01 - Goods Receipts for Purchase Order
* 02 - MB31 - Goods Receipts for Prod Order
* 03 - MB1A - Goods Issue
* 04 - MB1B - Transfer Posting
* 05 - MB1C - Enter Other Goods Receipt
* 06 - MB11
*
* Domain: KZBEW - Movement Indicator
* Goods movement w/o reference
* B - Goods movement for purchase order
* F - Goods movement for production order
* L - Goods movement for delivery note
* K - Goods movement for kanban requirement (WM - internal only)
* O - Subsequent adjustment of "material-provided" consumption
* W - Subsequent adjustment of proportion/product unit material

GMCODE Table T158G - 01 - MB01 - Goods Receipts for Purchase Order
* 02 - MB31 - Goods Receipts for Prod Order
* 03 - MB1A - Goods Issue
* 04 - MB1B - Transfer Posting
* 05 - MB1C - Enter Other Goods Receipt
* 06 - MB11

BAPI_GOODSMVT_CREATE是SAP系统标准函数,可用于采购订单收货创建等操作。要使用BAPI_GOODSMVT_CREATE实现退货PO入库,以下是一般的步骤和示例代码: ### 数据准备 在调用BAPI之前,需要准备好必要的数据,如移动类型、物料、数量、工厂、库存地点等。对于退货PO入库,移动类型通常是特定的退货移动类型。 ### 代码示例 ```abap REPORT z_return_po_goods_receipt. DATA: lt_goodsmvt_item TYPE TABLE OF bapigoodsmvtitem, ls_goodsmvt_item TYPE bapigoodsmvtitem, lt_goodsmvt_header TYPE TABLE OF bapigoodsmvtheader, ls_goodsmvt_header TYPE bapigoodsmvtheader, lt_return TYPE TABLE OF bapiret2, lv_mat_doc TYPE bapi2017_gm_head_ret-matdoc, lv_mat_doc_year TYPE bapi2017_gm_head_ret-matyear. * 填充抬头数据 ls_goodsmvt_header-pstng_date = sy-datum. " 过账日期 ls_goodsmvt_header-doc_date = sy-datum. " 凭证日期 APPEND ls_goodsmvt_header TO lt_goodsmvt_header. * 填充项目数据 ls_goodsmvt_item-move_type = '122'. " 退货移动类型,根据实际情况调整 ls_goodsmvt_item-material = 'MATERIAL_NUMBER'. " 物料编号 ls_goodsmvt_item-plant = 'PLANT_CODE'. " 工厂代码 ls_goodsmvt_item-stge_loc = 'STORAGE_LOCATION'. " 库存地点 ls_goodsmvt_item-entry_qnt = '10'. " 数量 ls_goodsmvt_item-po_number = 'PO_NUMBER'. " 采购订单号 ls_goodsmvt_item-po_item = 'PO_ITEM_NUMBER'. " 采购订单项目号 APPEND ls_goodsmvt_item TO lt_goodsmvt_item. * 调用BAPI CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = ls_goodsmvt_header IMPORTING materialdocument = lv_mat_doc matdocumentyear = lv_mat_doc_year TABLES goodsmvt_item = lt_goodsmvt_item return = lt_return. * 检查返回消息 LOOP AT lt_return INTO DATA(ls_return) WHERE type CA 'EAX'. WRITE:/ '错误:', ls_return-message. EXIT. ENDLOOP. IF sy-subrc <> 0. WRITE:/ '物料凭证:', lv_mat_doc, ' 年度:', lv_mat_doc_year. ENDIF. ``` ### 代码解释 1. **数据声明**:声明了必要的内表和结构体,用于存储抬头数据、项目数据和返回消息。 2. **填充抬头数据**:设置过账日期和凭证日期。 3. **填充项目数据**:设置移动类型、物料编号、工厂、库存地点、数量、采购订单号和项目号等。 4. **调用BAPI**:调用BAPI_GOODSMVT_CREATE函数执行货物移动。 5. **检查返回消息**:检查返回消息,如果有错误消息则输出错误信息,否则输出物料凭证号和年度。 ### 注意事项 - 移动类型`122`是示例,实际使用时需要根据业务需求选择正确的移动类型。 - 物料编号、工厂、库存地点、采购订单号和项目号等数据需要根据实际情况进行替换。 - 确保用户有足够的权限执行货物移动操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值