Z Fi BDC Asset Master

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 23

REPORT Z_FI_BDC_ASSET_MASTER NO STANDARD PAGE HEADING

MESSAGE-ID Z_MSGCLASS
LINE-SIZE 132
LINE-COUNT 65.
************************************************************************
* Program Name : Z_FI_BDC_ASSET_MASTER *
* Description : Asset Master *
* Development class : Z_DEVELOPMENT *
* 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 AS91 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 following *
* 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 *
*----------------------------------------------------------------------*
* SRDK900081 27/09/2006 Ashok Kumar.N
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* FLAGS *
*----------------------------------------------------------------------*
DATA: FG_STOP TYPE C, " Flag used to stop processing
FG_COLOR TYPE C, " Flag to set Background color
FG_OPENSESSION TYPE C. " Flag for Open Sesssion

*----------------------------------------------------------------------*
* INTERNAL TABLE DECLARATIONS *
*----------------------------------------------------------------------*
*--- Internal table for input file for ascii data load
DATA: BEGIN OF I_INFILE_ASC OCCURS 0,
STRING(1000) 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 data


IT_BDCTAB TYPE BDCDATA OCCURS 0 WITH HEADER LINE.

*----- Internal to hold the records in the text file


DATA : BEGIN OF IT_DATA OCCURS 10,
ANLKL(8), " Asset class
BUKRS(4), " Company Code
TXT50(50), " Asset description
TXA50(50), " Additional asset description
SERNR(18), " Serial number
INVNR(25), " Inventory number
MENGE(13), " Quantity
MEINS(3), " Base Unit of Measure
XHIST(1), " Asset is managed historically
IVDAT(10), " Last inventory date
INKEN(1), " Inventory indicator
AKTIV(10), " Asset capitalization date
GSBER(4), " Business Area
KOSTL(10), " Cost Center
WERKS(4), " Plant
LIFNR(10), " Account number of vendor (other key word)
HERST(30), " Manufacturer of asset
XNEU_AM(1), " Indicator: Asset purchased new
AFASL1(4), " Depreciation key1
AFASL2(4), " Depreciation key2
NDJAR1(3), " Planned useful life in years
NDJAR2(3), " Planned useful life in years
NDPER1(3), " Planned useful life in periods
NDPER2(3), " Planned useful life in periods
AFABG1(10), " Depreciation calculation start date
AFABG2(10), " Depreciation calculation start date
ANLGR(12), " Group asset
ANBTR01_1(13), " Amount posted 1 of 1
ANBTR01_6(13), " Amount posted 1 of 6
ANBTR02_1(13), " Amount posted 2 of 1
END 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 names


DATA : BEGIN OF IT_SESSION OCCURS 0,
NAME(12),
END OF IT_SESSION.

*--- Internal table to hold Collecting messages in the SAP System


DATA : IT_MSG LIKE BDCMSGCOLL OCCURS 10 WITH HEADER LINE.

*--- Internal table to hold error records to be downloaded


DATA : BEGIN OF I_FINAL OCCURS 0,
STRING(1000),
END OF I_FINAL.

*--- Internal table for session names


DATA : BEGIN OF I_SESSION OCCURS 0,
NAME(12),
END OF I_SESSION.

*--- Internal table to hold data from Excel


DATA : IT_INTERN TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.

*----------------------------------------------------------------------*
* CONSTANTS *
*----------------------------------------------------------------------*
CONSTANTS : C_FILETYPE LIKE RLGRAP-FILETYPE VALUE 'DAT', " Filetype
C_TCODE LIKE TSTC-TCODE VALUE 'AS91', " Transaction
C_MODE(1) VALUE 'A', " Mode
C_UPDATE(1) VALUE 'S', " Update
C_SESS(12) TYPE C VALUE 'ASSET_SESS'. " Session Name
*----------------------------------------------------------------------*
* DATA DECLARATIONS *
*----------------------------------------------------------------------*
DATA : G_TABIX LIKE SY-TABIX, " Table Index
G_MESG(80) TYPE C, " Message,
G_ERROR TYPE I, " No.of Errors
G_SUCCESS TYPE I, " No.of successes
G_BDC_SESS TYPE APQI-GROUPID VALUE 'UPLOAD', " Queue info defn
G_MAX TYPE I VALUE '900', " Max records
G_LINES TYPE I, " No.of records
G_INSERT TYPE I, " Insert
G_COUNTER(2) TYPE N, " No.of Sessions
G_EMPTY TYPE I, " No. of empty records
G_TOTAL TYPE I, " Total no. of records
with data
G_SESSION TYPE APQI-GROUPID, " Session name
G_DEL TYPE X VALUE '09', " To seperate fields in
case of Dat
G_SFILE(255), " File path
G_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:/ASSET_MASTER.TXT',
" Input File
P_ERR TYPE RLGRAP-FILENAME OBLIGATORY DEFAULT
'C:/ASSET_MASTER_ERR.TXT', " Error File
P_FTYPE LIKE RLGRAP-FILETYPE DEFAULT 'DAT'.
" File Type
SELECTION-SCREEN END OF BLOCK SCR1.

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


PARAMETER : P_CT RADIOBUTTON GROUP BDC, " Call Transaction
P_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


session
P_TEST AS CHECKBOX DEFAULT 'X'. " Test mode
PARAMETERS: P_HEADER TYPE I DEFAULT 0. " Header Lines
PARAMETERS: P_BEGCOL TYPE I DEFAULT 1 NO-DISPLAY, " Start Column
P_BEGROW TYPE I DEFAULT 1 NO-DISPLAY, " Start Row
P_ENDCOL TYPE I DEFAULT 100 NO-DISPLAY, " End Column
P_ENDROW TYPE I DEFAULT 32000 NO-DISPLAY. " End Row
SELECTION-SCREEN END OF BLOCK MODE.

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

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_ERR.


*--- Validating file
PERFORM VALIDATE_FILE USING P_ERR.
*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.

*--- Perform to store the data to an internal table


PERFORM READ_INPUT_FILE_DATA.
*--- Process data in non test mode only
IF P_TEST = SPACE.
IF NOT IT_DATA[] IS INITIAL.
*--- Perform to process data
PERFORM PROCESS_DATA.
ELSE.
G_MESG = 'Error in Processing BDC Data'(001).
MESSAGE I001(Z_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`ort
PERFORM DISPLAY_SEL_SCR_REPORT.
*--- Perform to display the session report
PERFORM SESSION_REPORT.
*--- Perform to display the no.of records,success and error records
PERFORM DISPLAY_SUMMARY_REPORT.
*--- Downloading error records.
PERFORM DOWNLOAD_ERROR_FILES.
*---- Perform to display the error records
PERFORM 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'
CHANGING
FILE_NAME = F_FILE
EXCEPTIONS
MASK_TOO_LONG = 1
OTHERS = 2.

IF SY-SUBRC <> 0.
*--- Display message if error occurs in getting file
G_MESG = 'Error in getting the Filename'(002).
MESSAGE I001(Z_MSGCLASS) WITH G_MESG.
ENDIF.

ENDFORM. " validate_input_file


*----------------------------------------------------------------------*
* Form : Read_inputfile
*----------------------------------------------------------------------*
* Description : To upload the data into internal table
*----------------------------------------------------------------------*
FORM READ_INPUTFILE TABLES F_INFILE
USING F_FILE TYPE RLGRAP-FILENAME
F_FILTYP TYPE RLGRAP-FILETYPE.
*--- Local variable declarations
DATA : LV_DEL TYPE CHAR01,
LV_FILE TYPE STRING.
*--- Clear and initialize variables
CLEAR F_INFILE.
REFRESH F_INFILE.
LV_FILE = F_FILE.

*--- Function module to upload the input file


IF F_FILTYP = 'DAT'.
LV_DEL = '|'.
ENDIF.
*--- Call function GUI_UPLOAD to upload data from flat file to internal table
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = LV_FILE
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = LV_DEL
TABLES
DATA_TAB = F_INFILE
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17 .

IF SY-SUBRC <> 0.
*--- Display message if error occurs in uploading data from file
G_MESG = 'Error in uploading the file'(003).
MESSAGE I001(Z_MSGCLASS) WITH G_MESG.
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 data
LOOP AT I_INFILE_ASC.

IT_DATA-ANLKL = I_INFILE_ASC-STRING+0(8).
IT_DATA-BUKRS = I_INFILE_ASC-STRING+8(4).
IT_DATA-TXT50 = I_INFILE_ASC-STRING+12(50).
IT_DATA-TXA50 = I_INFILE_ASC-STRING+62(50).
IT_DATA-SERNR = I_INFILE_ASC-STRING+112(18).
IT_DATA-INVNR = I_INFILE_ASC-STRING+130(25).
IT_DATA-MENGE = I_INFILE_ASC-STRING+155(13).
IT_DATA-MEINS = I_INFILE_ASC-STRING+168(3).
IT_DATA-XHIST = I_INFILE_ASC-STRING+171(1).
IT_DATA-IVDAT = I_INFILE_ASC-STRING+172(10).
IT_DATA-INKEN = I_INFILE_ASC-STRING+182(1).
IT_DATA-AKTIV = I_INFILE_ASC-STRING+183(10).
IT_DATA-GSBER = I_INFILE_ASC-STRING+193(4).
IT_DATA-KOSTL = I_INFILE_ASC-STRING+197(10).
IT_DATA-WERKS = I_INFILE_ASC-STRING+207(4).
IT_DATA-LIFNR = I_INFILE_ASC-STRING+211(10).
IT_DATA-HERST = I_INFILE_ASC-STRING+221(30).
IT_DATA-XNEU_AM = I_INFILE_ASC-STRING+251(1).
IT_DATA-AFASL1 = I_INFILE_ASC-STRING+252(4).
IT_DATA-AFASL2 = I_INFILE_ASC-STRING+256(4).
IT_DATA-NDJAR1 = I_INFILE_ASC-STRING+260(3).
IT_DATA-NDJAR2 = I_INFILE_ASC-STRING+263(3).
IT_DATA-NDPER1 = I_INFILE_ASC-STRING+266(3).
IT_DATA-NDPER2 = I_INFILE_ASC-STRING+269(3).
IT_DATA-AFABG1 = I_INFILE_ASC-STRING+272(10).
IT_DATA-AFABG2 = I_INFILE_ASC-STRING+282(10).
IT_DATA-ANLGR = I_INFILE_ASC-STRING+292(12).
IT_DATA-ANBTR01_1 = I_INFILE_ASC-STRING+304(13).
IT_DATA-ANBTR01_6 = I_INFILE_ASC-STRING+317(13).
IT_DATA-ANBTR02_1 = I_INFILE_ASC-STRING+330(13).

ENDLOOP.

ENDFORM. " FORMAT_ASC_DATA

*&---------------------------------------------------------------------*
*& Form error_processing
*&---------------------------------------------------------------------*
* To process the error records
*----------------------------------------------------------------------*
FORM ERROR_PROCESSING USING F_IT_DATA
F_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 session
PERFORM CLOSE_SESSION.
ENDIF.

ENDFORM. " PROCESS_DATA

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

*---- Perform to fill the fields in the screen 0105


PERFORM FILL_SCREEN_0105.
*---- Perform to fill the fields in the screen 1000
PERFORM FILL_SCREEN_1000.
*---- Perform to fill the fields in the screen 0195
PERFORM FILL_SCREEN_0195.
*---- Perform to fill the fields in the screen 1100
PERFORM FILL_SCREEN_1100.

ENDFORM. " FILL_BDCDATA

*&---------------------------------------------------------------------*
*& Form FILL_SCREEN_0105
*&---------------------------------------------------------------------*
* To fill the fields in the screen 0105
*----------------------------------------------------------------------*
FORM FILL_SCREEN_0105 .

PERFORM BDC_DYNPRO USING 'SAPLAIST' '0105'.


PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'ANLA-BUKRS'.
PERFORM BDC_FIELD USING 'ANLA-ANLKL' IT_DATA-ANLKL.
PERFORM BDC_FIELD USING 'ANLA-BUKRS' IT_DATA-BUKRS.

ENDFORM. " FILL_SCREEN_0105

*&---------------------------------------------------------------------*
*& Form FILL_SCREEN_1000
*&---------------------------------------------------------------------*
* To fill the fields in the screen 1000
*----------------------------------------------------------------------*
FORM FILL_SCREEN_1000 .

PERFORM BDC_DYNPRO USING 'SAPLAIST' '1000'.


PERFORM BDC_FIELD USING 'BDC_OKCODE' '=TAB02'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'ANLA-AKTIV'.
PERFORM BDC_FIELD USING 'ANLA-TXT50' IT_DATA-TXT50.
PERFORM BDC_FIELD USING 'ANLA-TXA50' IT_DATA-TXA50.
PERFORM BDC_FIELD USING 'ANLA-SERNR' IT_DATA-SERNR.
PERFORM BDC_FIELD USING 'ANLA-INVNR' IT_DATA-INVNR.
PERFORM BDC_FIELD USING 'ANLA-MENGE' IT_DATA-MENGE.
PERFORM BDC_FIELD USING 'ANLA-MEINS' IT_DATA-MEINS.
PERFORM BDC_FIELD USING 'RA02S-XHIST' IT_DATA-XHIST.
PERFORM BDC_FIELD USING 'ANLA-IVDAT' IT_DATA-IVDAT.
PERFORM BDC_FIELD USING 'ANLA-INKEN' IT_DATA-INKEN. " <== check
PERFORM BDC_FIELD USING 'ANLA-AKTIV' IT_DATA-AKTIV.

PERFORM BDC_DYNPRO USING 'SAPLAIST' '1000'.


PERFORM BDC_FIELD USING 'BDC_OKCODE' '=TAB04'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'ANLZ-WERKS'.
PERFORM BDC_FIELD USING 'ANLZ-GSBER' IT_DATA-GSBER.
PERFORM BDC_FIELD USING 'ANLZ-KOSTL' IT_DATA-KOSTL.
PERFORM BDC_FIELD USING 'ANLZ-WERKS' IT_DATA-WERKS.

PERFORM BDC_DYNPRO USING 'SAPLAIST' '1000'.


PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'ANLA-LIEFE'.
PERFORM BDC_FIELD USING 'ANLA-LIFNR' IT_DATA-LIFNR.
PERFORM BDC_FIELD USING 'ANLA-HERST' IT_DATA-HERST.
PERFORM BDC_FIELD USING 'RA02S-XNEU_AM' IT_DATA-XNEU_AM.

PERFORM BDC_DYNPRO USING 'SAPLAIST' '1000'.


PERFORM BDC_FIELD USING 'BDC_OKCODE' '=TAB08'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'ANLA-LIFNR'.

PERFORM BDC_DYNPRO USING 'SAPLAIST' '1000'.


PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SELZ'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'T093T-AFBKTX(02)'.
PERFORM BDC_FIELD USING 'ANLB-AFASL(01)' IT_DATA-AFASL1.
PERFORM BDC_FIELD USING 'ANLB-AFASL(02)' IT_DATA-AFASL2.
PERFORM BDC_FIELD USING 'ANLB-NDJAR(01)' IT_DATA-NDJAR1.
PERFORM BDC_FIELD USING 'ANLB-NDJAR(02)' IT_DATA-NDJAR2.
PERFORM BDC_FIELD USING 'ANLB-NDPER(01)' IT_DATA-NDPER1.
PERFORM BDC_FIELD USING 'ANLB-NDPER(02)' IT_DATA-NDPER2.
PERFORM BDC_FIELD USING 'ANLB-AFABG(01)' IT_DATA-AFABG1.
PERFORM BDC_FIELD USING 'ANLB-AFABG(02)' IT_DATA-AFABG2.

ENDFORM. " FILL_SCREEN_1000

*&---------------------------------------------------------------------*
*& Form FILL_SCREEN_0195
*&---------------------------------------------------------------------*
* To fill the fields in the screen 0195
*----------------------------------------------------------------------*
FORM FILL_SCREEN_0195 .

PERFORM BDC_DYNPRO USING 'SAPLAIST' '0195'.


PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'ANLB-ANLGR'.
PERFORM BDC_FIELD USING 'ANLB-ANLGR' IT_DATA-ANLGR.

PERFORM BDC_DYNPRO USING 'SAPLAIST' '0195'.


PERFORM BDC_FIELD USING 'BDC_OKCODE' '=ALTD'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'ANLB-ANLGR'.

ENDFORM. " FILL_SCREEN_0195

*&---------------------------------------------------------------------*
*& Form FILL_SCREEN_1100
*&---------------------------------------------------------------------*
* To fill the fields in the screen 1100
*----------------------------------------------------------------------*
FORM FILL_SCREEN_1100 .

PERFORM BDC_DYNPRO USING 'SAPLALTD' '1100'.


PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'RALT_DYNP_STRUC-
ANBTR02(01)'.
PERFORM BDC_FIELD USING 'RALT_DYNP_STRUC-ANBTR01(01)' IT_DATA-ANBTR01_1.
PERFORM BDC_FIELD USING 'RALT_DYNP_STRUC-ANBTR01(06)' IT_DATA-ANBTR01_6.
PERFORM BDC_FIELD USING 'RALT_DYNP_STRUC-ANBTR02(01)' IT_DATA-ANBTR02_1.

PERFORM BDC_DYNPRO USING 'SAPLALTD' '1100'.


PERFORM BDC_FIELD USING 'BDC_OKCODE' '=BUCH'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'ANLA-ANLN1'.

ENDFORM. " FILL_SCREEN_1100

*&---------------------------------------------------------------------*
*& 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.

*&---------------------------------------------------------------------*
*& 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.
*&---------------------------------------------------------------------*
*& Form call_transaction
*&---------------------------------------------------------------------*
* Posts data using call transaction method. *
*----------------------------------------------------------------------*
FORM CALL_TRANSACTION.

CLEAR: G_LINES,
G_MESG.
*--- Call transaction method
CALL TRANSACTION C_TCODE USING IT_BDCTAB
MODE C_MODE
UPDATE C_UPDATE
MESSAGES 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 processing
PERFORM 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'
EXPORTING
ID = I_BDCMSGCOLL-MSGID
LANG = SY-LANGU
NO = I_BDCMSGCOLL-MSGNR
V1 = I_BDCMSGCOLL-MSGV1
V2 = I_BDCMSGCOLL-MSGV2
V3 = I_BDCMSGCOLL-MSGV3
V4 = I_BDCMSGCOLL-MSGV4
IMPORTING
MSG = G_MESG.

ENDFORM. " FORMAT_MESSAGE

*----------------------------------------------------------------------*
* Form : call_session
*----------------------------------------------------------------------*
* To call the session either for FSP0 or FSP2
*----------------------------------------------------------------------*
FORM CALL_SESSION USING FP_TCODE TYPE ANY
F_MAX TYPE ANY
F_SESS1 TYPE ANY.
* To open the session
PERFORM OPEN_SESSION USING F_MAX F_SESS1.
* Perform Insert BDC Session
PERFORM BDC_INSERT USING FP_TCODE.
* To close the session
IF 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 ANY
F_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 Session
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = G_SESSION
KEEP = 'X'
USER = SY-UNAME
EXCEPTIONS
CLIENT_INVALID = 1
DESTINATION_INVALID = 2
GROUP_INVALID = 3
GROUP_IS_LOCKED = 4
HOLDDATE_INVALID = 5
INTERNAL_ERROR = 6
QUEUE_ERROR = 7
RUNNING = 8
SYSTEM_LOCK_ERROR = 9
USER_INVALID = 10
OTHERS = 11.
IF SY-SUBRC <> 0.
G_MESG = 'Error in Opening the Session'(004).
MESSAGE I001(Z_MSGCLASS) WITH G_MESG.
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 BDC
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = FP_TCODE
TABLES
DYNPROTAB = IT_BDCTAB
EXCEPTIONS
INTERNAL_ERROR = 1
NOT_OPEN = 2
QUEUE_ERROR = 3
TCODE_INVALID = 4
PRINTING_INVALID = 5
POSTING_INVALID = 6
OTHERS = 7.
IF SY-SUBRC <> 0.
G_MESG = 'Error in inserting the record'(005).
MESSAGE I001(Z_MSGCLASS) WITH G_MESG.
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'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3.

IF SY-SUBRC <> 0.
G_MESG = 'Session cannot be closed'(006).
MESSAGE I001(Z_MSGCLASS) WITH G_MESG.
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_DATA-ANLKL
IT_DATA-BUKRS
IT_DATA-TXT50
IT_DATA-TXA50
IT_DATA-SERNR
IT_DATA-INVNR
IT_DATA-MENGE
IT_DATA-MEINS
IT_DATA-XHIST
IT_DATA-IVDAT
IT_DATA-INKEN
IT_DATA-AKTIV
IT_DATA-GSBER
IT_DATA-KOSTL
IT_DATA-WERKS
IT_DATA-LIFNR
IT_DATA-HERST
IT_DATA-XNEU_AM
IT_DATA-AFASL1
IT_DATA-AFASL2
IT_DATA-NDJAR1
IT_DATA-NDJAR2
IT_DATA-NDPER1
IT_DATA-NDPER2
IT_DATA-AFABG1
IT_DATA-AFABG2
IT_DATA-ANLGR
IT_DATA-ANBTR01_1
IT_DATA-ANBTR01_6
IT_DATA-ANBTR02_1
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(8) = IT_DATA-ANLKL.
I_FINAL-STRING+8(4) = IT_DATA-BUKRS.
I_FINAL-STRING+12(50) = IT_DATA-TXT50.
I_FINAL-STRING+62(50) = IT_DATA-TXA50.
I_FINAL-STRING+112(18) = IT_DATA-SERNR.
I_FINAL-STRING+130(25) = IT_DATA-INVNR.
I_FINAL-STRING+155(13) = IT_DATA-MENGE.
I_FINAL-STRING+168(3) = IT_DATA-MEINS.
I_FINAL-STRING+171(1) = IT_DATA-XHIST.
I_FINAL-STRING+172(10) = IT_DATA-IVDAT.
I_FINAL-STRING+182(1) = IT_DATA-INKEN.
I_FINAL-STRING+183(10) = IT_DATA-AKTIV.
I_FINAL-STRING+193(4) = IT_DATA-GSBER.
I_FINAL-STRING+197(10) = IT_DATA-KOSTL.
I_FINAL-STRING+207(4) = IT_DATA-WERKS.
I_FINAL-STRING+211(10) = IT_DATA-LIFNR.
I_FINAL-STRING+221(30) = IT_DATA-HERST.
I_FINAL-STRING+251(1) = IT_DATA-XNEU_AM.
I_FINAL-STRING+252(4) = IT_DATA-AFASL1.
I_FINAL-STRING+256(4) = IT_DATA-AFASL2.
I_FINAL-STRING+260(3) = IT_DATA-NDJAR1.
I_FINAL-STRING+263(3) = IT_DATA-NDJAR2.
I_FINAL-STRING+266(3) = IT_DATA-NDPER1.
I_FINAL-STRING+269(3) = IT_DATA-NDPER2.
I_FINAL-STRING+272(10) = IT_DATA-AFABG1.
I_FINAL-STRING+282(10) = IT_DATA-AFABG2.
I_FINAL-STRING+292(12) = IT_DATA-ANLGR.
I_FINAL-STRING+304(13) = IT_DATA-ANBTR01_1.
I_FINAL-STRING+317(13) = IT_DATA-ANBTR01_6.
I_FINAL-STRING+330(13) = IT_DATA-ANBTR02_1.

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_FILE
FILETYPE = '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 =
TABLES
DATA_TAB = I_FINAL
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.
G_MESG = 'Error in downloading the file'(007).
MESSAGE I001(Z_MSGCLASS) WITH G_MESG.
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 extension


PERFORM SPLIT_FILENAME_EXT.

CASE G_FILEEXT.

WHEN 'XLS'.
*--- Perform to convert the Excel data into an internal table
PERFORM CONVERT_XLS_ITAB.
WHEN 'TXT'.
IF P_FTYPE = 'ASC'.
*--- Uploading the data from server
PERFORM READ_INPUTFILE TABLES I_INFILE_ASC
USING P_FILE P_FTYPE.
*--- Perform Formating ASC type data
PERFORM FORMAT_ASC_DATA.
ELSEIF P_FTYPE = 'DAT'.
*--- Uploading the data from server
PERFORM READ_INPUTFILE TABLES IT_DATA
USING P_FILE P_FTYPE.
ENDIF.
WHEN OTHERS.
G_MESG = 'Invalid Operation'(008).
MESSAGE I001(Z_MSGCLASS) WITH G_MESG.
CLEAR G_MESG.
FG_STOP = 'X'.
STOP.
ENDCASE.
IF NOT IT_DATA[] IS INITIAL.
*--- Perform to delete Header lines
PERFORM 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 file
CALL FUNCTION 'CV120_SPLIT_FILE'
EXPORTING
PF_FILE = G_SFILE
IMPORTING
* PFX_FILE =
PFX_EXTENSION = G_FILEEXT
* PFX_DOTEXTENSION =
.
*--- Checking the case of file extension
IF 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 <FS>.
*--- Sorting the internal table
SORT 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 row
ASSIGN COMPONENT LV_INDEX OF STRUCTURE IT_DATA TO <FS>.
IF SY-SUBRC = 0.
*--- Asigning the field value to a field symbol
MOVE IT_INTERN-VALUE TO <FS>.
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'


EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = P_BEGCOL
I_BEGIN_ROW = P_BEGROW
I_END_COL = P_ENDCOL
I_END_ROW = P_ENDROW
TABLES
INTERN = 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 data
PERFORM MOVE_DATA.
ELSE.
G_MESG = 'No values found'(009).
MESSAGE I001(Z_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 table
LOOP 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 file
DESCRIBE TABLE IT_DATA LINES G_TOTAL.
IF G_TOTAL = 0.
G_MESG = 'No records in the file'(010).
MESSAGE I001(Z_MSGCLASS) WITH G_MESG.
CLEAR 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'(011),
132(1) SY-VLINE.
WRITE :/1(132) SY-ULINE.
FORMAT INTENSIFIED OFF.

*--- Input file name


PERFORM FILL_COLOR.
WRITE :/1(1) SY-VLINE,
2(24) 'Input File name'(012),
27(2) ' : ',
30(100) P_FILE,
132(1) SY-VLINE.

IF NOT IT_ERROR[] IS INITIAL.


*--- Setting the Error file name to .CSV
PERFORM 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 name
PERFORM FILL_COLOR.
WRITE :/1(1) SY-VLINE,
2(24) 'Error File name'(013),
27(2) ' : ',
30(100) P_ERR,
132(1) SY-VLINE.
ENDIF.
*--- File type
PERFORM FILL_COLOR.
WRITE :/1(1) SY-VLINE,
2(24) 'File Type'(014),
27(2) ' : '.
IF G_FILEEXT = 'XLS'.
WRITE :30 'XLS',
132(1) SY-VLINE.
ELSE.
WRITE :30 P_FTYPE,
132(1) SY-VLINE.
ENDIF.
*--- BDC methods
PERFORM FILL_COLOR.
IF P_CT = 'X'.
WRITE :/1(1) SY-VLINE,
2(24) 'Call Transaction'(015),
27(2) ' : ',
30 P_CT,
132(1) SY-VLINE.
ELSE.
WRITE :/1(1) SY-VLINE,
2(24) 'Create Session'(016),
27(2) ' : ',
30 P_BDC,
132(1) SY-VLINE.
ENDIF.
*--- Test Mode
PERFORM FILL_COLOR.
WRITE :/1(1) SY-VLINE,
2(24) 'Test Mode'(017),
27(2) ' : ',
30 P_TEST,
132(1) SY-VLINE.
*--- Header lines
PERFORM FILL_COLOR.
WRITE :/1(1) SY-VLINE,
2(24) 'Header Lines'(018),
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'(019) 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'(020),
27(2) ' : ',
30 G_TOTAL,
132(1) SY-VLINE.
PERFORM FILL_COLOR.
WRITE :/1(1) SY-VLINE,
2(24) 'Successfully Uploaded'(021),
27(2) ' : ',
30 G_SUCCESS,
132(1) SY-VLINE.
PERFORM FILL_COLOR.
WRITE :/1(1) SY-VLINE,
2(24) 'Error Records'(022),
27(2) ' : ',
30 G_ERROR,
132(1) SY-VLINE.
PERFORM FILL_COLOR.
WRITE :/1(1) SY-VLINE,
2(24) 'Empty Records'(023),
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'(024) 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'(O25).
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 header
PERFORM DISPLAY_ERROR_HEADER.
* ---- Perform to display the error records
PERFORM 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'(026) CENTERED,
132(1) SY-VLINE.
FORMAT INTENSIFIED OFF.
FORMAT COLOR COL_HEADING.
WRITE :/1(132) SY-ULINE.
WRITE :/1(1) SY-VLINE,
2(12) 'Asset Class'(027),
15(1) SY-VLINE,
16(13) 'Company Code'(028),
35(1) SY-VLINE,
37(50) 'Error Message'(029),
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-ANLKL,
15(1) SY-VLINE,
16(13) IT_ERROR-BUKRS,
35(1) SY-VLINE,
37(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. " FILL_COLOR

*Text elements
*----------------------------------------------------------
* 001 Error in Processing BDC Data
* 002 Error in getting the Filename
* 003 Error in uploading the file
* 004 Error in Opening the Session
* 005 Error in inserting the record
* 006 Session cannot be closed
* 007 Error in downloading the file
* 008 Invalid Operation
* 009 No values found
* 010 No records in the file
* 011 SELECTION SCREEN DATA
* 012 Input File name
* 013 Error File name
* 014 File Type
* 015 Call Transaction
* 016 Create Session
* 017 Test Mode
* 018 Header Lines
* 019 SUMMARY REPORT
* 020 Processed Records
* 021 Successfully Uploaded
* 022 Error Records
* 023 Empty Records
* 024 SESSIONS CREATED
* 026 ERROR RECORDS
* 027 Asset Class
* 028 Company Code
* 029 Error Message
* O25 Session names

*Selection texts
*----------------------------------------------------------
* P_BDC BDC Session
* P_CT Call Transaction
* P_ERR Error File Name
* P_FILE Input File Name
* P_FTYPE File Type
* P_HEADER No. of Header Records
* P_MAX Maximum No. of Records
* P_SESS1 Session Name
* P_TEST Test Mode

*Messages
*----------------------------------------------------------
*
* Message class: Z_MSGCLASS
*001 &

You might also like