Posted: Sun Oct 14, 2007 9:08 pm Post subject: Create Batch and populate characteristics from Material Data
Requirement:
In a process industry-company, a sample of material is inspected by Spectrometer ( Inspection M/C) after each batch of production. A third party software WinOE is being used to analyze and store the pig iron sample's characteristic data on an Windows NT PC ( connected to Spectrometer ). This software also generates a file for each final inspection data of a batch sample. The file name indicates the batch number ( external number range for sap ). The requirement is to determine grade, create a batch in SAP of the material being produced in the current shift / charge. Further, populate characteristics of Material / Batch using inspection data.
Here 'Grade' represents the actual material produced and it may not be the same as material desired. e.g. Process Order is raised to produce 'High Percentage Corbon Iron' and is poured accordingly but inspection results might suggest that produced material should be graded as another material.
--------------------------------------------------------------------------------
Processing:
An application written in ABAP is scheduled to run on SAP application server at regular intervals. The processing is as below:
Along with the process order, the information of current material being produced is kept in a customer table. Mainly Process Order Number, material number against date & time is maintained manually on a daily basis. Program determines the current material number and continues only if the data is maintained in this table.
Check that Remote computer is running and in the network and then transfer the inspection data file from the remote NT m/c to the SAP application server's spectrometer directory . FM 'SXPG_COMMAND_EXECUTE' can be used to run a ping command after configuring it through transaction SM69. Standard SAP's RSFTP002 is modified slightly to run FTP commands on remote PC. Remote NT M/c should be running an FTP Service and it can be achieved by running the IIS web server's FTP service as IIS comes along with Windows NT.
SUBMIT ZFTP USING SELECTION-SET 'ZSPECTRO' AND RETURN.
The variant for this program has following paramters:
User < user name of NT PC >
Password < password >
Host < IP Address of NT PC >
Command 1 cd < directory on Remote Windows NT PC >
Command 2 lcd < directory on SAP application server >
Command 3 ascii
Command 4 mget *.*
Command 5 mdelete *.*
RFC destination MYFTP < SAP application server's RFC destination in Xn SM59 >
Compress N
Get all the files from application server directory using function module EPS_GET_DIRECTORY_LISTING and process one by one.
For Each File:
Open, Read and Close current file using OPEN DATASET , READ DATASET, CLOSE DATASET
Further, parse strings and move to internal table.
Populate the customer table for inspection data with the file data fetched in last step. This table contains characteristics like Corbon%, Sulphur%, Mn% etc. against External Batch Number, Date & Time. Perfomr a check for duplicate record on this table at this point of time and data is inserted at the end of the processing.
Determine the grade of the sample pig iron by comparing the charactersics with the grade master table ( a customer table with grade determination rules ). This table contains Material with its minimum and maximum values of relevant characteristics.
Create Batch and populate characteristic values against that material and batch combination in SAP system.
Standard SAP has provided APIs for this purpose. Function Modules are 'CALO_INIT_API', 'CACL_OBJECT_ALLOCATION_MAINT', CACL_OBJECT_VALIDATION_MAINT', 'CACL_CLASSIFICATION_SAVE','VB_CREATE_BATCH' , 'CARD_CLASS_READ_CHARACTS'
Further, a customer function module 'Z_CREATE_BATCH_WITH_CHARCT' is developed using these FMs.
After finishing the processing for the current file move the file to archive directory. This is achieved by using FMs for copy 'PFL_COPY_OS_FILE' and delete 'EPS_DELETE_FILE'.
Insert records in inspection data table.
DATA : ERR_MSG like IWERRORMSG .
DATA : FILE_NAMES_ITAB like EPSFILI occurs 5 with header line.
DATA : BEGIN OF REC_ITAB OCCURS 17,
FILE_LINE(100) TYPE C,
END OF REC_ITAB.
DATA : REC_HDR(20) type C,
REC_DTL(100) type C,
REC_DTL_NUM LIKE ZSPECTRO_DATA-C_PERCENT.
DATA CAST_DATE TYPE DATS.
DATA PREV_DATE TYPE ENDDA.
DATA TODAY TYPE BEGDA.
DATA PERIOD TYPE PSEN_DURATION_DEC.
DATA: BEGIN OF SPECTRO_ITAB OCCURS 0,
MANDT TYPE ZSPECTRO_DATA-MANDT,
CAST_NO TYPE ZSPECTRO_DATA-CAST_NO,
SOURCE TYPE ZSPECTRO_DATA-SOURCE, "SP for normal, AL for runner
CAST_DATE TYPE ZSPECTRO_DATA-CAST_DATE,
CAST_TIME TYPE ZSPECTRO_DATA-CAST_TIME,
OPERATOR TYPE ZSPECTRO_DATA-OPERATOR, "Operator Type DB..
MATRIX TYPE ZSPECTRO_DATA-MATRIX, "Not Required currently
P_PERCENT TYPE ZSPECTRO_DATA-P_PERCENT, "Phos %
S_PERCENT TYPE ZSPECTRO_DATA-S_PERCENT, "Sulph %
C_PERCENT TYPE ZSPECTRO_DATA-C_PERCENT, "Carbon %
SI_PERCENT TYPE ZSPECTRO_DATA-SI_PERCENT,"Silicon %
FE_PERCENT TYPE ZSPECTRO_DATA-FE_PERCENT,"Fe % ..Not used
MN_PERCENT TYPE ZSPECTRO_DATA-MN_PERCENT,"Manganese %
TI_PERCENT TYPE ZSPECTRO_DATA-TI_PERCENT,"Titanium % ..Not Used
ZGRADE TYPE ZSPECTRO_DATA-GRADE, "Grade - Finished Part No
STATUS TYPE ZSPECTRO_DATA-STATUS, "Batch Not Created in SAP "E"
FILE_NAME TYPE ZSPECTRO_DATA-FILE_NAME, " File name
END OF SPECTRO_ITAB.
DATA : SP_ZSPECTRO_DATA LIKE ZSPECTRO_DATA OCCURS 1 WITH HEADER LINE.
DATA : SAMPLE_REST(20) TYPE C,
SAMPLE_NO(6) TYPE C,
CAST_TIME(8) TYPE C.
DATA : BEGIN OF ITAB_FOR_DYN_PROGRAM OCCURS 2,
LINE(72) TYPE C,
END OF ITAB_FOR_DYN_PROGRAM.
DATA DYN_STMT(72) TYPE C.
DATA ZEQUALS(3) TYPE C.
TABLES: ZSPECTRO_DATA, " Stores Data of File
ZSPECTRO_FACTOR, " Correction Factor
ZCUR_PON. " Current Process Order
DATA TMP LIKE ZSPECTRO_DATA-CAST_NO.
DATA DEST_FILE LIKE TPFHT-PFFILE.
DATA FLAG(4) TYPE C.
DATA N TYPE I.
DATA ERROR_DESC(200) TYPE C.
DATA VAR_GRADE LIKE ZGRADE_MASTER-ZCMIN.
PARAMETERS: FILE_DIR LIKE EPSF-EPSDIRNAM
DEFAULT '/home/ /interface/spectro'. "Dir Name
DATA : FILE_PATH LIKE TPFHT-PFFILE.
DATA BATCH_MODE LIKE MCHA-CHARG.
DATA CHAR_ITAB LIKE CHA_VALDSC OCCURS 0 WITH HEADER LINE.
DATA VAR_MAT_DESC LIKE MAKT-MAKTX.
DATA VAR_PON LIKE ZCUR_PON-PON. " Process Order No
DATA VAR_PON_TIME LIKE ZCUR_PON-PO_TIME. " Process Order Time
DATA OLD_PON LIKE ZCUR_PON-PON.
DATA VAR_PON_DATE LIKE ZCUR_PON-PO_DATE. " Process Order Date
DATA VAR_MAT_NO LIKE MCHA-MATNR.
DATA VAR_BATCH LIKE MCHA-CHARG.
DATA FILES_TKN TYPE I.
DATA VAR_CAST_NO LIKE ZSPECTRO_DATA-CAST_NO. " Cast No.
DATA : pripar TYPE pri_params,
arcpar TYPE arc_params,
valid TYPE C.
DATA TIME_LENGTH TYPE I.
* Check daily maintenance of Process Order Number.
TODAY = SY-DATUM.
PERIOD-CALDD = 2.
CALL FUNCTION 'HR_SEN_CALE_DAYS_DATE'
EXPORTING
ID_DATE = TODAY
ID_OPERATOR = '-'
IS_DURATION = PERIOD
IMPORTING
ED_DATE = PREV_DATE
EXCEPTIONS
CONVERSION_NOT_SPECIFIED = 1
CONVERSION_NOT_POSSIBLE = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
SELECT COUNT( * )
INTO VAR_PON
FROM ZCUR_PON
WHERE PO_DATE >= PREV_DATE.
IF SY-SUBRC <> 0.
FORMAT COLOR 6 ON.
WRITE :/ 'Please Maintain Current Process Order Number'.
FORMAT COLOR OFF.
EXIT.
ENDIF.
* Setting Printer parametres for spool request
CALL FUNCTION 'GET_PRINT_PARAMETERS'
EXPORTING
DESTINATION = 'LOC1'
COPIES = 1 " COUNT
LIST_NAME = 'FTP_SPECTRO'
LIST_TEXT = 'SUBMIT ... TO SAP-SPOOL'
IMMEDIATELY = ' '
RELEASE = 'X'
NEW_LIST_ID = 'X'
EXPIRATION = 1 " DAYS
LINE_SIZE = 80
LINE_COUNT = 65
LAYOUT = 'X_65_80'
SAP_COVER_PAGE = ' '
COVER_PAGE = ' '
RECEIVER = SY-UNAME
DEPARTMENT = 'System'
NO_DIALOG = 'X'
MODE = '1'
USER = SY-UNAME
IMPORTING
out_parameters = pripar
out_archive_parameters = arcpar
valid = valid.
IF VALID <> SPACE.
* FTP files from NT m/c to Application server's 'spectrometer'
*directory
SUBMIT ZFTP USING SELECTION-SET 'ZSPECTRO'
TO SAP-SPOOL WITHOUT SPOOL DYNPRO
SPOOL PARAMETERS pripar
ARCHIVE PARAMETERS arcpar
AND RETURN.
ENDIF.
* SUBMIT ZFTP USING SELECTION-SET 'ZSPECTRO_VAR' AND RETURN.
* Read Directory for list of files on application server.
CALL FUNCTION 'EPS_GET_DIRECTORY_LISTING'
EXPORTING
DIR_NAME = FILE_DIR
FILE_MASK = '*.*'
* IMPORTING
* DIR_NAME =
* FILE_COUNTER =
* ERROR_COUNTER =
TABLES
DIR_LIST = FILE_NAMES_ITAB
EXCEPTIONS
INVALID_EPS_SUBDIR = 1
SAPGPARAM_FAILED = 2
BUILD_DIRECTORY_FAILED = 3
NO_AUTHORIZATION = 4
READ_DIRECTORY_FAILED = 5
TOO_MANY_READ_ERRORS = 6
EMPTY_DIRECTORY_LIST = 7
OTHERS = 8
.
IF SY-SUBRC <> 0.
FORMAT COLOR 6 ON.
WRITE : / 'Problem in directory reading'.
FORMAT COLOR OFF.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CLEAR FILE_NAMES_ITAB.
* WRITE : / FILE_NAMES_ITAB.
DESCRIBE TABLE FILE_NAMES_ITAB LINES FILES_TKN.
IF FILES_TKN < 1.
WRITE : / 'NO FILES AVAILABLE FOR UPLOADING', FILES_TKN .
EXIT.
ENDIF.
* Processing all files in the named directory
LOOP AT FILE_NAMES_ITAB.
CONCATENATE FILE_DIR '/' FILE_NAMES_ITAB-NAME INTO FILE_PATH.
WRITE : /.
FORMAT COLOR 1 ON.
WRITE :/ 'Processing File : ',FILE_PATH.
FORMAT COLOR OFF.
CLEAR REC_ITAB. REFRESH REC_ITAB.
* Uploading each file from presentation server
* PERFORM CHECK_FILE_FORMAT.
OPEN DATASET FILE_PATH FOR INPUT IN TEXT MODE.
IF SY-SUBRC <> 0.
WRITE : / 'PROBLEM IN READING FILE IN REC_ITAB'.
FLAG = 'ERR'.
PERFORM MOVE_FILE USING FLAG.
CLEAR FLAG.
CONTINUE.
ELSE.
DO.
READ DATASET FILE_PATH INTO REC_ITAB.
IF SY-SUBRC = 0 .
APPEND REC_ITAB.
ELSE.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET FILE_PATH.
* IF FLAG = 'ERR' .
* WRITE : / 'Error in File ',FILE_PATH.
* PERFORM MOVE_FILE USING FLAG.
* CLEAR FLAG.
* CONTINUE.
* ENDIF.
* Parsing string and putting in the fields of the internal table
* SPECTRO_ITAB
PERFORM UPLOAD_TO_TABLE.
CLEAR SP_ZSPECTRO_DATA. REFRESH SP_ZSPECTRO_DATA.
* Check for duplicate record
SELECT SINGLE * INTO SP_ZSPECTRO_DATA FROM ZSPECTRO_DATA
WHERE CAST_NO = SPECTRO_ITAB-CAST_NO
AND CAST_DATE = SPECTRO_ITAB-CAST_DATE
AND CAST_TIME = SPECTRO_ITAB-CAST_TIME
AND SOURCE = SPECTRO_ITAB-SOURCE. " SP or AL
IF SY-SUBRC = 0.
FORMAT COLOR 6 ON.
WRITE : / 'DUPLICATE RECORD FOR FILE ' ,
SP_ZSPECTRO_DATA-FILE_NAME. "FILE_NAMES_ITAB-NAME.
FORMAT COLOR OFF.
FLAG = 'ERR'.
PERFORM MOVE_FILE USING FLAG.
CLEAR : REC_ITAB, SP_ZSPECTRO_DATA,SPECTRO_ITAB,CHAR_ITAB.
REFRESH : REC_ITAB,SP_ZSPECTRO_DATA,SPECTRO_ITAB,CHAR_ITAB.
CLEAR FLAG.
CONTINUE.
ELSE.
* Get the grade ( Finished good part No)
* based on the % values of metals and update
* characteristics value for Grade in CHAR_ITAB internal tab
SELECT * INTO TABLE SP_ZSPECTRO_DATA FROM ZSPECTRO_DATA
WHERE CAST_NO = SPECTRO_ITAB-CAST_NO
* AND CAST_DATE = SPECTRO_ITAB-CAST_DATE
AND SOURCE = 'SP'.
IF SY-DBCNT > 1. "More than one SP record for the CAST NO
FORMAT COLOR 6 ON.
WRITE: / 'More than one SP record for the CAST Invalid File '
, FILE_NAMES_ITAB-NAME.
FORMAT COLOR OFF.
FLAG = 'ERR'.
PERFORM MOVE_FILE USING FLAG.
CLEAR : REC_ITAB, SP_ZSPECTRO_DATA,SPECTRO_ITAB,CHAR_ITAB.
REFRESH : REC_ITAB,SP_ZSPECTRO_DATA,SPECTRO_ITAB,CHAR_ITAB.
CLEAR FLAG.
CONTINUE.
ELSEIF SY-DBCNT = 1. "Cast No with source SP exists
FORMAT COLOR 2 ON.
WRITE : / 'CAST NO ',SPECTRO_ITAB-CAST_NO,
' WITH SOURCE SP EXISTS'.
FORMAT COLOR OFF.
* If source is not AL for current cast continue with new file by
* Raise error
IF SPECTRO_ITAB-SOURCE = 'AL'. "source is AL for current cast no
read table sp_zspectro_data index 1.
* Compare Grade of current cast(source AL) and that of cast with
* source SP. If same, update the batch with current % values of metals
* else create a new cast number by concatenating 'A' to the cast
* number.
IF SPECTRO_ITAB-ZGRADE = sp_zspectro_data-grade.
FORMAT COLOR 1 ON.
WRITE : / 'SP GRADE IS EQUAL TO AL GRADE, BATCH IS UPDATED'.
FORMAT COLOR OFF.
BATCH_MODE = 'UPDATE'.
ELSE.
FORMAT COLOR 1 ON.
WRITE : / 'SP GRADE IS NOT EQUAL TO AL GRADE'.
FORMAT COLOR OFF.
CONCATENATE SPECTRO_ITAB-CAST_NO 'A' INTO
SPECTRO_ITAB-CAST_NO.
* Check if the new cast number already exists in the
* ZSPECTRO_DATA table.
SELECT CAST_NO INTO VAR_CAST_NO FROM ZSPECTRO_DATA
WHERE CAST_NO = SPECTRO_ITAB-CAST_NO.
ENDSELECT.
CLEAR VAR_CAST_NO.
* If found update the batch with new charactreistic values
* else create a new batch with concatenated cast number
IF SY-DBCNT GE 1.
FORMAT COLOR 2 ON.
WRITE : / SPECTRO_ITAB-CAST_NO,
' BATCH ALREADY EXITS FOR AL GRADE, UPDATING THE BATCH'.
FORMAT COLOR OFF.
BATCH_MODE = 'UPDATE'.
ELSE.
BATCH_MODE = 'CREATE'.
* WRITE : / SPECTRO_ITAB-CAST_NO, ' BATCH CREATED'.
ENDIF.
ENDIF.
ELSE.
FORMAT COLOR 6 ON.
WRITE : / 'Invalid SOURCE for file. Should be AL only'.
FORMAT COLOR 6 ON.
FLAG = 'ERR'.
PERFORM MOVE_FILE USING FLAG.
CLEAR : REC_ITAB, SP_ZSPECTRO_DATA,SPECTRO_ITAB,CHAR_ITAB..
REFRESH : REC_ITAB,SP_ZSPECTRO_DATA,SPECTRO_ITAB,CHAR_ITAB..
CLEAR FLAG.
CONTINUE.
ENDIF.
ELSE.
BATCH_MODE = 'CREATE'.
* ENDIF.
ENDIF.
* Inserting details for cast into ZSPECTRO_DATA SAP table. If inserted
* move file to DONE directory else move file to ERR directory
INSERT ZSPECTRO_DATA FROM SPECTRO_ITAB .
IF SY-SUBRC = 0. "Check for successful insertion
COMMIT WORK.
FORMAT COLOR 2 ON.
WRITE :/ 'RECORD INSERTED IN TABLE'.
FORMAT COLOR OFF.
FLAG = 'DONE'.
* PERFORM MOVE_FILE USING FLAG.
* Create or update the batch depending on 'BATCH_MODE'. Also get the
* current process order number
PERFORM CREATE_OR_UPDATE_BATCH.
ELSE.
FORMAT COLOR 6 ON.
WRITE : / 'Problem while insertion in ZSPECTRO_DATA'.
FORMAT COLOR OFF.
FLAG = 'ERR'.
ENDIF.
ENDIF.
ENDIF.
PERFORM MOVE_FILE USING FLAG.
CLEAR : REC_ITAB, SP_ZSPECTRO_DATA,SPECTRO_ITAB,CHAR_ITAB,
VAR_MAT_NO,VAR_PON,VAR_PON_TIME,VAR_PON_DATE,VAR_BATCH.
REFRESH : REC_ITAB,SP_ZSPECTRO_DATA,SPECTRO_ITAB,CHAR_ITAB.
CLEAR FLAG.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form UPLOAD_TO_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM UPLOAD_TO_TABLE.
CLEAR SPECTRO_ITAB. REFRESH SPECTRO_ITAB.
LOOP AT REC_ITAB.
SPLIT REC_ITAB-FILE_LINE AT ':' INTO REC_HDR REC_DTL.
SHIFT REC_DTL LEFT DELETING LEADING SPACE.
IF ( REC_HDR NE 'Program' ) AND
( REC_HDR NE 'Task' ) AND
( REC_HDR NE 'Quality' ) AND
( REC_HDR NE 'Type Standard' ) AND
( REC_HDR NE 'Run Number' ) AND
( REC_HDR NE 'Elements' ) AND
( REC_HDR NE 'Record' )
.
IF REC_HDR EQ 'Date'.
PERFORM GET_DATE_IN_ITAB.
SELECT * UP TO 1 ROWS FROM ZSPECTRO_FACTOR
ORDER BY ENTRY_DT DESCENDING ENTRY_TIME DESCENDING.
ENDSELECT.
IF SY-SUBRC <> 0 OR ZSPECTRO_FACTOR-C_FACTOR IS INITIAL
OR ZSPECTRO_FACTOR-SI_FACTOR IS INITIAL
OR ZSPECTRO_FACTOR-MN_FACTOR IS INITIAL
OR ZSPECTRO_FACTOR-S_FACTOR IS INITIAL
OR ZSPECTRO_FACTOR-P_FACTOR IS INITIAL.
WRITE : / 'Please maintain correction factor'.
WRITE : / 'Exiting .................'.
EXIT.
ENDIF.
CASE REC_HDR.
* % is to be multipied with Correction factor
WHEN 'Matrix'.
SPECTRO_ITAB-MATRIX = REC_DTL.
WHEN 'P'.
CHAR_ITAB-CHARACT = 'PHOSPHORUS'.
REC_DTL_NUM = ( REC_DTL * ZSPECTRO_FACTOR-P_FACTOR ).
SPECTRO_ITAB-P_PERCENT = REC_DTL_NUM.
WHEN 'S'.
CHAR_ITAB-CHARACT = 'SULPHUR'.
REC_DTL_NUM = ( REC_DTL * ZSPECTRO_FACTOR-S_FACTOR ).
SPECTRO_ITAB-S_PERCENT = REC_DTL_NUM.
WHEN 'C'.
CHAR_ITAB-CHARACT = 'CARBON'.
REC_DTL_NUM = ( REC_DTL * ZSPECTRO_FACTOR-C_FACTOR ).
SPECTRO_ITAB-C_PERCENT = REC_DTL_NUM.
WHEN 'Fe'.
CHAR_ITAB-CHARACT = 'IRON'.
* REC_DTL = ( REC_DTL * ZSPECTRO_FACTOR-FE_FACTOR ).
SPECTRO_ITAB-Fe_PERCENT = REC_DTL.
WHEN 'Si'.
CHAR_ITAB-CHARACT = 'SILICON'.
REC_DTL_NUM = ( REC_DTL * ZSPECTRO_FACTOR-SI_FACTOR ).
SPECTRO_ITAB-Si_PERCENT = REC_DTL_NUM.
WHEN 'Mn'.
CHAR_ITAB-CHARACT = 'MANGANESE'.
REC_DTL_NUM = ( REC_DTL * ZSPECTRO_FACTOR-MN_FACTOR ).
SPECTRO_ITAB-Mn_PERCENT = REC_DTL_NUM.
* WHEN 'Ti'.
* CHAR_ITAB-CHARACT = 'TITANIUM'.
* SPECTRO_ITAB-Ti_PERCENT = REC_DTL.
ENDCASE.
IF REC_HDR = 'P' OR REC_HDR = 'S' OR
REC_HDR = 'C' OR REC_HDR = 'Fe' OR
REC_HDR = 'Si' OR REC_HDR = 'Mn'.
CHAR_ITAB-VALUE = REC_DTL_NUM.
APPEND CHAR_ITAB.
ENDIF.
CLEAR : REC_HDR,REC_DTL,REC_DTL_NUM,CHAR_ITAB.
ENDIF.
ENDIF.
ENDLOOP.
SPECTRO_ITAB-FILE_NAME = FILE_NAMES_ITAB-NAME.
SPECTRO_ITAB-STATUS = ' '.
APPEND SPECTRO_ITAB.
ENDFORM. " UPLOAD_TO_TABLE
*&---------------------------------------------------------------------*
*& Form GET_CONVERTED_DATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATE_IN_ITAB.
SHIFT REC_DTL LEFT BY 6 PLACES.
DO 2 TIMES.
REPLACE ',' WITH SPACE INTO REC_DTL.
ENDDO.
CONDENSE REC_DTL NO-GAPS.
CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
EXPORTING
DATE_EXTERNAL = REC_DTL
IMPORTING
DATE_INTERNAL = SPECTRO_ITAB-CAST_DATE
EXCEPTIONS
DATE_EXTERNAL_IS_INVALID = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
FORMAT COLOR 6 ON.
WRITE : / 'Problem in date conversion'.
FORMAT COLOR OFF.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " GET_CONVERTED_DATE
*&---------------------------------------------------------------------*
*& Form GET_SAMPLE_IN_ITAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_SAMPLE_IN_ITAB.
SPLIT REC_DTL AT ',' INTO SPECTRO_ITAB-CAST_NO
CAST_TIME
SPECTRO_ITAB-SOURCE
SPECTRO_ITAB-OPERATOR
SAMPLE_REST.
REPLACE '.' WITH SPACE INTO CAST_TIME.
REPLACE ':' WITH SPACE INTO CAST_TIME.
CONDENSE CAST_TIME NO-GAPS.
CONCATENATE CAST_TIME '00' INTO CAST_TIME.
TIME_LENGTH = STRLEN( CAST_TIME ).
IF TIME_LENGTH = 5 .
CONCATENATE '0' CAST_TIME INTO CAST_TIME.
ENDIF.
CALL FUNCTION 'CONVERT_TIME_INPUT'
EXPORTING
INPUT = CAST_TIME
PLAUSIBILITY_CHECK = 'X'
IMPORTING
OUTPUT = SPECTRO_ITAB-CAST_TIME
EXCEPTIONS
PLAUSIBILITY_CHECK_FAILED = 1
WRONG_FORMAT_IN_INPUT = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
FORMAT COLOR 6 ON.
WRITE : / 'Problem in TIME conversion'.
WRITE : SY-MSGV1, SY-MSGV2, SY-MSGV3, SY-MSGV4.
FORMAT COLOR OFF.
SPECTRO_ITAB-CAST_TIME = '00:00:00'.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " GET_SAMPLE_IN_ITAB
*&---------------------------------------------------------------------*
*& Form MOVE_FILE_TO_DONE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MOVE_FILE USING FLAG.
IF FLAG = 'DONE'.
CONCATENATE FILE_DIR '/done/' SPECTRO_ITAB-CAST_NO '_'
SPECTRO_ITAB-SOURCE '_'
FILE_NAMES_ITAB-NAME INTO DEST_FILE.
CLEAR FLAG.
ELSE.
CONCATENATE FILE_DIR '/err/' SPECTRO_ITAB-CAST_NO '_'
SPECTRO_ITAB-SOURCE '_'
FILE_NAMES_ITAB-NAME INTO DEST_FILE.
CLEAR FLAG.
ENDIF.
CALL FUNCTION 'PFL_COPY_OS_FILE'
EXPORTING
SOURCE_FILE_NAME = FILE_PATH
TARGET_FILE_NAME = DEST_FILE
EXCEPTIONS
CANT_OPEN_SOURCEFILE = 1
CANT_OPEN_TARGETFILE = 2
ERROR_WRITING_TAGETFILE = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
WRITE : / 'Problem while copying file from ',FILE_PATH,
' to ', DEST_FILE.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'EPS_DELETE_FILE'
EXPORTING
FILE_NAME = FILE_NAMES_ITAB-NAME
DIR_NAME = FILE_DIR
* IMPORTING
* FILE_PATH =
EXCEPTIONS
INVALID_EPS_SUBDIR = 1
SAPGPARAM_FAILED = 2
BUILD_DIRECTORY_FAILED = 3
NO_AUTHORIZATION = 4
BUILD_PATH_FAILED = 5
DELETE_FAILED = 6
OTHERS = 7
.
IF SY-SUBRC <> 0.
WRITE : / 'Problem while deleting file ',FILE_PATH.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " MOVE_FILE
*&---------------------------------------------------------------------*
*& Form CHECK_FILE_FORMAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CHECK_FILE_FORMAT.
DESCRIBE TABLE REC_ITAB LINES N.
IF N <> 17.
WRITE : / 'INVALID FILE FORMAT. THE FILE SHOULD CONTAIN 17 LINES.' .
ENDIF.
LOOP AT REC_ITAB.
ENDLOOP.
ENDFORM. " CHECK_FILE_FORMAT
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_GRADE.
READ TABLE SPECTRO_ITAB INDEX 1.
SELECT ZGRADE INTO SPECTRO_ITAB-ZGRADE FROM ZGRADE_MASTER
WHERE ZCMIN <= SPECTRO_ITAB-C_PERCENT
AND ZCMAX >= SPECTRO_ITAB-C_PERCENT
AND ZSIMIN <= SPECTRO_ITAB-SI_PERCENT
AND ZSIMAX >= SPECTRO_ITAB-SI_PERCENT
AND ZMNMIN <= SPECTRO_ITAB-MN_PERCENT
AND ZMNMAX >= SPECTRO_ITAB-MN_PERCENT
AND ZSMIN <= SPECTRO_ITAB-S_PERCENT
AND ZSMAX >= SPECTRO_ITAB-S_PERCENT
AND ZPMIN <= SPECTRO_ITAB-P_PERCENT
AND ZPMAX >= SPECTRO_ITAB-P_PERCENT.
ENDSELECT.
IF SY-SUBRC NE 0.
SPECTRO_ITAB-ZGRADE = 'PI400'. "Other Grade 'OG'
ENDIF.
CHAR_ITAB-CHARACT = 'GRADE'.
CHAR_ITAB-VALUE = SPECTRO_ITAB-ZGRADE.
APPEND CHAR_ITAB.
* WRITE : / 'GRADE IS ' , SPECTRO_ITAB-ZGRADE.
ENDFORM. " GET_GRADE
*&---------------------------------------------------------------------*
*& Form CREATE_OR_UPDATE_BATCH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CREATE_OR_UPDATE_BATCH.
* Get Material number for current process order number
PERFORM GET_PON.
VAR_BATCH = SPECTRO_ITAB-CAST_NO.
CALL FUNCTION 'ZCREATE_BATCH_FOR_PROD_MATL'
EXPORTING
CLASS = 'CAST'
CLASSTYP = '022'
BATCH = VAR_BATCH "batch no to be created
MATERIAL = VAR_MAT_NO "material no for the batch
PLANT = '1000'
BATCH_MODE = BATCH_MODE "create or update
TABLES
CHAR_VALUE_ITAB = CHAR_ITAB. "% values and grade for batch
* If batch is not created, set status = 'E' for that record in
* SAP table ZSPECTRO_DATA and move file to done.
IF SY-SUBRC = 0.
* WRITE :/ 'Batch ',VAR_BATCH, ' Created successfully'.
COMMIT WORK.
ELSE.
FORMAT COLOR 6 ON.
WRITE :/ 'Problem in batch creation'.
FORMAT COLOR OFF.
UPDATE ZSPECTRO_DATA
SET STATUS = 'E'
WHERE CAST_NO = SPECTRO_ITAB-CAST_NO
AND SOURCE = SPECTRO_ITAB-SOURCE
AND CAST_DATE = SPECTRO_ITAB-CAST_DATE
AND CAST_TIME = SPECTRO_ITAB-CAST_TIME.
COMMIT WORK.
ENDIF.
FLAG = 'DONE'.
ENDFORM. " CREATE_OR_UPDATE_BATCH
*&---------------------------------------------------------------------*
*& Form GET_PON
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_PON.
* Select valid material number depending on cast date and time
CLEAR VAR_PON.
SELECT PON PO_DATE PO_TIME
INTO (VAR_PON,VAR_PON_DATE,VAR_PON_TIME)
FROM ZCUR_PON UP TO 1 ROWS
WHERE PO_DATE <= SPECTRO_ITAB-CAST_DATE
ORDER BY PO_DATE DESCENDING PO_TIME DESCENDING.
SELECT SINGLE PLNBEZ GSTRS
INTO (VAR_MAT_NO,VAR_PON_DATE)
FROM AFKO
WHERE AUFNR = VAR_PON.
* SELECT MATL_NO PON PO_TIME PO_DATE
* INTO (VAR_MAT_NO,VAR_PON,VAR_PON_TIME,VAR_PON_DATE)
* FROM ZCUR_PON UP TO 1 ROWS
* WHERE PO_DATE <= SPECTRO_ITAB-CAST_DATE
* ORDER BY PO_DATE DESCENDING PO_TIME DESCENDING.
* IF ( ( VAR_PON_TIME <= SPECTRO_ITAB-CAST_TIME
* AND VAR_PON_DATE = SPECTRO_ITAB-CAST_DATE )
* OR VAR_PON_DATE < SPECTRO_ITAB-CAST_DATE ).
* CLEAR OLD_PON.
IF ( VAR_PON_DATE > SPECTRO_ITAB-CAST_DATE ).
WRITE : 'PON not maintained properly'.
EXIT.
ENDIF.
ENDSELECT.
ENDFORM. " GET_PON
Code:
*----------------------------------------------------------------------*
* Written By: Ram Manohar Tiwari
*----------------------------------------------------------------------*
* Presented By: http://www.rmtiwari.com
*----------------------------------------------------------------------*
FUNCTION Z_CREATE_BATCH_WITH_CHARCT .
*"----------------------------------------------------------------------*"
*"Local interface:
*" IMPORTING
*" REFERENCE(CLASS) TYPE KLAH-CLASS
*" REFERENCE(CLASSTYP) TYPE KSSK-KLART
*" REFERENCE(BATCH) TYPE MCHA-CHARG
*" REFERENCE(MATERIAL) TYPE MCHA-MATNR
*" REFERENCE(PLANT) TYPE MCHA-WERKS
*" REFERENCE(BATCH_MODE) TYPE MCHA-CHARG
*" TABLES
" CHAR_VALUE_ITAB STRUCTURE CHA_VALDSC
*"----------------------------------------------------------------------
*parameter : material like mcha-matnr obligatory,
* batch like mcha-charg obligatory,
* plant like mcha-werks obligatory,
* class like klah-class obligatory,
* classtyp like kssk-klart obligatory.
*
*********************************************************************
*-------------------------------------------------------------------*
* Initialize logfile
*-------------------------------------------------------------------*
perform api_init_logfile.
*-------------------------------------------------------------------*
* Allocate object: material
*-------------------------------------------------------------------*
IF BATCH_MODE = 'CREATE' .
perform create_batch using material "material
plant "plant
batch. "batch
ENDIF.
*-------------------------------------------------------------------*
* Allocate object: material
*-------------------------------------------------------------------*
perform cf_alloc_obj using material "
batch " batch
class "
classtyp. " .
*-------------------------------------------------------------------*
* Classes: read assigned characteristics
*-------------------------------------------------------------------*
perform cl_read_ct tables cl_char_list
cl_char_val
using class
classtyp. "
loop at cl_char_list.
read table char_value_itab
with key charact = cl_char_list-charact.
if sy-subrc = 0.
cl_char_val-charact = char_value_itab-charact.
cl_char_val-value = char_value_itab-value. "Populate characterstic values from
"internal table
append cl_char_val.
endif.
endloop.
*-------------------------------------------------------------------*
* Object validation
*-------------------------------------------------------------------*
* Add validation
perform cf_valid tables cf_value
using cl_char_val-charact
cl_char_val-value.
endloop.
* Execute ...
perform cf_exec_valid tables cf_value
using material "''
batch
class "''
classtyp. "''.
ENDFUNCTION.
*********************************************************************
* F O R M - Routines
*********************************************************************
form api_init_logfile.
call function 'CALO_INIT_API'
exceptions
log_object_not_found = 1
log_sub_object_not_found = 2
others = 3.
if sy-subrc <> 0.
"error handling ...
endif.
endform.
*-------------------------------------------------------------------*
* Allocate object: material
*-------------------------------------------------------------------*
form cf_alloc_obj using material type c "cf_object type c
batch type c
cf_class type c
cf_classtype type c.
data:
cf_obj_id like api_ob_key occurs 0 with header line.
data: class like klah-class,
classtype like kssk-klart.
call function 'CACL_OBJECT_ALLOCATION_MAINT'
exporting
object_type = 'MCHA'
class = class
class_type = classtype
tables
object_identification = cf_obj_id
exceptions
error = 1
warning = 2
others = 3.
if sy-subrc <> 0.
"error handling...
FORMAT COLOR 6 ON.
write : 'Problem while maintaining classification'.
write : 'for class ',class,' type ',classtype.
write :/ ' Object_id ', cf_obj_id .
FORMAT COLOR OFF.
else.
call function 'CACL_CLASSIFICATION_SAVE'
exporting
I_commit = 'X'
I_WAIT = 'X'
exceptions
others = 1.
* commit work and wait.
endif.
endform.
*-------------------------------------------------------------------*
* Object validation
*-------------------------------------------------------------------*
form cf_valid tables cf_value structure api_ausp
using cf_char type c
cf_char_value type c.
*-------------------------------------------------------------------*
* Object validation: execute
*-------------------------------------------------------------------*
form cf_exec_valid tables cf_value structure api_ausp
using material type c "cf_object type c
batch type c
cf_class type c
cf_classtype type c.
data:
cf_obj_id like api_ob_key occurs 0 with header line.
data: class like klah-class,
classtype like kssk-klart.
commit work and wait.
wait up to 2 seconds.
call function 'CACL_OBJECT_VALIDATION_MAINT'
exporting
object_type = 'MCHA'
class = class
class_type = classtype
tables
object_identification = cf_obj_id
validation_maint = cf_value
exceptions
error = 1
others = 2.
if sy-subrc <> 0.
"error handling...
FORMAT COLOR 6 ON.
write : 'Problem while maintaining validation'.
write : / cf_obj_id.
write : / cf_value.
FORMAT COLOR OFF.
else.
call function 'CACL_CLASSIFICATION_SAVE'
exporting
I_commit = 'X'
I_WAIT = 'X'
exceptions
others = 1.
FORMAT COLOR 2 ON.
write : /'Characterstic values populated for batch ',batch.
FORMAT COLOR OFF.
endif.
endform.
*-------------------------------------------------------------------*
* Allocate object: Batch
*-------------------------------------------------------------------*
form create_batch using material type c "cf_object type c
plant type c
batch type c.
data : itab_mcha like mcha occurs 0 with header line.
if sy-subrc <> 0.
"error handling...
FORMAT COLOR 6 ON.
WRITE: / 'Problem in VB_CREATE_BATCH'.
FORMAT COLOR OFF.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
else.
FORMAT COLOR 2 ON.
write : 'Batch ' ,batch ,'Created for material', material.
FORMAT COLOR OFF.
commit work and wait.
wait up to 2 seconds.
endif.
endform.
*-------------------------------------------------------------------*
* Classes: read assigned characteristics
*-------------------------------------------------------------------*
form cl_read_ct tables cl_char_list structure cla_ch_at
cl_char_val structure cha_valdsc
using cl_name like clclasses-class
cl_type like clclasses-class_type.
data: basic_data like clbasd,
catchword like cla_descr-catchword,
class_not_valid like rmclm-basisd,
document_ident like doc_ident.
if sy-subrc <> 0.
FORMAT COLOR 6 ON.
write : / 'Problem whiling reading characterstics for class '
,cl_name ,' of type ',cl_type.
FORMAT COLOR OFF.
"error handling...
endif.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You cannot download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.