FUNCTION ZEWM_FM_POST_DLV.
*"----------------------------------------------------------------------
*"*"本地接口:
*" TABLES
*" IT_DLV STRUCTURE /SCWM/DLV_DOCID_ITEM_STR
*" ET_RETURN STRUCTURE BAPIRET2 OPTIONAL
*" EXCEPTIONS
*" FAILED
*"----------------------------------------------------------------------
TYPES:
BEGIN OF TY_DOCID, "交货单信息
DOCID TYPE /SCDL/DB_PROCH_O-DOCID, "文档标识
ITEMID TYPE /SCDL/DB_PROCI_O-ITEMID, "项目标识
DOCCAT TYPE /SCDL/DB_PROCH_O-DOCCAT, "凭证类别
STATUS_GI TYPE /SCDL/DB_PROCI_O-STATUS_GI,
END OF TY_DOCID.
DATA: BEGIN OF LT_REFDOC OCCURS 0,
REFDOCNO TYPE /SCDL/DB_REFDOC-REFDOCNO,
DOCID TYPE /SCDL/DB_REFDOC-DOCID,
END OF LT_REFDOC.
DATA: LO_MESSAGE TYPE REF TO /SCDL/CL_DM_MESSAGE,
LT_MESSAGE TYPE /SCDL/DM_MESSAGE_TAB,
LT_RCODE TYPE /SCDL/T_SP_RETURN_CODE, "#EC NEEDED
LV_REJECTED TYPE BOOLE_D. "#EC NEEDED
DATA: LO_DLV_SAVE TYPE REF TO /SCWM/CL_DLV_MANAGEMENT_PRD.
DATA: LO_DLV TYPE REF TO /SCDL/CL_SP_PRD_INB.
DATA: LT_DLV TYPE /SCWM/DLV_DOCID_ITEM_TAB.
DATA: LT_K_HEAD TYPE /SCDL/T_SP_K_HEAD.
FIELD-SYMBOLS: <LS_REFDOC> LIKE LINE OF LT_REFDOC,
<LS_DLV> LIKE LINE OF LT_DLV,
<LS_K_HEAD> LIKE LINE OF LT_K_HEAD,
<LS_MESSAGE> LIKE LINE OF LT_MESSAGE.
DATA: LS_MESSAGE TYPE /SCDL/DM_MESSAGE_STR,
LV_INDEX TYPE I,
LV_TXT1 TYPE CHAR100.
DATA:
LS_RETURN TYPE BAPIRET2.
DATA:
LV_TABIX TYPE SY-TABIX,
LT_DOCID TYPE STANDARD TABLE OF TY_DOCID, "交货单
LS_DOCID TYPE TY_DOCID.
FIELD-SYMBOLS:
<LV_TEXT> TYPE CHAR100,
<LS_CALLSTACK> TYPE ABAP_CALLSTACK_LINE.
CHECK IT_DLV[] IS NOT INITIAL.
LT_DLV[] = IT_DLV[].
WAIT UP TO 2 SECONDS. "解决ERP多步骤调用锁
"获取交货单信息
REFRESH LT_DOCID.
SELECT
H~DOCID "文档标识
I~ITEMID "项目标识
H~DOCCAT "凭证类别
I~STATUS_GI
INTO CORRESPONDING FIELDS OF TABLE LT_DOCID
FROM /SCDL/DB_PROCH_O AS H
JOIN /SCDL/DB_PROCI_O AS I ON I~DOCID = H~DOCID
JOIN BUT000 AS B ON B~PARTNER_GUID = H~PARTNERTO_ID
FOR ALL ENTRIES IN LT_DLV
WHERE I~DOCID = LT_DLV-DOCID.
SORT LT_DOCID.
"过滤行项目全过账的交货单
LOOP AT LT_DLV ASSIGNING FIELD-SYMBOL(<LFS_DLV>).
LV_TABIX = SY-TABIX.
LOOP AT LT_DOCID INTO LS_DOCID
WHERE DOCID = <LFS_DLV>-DOCID
AND STATUS_GI NE '9'. "不等于过账状态
EXIT.
ENDLOOP.
IF SY-SUBRC = 0.
CONTINUE.
ELSE.
DELETE LT_DLV INDEX LV_TABIX. "行项目全过账的交货单 过滤 不过账
ENDIF.
ENDLOOP.
IF LO_DLV IS NOT BOUND.
CREATE OBJECT LO_DLV .
ENDIF.
LO_DLV->LOCK(
EXPORTING INKEYS = LT_K_HEAD
LOCKMODE = /SCDL/IF_SP1_LOCKING=>SC_EXCLUSIVE_LOCK
ASPECT = /SCDL/IF_SP_C=>SC_ASP_HEAD
IMPORTING REJECTED = LV_REJECTED
RETURN_CODES = LT_RCODE ).
IF LT_RCODE[] IS NOT INITIAL.
READ TABLE LT_RCODE TRANSPORTING NO FIELDS WITH KEY FAILED = ABAP_TRUE.
IF SY-SUBRC = 0.
MESSAGE E000(SU) WITH TEXT-E01 "锁定外向交货单失败
RAISING FAILED.
ENDIF.
ENDIF.
/SCWM/CL_GOODS_MOVEMENT=>POST_DLV(
EXPORTING
IT_DLV = LT_DLV
IV_GMCAT = /SCWM/IF_DOCFLOW_C=>SC_GI
IMPORTING
EO_MESSAGE = LO_MESSAGE ).
REFRESH LT_MESSAGE.
IF LO_MESSAGE IS BOUND.
LT_MESSAGE = LO_MESSAGE->GET_MESSAGES( ).
ENDIF.
* 消息
LOOP AT LT_MESSAGE INTO LS_MESSAGE WHERE MSGTY CA 'EAX'.
LV_INDEX = SY-TABIX - 1.
ASSIGN LV_TXT1 INCREMENT LV_INDEX TO <LV_TEXT>.
MESSAGE ID LS_MESSAGE-MSGID
TYPE LS_MESSAGE-MSGTY
NUMBER LS_MESSAGE-MSGNO
WITH LS_MESSAGE-MSGV1 LS_MESSAGE-MSGV2
LS_MESSAGE-MSGV3 LS_MESSAGE-MSGV4
INTO <LV_TEXT>.
MESSAGE E000(SU) WITH <LV_TEXT>
RAISING FAILED.
ENDLOOP.
* SAVE DELIVERY
LO_DLV_SAVE = /SCWM/CL_DLV_MANAGEMENT_PRD=>GET_INSTANCE( ).
DATA: LV_ROLLBACK_WORK_DONE TYPE XFELD,
LV_COMMIT_WORK_DONE TYPE XFELD.
REFRESH LT_MESSAGE.
CALL METHOD LO_DLV_SAVE->SAVE
EXPORTING
IV_SYNCHRONOUSLY = ABAP_TRUE
IV_DO_COMMIT_WORK = ABAP_TRUE
IV_WAIT = ABAP_TRUE
IMPORTING
EV_REJECTED = LV_REJECTED
EV_ROLLBACK_WORK_DONE = LV_ROLLBACK_WORK_DONE
EV_COMMIT_WORK_DONE = LV_COMMIT_WORK_DONE
ET_MESSAGE = LT_MESSAGE.
LOOP AT LT_MESSAGE INTO LS_MESSAGE WHERE MSGTY CA 'EAX'.
LV_INDEX = SY-TABIX - 1.
ASSIGN LV_TXT1 INCREMENT LV_INDEX TO <LV_TEXT>.
MESSAGE ID LS_MESSAGE-MSGID
TYPE LS_MESSAGE-MSGTY
NUMBER LS_MESSAGE-MSGNO
WITH LS_MESSAGE-MSGV1 LS_MESSAGE-MSGV2
LS_MESSAGE-MSGV3 LS_MESSAGE-MSGV4
INTO <LV_TEXT>.
MESSAGE E000(SU) WITH <LV_TEXT>
RAISING FAILED.
ENDLOOP.
IF LV_ROLLBACK_WORK_DONE = ABAP_TRUE.
MESSAGE E000(SU) WITH TEXT-E02 "交货单过账失败
RAISING FAILED.
ELSE.
MESSAGE S000(SU) WITH TEXT-S01."已成功发货过账
ENDIF.
ENDFUNCTION.
【EWM】外向交货单过账
于 2022-12-06 15:58:52 首次发布