FUNCTION zrfc_mes_017 .
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_MBLNR) TYPE MBLNR OPTIONAL
*" VALUE(I_ZEILE) TYPE MBLPO OPTIONAL
*" VALUE(I_MJAHR) TYPE MJAHR OPTIONAL
*" VALUE(I_BKTXT) TYPE BKTXT OPTIONAL
*" VALUE(I_VBELN) TYPE VBELN_VL OPTIONAL
*" EXPORTING
*" VALUE(ZSTATUS) TYPE CHAR01
*" VALUE(ZMSG) TYPE CHAR50
*" VALUE(ZMBLNR) TYPE MBLNR
*" VALUE(ZYEAR) TYPE MJAHR
*"----------------------------------------------------------------------
DATA lv_bapi2017_gm_head_ret TYPE bapi2017_gm_head_ret."冲销PO收货的返回物料凭证号
DATA : lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE.
DATA :lt_goodsmvt_matdocitem TYPE TABLE OF bapi2017_gm_item_04 WITH HEADER LINE .
DATA: lv_time TYPE erzet.
****************过账日期 QJ 20240807****************STA
DATA: lv_budat TYPE mkpf-budat.
SELECT SINGLE budat
FROM mkpf INTO lv_budat
WHERE mkpf~mblnr = i_mblnr AND mkpf~mjahr = i_mjahr.
****************过账日期 QJ 20240807****************END
IF i_vbeln IS NOT INITIAL.
"该函数在此版中存在一定问题,先用录屏替代
* DATA ls_emkpf TYPE emkpf.
* DATA lt_mesgx TYPE mesg OCCURS 0 WITH HEADER LINE.
*
i_vbeln = |{ i_vbeln ALPHA = IN }|. "增加前导零
*
* CALL FUNCTION 'WS_REVERSE_GOODS_ISSUE'
* EXPORTING
* i_vbeln = i_vbeln
* i_budat = sy-datum
* i_tcode = 'VL09'
* i_vbtyp = 'J'
* IMPORTING
* es_emkpf = ls_emkpf
* TABLES
* t_mesg = lt_mesgx
* EXCEPTIONS
* error_reverse_goods_issue = 1
* OTHERS = 2.
* COMMIT WORK.
* WAIT UP TO 1 SECONDS.
* IF ls_emkpf IS NOT INITIAL.
* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* wait = 'X'.
* zstatus = 'S'.
* zmsg = '冲销成功'.
* zmblnr = ls_emkpf-mblnr.
* zyear = ls_emkpf-mjahr.
* ELSE.
* CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
* zstatus = 'E'.
* zmsg = '冲销失败'.
* LOOP AT lt_return.
*
* zmsg = zmsg && lt_mesgx-text .
* ENDLOOP.
* ENDIF.
PERFORM bdc_dynpro USING 'RVV50L09' '1000'.
PERFORM bdc_field USING 'BDC_CURSOR' 'I_VSTEL-LOW'.
PERFORM bdc_field USING 'I_VBELN-LOW' i_vbeln.
PERFORM bdc_field USING 'LF_ANAUS' 'X'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ONLI'.
CALL TRANSACTION 'VL09' USING bdcdata
MODE gv_mode
UPDATE 'S'
* options from X_OPTIONS
MESSAGES INTO messtab.
DATA: msgno TYPE sy-msgno,
message TYPE message.
READ TABLE messtab WITH KEY msgtyp = 'S' .
* IF sy-subrc = 0.
IF messtab[] IS INITIAL OR sy-subrc = 0.
zstatus = 'S'.
zmsg = '冲销成功'.
SELECT mblnr,mjahr INTO TABLE @DATA(gt_tab) FROM mkpf WHERE le_vbeln = @i_vbeln.
SORT gt_tab BY mblnr.
READ TABLE gt_tab INTO DATA(gs_tab) INDEX lines( gt_tab ).
IF sy-subrc = 0.
zmblnr = gs_tab-mblnr.
zyear = gs_tab-mjahr.
ENDIF.
ELSE.
LOOP AT messtab WHERE msgtyp = 'E' OR msgtyp = 'A'.
MOVE messtab-msgnr TO msgno.
CALL FUNCTION 'WRITE_MESSAGE'
EXPORTING
msgid = messtab-msgid
msgno = msgno
msgty = messtab-msgtyp
msgv1 = messtab-msgv1
msgv2 = messtab-msgv2
msgv3 = messtab-msgv3
msgv4 = messtab-msgv4
IMPORTING
messg = message.
* if MESSTAB-MSGTYP = 'E'.
CONCATENATE l_msg message-msgtx ';' INTO l_msg .
CLEAR: msgno,message.
* endif.
ENDLOOP.
zstatus = 'E'.
zmsg = '冲销失败'.
zmsg = zmsg && l_msg.
ENDIF.
ELSE.
IF i_zeile IS INITIAL.
CALL FUNCTION 'BAPI_GOODSMVT_CANCEL'
EXPORTING
materialdocument = i_mblnr
matdocumentyear = i_mjahr
goodsmvt_pstng_date = lv_budat
" goodsmvt_pr_uname = 'RFCUSER'
IMPORTING
goodsmvt_headret = lv_bapi2017_gm_head_ret
TABLES
return = lt_return.
* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* wait = 'X'.
IF lv_bapi2017_gm_head_ret-mat_doc IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
zstatus = 'S'.
zmsg = '冲销成功'.
zmblnr = lv_bapi2017_gm_head_ret-mat_doc.
zyear = lv_bapi2017_gm_head_ret-doc_year.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
zstatus = 'E'.
zmsg = '冲销失败'.
LOOP AT lt_return.
zmsg = zmsg && lt_return-message .
ENDLOOP.
" zmblnr = lv_bapi2017_gm_head_ret-mat_doc.
" zyear = lv_bapi2017_gm_head_ret-doc_year.
ENDIF.
ELSE.
lt_goodsmvt_matdocitem-matdoc_item = i_zeile.
APPEND lt_goodsmvt_matdocitem.
CALL FUNCTION 'BAPI_GOODSMVT_CANCEL'
EXPORTING
materialdocument = i_mblnr
matdocumentyear = i_mjahr
goodsmvt_pstng_date = lv_budat
" goodsmvt_pr_uname = 'RFCUSER'
IMPORTING
goodsmvt_headret = lv_bapi2017_gm_head_ret
TABLES
goodsmvt_matdocitem = lt_goodsmvt_matdocitem[]
return = lt_return.
IF lv_bapi2017_gm_head_ret-mat_doc IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
zstatus = 'S'.
zmsg = '冲销成功'.
zmblnr = lv_bapi2017_gm_head_ret-mat_doc.
zyear = lv_bapi2017_gm_head_ret-doc_year.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
zstatus = 'E'.
zmsg = '冲销失败'.
LOOP AT lt_return.
zmsg = zmsg && lt_return-message .
ENDLOOP.
" zmblnr = lv_bapi2017_gm_head_ret-mat_doc.
" zyear = lv_bapi2017_gm_head_ret-doc_year.
ENDIF.
ENDIF.
ENDIF.
ENDFUNCTION.
接口名称 | 取消物料凭证接口 | 接口描述 | | 函数名称 | ZRFC_MES_017 |
接口表: |
字段描述 | SAP字段 | WMS | 来源 | 多语言 | 备注 |
字段 | 是否必填 | 数据类型 | 长度 | 字段 | 类型 |
表头参数 |
物料凭证号 | I_MBLNR | 是 | CHAR | 10 | | | | | 凭证取消后,不能对取消凭证进行再取消 |
物料凭证行号 | I_ZEILE | | NUMC | 4 | | | | | 如果为空则整个凭证取消 |
凭证年度 | I_MJAHR | | NUMC | 4 | | | | | |
抬头备注 | I_BKTXT | | CHAR | 25 | | | | | |
交货单 | | I_VBELN | | CHAR | 10 | | | | | 如果不为空,即冲销交货单 |
行参数 |
ITAB | | | | | | | | | |
返回结构字段 |
字段描述 | SAP字段 | WMS | | | 备注 |
字段 | 是否必填 | 数据类型 | 长度 | 字段 | 类型 | | |
处理结果状态 | ZSTATUS | 是 | CHAR | 1 | | | | | S:成功;E:失败 |
处理结果信息 | ZMSG | 是 | CHAR | 50 | | | | | |
物料凭证号 | ZMBLNR | 是 | CHAR | 10 | | | | | |
凭证年度 | ZYEAR | 是 | CHAR | 4 | | | | | |