Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

transferring file from one directory to another

Former Member
0 Kudos

Hello Experts,

I have got a requirement, I am using the bdc to upload the excel file in to the sap , first the file is present in the unprocessed folder in the server, after completion of the process , the file in which present in the unprocessed folder should be moved into the processed folder. please give me the solution.

thanks in advance

Nagaraj S.

1 REPLY 1

Former Member
0 Kudos

HI,

Files are located on application server or presentation server?

if it is on the presentation server then you have to call gui_upload to upload the file and after the file is processed then download to processed directory using gui_download... its straight forward.

if files are on the application server and ur sap OS is Unix then you can use unix commands to do this or use open dataset and do this.

Here i am attaching the program which has both the functionallities upload from presentation and application server and move the processed files to other directory and error files to error directory.

PROGRAM : Z_CAMERA_SCANNING_UPLOADFILE

*

  • TITLE : Uploading Japan File to Ztables

*

  • AUTHOR : G.Venkat Papi Reddy.

*

REPORT Z_CAMERA_SCANNING_UPLOADFILE MESSAGE-ID ZXX NO STANDARD PAGE

HEADING LINE-SIZE 135 LINE-COUNT 65(2).

************************************************************************

  • Declaration of Tables

*

************************************************************************

TABLES: ZSCANHEAD, "Camera Scanning Header Table

ZSCANITEM, "Camera Scanning Item Table

USR02,

MARA.

************************************************************************

  • Declaration of Internal Tables

*

************************************************************************

DATA: BEGIN OF IT_SCANDETAILS OCCURS 0, "internal table to maintain

"upload file details.

V_ROW(4) TYPE N,

V_COLUMN(4) TYPE N,

V_VALUE(50) TYPE C,

END OF IT_SCANDETAILS.

DATA: BEGIN OF IT_DATA OCCURS 0,

SSERIALNO(10) TYPE C,

ESERIALNO(10) TYPE C,

MODELNO(15) TYPE C,

ASERIALNO(10) TYPE C,

END OF IT_DATA.

DATA:BEGIN OF IT_HISTORY OCCURS 0,

SSERIALNO(10) TYPE C,

ESERIALNO(10) TYPE C,

MODELNO(15) TYPE C,

ASERIALNO(10) TYPE C,

END OF IT_HISTORY.

DATA: BEGIN OF IT_SUCCESS OCCURS 0,

SSERIALNO(10) TYPE C,

ESERIALNO(10) TYPE C,

MODELNO(15) TYPE C,

ASERIALNO(10) TYPE C,

END OF IT_SUCCESS.

DATA: BEGIN OF IT_DATA2 OCCURS 0,

SSERIALNO(10) TYPE C,

ESERIALNO(10) TYPE C,

MODELNO(15) TYPE C,

ASERIALNO(10) TYPE C,

ASS(15) TYPE C,

ASS1(15) TYPE C,

ASS2(15) TYPE C,

ASS3(60) TYPE C,

END OF IT_DATA2.

DATA: BEGIN OF IT_DATA1 OCCURS 0,

SSERIALNO(10) TYPE C,

ESERIALNO(10) TYPE C,

MODELNO(15) TYPE C,

ASERIALNO(10) TYPE C,

ASS(15) TYPE C,

ASS1(15) TYPE C,

ASS2(15) TYPE C,

ASS3(15) TYPE C,

END OF IT_DATA1.

DATA: BEGIN OF IT_ERROR2 OCCURS 0,

SSERIALNO(10) TYPE C,

ESERIALNO(10) TYPE C,

END OF IT_ERROR2.

DATA:BEGIN OF IT_DATA3 OCCURS 0,

LINE(150) TYPE C,

END OF IT_DATA3.

DATA: BEGIN OF IT_ERROR OCCURS 0,

SSERIALNO(10) TYPE C,

ESERIALNO(10) TYPE C,

MODELNO(15) TYPE C,

ASERIALNO(10) TYPE C,

MESSAGE(100) TYPE C,

END OF IT_ERROR,

IT_USERS TYPE SOMLRECI1 OCCURS 0 WITH HEADER LINE,

IT_INFO TYPE SOLISTI1 OCCURS 0 WITH HEADER LINE.

DATA : BEGIN OF IT_REPORT OCCURS 0,

STARTNO(10),

ENDNO(10),

STATUS(74),

FILENAME(70),

END OF IT_REPORT.

DATA : BEGIN OF IT_FILELIST OCCURS 0,

FILE_NAME(100),

END OF IT_FILELIST.

DATA: BEGIN OF IT_USERS_SELECTED OCCURS 0,

USER TYPE USR02-BNAME,

END OF IT_USERS_SELECTED.

DATA : P_SOURCE_FILENAME(50) TYPE C.

DATA : BEGIN OF IT_FILES OCCURS 0,

TYPE,

FILENAME(98),

END OF IT_FILES.

DATA : V_TOTALFILES TYPE I,

V_ERRORFILES TYPE I,

V_SUCCESSFILES TYPE I.

*-- ALV Declarations

TYPE-POOLS SLIS.

DATA: IT_EVENTS TYPE SLIS_T_EVENT,

GS_EVENT TYPE SLIS_ALV_EVENT,

WA_FLDCAT TYPE SLIS_FIELDCAT_ALV.

DATA: S_LAYOUT TYPE SLIS_LAYOUT_ALV,

GT_PRINT TYPE SLIS_PRINT_ALV.

DATA: IT_FLDCAT TYPE SLIS_T_FIELDCAT_ALV.

DATA: IT_SORT TYPE SLIS_T_SORTINFO_ALV.

DATA: V_REPID LIKE SY-REPID,

CNT TYPE I.

************************************************************************

  • Declaration of Variables

*

************************************************************************

DATA: LV_COUNT TYPE N,

V_FLAG1 TYPE C VALUE ' ',

V_PIECES1 TYPE I.

************************************************************************

  • Declaration of Constants

*

************************************************************************

CONSTANTS: C_MAIL_B TYPE C VALUE 'U',

C_X(1) TYPE C VALUE 'X'.

************************************************************************

  • Selection Screen Formatting

*

************************************************************************

*PARAMETER: P_FILE LIKE RLGRAP-FILENAME. "japanfile variable.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-002.

PARAMETERS: V_NUM(3) TYPE C OBLIGATORY DEFAULT '1',

V_PIECES(3) TYPE C DEFAULT '50'.

PARAMETERS: RB_PRES RADIOBUTTON GROUP FILE DEFAULT 'X', "PS

P_FILE LIKE RLGRAP-FILENAME ,

  • PH_FILE LIKE RLGRAP-FILENAME,

E_FILE LIKE RLGRAP-FILENAME,

RB_UNIX RADIOBUTTON GROUP FILE , "Unix

P_AFILE(100) " LIKE FILENAME-FILEINTERN

LOWER CASE DEFAULT

'/sap/he2/batch/data/inb/sec-cam/*',

P_AHFILE(100) " LIKE FILENAME-FILEINTERN

LOWER CASE DEFAULT

'/sap/he2/batch/data/inb/sec-cam/history',

P_AEFILE(100) " LIKE FILENAME-FILEINTERN

LOWER CASE DEFAULT

'/sap/he2/batch/data/inb/sec-cam/error'.

SELECTION-SCREEN END OF BLOCK B1.

SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS:

S_USNAME FOR IT_USERS-RECEIVER NO INTERVALS.

SELECTION-SCREEN END OF BLOCK B2.

SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-003.

PARAMETERS:

P_TRUN AS CHECKBOX DEFAULT 'X'.

SELECTION-SCREEN END OF BLOCK B3.

INITIALIZATION.

P_AFILE+5(3) = SY-SYSID.

P_AHFILE+5(3) = SY-SYSID.

P_AEFILE+5(3) = SY-SYSID.

************************************************************************

  • Value Request Functionality for File name

*

************************************************************************

*at selection-screen on field e_file.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

  • subroutine to select file.

PERFORM FILE_OPEN USING P_FILE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR E_FILE.

PERFORM FILE_OPEN USING E_FILE.

AT SELECTION-SCREEN .

IF RB_PRES = 'X'.

IF P_FILE IS INITIAL.

MESSAGE E000 WITH 'Enter the Input File Name'

'on Presentation Server'.

ENDIF.

IF E_FILE IS INITIAL.

MESSAGE E000 WITH 'Enter the Error File Name'

'on Presentation Server'.

ENDIF.

ELSE.

IF P_AFILE IS INITIAL.

MESSAGE E000 WITH 'Enter the Input Directory or File Name'

'on Applicaiton Server'.

ENDIF.

ENDIF.

IF SY-UCOMM NE 'ONLI' AND RB_PRES = 'X'.

MESSAGE E001 WITH 'BackGround processing not possible'

'with PC'.

ENDIF.

*--Ensure the atleast one Email id is mentioned

*--if it is not a test run

IF P_TRUN IS INITIAL AND S_USNAME[] IS INITIAL.

MESSAGE E000 WITH 'Enter at least one Email id'

'under Mail Receivers'.

ENDIF.

************************************************************************

  • Start of Selection

*

************************************************************************

START-OF-SELECTION.

IF SY-BATCH = 'X' AND RB_PRES = 'X'.

MESSAGE E001 WITH 'BackGround processing not possible'

'with PC'.

ENDIF.

IF RB_PRES = 'X'.

  • Subroutine to upload excel to internal table.

PERFORM UPLOAD_FILE USING P_FILE.

PERFORM PROCESS_FILES USING E_FILE P_FILE.

ELSE.

*-- Subroutine to Upload data from a Unix File or Files

PERFORM UNIX_UPLOAD.

ENDIF.

IF P_TRUN IS INITIAL.

*--Subroutine to Get the List of Users

PERFORM POPULATE_USERS.

*--Subroutine to Send Emails

PERFORM SEND_ERROR_REPORT_MAIL TABLES IT_USERS

IT_INFO.

ENDIF.

END-OF-SELECTION.

*--Subroutine to Display the Report

IF NOT IT_REPORT[] IS INITIAL.

PERFORM DISPLAY_REPORT.

ENDIF.

&----


*& Form FILE_OPEN

&----


FORM FILE_OPEN USING L_FILE.

DATA: L_RC TYPE I,

L_FTABLE TYPE FILETABLE.

CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG

CHANGING

FILE_TABLE = L_FTABLE

RC = L_RC

  • USER_ACTION =

EXCEPTIONS

FILE_OPEN_DIALOG_FAILED = 1

CNTL_ERROR = 2

ERROR_NO_GUI = 3

OTHERS = 4

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

READ TABLE L_FTABLE INTO L_FILE INDEX 1.

ENDFORM. " FILE_OPEN

&----


*& Form UPLOAD_FILE

&----


FORM UPLOAD_FILE USING P_FILE.

DATA: V_RC TYPE I,

PV_FILE TYPE STRING.

.

PV_FILE = P_FILE.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = PV_FILE

FILETYPE = 'ASC'

TABLES

DATA_TAB = IT_DATA2

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 NE 0.

MESSAGE I000 WITH 'Specified File Does not Exist'

'Please check your entry'.

STOP.

ENDIF.

ENDFORM. " UPLOAD_FILE

&----


*& Form UPDATE_ZTABLE

&----


FORM UPDATE_ZTABLE.

DELETE IT_DATA2 WHERE ESERIALNO = ' '.

LOOP AT IT_DATA2.

CNT = CNT + 1.

MOVE IT_DATA2 TO IT_DATA3.

SPLIT IT_DATA3 AT ',' INTO IT_DATA1-SSERIALNO IT_DATA1-ESERIALNO

IT_DATA1-MODELNO IT_DATA1-ASERIALNO IT_DATA1-ASS IT_DATA1-ASS1

IT_DATA1-ASS2 IT_DATA1-ASS3.

APPEND IT_DATA1.

CLEAR IT_DATA1.

CLEAR IT_DATA2.

ENDLOOP.

DATA:V_INDEX TYPE I .

V_INDEX = V_NUM + 1.

LOOP AT IT_DATA1 FROM V_INDEX .

IT_DATA-SSERIALNO = IT_DATA1-SSERIALNO.

IT_DATA-ESERIALNO = IT_DATA1-ESERIALNO.

IT_DATA-MODELNO = IT_DATA1-MODELNO.

IT_DATA-ASERIALNO = IT_DATA1-ASERIALNO..

APPEND IT_DATA.

CLEAR IT_DATA.

ENDLOOP.

DELETE IT_DATA WHERE SSERIALNO = ''.

IF IT_DATA2[] IS INITIAL.

  • MESSAGE I001 WITH 'Specified File is empty'

  • 'Please check your file'.

IT_ERROR-MESSAGE = 'Specified File is Empty'.

APPEND IT_ERROR.

CLEAR IT_ERROR.

ENDIF.

ENDFORM. " UPDATE_ZTABLE

&----


*& Form UNIX_UPLOAD

&----


FORM UNIX_UPLOAD.

DATA:

*-- Record Counter

L_COUNT(10) TYPE N,

MSG(100) TYPE C.

DATA : V_LENGTH TYPE I.

DATA: DG_UNIX_LOC(100) TYPE C.

DATA: BEGIN OF DT_TABL OCCURS 0,

LINE(200),

END OF DT_TABL.

DATA: BEGIN OF DT_TABL_HIST OCCURS 0,

LINE(200),

END OF DT_TABL_HIST.

CLEAR: DG_UNIX_LOC.

DATA : LV_FILENAME(100).

IF P_AFILE CS '.csv'.

LV_FILENAME = P_AFILE.

TRANSLATE LV_FILENAME TO LOWER CASE.

IF P_AFILE CS SY-SYSID.

TRANSLATE LV_FILENAME+SY-FDPOS(3) TO UPPER CASE.

ENDIF.

*-- Open Dataset

*Start of changes by Krishna Praneeth on 11/22/2006

  • OPEN DATASET LV_FILENAME FOR INPUT IN TEXT MODE.

OPEN DATASET LV_FILENAME FOR INPUT IN TEXT MODE ENCODING DEFAULT.

*End of changes by Krishna Praneeth on 11/22/2006

IF SY-SUBRC EQ 0.

IT_FILELIST-FILE_NAME = P_AFILE.

APPEND IT_FILELIST.

ENDIF.

ELSEIF P_AFILE CS '*'.

DG_UNIX_LOC(9) = 'ls *.csv'.

DG_UNIX_LOC+9(45) = P_AFILE.

DATA : V_STRING(100) TYPE C.

REFRESH DT_TABL.

CALL 'SYSTEM' ID 'COMMAND' FIELD DG_UNIX_LOC

ID 'TAB' FIELD DT_TABL-*SYS*.

LOOP AT DT_TABL.

IF DT_TABL-LINE CS 'batch/data/inb/sec-cam/sec-cam'.

IT_FILELIST-FILE_NAME = DT_TABL-LINE.

APPEND IT_FILELIST.

ENDIF.

ENDLOOP.

ELSE.

MESSAGE I000 WITH 'Either the File Name or File Path'

'is Wrong Please check Entry'.

STOP.

ENDIF.

***

DESCRIBE TABLE IT_FILELIST LINES V_TOTALFILES.

IF NOT IT_FILELIST IS INITIAL.

LOOP AT IT_FILELIST.

LV_FILENAME = IT_FILELIST-FILE_NAME.

TRANSLATE LV_FILENAME TO LOWER CASE.

IF P_AFILE CS SY-SYSID.

TRANSLATE LV_FILENAME+SY-FDPOS(3) TO UPPER CASE.

ENDIF.

***

*-- Open Dataset

*Start of changes by Krishna Praneeth on 11/22/2006

  • OPEN DATASET LV_FILENAME FOR INPUT IN TEXT MODE MESSAGE MSG.

OPEN DATASET LV_FILENAME FOR INPUT IN TEXT MODE MESSAGE MSG

ENCODING DEFAULT.

*End of changes by Krishna Praneeth on 11/22/2006

IF SY-SUBRC EQ 0.

REFRESH: IT_DATA2,

IT_ERROR,

IT_HISTORY,

IT_DATA,

IT_DATA1.

CLEAR:IT_DATA,

IT_ERROR,

IT_HISTORY.

DO.

*-- Read Dataset and Populate Input file data to Internal Table

READ DATASET LV_FILENAME INTO IT_DATA2.

IF SY-SUBRC EQ 0.

*-- Append and Initialize table

APPEND IT_DATA2.

CLEAR IT_DATA2.

ELSE.

*-- Exit Out of DO loop if READ is unsuccess

EXIT.

ENDIF.

ENDDO.

*-- Close Dataset

CLOSE DATASET LV_FILENAME.

  • Delete File in Actual Run ONLY

IF P_TRUN IS INITIAL.

  • Delete the File

DELETE DATASET LV_FILENAME.

ENDIF.

  • IF IT_INPUT[] IS INITIAL.

IF IT_DATA2[] IS INITIAL.

DELETE IT_DATA2 WHERE SSERIALNO = ''.

  • STOP.

ELSE.

*-- Populate History Table

  • IT_HISTORY[] = IT_INPUT[].

PERFORM PROCESS_FILES USING LV_FILENAME P_AFILE.

ENDIF.

ELSE.

*-- Go to the End of Selection

STOP.

ENDIF.

ENDLOOP.

ELSE.

MESSAGE I000 WITH 'Either the Specified file does not exist'

'or the Directory is Empty'.

PERFORM POPULATE_USERS.

IT_INFO-LINE+22(120) = 'Input Folder is Empty To Process'.

APPEND IT_INFO.

PERFORM SEND_ERROR_REPORT_MAIL TABLES IT_USERS

IT_INFO.

STOP.

ENDIF.

ENDFORM.

*

*ENDFORM. " UNIX_UPLOAD

&----


*& Form SEND_ERROR_REPORT_MAIL

&----


FORM SEND_ERROR_REPORT_MAIL TABLES P_IT_USERS STRUCTURE SOMLRECI1

"Insert correct name for <...>

P_IT_INFO STRUCTURE SOLISTI1.

DATA: V_INFO LIKE SODOCCHGI1-OBJ_DESCR

VALUE 'Camera Scan File Upload Status'.

IF NOT IT_INFO[] IS INITIAL.

CALL FUNCTION 'Z_SENDMAIL_ERROR_STATUS'

EXPORTING

SUBJECT = V_INFO

TABLES

USER_ID = P_IT_USERS

INFO = P_IT_INFO

EXCEPTIONS

ERROR_MAIL = 1

OTHERS = 2.

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.

ENDFORM. " SEND_ERROR_REPORT_MAIL

&----


*& Form populate_users

&----


FORM POPULATE_USERS.

LOOP AT S_USNAME.

IT_USERS-RECEIVER = S_USNAME-LOW.

IT_USERS-REC_TYPE = C_MAIL_B.

IT_USERS-EXPRESS = C_X.

APPEND IT_USERS.

CLEAR IT_USERS.

ENDLOOP.

ENDFORM. " populate_users

&----


*& Form download_errorfile

&----


FORM DOWNLOAD_ERRORFILE TABLES IT_ERROR1

USING E_FILE.

DATA: LV_FILE TYPE STRING.

LV_FILE = E_FILE.

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

FILENAME = LV_FILE

FILETYPE = 'ASC'

TABLES

DATA_TAB = IT_ERROR1

EXCEPTIONS

FILE_WRITE_ERROR = 1

NO_BATCH = 2

GUI_REFUSE_FILETRANSFER = 3

INVALID_TYPE = 4

NO_AUTHORITY = 5

UNKNOWN_ERROR = 6

HEADER_NOT_ALLOWED = 7

SEPARATOR_NOT_ALLOWED = 8

FILESIZE_NOT_ALLOWED = 9

HEADER_TOO_LONG = 10

DP_ERROR_CREATE = 11

DP_ERROR_SEND = 12

DP_ERROR_WRITE = 13

UNKNOWN_DP_ERROR = 14

ACCESS_DENIED = 15

DP_OUT_OF_MEMORY = 16

DISK_FULL = 17

DP_TIMEOUT = 18

FILE_NOT_FOUND = 19

DATAPROVIDER_EXCEPTION = 20

CONTROL_FLUSH_ERROR = 21

OTHERS = 22.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDFORM. " download_errorfile

&----


*& Form error_file

&----


FORM ERROR_FILE.

  • MOVE IT_DATA TO IT_ERROR.

IT_ERROR-SSERIALNO = IT_DATA-SSERIALNO.

IT_ERROR-ESERIALNO = IT_DATA-ESERIALNO.

IT_ERROR-MODELNO = IT_DATA-MODELNO.

IT_ERROR-ASERIALNO = IT_DATA-ASERIALNO.

APPEND IT_ERROR.

CLEAR IT_ERROR.

*

ENDFORM. " error_file

&----


*& Form success_update

&----


FORM SUCCESS_UPDATE.

DATA: V_COUNT(3) TYPE N VALUE '0',

LV_COUNT TYPE N VALUE '0',

V_HCOUNT(5) TYPE N ,

V_LCOUNT(10) TYPE N,

V_FLAG TYPE C VALUE ' ',

V_FLAG1 TYPE C VALUE ' ',

BEGIN OF IT_COUNT OCCURS 0,

V_COUNT(5) TYPE N,

END OF IT_COUNT,

BEGIN OF IT_ZSCANHEAD OCCURS 0,

SSERIALNO TYPE ZSCANHEAD-STARTSERIALNO,

ESERIALNO TYPE ZSCANHEAD-ENDSERIALNO,

MATERIALNO TYPE ZSCANHEAD-MATERIALNO,

END OF IT_ZSCANHEAD.

SELECT COUNT( * )

FROM ZSCANHEAD

INTO V_COUNT.

SELECT STARTSERIALNO

ENDSERIALNO

MATERIALNO

FROM ZSCANHEAD

INTO TABLE IT_ZSCANHEAD.

READ TABLE IT_SUCCESS INDEX 1.

V_LCOUNT = IT_SUCCESS-SSERIALNO.

V_HCOUNT = V_COUNT + 1.

LOOP AT IT_SUCCESS.

READ TABLE IT_ZSCANHEAD WITH KEY SSERIALNO = IT_SUCCESS-SSERIALNO

ESERIALNO = IT_SUCCESS-ESERIALNO

MATERIALNO = IT_SUCCESS-MODELNO.

IF SY-SUBRC NE 0.

IF V_LCOUNT NE IT_SUCCESS-SSERIALNO.

V_HCOUNT = V_HCOUNT + 1.

ENDIF.

SELECT SINGLE * FROM

MARA

INTO MARA

WHERE MATNR = IT_SUCCESS-MODELNO.

IF SY-SUBRC = 0.

ZSCANHEAD-STARTSERIALNO = IT_SUCCESS-SSERIALNO.

ZSCANHEAD-ENDSERIALNO = IT_SUCCESS-ESERIALNO.

ZSCANHEAD-UPLOADTIME = SY-UZEIT.

ZSCANHEAD-UPLOADDATE = SY-DATUM.

ZSCANHEAD-LASTUPDATEDATE = SY-DATUM.

ZSCANHEAD-STAMPTIME = SY-UZEIT.

ZSCANHEAD-USERID = SY-UNAME.

IF RB_PRES = 'X'.

ZSCANHEAD-DATASOURCE = P_FILE.

ELSE.

ZSCANHEAD-DATASOURCE = P_SOURCE_FILENAME.

ENDIF.

ZSCANHEAD-HEADERRECORDCOUN = V_HCOUNT.

ZSCANITEM-MODELNAME = IT_SUCCESS-MODELNO.

ZSCANHEAD-MATERIALNO = IT_SUCCESS-MODELNO.

ZSCANITEM-ACTUALSERIALNO = IT_SUCCESS-ASERIALNO.

ZSCANITEM-HEADERRECORDCOUN = V_HCOUNT.

V_LCOUNT = IT_SUCCESS-SSERIALNO.

IF P_TRUN IS INITIAL.

MODIFY ZSCANHEAD.

MODIFY ZSCANITEM.

ENDIF.

MOVE IT_SUCCESS TO IT_HISTORY.

APPEND IT_HISTORY..

CLEAR IT_HISTORY.

ELSE.

V_FLAG = 'X'.

EXIT.

ENDIF.

ELSE.

V_FLAG1 = 'X'.

EXIT.

ENDIF.

ENDLOOP.

IF V_FLAG = 'X'.

DELETE ADJACENT DUPLICATES FROM IT_SUCCESS COMPARING SSERIALNO.

MOVE-CORRESPONDING IT_SUCCESS TO IT_ERROR.

CONCATENATE IT_ERROR-MODELNO

' Material against this range is not maintained' INTO

IT_ERROR-MESSAGE.

APPEND IT_ERROR.

CLEAR IT_ERROR.

ELSEIF V_FLAG1 = 'X'..

DELETE ADJACENT DUPLICATES FROM IT_SUCCESS COMPARING SSERIALNO.

MOVE-CORRESPONDING IT_SUCCESS TO IT_ERROR.

IT_ERROR-MESSAGE = 'Serial number range already uploaded'.

APPEND IT_ERROR.

CLEAR IT_ERROR.

ENDIF.

CLEAR V_FLAG.

CLEAR V_FLAG1.

REFRESH IT_SUCCESS.

ENDFORM. " success_update

&----


*& Form check_file

&----


FORM CHECK_FILE.

DATA: C_TOT TYPE I VALUE '1',

V_DIFF TYPE I,

V_TABIX LIKE SY-TABIX.

DATA: V_COUNT(3) TYPE N VALUE '0',

V_HCOUNT(3) TYPE N ,

V_LCOUNT(10) TYPE N,

V_FLAG2 TYPE C VALUE 'X'.

DATA: V_INDEX TYPE I VALUE '0',

V_SSERIALNO LIKE IT_DATA-SSERIALNO,

V_ESERIALNO LIKE IT_DATA-ESERIALNO,

V_MODELNO LIKE IT_DATA-MODELNO.

V_PIECES1 = V_PIECES.

LOOP AT IT_DATA.

V_SSERIALNO = IT_DATA-SSERIALNO.

V_ESERIALNO = IT_DATA-ESERIALNO.

V_MODELNO = IT_DATA-MODELNO.

*

V_INDEX = V_INDEX + 1.

AT NEW MODELNO.

ENDAT.

LV_COUNT = LV_COUNT + 1.

MOVE IT_DATA TO IT_SUCCESS.

APPEND IT_SUCCESS..

CLEAR IT_SUCCESS.

AT END OF MODELNO.

READ TABLE IT_DATA INDEX SY-TABIX.

IF SY-SUBRC = 0.

V_TABIX = SY-TABIX.

IF V_TABIX NE V_PIECES1.

READ TABLE IT_DATA WITH KEY SSERIALNO = V_SSERIALNO

ESERIALNO = V_ESERIALNO

MODELNO = V_MODELNO.

PERFORM ERROR_FILE.

REFRESH IT_SUCCESS.

ELSE.

IF IT_DATA-SSERIALNO > IT_DATA-ESERIALNO OR

IT_DATA-SSERIALNO = ' ' OR

IT_DATA-ESERIALNO = ' ' OR

IT_DATA-MODELNO = ' ' OR

IT_DATA-ASERIALNO = ' '.

PERFORM ERROR_FILE.

EXIT.

ENDIF.

PERFORM SUCCESS_UPDATE.

ENDIF.

ENDIF.

ENDAT.

  • ENDIF.

ENDLOOP.

ENDFORM. " check_file

&----


*& Form PREPARE_FILE_NAME

*&----


FORM PREPARE_FILE_NAME CHANGING P_FILE

P_SOURCE.

DATA : L_FILENAME_EXT LIKE DBMSGORA-FILENAME,

L_FILENAME LIKE SDBAH-ACTID,

L_EXTENSION LIKE SDBAD-FUNCT.

DATA : V_FILENAME_PATH LIKE RLGRAP-FILENAME,

V_FILENAME LIKE RLGRAP-FILENAME,

V_FILEPATH LIKE RLGRAP-FILENAME.

V_FILENAME_PATH = P_FILE.

CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH'

EXPORTING

FULL_NAME = V_FILENAME_PATH

IMPORTING

STRIPPED_NAME = V_FILENAME

FILE_PATH = V_FILEPATH

EXCEPTIONS

X_ERROR = 1

OTHERS = 2.

L_FILENAME_EXT = V_FILENAME.

P_SOURCE = V_FILENAME.

  • Add Date to Filename

DATA : LV_FNAME(40).

IF NOT IT_ERROR[] IS INITIAL.

LV_FNAME = V_FILENAME+7(20).

CONCATENATE 'error' LV_FNAME INTO V_FILENAME.

CONCATENATE V_FILEPATH

'error/'

V_FILENAME

INTO P_FILE.

ELSE.

LV_FNAME = V_FILENAME+7(20).

CONCATENATE 'histroy' LV_FNAME INTO V_FILENAME.

CONCATENATE V_FILEPATH

'history/'

V_FILENAME

INTO P_FILE.

ENDIF.

CONDENSE P_FILE NO-GAPS.

ENDFORM. " PREPARE_FILE_NAME

&----


*& Form DWLD_DATA_TO_APPSER

&----


FORM DWLD_DATA_TO_APPSER TABLES L_IT_DATA_TAB

USING L_AFILE. "LIKE FILENAME-FILEINTERN

*-- Open Dataset

DATA : V_LENGTH TYPE I.

***

TRANSLATE L_AFILE TO LOWER CASE.

IF L_AFILE CS SY-SYSID.

TRANSLATE L_AFILE+SY-FDPOS(3) TO UPPER CASE.

ENDIF.

*Start of changes by Krishna Praneeth on 11/22/2006

  • OPEN DATASET L_AFILE FOR OUTPUT IN TEXT MODE.

OPEN DATASET L_AFILE FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.

*End of changes by Krishna Praneeth on 11/22/2006

IF SY-SUBRC EQ 0.

*-- Populate Data to the required Path

LOOP AT L_IT_DATA_TAB.

TRANSFER L_IT_DATA_TAB TO L_AFILE.

ENDLOOP.

*-- Close Dataset

CLOSE DATASET L_AFILE.

ELSE.

ENDIF.

ENDFORM. " DWLD_DATA_TO_APPSER

&----


*& Form PROCESS_FILES

&----


  • text

----


  • -->P_LV_FILENAME text

----


FORM PROCESS_FILES USING P_LV_FILENAME S_FILE.

DATA : LV_INPUT(90) TYPE C.

LV_INPUT = P_LV_FILENAME.

CLEAR : P_SOURCE_FILENAME.

  • V_ERRORFILES,

  • V_TOTALFILES.

PERFORM PREPARE_FILE_NAME CHANGING P_LV_FILENAME

P_SOURCE_FILENAME.

  • subroutine to insert into ztable from internal table.

PERFORM UPDATE_ZTABLE.

IF CNT = 1.

IT_REPORT-STARTNO = ' '.

IT_REPORT-ENDNO = ' '.

IF RB_PRES = 'X'.

IT_REPORT-FILENAME = S_FILE

.

IT_INFO-LINE+1(120) = S_FILE.

ELSE.

IT_REPORT-FILENAME = LV_INPUT.

IT_INFO-LINE+1(120) = LV_INPUT.

ENDIF.

IT_REPORT-STATUS = 'Specified File is Empty with Only Header'.

APPEND IT_REPORT.

CLEAR IT_REPORT.

IT_INFO-LINE = 'Specified File is Empty with Only Header'.

APPEND IT_INFO.

CLEAR IT_INFO.

ENDIF.

P_LV_FILENAME = LV_INPUT.

PERFORM CHECK_FILE.

IF RB_PRES = 'X'.

V_TOTALFILES = V_TOTALFILES + 1.

IF NOT IT_ERROR[] IS INITIAL.

V_ERRORFILES = V_ERRORFILES + 1.

PERFORM DOWNLOAD_ERRORFILE TABLES IT_DATA2 USING P_LV_FILENAME.

ELSE.

V_SUCCESSFILES = V_SUCCESSFILES + 1.

ENDIF.

PERFORM POPULATE_INFO USING S_FILE.

ELSE.

IF NOT IT_ERROR[] IS INITIAL.

V_ERRORFILES = V_ERRORFILES + 1.

PERFORM PREPARE_FILE_NAME CHANGING P_LV_FILENAME

P_SOURCE_FILENAME.

PERFORM DWLD_DATA_TO_APPSER TABLES IT_DATA2

USING P_LV_FILENAME.

PERFORM POPULATE_INFO USING LV_INPUT.

ENDIF.

IF IT_ERROR[] IS INITIAL.

V_SUCCESSFILES = V_SUCCESSFILES + 1.

PERFORM PREPARE_FILE_NAME CHANGING P_LV_FILENAME

P_SOURCE_FILENAME.

PERFORM DWLD_DATA_TO_APPSER TABLES IT_DATA2

USING P_LV_FILENAME.

PERFORM POPULATE_INFO USING LV_INPUT.

ENDIF.

ENDIF.

  • PERFORM POPULATE_INFO USING LV_INPUT.

ENDFORM. " PROCESS_FILES

&----


*& Form DISPLAY_REPORT

&----


  • Display the output

----


FORM DISPLAY_REPORT.

DATA : LV_REPID LIKE SY-REPID.

PERFORM BUILD_CATALOG.

PERFORM FRM_PREPARE_EVENT_LIST TABLES IT_EVENTS.

IF NOT IT_REPORT[] IS INITIAL.

LV_REPID = SY-REPID.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

I_CALLBACK_PROGRAM = LV_REPID

IT_FIELDCAT = IT_FLDCAT

IT_EVENTS = IT_EVENTS

TABLES

T_OUTTAB = IT_REPORT

EXCEPTIONS

PROGRAM_ERROR = 1

OTHERS = 2.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ELSE.

MESSAGE I000 WITH TEXT-013.

ENDIF.

ENDFORM. " DISPLAY_REPORT

&----


*& Form BUILD_CATALOG

&----


  • Build the Field catalog for the ALV Report

----


FORM BUILD_CATALOG.

DATA: V_INDEX LIKE SY-TABIX.

V_REPID = SY-REPID.

DATA: LS_SORT TYPE SLIS_SORTINFO_ALV.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

I_PROGRAM_NAME = V_REPID

I_INTERNAL_TABNAME = 'IT_REPORT'

I_INCLNAME = V_REPID

CHANGING

CT_FIELDCAT = IT_FLDCAT

EXCEPTIONS

INCONSISTENT_INTERFACE = 1

PROGRAM_ERROR = 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.

LOOP AT IT_FLDCAT INTO WA_FLDCAT.

V_INDEX = SY-TABIX.

CASE WA_FLDCAT-FIELDNAME.

WHEN 'STARTNO'.

WA_FLDCAT-SELTEXT_L = 'Starting SR No.'.

WA_FLDCAT-COL_POS = 1.

WA_FLDCAT-DDICTXT = 'L'.

MODIFY IT_FLDCAT FROM WA_FLDCAT INDEX V_INDEX .

WHEN 'ENDNO'.

WA_FLDCAT-SELTEXT_L = 'Ending SR No'.

WA_FLDCAT-COL_POS = 2.

WA_FLDCAT-DDICTXT = 'L'.

MODIFY IT_FLDCAT FROM WA_FLDCAT INDEX V_INDEX .

WHEN 'FILENAME'.

WA_FLDCAT-SELTEXT_L = 'File Name'.

WA_FLDCAT-COL_POS = 4.

WA_FLDCAT-DDICTXT = 'L'.

MODIFY IT_FLDCAT FROM WA_FLDCAT INDEX V_INDEX ..

WHEN 'STATUS'.

WA_FLDCAT-SELTEXT_L = 'Status'.

WA_FLDCAT-COL_POS = 3.

WA_FLDCAT-DDICTXT = 'L'.

MODIFY IT_FLDCAT FROM WA_FLDCAT INDEX V_INDEX .

ENDCASE.

ENDLOOP.

ENDFORM. " BUILD_CATALOG

&----


*& Form FRM_PREPARE_EVENT_LIST

&----


  • Build the Events

----


FORM FRM_PREPARE_EVENT_LIST TABLES IT_EVENTS TYPE SLIS_T_EVENT.

CLEAR GS_EVENT.

GS_EVENT-NAME = 'TOP_OF_PAGE'.

GS_EVENT-FORM = 'TOP_OF_PAGE'.

APPEND GS_EVENT TO IT_EVENTS.

ENDFORM. " FRM_PREPARE_EVENT_LIST

************************************************************************

  • TOP OF PAGE

************************************************************************

FORM TOP_OF_PAGE.

DATA : LS_VALUE TYPE SLIS_LISTHEADER ,

LT_VALUE TYPE SLIS_T_LISTHEADER.

IF SY-PAGNO EQ 1.

IF P_TRUN IS INITIAL.

ULINE 1(50).

FORMAT COLOR COL_KEY.

WRITE : /1 SY-VLINE,

TEXT-004,

50 SY-VLINE.

WRITE :/1(50) SY-ULINE.

FORMAT RESET.

FORMAT COLOR COL_TOTAL.

WRITE :/1 SY-VLINE ,

TEXT-005,

V_TOTALFILES,

50 SY-VLINE.

FORMAT RESET.

FORMAT COLOR COL_NEGATIVE.

WRITE: /1 SY-VLINE,

TEXT-006,

V_ERRORFILES,

50 SY-VLINE.

FORMAT RESET.

FORMAT COLOR COL_POSITIVE.

WRITE: /1 SY-VLINE,

TEXT-007,

V_SUCCESSFILES,

50 SY-VLINE.

FORMAT RESET.

WRITE :/1(50) SY-ULINE.

ELSE.

ULINE 1(50).

FORMAT COLOR COL_KEY.

WRITE : /1 SY-VLINE,

TEXT-008,

50 SY-VLINE.

WRITE :/1(50) SY-ULINE.

FORMAT RESET.

FORMAT COLOR COL_TOTAL.

WRITE :/1 SY-VLINE ,

TEXT-005,

V_TOTALFILES,

50 SY-VLINE.

FORMAT RESET.

FORMAT COLOR COL_NEGATIVE.

WRITE: /1 SY-VLINE,

TEXT-006,

V_ERRORFILES,

50 SY-VLINE.

FORMAT RESET.

FORMAT COLOR COL_POSITIVE.

WRITE: /1 SY-VLINE,

TEXT-007,

V_SUCCESSFILES,

50 SY-VLINE.

FORMAT RESET.

WRITE :/1(50) SY-ULINE.

ENDIF.

READ TABLE IT_FILES WITH KEY TYPE = 'E'.

IF SY-SUBRC EQ 0.

SKIP 1.

ULINE 1(100).

FORMAT COLOR COL_NEGATIVE.

WRITE : /1 SY-VLINE,

'Error Files',

100 SY-VLINE.

WRITE :/1(100) SY-ULINE.

FORMAT RESET.

LOOP AT IT_FILES WHERE TYPE = 'E'.

FORMAT COLOR COL_NORMAL INTENSIFIED OFF.

WRITE: /1 SY-VLINE,

IT_FILES-FILENAME,

100 SY-VLINE.

FORMAT RESET.

ENDLOOP.

WRITE :/1(100) SY-ULINE.

ENDIF.

READ TABLE IT_FILES WITH KEY TYPE = 'S'.

IF SY-SUBRC EQ 0.

SKIP 1.

ULINE 1(100).

FORMAT COLOR COL_POSITIVE.

WRITE : /1 SY-VLINE,

'Correct Files',

100 SY-VLINE.

WRITE :/1(100) SY-ULINE.

FORMAT RESET.

LOOP AT IT_FILES WHERE TYPE = 'S'.

FORMAT COLOR COL_NORMAL INTENSIFIED OFF.

WRITE: /1 SY-VLINE,

IT_FILES-FILENAME,

100 SY-VLINE.

FORMAT RESET.

ENDLOOP.

WRITE :/1(100) SY-ULINE.

ENDIF.

ENDIF.

ENDFORM. " FRM_TOP_OF_PAGE_REPORT

&----


*& Form POPULATE_INFO

&----


  • text

----


  • -->P_LV_INPUT text

----


FORM POPULATE_INFO USING P_LV_INPUT.

  • DELETE ADJACENT DUPLICATES FROM IT_ERROR COMPARING SSERIALNO

ESERIALNO

*

MODELNO.

LOOP AT IT_ERROR.

AT FIRST.

IT_INFO-LINE+1(120) = P_LV_INPUT.

APPEND IT_INFO.

CLEAR IT_INFO.

IT_FILES-TYPE = 'E'.

IT_FILES-FILENAME = P_LV_INPUT.

APPEND IT_FILES.

ENDAT.

IT_REPORT-STARTNO = IT_ERROR-SSERIALNO.

IT_REPORT-ENDNO = IT_ERROR-ESERIALNO.

IT_REPORT-FILENAME = P_LV_INPUT.

IF IT_ERROR-MESSAGE IS INITIAL.

CONCATENATE 'This Serial Number Range Records Insufficient'

' Or File With Wrong Format' INTO

IT_REPORT-STATUS.

  • IT_REPORT-STATUS = 'This serial number range records

Insufficient

  • or File with wrong format'.

ELSE.

IT_REPORT-STATUS = IT_ERROR-MESSAGE.

ENDIF.

APPEND IT_REPORT.

CLEAR IT_REPORT.

IT_INFO-LINE+1(10) = IT_ERROR-SSERIALNO.

IT_INFO-LINE+10(1) = ' '.

IT_INFO-LINE+11(10) = IT_ERROR-ESERIALNO.

IT_INFO-LINE+21(1) = ' '.

IF IT_ERROR-MESSAGE IS INITIAL.

CONCATENATE 'This Serial Number Range Records Insufficient'

' Or File With Wrong Format' INTO

IT_INFO-LINE+22(120).

  • IT_INFO-LINE+22(120) = 'This serial number range records

  • insufficient or File with wrong

format'.

.

ELSE.

IT_INFO-LINE+22(120) = IT_ERROR-MESSAGE.

ENDIF.

IT_INFO+143(1) = ' '.

APPEND IT_INFO.

CLEAR IT_INFO.

ENDLOOP.

DELETE ADJACENT DUPLICATES FROM IT_HISTORY COMPARING SSERIALNO.

LOOP AT IT_HISTORY.

AT FIRST.

IF IT_ERROR[] IS INITIAL.

IT_INFO-LINE+1(120) = P_LV_INPUT.

APPEND IT_INFO.

CLEAR IT_INFO.

IT_FILES-TYPE = 'S'.

IT_FILES-FILENAME = P_LV_INPUT.

APPEND IT_FILES.

ENDIF.

ENDAT.

IT_REPORT-STARTNO = IT_HISTORY-SSERIALNO.

IT_REPORT-ENDNO = IT_HISTORY-ESERIALNO.

IT_REPORT-FILENAME = P_LV_INPUT.

IF P_TRUN IS INITIAL.

IT_REPORT-STATUS = 'This range successfully uploaded'.

ELSE.

IT_REPORT-STATUS = 'This range can be successfully uploaded'.

ENDIF.

APPEND IT_REPORT.

CLEAR IT_REPORT.

IT_INFO-LINE+1(10) = IT_HISTORY-SSERIALNO.

IT_INFO-LINE+10(1) = ' '.

IT_INFO-LINE+11(10) = IT_HISTORY-ESERIALNO.

IT_INFO-LINE+21(1) = ' '.

IF P_TRUN IS INITIAL.

IT_INFO-LINE+22(120) = 'This range successfully uploaded'.

ELSE.

IT_INFO-LINE+22(120) = 'This range can be successfully uploaded'.

ENDIF.

IT_INFO+143(1) = ' '.

APPEND IT_INFO.

CLEAR IT_INFO.

ENDLOOP.

ENDFORM. " POPULATE_INFO

Thanks,

Mahesh