Bdc for Vk11 T.CODE
-
Upload
shiva-annaldas -
Category
Documents
-
view
332 -
download
5
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