RMA1

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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值