BAPI_GOODSMVT_CREATE

这是一个神奇的BAPI,适用于很多很多的TCODE. MIGO MB1C MB1B ,MBST……(很多TCODE其实功能于MIGO重复,卡卡)



There are the following types of transactions/events:

GM_Code 01: Goods receipt for purchase order
GM_Code 02: Goods receipt for production order
GM_Code 03: Goods issue
GM_Code 04: Transfer posting
GM_Code 05: Other goods receipts
GM_Code 06: Reversal of goods movements
GM_Code 07: Subsequent adjustment to a subcontract order



1. Use the Business Object Builder (Transaction SWO1) to enhance method IDocRange.GoodsReceiptExceptionHandle of BOR object type IDOCPUWB. First, this affects, the interface ('Parameters' pushbutton) to which the following two parameters have to be applied:
a) Parameter 'DelNoteQuantity', set the 'Import' flag, with dictionary reference, reference table IMSEG, reference field LSMNG
b) Parameter 'DeliveryNoteUnit', set the 'Import' flag, with dictionary reference, reference table IMSEG, reference field LSMEH
2. Second, the source code of this method has to be enhanced ('Program' pushbutton).
leecz(38408577) 14:30:40

* 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

mb1a 移动类型261对应输入参数:
CLEAR lw_body3.
LOOP AT gt_body3 INTO lw_body3.
lw_goodsmvt_item-plant = ‘1201′.“工厂
lw_goodsmvt_item-stge_loc = ‘L001′.“库存地点
lw_goodsmvt_item-move_type = ‘261′.“移动类型
lw_goodsmvt_item-entry_qnt = lw_ylzl .“数量
lw_goodsmvt_item-entry_uom = ‘KG’.“单位
lw_goodsmvt_item-orderid = lw_body3-ddhm.“订单号
lw_goodsmvt_item-material = lw_body1-yldm.“原料代码
lw_goodsmvt_item-batch = lw_body1-ylph.“原料批号
SELECT SINGLE rsnum rspos “ 预留编号,预留项目编号
INTO (lw_goodsmvt_item-reserv_no,lw_goodsmvt_item-res_item)
FROM resb
WHERE aufnr = lw_body3-ddhm
AND matnr = lw_body1-yldm.
APPEND lw_goodsmvt_item to lt_goodsmvt_item.
ENDLOOP.
ENDLOOP.
IF lt_goodsmvt_item is NOT INITIAL.
CALL FUNCTION ‘BAPI_GOODSMVT_CREATE’
EXPORTING
GOODSMVT_HEADER = lw_goodsmvt_header
GOODSMVT_CODE = ‘03′
IMPORTING
GOODSMVT_HEADRET = lw_goodsmvt_headret
MATERIALDOCUMENT = lw_materialdocument
MATDOCUMENTYEAR = lw_matdocumentyear
TABLES
GOODSMVT_ITEM = lt_goodsmvt_item
RETURN = lt_return.
IF lw_materialdocument IS NOT INITIAL.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’.

mb31 移动类型122:
CLEAR lw_body2.
REFRESH lt_goodsmvt_item.
CLEAR:lw_goodsmvt_headret,lw_materialdocument,lw_matdocumentyear,lw_goodsmvt_item.
LOOP AT gt_body2 INTO lw_body2 WHERE gz <> ‘Y’.
IF lw_body2-yddh = lw_body2-fgddh.
“同订单,MB31,移动类型122
lw_goodsmvt_item-plant = ‘1201′.“工厂别
lw_goodsmvt_item-stge_loc = ‘L001′. “库位
lw_goodsmvt_item-move_type = ‘122′. “移动类型
lw_goodsmvt_item-batch = lw_body2-fgoph.“批号
lw_goodsmvt_item-entry_qnt = lw_body2-zl.“数量
lw_goodsmvt_item-entry_uom = ‘KG’. “单位
lw_goodsmvt_item-orderid = lw_body2-fgddh. “订单号
SELECT SINGLE posnr INTO lw_posnr
FROM afpo
WHERE aufnr = lw_body2-fgddh
AND matnr = lw_body2-fgpdm.
lw_p2_goodsmvt_item-order_itno = lw_posnr.“订单项目编号
lw_p2_goodsmvt_item-MOVE_REAS = ‘0002′.“移动原因
lw_p2_goodsmvt_item-mvt_ind = ‘F’. “移动标识
APPEND lw_goodsmvt_item to lt_goodsmvt_item.
ENDIF.
endloop.
IF lt_goodsmvt_item is NOT INITIAL .
CALL FUNCTION ‘BAPI_GOODSMVT_CREATE’
EXPORTING
GOODSMVT_HEADER = lw_goodsmvt_header
GOODSMVT_CODE = ‘02′
IMPORTING
GOODSMVT_HEADRET = lw_goodsmvt_headret
MATERIALDOCUMENT = lw_materialdocument
MATDOCUMENTYEAR = lw_matdocumentyear
TABLES
GOODSMVT_ITEM = lt_goodsmvt_item
RETURN = lt_return.
IF lw_materialdocument IS NOT INITIAL.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’.

货物移动的bapi BAPI_GOODSMVT_CREATE

*物料凭证的抬头数据
DATA:

li_gm_head TYPE STANDARD TABLE OF bapi2017_gm_head_01,
l_gm_head LIKE bapi2017_gm_head_01,
*为BAPI货物移动分配事务代码
li_gm_code TYPE STANDARD TABLE OF bapi2017_gm_code,
l_gm_code LIKE bapi2017_gm_code,

*返回单据号码
l_mat_doc LIKE bapi2017_gm_head_ret-mat_doc,

*凭证项目
li_gm_item TYPE STANDARD TABLE OF bapi2017_gm_item_create,
l_gm_item LIKE bapi2017_gm_item_create,

*-------------------------
li_return TYPE STANDARD TABLE OF bapiret2,
l_return TYPE bapiret2,
*Error flag
l_errflag(1) TYPE c.

*&---------------------------------------------------------------------*
*& Form CALLBAPI
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*填写表头数据

l_gm_head-pstng_date = sy-datum.
l_gm_head-doc_date = sy-datum.
APPEND l_gm_head TO li_gm_head.
*分配事务代码
l_gm_code-gm_code = '03'.
APPEND l_gm_code TO li_gm_code.

*发货明细
l_gm_item-material = '000000003102000245'. "10 410A
l_gm_item-plant = '1201'.
l_gm_item-stge_loc = '1006'.
l_gm_item-move_type = '261'. "移动类型(库存管理)
* l_gm_item-mvt_ind = 'F'.
l_gm_item-entry_qnt = '1'.
l_gm_item-entry_uom = 'EA'.
l_gm_item-orderid = '000010003579'. "MO号
l_gm_item-reserv_no = '0000107118'. "预留/相关需求的编号 RESB~RSNUM
l_gm_item-res_item = '0019'. " 预留 / 相关需求的项目编号 RESB~RSPOS
* l_gm_item-XSTOB = 'X'. “冲销标志,不修改移动类型261,做完以后也是262;使用262,但此处不设置还是261.
gm_code = 03 和 05 此处都是对的,不知道是不是bugger
APPEND l_gm_item TO li_gm_item.

CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = l_gm_head
goodsmvt_code = '03'
* RETURN
IMPORTING
* GOODSMVT_HEADRET = L_MAT_DOC
materialdocument = l_mat_doc
TABLES
goodsmvt_item = li_gm_item
return = li_return
.
CLEAR l_errflag.
MESSAGE i005(ymess) WITH l_mat_doc.

IF l_errflag IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ELSE.
MESSAGE i005(ymess) WITH 'ERROR'.
ENDIF.
其中 参数 : GOODSMVT_CODE 有
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
* 07 - MB04
事物代码MBST凭证冲销 BAPI BAPI_GOODSMVT_CANCEL
获得凭证明细 BAPI BAPI_GOODSMVT_GETDETAIL
根据物料 工厂 移动类型 记账日期 创建人 等查询凭证 BAPI BAPI_GOODSMVT_GETITEMS
SAP内部使用 BAPI BAPI_GOODSMVT_SAPCREATE

*&---------------------------------------------------------------------*

*& Report ZFY_TEST2

*&

*&---------------------------------------------------------------------*

*&

*&

*&---------------------------------------------------------------------*



REPORT zfy_test2.

DATA: gt_goodsmvt_header LIKE bapi2017_gm_head_01,

gt_goodsmvt_item LIKE bapi2017_gm_item_create OCCURS 0 WITH HEADER LINE,

gt_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.

DATA: gt_goodsmvt_headret LIKE bapi2017_gm_head_ret,

goodsmvt_code_tmp TYPE bapi2017_gm_code,

testrun TYPE c VALUE 'X'.

DATA: l_return LIKE bapiret2.



TABLES lips.



PARAMETERS p_vbeln LIKE lips-vbeln. " Delivery number



START-OF-SELECTION.

gt_goodsmvt_header-pstng_date = sy-datum.

gt_goodsmvt_header-doc_date = sy-datum.



SELECT * FROM lips INTO lips

WHERE vbeln = p_vbeln.

***<<<<<<<<<<<BAPI Communication Structure: Material Document Header Data>>>>>>>

gt_goodsmvt_item-material = lips-matnr .

gt_goodsmvt_item-plant = lips-werks.

gt_goodsmvt_item-stge_loc = lips-lgort.

gt_goodsmvt_item-deliv_numb_to_search = lips-vbeln.

gt_goodsmvt_item-deliv_item_to_search = lips-posnr.

gt_goodsmvt_item-move_type = lips-bwart . "'101'.

gt_goodsmvt_item-entry_qnt = lips-lfimg . "'50'.

gt_goodsmvt_item-entry_uom = lips-vrkme.

gt_goodsmvt_item-mvt_ind = lips-kzbew.

gt_goodsmvt_item-po_number = lips-vgbel.

gt_goodsmvt_item-po_item = lips-vgpos.

gt_goodsmvt_item-no_more_gr = 'X'.

APPEND gt_goodsmvt_item.

ENDSELECT.

goodsmvt_code_tmp = '01'. "Assign code to transaction for BAPI goods movement

****<<<<<<<Post goods movements with MB_CREATE_GOODS_MOVEMENT>>>>>>>>>>>>>>>>>>>

CALL FUNCTION 'BAPI_GOODSMVT_CREATE'

EXPORTING

goodsmvt_header = gt_goodsmvt_header

goodsmvt_code = goodsmvt_code_tmp

* testrun = testrun

IMPORTING

goodsmvt_headret = gt_goodsmvt_headret

TABLES

goodsmvt_item = gt_goodsmvt_item

* GOODSMVT_SERIALNUMBER =

return = gt_return.



IF gt_return[] IS INITIAL.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

wait = 'X'

IMPORTING

return = l_return.



WRITE:/3 'ASN Number', gt_goodsmvt_item-deliv_numb_to_search,

/3 'Item',gt_goodsmvt_item-deliv_item_to_search.

ELSE.

READ TABLE gt_return INDEX 1.

WRITE: '~ERROR~',

/ gt_return-message.

ENDIF.
Here is some sample code from one of my programs, which does a 551 movement type. This should get you started. Just check the RETURN table for messages, they should tell you what you are missing.

* Structures for BAPI
data: gm_header type bapi2017_gm_head_01.
data: gm_code type bapi2017_gm_code.
data: gm_headret type bapi2017_gm_head_ret.
data: gm_item type table of
bapi2017_gm_item_create with header line.
data: gm_return type bapiret2 occurs 0.
data: gm_retmtd type bapi2017_gm_head_ret-mat_doc.

clear: gm_return, gm_retmtd. refresh gm_return.


* Setup BAPI header data.
gm_header-pstng_date = sy-datum.
gm_header-doc_date = sy-datum.
gm_code-gm_code = '06'. " MB11

* Write 551 movement to table
clear gm_item.
move '551' to gm_item-move_type .
move '000000000040001234' to gm_item-material.
move '1' to gm_item-entry_qnt.
move 'EA' to gm_item-entry_uom.
move '0004' to gm_item-plant.
move '4000' to gm_item-stge_loc.
move '201' to gm_item-move_reas.

* Determine cost center per plant
case xresb-werks.
when '0004'.
move '0000041430' to gm_item-costcenter.
when '0006'.
move '0000041630' to gm_item-costcenter.
when '0007'.
move '0000041731' to gm_item-costcenter.
when '0008'.
move '0000041830' to gm_item-costcenter.
endcase.

append gm_item.

* Call goods movement BAPI
call function 'BAPI_GOODSMVT_CREATE'
exporting
goodsmvt_header = gm_header
goodsmvt_code = gm_code
importing
goodsmvt_headret = gm_headret
materialdocument = gm_retmtd
tables
goodsmvt_item = gm_item
return = gm_return.

call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.





Welcome to abap 贴吧! Please remember to award points for helpful answers and mark you post as solved when solved completely. Thanks.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值