WS_DELIVERY_UPDATE
可以填写过账日期等
BAPI_OUTB_DELIVERY_CONFIRM_DEC
不能传过账日期,冲销需要更新字段,后面有具体增强方法
取过账的物料凭证
select max( vbeln )
into @data(lv_vbeln)
from vbfa
where vbelv = @uv_vbeln
and vbtyp_n = 'R'
and rfmng > 0.
DEMO1
form frm_dn_post using uv_vbeln.
data:
ls_vbkok_wa type vbkok.
data:
lv_er_any type c,
lv_er_itm type c,
lv_er_upd type c,
lv_er_inf type c,
lv_er_gss type c,
lv_er_fch type c,
lv_er_par type c,
lv_er_ser type c,
ls_return like bapireturn1.
data:
lv_wadat_ist like likp-wadat_ist, "过帐日期
lt_prot like table of prott with header line,
lt_vbpok_tab like table of vbpok with header line,
lv_msg(255).
**检查
* select single lcnum
* into @data(lv_lcnum)
* from likp
* where vbeln = @uv_vbeln.
* if lv_lcnum is initial.
* gt_out2-message = '交货单财务凭证号不能为空'.
* gt_out2-rtype = 'E'.
* else.
* select single *
* into @data(ls_akkp)
* from akkp
* where lcnum = @lv_lcnum and aidat <= @gt_out2-wadat_istc and axdat >= @gt_out2-wadat_istc.
* if sy-subrc ne 0.
* gt_out2-message = '过账日期不在信用证有效期间'.
* gt_out2-rtype = 'E'.
* endif.
* endif.
if gt_out2-rtype = 'E' or uv_vbeln is initial.
return.
endif.
clear ls_vbkok_wa.
ls_vbkok_wa-vbeln_vl = uv_vbeln.
ls_vbkok_wa-wadat_ist = gt_out2-wadat_ist.
ls_vbkok_wa-wabuc = 'X'.
call function 'WS_DELIVERY_UPDATE' "开始过账
exporting
vbkok_wa = ls_vbkok_wa
synchron = 'X'
update_picking = 'X'
commit = 'X'
delivery = uv_vbeln
nicht_sperren = 'X'
if_error_messages_send_0 = 'X'
importing
ef_error_any_0 = lv_er_any
ef_error_in_item_deletion_0 = lv_er_itm
ef_error_in_pod_update_0 = lv_er_upd
ef_error_in_interface_0 = lv_er_inf
ef_error_in_goods_issue_0 = lv_er_gss
ef_error_in_final_check_0 = lv_er_fch
ef_error_partner_update = lv_er_par
ef_error_sernr_update = lv_er_ser
tables
prot = lt_prot
exceptions
error_message = 1
others = 2.
if lt_prot[] is not initial or lv_er_any = 'X' "过账失败
or lv_er_itm = 'X'
or lv_er_upd = 'X'
or lv_er_inf = 'X'
or lv_er_gss = 'X'
or lv_er_fch = 'X'
or sy-subrc ne 0.
call function 'BAPI_TRANSACTION_ROLLBACK'.
gt_out2-rtype = 'E'.
gt_out2-message = gt_out2-message && 'DN过账失败:' && lv_msg.
loop at lt_prot where msgty eq 'E' or msgty eq 'A'.
message id lt_prot-msgid type lt_prot-msgty number lt_prot-msgno
with lt_prot-msgv1 lt_prot-msgv2 lt_prot-msgv3 lt_prot-msgv4
into lv_msg.
gt_out2-message = gt_out2-message && ',' && lv_msg.
shift gt_out2-message left by 1 places.
endloop.
else.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
gt_out2-rtype = 'S'.
* import cv_mblnr from memory id 'BORGR_MATDOC'.
endif.
endform.
DEMO2
FUNCTION ZMM004_POST_DN.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(I_VBELN) TYPE LIKP-VBELN
*" EXPORTING
*" REFERENCE(E_VBELN) TYPE VBFA-VBELN
*" TABLES
*" LT_RETURN STRUCTURE BAPIRET2
*"----------------------------------------------------------------------
* Global data declarations
DATA:
LS_HEADER_DATA LIKE BAPIOBDLVHDRCON,
LS_HEADER_CONTROL LIKE BAPIOBDLVHDRCTRLCON.
DATA LT_ITEM LIKE TABLE OF BAPIOBDLVITEMCON WITH HEADER LINE. "交货单项目
LS_HEADER_DATA-DELIV_NUMB = I_VBELN. "交货单号
LS_HEADER_CONTROL-DELIV_NUMB = I_VBELN. "交货单号
LS_HEADER_CONTROL-POST_GI_FLG = 'X'. "自动过帐货物移动
LS_HEADER_CONTROL-VOLUME_FLG = 'X'. "量的确认
LS_HEADER_CONTROL-DELIV_DATE_FLG = 'X'. "确认交货日期
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CONFIRM_DEC'
EXPORTING
HEADER_DATA = LS_HEADER_DATA
HEADER_CONTROL = LS_HEADER_CONTROL
DELIVERY = I_VBELN
TABLES
RETURN = LT_RETURN.
READ TABLE LT_RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
*冲销需要更新标准表
UPDATE LIKP SET VLSTK = '' ANZPK = '0' WHERE VBELN = I_VBELN.
COMMIT WORK AND WAIT.
*返回物料凭证
SELECT SINGLE VBELN
INTO E_VBELN
FROM VBFA
WHERE VBELV = I_VBELN AND VBTYP_N = 'R' AND BWART NE '' AND RFMNG NE 0 "R 货物移动(过账物料凭证)
AND NOT EXISTS
( SELECT *
FROM M_MBMPS "视图比MSEG多条件
WHERE SMBLN = VBFA~VBELN OR MBLNR = VBFA~VBELN ). "非冲销和被冲销
ENDIF.
ENDFUNCTION.
注:
解决bapi过账的交货单冲销的另一个方法