检验计划上传与物料分配到检验计划

 

REPORT ZQMQPE001 NO STANDARD PAGE HEADING LINE-SIZE 255 MESSAGE-ID MG.

*----------------------------------------------------------------------*
* Program     :  ZQMQPE001                                             *
* Author      :  Patrick,Song                                          *
* Date        :  Aug 13, 2008                                          *
* Code type   :  conversion                                            *
* Version     :  new creation                                          *
* (interface/conversion/on-line transaction/report)                    *
*                                                                      *
*----------------------------------------------------------------------*
* Error handling :                                                     *
*----------------------------------------------------------------------*
* 1.                                                                   *
*                                                                      *
*----------------------------------------------------------------------*
* Change log :                                                         *
*----------------------------------------------------------------------*
* CR#       :                                                          *
* Corr. no. :                                                          *
* Date      :                                                          *
* Author    :                                                          *
* Change    :                                                          *
*                                                                      *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* include program & subrouting                                         *
*----------------------------------------------------------------------*
INCLUDE   : ZBCDWI000 .
TYPE-POOLS: KCDE.

*----------------------------------------------------------------------*
* tables declaration                                                   *
*----------------------------------------------------------------------*
TABLES:  EORD,  " Purchasing Source List
         MAPL,  " Assignment of Task Lists to Materials
         MARA,  " General Material Data
         MARC,  " Plant Data for Material
         MARM,  " Units of Measure for Material
         PLKZ,  " Task list: main header
         PLFL,  " Task list - sequences
         PLKO,  " Task list - header
         LFA1.  " Vendor Master (General Section)

*----------------------------------------------------------------------*
* selection screen definition                                          *
*----------------------------------------------------------------------*
*  Input file information block B1
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE  TEXT-TB1.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: P_CREATE RADIOBUTTON GROUP GRP DEFAULT 'X'.
SELECTION-SCREEN COMMENT 03(45) TEXT-PT1 FOR FIELD P_CREATE.
PARAMETERS: P_ASSIGN RADIOBUTTON GROUP GRP .
SELECTION-SCREEN COMMENT 50(45) TEXT-PT2 FOR FIELD P_ASSIGN.
SELECTION-SCREEN END   OF LINE.

SELECTION-SCREEN END OF BLOCK B1.
PARAMETERS: P_FILE LIKE RLGRAP-FILENAME OBLIGATORY .


*----------------------------------------------------------------------*
* Internal tables and field strings                                    *
*----------------------------------------------------------------------*
*-* to store uploaded data

*----------------------------------------------------------------------*
* Global program variables                                             *
*----------------------------------------------------------------------*
* define table to store tempoary data
DATA INT_TAB     TYPE KCDE_INTERN_STRUC OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF ITAB OCCURS 0 .
DATA: PLNNR   LIKE RC271-PLNNR .
DATA: WERKS   LIKE RC27M-WERKS .
DATA: PLNAL   LIKE RC271-PLNAL .
DATA: VERWE   LIKE PLKOD-VERWE .
DATA: KTEXT   LIKE PLKOD-KTEXT .
DATA: PLNME   LIKE PLKOD-PLNME.
DATA: LTXA1   LIKE PLPOD-LTXA1.
DATA: ZEILE   LIKE MSEG-ZEILE .
DATA: VERWM   LIKE PLMKB-VERWMERKM.
DATA: ZTEXT   LIKE PLKOD-KTEXT .
DATA: INPRO   LIKE PLMKB-STICHPRVER.
DATA: SELK(001) .
DATA: END   OF ITAB .

DATA: BEGIN OF WTAB OCCURS 0 .
DATA: PLNNR   LIKE RC271-PLNNR .
DATA: WERKS   LIKE RC27M-WERKS .
DATA: PLNAL   LIKE RC271-PLNAL .
DATA: VERWE   LIKE PLKOD-VERWE .
DATA: KTEXT   LIKE PLKOD-KTEXT .
DATA: PLNME   LIKE PLKOD-PLNME .
DATA: LTXA1   LIKE PLPOD-LTXA1.
DATA: END   OF WTAB .

*-> define internal table for Material Allocation for Inspection Plan
DATA: BEGIN OF MTAB OCCURS 0 .
DATA: PLNNR   LIKE RC271-PLNNR .
DATA: WERKS   LIKE RC27M-WERKS .
DATA: PLNAL   LIKE RC271-PLNAL .
DATA: MATNR   LIKE MAPL-MATNR  .
DATA: MAKTX   LIKE MAKT-MAKTX  .
DATA: MWERK   LIKE MAPL-WERKS  .
DATA: LIFNR   LIKE MAPL-LIFNR  .
DATA: SELK(001) .
DATA: END   OF MTAB .

DATA: BEGIN OF QTAB OCCURS 0 .
DATA: PLNNR   LIKE RC271-PLNNR .
DATA: WERKS   LIKE RC27M-WERKS .
DATA: PLNAL   LIKE RC271-PLNAL .
DATA: END   OF QTAB .

DATA: L_PLNME LIKE PLKO-PLNME .
DATA: L_MEINS_CHK(010) .
*-> data declaration for ALV Output
DATA: S_STATUS       TYPE SLIS_FORMNAME VALUE 'STANDARD_ST01',
      S_USER_COMM    TYPE SLIS_FORMNAME VALUE 'USER_COMM-ALV',
      S_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND-ALV'.

CONSTANTS: C_NODATA(001) VALUE ' '.   "nodata-character
DATA: C_GROUP(012) VALUE 'ZQMQPE001'.
*data: c_user(012) value  sy-uname .
DATA: C_KEEP(001) .
DATA: C_HOLDDATE LIKE SY-DATUM.

DATA: BEGIN OF BDCDATA OCCURS 0.
        INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDCDATA.
DATA: L_PROCESSED(001) .

*--* define internal table for error store
DATA: BEGIN OF I_ERROR OCCURS 0.
DATA: PLNNR   LIKE RC271-PLNNR .
DATA: WERKS   LIKE RC27M-WERKS .
DATA: PLNAL   LIKE RC271-PLNAL .
DATA: MATNR   LIKE MAPL-MATNR  .
DATA: MAKTX   LIKE MAKT-MAKTX  .
DATA: MWERK   LIKE MAPL-WERKS  .
DATA: LIFNR   LIKE MAPL-LIFNR  .
DATA: FIELD(010).
DATA: VALUE(020).
DATA: MESSAGE(040).
DATA: SELK(001) .
DATA: END   OF I_ERROR.

DATA: L_PLNNR   LIKE RC271-PLNNR .
DATA: L_WERKS   LIKE RC27M-WERKS .
DATA: L_PLNAL   LIKE RC271-PLNAL .
DATA: L_MATNR   LIKE MAPL-MATNR  .
DATA: L_MWERK   LIKE MAPL-WERKS  .
DATA: L_LIFNR   LIKE MAPL-LIFNR  .

DATA: STR_CHK_NEW TYPE STRING .
DATA: STR_CHK_OLD TYPE STRING .
DATA: L_FIRST TYPE I .

DATA: P_TIMES TYPE I VALUE '10'."Do 10 times (PgDn) while records exists.

*----------------------------------------------------------------------*
* initialization.                                                      *
*----------------------------------------------------------------------*
INITIALIZATION.
  REFRESH: ITAB, INT_TAB, WTAB .
  CLEAR  : ITAB, INT_TAB, WTAB .
*----------------------------------------------------------------------*
* At Selection-screen                                                  *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

  PERFORM GET_FILE_PATHNAME.

*----------------------------------------------------------------------*
* Start-of-selection                                                   *
*----------------------------------------------------------------------*
START-OF-SELECTION.
  CLEAR: L_PROCESSED .
  PERFORM READ_INPUT_FILE .

  IF NOT P_CREATE IS INITIAL .
    LOOP AT ITAB .
      MOVE-CORRESPONDING ITAB TO WTAB .
      COLLECT WTAB .
      CLEAR   WTAB .
    ENDLOOP .
  ENDIF .
  IF NOT P_ASSIGN IS INITIAL .
    REFRESH: I_ERROR. CLEAR: I_ERROR .

    SORT MTAB BY PLNNR WERKS PLNAL MATNR MWERK LIFNR .
    CLEAR:   L_PLNNR, L_WERKS, L_PLNAL, L_MATNR, L_MWERK, L_LIFNR .
    CLEAR: STR_CHK_NEW, STR_CHK_OLD .
    LOOP AT MTAB .
      CLEAR: MARA.
      IF NOT MTAB-MATNR IS INITIAL.
        SELECT SINGLE * FROM MARA CLIENT SPECIFIED
                       WHERE MANDT = SY-MANDT
                         AND MATNR = MTAB-MATNR.
        IF SY-SUBRC <> 0.
          PERFORM STORE_ERROR_DETAILS USING 'MTAB-MATNR' MTAB-MATNR TEXT-E06.
        ENDIF.
      ENDIF .
      CLEAR: MARC.
      SELECT SINGLE * FROM MARC CLIENT SPECIFIED
                       WHERE MANDT = SY-MANDT
                         AND MATNR = MTAB-MATNR
                         AND WERKS = MTAB-MWERK.
      IF SY-SUBRC <> 0.
        PERFORM STORE_ERROR_DETAILS USING 'MTAB-MWERK' MTAB-MWERK TEXT-E05.
      ENDIF.
      CHECK NOT MTAB-LIFNR IS INITIAL .
      CLEAR: LFA1.
      SELECT SINGLE * FROM LFA1 CLIENT SPECIFIED
                       WHERE MANDT = SY-MANDT
                         AND LIFNR = MTAB-LIFNR.
      IF SY-SUBRC <> 0.
        PERFORM STORE_ERROR_DETAILS USING 'MTAB-LIFNR' MTAB-LIFNR TEXT-E04.
      ENDIF.
      CHECK NOT MTAB-LIFNR IS INITIAL .
      CLEAR: EORD.
      SELECT SINGLE * FROM EORD CLIENT SPECIFIED
                       WHERE MANDT = SY-MANDT
                         AND MATNR = MTAB-MATNR
                         AND WERKS = MTAB-MWERK
                         AND LIFNR = MTAB-LIFNR.
      IF SY-SUBRC <> 0.
        PERFORM STORE_ERROR_DETAILS USING 'MTAB-MWERK' MTAB-LIFNR TEXT-E03.
      ENDIF.

      SELECT SINGLE PLNME INTO L_PLNME FROM PLKO CLIENT SPECIFIED
                 WHERE MANDT = SY-MANDT
                   AND PLNNR = MTAB-PLNNR
                   AND PLNAL = MTAB-PLNAL
                   AND LOEKZ = SPACE
                   AND PLNTY =  'Q'.
      CLEAR: MARM .
      SELECT SINGLE * FROM MARM CLIENT SPECIFIED
                     WHERE MANDT = SY-MANDT
                       AND MATNR = MTAB-MATNR AND MEINH = L_PLNME .
      IF SY-SUBRC NE 0 .
        CONCATENATE L_PLNME MARA-MEINS INTO L_MEINS_CHK SEPARATED BY SPACE.
        PERFORM STORE_ERROR_DETAILS USING 'MTAB-MATNR' L_MEINS_CHK TEXT-E10.
      ENDIF .
      CLEAR: STR_CHK_NEW .
      CONCATENATE MTAB-PLNNR MTAB-WERKS MTAB-PLNAL
                  MTAB-MATNR MTAB-MWERK MTAB-LIFNR
             INTO STR_CHK_NEW .

      IF STR_CHK_NEW EQ STR_CHK_OLD.
        DELETE MTAB .
      ELSE .
        STR_CHK_OLD = STR_CHK_NEW.
      ENDIF.
    ENDLOOP .

    LOOP AT MTAB .
      CLEAR: MAPL .
      SELECT SINGLE * FROM MAPL CLIENT SPECIFIED WHERE MANDT = SY-MANDT
                       AND MATNR = MTAB-MATNR AND PLNNR = MTAB-PLNNR
                       AND WERKS = MTAB-MWERK AND PLNTY = 'Q'
                       AND PLNAL = MTAB-PLNAL AND LOEKZ = SPACE
                       AND LIFNR = MTAB-LIFNR.
      IF SY-SUBRC = 0.
        DELETE MTAB. .
      ELSE .
        MOVE-CORRESPONDING MTAB TO QTAB .
        COLLECT QTAB .
        CLEAR   QTAB .
      ENDIF .
    ENDLOOP .

    LOOP AT QTAB .
      CLEAR: MAPL .
      SELECT SINGLE * FROM PLFL CLIENT SPECIFIED
                   WHERE MANDT = SY-MANDT
                     AND PLNNR = QTAB-PLNNR
                     AND PLNAL = QTAB-PLNAL
                     AND LOEKZ = SPACE
                     AND PLNTY =  'Q'.
      IF SY-SUBRC NE 0 .
        PERFORM STORE_ERROR_DETAILS USING 'QTAB-PLNNR' QTAB-PLNNR TEXT-E07.
      ENDIF .
    ENDLOOP .
  ENDIF.

  PERFORM PREPARE_ALV_FIELDS.
  PERFORM DISPLAY_ALV_RESULT .


*----------------------------------------------------------------------*
* End-of-selection                                                     *
*----------------------------------------------------------------------*
END-OF-SELECTION.


*&---------------------------------------------------------------------*
*&      Form  GET_FILE_PATHNAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_FILE_PATHNAME .

  CALL FUNCTION 'WS_FILENAME_GET'             "Get file name
       EXPORTING
*            DEF_FILENAME     = ' '
*            DEF_PATH         = ' '
             MASK             = ',*.* ,*.*.'
             MODE             = '0'
             TITLE            = TEXT-H10
       IMPORTING
             FILENAME         = P_FILE
*            RC               =
       EXCEPTIONS
             INV_WINSYS       = 1
             NO_BATCH         = 2
             SELECTION_CANCEL = 3
             SELECTION_ERROR  = 4
             OTHERS           = 5.
  IF SY-SUBRC <> 0.
*            MESSAGE E016 WITH P_PATH.
  ENDIF.

ENDFORM.                    " GET_FILE_PATHNAME

*&---------------------------------------------------------------------*
*&      Form  READ_INPUT_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM READ_INPUT_FILE .

** call function to get path and name if parameter is initial
  IF P_FILE IS INITIAL.
    CALL FUNCTION 'F4_FILENAME'
      IMPORTING
        FILE_NAME = P_FILE.
  ENDIF.

  REFRESH: ITAB, INT_TAB, MTAB .
  CLEAR  : ITAB, INT_TAB, MTAB .


*-> Process Inspection Plan Creation
  IF NOT P_CREATE IS INITIAL .
    REFRESH: ITAB.   CLEAR  : ITAB .
    CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
      EXPORTING
        FILENAME                = P_FILE
        I_BEGIN_COL             = 1
        I_BEGIN_ROW             = 2
        I_END_COL               = 12
        I_END_ROW               = 9999
      TABLES
        INTERN                  = INT_TAB
      EXCEPTIONS
        INCONSISTENT_PARAMETERS = 1
        UPLOAD_OLE              = 2
        OTHERS                  = 3.
    SORT INT_TAB BY ROW COL.
    LOOP AT INT_TAB.
      AT NEW ROW.
        CLEAR: ITAB.
      ENDAT.
      CASE INT_TAB-COL.
        WHEN 1.
          MOVE INT_TAB-VALUE TO ITAB-PLNNR.  TRANSLATE ITAB-PLNNR TO UPPER CASE.
        WHEN 2.
          MOVE INT_TAB-VALUE TO ITAB-WERKS.  TRANSLATE ITAB-WERKS TO UPPER CASE.
        WHEN 3.
          MOVE INT_TAB-VALUE TO ITAB-PLNAL.  TRANSLATE ITAB-PLNAL TO UPPER CASE.
        WHEN 4.
          MOVE INT_TAB-VALUE TO ITAB-VERWE.  TRANSLATE ITAB-VERWE TO UPPER CASE.
        WHEN 5.
          MOVE INT_TAB-VALUE TO ITAB-KTEXT.  TRANSLATE ITAB-KTEXT TO UPPER CASE.
        WHEN 6.
          MOVE INT_TAB-VALUE TO ITAB-PLNME.  TRANSLATE ITAB-PLNME TO UPPER CASE.
        WHEN 7.
          MOVE INT_TAB-VALUE TO ITAB-LTXA1.  TRANSLATE ITAB-LTXA1 TO UPPER CASE.
        WHEN 8.
          MOVE INT_TAB-VALUE TO ITAB-ZEILE.  TRANSLATE ITAB-ZEILE TO UPPER CASE.
        WHEN 9.
          MOVE INT_TAB-VALUE TO ITAB-VERWM.  TRANSLATE ITAB-VERWM TO UPPER CASE.
        WHEN 10.
          MOVE INT_TAB-VALUE TO ITAB-ZTEXT.  TRANSLATE ITAB-ZTEXT TO UPPER CASE.
        WHEN 11.
          MOVE INT_TAB-VALUE TO ITAB-INPRO.  TRANSLATE ITAB-INPRO TO UPPER CASE.
      ENDCASE.
      AT END OF ROW.
        PERFORM FORMAT_ALPHA_OUTPUT CHANGING ITAB-PLNNR .
        PERFORM FORMAT_ALPHA_OUTPUT CHANGING ITAB-PLNAL .
        APPEND ITAB.
        CLEAR  ITAB.
      ENDAT.
    ENDLOOP.
    SORT ITAB BY PLNNR WERKS PLNAL ASCENDING.
  ENDIF .
*-> Process Material & Source List Allocation
  IF NOT P_ASSIGN IS INITIAL .

    REFRESH: MTAB.    CLEAR  : MTAB .
    CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
      EXPORTING
        FILENAME                = P_FILE
        I_BEGIN_COL             = 1
        I_BEGIN_ROW             = 2
        I_END_COL               = 7
        I_END_ROW               = 9999
      TABLES
        INTERN                  = INT_TAB
      EXCEPTIONS
        INCONSISTENT_PARAMETERS = 1
        UPLOAD_OLE              = 2
        OTHERS                  = 3.
    SORT INT_TAB BY ROW COL.

    LOOP AT INT_TAB.
      AT NEW ROW.
        CLEAR: MTAB.
      ENDAT.
      CASE INT_TAB-COL.
        WHEN 1.
          MOVE INT_TAB-VALUE TO MTAB-PLNNR.  TRANSLATE MTAB-PLNNR TO UPPER CASE.
        WHEN 2.
          MOVE INT_TAB-VALUE TO MTAB-WERKS.  TRANSLATE MTAB-WERKS TO UPPER CASE.
        WHEN 3.
          MOVE INT_TAB-VALUE TO MTAB-PLNAL.  TRANSLATE MTAB-PLNAL TO UPPER CASE.
        WHEN 4.
          MOVE INT_TAB-VALUE TO MTAB-MATNR.  TRANSLATE MTAB-MATNR TO UPPER CASE.
        WHEN 5.
          MOVE INT_TAB-VALUE TO MTAB-MWERK.  TRANSLATE MTAB-MWERK TO UPPER CASE.
        WHEN 6.
          MOVE INT_TAB-VALUE TO MTAB-MAKTX.  TRANSLATE MTAB-MAKTX TO UPPER CASE.
        WHEN 7.
          MOVE INT_TAB-VALUE TO MTAB-LIFNR.  TRANSLATE MTAB-LIFNR TO UPPER CASE.
      ENDCASE.
      AT END OF ROW.
        PERFORM FORMAT_ALPHA_OUTPUT CHANGING MTAB-PLNNR .
        PERFORM FORMAT_ALPHA_OUTPUT CHANGING MTAB-PLNAL .
        PERFORM FORMAT_ALPHA_OUTPUT CHANGING MTAB-LIFNR .
        APPEND MTAB.
        CLEAR  MTAB.
      ENDAT.
    ENDLOOP.
    SORT MTAB BY PLNNR WERKS PLNAL ASCENDING.
  ENDIF .

ENDFORM.                    " READ_INPUT_FILE
*&---------------------------------------------------------------------*
*&      Form  PREPARE_ALV_FIELDS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PREPARE_ALV_FIELDS .
  IF NOT P_ASSIGN IS INITIAL .
    IF I_ERROR[] IS INITIAL .
      CLEAR  : G_ALV_FIELDCAT .
      PERFORM SET_ALV_FIELDS USING 'PLNNR'       'MTAB'    '' TEXT-K01.
      PERFORM SET_ALV_FIELDS USING 'WERKS'       'MTAB'    '' TEXT-K02.
      PERFORM SET_ALV_FIELDS USING 'PLNAL'       'MTAB'    '' TEXT-K03.
      PERFORM SET_ALV_FIELDS USING 'MATNR'       'MTAB'    '' TEXT-K04.
      PERFORM SET_ALV_FIELDS USING 'MAKTX'       'MTAB'    '' TEXT-K05.
      PERFORM SET_ALV_FIELDS USING 'MWERK'       'MTAB'    '' TEXT-K06.
      PERFORM SET_ALV_FIELDS USING 'LIFNR'       'MTAB'    '' TEXT-K07.
    ELSE.
      CLEAR  : G_ALV_FIELDCAT .
      PERFORM SET_ALV_FIELDS USING 'PLNNR'       'I_ERROR' '' TEXT-K01.
      PERFORM SET_ALV_FIELDS USING 'WERKS'       'I_ERROR' '' TEXT-K02.
      PERFORM SET_ALV_FIELDS USING 'PLNAL'       'I_ERROR' '' TEXT-K03.
      PERFORM SET_ALV_FIELDS USING 'MATNR'       'I_ERROR' '' TEXT-K04.
      PERFORM SET_ALV_FIELDS USING 'MAKTX'       'I_ERROR' '' TEXT-K05.
      PERFORM SET_ALV_FIELDS USING 'MWERK'       'I_ERROR' '' TEXT-K06.
      PERFORM SET_ALV_FIELDS USING 'LIFNR'       'I_ERROR' '' TEXT-K07.
      PERFORM SET_ALV_FIELDS USING 'FIELD'       'I_ERROR' '' TEXT-K08.
      PERFORM SET_ALV_FIELDS USING 'VALUE'       'I_ERROR' '' TEXT-K09.
      PERFORM SET_ALV_FIELDS USING 'MESSAGE'     'I_ERROR' '' TEXT-K10.
    ENDIF .
  ENDIF.

  IF NOT P_CREATE IS INITIAL .
    CLEAR  : G_ALV_FIELDCAT .
    PERFORM SET_ALV_FIELDS USING 'PLNNR'       'ITAB' '' TEXT-K01.
    PERFORM SET_ALV_FIELDS USING 'WERKS'       'ITAB' '' TEXT-K02.
    PERFORM SET_ALV_FIELDS USING 'PLNAL'       'ITAB' '' TEXT-K03.
    PERFORM SET_ALV_FIELDS USING 'VERWE'       'ITAB' '' TEXT-B01.
    PERFORM SET_ALV_FIELDS USING 'KTEXT'       'ITAB' '' TEXT-B02.
    PERFORM SET_ALV_FIELDS USING 'PLNME'       'ITAB' '' TEXT-B03.
    PERFORM SET_ALV_FIELDS USING 'LTXA1'       'ITAB' '' TEXT-B04.
    PERFORM SET_ALV_FIELDS USING 'ZEILE'       'ITAB' '' TEXT-B05.
    PERFORM SET_ALV_FIELDS USING 'VERWM'       'ITAB' '' TEXT-B06.
    PERFORM SET_ALV_FIELDS USING 'ZTEXT'       'ITAB' '' TEXT-B07.
    PERFORM SET_ALV_FIELDS USING 'INPRO'       'ITAB' '' TEXT-B08.
  ENDIF .
  PERFORM LAYOUT_BUILD   USING G_ALV_LAYOUT .

ENDFORM.                    " PREPARE_ALV_FIELDS

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV_RESULT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_ALV_RESULT .

  IF NOT P_CREATE IS INITIAL .
    SORT ITAB BY PLNNR WERKS PLNAL ZEILE .
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
        I_CALLBACK_PROGRAM          = SY-CPROG
        IS_LAYOUT                   = G_ALV_LAYOUT
*     i_callback_html_top_of_page = 'ALV_TOP_OF_PAGE'
        I_CALLBACK_PF_STATUS_SET    = S_STATUS
        I_DEFAULT                   = 'X'
        I_SAVE                      = 'X'
        I_CALLBACK_USER_COMMAND     = S_USER_COMMAND
        IT_FIELDCAT                 = G_ALV_FIELDCAT[]
        IT_EVENTS                   = G_ALV_EVENT
      TABLES
        T_OUTTAB                    = ITAB[].
  ENDIF .

  IF NOT P_ASSIGN IS INITIAL .

    IF NOT I_ERROR[] IS INITIAL .
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          I_CALLBACK_PROGRAM          = SY-CPROG
          IS_LAYOUT                   = G_ALV_LAYOUT
*     i_callback_html_top_of_page = 'ALV_TOP_OF_PAGE'
          I_CALLBACK_PF_STATUS_SET    = S_STATUS
          I_DEFAULT                   = 'X'
          I_SAVE                      = 'X'
          I_CALLBACK_USER_COMMAND     = S_USER_COMMAND
          IT_FIELDCAT                 = G_ALV_FIELDCAT[]
          IT_EVENTS                   = G_ALV_EVENT
        TABLES
          T_OUTTAB                    = I_ERROR[].
    ELSE.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          I_CALLBACK_PROGRAM          = SY-CPROG
          IS_LAYOUT                   = G_ALV_LAYOUT
*     i_callback_html_top_of_page = 'ALV_TOP_OF_PAGE'
          I_CALLBACK_PF_STATUS_SET    = S_STATUS
          I_DEFAULT                   = 'X'
          I_SAVE                      = 'X'
          I_CALLBACK_USER_COMMAND     = S_USER_COMMAND
          IT_FIELDCAT                 = G_ALV_FIELDCAT[]
          IT_EVENTS                   = G_ALV_EVENT
        TABLES
          T_OUTTAB                    = MTAB[].
    ENDIF .
  ENDIF .


ENDFORM.                    " DISPLAY_ALV_RESULT

*-------------------------------------------------------------------
*       FORM USER_COMMAND-ALV
*-------------------------------------------------------------------
FORM USER_COMMAND-ALV USING R_UCOMM LIKE SY-UCOMM
                  RS_SELFIELD TYPE SLIS_SELFIELD.

  DATA: FELD(10) TYPE C.
* table rs_selfield store the information of cursor and table index.
  RS_SELFIELD-REFRESH = 'X'.

  CASE R_UCOMM.
    WHEN 'WCCT' .
      IF NOT P_CREATE IS INITIAL .
        IF L_PROCESSED EQ SPACE .
          READ TABLE ITAB WITH KEY SELK = ' '.
          IF SY-SUBRC = 0 .
            MESSAGE E899 WITH TEXT-E02.
          ELSE.
            CLEAR: L_ANSWER .
            PERFORM POPUP_TO_CONFIRM USING TEXT-T01 TEXT-Q01.
            IF L_ANSWER = '1'.
              PERFORM INSPECTION_PLAN_MAINTAIN.
              L_PROCESSED = 'Y'.
            ENDIF .
          ENDIF .
        ELSE.
          MESSAGE E899 WITH TEXT-E01.
        ENDIF .
      ELSE.
        IF NOT I_ERROR[] IS INITIAL .
          MESSAGE E899 WITH TEXT-E08.
        ELSE .
          IF L_PROCESSED EQ SPACE.
            READ TABLE MTAB WITH KEY SELK = ' '.
            IF SY-SUBRC = 0 .
              MESSAGE E899 WITH TEXT-E02.
            ELSE.
              CLEAR: L_ANSWER .
              PERFORM POPUP_TO_CONFIRM USING TEXT-T01 TEXT-Q01.
              IF L_ANSWER = '1'.
                PERFORM INSPECTION_PLAN_ASSIGNMENT.
                L_PROCESSED = 'Y'.
              ENDIF .
            ENDIF .
          ELSE.
            MESSAGE E899 WITH TEXT-E01.
          ENDIF .
        ENDIF .
      ENDIF .
  ENDCASE .
  CLEAR R_UCOMM.

ENDFORM.                    "user_command-alv


*&---------------------------------------------------------------------*
*&      Form  STANDARD_ST01
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->EXTAB      text
*----------------------------------------------------------------------*
FORM STANDARD_ST01 USING EXTAB TYPE SLIS_T_EXTAB.

* contain all fcode from ALV *
  DELETE EXTAB WHERE FCODE = '&RNT_PREV'.
  DELETE EXTAB WHERE FCODE = '&LFO'.
  DELETE EXTAB WHERE FCODE = '&NFO'.
  DELETE EXTAB WHERE FCODE = '&RNT'.
  SET PF-STATUS 'ALVST'.
  SET TITLEBAR  'ALVST'.

ENDFORM.                    "standard_st01


*&---------------------------------------------------------------------*
*&      Form  CLOSE_GROUP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM CLOSE_GROUP.
* close batchinput group
  CALL FUNCTION 'BDC_CLOSE_GROUP'.
  WRITE: /(30) 'BDC_CLOSE_GROUP'(I04),
          (12) 'returncode:'(I05),
               SY-SUBRC.
ENDFORM.                    "CLOSE_GROUP

*&---------------------------------------------------------------------*
*&      Form  OPEN_GROUP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM OPEN_GROUP.

  SKIP.
  WRITE: /(20) 'Create group'(I01), C_GROUP.
  SKIP.
* open batchinput group
  CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
      CLIENT   = SY-MANDT
      GROUP    = C_GROUP
*     user     = c_user
      USER     = SY-UNAME
      KEEP     = 'X' "C_KEEP
      HOLDDATE = C_HOLDDATE.
  WRITE: /(30) 'BDC_OPEN_GROUP'(I02),
          (12) 'returncode:'(I05),
               SY-SUBRC.
ENDFORM.                    "OPEN_GROUP

*-------------------------------------------------------------------
*       FORM USER_COMMAND-ALV
*-------------------------------------------------------------------
FORM USER_COMM-ALV USING R_UCOMM LIKE SY-UCOMM
                     RS_SELFIELD TYPE SLIS_SELFIELD.

  DATA: FELD(10) TYPE C.
* table rs_selfield store the information of cursor and table index.
  RS_SELFIELD-REFRESH = 'X'.

  CASE R_UCOMM.
    WHEN 'PICK'.
  ENDCASE .
  CLEAR R_UCOMM.

ENDFORM.                    "user_command-alv

*&---------------------------------------------------------------------*
*&      Form  INSPECTION_PLAN_MAINTAIN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM INSPECTION_PLAN_MAINTAIN .

  DATA: L_METHOD(006). " M00001 or M00002

  SORT ITAB BY PLNNR WERKS PLNAL ZEILE .
  PERFORM OPEN_GROUP.
  LOOP AT WTAB .
    PERFORM BDC_DYNPRO      USING 'SAPLCPDI' '8010'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=ALUE'.
    PERFORM BDC_FIELD       USING 'RC27M-WERKS'
                                   WTAB-WERKS.
    PERFORM BDC_FIELD       USING 'RC271-PLNNR'
                                   WTAB-PLNNR.
    PERFORM BDC_DYNPRO      USING 'SAPLCPDI' '1200'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=ANLG'.
    PERFORM BDC_DYNPRO      USING 'SAPLCPDA' '1200'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '/00'.
    PERFORM BDC_FIELD       USING 'PLKOD-PLNAL'
                                   WTAB-PLNAL.
    PERFORM BDC_FIELD       USING 'PLKOD-KTEXT'
                                   WTAB-KTEXT.
    PERFORM BDC_FIELD       USING 'PLKOD-VERWE'
                                   WTAB-VERWE.
    PERFORM BDC_FIELD       USING 'PLKOD-STATU'
                                  '4'.
    PERFORM BDC_FIELD       USING 'PLKOD-PLNME'
                                   WTAB-PLNME.
    PERFORM BDC_FIELD       USING 'PLKOD-QDYNHEAD'
                                  '1'.
    PERFORM BDC_FIELD       USING 'PLKOD-QDYNREGEL'
                                  'DNY'.
    PERFORM BDC_DYNPRO      USING 'SAPLCPDA' '1200'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=VOUE'.
    PERFORM BDC_DYNPRO      USING 'SAPLCPDI' '1400'.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                  'PLPOD-LTXA1(01)'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '/00'.
    PERFORM BDC_FIELD       USING 'PLPOD-STEUS(01)'
                                  'QM01'.
    PERFORM BDC_FIELD       USING 'PLPOD-LTXA1(01)'
                                   WTAB-LTXA1.
    PERFORM BDC_DYNPRO      USING 'SAPLCPDI' '1400'.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                  'PLPOD-VORNR(01)'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=QMUE'.
    PERFORM BDC_FIELD       USING 'RC27X-FLG_SEL(01)'
                                   'X'.
    LOOP AT ITAB WHERE PLNNR = WTAB-PLNNR AND WERKS = WTAB-WERKS AND PLNAL = WTAB-PLNAL .
      CLEAR: L_METHOD .
      IF ITAB-VERWM = 'C00001' OR ITAB-VERWM = 'C00002' OR ITAB-VERWM = 'C00009' OR
         ITAB-VERWM = 'C00003' OR ITAB-VERWM = 'C00004'.
        L_METHOD = 'M00002'.
      ELSEIF ITAB-VERWM = 'C00005' OR ITAB-VERWM = 'C00006' OR ITAB-VERWM = 'C00008'
          OR ITAB-VERWM = 'C00007'.
        L_METHOD = 'M00001'.
      ENDIF .
      CASE ITAB-ZEILE.
        WHEN 1.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '0150'.
          PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                        'PLMKB-STICHPRVER(01)'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=P+'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '0150'.
          PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                        'PLMKB-STICHPRVER(01)'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '/00'.
          PERFORM BDC_FIELD       USING 'PLMKB-MERKNR(01)'
                                        '0010'.
          PERFORM BDC_FIELD       USING 'PLMKB-VERWMERKM(01)'
                                         ITAB-VERWM.
          PERFORM BDC_FIELD       USING 'PLMKB-PMETHODE(01)'
                                         L_METHOD .
          PERFORM BDC_FIELD       USING 'PLMKB-QMTB_WERKS(01)'
                                         ITAB-WERKS.
          PERFORM BDC_FIELD       USING 'PLMKB-STICHPRVER(01)'
                                         ITAB-INPRO.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1501'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
***********************************************************
        WHEN 2 .
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '0150'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '/00'.
          PERFORM BDC_FIELD       USING 'PLMKB-MERKNR(02)'
                                        '0020'.
          PERFORM BDC_FIELD       USING 'PLMKB-VERWMERKM(02)'
                                         ITAB-VERWM.
          PERFORM BDC_FIELD       USING 'PLMKB-PMETHODE(02)'
                                         L_METHOD .
          PERFORM BDC_FIELD       USING 'PLMKB-QMTB_WERKS(02)'
                                         ITAB-WERKS.
          PERFORM BDC_FIELD       USING 'PLMKB-STICHPRVER(02)'
                                         ITAB-INPRO.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1501'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
******************************************************
        WHEN 3 .
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '0150'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '/00'.
          PERFORM BDC_FIELD       USING 'PLMKB-MERKNR(03)'
                                        '0030'.
          PERFORM BDC_FIELD       USING 'PLMKB-VERWMERKM(03)'
                                         ITAB-VERWM.
          PERFORM BDC_FIELD       USING 'PLMKB-PMETHODE(03)'
                                         L_METHOD .
          PERFORM BDC_FIELD       USING 'PLMKB-QMTB_WERKS(03)'
                                         ITAB-WERKS.
          PERFORM BDC_FIELD       USING 'PLMKB-STICHPRVER(03)'
                                         ITAB-INPRO.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1501'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
******************************************************
        WHEN 4 .
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '0150'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '/00'.
          PERFORM BDC_FIELD       USING 'PLMKB-MERKNR(04)'
                                        '0040'.
          PERFORM BDC_FIELD       USING 'PLMKB-VERWMERKM(04)'
                                         ITAB-VERWM.
          PERFORM BDC_FIELD       USING 'PLMKB-PMETHODE(04)'
                                         L_METHOD .
          PERFORM BDC_FIELD       USING 'PLMKB-QMTB_WERKS(04)'
                                         ITAB-WERKS.
          PERFORM BDC_FIELD       USING 'PLMKB-STICHPRVER(04)'
                                         ITAB-INPRO.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1501'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
******************************************************
        WHEN 5 .
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '0150'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '/00'.
          PERFORM BDC_FIELD       USING 'PLMKB-MERKNR(05)'
                                        '0050'.
          PERFORM BDC_FIELD       USING 'PLMKB-VERWMERKM(05)'
                                         ITAB-VERWM.
          PERFORM BDC_FIELD       USING 'PLMKB-PMETHODE(05)'
                                         L_METHOD .
          PERFORM BDC_FIELD       USING 'PLMKB-QMTB_WERKS(05)'
                                         ITAB-WERKS.
          PERFORM BDC_FIELD       USING 'PLMKB-STICHPRVER(05)'
                                         ITAB-INPRO.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1501'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
******************************************************
        WHEN 6 .
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '0150'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '/00'.
          PERFORM BDC_FIELD       USING 'PLMKB-MERKNR(06)'
                                        '0060'.
          PERFORM BDC_FIELD       USING 'PLMKB-VERWMERKM(06)'
                                         ITAB-VERWM.
          PERFORM BDC_FIELD       USING 'PLMKB-PMETHODE(06)'
                                         L_METHOD .
          PERFORM BDC_FIELD       USING 'PLMKB-QMTB_WERKS(06)'
                                         ITAB-WERKS.
          PERFORM BDC_FIELD       USING 'PLMKB-STICHPRVER(06)'
                                         ITAB-INPRO.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1501'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
******************************************************
        WHEN 7 .
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '0150'.
          PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                        'PLMKB-STICHPRVER(07)'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '/00'.
          PERFORM BDC_FIELD       USING 'PLMKB-MERKNR(07)'
                                        '0070'.
          PERFORM BDC_FIELD       USING 'PLMKB-VERWMERKM(07)'
                                         ITAB-VERWM.
          PERFORM BDC_FIELD       USING 'PLMKB-PMETHODE(07)'
                                         L_METHOD .
          PERFORM BDC_FIELD       USING 'PLMKB-QMTB_WERKS(07)'
                                         ITAB-WERKS.
          PERFORM BDC_FIELD       USING 'PLMKB-STICHPRVER(07)'
                                         ITAB-INPRO.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1501'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
******************************************************
        WHEN 8 .
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '0150'.
          PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                        'PLMKB-STICHPRVER(08)'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '/00'.
          PERFORM BDC_FIELD       USING 'PLMKB-MERKNR(08)'
                                        '0080'.
          PERFORM BDC_FIELD       USING 'PLMKB-VERWMERKM(08)'
                                         ITAB-VERWM.
          PERFORM BDC_FIELD       USING 'PLMKB-PMETHODE(08)'
                                         L_METHOD .
          PERFORM BDC_FIELD       USING 'PLMKB-QMTB_WERKS(08)'
                                         ITAB-WERKS.
          PERFORM BDC_FIELD       USING 'PLMKB-STICHPRVER(08)'
                                         ITAB-INPRO.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1501'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
******************************************************
        WHEN 9 .
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '0150'.
          PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                        'PLMKB-STICHPRVER(09)'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '/00'.
          PERFORM BDC_FIELD       USING 'PLMKB-MERKNR(09)'
                                        '0090'.
          PERFORM BDC_FIELD       USING 'PLMKB-VERWMERKM(09)'
                                         ITAB-VERWM.
          PERFORM BDC_FIELD       USING 'PLMKB-PMETHODE(09)'
                                         L_METHOD .
          PERFORM BDC_FIELD       USING 'PLMKB-QMTB_WERKS(09)'
                                         ITAB-WERKS.
          PERFORM BDC_FIELD       USING 'PLMKB-STICHPRVER(09)'
                                         ITAB-INPRO.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1501'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
          PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '1502'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                        '=ENT1'.
      ENDCASE .
    ENDLOOP .
    PERFORM BDC_DYNPRO      USING 'SAPLQPAA' '0150'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=QMBU'.
    PERFORM BDC_TRANSACTION USING 'QP01'.
  ENDLOOP .
  PERFORM CLOSE_GROUP .
  PERFORM BATCH_INPUT_SESSION_SUBMIT. " submit process to backgound .

ENDFORM.                    " INSPECTION_PLAN_MAINTAIN

 

*&---------------------------------------------------------------------*
*&      Form  BATCH_INPUT_SESSION_SUBMIT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BATCH_INPUT_SESSION_SUBMIT .

*   Run BDC session automatically instead execute in SM35.
  SUBMIT RSBDCSUB AND RETURN
             WITH USER     =  SY-UNAME
             WITH MAPPE    =  C_GROUP
             WITH VON      =  SY-DATUM
             WITH BIS      =  SY-DATUM
             WITH Z_VERARB =  'X'
             WITH FEHLER   =  ''.

ENDFORM.                    " BATCH_INPUT_SESSION_SUBMIT

*&---------------------------------------------------------------------*
*&      Form  BDC_DYNPRO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PROGRAM    text
*      -->DYNPRO     text
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.

  CLEAR BDCDATA.
  BDCDATA-PROGRAM  = PROGRAM.
  BDCDATA-DYNPRO   = DYNPRO.
  BDCDATA-DYNBEGIN = 'X'.
  APPEND BDCDATA.

ENDFORM.                    "BDC_DYNPRO

*&---------------------------------------------------------------------*
*&      Form  BDC_FIELD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FNAM       text
*      -->FVAL       text
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.

  IF FVAL <> C_NODATA.
    CLEAR BDCDATA.
    BDCDATA-FNAM = FNAM.
    BDCDATA-FVAL = FVAL.
    APPEND BDCDATA.
  ENDIF.

ENDFORM.                    "BDC_FIELD

*&---------------------------------------------------------------------*
*&      Form  BDC_TRANSACTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->TCODE      text
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION USING TCODE.

  DATA: SMALLLOG(001) .

  CALL FUNCTION 'BDC_INSERT'
    EXPORTING
      TCODE     = TCODE
    TABLES
      DYNPROTAB = BDCDATA.

  IF SMALLLOG <> 'X'.
    WRITE: /(25) 'BDC_INSERT'(I03),
                 TCODE,
            (12) 'returncode:'(I05),
                 SY-SUBRC,
                 'RECORD:',
                 SY-INDEX.
  ENDIF.
  REFRESH BDCDATA.
ENDFORM.                    "BDC_TRANSACTION

*&---------------------------------------------------------------------*
*&      Form  INSPECTION_PLAN_ASSIGNMENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM INSPECTION_PLAN_ASSIGNMENT .

  DATA: L_SCN TYPE I .
  DATA: L_FIRST(001) .

  DATA: WTAB LIKE MTAB OCCURS 0 WITH HEADER LINE .
  REFRESH: WTAB. CLEAR: WTAB .
  WTAB[] = MTAB[] .
  PERFORM OPEN_GROUP .
  LOOP AT QTAB .
    CLEAR: L_SCN, L_FIRST .
    MOVE 'Y' TO L_FIRST .
    PERFORM BDC_DYNPRO      USING 'SAPLCPDI'               '8010'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'             '=ALUE'.
    PERFORM BDC_FIELD       USING 'RC27M-WERKS'             QTAB-WERKS.
    PERFORM BDC_FIELD       USING 'RC271-PLNNR'             QTAB-PLNNR.
    PERFORM BDC_DYNPRO      USING 'SAPLCPDI'               '1200'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'             '=MALO'.
    PERFORM BDC_FIELD       USING 'RC27X-ENTRY_ACT'         QTAB-PLNAL.
    PERFORM BDC_DYNPRO      USING 'SAPLCPDI'               '1200'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'             '/00'.
    PERFORM BDC_DYNPRO      USING 'SAPLCPDI'               '1200'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'             '=MTUE'.
    PERFORM BDC_FIELD       USING 'RC27X-FLG_SEL(01)'      'X'.
    LOOP AT WTAB WHERE PLNNR = QTAB-PLNNR AND WERKS = QTAB-WERKS AND PLNAL = QTAB-PLNAL ..
      IF L_FIRST EQ 'Y' .
        SELECT SINGLE * FROM MAPL CLIENT SPECIFIED WHERE MANDT = SY-MANDT
                         AND PLNNR = WTAB-PLNNR AND WERKS = WTAB-WERKS AND PLNTY = 'Q'
                         AND PLNAL = WTAB-PLNAL AND LOEKZ = SPACE.
        IF SY-SUBRC NE 0 .
          PERFORM BDC_DYNPRO      USING 'SAPLCZDI'       '4010'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'     '=P+'.
          PERFORM BDC_FIELD       USING 'MAPL-PLNAL(01)'  WTAB-PLNAL.
          PERFORM BDC_FIELD       USING 'MAPL-MATNR(01)'  WTAB-MATNR.
          PERFORM BDC_FIELD       USING 'MAPL-WERKS(01)'  WTAB-MWERK.
          PERFORM BDC_FIELD       USING 'MAPL-LIFNR(01)'  WTAB-LIFNR.
          CLEAR: L_FIRST , L_SCN .
        ELSE .
          DO 50 TIMES .
            PERFORM BDC_DYNPRO    USING 'SAPLCZDI'       '4010'.
            PERFORM BDC_FIELD     USING 'BDC_OKCODE'     '=P+'.
          ENDDO .
          PERFORM BDC_FIELD       USING 'MAPL-PLNAL(02)'  WTAB-PLNAL.
          PERFORM BDC_FIELD       USING 'MAPL-MATNR(02)'  WTAB-MATNR.
          PERFORM BDC_FIELD       USING 'MAPL-WERKS(02)'  WTAB-MWERK.
          PERFORM BDC_FIELD       USING 'MAPL-LIFNR(02)'  WTAB-LIFNR.
          CLEAR: L_FIRST , L_SCN  .
        ENDIF .
      ELSE.
        L_SCN = L_SCN + 1 .
        IF L_SCN GT 8 .
          PERFORM BDC_DYNPRO      USING 'SAPLCZDI'     '4010'.
          PERFORM BDC_FIELD       USING 'BDC_CURSOR'   'MAPL-PLNAL(02)'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'   '=P+'.
          L_SCN = 1 .
        ENDIF .
        CASE L_SCN.
          WHEN 1 .
            PERFORM BDC_FIELD     USING 'MAPL-PLNAL(02)'  WTAB-PLNAL.
            PERFORM BDC_FIELD     USING 'MAPL-MATNR(02)'  WTAB-MATNR.
            PERFORM BDC_FIELD     USING 'MAPL-WERKS(02)'  WTAB-MWERK.
            PERFORM BDC_FIELD     USING 'MAPL-LIFNR(02)'  WTAB-LIFNR.
          WHEN 2 .
            PERFORM BDC_FIELD     USING 'MAPL-PLNAL(03)'  WTAB-PLNAL.
            PERFORM BDC_FIELD     USING 'MAPL-MATNR(03)'  WTAB-MATNR.
            PERFORM BDC_FIELD     USING 'MAPL-WERKS(03)'  WTAB-MWERK.
            PERFORM BDC_FIELD     USING 'MAPL-LIFNR(03)'  WTAB-LIFNR.
          WHEN 3 .
            PERFORM BDC_FIELD     USING 'MAPL-PLNAL(04)'  WTAB-PLNAL.
            PERFORM BDC_FIELD     USING 'MAPL-MATNR(04)'  WTAB-MATNR.
            PERFORM BDC_FIELD     USING 'MAPL-WERKS(04)'  WTAB-MWERK.
            PERFORM BDC_FIELD     USING 'MAPL-LIFNR(04)'  WTAB-LIFNR.
          WHEN 4 .
            PERFORM BDC_FIELD     USING 'MAPL-PLNAL(05)'  WTAB-PLNAL.
            PERFORM BDC_FIELD     USING 'MAPL-MATNR(05)'  WTAB-MATNR.
            PERFORM BDC_FIELD     USING 'MAPL-WERKS(05)'  WTAB-MWERK.
            PERFORM BDC_FIELD     USING 'MAPL-LIFNR(05)'  WTAB-LIFNR.
          WHEN 5 .
            PERFORM BDC_FIELD     USING 'MAPL-PLNAL(06)'  WTAB-PLNAL.
            PERFORM BDC_FIELD     USING 'MAPL-MATNR(06)'  WTAB-MATNR.
            PERFORM BDC_FIELD     USING 'MAPL-WERKS(06)'  WTAB-MWERK.
            PERFORM BDC_FIELD     USING 'MAPL-LIFNR(06)'  WTAB-LIFNR.
          WHEN 6 .
            PERFORM BDC_FIELD     USING 'MAPL-PLNAL(07)'  WTAB-PLNAL.
            PERFORM BDC_FIELD     USING 'MAPL-MATNR(07)'  WTAB-MATNR.
            PERFORM BDC_FIELD     USING 'MAPL-WERKS(07)'  WTAB-MWERK.
            PERFORM BDC_FIELD     USING 'MAPL-LIFNR(07)'  WTAB-LIFNR.
          WHEN 7 .
            PERFORM BDC_FIELD     USING 'MAPL-PLNAL(08)'  WTAB-PLNAL.
            PERFORM BDC_FIELD     USING 'MAPL-MATNR(08)'  WTAB-MATNR.
            PERFORM BDC_FIELD     USING 'MAPL-WERKS(08)'  WTAB-MWERK.
            PERFORM BDC_FIELD     USING 'MAPL-LIFNR(08)'  WTAB-LIFNR.
          WHEN 8 .
            PERFORM BDC_FIELD     USING 'MAPL-PLNAL(09)'  WTAB-PLNAL.
            PERFORM BDC_FIELD     USING 'MAPL-MATNR(09)'  WTAB-MATNR.
            PERFORM BDC_FIELD     USING 'MAPL-WERKS(09)'  WTAB-MWERK.
            PERFORM BDC_FIELD     USING 'MAPL-LIFNR(09)'  WTAB-LIFNR.

        ENDCASE .
      ENDIF .
      DELETE WTAB .
    ENDLOOP .
    PERFORM BDC_DYNPRO      USING 'SAPLCZDI'              '4010'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'            '=BACK'.
    PERFORM BDC_DYNPRO      USING 'SAPLCPDI'              '1200'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'            '=BU'.
    PERFORM BDC_TRANSACTION USING 'QP02'.
  ENDLOOP .

  PERFORM CLOSE_GROUP .
  PERFORM BATCH_INPUT_SESSION_SUBMIT. " submit process to backgound .

ENDFORM.                    " INSPECTION_PLAN_ASSIGNMENT
*&---------------------------------------------------------------------*
*&      Form  STORE_ERROR_DETAILS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0425   text
*      -->P_MTAB_MATNR  text
*      -->P_TEXT_E00  text
*----------------------------------------------------------------------*
FORM STORE_ERROR_DETAILS  USING  ITEM1 ITEM2 MSGTXT.

  MOVE-CORRESPONDING MTAB TO I_ERROR.
  MOVE ITEM1        TO I_ERROR-FIELD.
  MOVE ITEM2        TO I_ERROR-VALUE.
  MOVE MSGTXT       TO I_ERROR-MESSAGE.
  APPEND: I_ERROR.
  CLEAR : I_ERROR.

ENDFORM.                    " STORE_ERROR_DETAILS