REPORT ZSDA11S2.
*&---------------------------------------------------------------------*
*& 使用核心函數 BAPI_DELIVERYPROCESSING_EXEC 版本雖老,但功能齊全,支持採購訂單,銷售訂單及合併創建
*&
*&---------------------------------------------------------------------*
*&自動交貨 商用 一次性客戶加入商用
*&自動交貨 商用 扣板交貨加入商用
*&---------------------------------------------------------------------*
*&2015.12.22 增加 18 整單自動交貨
*&2017.02.27 分開工廠
*&---------------------------------------------------------------------*
TABLES : ZVBAP,TVKO,T001.
PARAMETERS: P_FORCE TYPE C AS CHECKBOX .
PARAMETERS: P_DATU TYPE INT1 DEFAULT 2.
PARAMETERS: P_WERKS TYPE WERKS_D DEFAULT '6000' .
SELECT-OPTIONS: S_VSTEL FOR ZVBAP-VSTEL,
S_VBELN FOR ZVBAP-VBELN,
S_KUNNR FOR ZVBAP-KUNNR,
S_VTWEG FOR ZVBAP-VTWEG.
*3.產生交貨單
*4.查看是否產生成功
*5.不成功就停止
*0 計算是否是計算時間
DATA:
C_PRUEFLOS LIKE QALS-PRUEFLOS.
CONCATENATE 'SY' SY-DATUM INTO C_PRUEFLOS.
DATA: X(10),M(10), L_MESSAGE(300).
CALL FUNCTION 'ENQUEUE_EQQALS1'
EXPORTING
PRUEFLOS = C_PRUEFLOS
EXCEPTIONS
FOREIGN_LOCK = 1.
IF NOT SY-SUBRC IS INITIAL.
L_MESSAGE = '正在進行計算操作,ZSDA11S '.
CONCATENATE L_MESSAGE '退出!' INTO L_MESSAGE.
WRITE L_MESSAGE .
RETURN.
ENDIF.
DATA: S(1).
CLEAR S.
DATA: LINE LIKE ZSDA19.
IF SY-BATCH = 'X' ."後臺執行
S = 'A'.
SELECT * INTO LINE
FROM ZSDA19
WHERE DAT1 = SY-DATUM
AND FLAG = 'SO'.
* AND VSTEL = P_VSTEL.
IF SY-UZEIT < LINE-ETIM AND SY-UZEIT >= LINE-STIM.
S = 'X'.
EXIT.
ENDIF.
ENDSELECT.
ENDIF.
IF S = 'A' AND P_FORCE IS INITIAL. "沒有工作日曆
WRITE '沒有工作日曆'.
RETURN.
ENDIF.
*1. 取要操作的訂單
*DATA: ITVBAP LIKE ZVBAP OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF ITVBAP OCCURS 0.
INCLUDE STRUCTURE ZVBAP .
DATA: SOBKZ TYPE SOBKZ.
DATA: PS_PSP_PNR TYPE PS_PSP_PNR.
DATA: MAABC TYPE MAABC.
DATA: ERDAT TYPE ERDAT.
DATA: END OF ITVBAP.
DATA: CDATE LIKE SY-DATUM.
IF P_DATU IS INITIAL.
P_DATU = 100.
ENDIF.
IF SY-BATCH = 'X'.
P_DATU = 100.
ENDIF.
CDATE = SY-DATUM + P_DATU.
DATA:
BEGIN OF WHERE_ITAB OCCURS 0,
TEXT(320),
END OF WHERE_ITAB .
PERFORM GETWHERE.
DATA: STR TYPE STRING.
CLEAR STR.
* CONCATENATE STR ' * A~VBELN ' INTO STR SEPARATED BY SPACE .
* CONCATENATE STR ' * A~VBELP ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' A~MATNR ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' A~LGORT ' INTO STR SEPARATED BY SPACE .
* CONCATENATE STR ' * VTWEG ' INTO STR SEPARATED BY SPACE .
* CONCATENATE STR ' * ETDAT ' INTO STR SEPARATED BY SPACE .
* CONCATENATE STR ' * B~LFSTA AS BESTK ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' A~ZMENG ' INTO STR SEPARATED BY SPACE .
* CONCATENATE STR ' * LFIMG ' INTO STR SEPARATED BY SPACE .
* CONCATENATE STR ' * FDATE ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' A~VBELN ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' A~VBELP ' INTO STR SEPARATED BY SPACE .
* CONCATENATE STR ' MATNR ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' A~KUNNR ' INTO STR SEPARATED BY SPACE .
* CONCATENATE STR ' LGORT ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' VTWEG ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' ETDAT ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' B~LFSTA AS BESTK ' INTO STR SEPARATED BY SPACE .
* CONCATENATE STR ' * BESTK ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' A~ZMENG ' INTO STR SEPARATED BY SPACE .
* CONCATENATE STR ' * LFIMG ' INTO STR SEPARATED BY SPACE .
* CONCATENATE STR ' * KZWI1 "這個值要重新計算 ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' A~KZWI2 ' INTO STR SEPARATED BY SPACE .
* CONCATENATE STR ' * KZWI3 ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' INT1 ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' INT2 ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' DAT1 ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' DAT2 ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' UPDKZ ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' P~ABGRU ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' AUART ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' P~VSTEL ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' A~NETWR ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' NETWR2 ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' XDATE ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' XTIME ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' EUDAT ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' XDATE2 ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' XTIME2 ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' QDATE ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' KDATE ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' EUDAT ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' SDATE ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' XDATE2 ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' XTIME2 ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' FDATE ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' FRZE ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' FRDAT ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' FRTIM ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' VKORG ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' A~WERKS ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' P~SOBKZ ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' P~PS_PSP_PNR ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' A~BM2 ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' D~MAABC ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' P~ERDAT ' INTO STR SEPARATED BY SPACE .
CONCATENATE STR ' A~MANDT ' INTO STR SEPARATED BY SPACE .
SELECT (STR)
APPENDING CORRESPONDING FIELDS OF TABLE ITVBAP
FROM ZVBAP AS A
JOIN VBAP AS P ON A~VBELN = P~VBELN AND A~VBELP = P~POSNR
JOIN VBUP AS B ON A~VBELN = B~VBELN AND A~VBELP = B~POSNR
JOIN KNA1 AS C ON A~KUNNR = C~KUNNR
JOIN MARC AS D ON A~MATNR = D~MATNR AND D~WERKS = '6000'
WHERE BESTK <> 'C'
*AND B~LFSTA <> 'C'
AND P~ABGRU = ''
AND UPDKZ <> 'D'
AND A~WERKS = P_WERKS
AND ( ( P~VSTEL IN S_VSTEL
AND A~VBELN IN S_VBELN
AND A~KUNNR IN S_KUNNR
AND VTWEG IN S_VTWEG
AND ZZPRCTR = '0000006003'
)
OR ( KTOKD = 'Z007' AND A~KUNNR IN S_KUNNR )
* OR AUART IN ('ZOR9','KN')
)
AND (WHERE_ITAB)
.
*SELECT (STR)
*APPENDING CORRESPONDING FIELDS OF TABLE ITVBAP
*FROM ZVBAP AS A
*JOIN VBAP AS P ON A~VBELN = P~VBELN AND A~VBELP = P~POSNR
*JOIN VBUP AS B ON A~VBELN = B~VBELN AND A~VBELP = B~POSNR
*JOIN ZSDA35 AS Z ON Z~MATNR = A~MATNR AND Z~LGORT = A~LGORT
*WHERE BESTK <> 'C'
*AND P~ABGRU = ''
*AND UPDKZ <> 'D'
*AND A~WERKS = P_WERKS
*AND A~VBELN IN S_VBELN.
DATA: BEGIN OF ITM OCCURS 0,
MATNR TYPE MATNR,
LGORT TYPE LGORT_D,
PSPNR TYPE PS_PSP_PNR,
LABST TYPE LABST,
WERKS TYPE WERKS_D,
END OF ITM.
DATA: BEGIN OF ITXH OCCURS 0,
KUNNR TYPE KUNNR,
KKBER TYPE KKBER,
KNKLI TYPE KNKLI,
KLIMK TYPE KLIMK,
SKFOR TYPE SKFOR,
OFAKW TYPE SKFOR,
OLIKW TYPE SKFOR,
VKORG TYPE VKORG,
END OF ITXH.
DATA: LS_LIKP LIKE LIKP.
DATA: LT_LIPS LIKE LIPS OCCURS 0 WITH HEADER LINE.
DATA: ZLOG LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
DATA: LP LIKE SY-SUBRC.
LOOP AT ITVBAP.
CLEAR LS_LIKP.
LS_LIKP-VKORG = ITVBAP-VKORG.
LS_LIKP-VBELN = ITVBAP-VBELN.
LS_LIKP-ERDAT = SY-DATUM.
LS_LIKP-KUNIV = ITVBAP-VKORG.
LS_LIKP-KUNIV+2(2) = '00'.
PERFORM F_ADD_ZERO USING LS_LIKP-KUNIV.
LT_LIPS-VBELN = ITVBAP-VBELN.
LT_LIPS-MATNR = ITVBAP-MATNR.
LT_LIPS-WERKS = ITVBAP-WERKS.
LT_LIPS-LFIMG = 1.
APPEND LT_LIPS.
CALL FUNCTION 'ZRFC_CHECK_ZPB2'
EXPORTING
* IP_VBELN =
LIKP = LS_LIKP
IMPORTING
EX_SUBRC = LP
TABLES
LIPS = LT_LIPS
ET_LOG = ZLOG.
IF LP > 0.
READ TABLE ZLOG INDEX 1.
WRITE:/ ZLOG-MESSAGE.
DELETE ITVBAP.
CONTINUE.
ENDIF.
ITXH-VKORG = ITVBAP-VKORG.
SELECT SINGLE * FROM TVKO WHERE VKORG = ITVBAP-VKORG.
SELECT SINGLE * FROM T001 WHERE BUKRS = TVKO-BUKRS.
ITXH-KUNNR = ITVBAP-KUNNR.
ITXH-KKBER = T001-KKBER.
COLLECT ITXH.
ENDLOOP.
**以下交貨開始
DELETE ITVBAP WHERE BESTK = 'C'. "刪除交完貨的
DELETE ITVBAP WHERE FRZE <> ''.
DATA: BEGIN OF ITAB OCCURS 0,
VBELN TYPE VBELN,
VSTEL TYPE VSTEL,
END OF ITAB.
**--處理18渠道
SORT ITVBAP.
LOOP AT ITVBAP WHERE VTWEG = '18'.
ITAB-VBELN = ITVBAP-VBELN.
ITAB-VSTEL = ITVBAP-VSTEL.
COLLECT ITAB.
ENDLOOP.
PERFORM GETDN18.
DELETE ITVBAP WHERE VTWEG = '18'.
DATA SSP LIKE ITXH-KLIMK.
SORT ITXH.
LOOP AT ITXH.
SELECT SINGLE KLIMK SKFOR KNKLI
INTO (ITXH-KLIMK,ITXH-SKFOR,ITXH-KNKLI)
FROM KNKK
WHERE KUNNR = ITXH-KUNNR
AND KKBER = ITXH-KKBER.
IF ITXH-KNKLI <> ITXH-KUNNR.
SELECT SINGLE KLIMK SKFOR KNKLI
INTO (ITXH-KLIMK,ITXH-SKFOR,ITXH-KNKLI)
FROM KNKK
WHERE KUNNR = ITXH-KNKLI
AND KKBER = ITXH-KKBER.
ENDIF.
SELECT SINGLE OFAKW OLIKW
INTO (ITXH-OFAKW,ITXH-OLIKW)
FROM S067
WHERE KNKLI = ITXH-KUNNR
AND KKBER = ITXH-KKBER.
IF ITXH-KUNNR = '0010009569'.
ITXH-KLIMK = 10009569.
ENDIF.
MODIFY ITXH.
CLEAR SSP.
SSP = ITXH-KLIMK - ITXH-SKFOR. "超款
IF SSP <= 0.
DELETE ITXH.
DELETE ITVBAP WHERE KUNNR = ITXH-KUNNR AND VKORG = ITXH-VKORG. "刪除超款
DATA INFO_3(200).
CONCATENATE
ITXH-KUNNR '~'
'刪除超款'
INTO INFO_3.
WRITE:/ INFO_3.
ENDIF.
CLEAR ITXH.
ENDLOOP.
PERFORM GETNOMATNR.
************按交貨序列號排序
LOOP AT ITVBAP.
ITM-MATNR = ITVBAP-MATNR.
ITM-LGORT = ITVBAP-LGORT.
ITM-PSPNR = ITVBAP-PS_PSP_PNR.
ITM-WERKS = ITVBAP-WERKS.
COLLECT ITM.
ENDLOOP.
SORT ITM.
LOOP AT ITM. "庫存
DATA: L LIKE MARD-LABST,
K LIKE MARD-KLABS.
IF ITM-PSPNR IS INITIAL.
SELECT SUM( LABST ) SUM( KLABS ) INTO (L,K) FROM MARD
WHERE WERKS = ITM-WERKS
AND MATNR = ITM-MATNR
AND LGORT = ITM-LGORT.
ELSE.
SELECT SUM( PRLAB ) SUM( PRSPE ) INTO (L,K) FROM MSPR
WHERE WERKS = ITM-WERKS
AND MATNR = ITM-MATNR
AND LGORT = ITM-LGORT
AND PSPNR = ITM-PSPNR.
ENDIF.
ITM-LABST = L + K.
IF ITM-LABST > 0.
MODIFY ITM.
ELSE. "刪除無庫存
DELETE ITVBAP WHERE MATNR = ITM-MATNR AND LGORT = ITM-LGORT
AND WERKS = ITM-WERKS
AND PS_PSP_PNR = ITM-PSPNR.
DATA INFO_2(200).
CONCATENATE
ITM-MATNR '~'
ITM-LGORT '~'
ITM-PSPNR '~'
'無庫存可用'
INTO INFO_2.
WRITE:/ INFO_2.
ENDIF.
ENDLOOP.
DATA: P_LFIMG LIKE ITVBAP-ZMENG.
DATA: V_ST LIKE VBAP-KWMENG,
TOTAL LIKE VBAP-KWMENG.
DATA INFO_1(200).
SORT ITVBAP BY BM2.
LOOP AT ITVBAP.
CLEAR INFO_1(200).
CONCATENATE
ITVBAP-VBELN '~'
ITVBAP-VBELP '~'
'START......'
INTO INFO_1.
WRITE:/ INFO_1.
CLEAR: V_ST,P_LFIMG.
SELECT RFMNG INTO V_ST
FROM VBFA
WHERE VBELV = ITVBAP-VBELN
AND POSNV = ITVBAP-VBELP
AND VBTYP_N = 'J'.
P_LFIMG = P_LFIMG + V_ST . "創建數量
CLEAR V_ST.
ENDSELECT.
P_LFIMG = ITVBAP-ZMENG - P_LFIMG.
IF P_LFIMG <= 0.
CLEAR INFO_1(200).
CONCATENATE
ITVBAP-VBELN '~'
ITVBAP-VBELP '~'
'無交貨數量'
INTO INFO_1.
WRITE:/ INFO_1.
ENDIF.
CHECK P_LFIMG > 0. "有交貨數量
* ***增加可用庫存判斷
READ TABLE ITM WITH KEY MATNR = ITVBAP-MATNR
LGORT = ITVBAP-LGORT
WERKS = ITVBAP-WERKS
PSPNR = ITVBAP-PS_PSP_PNR.
IF SY-SUBRC = 0.
*取佔用
CLEAR TOTAL.
SELECT SINGLE SUM( OMENG ) INTO TOTAL
FROM VBBE
WHERE WERKS = P_WERKS
AND VBTYP = 'J'
AND MATNR = ITVBAP-MATNR
AND LGORT = ITVBAP-LGORT
AND WERKS = ITVBAP-WERKS
AND PSPEL = ITM-PSPNR
GROUP BY WERKS MATNR LGORT.
CLEAR V_ST.
V_ST = ITM-LABST - TOTAL.
IF V_ST > 0.
IF V_ST < P_LFIMG.
P_LFIMG = V_ST.
ENDIF.
PERFORM GENDN USING ITVBAP-VBELN ITVBAP-VBELP P_LFIMG.
ELSE.
DELETE ITVBAP WHERE MATNR = ITM-MATNR AND LGORT = ITM-LGORT
AND WERKS = ITM-WERKS
AND PS_PSP_PNR = ITM-PSPNR.
CLEAR INFO_1.
CONCATENATE
ITVBAP-VBELN '~'
ITVBAP-VBELP '~'
ITM-MATNR '~'
ITM-LGORT '~'
ITM-PSPNR '~'
'無可用庫存'
INTO INFO_1.
WRITE:/ INFO_1.
ENDIF.
ENDIF.
ENDLOOP.
COMMIT WORK AND WAIT.
*&---------------------------------------------------------------------*
*& Form GENDN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_VBELN text
* -->P_VBELP text
* -->P_LFIMG text
* -->P_DNNO text
*----------------------------------------------------------------------*
FORM GENDN USING P_VBELN P_VBELP P_LFIMG.
**----
*Internal Tables
**----
*Table to Hold Delivery Request
DATA: BEGIN OF TBL_REQUEST OCCURS 0.
INCLUDE STRUCTURE BAPIDELICIOUSREQUEST.
DATA: END OF TBL_REQUEST.
*Table to hold Line Items Created
DATA: BEGIN OF TBL_ITEMS OCCURS 0.
INCLUDE STRUCTURE BAPIDELICIOUSCREATEDITEMS.
DATA: END OF TBL_ITEMS.
*Table to hold BAPI Return Messages
DATA: BEGIN OF TBL_RETURN OCCURS 0.
INCLUDE STRUCTURE BAPIRET2.
DATA: END OF TBL_RETURN.
**----
*Structures
**----
DATA: ST_VBAK LIKE VBAK OCCURS 0 WITH HEADER LINE,
ST_VBAP LIKE VBAP OCCURS 0 WITH HEADER LINE.
SELECT VBELN KUNNR VKORG VTWEG SPART BSTDK
INTO CORRESPONDING FIELDS OF TABLE ST_VBAK
FROM VBAK
WHERE VBELN = P_VBELN.
CHECK SY-SUBRC EQ 0.
SELECT VBELN POSNR WERKS VRKME MEINS MATNR
INTO CORRESPONDING FIELDS OF TABLE ST_VBAP
FROM VBAP
WHERE VBELN = P_VBELN AND POSNR = P_VBELP .
SORT ST_VBAK.
SORT ST_VBAP.
LOOP AT ST_VBAK.
LOOP AT ST_VBAP WHERE VBELN = ST_VBAK-VBELN.
TBL_REQUEST-DOCUMENT_NUMB = ST_VBAP-VBELN.
TBL_REQUEST-DOCUMENT_ITEM = ST_VBAP-POSNR.
TBL_REQUEST-SHIP_TO = ST_VBAK-KUNNR.
TBL_REQUEST-SOLD_TO = ST_VBAK-KUNNR.
TBL_REQUEST-SALES_ORGANISATION = ST_VBAK-VKORG.
TBL_REQUEST-DISTRIBUTION_CHANNEL = ST_VBAK-VTWEG.
TBL_REQUEST-DIVISION = ST_VBAK-SPART.
TBL_REQUEST-PLANT = ST_VBAP-WERKS.
TBL_REQUEST-QUANTITY_SALES_UOM = P_LFIMG.
TBL_REQUEST-SALES_UNIT = ST_VBAP-VRKME.
TBL_REQUEST-BASE_UOM = ST_VBAP-MEINS.
TBL_REQUEST-MATERIAL = ST_VBAP-MATNR.
TBL_REQUEST-DELIVERY_DATE = ST_VBAK-BSTDK.
TBL_REQUEST-DELIVERY_TIME = SY-UZEIT.
TBL_REQUEST-TRANSP_PLAN_DATE = ST_VBAK-BSTDK.
TBL_REQUEST-LOADING_DATE = ST_VBAK-BSTDK.
TBL_REQUEST-GOODS_ISSUE_DATE = ST_VBAK-BSTDK.
TBL_REQUEST-EXTDELV_NO = ST_VBAP-VBELN.
TBL_REQUEST-DOCUMENT_TYPE = 'A'. "Delivery
TBL_REQUEST-DOCUMENT_TYPE_PREDECESSOR = 'A'. "Sales Ord
TBL_REQUEST-DOCUMENT_TYPE_DELIVERY = 'LF'.
APPEND TBL_REQUEST.
ENDLOOP.
ENDLOOP.
CALL FUNCTION 'BAPI_DELIVERYPROCESSING_EXEC'
TABLES
REQUEST = TBL_REQUEST
CREATEDITEMS = TBL_ITEMS
RETURN = TBL_RETURN.
DATA: SINFO(200).
SORT TBL_RETURN.
LOOP AT TBL_RETURN.
CONCATENATE
ST_VBAP-VBELN '~'
ST_VBAP-POSNR '~'
TBL_RETURN-TYPE '~'
TBL_RETURN-ID '~'
TBL_RETURN-NUMBER '~'
TBL_RETURN-MESSAGE
INTO SINFO.
WRITE:/ SINFO.
ENDLOOP.
DATA: P_DNNO TYPE VBELN.
CLEAR P_DNNO.
IF TBL_ITEMS[] IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
READ TABLE TBL_ITEMS INDEX 1 .
IF SY-SUBRC = 0.
P_DNNO = TBL_ITEMS-DOCUMENT_NUMB.
ENDIF.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
WRITE:/ P_VBELN,P_VBELP,P_DNNO.
ENDIF.
IF P_DNNO IS NOT INITIAL.
IF ITVBAP-VTWEG = '18'.
ELSE.
UPDATE LIKP SET ANZPK = ITVBAP-VTWEG WHERE VBELN = P_DNNO.
COMMIT WORK.
ENDIF.
DATA SDATE LIKE VBAP-KANNR.
CLEAR SDATE.
SELECT SINGLE KANNR INTO SDATE FROM VBAP WHERE VBELN = ITVBAP-VBELN AND POSNR = ITVBAP-VBELP.
IF SDATE IS INITIAL.
MOVE SY-DATUM TO SDATE.
UPDATE VBAP SET KANNR = SDATE WHERE VBELN = ITVBAP-VBELN AND POSNR = ITVBAP-VBELP.
ENDIF.
IF ITVBAP-FDATE IS INITIAL.
MOVE SY-DATUM TO SDATE.
UPDATE ZVBAP SET FDATE = SDATE WHERE VBELN = ITVBAP-VBELN AND VBELP = ITVBAP-VBELP.
UPDATE ZVBAPH SET FDATE = SDATE WHERE VBELN = ITVBAP-VBELN AND VBELP = ITVBAP-VBELP.
ENDIF.
ENDIF.
* LOOP AT TBL_RETURN.
* WRITE:/ TBL_RETURN-NUMBER,
* TBL_RETURN-MESSAGE,
* TBL_RETURN-MESSAGE_V1,
* TBL_RETURN-MESSAGE_V2,
* TBL_RETURN-MESSAGE_V3 .
* ENDLOOP.
ENDFORM. "GENDN
*&---------------------------------------------------------------------*
*& Form GET_VBELN-LIKP
*&---------------------------------------------------------------------*
* 由SO-> DN
*----------------------------------------------------------------------*
* -->V_ETDAT text
*----------------------------------------------------------------------*
FORM GET_VBELN-LIKP USING V_VBELN V_VBELP.
DATA :
APK TYPE CHAR50,
MATERIALDOCUMENT LIKE LIKP-VBELN,
S_SUBRC TYPE SY-SUBRC,
ET_LOG LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
IF ITVBAP-VTWEG = '18'.
CLEAR APK.
ELSE.
MOVE ITVBAP-VTWEG TO APK.
ENDIF.
CLEAR: MATERIALDOCUMENT.
CALL FUNCTION 'ZRFC_CRM_VL01N'
EXPORTING
IN_VBELN = ITVBAP-VBELN
IN_ANZPK = APK
IN_VSTEL = ITVBAP-VSTEL
IN_POSNR = ITVBAP-VBELP
IN_MAXNR = ITVBAP-VBELP
IMPORTING
EP_SUBRC = S_SUBRC
OU_VBELN = MATERIALDOCUMENT
TABLES
ET_LOG = ET_LOG.
IF MATERIALDOCUMENT <> ''.
WRITE /.
WRITE : ITVBAP-VBELN,ITVBAP-VBELP,MATERIALDOCUMENT.
ENDIF.
IF MATERIALDOCUMENT <> '' AND V_VBELP IS NOT INITIAL .
DATA SDATE LIKE VBAP-KANNR.
CLEAR SDATE.
SELECT SINGLE KANNR INTO SDATE FROM VBAP WHERE VBELN = ITVBAP-VBELN AND POSNR = ITVBAP-VBELP.
IF SDATE IS INITIAL.
MOVE SY-DATUM TO SDATE.
UPDATE VBAP SET KANNR = SDATE WHERE VBELN = ITVBAP-VBELN AND POSNR = ITVBAP-VBELP.
ENDIF.
IF ITVBAP-FDATE IS INITIAL.
MOVE SY-DATUM TO SDATE.
UPDATE ZVBAP SET FDATE = SDATE WHERE VBELN = ITVBAP-VBELN AND VBELP = ITVBAP-VBELP.
UPDATE ZVBAPH SET FDATE = SDATE WHERE VBELN = ITVBAP-VBELN AND VBELP = ITVBAP-VBELP.
ENDIF.
SORT ET_LOG.
LOOP AT ET_LOG.
WRITE /: ITVBAP-VBELN,ET_LOG-MESSAGE.
ENDLOOP.
ENDIF.
ENDFORM. "GET_VBELN-LIKP
*&---------------------------------------------------------------------*
*& Form GETWHERE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GETWHERE.
DATA: KWLST LIKE ZSDA18 OCCURS 0 WITH HEADER LINE. "刪除不參與計算的物料
WHERE_ITAB-TEXT = ' A~MANDT = ''800'' '.
APPEND WHERE_ITAB.
* WRITE / WHERE_ITAB.
SELECT * INTO KWLST FROM ZSDA18.
* IF KWLST-KUNNR IS NOT INITIAL.
* DATA: V_K TYPE KUNNR.
* CLEAR V_K.
* SELECT SINGLE KUNNR INTO V_K FROM KNA1 WHERE KUNNR = KWLST-KUNNR AND ZZPRCTR = '0000006003'.
* CHECK V_K IS INITIAL.
* ENDIF.
CLEAR: WHERE_ITAB.
WHERE_ITAB-TEXT = ' AND NOT ( A~MANDT = ''800'' '.
IF KWLST-KUNNR IS NOT INITIAL.
CONCATENATE WHERE_ITAB-TEXT ' and a~KUNNR = ''' KWLST-KUNNR '''' INTO WHERE_ITAB-TEXT.
ENDIF.
IF KWLST-LGORT IS NOT INITIAL .
CONCATENATE WHERE_ITAB-TEXT ' and a~LGORT = ''' KWLST-LGORT '''' INTO WHERE_ITAB-TEXT.
ENDIF.
IF KWLST-MATNR IS NOT INITIAL .
CONCATENATE WHERE_ITAB-TEXT ' and A~MATNR = ''' KWLST-MATNR '''' INTO WHERE_ITAB-TEXT.
ENDIF.
IF KWLST-VTWEG IS NOT INITIAL .
CONCATENATE WHERE_ITAB-TEXT ' and a~VTWEG = ''' KWLST-VTWEG '''' INTO WHERE_ITAB-TEXT.
ENDIF.
CONCATENATE WHERE_ITAB-TEXT ' ) ' INTO WHERE_ITAB-TEXT.
WRITE / WHERE_ITAB.
APPEND WHERE_ITAB.
ENDSELECT.
ENDFORM. "getWhere
*&---------------------------------------------------------------------*
*& Form GetNoMatnr
*&---------------------------------------------------------------------*
* 刪除不計算的物料條件 客戶 物料 庫位
*----------------------------------------------------------------------*
FORM GETNOMATNR.
DELETE ITVBAP WHERE LGORT = '6014'. "刪除永不交貨的庫位
DELETE ITVBAP WHERE VTWEG = '18'. "18渠道永不交貨
ENDFORM. "GetNoMatnr
*&---------------------------------------------------------------------*
*& Form GETDN18
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GETDN18 .
DATA :
MATERIALDOCUMENT LIKE LIKP-VBELN,
S_SUBRC TYPE SY-SUBRC.
SORT ITAB.
LOOP AT ITAB.
CLEAR MATERIALDOCUMENT.
DATA:
V_ANZPK TYPE CHAR50,
V_POSNR TYPE CHAR50,
V_MAXNR TYPE CHAR50,
V_BOLNR LIKE LIKP-BOLNR,
MSG(1000),
ET_LOG LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
CLEAR: V_ANZPK,V_POSNR.
* MOVE '18' TO V_ANZPK.
MOVE '1' TO V_POSNR.
MOVE '9999' TO V_MAXNR.
* IF ITAB-VTWEG = '18'.
* CLEAR V_ANZPK.
* V_MAXNR = '9999'.
* ENDIF.
CLEAR: ET_LOG,ET_LOG[].
CALL FUNCTION 'ZRFC_CRM_VL01N'
EXPORTING
IN_VBELN = ITAB-VBELN
IN_ANZPK = V_ANZPK
IN_VSTEL = ITAB-VSTEL
IN_POSNR = V_POSNR
IN_MAXNR = V_MAXNR
IMPORTING
EP_SUBRC = S_SUBRC
OU_VBELN = MATERIALDOCUMENT
TABLES
ET_LOG = ET_LOG.
IF MATERIALDOCUMENT <> ''.
WRITE : ITAB-VBELN,MATERIALDOCUMENT.
ELSE.
SORT ET_LOG.
LOOP AT ET_LOG.
CONCATENATE ITAB-VBELN
ET_LOG-TYPE
ET_LOG-ID
ET_LOG-NUMBER
ET_LOG-MESSAGE
INTO MSG.
WRITE / : MSG.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDFORM. "GetDN
INCLUDE ZRPT_FUN.