FUNCTION ZRFC_SD_PCE_0095.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(P_MODE) LIKE ZRMADATA-SOFLAG OPTIONAL
*" TABLES
*" ZRMALOG STRUCTURE ZRMALOG OPTIONAL
*"----------------------------------------------------------------------
IF P_MODE IS INITIAL.
P_MODE = 'N'.
ENDIF.
SELECT * FROM ZRMADATA
INTO CORRESPONDING FIELDS OF TABLE ZRMAMASTER
WHERE SOFLAG <> 'Y'.
IF ZRMAMASTER[] IS INITIAL.
ZRMALOG-ZRMA = 'NULL'.
ZRMALOG-ZSN = 'NULL'.
ZRMALOG-ZMESSAGE = 'No Data'.
ZRMALOG-ZDATE = SY-DATUM.
ZRMALOG-ZTIME = SY-TIMLO.
APPEND ZRMALOG.
EXIT.
ENDIF.
SORT ZRMAMASTER BY ZRMA ZSN.
LOOP AT ZRMAMASTER.
CLEAR:ZMATNR.
SELECT SINGLE * FROM ZPCECONTROLVALUE
WHERE CTYPE = 'SERVICE'
AND INDICATOR1 = 'ACT'
AND WERKS = ZRMAMASTER-PLANT .
***** look up HH PN
* SELECT mara~matnr INTO zmatnr FROM marc INNER JOIN mara
* ON marc~matnr = mara~matnr
* WHERE mara~bismt = zrmamaster-cpn
* AND marc~werks = zrmamaster-plant
* ORDER BY mara~matnr DESCENDING.
* IF sy-subrc = 0.
* EXIT.
* ENDIF.
* ENDSELECT.
**** look up HH PN
CONDENSE ZRMAMASTER-CPN.
CONDENSE ZRMAMASTER-BATCH.
CONCATENATE '%' ZRMAMASTER-CPN '%' '+' ZRMAMASTER-BATCH '%' INTO
ZHHPN.
SELECT SINGLE MARA~MATNR INTO ZMATNR FROM MARC INNER JOIN MARA
ON MARC~MATNR = MARA~MATNR
WHERE MARA~MATNR LIKE ZHHPN
AND MARC~WERKS = ZRMAMASTER-PLANT.
IF SY-SUBRC <> 0.
SELECT SINGLE MARA~MATNR INTO ZMATNR FROM MARC INNER JOIN MARA
ON MARC~MATNR = MARA~MATNR
WHERE MARA~MATNR = ZRMAMASTER-CPN
AND MARC~WERKS = ZRMAMASTER-PLANT.
ENDIF.
IF ZMATNR IS INITIAL.
ZRMALOG-ZRMA = ZRMAMASTER-ZRMA.
ZRMALOG-ZSN = ZRMAMASTER-CPN.
ZRMALOG-ZMESSAGE = 'CPN cant find HHPN'.
ZRMALOG-ZDATE = SY-DATUM.
ZRMALOG-ZTIME = SY-TIMLO.
APPEND ZRMALOG.
CONTINUE.
ELSE.
SELECT SINGLE * FROM T399A WHERE IWERK = ZRMAMASTER-PLANT
AND SVOBJ = ZMATNR.
****if don't maintain service material, then create
IF SY-SUBRC <> 0.
CLEAR IT_BDC.
REFRESH IT_BDC.
PERFORM. BDC_PROCESS1 TABLES IT_BDC.
CALL TRANSACTION 'OISD' USING IT_BDC MODE P_MODE UPDATE 'S'
MESSAGES INTO ITAB_M.
IF SY-SUBRC <> 0.
ZRMALOG-ZRMA = ZRMAMASTER-ZRMA.
ZRMALOG-ZSN = ZRMAMASTER-CPN.
ZRMALOG-ZMESSAGE = 'CPN_HHPN cant update with OISD'.
ZRMALOG-ZDATE = SY-DATUM.
ZRMALOG-ZTIME = SY-TIMLO.
APPEND ZRMALOG.
CONTINUE.
ENDIF.
CLEAR IT_BDC.
REFRESH IT_BDC.
ENDIF.
ZRMAMASTER-STATUS = 'N'.
ZRMAMASTER-CPN = ZMATNR .
ZQTY = '1'.
MODIFY ZRMAMASTER.
ENDIF.
CLEAR:ZPCECONTROLVALUE,ZMATNR.
ENDLOOP.
SORT ZRMAMASTER BY ZRMA ZSN.
IF ZRMAMASTER IS INITIAL.
ZRMALOG-ZRMA = 'Null'.
ZRMALOG-ZSN = 'Null'.
ZRMALOG-ZMESSAGE = 'can Append SN is null or SN already exit'.
ZRMALOG-ZDATE = SY-DATUM.
ZRMALOG-ZTIME = SY-TIMLO.
APPEND ZRMALOG.
EXIT.
ELSE.
RECORD[] = ZRMAMASTER[].
ENDIF.
LOOP AT RECORD.
CLEAR:ZSONO,ZPCECONTROLVALUE,ZORDERTYPE.
SELECT SINGLE CVALUE INTO ZORDERTYPE FROM ZPCECONTROLVALUE
WHERE CTYPE = 'RMAORDERTYPE'
AND INDICATOR1 = 'ACT'
AND WERKS = ZRMAMASTER-PLANT .
CLEAR:ZPCECONTROLVALUE.
SELECT SINGLE * FROM ZPCECONTROLVALUE
WHERE CTYPE = RECORD-ZCUSTOMER
AND INDICATOR1 = 'ACT'
AND WERKS = ZRMAMASTER-PLANT .
IF SY-SUBRC <> 0.
ZRMALOG-ZRMA = ZRMAMASTER-PLANT.
ZRMALOG-ZSN = RECORD-ZSN.
ZRMALOG-ZMESSAGE = 'cant find customer code in ZPCECONTROLVALU '.
ZRMALOG-ZDATE = SY-DATUM.
ZRMALOG-ZTIME = SY-TIMLO.
APPEND ZRMALOG.
CONTINUE.
ENDIF.
SELECT SINGLE VBELN INTO ZSONO FROM VBAK WHERE BSTNK = RECORD-ZRMA.
*** APPEND SN to so line item
IF SY-SUBRC = 0.
SELECT SINGLE *
FROM VBAP
WHERE VBELN = ZSONO
AND KANNR = RECORD-ZSN.
IF SY-SUBRC <> 0 .
CLEAR IT_BDC.
REFRESH IT_BDC.
PERFORM. BDC_PROCESS3 TABLES IT_BDC.
CALL TRANSACTION 'VA02' USING IT_BDC MODE P_MODE UPDATE 'S'
MESSAGES INTO ITAB_M.
IF SY-SUBRC = 0.
SELECT SINGLE * FROM MARA WHERE MATNR = RECORD-CPN.
SELECT SINGLE * FROM VBAK WHERE BSTNK = RECORD-ZRMA.
UPDATE ZRMADATA SET SOFLAG = 'Y'
ZSO = ZSONO
WHERE ZRMA = RECORD-ZRMA
AND CPN = MARA-BISMT
AND ZSN = RECORD-ZSN.
SELECT SINGLE * FROM VBAP
WHERE VBELN = ZSONO AND KANNR = RECORD-ZSN.
******CREATE REUTRN DN AND PGR
IF SY-SUBRC = 0.
CLEAR IT_BDC.
REFRESH IT_BDC.
PERFORM. BDC_PROCESS4 TABLES IT_BDC.
CALL TRANSACTION 'VL01N' USING IT_BDC MODE P_MODE UPDATE 'S'
MESSAGES INTO ITAB_M.
IF SY-SUBRC = 0.
SELECT SINGLE * FROM LIPS
WHERE VBELV = ZSONO
AND POSNV = VBAP-POSNR
AND PSTYV = 'ZIRE'.
* AND pstyv = 'IRRE'.
UPDATE ZRMADATA SET ZRDN = LIPS-VBELN
WHERE ZRMA = RECORD-ZRMA
AND ZSN = RECORD-ZSN.
*******generate repair order
SELECT SINGLE * FROM VBAP
WHERE VBELN = ZSONO AND KANNR = RECORD-ZSN.
IF SY-SUBRC = 0.
CLEAR IT_BDC.
REFRESH IT_BDC.
PERFORM. BDC_PROCESS5 TABLES IT_BDC.
CALL TRANSACTION 'VA02' USING IT_BDC MODE P_MODE UPDATE 'S'
MESSAGES INTO ITAB_M.
IF SY-SUBRC <> 0.
ZRMALOG-ZRMA = ZSONO.
ZRMALOG-ZSN = RECORD-ZSN.
ZRMALOG-ZMESSAGE = 'VA02 SO Cread Repair order error'.
ZRMALOG-ZDATE = SY-DATUM.
ZRMALOG-ZTIME = SY-TIMLO.
APPEND ZRMALOG.
ELSE.
SELECT SINGLE * FROM AFPO
WHERE KDAUF = ZSONO
AND KDPOS = VBAP-POSNR.
UPDATE ZRMADATA SET ZWO = AFPO-AUFNR
WHERE ZRMA = RECORD-ZRMA
AND ZSN = RECORD-ZSN.
ENDIF.
ENDIF.
ELSE.
ZRMALOG-ZRMA = ZSONO.
ZRMALOG-ZSN = RECORD-ZSN.
ZRMALOG-ZMESSAGE = 'VL01N SO Cread Return DN_PGR error '.
ZRMALOG-ZDATE = SY-DATUM.
ZRMALOG-ZTIME = SY-TIMLO.
APPEND ZRMALOG.
ENDIF.
ENDIF.
ELSE.
ZRMALOG-ZRMA = RECORD-ZRMA.
ZRMALOG-ZSN = RECORD-ZSN.
ZRMALOG-ZMESSAGE = 'VA02 appen SN error '.
ZRMALOG-ZDATE = SY-DATUM.
ZRMALOG-ZTIME = SY-TIMLO.
APPEND ZRMALOG.
ENDIF.
ENDIF.
ELSE.
**** create so
CLEAR IT_BDC.
REFRESH IT_BDC.
PERFORM. BDC_PROCESS2 TABLES IT_BDC.
CALL TRANSACTION 'VA01' USING IT_BDC MODE P_MODE UPDATE 'S'
MESSAGES INTO ITAB_M.
IF SY-SUBRC = 0.
CLEAR IT_BDC.
REFRESH IT_BDC.
SELECT SINGLE * FROM MARA WHERE MATNR = RECORD-CPN.
SELECT SINGLE VBELN INTO ZSONO
FROM VBAK WHERE BSTNK = RECORD-ZRMA.
UPDATE ZRMADATA SET SOFLAG = 'Y'
ZSO = ZSONO
WHERE ZRMA = RECORD-ZRMA
AND CPN = MARA-BISMT
AND ZSN = RECORD-ZSN.
SELECT SINGLE * FROM VBAP
WHERE VBELN = ZSONO AND KANNR = RECORD-ZSN.
******CREATE REUTRN DN AND PGR
IF SY-SUBRC = 0.
CLEAR IT_BDC.
REFRESH IT_BDC.
PERFORM. BDC_PROCESS4 TABLES IT_BDC.
CALL TRANSACTION 'VL01N' USING IT_BDC MODE P_MODE UPDATE 'S'
MESSAGES INTO ITAB_M.
IF SY-SUBRC = 0.
SELECT SINGLE * FROM LIPS
WHERE VBELV = ZSONO
AND POSNV = VBAP-POSNR
AND PSTYV = 'ZIRE'.
* AND pstyv = 'IRRE'.
UPDATE ZRMADATA SET ZRDN = LIPS-VBELN
WHERE ZRMA = RECORD-ZRMA
AND ZSN = RECORD-ZSN.
*******generate repair order
CLEAR IT_BDC.
REFRESH IT_BDC.
SELECT SINGLE * FROM VBAP
WHERE VBELN = ZSONO AND KANNR = RECORD-ZSN.
IF SY-SUBRC = 0.
PERFORM. BDC_PROCESS5 TABLES IT_BDC.
CALL TRANSACTION 'VA02' USING IT_BDC MODE P_MODE UPDATE 'S'
MESSAGES INTO ITAB_M.
IF SY-SUBRC <> 0.
ZRMALOG-ZRMA = ZSONO.
ZRMALOG-ZSN = RECORD-ZSN.
ZRMALOG-ZMESSAGE = 'VA02 SO Cread Repair order error '.
ZRMALOG-ZDATE = SY-DATUM.
ZRMALOG-ZTIME = SY-TIMLO.
APPEND ZRMALOG.
ELSE.
SELECT SINGLE * FROM AFPO
WHERE KDAUF = ZSONO
AND KDPOS = VBAP-POSNR.
UPDATE ZRMADATA SET ZWO = AFPO-AUFNR
WHERE ZRMA = RECORD-ZRMA
AND ZSN = RECORD-ZSN.
ENDIF.
ENDIF.
ELSE.
ZRMALOG-ZRMA = ZSONO.
ZRMALOG-ZSN = RECORD-ZSN.
ZRMALOG-ZMESSAGE = 'VL01N SO Cread Return DN_PGR error '.
ZRMALOG-ZDATE = SY-DATUM.
ZRMALOG-ZTIME = SY-TIMLO.
APPEND ZRMALOG.
ENDIF.
ENDIF.
ELSE.
ZRMALOG-ZRMA = RECORD-ZRMA.
ZRMALOG-ZSN = RECORD-ZSN.
ZRMALOG-ZMESSAGE = 'VA01 Create so error '.
ZRMALOG-ZDATE = SY-DATUM.
ZRMALOG-ZTIME = SY-TIMLO.
APPEND ZRMALOG.
ENDIF.
ENDIF.
ENDLOOP.
INSERT ZRMALOG FROM TABLE ZRMALOG ACCEPTING DUPLICATE KEYS .
ENDFUNCTION.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14397246/viewspace-665925/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14397246/viewspace-665925/