Bdc for Vk11 T.CODE

download Bdc for Vk11 T.CODE

of 25

Transcript of Bdc for Vk11 T.CODE

VK11 BDC with Flat File and Recording

*&---------------------------------------------------------------------**& Report Z_SD_BDC_CIN_CONDITIONS*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT Z_SD_BDC_CIN_CONDITIONS NO STANDARD PAGE HEADINGMESSAGE-ID ZSAS_MSGCLASSLINE-SIZE 132LINE-COUNT 65.************************************************************************* Program Name : Z_SD_BDC_CIN_CONDITIONS ** Description : BDC for CIN conditions ** Functional : Srinivas ** Developer : Vijaya Lakshmi ** Development class : zsas_dev ** Description : ** ** 1. Read input file ** 2. Check the mandatory fields and if any one of them is missing ** move the record to error file. ** 3. Fill the bdcdata and call VK11 transaction ** 4. If any errors format the message and send it for reporting ** 5. If any errors, it downloads the error file ** 6. Based on user input, this programs does the follwoing ** a).Call transaction and in case of errors add to a session ** B).Create session ** 7. Display the Audit report **----------------------------------------------------------------------**----------------------------------------------------------------------** Request No. Created Date Developer name **----------------------------------------------------------------------** SMDK900449 24/04/2009 Vijaya Lakshmi.T*----------------------------------------------------------------------** TABLES **----------------------------------------------------------------------*

*----------------------------------------------------------------------** FLAGS **----------------------------------------------------------------------*DATA: FG_STOP TYPE C, " Flag used to stop processingFG_COLOR TYPE C, " Flag to set Background colorFG_OPENSESSION TYPE C. " Flag for Open Sesssion*----------------------------------------------------------------------** INTERNAL TABLE DECLARATIONS **----------------------------------------------------------------------**--- Internal table for input file for ascii data loadDATA: BEGIN OF I_INFILE_ASC OCCURS 0,STRING(1500) TYPE C,END OF I_INFILE_ASC.

*--- Internal table to store messages from Call Transaction.DATA : I_BDCMSGCOLL TYPE STANDARD TABLE OF BDCMSGCOLL WITH HEADER LINE,

*--- Internal table for BDC dataIT_BDCTAB TYPE BDCDATA OCCURS 0 WITH HEADER LINE.

*----- Internal to hold the records in the text fileDATA : BEGIN OF IT_DATA OCCURS 0,KSCHL(4), " Condition typeSELKZ(1), " Selection indicator for list screensVKORG(4), " Sales OrganizationVTWEG(2), " Distribution ChannelMATNR(18), " Material NumberDATAB(10), " Validity start date of the condition recordDATBI(10), " Validity end date of the condition recordEND OF IT_DATA.

*--- Internal table to hold the error records.DATA : BEGIN OF IT_ERROR OCCURS 0.INCLUDE STRUCTURE IT_DATA.DATA : MESSAGE(80) TYPE C,END OF IT_ERROR.

*--- Internal table for session namesDATA : BEGIN OF IT_SESSION OCCURS 0,NAME(12),END OF IT_SESSION.

*--- Internal table to hold Collecting messages in the SAP SystemDATA : IT_MSG LIKE BDCMSGCOLL OCCURS 10 WITH HEADER LINE.

*--- Internal table to hold error records to be downloadedDATA : BEGIN OF I_FINAL OCCURS 0,STRING(1000),END OF I_FINAL.

*--- Internal table for session namesDATA : BEGIN OF I_SESSION OCCURS 0,NAME(12),END OF I_SESSION.

*--- Internal table to hold data from ExcelDATA : IT_INTERN TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.

*----------------------------------------------------------------------** CONSTANTS **----------------------------------------------------------------------*CONSTANTS : C_FILETYPE LIKE RLGRAP-FILETYPE VALUE 'DAT', " FiletypeC_TCODE LIKE TSTC-TCODE VALUE 'VK11', " TransactionC_MODE(1) VALUE 'A', " ModeC_UPDATE(1) VALUE 'S', " UpdateC_SESS(12) TYPE C VALUE 'COND_REC'. " Session Name

*----------------------------------------------------------------------** DATA DECLARATIONS **----------------------------------------------------------------------*DATA : G_TABIX LIKE SY-TABIX, " Table IndexG_MESG(80) TYPE C, " Message,G_ERROR TYPE I, " No.of ErrorsG_SUCCESS TYPE I, " No.of successesG_BDC_SESS TYPE APQI-GROUPID VALUE 'UPLOAD', " Queue info defnG_MAX TYPE I VALUE '900', " Max recordsG_LINES TYPE I, " No.of recordsG_INSERT TYPE I, " InsertG_COUNTER(2) TYPE N, " No.of SessionsG_EMPTY TYPE I, " No. of empty recordsG_TOTAL TYPE I, " Total no. of records

with dataG_SESSION TYPE APQI-GROUPID, " Session nameG_DEL(4) TYPE C VALUE '09', " To seperate fields in

case of DatG_SFILE(255), " File pathG_FILEEXT(3). " File Extension

*----------------------------------------------------------------------** SELECTION SCREEN. **----------------------------------------------------------------------*SELECTION-SCREEN BEGIN OF BLOCK SCR1 WITH FRAME TITLE TEXT-001.PARAMETER : P_FILE TYPE RLGRAP-FILENAME OBLIGATORY DEFAULT

'C:/CUSTOMER_MASTER.TXT', " Input FileP_ERR TYPE RLGRAP-FILENAME OBLIGATORY DEFAULT

'C:/CUSTOMER_MASTER_ERR.TXT', " Error FileP_FTYPE LIKE RLGRAP-FILETYPE DEFAULT 'DAT'.

" File TypeSELECTION-SCREEN END OF BLOCK SCR1.

SELECTION-SCREEN BEGIN OF BLOCK MODE WITH FRAME TITLE TEXT-002.PARAMETER : P_CT RADIOBUTTON GROUP BDC, " Call

TransactionP_BDC RADIOBUTTON GROUP BDC DEFAULT 'X'. " Create BDC

sess

PARAMETER : P_SESS1 TYPE APQI-GROUPID OBLIGATORY DEFAULT C_SESS. " Session name

PARAMETER : P_MAX(4) OBLIGATORY DEFAULT '100', " No.of recs in

a sessionP_TEST AS CHECKBOX DEFAULT 'X'. " Test modePARAMETERS: P_HEADER TYPE I DEFAULT 0. " Header LinesPARAMETERS: P_BEGCOL TYPE I DEFAULT 1 NO-DISPLAY, " Start ColumnP_BEGROW TYPE I DEFAULT 1 NO-DISPLAY, " Start RowP_ENDCOL TYPE I DEFAULT 150 NO-DISPLAY, " End ColumnP_ENDROW TYPE I DEFAULT 32000 NO-DISPLAY. " End RowSELECTION-SCREEN END OF BLOCK MODE.

*---------------------------------------------------------------------** AT SELECTION-SCREEN **---------------------------------------------------------------------*AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.*--- Validating filePERFORM VALIDATE_FILE USING P_FILE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_ERR.*--- Validating filePERFORM VALIDATE_FILE USING P_ERR.

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

*--- Perform to store the data to an internal tablePERFORM READ_INPUT_FILE_DATA.*--- Process data in non test mode onlyIF P_TEST = SPACE.IF NOT IT_DATA[] IS INITIAL.*--- Perform to process dataPERFORM PROCESS_DATA.ELSE.G_MESG = 'Error in Processing BDC Data'(001).MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG.FG_STOP = 'X'.STOP.ENDIF.ENDIF.

*----------------------------------------------------------------------** END OF SELECTION. **----------------------------------------------------------------------*END-OF-SELECTION.

IF FG_STOP = SPACE.*--- Perform to display the selection screen of the rep`ortPERFORM DISPLAY_SEL_SCR_REPORT.*--- Perform to display the session reportPERFORM SESSION_REPORT.*--- Perform to display the no.of records,success and error recordsPERFORM DISPLAY_SUMMARY_REPORT.*--- Downloading error records.PERFORM DOWNLOAD_ERROR_FILES.*---- Perform to display the error recordsPERFORM DISPLAY_ERROR_RECORDS.ENDIF.*----------------------------------------------------------------------** Form : validate_input_file*----------------------------------------------------------------------** Description : To provide F4 help for file if read from PC*----------------------------------------------------------------------*FORM VALIDATE_FILE USING F_FILE TYPE RLGRAP-FILENAME.*--- Call function to get the File (user specified)CALL FUNCTION 'KD_GET_FILENAME_ON_F4'CHANGINGFILE_NAME = F_FILEEXCEPTIONSMASK_TOO_LONG = 1OTHERS = 2.

IF SY-SUBRC 0.*--- Display message if error occurs in getting fileG_MESG = 'Error in getting the Filename'(002).MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG. " Error in getting filename.ENDIF.

ENDFORM. " validate_input_file

*----------------------------------------------------------------------** Form : Read_inputfile*----------------------------------------------------------------------** Description : To upload the data into internal table*----------------------------------------------------------------------*FORM READ_INPUTFILE TABLES F_INFILEUSING F_FILE TYPE RLGRAP-FILENAMEF_FILTYP TYPE RLGRAP-FILETYPE.*--- Local variable declarationsDATA : LV_DEL TYPE CHAR01,LV_FILE TYPE STRING.*--- Clear and initialize variablesCLEAR F_INFILE.REFRESH F_INFILE.LV_FILE = F_FILE.

*--- Function module to upload the input fileIF F_FILTYP = 'DAT'.LV_DEL = '|'.ENDIF.*--- Call function GUI_UPLOAD to upload data from flat file to internal tableCALL FUNCTION 'GUI_UPLOAD'EXPORTINGFILENAME = LV_FILEFILETYPE = 'ASC'HAS_FIELD_SEPARATOR = LV_DELTABLESDATA_TAB = F_INFILEEXCEPTIONSFILE_OPEN_ERROR = 1FILE_READ_ERROR = 2NO_BATCH = 3GUI_REFUSE_FILETRANSFER = 4INVALID_TYPE = 5NO_AUTHORITY = 6UNKNOWN_ERROR = 7BAD_DATA_FORMAT = 8HEADER_NOT_ALLOWED = 9SEPARATOR_NOT_ALLOWED = 10HEADER_TOO_LONG = 11UNKNOWN_DP_ERROR = 12ACCESS_DENIED = 13DP_OUT_OF_MEMORY = 14DISK_FULL = 15DP_TIMEOUT = 16OTHERS = 17.

IF SY-SUBRC 0.*--- Display message if error occurs in uploading data from fileG_MESG = 'Error in uploading the file'(003).MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG. " 'Error in uploading the file'.CLEAR G_MESG.FG_STOP = 'X'.STOP.ENDIF.

ENDFORM. "Read_inputfile*&---------------------------------------------------------------------**& Form FORMAT_ASC_DATA*&---------------------------------------------------------------------** To format the ASCII data*----------------------------------------------------------------------*FORM FORMAT_ASC_DATA.*--- Loop to format ASCII dataLOOP AT I_INFILE_ASC.IT_DATA-KSCHL = I_INFILE_ASC-STRING+0(4).IT_DATA-SELKZ = I_INFILE_ASC-STRING+4(1).IT_DATA-VKORG = I_INFILE_ASC-STRING+5(4).IT_DATA-VTWEG = I_INFILE_ASC-STRING+9(2).IT_DATA-MATNR = I_INFILE_ASC-STRING+11(18).IT_DATA-DATAB = I_INFILE_ASC-STRING+29(10).IT_DATA-DATBI = I_INFILE_ASC-STRING+39(10).

ENDLOOP.

ENDFORM. " FORMAT_ASC_DATA

*&---------------------------------------------------------------------**& Form error_processing*&---------------------------------------------------------------------** To process the error records*----------------------------------------------------------------------*FORM ERROR_PROCESSING USING F_IT_DATAF_MESG.G_ERROR = G_ERROR + 1.IT_ERROR = F_IT_DATA.IT_ERROR-MESSAGE = F_MESG.APPEND IT_ERROR.CLEAR IT_ERROR.

ENDFORM. " ERROR_PROCESSING

*---------------------------------------------------------------------** Form : process_data **---------------------------------------------------------------------** --- Populating the BDC Data **---------------------------------------------------------------------*FORM PROCESS_DATA .

LOOP AT IT_DATA.

CLEAR :IT_BDCTAB,I_BDCMSGCOLL.REFRESH:IT_BDCTAB,I_BDCMSGCOLL.*--- To fill the data from the text file

PERFORM FILL_BDCDATA.IF P_CT EQ 'X'.*--- Posts data using call transaction method.PERFORM CALL_TRANSACTION.ELSE.*--- Posts data using session method.PERFORM CALL_SESSION USING C_TCODE P_MAX P_SESS1.ENDIF.

ENDLOOP.IF FG_OPENSESSION = 'X'.*--- Perform to close BDC sessionPERFORM CLOSE_SESSION.ENDIF.

ENDFORM. " PROCESS_DATA

*&---------------------------------------------------------------------**& Form FILL_BDCDATA*&---------------------------------------------------------------------** To populate the data*----------------------------------------------------------------------*FORM FILL_BDCDATA.

*---- Perform to fill the fields in the screen 0100PERFORM FILL_SCREEN_0100.*---- Perform to fill the fields in the screen 0100PERFORM FILL_SCREEN1_0100.*---- Perform to fill the fields in the screen 1004PERFORM FILL_SCREEN_1004.*---- Perform to fill the fields in the screen 1004PERFORM FILL_SCREEN_1004_1.

ENDFORM. " FILL_BDCDATA

*&---------------------------------------------------------------------**& Form FILL_SCREEN_0100*&---------------------------------------------------------------------** To fill the fields in the screen 0100*----------------------------------------------------------------------*FORM FILL_SCREEN_0100 .

PERFORM BDC_DYNPRO USING 'SAPMV13A' '0100'.PERFORM BDC_FIELD USING 'BDC_CURSOR' 'RV13A-KSCHL'.PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.PERFORM BDC_FIELD USING 'RV13A-KSCHL' IT_DATA-KSCHL.

ENDFORM. " FILL_SCREEN_0100.*&---------------------------------------------------------------------**& Form FILL_SCREEN1_0100*&---------------------------------------------------------------------** To fill the fields in screen 100*----------------------------------------------------------------------*FORM FILL_SCREEN1_0100 .

PERFORM BDC_DYNPRO USING 'SAPLV14A' '0100'.PERFORM BDC_FIELD USING 'BDC_CURSOR' 'RV130-SELKZ(03)'.PERFORM BDC_FIELD USING 'BDC_OKCODE' '=WEIT'.* PERFORM BDC_FIELD USING 'RV130-SELKZ(01)' IT_DATA-SELKZ.* PERFORM BDC_FIELD USING 'RV130-SELKZ(02)' IT_DATA-SELKZ.PERFORM BDC_FIELD USING 'RV130-SELKZ(03)' IT_DATA-SELKZ.ENDFORM. " FILL_SCREEN1_0100*&---------------------------------------------------------------------**& Form FILL_SCREEN_1004*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM FILL_SCREEN_1004 .PERFORM BDC_DYNPRO USING 'SAPMV13A' '1004'.PERFORM BDC_FIELD USING 'BDC_CURSOR' 'RV13A-DATBI(01)'.PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.PERFORM BDC_FIELD USING 'KOMG-VKORG' IT_DATA-VKORG.PERFORM BDC_FIELD USING 'KOMG-VTWEG' IT_DATA-VTWEG.PERFORM BDC_FIELD USING 'KOMG-MATNR(01)' IT_DATA-MATNR.PERFORM BDC_FIELD USING 'RV13A-DATAB(01)' IT_DATA-DATAB.PERFORM BDC_FIELD USING 'RV13A-DATBI(01)' IT_DATA-DATBI.

ENDFORM. " FILL_SCREEN_1004

*&---------------------------------------------------------------------**& Form FILL_SCREEN_1004*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM FILL_SCREEN_1004_1 .PERFORM BDC_DYNPRO USING 'SAPMV13A' '1004'.PERFORM BDC_FIELD USING 'BDC_CURSOR' 'KOMG-MATNR(01)'.PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SICH'.

ENDFORM. " FILL_SCREEN_1004

*&---------------------------------------------------------------------**& Form BDC_DYNPRO*----------------------------------------------------------------------** Start new screen **----------------------------------------------------------------------*FORM BDC_DYNPRO USING F_PROGRAM F_DYNPRO.CLEAR IT_BDCTAB.IT_BDCTAB-PROGRAM = F_PROGRAM.IT_BDCTAB-DYNPRO = F_DYNPRO.IT_BDCTAB-DYNBEGIN = 'X'.APPEND IT_BDCTAB.ENDFORM. "BDC_DYNPRO

*&---------------------------------------------------------------------**& Form BDC_FIELD*----------------------------------------------------------------------** Insert field **----------------------------------------------------------------------*FORM BDC_FIELD USING FNAM FVAL.IF FVAL SPACE.CLEAR IT_BDCTAB.IT_BDCTAB-FNAM = FNAM.IT_BDCTAB-FVAL = FVAL.APPEND IT_BDCTAB.ENDIF.ENDFORM. "BDC_FIELD*&---------------------------------------------------------------------**& Form call_transaction*&---------------------------------------------------------------------** Posts data using call transaction method. **----------------------------------------------------------------------*FORM CALL_TRANSACTION.

CLEAR: G_LINES,G_MESG.*--- Call transaction methodCALL TRANSACTION C_TCODE USING IT_BDCTABMODE C_MODEUPDATE C_UPDATEMESSAGES INTO I_BDCMSGCOLL.IF SY-SUBRC 0.DESCRIBE TABLE I_BDCMSGCOLL LINES G_LINES.READ TABLE I_BDCMSGCOLL INDEX G_LINES TRANSPORTING ALL FIELDS.*--- Formats message returned by call transaction.PERFORM FORMAT_MESSAGE.*--- Perform to process error processingPERFORM ERROR_PROCESSING USING IT_DATA G_MESG.PERFORM CALL_SESSION USING C_TCODE P_MAX P_SESS1.ELSE. "If call transaction is successful.G_SUCCESS = G_SUCCESS + 1.ENDIF.

ENDFORM. " CALL_TRANSACTION

*&---------------------------------------------------------------------**& Form format_message*&---------------------------------------------------------------------** Reading messages*----------------------------------------------------------------------*FORM FORMAT_MESSAGE.CLEAR G_MESG.

*--- Function module to get the message.CALL FUNCTION 'FORMAT_MESSAGE'EXPORTINGID = I_BDCMSGCOLL-MSGIDLANG = SY-LANGUNO = I_BDCMSGCOLL-MSGNRV1 = I_BDCMSGCOLL-MSGV1V2 = I_BDCMSGCOLL-MSGV2V3 = I_BDCMSGCOLL-MSGV3V4 = I_BDCMSGCOLL-MSGV4IMPORTINGMSG = G_MESG.

ENDFORM. " FORMAT_MESSAGE

*----------------------------------------------------------------------** Form : call_session*----------------------------------------------------------------------** To call the session either for FSP0 or FSP2*----------------------------------------------------------------------*FORM CALL_SESSION USING FP_TCODE TYPE ANYF_MAX TYPE ANYF_SESS1 TYPE ANY.* To open the sessionPERFORM OPEN_SESSION USING F_MAX F_SESS1.* Perform Insert BDC SessionPERFORM BDC_INSERT USING FP_TCODE.* To close the sessionIF G_INSERT = F_MAX .PERFORM CLOSE_SESSION.ENDIF.ENDFORM. " call_session

*----------------------------------------------------------------------** Form : open_session*----------------------------------------------------------------------** To open BDC open group.*----------------------------------------------------------------------*FORM OPEN_SESSION USING F_MAX TYPE ANYF_SESS1 TYPE ANY.

IF G_INSERT = F_MAX OR FG_OPENSESSION = SPACE.G_COUNTER = G_COUNTER + 1.CLEAR G_SESSION.CONCATENATE F_SESS1 '_' G_COUNTER INTO G_SESSION.* Opening the BDC SessionCALL FUNCTION 'BDC_OPEN_GROUP'EXPORTINGCLIENT = SY-MANDTGROUP = G_SESSIONKEEP = 'X'USER = SY-UNAMEEXCEPTIONSCLIENT_INVALID = 1DESTINATION_INVALID = 2GROUP_INVALID = 3GROUP_IS_LOCKED = 4HOLDDATE_INVALID = 5INTERNAL_ERROR = 6QUEUE_ERROR = 7RUNNING = 8SYSTEM_LOCK_ERROR = 9USER_INVALID = 10OTHERS = 11.IF SY-SUBRC 0.G_MESG = 'Error in Opening the Session'(004) .MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG. " 'Error in Opening the

Session'.EXIT.ELSE.CLEAR G_INSERT.FG_OPENSESSION = 'X'.ENDIF.ENDIF.ENDFORM. " OPEN_SESSION

*----------------------------------------------------------------------** Form : bdc_insert*----------------------------------------------------------------------** To Insert data.*----------------------------------------------------------------------*FORM BDC_INSERT USING FP_TCODE TYPE ANY.

* Inserting BDCCALL FUNCTION 'BDC_INSERT'EXPORTINGTCODE = FP_TCODETABLESDYNPROTAB = IT_BDCTABEXCEPTIONSINTERNAL_ERROR = 1NOT_OPEN = 2QUEUE_ERROR = 3TCODE_INVALID = 4PRINTING_INVALID = 5POSTING_INVALID = 6OTHERS = 7.IF SY-SUBRC 0.G_MESG = 'Error in inserting the record'(005).MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG. " 'Error in inserting the record'.CLEAR G_MESG.ELSE.G_INSERT = G_INSERT + 1.ENDIF.

ENDFORM. " BDC_INSERT

*----------------------------------------------------------------------** Form : close_session*----------------------------------------------------------------------** To close the session*----------------------------------------------------------------------*FORM CLOSE_SESSION.CALL FUNCTION 'BDC_CLOSE_GROUP'EXCEPTIONSNOT_OPEN = 1QUEUE_ERROR = 2OTHERS = 3.

IF SY-SUBRC 0.G_MESG = 'Session cannot be closed'(006).MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG. " 'Session cannot be closed'.CLEAR G_MESG.ELSE.I_SESSION-NAME = G_SESSION.APPEND I_SESSION.CLEAR I_SESSION.CLEAR FG_OPENSESSION.ENDIF.ENDFORM. " CLOSE_SESSION

*---------------------------------------------------------------------** Form DOWNLOAD_ERROR_FILES*---------------------------------------------------------------------** Downloading the error records to error file*----------------------------------------------------------------------*FORM DOWNLOAD_ERROR_FILES.

DATA : LV_DEL TYPE CHAR01,LV_FILE TYPE STRING.

IF NOT IT_ERROR[] IS INITIAL.IF P_FTYPE = 'DAT'.LOOP AT IT_ERROR.

CONCATENATE IT_ERROR-KSCHLIT_ERROR-SELKZIT_ERROR-VKORGIT_ERROR-VTWEGIT_ERROR-MATNRIT_ERROR-DATABIT_ERROR-DATBI

INTO I_FINAL-STRING SEPARATED BY G_DEL.APPEND I_FINAL.CLEAR I_FINAL.ENDLOOP.CLEAR I_FINAL.ELSEIF P_FTYPE = 'ASC'.

LOOP AT IT_ERROR.I_FINAL-STRING+0(4) = IT_ERROR-KSCHL.I_FINAL-STRING+4(1) = IT_ERROR-SELKZ.I_FINAL-STRING+5(4) = IT_ERROR-VKORG.I_FINAL-STRING+9(2) = IT_ERROR-VTWEG.I_FINAL-STRING+11(18) = IT_ERROR-MATNR.I_FINAL-STRING+29(10) = IT_ERROR-DATAB.I_FINAL-STRING+39(10) = IT_ERROR-DATBI.

APPEND I_FINAL.CLEAR I_FINAL.ENDLOOP.ENDIF. "IF P_FTYPE = 'DAT'.

LV_FILE = P_ERR.

IF P_FTYPE = 'DAT'.LV_DEL = '|'.ENDIF.

CALL FUNCTION 'GUI_DOWNLOAD'EXPORTING* BIN_FILESIZE =FILENAME = LV_FILEFILETYPE = 'ASC'* APPEND = ' 'WRITE_FIELD_SEPARATOR = LV_DEL* HEADER = '00'* TRUNC_TRAILING_BLANKS = ' '* WRITE_LF = 'X'* COL_SELECT = ' '* COL_SELECT_MASK = ' '* DAT_MODE = ' '* CONFIRM_OVERWRITE = ' '* NO_AUTH_CHECK = ' '* CODEPAGE = ' '* IGNORE_CERR = ABAP_TRUE* REPLACEMENT = '#'* WRITE_BOM = ' '* IMPORTING* FILELENGTH =TABLESDATA_TAB = I_FINALEXCEPTIONSFILE_WRITE_ERROR = 1NO_BATCH = 2GUI_REFUSE_FILETRANSFER = 3INVALID_TYPE = 4NO_AUTHORITY = 5UNKNOWN_ERROR = 6HEADER_NOT_ALLOWED = 7SEPARATOR_NOT_ALLOWED = 8FILESIZE_NOT_ALLOWED = 9HEADER_TOO_LONG = 10DP_ERROR_CREATE = 11DP_ERROR_SEND = 12DP_ERROR_WRITE = 13UNKNOWN_DP_ERROR = 14ACCESS_DENIED = 15DP_OUT_OF_MEMORY = 16DISK_FULL = 17DP_TIMEOUT = 18FILE_NOT_FOUND = 19DATAPROVIDER_EXCEPTION = 20CONTROL_FLUSH_ERROR = 21OTHERS = 22.IF SY-SUBRC 0.G_MESG = 'Error in downloading the file'(007).MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG. " Error in downloading the

file.CLEAR G_MESG.ENDIF.

ENDIF. "IF NOT I_FILE_ERROR[] IS INITIAL.

ENDFORM. " DOWNLOAD_ERROR_FILES

*&---------------------------------------------------------------------**& Form READ_INPUT_DATA*&---------------------------------------------------------------------** To Read the input file data*----------------------------------------------------------------------*FORM READ_INPUT_FILE_DATA.

*--- Splitting the filename and its extensionPERFORM SPLIT_FILENAME_EXT.

CASE G_FILEEXT.

WHEN 'XLS'.*--- Perform to convert the Excel data into an internal tablePERFORM CONVERT_XLS_ITAB.WHEN 'TXT'.IF P_FTYPE = 'ASC'.*--- Uploading the data from serverPERFORM READ_INPUTFILE TABLES I_INFILE_ASCUSING P_FILE P_FTYPE.*--- Perform Formating ASC type dataPERFORM FORMAT_ASC_DATA.ELSEIF P_FTYPE = 'DAT'.*--- Uploading the data from serverPERFORM READ_INPUTFILE TABLES IT_DATAUSING P_FILE P_FTYPE.ENDIF.WHEN OTHERS.G_MESG = 'Invalid Operation'(029).MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG.CLEAR G_MESG.FG_STOP = 'X'.STOP.ENDCASE.IF NOT IT_DATA[] IS INITIAL.*--- Perform to delete Header linesPERFORM DELETE_HEADER_EMPTY_RECS.ENDIF.ENDFORM. " READ_INPUT_FILE_DATA

*&---------------------------------------------------------------------**& Form SPLIT_FILENAME_EXT*&---------------------------------------------------------------------** To split the filename and the extension*----------------------------------------------------------------------*FORM SPLIT_FILENAME_EXT.

MOVE P_FILE TO G_SFILE.*--- To get the extensions of the fileCALL FUNCTION 'CV120_SPLIT_FILE'EXPORTINGPF_FILE = G_SFILEIMPORTING* PFX_FILE =PFX_EXTENSION = G_FILEEXT* PFX_DOTEXTENSION =.*--- Checking the case of file extensionIF G_FILEEXT NA SY-ABCDE.TRANSLATE G_FILEEXT TO UPPER CASE.ENDIF.

ENDFORM. " SPLIT_FILENAME_EXT

*&---------------------------------------------------------------------**& Form MOVE_DATA*&---------------------------------------------------------------------** To move the input file data to an internal table*----------------------------------------------------------------------*FORM MOVE_DATA.

DATA : LV_INDEX TYPE I.FIELD-SYMBOLS.*--- Sorting the internal tableSORT IT_INTERN BY ROW COL.CLEAR IT_INTERN.

LOOP AT IT_INTERN.MOVE IT_INTERN-COL TO LV_INDEX.*--- Assigning the each record to an internal table rowASSIGN COMPONENT LV_INDEX OF STRUCTURE IT_DATA TO.IF SY-SUBRC = 0.*--- Asigning the field value to a field symbolMOVE IT_INTERN-VALUE TO.ENDIF.AT END OF ROW.APPEND IT_DATA.CLEAR IT_DATA.ENDAT.ENDLOOP.

ENDFORM. " MOVE_DATA

*&---------------------------------------------------------------------**& Form CONVER_XLS_ITAB*&---------------------------------------------------------------------** To convert the excel data into an internal table*----------------------------------------------------------------------*FORM CONVERT_XLS_ITAB.

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'EXPORTINGFILENAME = P_FILEI_BEGIN_COL = P_BEGCOLI_BEGIN_ROW = P_BEGROWI_END_COL = P_ENDCOLI_END_ROW = P_ENDROWTABLESINTERN = IT_INTERN* EXCEPTIONS* INCONSISTENT_PARAMETERS = 1* UPLOAD_OLE = 2* OTHERS = 3.IF SY-SUBRC 0. "#EC ** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.

IF NOT IT_INTERN[] IS INITIAL.*--- Perform to move the data into an internal dataPERFORM MOVE_DATA.ELSE.G_MESG = 'No values found'(008).MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG.CLEAR G_MESG.FG_STOP = 'X'.STOP.ENDIF.

ENDFORM. " CONVERT_XLS_ITAB

*&---------------------------------------------------------------------**& Form DELETE_HEADER_EMPTY_RECS*&---------------------------------------------------------------------** To delete the Header and empty records*----------------------------------------------------------------------*FORM DELETE_HEADER_EMPTY_RECS.

DATA: LV_TABIX LIKE SY-TABIX. " Table Index

IF NOT P_HEADER IS INITIAL.LOOP AT IT_DATA.IF P_HEADER > 0 AND NOT IT_DATA IS INITIAL.DELETE IT_DATA FROM 1 TO P_HEADER.EXIT.ENDIF.ENDLOOP.ENDIF.

CLEAR IT_DATA.*--- To delete the empty lines from internal tableLOOP AT IT_DATA.LV_TABIX = SY-TABIX.IF IT_DATA IS INITIAL.G_EMPTY = G_EMPTY + 1.DELETE IT_DATA INDEX LV_TABIX..ENDIF.ENDLOOP.

CLEAR IT_DATA.*--- Total no of recs in fileDESCRIBE TABLE IT_DATA LINES G_TOTAL.IF G_TOTAL = 0.G_MESG = 'No records in the file'(009).MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG. " No records in the fileCLEAR G_MESG.FG_STOP = 'X'.STOP.ENDIF.

ENDFORM. " DELETE_HEADER_EMPTY_RECS

*&---------------------------------------------------------------------**& Form DISPLAY_SELECTION_SCR*&---------------------------------------------------------------------** To display the selection screen input*----------------------------------------------------------------------*FORM DISPLAY_SEL_SCR_REPORT.

WRITE :/1(132) SY-ULINE.FORMAT COLOR COL_HEADING INTENSIFIED ON.WRITE :/1(1) SY-VLINE,65(65) 'SELECTION SCREEN DATA'(010),132(1) SY-VLINE.WRITE :/1(132) SY-ULINE.FORMAT INTENSIFIED OFF.

*--- Input file namePERFORM FILL_COLOR.WRITE :/1(1) SY-VLINE,2(24) 'Input File name'(011),27(2) ' : ',30(100) P_FILE,132(1) SY-VLINE.

IF NOT IT_ERROR[] IS INITIAL.*--- Setting the Error file name to .CSVPERFORM FILL_COLOR.IF G_FILEEXT = 'XLS'.IF NOT P_ERR CS '.XLS'.IF P_ERR CA '.'.P_ERR = P_ERR(SY-FDPOS).CONCATENATE P_ERR '.CSV' INTO P_ERR.ENDIF.ENDIF.P_FTYPE = 'DAT'.G_DEL = '2C'. " Hexadecimal value for ','ENDIF.*--- Error File namePERFORM FILL_COLOR.WRITE :/1(1) SY-VLINE,2(24) 'Error File name'(012),27(2) ' : ',30(100) P_ERR,132(1) SY-VLINE.ENDIF.*--- File typePERFORM FILL_COLOR.WRITE :/1(1) SY-VLINE,2(24) 'File Type'(013),27(2) ' : '.IF G_FILEEXT = 'XLS'.WRITE :30 'XLS',132(1) SY-VLINE.ELSE.WRITE :30 P_FTYPE,132(1) SY-VLINE.ENDIF.*--- BDC methodsPERFORM FILL_COLOR.IF P_CT = 'X'.WRITE :/1(1) SY-VLINE,2(24) 'Call Transaction'(014),27(2) ' : ',30 P_CT,132(1) SY-VLINE.ELSE.WRITE :/1(1) SY-VLINE,2(24) 'Create Session'(015),27(2) ' : ',30 P_BDC,132(1) SY-VLINE.ENDIF.*--- Test ModePERFORM FILL_COLOR.WRITE :/1(1) SY-VLINE,2(24) 'Test Mode'(016),27(2) ' : ',30 P_TEST,132(1) SY-VLINE.*--- Header linesPERFORM FILL_COLOR.WRITE :/1(1) SY-VLINE,2(24) 'Header Lines'(017),27(2) ' : ',30 P_HEADER LEFT-JUSTIFIED,132(1) SY-VLINE.WRITE :/1(132) SY-ULINE.

ENDFORM. " DISPLAY_SELECTION_SCR

*&---------------------------------------------------------------------**& Form DISPLAY_SUCCESS_ERROR_DATA*&---------------------------------------------------------------------** To display the no.of records,success and error records*----------------------------------------------------------------------*FORM DISPLAY_SUMMARY_REPORT.SKIP 3.FORMAT COLOR COL_HEADING INTENSIFIED ON.WRITE :/1(132) SY-ULINE.WRITE :/1(1) SY-VLINE,65 'SUMMARY REPORT'(018) CENTERED,132(1) SY-VLINE.FORMAT INTENSIFIED OFF.PERFORM FILL_COLOR.WRITE :/1(132) SY-ULINE.WRITE :/1(1) SY-VLINE,2(24) 'Processed Records'(019),27(2) ' : ',30 G_TOTAL,132(1) SY-VLINE.PERFORM FILL_COLOR.WRITE :/1(1) SY-VLINE,2(24) 'Successfully Uploaded'(020),27(2) ' : ',30 G_SUCCESS,132(1) SY-VLINE.PERFORM FILL_COLOR.WRITE :/1(1) SY-VLINE,2(24) 'Error Records'(021),27(2) ' : ',30 G_ERROR,132(1) SY-VLINE.PERFORM FILL_COLOR.WRITE :/1(1) SY-VLINE,2(24) 'Empty Records'(022),27(2) ' : ',30 G_EMPTY,132(1) SY-VLINE.WRITE :/1(132) SY-ULINE.

ENDFORM. " DISPLAY_SUMMARY_REPORT

*----------------------------------------------------------------------** Form : session_report*----------------------------------------------------------------------** To display the list of sessions created*----------------------------------------------------------------------*FORM SESSION_REPORT .IF NOT I_SESSION[] IS INITIAL.FORMAT COLOR COL_HEADING.WRITE :/01(132) SY-ULINE.WRITE :/01(01) SY-VLINE,65 'SESSIONS CREATED'(023) CENTERED,132(01) SY-VLINE.WRITE :/01(132) SY-ULINE.FORMAT INTENSIFIED OFF.

FORMAT COLOR COL_NORMAL INTENSIFIED OFF.WRITE :/01(132) SY-ULINE.LOOP AT I_SESSION.WRITE : /1 SY-VLINE.AT FIRST.WRITE : 5 'Session names'(O24).ENDAT.WRITE : 27 ':', 30 I_SESSION-NAME,132 SY-VLINE.ENDLOOP.WRITE : /01(132) SY-ULINE.ENDIF.

ENDFORM. " session_report

*&---------------------------------------------------------------------**& Form DISPLAY_ERROR_RECORDS*&---------------------------------------------------------------------** To display the error records*----------------------------------------------------------------------*FORM DISPLAY_ERROR_RECORDS.

IF G_ERROR > 0.* ---- Perform to display the error headerPERFORM DISPLAY_ERROR_HEADER.* ---- Perform to display the error recordsPERFORM DISPLAY_ERROR_DETAIL.ENDIF.

ENDFORM. " DISPLAY_ERROR_RECORDS

*&---------------------------------------------------------------------**& Form DISPLAY_ERROR_HEADER*&---------------------------------------------------------------------** To display the error header*----------------------------------------------------------------------*FORM DISPLAY_ERROR_HEADER.

FORMAT COLOR COL_HEADING INTENSIFIED ON.SKIP.WRITE :/1(132) SY-ULINE.WRITE :/1(1) SY-VLINE,65 'ERROR RECORDS'(025) CENTERED,132(1) SY-VLINE.FORMAT INTENSIFIED OFF.FORMAT COLOR COL_HEADING.WRITE :/1(132) SY-ULINE.WRITE :/1(1) SY-VLINE,2(12) 'Condition type'(026),15(1) SY-VLINE,16(20) 'Sales Organization'(027),37(1) SY-VLINE,38(50) 'Error Message'(028),132(1) SY-VLINE.WRITE :/1(132) SY-ULINE.FORMAT INTENSIFIED OFF.

ENDFORM. " DISPLAY_ERROR_HEADER

*&---------------------------------------------------------------------**& Form DISPLAY_ERROR_DETAIL*&---------------------------------------------------------------------** To display the error records*----------------------------------------------------------------------*FORM DISPLAY_ERROR_DETAIL.

FORMAT COLOR 1 INTENSIFIED OFF .LOOP AT IT_ERROR.PERFORM FILL_COLOR.WRITE : /1(1) SY-VLINE,2(12) IT_ERROR-KSCHL,15(1) SY-VLINE,* 16(20) IT_ERROR-VKORG,37(1) SY-VLINE,38(50) IT_ERROR-MESSAGE,132(1) SY-VLINE.ENDLOOP.WRITE :/1(132) SY-ULINE.

ENDFORM. " DISPLAY_ERROR_DETAIL

*&---------------------------------------------------------------------**& Form FILL_COLOR*&---------------------------------------------------------------------** To display the background color*----------------------------------------------------------------------*FORM FILL_COLOR.

IF FG_COLOR = SPACE.FORMAT COLOR 2.FG_COLOR = 'X'.ELSE.FORMAT COLOR 4.CLEAR FG_COLOR.ENDIF.ENDFORM.

*******************Recording************************0000 T VK11 BS AA X FSAPMV13A 0100 X0000 BDC_CURSOR RV13A-KSCHL0000 BDC_OKCODE /000000 RV13A-KSCHL JEXPSAPLV14A 0100 X0000 BDC_CURSOR RV130-SELKZ(03)0000 BDC_OKCODE =WEIT0000 RV130-SELKZ(01)0000 RV130-SELKZ(03) XSAPMV13A 1004 X0000 BDC_CURSOR RV13A-DATBI(01)0000 BDC_OKCODE /000000 KOMG-VKORG SAS0000 KOMG-VTWEG 020000 KOMG-MATNR(01) t1030000 RV13A-DATAB(01) 01.01.20090000 RV13A-DATBI(01) 01.04.2010SAPMV13A 1004 X0000 BDC_CURSOR KOMG-MATNR(01)0000 BDC_OKCODE =SICH

****************** Flat File****************JEXP X SAS 02 test12345 01.01.2009 01.04.2010JEXP X SAS 02 test23456 01.01.2009 01.04.2010