Sunteți pe pagina 1din 36

*&---------------------------------------------------------------------*

*& Report ZQMINSP_PLAN_LD


*&
*&---------------------------------------------------------------------*
*& This program is proprietary to Idhasoft LLC. Unauthorized changes
*& will negate support of this process.
*& Phone Number 877-454-4727
*&---------------------------------------------------------------------*
*& Description: This process will use an input file to load
*& QM Inspection plans (qp01) via a bapi
*&
*& Input file: tab delimited .txt file
*&
*& Transaction: None
*&---------------------------------------------------------------------*
*& Change History:
*& ECDK900227 02/05/2014 LBertram Initial release
*&---------------------------------------------------------------------*
REPORT ZQMINSP_PLAN_LD
NO STANDARD PAGE HEADING
LINE-SIZE 170
LINE-COUNT 58(0)
MESSAGE-ID M3.

TABLES : MARA, " Material master


MARC, " Material master - plants
M_CRAMA, " Operations work centers
M_PLKSC, " Inspection Plans by material / plant
QDSV, " Sampling procedures
QPMK, " Inspection characteristic master
T001W, " Plants
T006, " Units of Measurement
T006A, " Internal to Language dependent units of measure
T411, " Task list usage
T412, " Task list status
T430, " Operation/Activity control key
T435, " Standard texts for routing/ref. op set items
TCA41, " Inspection profiles
USR01. " User master

* Initial screen
DATA : BEGIN OF PLNINP OCCURS 10,
IMATNR(18) TYPE C, " Material
WERKS(4) TYPE C, " Plant
PLNNR(08) TYPE C,
AENNR(12) TYPE C,
STTAG(10) TYPE C,
REVLV(02) TYPE C,
PROFIDNETZ(07) TYPE C,
END OF PLNINP.
DATA : BEGIN OF TSKINP OCCURS 10,
IMATNR(18) TYPE C,
WERKS(4) TYPE C,
PLNNR(08) TYPE C,
PLNAL(02) TYPE C,
KTEXT(40) TYPE C,
DELKZ(01) TYPE C,
VERWE(03) TYPE C,
STATU(03) TYPE C,
PLNME(03) TYPE C,
PLNNR_ALT(20) TYPE C,
SLWBEZ(03) TYPE C,
QDYNHEAD(01) TYPE C,
QDYNREGEL(03) TYPE C,
MATKZ(01) TYPE C,
KUNDKZ(01) TYPE C,
LIEFKZ(01) TYPE C,
HERSTKZ(01) TYPE C,
EXTNUM(01) TYPE C,
END OF TSKINP.
DATA : BEGIN OF MATINP OCCURS 10,
IMATNR(18) TYPE C, " Material
WERKS(4) TYPE C, " Plant
PLNNR(08) TYPE C,
PLNAL(02) TYPE C,
IMATNR2(18) TYPE C,
WERKS2(4) TYPE C,
LIFNR(10) TYPE C,
KUNNR(10) TYPE C,
SUCHFELD(20) TYPE C,
SLIFNR LIKE LFA1-LIFNR,
SKUNNR LIKE KNA1-KUNNR,
END OF MATINP.
DATA : BEGIN OF OPSINP OCCURS 10,
IMATNR(18) TYPE C, " Material
WERKS(4) TYPE C, " Plant
PLNNR(08) TYPE C,
PLNAL(02) TYPE C,
VORNR(04) TYPE C,
UVORN(04) TYPE C,
ARBPL(08) TYPE C,
STEUS(04) TYPE C,
KTSCH(07) TYPE C,
LTXA1(40) TYPE C,
TXTKZ(01) TYPE C,
VERDART(01) TYPE C,
UAVO_AUFL(01) TYPE C,
BMSCH(13) TYPE C, "QTY
MEINH(03) TYPE C, "UOM
ERFSICHT(01) TYPE C,
QPPKTABS(01) TYPE C,
* UMREZ(05) TYPE C,
* UMREN(05) TYPE C,
* VGWO1_1(13) TYPE C, "QTY
* VGE01_1(03) TYPE C, "UOM
* LAR01_1(06) TYPE C,
* VGWO1_2(13) TYPE C, "QTY
* VGE01_2(03) TYPE C, "UOM
* LAR01_2(06) TYPE C,
* VGWO1_3(13) TYPE C, "QTY
* VGE01_3(03) TYPE C, "UOM
* LAR01_3(06) TYPE C,
END OF OPSINP.
DATA : BEGIN OF CHRINP OCCURS 10,
IMATNR(18) TYPE C, " Material
WERKS(4) TYPE C, " Plant
PLNNR(08) TYPE C,
PLNAL(02) TYPE C,
VORNR(04) TYPE C,
MERKNR(04) TYPE C,
VSTEUERKZ(04) TYPE C,
QUANTITAT(01) TYPE C,
QUALITAT(01) TYPE C,
VERWMERKM(08) TYPE C,
QPMK_WERKS(04) TYPE C,
MKVERSION(06) TYPE C,
KURZTEXT(40) TYPE C,
STICHPRVER(08) TYPE C,
PROBEMGEH(03) TYPE C,
PRUEFEINH(06) TYPE C,
FORMEL1(60) TYPE C,
* DUMMY40(40) TYPE C,
* PUMFKZ1(01) TYPE C,
* PUMFKZ4(01) TYPE C,
* TOLERUNTEN(01) TYPE C,
* TOLEROBEN(01) TYPE C,
* STELLEN(02) TYPE C,
* MASSEINHSW(03) TYPE C,
* STICHPR(01) TYPE C,
* ESTUKZ3(01) TYPE C,
* RZWANG4(01) TYPE C,
* AENDBELEG(01) TYPE C,
* DOKUKZ1(01) TYPE C,
* MESSWERTE(01) TYPE C,
* DRUCK1(01) TYPE C,
* KEINEFORMEL(01) TYPE C,
* PRUEFKAT(01) TYPE C,
* STICHPRVER(08) TYPE C,
* QERGDATH(02) TYPE C,
* SOLLWERT(16) TYPE C,
* TOLERANZUN(16) TYPE C,
* TOLERANZOB(16) TYPE C,
* AUSWMENGE1(8) TYPE C,
* AUSWMGWRK1(4) TYPE C,
END OF CHRINP.

DATA : BEGIN OF ERRTAB OCCURS 10,


IMATNR(18) TYPE C, " Material
WERKS(4) TYPE C, " Plant
PLNNR(08) TYPE C,
MSG(80) TYPE C,
END OF ERRTAB.

DATA : BEGIN OF PLNTAB OCCURS 10.


INCLUDE STRUCTURE PLNINP.
DATA : MATNR LIKE MARA-MATNR,
DSTTAG LIKE SY-DATUM,
RCD_OK(1) TYPE C,
MSG(80) TYPE C,
END OF PLNTAB.
DATA : BEGIN OF TSKTAB OCCURS 10.
INCLUDE STRUCTURE TSKINP.
DATA : MATNR LIKE MARA-MATNR,
RCD_OK(1) TYPE C,
MSG(80) TYPE C,
END OF TSKTAB.
DATA : BEGIN OF MATTAB OCCURS 10.
INCLUDE STRUCTURE MATINP.
DATA : MATNR LIKE MARA-MATNR,
MATNR2 LIKE MARA-MATNR,
RCD_OK(1) TYPE C,
MSG(80) TYPE C,
END OF MATTAB.
DATA : BEGIN OF OPSTAB OCCURS 10.
INCLUDE STRUCTURE OPSINP.
DATA : MATNR LIKE MARA-MATNR,
RCD_OK(1) TYPE C,
MSG(80) TYPE C,
END OF OPSTAB.
DATA : BEGIN OF CHRTAB OCCURS 10.
INCLUDE STRUCTURE CHRINP.
DATA : MATNR LIKE MARA-MATNR,
RCD_OK(1) TYPE C,
MSG(80) TYPE C,
END OF CHRTAB.

DATA : XLFB1 LIKE LFB1 OCCURS 10 WITH HEADER LINE.


DATA : XKNA1 LIKE KNA1 OCCURS 10 WITH HEADER LINE.
DATA : XCRAMA LIKE M_CRAMA OCCURS 10 WITH HEADER LINE.
DATA : BEGIN OF VOLTAB OCCURS 10,
DIMID LIKE T006-DIMID,
MSEH3 LIKE T006A-MSEH3,
MSEHI LIKE T006-MSEHI,
END OF VOLTAB.
DATA : BEGIN OF XMARA OCCURS 10,
BISMT LIKE MARA-BISMT,
MATNR LIKE MARA-MATNR,
END OF XMARA.

DATA : PLNERR LIKE PLNTAB OCCURS 10 WITH HEADER LINE.


DATA : TSKERR LIKE TSKTAB OCCURS 10 WITH HEADER LINE.
DATA : MATERR LIKE MATTAB OCCURS 10 WITH HEADER LINE.
DATA : OPSERR LIKE OPSTAB OCCURS 10 WITH HEADER LINE.
DATA : CHRERR LIKE CHRTAB OCCURS 10 WITH HEADER LINE.

* Data for BAPI, copied from function module IDOC_INPUT_INSPECTIONPLAN_CREA


DATA: GROUP like
BAPI1191_TSK_C-TASK_LIST_GROUP,
GROUPCOUNTER like
BAPI1191_TSK_C-GROUP_COUNTER,
TESTRUN like
BAPIFLAG,
PROFILE like
BAPI1012_CONTROL_DATA-PROFILE,

TASK like BAPI1191_TSK_C


occurs 0 with header line,
MATERIALTASKALLOCATION like BAPI1191_MTK_C
occurs 0 with header line,
OPERATION like BAPI1191_OPR_C
occurs 0 with header line,
REFERENCEOPERATION like BAPI1191_REF_OPR_C
occurs 0 with header line,
PRODUCTIONRESOURCE like BAPI1191_PRT_C
occurs 0 with header line,
INSPCHARACTERISTIC like BAPI1191_CHA_C
occurs 0 with header line,
TEXTALLOCATION like BAPI1191_TXT_HDR_C
occurs 0 with header line,
TEXT like BAPI1012_TXT_C
occurs 0 with header line,
RETURN like BAPIRET2
occurs 0 with header line,
INSP_CHAR_VALUES like BAPI1191_CHV_C
occurs 0 with header line,

T_EDIDD LIKE EDIDD OCCURS 0 WITH HEADER LINE,


BAPI_RETN_INFO LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.

DATA: ERROR_FLAG,
BAPI_IDOC_STATUS LIKE BDIDOCSTAT-STATUS.

* Upload files
DATA l_fname TYPE filetable.
DATA l_action TYPE i.
DATA l_cdir TYPE string.
DATA l_filename TYPE string.
DATA l_i_return_tab TYPE TABLE OF ddshretval.
DATA l_st_return_tab TYPE ddshretval.
DATA : l_path TYPE string,
l_fullpath TYPE string.
DATA l_rc TYPE i.

DATA : FCANCEL(1) TYPE C,


LOCLTYPE LIKE RLGRAP-FILETYPE VALUE 'DAT', " Tab delimtd
N_MATNR(18) TYPE N,
R_DATUM(10) TYPE C,
R_UZEIT(10) TYPE C,
R_DATIME(20) TYPE C,
N_LIFNR(10) TYPE N,
NMM(2) TYPE N,
NDD(2) TYPE N,
NYYYY(4) TYPE N,
WMM(2) TYPE C,
WDD(2) TYPE C,
WYYYY(4) TYPE C,
PFILE TYPE STRING,
WFILE TYPE STRING,
W_MATNR(18) TYPE C,
W_MSG(80) TYPE C,
W_RPT(1) TYPE C VALUE '1',
E_PRINT_LINE(170) TYPE C,
W_PRINT_LINE(170) TYPE C,
W_TABIX LIKE SY-TABIX,
W_TABIX2 LIKE SY-TABIX,
ELINES LIKE SY-TABIX,
ZLINES LIKE SY-TABIX.

*----------------------- SELECTION-SCREEN ---------------------------*


SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK ZBLK0 WITH FRAME.
* File for Inspection Plan
SELECTION-SCREEN BEGIN OF LINE.
*ARAMETERS: P_PLN AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 01(29) TEXT-700."OR FIELD P_PLN.
SELECTION-SCREEN POSITION POS_LOW.
PARAMETERS: P_FILE1 LIKE RLGRAP-FILENAME.
SELECTION-SCREEN END OF LINE.
* File for Tasks
SELECTION-SCREEN BEGIN OF LINE.
*ARAMETERS: P_TSK AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 01(29) TEXT-705."OR FIELD P_TSK.
SELECTION-SCREEN POSITION POS_LOW.
PARAMETERS: P_FILE2 LIKE RLGRAP-FILENAME.
SELECTION-SCREEN END OF LINE.
* File for Material Assignments
SELECTION-SCREEN BEGIN OF LINE.
*ARAMETERS: P_MAT AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 01(29) TEXT-710."OR FIELD P_MAT.
SELECTION-SCREEN POSITION POS_LOW.
PARAMETERS: P_FILE3 LIKE RLGRAP-FILENAME.
SELECTION-SCREEN END OF LINE.
* File for Operations
SELECTION-SCREEN BEGIN OF LINE.
*ARAMETERS: P_OPS AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 01(29) TEXT-715."OR FIELD P_OPS.
SELECTION-SCREEN POSITION POS_LOW.
PARAMETERS: P_FILE4 LIKE RLGRAP-FILENAME.
SELECTION-SCREEN END OF LINE.
* File for Characteristics
SELECTION-SCREEN BEGIN OF LINE.
*ARAMETERS: P_CHR AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 01(29) TEXT-720."OR FIELD P_CHR.
SELECTION-SCREEN POSITION POS_LOW.
PARAMETERS: P_FILE5 LIKE RLGRAP-FILENAME.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT (32) TEXT-900 FOR FIELD P_TEST.
SELECTION-SCREEN POSITION POS_LOW.
PARAMETERS: P_TEST RADIOBUTTON GROUP RAD1 DEFAULT 'X'.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT (32) TEXT-905 FOR FIELD P_RUN.
SELECTION-SCREEN POSITION POS_LOW.
PARAMETERS: P_RUN RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN END OF BLOCK ZBLK0.

*------------------------- INITIALIZATION --------------------------*


INITIALIZATION.

P_FILE1 = 'Pln_pln.txt'.
P_FILE2 = 'Pln_hdr.txt'.
P_FILE3 = 'Pln_mat.txt'.
P_FILE4 = 'Pln_ops.txt'.
P_FILE5 = 'Pln_chr.txt'.

*----------------------- AT SELECTION-SCREEN ------------------------*


*T SELECTION-SCREEN.

************************************************************************
******* START OF SELECTION *******
************************************************************************
START-OF-SELECTION.

PERFORM A_INITIALIZE.
PERFORM B_UPLOAD_DATA.

IF P_RUN EQ 'X'.
PERFORM C_BUILD_PLAN_BAPI.
ENDIF.

PERFORM D_PRINT_REPORT.

END-OF-SELECTION.
*eject

*---------------------------------------------------------------------*
* FORM A_INITIALIZE *
*---------------------------------------------------------------------*
FORM A_INITIALIZE.

WRITE SY-DATUM TO R_DATUM.


WRITE SY-UZEIT TO R_UZEIT USING EDIT MASK '__:__:__'.
CONCATENATE R_DATUM R_UZEIT INTO R_DATIME SEPARATED BY SPACE.

SELECT SINGLE * FROM USR01 WHERE BNAME = SY-UNAME.

SELECT * FROM LFB1 INTO TABLE XLFB1 WHERE ALTKN GT SPACE


AND LOEVM EQ SPACE.
SORT XLFB1 BY ALTKN.

SELECT * FROM KNA1 INTO TABLE XKNA1 WHERE SORTL GT SPACE


AND LOEVM EQ SPACE.
SORT XKNA1 BY SORTL.

SELECT * FROM M_CRAMA INTO TABLE XCRAMA.

* Commercial units of measure


SELECT * FROM T006 WHERE KZKEH EQ 'X'
AND ( DIMID EQ 'VOLUME' " Volume
OR DIMID EQ 'MASS' " Weight
OR DIMID EQ 'LENGTH'
OR DIMID EQ 'DENSI'
OR DIMID EQ 'TEMP'
OR DIMID EQ 'SURFAC' ).
SELECT SINGLE * FROM T006A WHERE SPRAS EQ 'E'
AND MSEHI EQ T006-MSEHI.
IF SY-SUBRC EQ 0.
VOLTAB-DIMID = T006-DIMID.
VOLTAB-MSEH3 = T006A-MSEH3.
VOLTAB-MSEHI = T006-MSEHI.
COLLECT VOLTAB. CLEAR VOLTAB.
ENDIF.
ENDSELECT.
SELECT * FROM T006 WHERE DIMID EQ 'TIME'.
SELECT SINGLE * FROM T006A WHERE SPRAS EQ 'E'
AND MSEHI EQ T006-MSEHI.
IF SY-SUBRC EQ 0.
VOLTAB-DIMID = T006-DIMID.
VOLTAB-MSEH3 = T006A-MSEH3.
VOLTAB-MSEHI = T006-MSEHI.
COLLECT VOLTAB. CLEAR VOLTAB.
ENDIF.
ENDSELECT.
SELECT * FROM T006 WHERE DIMID EQ 'AAAADL'. " No dimension
SELECT SINGLE * FROM T006A WHERE SPRAS EQ 'E'
AND MSEHI EQ T006-MSEHI.
IF SY-SUBRC EQ 0.
VOLTAB-DIMID = T006-DIMID.
VOLTAB-MSEH3 = T006A-MSEH3.
VOLTAB-MSEHI = T006-MSEHI.
COLLECT VOLTAB. CLEAR VOLTAB.
ENDIF.
ENDSELECT.
SELECT * FROM T006 WHERE DIMID EQ 'PROPOR'.
SELECT SINGLE * FROM T006A WHERE SPRAS EQ 'E'
AND MSEHI EQ T006-MSEHI.
IF SY-SUBRC EQ 0.
VOLTAB-DIMID = T006-DIMID.
VOLTAB-MSEH3 = T006A-MSEH3.
VOLTAB-MSEHI = T006-MSEHI.
COLLECT VOLTAB. CLEAR VOLTAB.
ENDIF.
ENDSELECT.
SORT VOLTAB BY DIMID MSEH3.

SELECT BISMT MATNR FROM MARA INTO TABLE XMARA WHERE BISMT GT SPACE
AND LVORM EQ SPACE.
SORT XMARA BY BISMT MATNR.

ENDFORM.

*---------------------------------------------------------------------*
* FORM B_UPLOAD_DATA *
*---------------------------------------------------------------------*
FORM B_UPLOAD_DATA.

* Call Method to fetch the current directory


CALL METHOD cl_gui_frontend_services=>directory_get_current
CHANGING
current_directory = l_cdir.

l_filename = p_file1.
* Call Method for file selection dialog popup.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Plan Header File' "#EC NOTEXT
default_extension = 'TXT'
default_filename = l_filename
initial_directory = l_cdir
multiselection = space
CHANGING
file_table = l_fname
rc = l_rc
user_action = l_action
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc EQ 0 AND l_action EQ 0.
READ TABLE l_fname INTO p_file1 INDEX 1.
* Plan Header file
IF P_FILE1 GT SPACE.
PFILE = P_FILE1.
CALL METHOD cl_gui_cfw=>flush.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
EXPORTING
filename = PFILE
filetype = 'ASC'
has_field_separator = 'X'
CHANGING
data_tab = PLNINP[]
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
* Task file
refresh l_fname. clear l_fname.
l_filename = p_file2.
* Call Method for file selection dialog popup.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Tasks File' "#EC NOTEXT
default_extension = 'TXT'
default_filename = l_filename
initial_directory = l_cdir
multiselection = space
CHANGING
file_table = l_fname
rc = l_rc
user_action = l_action
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc EQ 0 AND l_action EQ 0.
READ TABLE l_fname INTO p_file2 INDEX 1.
IF P_FILE2 GT SPACE.
PFILE = P_FILE2.
CALL METHOD cl_gui_cfw=>flush.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
EXPORTING
filename = PFILE
filetype = 'ASC'
has_field_separator = 'X'
CHANGING
data_tab = TSKINP[]
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDIF.
* Material Assignments
refresh l_fname. clear l_fname.
l_filename = p_file3.
* Call Method for file selection dialog popup.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Material Assignments' "#EC NOTEXT
default_extension = 'TXT'
default_filename = l_filename
initial_directory = l_cdir
multiselection = space
CHANGING
file_table = l_fname
rc = l_rc
user_action = l_action
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc EQ 0 AND l_action EQ 0.
READ TABLE l_fname INTO p_file3 INDEX 1.
IF P_FILE3 GT SPACE.
PFILE = P_FILE3.
CALL METHOD cl_gui_cfw=>flush.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
EXPORTING
filename = PFILE
filetype = 'ASC'
has_field_separator = 'X'
CHANGING
data_tab = MATINP[]
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDIF.
* Operations
refresh l_fname. clear l_fname.
l_filename = p_file4.
* Call Method for file selection dialog popup.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Operations' "#EC NOTEXT
default_extension = 'TXT'
default_filename = l_filename
initial_directory = l_cdir
multiselection = space
CHANGING
file_table = l_fname
rc = l_rc
user_action = l_action
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc EQ 0 AND l_action EQ 0.
READ TABLE l_fname INTO p_file4 INDEX 1.
IF P_FILE4 GT SPACE.
PFILE = P_FILE4.
CALL METHOD cl_gui_cfw=>flush.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
EXPORTING
filename = PFILE
filetype = 'ASC'
has_field_separator = 'X'
CHANGING
data_tab = OPSINP[]
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDIF.
* Inspection Characteristics
refresh l_fname. clear l_fname.
l_filename = p_file5.
* Call Method for file selection dialog popup.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Inspection Characteristics' "#EC NOTEXT
default_extension = 'TXT'
default_filename = l_filename
initial_directory = l_cdir
multiselection = space
CHANGING
file_table = l_fname
rc = l_rc
user_action = l_action
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc EQ 0 AND l_action EQ 0.
READ TABLE l_fname INTO p_file5 INDEX 1.
IF P_FILE5 GT SPACE.
PFILE = P_FILE5.
CALL METHOD cl_gui_cfw=>flush.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
EXPORTING
filename = PFILE
filetype = 'ASC'
has_field_separator = 'X'
CHANGING
data_tab = CHRINP[]
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDIF.
ENDIF.

DELETE PLNINP INDEX 1.


DESCRIBE TABLE PLNINP LINES ZLINES.
CASE ZLINES.
WHEN 0.
MESSAGE I899 WITH 'No data to be processed'.
STOP.
ENDCASE.

DELETE TSKINP INDEX 1.


DELETE MATINP INDEX 1.
DELETE OPSINP INDEX 1.
DELETE CHRINP INDEX 1.

PERFORM BA_PLNINP_DATA.

PLNERR[] = PLNTAB[].
DELETE PLNERR WHERE RCD_OK EQ SPACE.
DELETE PLNERR WHERE RCD_OK EQ 'A'.
DELETE PLNTAB WHERE RCD_OK EQ 'N'.
DELETE PLNTAB WHERE RCD_OK EQ 'A'.
TSKERR[] = TSKTAB[].
DELETE TSKERR WHERE RCD_OK EQ SPACE.
DELETE TSKERR WHERE RCD_OK EQ 'A'.
DELETE TSKTAB WHERE RCD_OK EQ 'N'.
DELETE TSKTAB WHERE RCD_OK EQ 'A'.
MATERR[] = MATTAB[].
DELETE MATERR WHERE RCD_OK EQ SPACE.
DELETE MATERR WHERE RCD_OK EQ 'A'.
DELETE MATTAB WHERE RCD_OK EQ 'N'.
DELETE MATTAB WHERE RCD_OK EQ 'A'.
OPSERR[] = OPSTAB[].
DELETE OPSERR WHERE RCD_OK EQ SPACE.
DELETE OPSERR WHERE RCD_OK EQ 'A'.
DELETE OPSTAB WHERE RCD_OK EQ 'N'.
DELETE OPSTAB WHERE RCD_OK EQ 'A'.
CHRERR[] = CHRTAB[].
DELETE CHRERR WHERE RCD_OK EQ SPACE.
DELETE CHRERR WHERE RCD_OK EQ 'A'.
DELETE CHRTAB WHERE RCD_OK EQ 'N'.
DELETE CHRTAB WHERE RCD_OK EQ 'A'.

SORT ERRTAB BY IMATNR WERKS PLNNR MSG.


DELETE ADJACENT DUPLICATES FROM ERRTAB COMPARING IMATNR WERKS PLNNR MSG.

LOOP AT ERRTAB.
LOOP AT PLNTAB WHERE IMATNR EQ ERRTAB-IMATNR
AND WERKS EQ ERRTAB-WERKS
AND PLNNR EQ ERRTAB-PLNNR.
W_TABIX = SY-TABIX.
PLNTAB-RCD_OK = 'N'.
PLNTAB-MSG = 'A record on this plan has an error'.
MODIFY PLNTAB INDEX W_TABIX.
MOVE-CORRESPONDING PLNTAB TO PLNERR.
APPEND PLNERR. CLEAR PLNERR.
ENDLOOP.
LOOP AT TSKTAB WHERE IMATNR EQ ERRTAB-IMATNR
AND WERKS EQ ERRTAB-WERKS
AND PLNNR EQ ERRTAB-PLNNR.
W_TABIX = SY-TABIX.
TSKTAB-RCD_OK = 'N'.
TSKTAB-MSG = 'A record on this plan has an error'.
MODIFY TSKTAB INDEX W_TABIX.
MOVE-CORRESPONDING TSKTAB TO TSKERR.
APPEND TSKERR. CLEAR TSKERR.
ENDLOOP.
LOOP AT MATTAB WHERE IMATNR EQ ERRTAB-IMATNR
AND WERKS EQ ERRTAB-WERKS
AND PLNNR EQ ERRTAB-PLNNR.
W_TABIX = SY-TABIX.
MATTAB-RCD_OK = 'N'.
MATTAB-MSG = 'A record on this plan has an error'.
MODIFY MATTAB INDEX W_TABIX.
MOVE-CORRESPONDING MATTAB TO MATERR.
APPEND MATERR. CLEAR MATERR.
ENDLOOP.
LOOP AT OPSTAB WHERE IMATNR EQ ERRTAB-IMATNR
AND WERKS EQ ERRTAB-WERKS
AND PLNNR EQ ERRTAB-PLNNR.
W_TABIX = SY-TABIX.
OPSTAB-RCD_OK = 'N'.
OPSTAB-MSG = 'A record on this plan has an error'.
MODIFY OPSTAB INDEX W_TABIX.
MOVE-CORRESPONDING OPSTAB TO OPSERR.
APPEND OPSERR. CLEAR OPSERR.
ENDLOOP.
LOOP AT CHRTAB WHERE IMATNR EQ ERRTAB-IMATNR
AND WERKS EQ ERRTAB-WERKS
AND PLNNR EQ ERRTAB-PLNNR.
W_TABIX = SY-TABIX.
CHRTAB-RCD_OK = 'N'.
CHRTAB-MSG = 'A record on this plan has an error'.
MODIFY CHRTAB INDEX W_TABIX.
MOVE-CORRESPONDING CHRTAB TO CHRERR.
APPEND CHRERR. CLEAR CHRERR.
ENDLOOP.
ENDLOOP.

DELETE PLNTAB WHERE RCD_OK EQ 'N'.


DELETE TSKTAB WHERE RCD_OK EQ 'N'.
DELETE MATTAB WHERE RCD_OK EQ 'N'.
DELETE OPSTAB WHERE RCD_OK EQ 'N'.
DELETE CHRTAB WHERE RCD_OK EQ 'N'.

REFRESH ERRTAB. CLEAR ERRTAB.

ENDFORM.

*---------------------------------------------------------------------*
* FORM BA_PLNINP_DATA *
*---------------------------------------------------------------------*
FORM BA_PLNINP_DATA.

LOOP AT PLNINP WHERE IMATNR GT SPACE.

MOVE-CORRESPONDING PLNINP TO PLNTAB.


SPLIT PLNINP-STTAG AT '/' INTO WMM WDD WYYYY.
NMM = WMM. NDD = WDD. NYYYY = WYYYY.
CONCATENATE NYYYY NMM NDD INTO PLNTAB-DSTTAG.

W_MATNR = PLNINP-IMATNR.

SHIFT PLNINP-IMATNR LEFT DELETING LEADING SPACE.


IF PLNINP-IMATNR CO '0123456789 '.
* CLEAR: N_MATNR, PLNTAB-IMATNR.
* N_MATNR = PLNINP-IMATNR.
* PLNTAB-IMATNR = N_MATNR.
ELSE.
TRANSLATE PLNINP-IMATNR TO UPPER CASE.
ENDIF.
PLNTAB-IMATNR = PLNINP-IMATNR.

* SELECT SINGLE * FROM MARA WHERE MATNR EQ PLNTAB-MATNR.


READ TABLE XMARA WITH KEY BISMT = PLNTAB-IMATNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
PLNTAB-MATNR = XMARA-MATNR.
ELSE.
PLNTAB-RCD_OK = 'N'.
CONCATENATE 'Invalid Material' PLNTAB-IMATNR INTO PLNTAB-MSG
SEPARATED BY SPACE.
APPEND PLNTAB. CLEAR PLNTAB.
CONTINUE.
ENDIF.

SHIFT PLNINP-WERKS LEFT DELETING LEADING SPACE.


IF PLNINP-WERKS CO '0123456789 '.
ELSE.
TRANSLATE PLNINP-WERKS TO UPPER CASE.
ENDIF.
PLNTAB-WERKS = PLNINP-WERKS.

SELECT SINGLE * FROM T001W WHERE WERKS EQ PLNTAB-WERKS.


IF SY-SUBRC GT 0.
PLNTAB-RCD_OK = 'N'.
PLNTAB-MSG = 'Invalid Plant'.
APPEND PLNTAB. CLEAR PLNTAB.
CONTINUE.
ENDIF.

SELECT SINGLE * FROM MARC WHERE MATNR EQ PLNTAB-MATNR


AND WERKS EQ PLNTAB-WERKS.
IF SY-SUBRC GT 0.
PLNTAB-RCD_OK = 'N'.
PLNTAB-MSG = 'Material is not in this plant'.
APPEND PLNTAB. CLEAR PLNTAB.
CONTINUE.
ENDIF.

IF PLNINP-PROFIDNETZ CO '0123456789 '.


ELSE.
TRANSLATE PLNINP-PROFIDNETZ TO UPPER CASE.
SHIFT PLNINP-PROFIDNETZ LEFT DELETING LEADING SPACE.
ENDIF.
PLNTAB-PROFIDNETZ = PLNINP-PROFIDNETZ.
IF PLNINP-PROFIDNETZ GT SPACE.
SELECT SINGLE * FROM TCA41 WHERE PLNAW EQ 'Q' " Inspection plan
AND PROFIDNETZ EQ PLNTAB-PROFIDNETZ.
IF SY-SUBRC GT 0.
PLNTAB-RCD_OK = 'N'.
CONCATENATE 'Invalid Profile' PLNTAB-PROFIDNETZ INTO PLNTAB-MSG
SEPARATED BY SPACE.
APPEND PLNTAB. CLEAR PLNTAB.
CONTINUE.
ENDIF.
ENDIF.

SELECT * FROM M_PLKSC WHERE MATNR EQ PLNTAB-MATNR


AND WERKS EQ PLNTAB-WERKS
AND PLNNR EQ PLNTAB-PLNNR.
ENDSELECT.
IF SY-SUBRC EQ 0.
PLNTAB-RCD_OK = 'A'.
PLNTAB-MSG = 'Plan already created'.
APPEND PLNTAB. CLEAR PLNTAB.
CONTINUE.
ENDIF.

MOVE-CORRESPONDING PLNTAB TO ERRTAB.

LOOP AT TSKINP WHERE IMATNR EQ W_MATNR


AND WERKS EQ PLNTAB-WERKS
AND PLNNR EQ PLNTAB-PLNNR.
MOVE-CORRESPONDING TSKINP TO TSKTAB.
SHIFT TSKINP-IMATNR LEFT DELETING LEADING SPACE.
IF TSKINP-IMATNR CO '0123456789 '.
* CLEAR: N_MATNR, TSKTAB-IMATNR.
* N_MATNR = TSKINP-IMATNR.
* TSKTAB-IMATNR = N_MATNR.
ELSE.
TRANSLATE TSKINP-IMATNR TO UPPER CASE.
ENDIF.
TSKTAB-IMATNR = TSKINP-IMATNR.
READ TABLE XMARA WITH KEY BISMT = TSKTAB-IMATNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
TSKTAB-MATNR = XMARA-MATNR.
ELSE.
PLNTAB-RCD_OK = 'N'.
CONCATENATE 'Invalid Material' TSKTAB-IMATNR INTO TSKTAB-MSG
SEPARATED BY SPACE.
APPEND TSKTAB. CLEAR TSKTAB.
CONTINUE.
ENDIF.
SHIFT TSKINP-WERKS LEFT DELETING LEADING SPACE.
IF TSKINP-WERKS CO '0123456789 '.
ELSE.
TRANSLATE TSKINP-WERKS TO UPPER CASE.
ENDIF.
TSKTAB-WERKS = TSKINP-WERKS.
IF TSKINP-VERWE GT SPACE.
SELECT SINGLE * FROM T411 WHERE VERWE EQ TSKINP-VERWE.
IF SY-SUBRC GT 0.
APPEND ERRTAB.
TSKTAB-RCD_OK = 'N'.
CONCATENATE 'Invalid usage' TSKINP-VERWE INTO TSKTAB-MSG
SEPARATED BY SPACE.
APPEND TSKTAB. CLEAR TSKTAB.
CONTINUE.
ENDIF.
ENDIF.
IF TSKINP-STATU GT SPACE.
SELECT SINGLE * FROM T412 WHERE PLNST EQ TSKINP-STATU.
IF SY-SUBRC GT 0.
APPEND ERRTAB.
TSKTAB-RCD_OK = 'N'.
CONCATENATE 'Invalid status' TSKINP-STATU INTO TSKTAB-MSG
SEPARATED BY SPACE.
APPEND TSKTAB. CLEAR TSKTAB.
CONTINUE.
ENDIF.
ENDIF.
IF TSKINP-PLNME GT SPACE.
TRANSLATE TSKINP-PLNME TO UPPER CASE.
READ TABLE VOLTAB WITH KEY MSEH3 = TSKINP-PLNME.
IF SY-SUBRC EQ 0.
IF VOLTAB-MSEHI EQ VOLTAB-MSEH3.
ELSE.
TSKINP-PLNME = VOLTAB-MSEHI. " Use the internal representation
ENDIF.
TSKTAB-PLNME = TSKINP-PLNME.
ELSE.
APPEND ERRTAB.
OPSTAB-RCD_OK = 'N'.
CONCATENATE 'Invalid Base unit of measure (PLNME)' TSKTAB-PLNME
INTO TSKTAB-MSG SEPARATED BY SPACE.
APPEND TSKTAB. CLEAR TSKTAB.
CONTINUE.
ENDIF.
ENDIF.
TSKTAB-PLNNR_ALT = TSKINP-PLNNR_ALT.
TSKTAB-SLWBEZ = TSKINP-SLWBEZ.
TSKTAB-KUNDKZ = TSKINP-KUNDKZ.
TSKTAB-LIEFKZ = TSKINP-LIEFKZ.
TSKTAB-HERSTKZ = TSKINP-HERSTKZ.
TSKTAB-EXTNUM = TSKINP-EXTNUM.

APPEND TSKTAB.

LOOP AT MATINP WHERE IMATNR EQ W_MATNR


AND WERKS EQ TSKTAB-WERKS
AND PLNNR EQ TSKTAB-PLNNR
AND PLNAL EQ TSKTAB-PLNAL.
MOVE-CORRESPONDING MATINP TO MATTAB.
SHIFT MATINP-IMATNR LEFT DELETING LEADING SPACE.
IF MATINP-IMATNR CO '0123456789 '.
* CLEAR: N_MATNR, MATTAB-IMATNR.
* N_MATNR = MATINP-IMATNR.
* MATTAB-IMATNR = N_MATNR.
ELSE.
TRANSLATE MATINP-IMATNR TO UPPER CASE.
ENDIF.
MATTAB-IMATNR = MATINP-IMATNR.
READ TABLE XMARA WITH KEY BISMT = MATTAB-IMATNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
MATTAB-MATNR = XMARA-MATNR.
ELSE.
MATTAB-RCD_OK = 'N'.
CONCATENATE 'Invalid Material' MATTAB-IMATNR INTO MATTAB-MSG
SEPARATED BY SPACE.
APPEND MATTAB. CLEAR MATTAB.
CONTINUE.
ENDIF.
SHIFT MATINP-IMATNR2 LEFT DELETING LEADING SPACE.
IF MATINP-IMATNR2 CO '0123456789 '.
* CLEAR: N_MATNR, MATTAB-IMATNR2.
* N_MATNR = MATINP-IMATNR2.
* MATTAB-IMATNR2 = N_MATNR.
ELSE.
TRANSLATE MATINP-IMATNR2 TO UPPER CASE.
ENDIF.
MATTAB-IMATNR2 = MATINP-IMATNR2.
READ TABLE XMARA WITH KEY BISMT = MATTAB-IMATNR2 BINARY SEARCH.
IF SY-SUBRC EQ 0.
MATTAB-MATNR2 = XMARA-MATNR.
ELSE.
MATTAB-RCD_OK = 'N'.
CONCATENATE 'Invalid Assignment Material' MATTAB-IMATNR2 INTO MATTAB-MSG
SEPARATED BY SPACE.
APPEND MATTAB. CLEAR MATTAB.
CONTINUE.
ENDIF.
SHIFT MATINP-WERKS2 LEFT DELETING LEADING SPACE.
IF MATINP-WERKS2 CO '1234567890 '.
ELSE.
TRANSLATE MATINP-WERKS2 TO UPPER CASE.
ENDIF.
MATTAB-WERKS2 = MATINP-WERKS2.
SELECT SINGLE * FROM T001W WHERE WERKS EQ MATTAB-WERKS2.
IF SY-SUBRC GT 0.
MATTAB-RCD_OK = 'N'.
CONCATENATE 'Invalid Assignment Plant' MATTAB-WERKS2 INTO MATTAB-MSG
SEPARATED BY SPACE.
APPEND MATTAB. CLEAR MATTAB.
CONTINUE.
ENDIF.
SELECT SINGLE * FROM MARC WHERE MATNR EQ MATTAB-MATNR2
AND WERKS EQ MATTAB-WERKS.
IF SY-SUBRC GT 0.
MATTAB-RCD_OK = 'N'.
CONCATENATE 'Material' MATTAB-IMATNR2 'is not in plant' MATTAB-WERKS
INTO MATTAB-MSG SEPARATED BY SPACE.
APPEND MATTAB. CLEAR MATTAB.
CONTINUE.
ENDIF.
IF MATINP-LIFNR GT SPACE.
IF MATINP-LIFNR CO '0123456789 '.
* N_LIFNR = MATINP-LIFNR.
* MATINP-LIFNR = N_LIFNR.
ELSE.
TRANSLATE MATINP-LIFNR TO UPPER CASE.
ENDIF.
SHIFT MATINP-LIFNR LEFT DELETING LEADING SPACE.
MATTAB-LIFNR = MATINP-LIFNR.
READ TABLE XLFB1 WITH KEY ALTKN = MATTAB-LIFNR.
IF SY-SUBRC EQ 0.
MATTAB-SLIFNR = XLFB1-LIFNR.
ELSE.
APPEND ERRTAB.
MATTAB-RCD_OK = 'N'.
CONCATENATE 'Unable to find SAP vendor for' MATTAB-LIFNR
INTO MATTAB-MSG SEPARATED BY SPACE.
APPEND MATTAB. CLEAR MATTAB.
CONTINUE.
ENDIF.
ENDIF.
IF MATINP-KUNNR GT SPACE.
IF MATINP-KUNNR CO '0123456789 '.
ELSE.
TRANSLATE MATINP-KUNNR TO UPPER CASE.
ENDIF.
SHIFT MATINP-KUNNR LEFT DELETING LEADING SPACE.
MATTAB-KUNNR = MATINP-KUNNR.
READ TABLE XKNA1 WITH KEY SORTL(10) = MATTAB-KUNNR.
IF SY-SUBRC EQ 0.
MATTAB-SKUNNR = XKNA1-KUNNR.
ELSE.
APPEND ERRTAB.
MATTAB-RCD_OK = 'N'.
CONCATENATE 'Unable to find SAP customer for' MATTAB-KUNNR
INTO MATTAB-MSG SEPARATED BY SPACE.
APPEND MATTAB. CLEAR MATTAB.
CONTINUE.
ENDIF.
ENDIF.
APPEND MATTAB. CLEAR MATTAB.
ENDLOOP.
LOOP AT OPSINP WHERE IMATNR EQ W_MATNR
AND WERKS EQ TSKTAB-WERKS
AND PLNNR EQ TSKTAB-PLNNR
AND PLNAL EQ TSKTAB-PLNAL.
MOVE-CORRESPONDING OPSINP TO OPSTAB.
SHIFT OPSINP-IMATNR LEFT DELETING LEADING SPACE.
IF OPSINP-IMATNR CO '0123456789 '.
* CLEAR: N_MATNR, OPSTAB-IMATNR.
* N_MATNR = OPSINP-IMATNR.
* OPSTAB-IMATNR = N_MATNR.
ELSE.
TRANSLATE OPSINP-IMATNR TO UPPER CASE.
ENDIF.
OPSTAB-IMATNR = OPSINP-IMATNR.
READ TABLE XMARA WITH KEY BISMT = OPSTAB-IMATNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
OPSTAB-MATNR = XMARA-MATNR.
ELSE.
OPSTAB-RCD_OK = 'N'.
CONCATENATE 'Invalid Material' OPSTAB-IMATNR INTO OPSTAB-MSG
SEPARATED BY SPACE.
APPEND OPSTAB. CLEAR OPSTAB.
CONTINUE.
ENDIF.
IF OPSINP-WERKS CO '0123456789 '.
ELSE.
TRANSLATE OPSINP-WERKS TO UPPER CASE.
ENDIF.
SHIFT OPSINP-WERKS LEFT DELETING LEADING SPACE.
OPSTAB-WERKS = OPSINP-WERKS.
IF OPSINP-ARBPL GT SPACE.
IF OPSINP-ARBPL CO '0123456789 '.
ELSE.
TRANSLATE OPSINP-ARBPL TO UPPER CASE.
ENDIF.
SHIFT OPSINP-ARBPL LEFT DELETING LEADING SPACE.
OPSTAB-ARBPL = OPSINP-ARBPL.
READ TABLE XCRAMA WITH KEY WERKS = TSKTAB-WERKS
ARBPL = OPSTAB-ARBPL.
IF SY-SUBRC GT 0.
APPEND ERRTAB.
OPSTAB-RCD_OK = 'N'.
CONCATENATE 'Invalid work center' OPSINP-ARBPL INTO OPSTAB-MSG
SEPARATED BY SPACE.
APPEND OPSTAB. CLEAR OPSTAB.
CONTINUE.
ENDIF.
ENDIF.
IF OPSINP-STEUS GT SPACE.
IF OPSINP-STEUS CO '0123456789 '.
ELSE.
TRANSLATE OPSINP-STEUS TO UPPER CASE.
ENDIF.
SHIFT OPSINP-STEUS LEFT DELETING LEADING SPACE.
OPSTAB-STEUS = OPSINP-STEUS.
SELECT * FROM T430 WHERE STEUS EQ OPSTAB-STEUS.
ENDSELECT.
IF SY-SUBRC GT 0.
APPEND ERRTAB.
OPSTAB-RCD_OK = 'N'.
CONCATENATE 'Invalid control key' OPSTAB-STEUS INTO OPSTAB-MSG
SEPARATED BY SPACE.
APPEND OPSTAB. CLEAR OPSTAB.
CONTINUE.
ENDIF.
ENDIF.
IF OPSINP-KTSCH GT SPACE.
IF OPSINP-KTSCH CO '0123456789 '.
ELSE.
TRANSLATE OPSINP-KTSCH TO UPPER CASE.
ENDIF.
SHIFT OPSINP-KTSCH LEFT DELETING LEADING SPACE.
OPSTAB-KTSCH = OPSINP-KTSCH.
SELECT SINGLE * FROM T435 WHERE VLSCH EQ OPSTAB-KTSCH.
IF SY-SUBRC GT 0.
APPEND ERRTAB.
OPSTAB-RCD_OK = 'N'.
CONCATENATE 'Invalid std text key' OPSTAB-KTSCH INTO OPSTAB-MSG
SEPARATED BY SPACE.
APPEND OPSTAB. CLEAR OPSTAB.
CONTINUE.
ENDIF.
ENDIF.
IF OPSINP-BMSCH GT SPACE.
IF OPSINP-BMSCH CS '"'.
REPLACE ALL OCCURRENCES OF '"' IN OPSINP-BMSCH WITH ' '.
ENDIF.
IF OPSINP-BMSCH CS ','.
REPLACE ALL OCCURRENCES OF ',' IN OPSINP-BMSCH WITH ' '.
CONDENSE OPSINP-BMSCH NO-GAPS.
ENDIF.
SHIFT OPSINP-BMSCH LEFT DELETING LEADING SPACE.
OPSTAB-BMSCH = OPSINP-BMSCH.
ENDIF.
IF OPSINP-MEINH GT SPACE.
TRANSLATE OPSINP-MEINH TO UPPER CASE.
READ TABLE VOLTAB WITH KEY MSEH3 = OPSINP-MEINH.
IF SY-SUBRC EQ 0.
IF VOLTAB-MSEHI EQ VOLTAB-MSEH3.
ELSE.
OPSINP-MEINH = VOLTAB-MSEHI. " Use the internal representation
ENDIF.
OPSTAB-MEINH = OPSINP-MEINH.
ELSE.
APPEND ERRTAB.
OPSTAB-RCD_OK = 'N'.
CONCATENATE 'Invalid Base unit of measure (MEINH)' OPSTAB-MEINH
INTO OPSTAB-MSG SEPARATED BY SPACE.
APPEND OPSTAB. CLEAR OPSTAB.
CONTINUE.
ENDIF.
ENDIF.
* IF OPSINP-UMREZ GT SPACE.
* IF OPSINP-UMREZ CS '"'.
* REPLACE ALL OCCURRENCES OF '"' IN OPSINP-UMREZ WITH ' '.
* ENDIF.
* IF OPSINP-UMREZ CS ','.
* REPLACE ALL OCCURRENCES OF ',' IN OPSINP-UMREZ WITH ' '.
* CONDENSE OPSINP-UMREZ NO-GAPS.
* ENDIF.
* SHIFT OPSINP-UMREZ LEFT DELETING LEADING SPACE.
* OPSTAB-UMREZ = OPSINP-UMREZ.
* ENDIF.
* IF OPSINP-UMREN GT SPACE.
* IF OPSINP-UMREN CS '"'.
* REPLACE ALL OCCURRENCES OF '"' IN OPSINP-UMREN WITH ' '.
* ENDIF.
* IF OPSINP-UMREN CS ','.
* REPLACE ALL OCCURRENCES OF ',' IN OPSINP-UMREN WITH ' '.
* CONDENSE OPSINP-UMREN NO-GAPS.
* ENDIF.
* SHIFT OPSINP-UMREN LEFT DELETING LEADING SPACE.
* OPSTAB-UMREN = OPSINP-UMREN.
* ENDIF.
* IF OPSINP-VGWO1_1 GT SPACE.
* IF OPSINP-VGWO1_1 CS '"'.
* REPLACE ALL OCCURRENCES OF '"' IN OPSINP-VGWO1_1 WITH ' '.
* ENDIF.
* IF OPSINP-VGWO1_1 CS ','.
* REPLACE ALL OCCURRENCES OF ',' IN OPSINP-VGWO1_1 WITH ' '.
* CONDENSE OPSINP-VGWO1_1 NO-GAPS.
* ENDIF.
* SHIFT OPSINP-VGWO1_1 LEFT DELETING LEADING SPACE.
* OPSTAB-VGWO1_1 = OPSINP-VGWO1_1.
* ENDIF.
* IF OPSINP-VGE01_1 GT SPACE.
* TRANSLATE OPSINP-VGE01_1 TO UPPER CASE.
* READ TABLE VOLTAB WITH KEY MSEH3 = OPSINP-VGE01_1.
* IF SY-SUBRC EQ 0.
* IF VOLTAB-MSEHI EQ VOLTAB-MSEH3.
* ELSE.
* OPSINP-VGE01_1 = VOLTAB-MSEHI. " Use the internal representation
* ENDIF.
* OPSTAB-VGE01_1 = OPSINP-VGE01_1.
* ELSE.
* APPEND ERRTAB.
* OPSTAB-RCD_OK = 'N'.
* CONCATENATE 'Invalid unit of measure (VGE01_1)' OPSTAB-VGE01_1
* INTO OPSTAB-MSG SEPARATED BY SPACE.
* APPEND OPSTAB. CLEAR OPSTAB.
* CONTINUE.
* ENDIF.
* ENDIF.
* IF OPSINP-VGWO1_2 GT SPACE.
* IF OPSINP-VGWO1_2 CS '"'.
* REPLACE ALL OCCURRENCES OF '"' IN OPSINP-VGWO1_2 WITH ' '.
* ENDIF.
* IF OPSINP-VGWO1_2 CS ','.
* REPLACE ALL OCCURRENCES OF ',' IN OPSINP-VGWO1_2 WITH ' '.
* CONDENSE OPSINP-VGWO1_2 NO-GAPS.
* ENDIF.
* SHIFT OPSINP-VGWO1_2 LEFT DELETING LEADING SPACE.
* OPSTAB-VGWO1_2 = OPSINP-VGWO1_2.
* ENDIF.
* IF OPSINP-VGE01_2 GT SPACE.
* TRANSLATE OPSINP-VGE01_2 TO UPPER CASE.
* READ TABLE VOLTAB WITH KEY MSEH3 = OPSINP-VGE01_2.
* IF SY-SUBRC EQ 0.
* IF VOLTAB-MSEHI EQ VOLTAB-MSEH3.
* ELSE.
* OPSINP-VGE01_2 = VOLTAB-MSEHI. " Use the internal representation
* ENDIF.
* OPSTAB-VGE01_2 = OPSINP-VGE01_2.
* ELSE.
* APPEND ERRTAB.
* OPSTAB-RCD_OK = 'N'.
* CONCATENATE 'Invalid unit of measure (VGE01_2)' OPSTAB-VGE01_2
* INTO OPSTAB-MSG SEPARATED BY SPACE.
* APPEND OPSTAB. CLEAR OPSTAB.
* CONTINUE.
* ENDIF.
* ENDIF.
* IF OPSINP-VGWO1_3 GT SPACE.
* IF OPSINP-VGWO1_3 CS '"'.
* REPLACE ALL OCCURRENCES OF '"' IN OPSINP-VGWO1_3 WITH ' '.
* ENDIF.
* IF OPSINP-VGWO1_3 CS ','.
* REPLACE ALL OCCURRENCES OF ',' IN OPSINP-VGWO1_3 WITH ' '.
* CONDENSE OPSINP-VGWO1_3 NO-GAPS.
* ENDIF.
* SHIFT OPSINP-VGWO1_3 LEFT DELETING LEADING SPACE.
* OPSTAB-VGWO1_3 = OPSINP-VGWO1_3.
* ENDIF.
* IF OPSINP-VGE01_3 GT SPACE.
* TRANSLATE OPSINP-VGE01_3 TO UPPER CASE.
* READ TABLE VOLTAB WITH KEY MSEH3 = OPSINP-VGE01_3.
* IF SY-SUBRC EQ 0.
* IF VOLTAB-MSEHI EQ VOLTAB-MSEH3.
* ELSE.
* OPSINP-VGE01_3 = VOLTAB-MSEHI. " Use the internal representation
* ENDIF.
* OPSTAB-VGE01_3 = OPSINP-VGE01_3.
* ELSE.
* APPEND ERRTAB.
* OPSTAB-RCD_OK = 'N'.
* CONCATENATE 'Invalid unit of measure (VGE01_3)' OPSTAB-VGE01_3
* INTO OPSTAB-MSG SEPARATED BY SPACE.
* APPEND OPSTAB. CLEAR OPSTAB.
* CONTINUE.
* ENDIF.
* ENDIF.
APPEND OPSTAB.

LOOP AT CHRINP WHERE IMATNR EQ W_MATNR


AND WERKS EQ OPSTAB-WERKS
AND PLNNR EQ OPSTAB-PLNNR
AND PLNAL EQ OPSTAB-PLNAL
AND VORNR EQ OPSTAB-VORNR.
MOVE-CORRESPONDING CHRINP TO CHRTAB.
SHIFT CHRINP-IMATNR LEFT DELETING LEADING SPACE.
IF CHRINP-IMATNR CO '0123456789 '.
* CLEAR: N_MATNR, CHRTAB-IMATNR.
* N_MATNR = CHRINP-IMATNR.
* CHRTAB-IMATNR = N_MATNR.
ELSE.
TRANSLATE CHRINP-IMATNR TO UPPER CASE.
ENDIF.
CHRTAB-IMATNR = CHRINP-IMATNR.
READ TABLE XMARA WITH KEY BISMT = CHRTAB-IMATNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
CHRTAB-MATNR = XMARA-MATNR.
ELSE.
CHRTAB-RCD_OK = 'N'.
CONCATENATE 'Invalid Material' CHRTAB-IMATNR INTO CHRTAB-MSG
SEPARATED BY SPACE.
APPEND CHRTAB. CLEAR CHRTAB.
CONTINUE.
ENDIF.
IF CHRINP-VERWMERKM GT SPACE.
IF CHRINP-VERWMERKM CO '0123456789 '.
ELSE.
TRANSLATE CHRINP-VERWMERKM TO UPPER CASE.
ENDIF.
SHIFT CHRINP-VERWMERKM LEFT DELETING LEADING SPACE.
CHRTAB-VERWMERKM = CHRINP-VERWMERKM.
SELECT * FROM QPMK WHERE ZAEHLER EQ PLNTAB-WERKS
AND MKMNR EQ CHRTAB-VERWMERKM.
ENDSELECT.
IF SY-SUBRC GT 0.
APPEND ERRTAB.
CHRTAB-RCD_OK = 'N'.
CONCATENATE 'Insp.Char' CHRTAB-VERWMERKM 'has this same name'
INTO CHRTAB-MSG SEPARATED BY SPACE.
APPEND CHRTAB. CLEAR CHRTAB.
CONTINUE.
ENDIF.
ENDIF.
IF CHRTAB-QUANTITAT EQ SPACE AND
CHRTAB-QUALITAT EQ SPACE.
* APPEND ERRTAB.
* CHRTAB-RCD_OK = 'N'.
* CHRTAB-MSG = 'Please select either Quantitative or Qualitative'.
* APPEND CHRTAB. CLEAR CHRTAB.
* CONTINUE.
ENDIF.
* IF CHRINP-MASSEINHSW GT SPACE.
* IF CHRINP-MASSEINHSW EQ 'hrs'.
* CHRTAB-MASSEINHSW = 'H'.
* ELSE.
* TRANSLATE CHRINP-MASSEINHSW TO UPPER CASE.
* READ TABLE VOLTAB WITH KEY MSEH3 = CHRINP-MASSEINHSW.
* IF SY-SUBRC EQ 0.
* IF VOLTAB-MSEHI EQ VOLTAB-MSEH3.
* ELSE.
* CHRINP-MASSEINHSW = VOLTAB-MSEHI. " Use the internal
representation
* ENDIF.
* CHRTAB-MASSEINHSW = CHRINP-MASSEINHSW.
* ELSE.
* APPEND ERRTAB.
* CHRTAB-RCD_OK = 'N'.
* CONCATENATE 'Invalid Char unit of measure (MASSEINHSW)' CHRTAB-
MASSEINHSW
* INTO CHRTAB-MSG SEPARATED BY SPACE.
* APPEND CHRTAB. CLEAR CHRTAB.
* CONTINUE.
* ENDIF.
* ENDIF.
* ENDIF.
IF CHRINP-STICHPRVER GT SPACE.
IF CHRINP-STICHPRVER CO '0123456789 '.
ELSE.
TRANSLATE CHRINP-STICHPRVER TO UPPER CASE.
ENDIF.
SHIFT CHRINP-STICHPRVER LEFT DELETING LEADING SPACE.
CHRTAB-STICHPRVER = CHRINP-STICHPRVER.
SELECT SINGLE * FROM QDSV WHERE STICHPRVER EQ CHRTAB-STICHPRVER.
IF SY-SUBRC GT 0.
APPEND ERRTAB.
CHRTAB-RCD_OK = 'N'.
CONCATENATE 'Invalid sampling procedure' CHRTAB-STICHPRVER
INTO CHRTAB-MSG SEPARATED BY SPACE.
APPEND CHRTAB. CLEAR CHRTAB.
CONTINUE.
ENDIF.
ENDIF.
APPEND CHRTAB. CLEAR CHRTAB.
ENDLOOP.
ENDLOOP.
ENDLOOP.

APPEND PLNTAB. CLEAR PLNTAB.

ENDLOOP.

ENDFORM.

*---------------------------------------------------------------------*
* FORM C_BUILD_PLAN_BAPI *
*---------------------------------------------------------------------*
FORM C_BUILD_PLAN_BAPI.

LOOP AT PLNTAB.

W_TABIX = SY-TABIX.
PERFORM INIT_WORKING_FIELDS_ITABS.

PERFORM BUILD_PLANDATA.

LOOP AT TSKTAB WHERE IMATNR EQ PLNTAB-IMATNR


AND WERKS EQ PLNTAB-WERKS
AND PLNNR EQ PLNTAB-PLNNR.
PERFORM BUILD_TASKDATA.
LOOP AT MATTAB WHERE IMATNR EQ TSKTAB-IMATNR
AND WERKS EQ TSKTAB-WERKS
AND PLNNR EQ TSKTAB-PLNNR
AND PLNAL EQ TSKTAB-PLNAL.
PERFORM BUILD_MATLDATA.
ENDLOOP.
LOOP AT OPSTAB WHERE IMATNR EQ TSKTAB-IMATNR
AND WERKS EQ TSKTAB-WERKS
AND PLNNR EQ TSKTAB-PLNNR
AND PLNAL EQ TSKTAB-PLNAL.
PERFORM BUILD_OPSDATA.
LOOP AT CHRTAB WHERE IMATNR EQ OPSTAB-IMATNR
AND WERKS EQ OPSTAB-WERKS
AND PLNNR EQ OPSTAB-PLNNR
AND PLNAL EQ OPSTAB-PLNAL
AND VORNR EQ OPSTAB-VORNR.
PERFORM BUILD_CHARDATA.
ENDLOOP.
ENDLOOP.
ENDLOOP.

IF NOT TASK[] IS INITIAL.


PERFORM CREATE_INSP_PLAN.
ENDIF.

ENDLOOP.

LOOP AT ERRTAB.
LOOP AT PLNTAB WHERE IMATNR EQ ERRTAB-IMATNR
AND WERKS EQ ERRTAB-WERKS
AND PLNNR EQ ERRTAB-PLNNR.
W_TABIX = SY-TABIX.
PLNTAB-RCD_OK = 'N'.
PLNTAB-MSG = ERRTAB-MSG.
MODIFY PLNTAB INDEX W_TABIX.
MOVE-CORRESPONDING PLNTAB TO PLNERR.
APPEND PLNERR. CLEAR PLNERR.
ENDLOOP.
LOOP AT TSKTAB WHERE IMATNR EQ ERRTAB-IMATNR
AND WERKS EQ ERRTAB-WERKS
AND PLNNR EQ ERRTAB-PLNNR.
W_TABIX = SY-TABIX.
TSKTAB-RCD_OK = 'N'.
TSKTAB-MSG = ERRTAB-MSG.
MODIFY TSKTAB INDEX W_TABIX.
* MOVE-CORRESPONDING TSKTAB TO TSKERR.
* APPEND TSKERR. CLEAR TSKERR.
ENDLOOP.
LOOP AT MATTAB WHERE IMATNR EQ ERRTAB-IMATNR
AND WERKS EQ ERRTAB-WERKS
AND PLNNR EQ ERRTAB-PLNNR.
W_TABIX = SY-TABIX.
MATTAB-RCD_OK = 'N'.
MATTAB-MSG = ERRTAB-MSG.
MODIFY MATTAB INDEX W_TABIX.
* MOVE-CORRESPONDING MATTAB TO MATERR.
* APPEND MATERR. CLEAR MATERR.
ENDLOOP.
LOOP AT OPSTAB WHERE IMATNR EQ ERRTAB-IMATNR
AND WERKS EQ ERRTAB-WERKS
AND PLNNR EQ ERRTAB-PLNNR.
W_TABIX = SY-TABIX.
OPSTAB-RCD_OK = 'N'.
OPSTAB-MSG = ERRTAB-MSG.
MODIFY OPSTAB INDEX W_TABIX.
* MOVE-CORRESPONDING OPSTAB TO OPSERR.
* APPEND OPSERR. CLEAR OPSERR.
ENDLOOP.
LOOP AT CHRTAB WHERE IMATNR EQ ERRTAB-IMATNR
AND WERKS EQ ERRTAB-WERKS
AND PLNNR EQ ERRTAB-PLNNR.
W_TABIX = SY-TABIX.
CHRTAB-RCD_OK = 'N'.
CHRTAB-MSG = ERRTAB-MSG.
MODIFY CHRTAB INDEX W_TABIX.
* MOVE-CORRESPONDING CHRTAB TO CHRERR.
* APPEND CHRERR. CLEAR CHRERR.
ENDLOOP.
ENDLOOP.

DELETE PLNTAB WHERE RCD_OK EQ 'N'.


DELETE TSKTAB WHERE RCD_OK EQ 'N'.
DELETE MATTAB WHERE RCD_OK EQ 'N'.
DELETE OPSTAB WHERE RCD_OK EQ 'N'.
DELETE CHRTAB WHERE RCD_OK EQ 'N'.

ENDFORM.

*---------------------------------------------------------------------*
* FORM INIT_WORKING_FIELDS_ITABS *
*---------------------------------------------------------------------*
FORM INIT_WORKING_FIELDS_ITABS.

CLEAR: GROUP, GROUPCOUNTER, TESTRUN, PROFILE, ERROR_FLAG,


BAPI_IDOC_STATUS.
REFRESH: TASK, MATERIALTASKALLOCATION, OPERATION, REFERENCEOPERATION,
PRODUCTIONRESOURCE, INSPCHARACTERISTIC, TEXTALLOCATION,
TEXT, RETURN, INSP_CHAR_VALUES, T_EDIDD, BAPI_RETN_INFO.
CLEAR : TASK, MATERIALTASKALLOCATION, OPERATION, REFERENCEOPERATION,
PRODUCTIONRESOURCE, INSPCHARACTERISTIC, TEXTALLOCATION,
TEXT, RETURN, INSP_CHAR_VALUES, T_EDIDD, BAPI_RETN_INFO.

ENDFORM.

*---------------------------------------------------------------------*
* FORM BUILD_PLANDATA *
*---------------------------------------------------------------------*
FORM BUILD_PLANDATA.

TESTRUN = ' '.


PROFILE = PLNTAB-PROFIDNETZ.

ENDFORM.

*---------------------------------------------------------------------*
* FORM BUILD_TASKDATA *
*---------------------------------------------------------------------*
FORM BUILD_TASKDATA.

TASK-TASK_LIST_GROUP = PLNTAB-PLNNR.
TASK-CHANGE_NO = PLNTAB-AENNR.
TASK-VALID_FROM = PLNTAB-DSTTAG.
TASK-GROUP_COUNTER = TSKTAB-PLNAL.
TASK-DESCRIPTION = TSKTAB-KTEXT.
TASK-PLANT = TSKTAB-WERKS.
TASK-DEL_IND = TSKTAB-DELKZ.
TASK-TASK_LIST_USAGE = TSKTAB-VERWE.
TASK-TASK_LIST_STATUS = TSKTAB-STATU.
TASK-TASK_MEASURE_UNIT = TSKTAB-PLNME.
TASK-DYN_MODIF_LEVEL = TSKTAB-QDYNHEAD.
TASK-DYN_MODIF_RULE = TSKTAB-QDYNREGEL.
TASK-OLD_NUMBER_OF_TASK_LIST = TSKTAB-PLNNR_ALT.
TASK-IDENT_KEY = TSKTAB-SLWBEZ.
TASK-DYN_MODIF_BY_CUSTOMR = TSKTAB-KUNDKZ.
TASK-DYN_MODIF_BY_VENDOR = TSKTAB-LIEFKZ.
TASK-DYN_MODIF_BY_MANUFACT = TSKTAB-HERSTKZ.
TASK-IND_UNITS_EXT_NUMBERING = TSKTAB-EXTNUM.

APPEND TASK. CLEAR TASK.

*CHANGE_NO_TO
*VALID_TO_DATE
*TASK_MEASURE_UNIT_ISO
*LOT_SIZE_FROM
*LOT_SIZE_TO
*RESP_PLANNER_GROUP
*OLD_NUMBER_OF_TASK_LIST
*RECALC_STD_VALUES
*DYN_MODIF_LEVEL
*DYN_MODIF_RULE
*DYN_MODIF_BY_VENDOR
*DYN_MODIF_BY_MANUFACT
*DYN_MODIF_BY_CUSTOMR
*SAMPLE_DRAWING_PROCEDURE
*IND_UNITS_EXT_NUMBERING
*IDENT_KEY
*INSPPOINT_PARTIALLOT_ASSGNMT
*CHANGE_RULE
*OBJECT_CHANGE_TYPE
*PLANNING_WORK_CENTER
*MS_FLAG

ENDFORM.

*---------------------------------------------------------------------*
* FORM BUILD_MATLDATA *
*---------------------------------------------------------------------*
FORM BUILD_MATLDATA.

MATERIALTASKALLOCATION-MATERIAL = MATTAB-MATNR2.
MATERIALTASKALLOCATION-PLANT = MATTAB-WERKS2.
MATERIALTASKALLOCATION-TASK_LIST_GROUP = PLNTAB-PLNNR.
MATERIALTASKALLOCATION-GROUP_COUNTER = TSKTAB-PLNAL.
MATERIALTASKALLOCATION-CHANGE_NO = PLNTAB-AENNR.
MATERIALTASKALLOCATION-VALID_FROM = PLNTAB-DSTTAG.
MATERIALTASKALLOCATION-VENDOR = MATTAB-SLIFNR.
MATERIALTASKALLOCATION-CUSTOMER = MATTAB-KUNNR.
MATERIALTASKALLOCATION-SEARCH_FIELD = MATTAB-SUCHFELD.

APPEND MATERIALTASKALLOCATION. CLEAR MATERIALTASKALLOCATION.

*CHANGE_NO_TO
*VALID_TO_DATE
*DEL_IND
*MATERIAL_EXTERNAL
*MATERIAL_GUID
*MATERIAL_VERSION
*MS_OBJECT
*MS_OBJTYPE

ENDFORM.

*---------------------------------------------------------------------*
* FORM BUILD_OPSDATA *
*---------------------------------------------------------------------*
FORM BUILD_OPSDATA.

OPERATION-TASK_LIST_GROUP = PLNTAB-PLNNR.
OPERATION-GROUP_COUNTER = TSKTAB-PLNAL.
OPERATION-CHANGE_NO = PLNTAB-AENNR.
OPERATION-VALID_FROM = PLNTAB-DSTTAG.
OPERATION-ACTIVITY = OPSTAB-VORNR.
OPERATION-WORK_CNTR = OPSTAB-ARBPL.
OPERATION-PLANT = OPSTAB-WERKS.
OPERATION-CONTROL_KEY = OPSTAB-STEUS.
OPERATION-STANDARD_TEXT_KEY = OPSTAB-KTSCH.
OPERATION-DESCRIPTION = OPSTAB-LTXA1.
OPERATION-OPERATION_MEASURE_UNIT = OPSTAB-MEINH.
OPERATION-RECORDING_VIEW = OPSTAB-ERFSICHT.
OPERATION-INSP_POINT_COMPLT_FLOW_VARIANT = OPSTAB-QPPKTABS.

* OPERATION-DENOMINATOR = OPSTAB-UMREN.
* OPERATION-NOMINATOR = OPSTAB-UMREZ.
* OPERATION-BASE_QUANTITY = OPSTAB-BMSCH.
* OPERATION-STD_VALUE_01 = OPSTAB-VGWO1_1.
* OPERATION-STD_UNIT_01 = OPSTAB-VGE01_1.
* OPERATION-ACTTYPE_01 = OPSTAB-LAR01_1.
* OPERATION-STD_VALUE_02 = OPSTAB-VGWO1_2.
* OPERATION-STD_UNIT_02 = OPSTAB-VGE01_2.
* OPERATION-ACTTYPE_02 = OPSTAB-LAR01_2.
* OPERATION-STD_VALUE_03 = OPSTAB-VGWO1_3.
* OPERATION-STD_UNIT_03 = OPSTAB-VGE01_3.
* OPERATION-ACTTYPE_03 = OPSTAB-LAR01_3.

APPEND OPERATION. CLEAR OPERATION.

*CHANGE_NO_TO
*VALID_TO_DATE
*DEL_IND
*OPERATION_ID
*OBJ_ID
*OBJECT_TYPE_CIM_RESOURCE
*OPERATION_MEASURE_UNIT_ISO
*STD_UNIT_01_ISO
*STD_UNIT_02_ISO
*STD_UNIT_03_ISO
*ACTTYPE_04
*STD_UNIT_04
*STD_UNIT_04_ISO
*STD_VALUE_04
*ACTTYPE_05
*STD_UNIT_05
*STD_UNIT_05_ISO
*STD_VALUE_05
*ACTTYPE_06
*STD_UNIT_06
*STD_UNIT_06_ISO
*STD_VALUE_06
*USERFIELDS_KEYWORD_ID

ENDFORM.

*---------------------------------------------------------------------*
* FORM BUILD_CHARDATA *
*---------------------------------------------------------------------*
FORM BUILD_CHARDATA.

INSPCHARACTERISTIC-TASK_LIST_GROUP = PLNTAB-PLNNR.
INSPCHARACTERISTIC-CHANGE_NO = PLNTAB-AENNR.
INSPCHARACTERISTIC-GROUP_COUNTER = TSKTAB-PLNAL.
INSPCHARACTERISTIC-ACTIVITY = OPSTAB-VORNR.
INSPCHARACTERISTIC-INSPCHAR = CHRTAB-MERKNR.
INSPCHARACTERISTIC-PRESET_CTRL_INDS_KEY = CHRTAB-VSTEUERKZ.
INSPCHARACTERISTIC-QUANTITATIVE_IND = CHRTAB-QUANTITAT.
INSPCHARACTERISTIC-MSTR_CHAR = CHRTAB-VERWMERKM.
INSPCHARACTERISTIC-PMSTR_CHAR = CHRTAB-WERKS.
INSPCHARACTERISTIC-CHAR_DESCR = CHRTAB-KURZTEXT.
INSPCHARACTERISTIC-SAMPLING_PROCEDURE_IND = CHRTAB-STICHPRVER.
INSPCHARACTERISTIC-SMPL_UNIT = CHRTAB-PROBEMGEH.
INSPCHARACTERISTIC-SMPL_QUANT = CHRTAB-PRUEFEINH.
INSPCHARACTERISTIC-FORMULA_FIELD_1 = CHRTAB-FORMEL1.

* INSPCHARACTERISTIC-INFOFIELD3 = CHRTAB-DUMMY40.
* IF CHRTAB-PUMFKZ1 EQ 'X'.
* INSPCHARACTERISTIC-SCOPE_IND = ' '. " Scope not fixed
* ELSEIF CHRTAB-PUMFKZ4 EQ 'X'.
* INSPCHARACTERISTIC-SCOPE_IND = '='. " Fixed insp scope
* ENDIF.
* INSPCHARACTERISTIC-LW_TOL_LMT_IND = CHRTAB-TOLERUNTEN.
* INSPCHARACTERISTIC-UP_TOL_LMT_IND = CHRTAB-TOLEROBEN.
* INSPCHARACTERISTIC-DEC_PLACES = CHRTAB-STELLEN.
* INSPCHARACTERISTIC-MEAS_UNIT = CHRTAB-MASSEINHSW.
* INSPCHARACTERISTIC-SAMPLING_PROCEDURE_IND = CHRTAB-STICHPR.
* IF CHRTAB-ESTUKZ3 EQ 'X'.
* INSPCHARACTERISTIC-RESULT_RECORDING_TYPE = '+'. " Single value recording
* ENDIF.
* IF CHRTAB-RZWANG4 EQ 'X'.
* INSPCHARACTERISTIC-CONFIRMATION_CATEGORY = 'X'. " Required characteristic
* ENDIF.
* INSPCHARACTERISTIC-CHANGE_DOCUMENTS_REQ = CHRTAB-AENDBELEG.
* IF CHRTAB-DOKUKZ1 EQ 'X'.
* INSPCHARACTERISTIC-DOCU_REQU = ' '. " Documentation not required
* ENDIF.
* INSPCHARACTERISTIC-MEAS_VALUE_CONFIRM_IND = CHRTAB-MESSWERTE.
* IF CHRTAB-DRUCK1 EQ 'X'.
* INSPCHARACTERISTIC-PRINT_IND = ' '. " Print
* ENDIF.
* IF CHRTAB-KEINEFORMEL EQ 'X'.
* INSPCHARACTERISTIC-FORMULA_IND = ' '. " No formula
* ENDIF.
* INSPCHARACTERISTIC-ATTRIBUTE_REQUIRED_IND = CHRTAB-PRUEFKAT.
* INSPCHARACTERISTIC-SMPL_PROCEDURE = CHRTAB-STICHPRVER.
* INSPCHARACTERISTIC-SMPL_UNIT = OPSTAB-MEINH.
* INSPCHARACTERISTIC-SMPL_QUANT = '1'.
* INSPCHARACTERISTIC-RES_ORG = CHRTAB-QERGDATH.
* INSPCHARACTERISTIC-TARGET_VAL = CHRTAB-SOLLWERT.
* INSPCHARACTERISTIC-LW_TOL_LMT = CHRTAB-TOLERANZUN.
* INSPCHARACTERISTIC-UP_TOL_LMT = CHRTAB-TOLERANZOB.
* INSPCHARACTERISTIC-SEL_SET1 = CHRTAB-AUSWMENGE1.
* INSPCHARACTERISTIC-PSEL_SET1 = CHRTAB-AUSWMGWRK1.
* INSPCHARACTERISTIC-CHA_MASTER_IMPORT_MODUS = 'N'.

APPEND INSPCHARACTERISTIC. CLEAR INSPCHARACTERISTIC.

*OPERATION_ID
*VALID_FROM
*CHANGE_NO
*CHANGE_NO_TO
*VALID_TO_DATE
*DEL_IND
*PMSTR_CHAR
*CHA_MASTER_IMPORT_MODUS
*CHAR_DESCR
*METHOD
*PMETHOD
*TOLERANCE_KEY
*MEAS_VALUE_CONFIRM_IND
*ATTRIBUTE_REQUIRED_IND
*UP_TOL_LMT_IND
*LW_TOL_LMT_IND

ENDFORM.

*---------------------------------------------------------------------*
* FORM CREATE_INSP_PLAN *
*---------------------------------------------------------------------*
FORM CREATE_INSP_PLAN.

* call BAPI-function in this system *


CALL FUNCTION 'BAPI_INSPECTIONPLAN_CREATE'
EXPORTING
TESTRUN = TESTRUN
PROFILE = PROFILE
IMPORTING
GROUP = GROUP
GROUPCOUNTER = GROUPCOUNTER
TABLES
TASK = TASK
MATERIALTASKALLOCATION = MATERIALTASKALLOCATION
OPERATION = OPERATION
REFERENCEOPERATION = REFERENCEOPERATION
PRODUCTIONRESOURCE = PRODUCTIONRESOURCE
INSPCHARACTERISTIC = INSPCHARACTERISTIC
TEXTALLOCATION = TEXTALLOCATION
TEXT = TEXT
RETURN = RETURN
INSP_CHAR_VALUES = INSP_CHAR_VALUES
EXCEPTIONS
OTHERS = 1.
DELETE RETURN WHERE MESSAGE EQ SPACE.
DELETE RETURN WHERE TYPE EQ 'W'.
DELETE RETURN WHERE MESSAGE CS 'Consistency check'.
SORT RETURN BY MESSAGE.
DELETE ADJACENT DUPLICATES FROM RETURN COMPARING MESSAGE.
IF NOT RETURN[] IS INITIAL.
LOOP AT RETURN WHERE ( TYPE EQ 'E' OR TYPE EQ 'A' )
AND MESSAGE GT SPACE.
PLNTAB-RCD_OK = 'N'.
PLNTAB-MSG = RETURN-MESSAGE.
MOVE-CORRESPONDING PLNTAB TO ERRTAB.
APPEND ERRTAB.
MODIFY PLNTAB INDEX W_TABIX.
ENDLOOP.
IF SY-SUBRC GT 0.
COMMIT WORK AND WAIT.
ENDIF.
ELSE.
COMMIT WORK AND WAIT.
ENDIF.

CALL FUNCTION 'INSPECTIONPLAN_CLEARBUFFER'.

SORT ERRTAB BY IMATNR WERKS PLNNR MSG.


DELETE ADJACENT DUPLICATES FROM ERRTAB COMPARING IMATNR WERKS PLNNR MSG.

ENDFORM.

*---------------------------------------------------------------------*
* FORM D_PRINT_REPORT *
*---------------------------------------------------------------------*
FORM D_PRINT_REPORT.

DESCRIBE TABLE PLNERR LINES ELINES.


IF ELINES GT 0.
W_RPT = '2'.
SY-PAGNO = 0.
NEW-PAGE.
LOOP AT PLNERR.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE: /1 PLNERR-IMATNR,
PLNERR-WERKS,
PLNERR-PLNNR,
PLNERR-AENNR,
PLNERR-DSTTAG,
PLNERR-REVLV,
PLNERR-PROFIDNETZ,
82 PLNERR-MSG.
CLEAR W_TABIX.
LOOP AT TSKERR WHERE IMATNR EQ PLNERR-IMATNR
AND WERKS EQ PLNERR-WERKS
AND PLNNR EQ PLNERR-PLNNR.
ADD 1 TO W_TABIX.
IF W_TABIX EQ 1.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE: 69 'TSK:',
TSKERR-PLNAL,
(04) ' ',
(80) TSKERR-MSG,
170 ' '.
ELSE.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE: /69 'TSK:',
TSKERR-PLNAL,
(04) ' ',
(80) TSKERR-MSG,
170 ' '.
ENDIF.
LOOP AT MATERR WHERE IMATNR EQ TSKERR-IMATNR
AND WERKS EQ TSKERR-WERKS
AND PLNNR EQ TSKERR-PLNNR
AND PLNAL EQ TSKERR-PLNAL.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE: /69 'MAT:',
MATERR-PLNAL,
(04) ' ',
(80) MATERR-MSG,
170 ' '.
ENDLOOP.
LOOP AT OPSERR WHERE IMATNR EQ TSKERR-IMATNR
AND WERKS EQ TSKERR-WERKS
AND PLNNR EQ TSKERR-PLNNR
AND PLNAL EQ TSKERR-PLNAL.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE: /69 'OPS:',
OPSERR-PLNAL,
OPSERR-VORNR,
(80) OPSERR-MSG,
170 ' '.
LOOP AT CHRERR WHERE IMATNR EQ OPSERR-IMATNR
AND WERKS EQ OPSERR-WERKS
AND PLNNR EQ OPSERR-PLNNR
AND PLNAL EQ OPSERR-PLNAL
AND VORNR EQ OPSERR-VORNR.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE: /69 'CHR:',
CHRERR-PLNAL,
CHRERR-VORNR,
(80) CHRERR-MSG,
170 ' '.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDLOOP.
SKIP 2.
FORMAT COLOR COL_HEADING INTENSIFIED OFF.
WRITE: /1 'Number of records in error:', ELINES.
ENDIF.

DESCRIBE TABLE PLNTAB LINES ZLINES.


IF ZLINES GT 0.
W_RPT = '1'.
SY-PAGNO = 0.
NEW-PAGE.
LOOP AT PLNTAB.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE: /1 PLNTAB-MATNR,
PLNTAB-WERKS,
PLNTAB-PLNNR,
PLNTAB-AENNR,
PLNTAB-DSTTAG,
PLNTAB-REVLV,
PLNTAB-PROFIDNETZ.
CLEAR W_TABIX.
LOOP AT TSKTAB WHERE IMATNR EQ PLNTAB-IMATNR
AND WERKS EQ PLNTAB-WERKS
AND PLNNR EQ PLNTAB-PLNNR.
ADD 1 TO W_TABIX.
IF W_TABIX EQ 1.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE: 69 'TSK:',
TSKTAB-PLNAL,
TSKTAB-KTEXT,
170 ' '.
ELSE.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE: /69 'TSK:',
TSKTAB-PLNAL,
TSKTAB-KTEXT,
170 ' '.
ENDIF.
LOOP AT MATTAB WHERE IMATNR EQ TSKTAB-IMATNR
AND WERKS EQ TSKTAB-WERKS
AND PLNNR EQ TSKTAB-PLNNR
AND PLNAL EQ TSKTAB-PLNAL.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE: /69 'MAT:',
MATTAB-PLNAL,
MATTAB-LIFNR,
MATTAB-KUNNR,
MATTAB-SUCHFELD,
170 ' '.
ENDLOOP.
LOOP AT OPSTAB WHERE IMATNR EQ TSKTAB-IMATNR
AND WERKS EQ TSKTAB-WERKS
AND PLNNR EQ TSKTAB-PLNNR
AND PLNAL EQ TSKTAB-PLNAL.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE: /69 'OPS:',
OPSTAB-PLNAL,
OPSTAB-VORNR,
OPSTAB-ARBPL,
OPSTAB-LTXA1,
170 ' '.
LOOP AT CHRTAB WHERE IMATNR EQ OPSTAB-IMATNR
AND WERKS EQ OPSTAB-WERKS
AND PLNNR EQ OPSTAB-PLNNR
AND PLNAL EQ OPSTAB-PLNAL
AND VORNR EQ OPSTAB-VORNR.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE: /69 'CHR:',
CHRTAB-PLNAL,
CHRTAB-VORNR,
CHRTAB-MERKNR,
CHRTAB-VERWMERKM,
170 ' '.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDLOOP.
IF P_TEST EQ 'X'.
SKIP 2.
FORMAT COLOR COL_HEADING INTENSIFIED OFF.
WRITE: /1 'Number of materials to be processed:', ZLINES.
ELSE.
SKIP 2.
FORMAT COLOR COL_HEADING INTENSIFIED OFF.
WRITE: /1 'Number of materials processed:', ZLINES.
ENDIF.
ENDIF.

SKIP 2.
FORMAT COLOR COL_HEADING INTENSIFIED OFF.
E_PRINT_LINE = '********* END OF REPORT *********'.
PERFORM JUST_ROUTINE(RSBTCHH0) USING E_PRINT_LINE SY-LINSZ.
WRITE: / E_PRINT_LINE.

ENDFORM.

*-------------------------- Top of Page -----------------------------*


TOP-OF-PAGE.

FORMAT COLOR COL_HEADING INTENSIFIED OFF.


IF P_RUN EQ 'X'.
CONCATENATE SY-TITLE '- Update' INTO W_PRINT_LINE SEPARATED
BY SPACE.
ELSEIF P_TEST EQ 'X'.
CONCATENATE SY-TITLE '- Report' INTO W_PRINT_LINE SEPARATED
BY SPACE.
ENDIF.
PERFORM JUST_ROUTINE(RSBTCHH0) USING W_PRINT_LINE SY-LINSZ.
WRITE R_DATIME TO W_PRINT_LINE+0(20).
WRITE 'Page' TO W_PRINT_LINE+160(4).
WRITE SY-PAGNO TO W_PRINT_LINE+164(6).
WRITE: / W_PRINT_LINE.
SKIP 1.

WRITE: / 'SOURCE DATA:', 14(157) P_FILE1 COLOR COL_NORMAL, 170 ' '.

FORMAT COLOR COL_HEADING INTENSIFIED OFF.


IF W_RPT EQ '1'.
ULINE: /(170).
WRITE: /1 'Material',
20 'Plnt',
25 'Group',
34 'Change No',
47 'Valid From',
58 'Rv',
61 'Profile',
69 'Lvl',
74 'Gr',
77 'Additional Information',
170 ' '.
ELSEIF W_RPT EQ '2'.
ULINE: /(170).
WRITE: /1 'Material',
20 'Plnt',
25 'Group',
34 'Change No',
47 'Valid From',
58 'Rv',
61 'Profile',
69 'Lvl',
74 'Gr',
77 'Oprn',
82 'Error Message',
170 ' '.
ENDIF.
*
END-OF-PAGE.
************************************************************************
* E N D O F P R O G R A M
************************************************************************

S-ar putea să vă placă și