全部冲销 (Full reversal)
如果必须取消整个物料凭证, 冲销时把父行项目和他自动产生的行项目一起冲销。则应使用 BAPI_GOODSMVT_CANCEL + BAPI_TRANSACTION_COMMIT 。
冲销凭证存储在 MSEG 中。
BAPI 参数
Import
- MATERIALDOCUMENT:Number of a Material Document
- MATDOCUMENTYEAR:Material Document Year
- GOODSMVT_PSTNG_DATE:Posting Date
- GOODSMVT_PR_UNAME:User Name for Printing Goods Receipt/Issue Slip
Export
- GOODSMVT_HEADRET:系统成功取消物料单据后,返回的凭证号码和凭证年
Tables
- RETURN:BAPI 执行中产生的消息。
- GOODSMVT_MATDOCITEM:可以输入要冲销的物料凭证行项目。 如果该表为空,则取消物料凭证中的所有行项目。
- 如果行项目是自动生成的,且指定了行项目参数,则自动产生的行项目必须要人工指定才会冲销
实例代码
DATA:mat_doc TYPE BAPI2017_GM_HEAD_02-MAT_DOC,
doc_year TYPE BAPI2017_GM_HEAD_02-DOC_YEAR,
pstng_date TYPE BAPI2017_GM_HEAD_02-PSTNG_DATE,
pr_uname TYPE BAPI2017_GM_HEAD_01-PR_UNAME.
DATA:header LIKE BAPI2017_GM_HEAD_RET,
matdoc_item TYPE TABLE OF BAPI2017_GM_ITEM_04 WITH HEADER LINE.
DATA:lt_return LIKE TABLE OF bapiret2,
ls_return LIKE bapiret2.
mat_doc = 'XXXXXXXXXX'.
doc_year = sy-datum(4).
pstng_date = sy-datum.
pr_uname = sy-uname.
CLEAR:matdoc_item[],matdoc_item.
"冲销时把父行项目和他自动产生的行项目一起冲销."
SELECT zeile AS matdoc_item FROM mseg
INTO CORRESPONDING FIELDS OF TABLE matdoc_item
WHERE mblnr = mat_doc
AND urzei = mat_doc_item
AND cancelled NE 'X'.
GOODSMVT_MATDOCITEM-MATDOC_ITEM = 0001.
APPEND GOODSMVT_MATDOCITEM.
CLEAR lt_return[].
CALL FUNCTION 'BAPI_GOODSMVT_CANCEL'
EXPORTING
materialdocument = mat_doc
matdocumentyear = doc_year
goodsmvt_pstng_date = pstng_date
goodsmvt_pr_uname = pr_uname
IMPORTING
goodsmvt_headret = header
TABLES
return = lt_return
goodsmvt_matdocitem = matdoc_item.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
部分冲销 (Partial reversal)
如果原始物料凭证仅应部分冲销(例如,只有整个数量的一部分必须冲销),则应使用 BAPI_GOODSMVT_CREATE,与 BAPI_GOODSMVT_CANCEL 一样,无法更改要冲销的凭证中的任何数据( 比如减少数量)。
BAPI 参数
GOODSMVT_HEADER
- PSTNG_DATE:Posting Date in the Document
- DOC_DATE:Document Date in Document
- REF_DOC_NO:需要被冲销的凭据号
GOODSMVT_CODE:取决于要取消的物料凭证的移动代码
GOODSMVT_ITEM:根据需求输入尽可能详细的数据
- MOVE_TYPE:冲销的移动类型
- MVT_IND:取决于 GOODSMVT_CODE
- XSTOB:X,冲销标志 移动类型为正向
- 冲销时与正常创建凭证一样,移动类型为正向,比如261发料,做262的冲销,移动类型仍给261,不需要修改,此处打叉即可
示例程序
DATA: ls_head LIKE bapi2017_gm_head_01,
lt_item TYPE STANDARD TABLE OF bapi2017_gm_item_create,
ls_item LIKE bapi2017_gm_item_create,
lt_return TYPE STANDARD TABLE OF bapiret2,
ls_return LIKE bapiret2,
ls_headret LIKE bapi2017_gm_head_ret.
PARAMETERS: p_mblnr TYPE mblnr,
p_pstdat LIKE bapi2017_gm_head_01-pstng_date,
p_docdat LIKE bapi2017_gm_head_01-doc_date,
p_matnr LIKE bapi2017_gm_item_create-material,
p_plant LIKE bapi2017_gm_item_create-plant,
p_sloc LIKE bapi2017_gm_item_create-stge_loc,
p_quant LIKE bapi2017_gm_item_create-entry_qnt,
p_batch LIKE bapi2017_gm_item_create-batch..
* Prepare Data for Goods Movement
ls_head-pstng_date = p_pstdat.
ls_head-doc_date = p_docdat.
ls_head-pr_uname = sy-uname.
ls_head-ref_doc_no = p_mblnr.
ls_item-material = p_matnr.
ls_item-plant = p_plant.
ls_item-stge_loc = p_sloc.
ls_item-move_type = '561'.
ls_item-entry_qnt = p_quant.
ls_item-batch = p_batch.
ls_item-xstob = 'X'.
APPEND ls_item TO lt_item.
CLEAR ls_item.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
GOODSMVT_HEADER = ls_head
GOODSMVT_CODE = '05'
IMPORTING
goodsmvt_headret = ls_headret
TABLES
GOODSMVT_ITEM = lt_item
RETURN = lt_return.