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