07-21-2007 5:34 AM
hi all,
i m doing BDC using Call transaction method...after call statement i m displaying some text.......if there is no error occur than i want to display that text...............
so pls, tell me how can i know that...during call transaction error occur or not.........
Regards,
Imran
07-21-2007 5:40 AM
You can use the statement: please click F1 on the CALL TRAN... for more syntax details. Also Call the TRANSACTION in synchronouse mode.
CALL TRANSACTION ...........MESSAGE INTO [Message TAB].
IF sy-subrc <> 0. "<---for synchronous update
ENDIF.
Now check this message table to find out any error by looking at the message type and message id.
Regards,
A.Singh
Message was edited by:
Amarjit Singh
07-21-2007 5:40 AM
You can use the statement: please click F1 on the CALL TRAN... for more syntax details. Also Call the TRANSACTION in synchronouse mode.
CALL TRANSACTION ...........MESSAGE INTO [Message TAB].
IF sy-subrc <> 0. "<---for synchronous update
ENDIF.
Now check this message table to find out any error by looking at the message type and message id.
Regards,
A.Singh
Message was edited by:
Amarjit Singh
07-21-2007 5:53 AM
hi,
in call transaction you can handle the errors in the below way...
DATA : I_MSG LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA : BEGIN OF I_ERR OCCURS 0,
MATNR(18),
FLAG(1),
MSG(100),
END OF I_ERR.
DATA :V_LINES TYPE I.
LOOP AT ITAB.
REFRESH BDCTAB.
PERFORM SCREEN USING: 'SAPLMGMM' '0060'.
PERFORM FIELD USING: 'RMMG1-MATNR' ITAB-MATNR,
'RMMG1-MBRSH' ITAB-MBRSH ,
'RMMG1-MTART' ITAB-MTART,
'BDC_OKCODE' '/00'.
PERFORM SCREEN USING: 'SAPLMGMM' '0070'.
PERFORM FIELD USING: 'MSICHTAUSW-KZSEL(01)' 'X' ,
'MSICHTAUSW-KZSEL(02)' 'X' ,
'MSICHTAUSW-KZSEL(09)' 'X' ,
'BDC_OKCODE' '=ENTR'.
PERFORM SCREEN USING: 'SAPLMGMM' '0080'.
PERFORM FIELD USING: 'RMMG1-WERKS' ITAB-WERKS,
'BDC_OKCODE' '=ENTR'.
PERFORM SCREEN USING: 'SAPLMGMM' '4004'.
PERFORM FIELD USING: 'MAKT-MAKTX' ITAB-MAKTX,
'MARA-MEINS' 'EA' ,
'MARA-MATKL' '001',
'BDC_OKCODE' '/00'.
PERFORM SCREEN USING: 'SAPLMGMM' '4004'.
PERFORM FIELD USING: 'BDC_OKCODE' '/00'.
PERFORM SCREEN USING: 'SAPLMGMM' '4000'.
PERFORM FIELD USING: 'MAKT-MAKTX' ITAB-MAKTX,
'MARA-MEINS' 'EA',
'MARC-EKGRP' '001',
'MARA-MATKL' '001',
'BDC_OKCODE' '=BU'.
CALL TRANSACTION 'MM01' USING BDCTAB
MODE 'A'
MESSAGES INTO I_MSG.
FINDING LAST MESSAGE IN THE I_MSG TABLE*****
DESCRIBE TABLE I_MSG LINES V_LINES.
ACCORDING TO THE V_LINES NUMBER TABLE WILL BE READ****
READ TABLE I_MSG INDEX V_LINES.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = I_MSG-MSGID
LANG = '-D'
NO = I_MSG-MSGNR
V1 = I_MSG-MSGV1
V2 = I_MSG-MSGV2
V3 = I_MSG-MSGV3
V4 = I_MSG-MSGV4
IMPORTING
MSG = I_ERR-MSG
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF I_MSG-MSGID EQ 'M3' AND I_MSG-MSGNR EQ '800'.
I_ERR-FLAG = 'S'.
ELSE.
I_ERR-FLAG = 'E'.
ENDIF.
I_ERR-MATNR = ITAB-MATNR.
APPEND I_ERR.
CLEAR I_ERR.
ENDLOOP.
WRITE:/ 'SUCCESS RECORDS' COLOR COL_POSITIVE.
SKIP.
WRITE:/ 'MATERIAL' COLOR COL_HEADING, 20 'MESSAGE' COLOR COL_HEADING.
LOOP AT I_ERR WHERE FLAG EQ 'S'.
WRITE:/ I_ERR-MATNR, 20 I_ERR-MSG.
ENDLOOP.
SKIP 2.
WRITE:/ 'ERROR RECORDS' COLOR COL_NEGATIVE.
SKIP.
WRITE:/ 'MATERIAL' COLOR COL_HEADING, 20 'MESSAGE' COLOR COL_HEADING.
LOOP AT I_ERR WHERE FLAG EQ 'E'.
WRITE:/ I_ERR-MATNR, 20 I_ERR-MSG.
ENDLOOP.
&----
*& Form SCREEN
&----
SCREEN
----
form SCREEN using P_PROG P_SCREEN.
BDCTAB-PROGRAM = P_PROG.
BDCTAB-DYNPRO = P_SCREEN.
BDCTAB-DYNBEGIN = 'X'.
APPEND BDCTAB.
CLEAR BDCTAB.
endform. " SCREEN
&----
*& Form FIELD
&----
FIELD
----
form FIELD using FNAME FVAL .
BDCTAB-FNAM = FNAME.
BDCTAB-FVAL = FVAL.
APPEND BDCTAB.
CLEAR BDCTAB.
endform. " FIELD
Thanks,
Murali
07-21-2007 6:41 AM
Hi
See this code
you can display that text when the sy-subrc = 0 for the call transaction
REPORT ZMMBDC1_1 NO STANDARD PAGE HEADING MESSAGE-ID ZT.
************************************************************************
Declaration of internal tables
************************************************************************
internal table for selecting data from flat file
DATA : BEGIN OF IT_DATA OCCURS 0,
MBRSH, " Industry sector
MTART(4), " Material type
KZSEL, " Checkbox
MAKTX(40), " Material description
MEINS(3), " Base unit of measure
MATKL(9), " Material group
BISMT(18), " Old material number
END OF IT_DATA.
internal table for bdcdata
DATA : IT_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
internal table to handle messages
DATA : IT_MESSAGES LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
************************************************************************
Variables & Flag declaration
************************************************************************
variables declaration
DATA : V_MESG(50).
flag declaration
DATA : FG_BDC,
FG_FLAG1 TYPE I.
************************************************************************
selection screen
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
************************************************************************
parameter
************************************************************************
PARAMETERS : P_FILE LIKE RLGRAP-FILENAME OBLIGATORY.
SELECTION-SCREEN END OF BLOCK BLK1.
************************************************************************
initialization
************************************************************************
INITIALIZATION.
peform to initialize parameter
PERFORM INIT_PARM.
************************************************************************
start of selection
************************************************************************
start-of-selection.
perform to upload it_data
PERFORM UP_LOAD_IT_DATA.
perform transfer data
PERFORM TRANSFER_DATA.
end of selection
END-OF-SELECTION.
&----
*& Form INIT_PARM
&----
Initializing parameter
----
FORM INIT_PARM.
P_FILE = 'C:\'.
ENDFORM. " INIT_PARM
&----
*& Form UP_LOAD_IT_DATA
&----
Transfering data from file to internal table
----
FORM UP_LOAD_IT_DATA.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = P_FILE
FILETYPE = 'ASC'
TABLES
DATA_TAB = IT_DATA
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
GUI_REFUSE_FILETRANSFER = 8
OTHERS = 9.
IF SY-SUBRC = 2 .
FG_FLAG1 = 1.
MESSAGE I001.
ENDIF.
ENDFORM. " UP_LOAD_IT_DATA
&----
*& Form TRANSFER_DATA
&----
Processing the data
----
FORM TRANSFER_DATA.
FG_BDC = 'N'.
LOOP AT IT_DATA.
perform to fill it_bdcdata.
PERFORM FILL_IT_BDCDATA.
CALL TRANSACTION 'MM01' USING IT_BDCDATA MODE 'N' UPDATE 'S'
MESSAGES INTO IT_MESSAGES.
IF SY-SUBRC <> 0.
FG_FLAG1 = 1.
if error occurs in transaction mode run bdc session for that data
PERFORM BDC_PROCESS.
ELSE.
<b>< in this place you can display the text></b>
ENDIF.
Handles error messages
PERFORM ERROR_MESSAGES.
CLEAR : IT_BDCDATA,IT_DATA,IT_MESSAGES.
REFRESH : IT_BDCDATA,IT_MESSAGES.
ENDLOOP.
IF FG_FLAG1 = 0.
MESSAGE I003.
ENDIF.
IF FG_BDC = 'O'.
close bdc if it is open
PERFORM CLOSE_BDC.
ENDIF.
ENDFORM. " TRANSFER_DATA
&----
*& Form FILL_IT_BDCDATA
&----
Filling Bdcdata structure with it_data
Some fields have been commented for future updations
----
FORM FILL_IT_BDCDATA.
PERFORM BDC_DYNPRO USING : 'SAPLMGMM' '0060'.
PERFORM BDC_FIELD USING : 'BDC_OKCODE' '/00',
: 'BDC_CURSOR' 'RMMG1_REF-MATNR',
: 'RMMG1-MBRSH' IT_DATA-MBRSH,
: 'RMMG1-MTART' IT_DATA-MTART.
PERFORM BDC_DYNPRO USING : 'SAPLMGMM' '0070'.
PERFORM BDC_FIELD USING : 'BDC_OKCODE' '=RESA'.
PERFORM BDC_DYNPRO USING : 'SAPLMGMM' '0070'.
PERFORM BDC_FIELD USING : 'BDC_OKCODE' '=ENTR',
: 'MSICHTAUSW-KZSEL(01)' IT_DATA-KZSEL.
PERFORM BDC_DYNPRO USING : 'SAPLMGMM' '4000'.
PERFORM BDC_FIELD USING : 'BDC_OKCODE' '=BU',
: 'BDC_SUBSCR' 'SAPLMGMM' & ' 2000TABFRA1',
: 'BDC_SUBSCR' 'SAPLMGD1' & ' 1002SUB1',
: 'BDC_CURSOR' 'MAKT-MAKTX',
: 'MAKT-MAKTX' IT_DATA-MAKTX,
: 'BDC_SUBSCR' 'SAPLMGD1' & ' 2001SUB2',
: 'MARA-MEINS' IT_DATA-MEINS,
: 'MARA-MATKL' IT_DATA-MATKL,
: 'MARA-BISMT' IT_DATA-BISMT,
: 'BDC_OKCODE' '=BU'.
*perform bdc_field using 'MARA-EXTWG' ''.
*perform bdc_field using 'MARA-LABOR' ''.
*perform bdc_field using 'MARA-KOSCH' ''.
*perform bdc_field using 'MARA-MSTAE' ''.
*perform bdc_field using 'MARA-MSTDE' ''.
*perform bdc_field using 'BDC_SUBSCR' 'SAPLMGD1' & ' 2561SUB3'.
*perform bdc_field using 'MARA-BEGRU' ''.
*perform bdc_field using 'BDC_SUBSCR' 'SAPLMGD1' & ' 2007SUB4'.
*perform bdc_field using 'MARA-NTGEW' ''.
*perform bdc_field using 'MARA-BRGEW' ''.
*perform bdc_field using 'MARA-GEWEI' ''.
*perform bdc_field using 'MARA-VOLUM' ''.
*perform bdc_field using 'MARA-VOLEH' ''.
*PERFORM BDC_FIELD USING 'MARA-GROES' ''.
*perform bdc_field using 'MARA-EAN11' ''.
*perform bdc_field using 'MARA-NUMTP' ''.
*PERFORM BDC_FIELD USING 'BDC_SUBSCR' 'SAPLMGD1' & ' 2005SUB5'.
*perform bdc_field using 'BDC_SUBSCR' 'SAPLMGD1' & ' 2011SUB6'.
*perform bdc_field using 'MARA-MAGRV' ''.
ENDFORM. " FILL_IT_BDCDATA
&----
*& Form BDC_DYNPRO
&----
Filling the it_bdcdata table with program name & screen number
----
FORM BDC_DYNPRO USING PROGRAM LIKE BDCDATA-PROGRAM
DYNPRO LIKE BDCDATA-DYNPRO.
IT_BDCDATA-PROGRAM = PROGRAM.
IT_BDCDATA-DYNPRO = DYNPRO.
IT_BDCDATA-DYNBEGIN = 'X'.
APPEND IT_BDCDATA.
CLEAR IT_BDCDATA.
ENDFORM. " BDC_DYNPRO
&----
*& Form BDC_FIELD
&----
Filling it_bdcdata with field name and field value
----
FORM BDC_FIELD USING FNAM LIKE BDCDATA-FNAM
FVAL.
IT_BDCDATA-FNAM = FNAM.
IT_BDCDATA-FVAL = FVAL.
APPEND IT_BDCDATA.
CLEAR IT_BDCDATA.
ENDFORM. " BDC_FIELD
&----
*& Form ERROR_MESSAGES
&----
Displaying error messages
----
FORM ERROR_MESSAGES.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = SY-MSGID
LANG = '-D'
IMPORTING
MSG = V_MESG
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
LOOP AT IT_MESSAGES WHERE MSGTYP = 'E'.
WRITE : / 'Message :'(I06) ,V_MESG.
CLEAR IT_MESSAGES.
ENDLOOP.
ENDFORM. " ERROR_MESSAGES
&----
*& Form BDC_PROCESS
&----
Open bdc session if call transaction fails
----
FORM BDC_PROCESS.
IF FG_BDC = 'N'.
open bdc session
PERFORM OPEN_BDC.
FG_BDC = 'O'.
ENDIF.
IF FG_BDC = 'O'.
insert data into bdc session
PERFORM INSERT_BDC.
ENDIF.
ENDFORM. " BDC_PROCESS
&----
*& Form OPEN_BDC
&----
Calling function module to open bdc session
----
FORM OPEN_BDC.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = 'SMM1'
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.
ENDFORM. " OPEN_BDC
&----
*& Form INSERT_BDC
&----
Insert it_bdcdata into bdc by calling function module bdc_insert
----
FORM INSERT_BDC.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'MM01'
TABLES
DYNPROTAB = IT_BDCDATA
EXCEPTIONS
INTERNAL_ERROR = 1
NOT_OPEN = 2
QUEUE_ERROR = 3
TCODE_INVALID = 4
PRINTING_INVALID = 5
POSTING_INVALID = 6
OTHERS = 7.
ENDFORM. " INSERT_BDC
&----
*& Form CLOSE_BDC
&----
Closing bdc session
----
FORM CLOSE_BDC.
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3.
ENDFORM. " CLOSE_BDC
<b>Reward points for useful Answers</b>
Regards
Anji
07-21-2007 7:36 AM
Hi
BDC using Call transaction involves calling an SAP transaction in back ground from within the ABAP
program. The process involves building an Internal BDC table containing the screen information needed to
execute the required transaction and then passing this to the Call transaction command
The full procedure for creating a BDC program is as follows:
<b>For a BDC upload you need to write a program which created BDC sessions</b>.
<u><b>Steps:</b></u>
1. Work out the transaction you would use to create the data manually.
2. Use transaction SHDB to record the creation of one material master data.
Click the New recording button or the Menu - Recording - Create
3. Save the recording, and then go back a screen and go to the overview.
4. Select the recording and click on Edit - Create Program. Give the program a Z name, and select transfer from recording.
5. Edit the program. You will see that all the data you entered is hard-coded into the program. You need to make the following changes:
5.1 After the start-of-selection, Call ws_upload to upload the file (the excel file needs to be saved as TAB separated).
5.2 After the open-group, Loop on the uploaded data. For each line, perform validation checks on the data, then modify the perform bdc_field commands to use the file data.
5.3. After perform bdc_transaction, add the endloop.
Execute the program. It will have options to create a batch session or to process directly.
These are all my finds . Might be it will be useful to you.
Direct call of transactions, session handling:
/nxxxx This terminates the current transaction, and starts transaction xxxx
/n This terminates the transaction. This generally corresponds to pressing F15 to go back.
/nend This termiantes all separate sessions and logs off (corresponds to System - Logoff).
/nex This terminates all separate sessions and logs off immediately (without any warning!).
/oxxxx This opens a new session and starts transaction xxxx in This session.
/o This lists existing sessions and allows deletion or opening of a new session.
/i This terminates the current session (corresponds to System End
/i1, /i2,... This terminates the session with the number given.
.xyzw Fast path: 'xyzw' refers to the underlined letters in the menus. This type of navigation is uncommon and is provided more for emergencies (such as a defective mouse).
Batch
The following commands can be entered in correction mode ('Process in foreground' or 'Display errors only') when processing a batch input session:
/n This terminates the current batch input transaction and characterizes it as
/bdel This deletes the current batch input transaction.
/bend This terminates batch input processing and sets the session to Failed
/bda This switches from Display errors only to Process in foreground
/bde This switches from Process in foreground to Display errors only
ABAP/4
/h This switches into debugging mode.
/hs This switches into debugging mode and activates the debugging of system functions.
Buffer
<u><b>WARNING:</b></u> Resetting buffers can significantly change the performance of the entire system for a long time.
It should therefore only be used where there is a good reason tdso. As of release 3.0B system administator authorization is required (authorization object (S_ADMI_FCD). The action is noted in the system log.
/$SYNC This resets all buffers of the application server
/$CUA This resets the CUA buffer of the application server
/$TAB This resets the TABLE buffers of the application server
/$NAM This resets the nametab buffer of the application server
/$DYNP This resets the screen buffer of the application server
<b>Check this sample report</b>
*-----------------------------------------------------------------------
* Data declaration
TABLES: ekko, ekpo.
TYPES: BEGIN OF t_ekko,
ebeln TYPE ekko-ebeln,
waers TYPE ekko-waers,
netpr TYPE ekpo-netpr,
err_msg(73) TYPE c,
END OF t_ekko.
DATA: it_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
wa_ekko TYPE t_ekko,
it_error TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
wa_error TYPE t_ekko,
it_success TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
wa_success TYPE t_ekko.
DATA: w_textout LIKE t100-text.
DATA: gd_update TYPE i,
gd_lines TYPE i.
*Used to store BDC data
DATA: BEGIN OF bdc_tab OCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA: END OF bdc_tab.
*Used to stores error information from CALL TRANSACTION Function Module
DATA: BEGIN OF messtab OCCURS 0.
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF messtab.
*-----------------------------------------------------------------------
*Screen declaration
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME
TITLE text-001. "Purchase order Num
SELECT-OPTIONS: so_ebeln FOR ekko-ebeln OBLIGATORY.
SELECTION-SCREEN END OF BLOCK block1.
SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME
TITLE text-002. "New NETPR value
PARAMETERS: p_newpr(14) TYPE c obligatory. "LIKE ekpo-netpr.
SELECTION-SCREEN END OF BLOCK block2.
************************************************************************
*START-OF-SELECTION
START-OF-SELECTION.
* Retrieve data from Purchase order table(EKKO)
SELECT ekko~ebeln ekko~waers ekpo~netpr
INTO TABLE it_ekko
FROM ekko AS ekko INNER JOIN ekpo AS ekpo
ON ekpo~ebeln EQ ekko~ebeln
WHERE ekko~ebeln IN so_ebeln AND
ekpo~ebelp EQ '10'.
************************************************************************
*END-OF-SELECTION
END-OF-SELECTION.
* Check data has been retrieved ready for processing
DESCRIBE TABLE it_ekko LINES gd_lines.
IF gd_lines LE 0.
* Display message if no data has been retrieved
MESSAGE i003(zp) WITH 'No Records Found'(001).
LEAVE TO SCREEN 0.
ELSE.
* Update Customer master data (instalment text)
LOOP AT it_ekko INTO wa_ekko.
PERFORM bdc_update.
ENDLOOP.
* Display message confirming number of records updated
IF gd_update GT 1.
MESSAGE i003(zp) WITH gd_update 'Records updated'(002).
ELSE.
MESSAGE i003(zp) WITH gd_update 'Record updated'(003).
ENDIF.
* Display Success Report
* **********************
* Check Success table
DESCRIBE TABLE it_success LINES gd_lines.
IF gd_lines GT 0.
* Display result report column headings
PERFORM display_column_headings.
* Display result report
PERFORM display_report.
ENDIF.
* Display Error Report
* ********************
* Check errors table
DESCRIBE TABLE it_error LINES gd_lines.
* If errors exist then display errors report
IF gd_lines GT 0.
* Display errors report
PERFORM display_error_headings.
PERFORM display_error_report.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form DISPLAY_COLUMN_HEADINGS
*&---------------------------------------------------------------------*
* Display column headings
*----------------------------------------------------------------------*
FORM display_column_headings.
WRITE:2 ' Success Report '(014) COLOR COL_POSITIVE.
SKIP.
WRITE:2 'The following records updated successfully:'(013).
WRITE:/ sy-uline(42).
FORMAT COLOR COL_HEADING.
WRITE:/ sy-vline,
(10) 'Purchase Order'(004), sy-vline,
(11) 'Old Netpr'(005), sy-vline,
(11) 'New Netpr'(006), sy-vline.
WRITE:/ sy-uline(42).
ENDFORM. " DISPLAY_COLUMN_HEADINGS
*&---------------------------------------------------------------------*
*& Form BDC_UPDATE
*&---------------------------------------------------------------------*
* Populate BDC table and call transaction ME22
*----------------------------------------------------------------------*
FORM bdc_update.
PERFORM dynpro USING:
'X' 'SAPMM06E' '0105',
' ' 'BDC_CURSOR' 'RM06E-BSTNR',
' ' 'RM06E-BSTNR' wa_ekko-ebeln,
' ' 'BDC_OKCODE' '/00', "OK code
'X' 'SAPMM06E' '0120',
' ' 'BDC_CURSOR' 'EKPO-NETPR(01)',
' ' 'EKPO-NETPR(01)' p_newpr,
' ' 'BDC_OKCODE' '=BU'. "OK code
* Call transaction to update customer instalment text
CALL TRANSACTION 'ME22' USING bdc_tab MODE 'N' UPDATE 'S'
MESSAGES INTO messtab.
* Check if update was succesful
IF sy-subrc EQ 0.
ADD 1 TO gd_update.
APPEND wa_ekko TO it_success.
ELSE.
* Retrieve error messages displayed during BDC update
LOOP AT messtab WHERE msgtyp = 'E'.
* Builds actual message based on info returned from Call transaction
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = messtab-msgid
msgnr = messtab-msgnr
msgv1 = messtab-msgv1
msgv2 = messtab-msgv2
msgv3 = messtab-msgv3
msgv4 = messtab-msgv4
IMPORTING
message_text_output = w_textout.
ENDLOOP.
* Build error table ready for output
wa_error = wa_ekko.
wa_error-err_msg = w_textout.
APPEND wa_error TO it_error.
CLEAR: wa_error.
ENDIF.
* Clear bdc date table
CLEAR: bdc_tab.
REFRESH: bdc_tab.
ENDFORM. " BDC_UPDATE
*---------------------------------------------------------------------*
* FORM DYNPRO *
*---------------------------------------------------------------------*
* stores values to bdc table *
*---------------------------------------------------------------------*
* --> DYNBEGIN *
* --> NAME *
* --> VALUE *
*---------------------------------------------------------------------*
FORM dynpro USING dynbegin name value.
IF dynbegin = 'X'.
CLEAR bdc_tab.
MOVE: name TO bdc_tab-program,
value TO bdc_tab-dynpro,
'X' TO bdc_tab-dynbegin.
APPEND bdc_tab.
ELSE.
CLEAR bdc_tab.
MOVE: name TO bdc_tab-fnam,
value TO bdc_tab-fval.
APPEND bdc_tab.
ENDIF.
ENDFORM. " DYNPRO
*&---------------------------------------------------------------------*
*& Form DISPLAY_REPORT
*&---------------------------------------------------------------------*
* Display Report
*----------------------------------------------------------------------*
FORM display_report.
FORMAT COLOR COL_NORMAL.
* Loop at data table
LOOP AT it_success INTO wa_success.
WRITE:/ sy-vline,
(10) wa_success-ebeln, sy-vline,
(11) wa_success-netpr CURRENCY wa_success-waers, sy-vline,
(11) p_newpr, sy-vline.
CLEAR: wa_success.
ENDLOOP.
WRITE:/ sy-uline(42).
REFRESH: it_success.
FORMAT COLOR COL_BACKGROUND.
ENDFORM. " DISPLAY_REPORT
*&---------------------------------------------------------------------*
*& Form DISPLAY_ERROR_REPORT
*&---------------------------------------------------------------------*
* Display error report data
*----------------------------------------------------------------------*
FORM display_error_report.
LOOP AT it_error INTO wa_error.
WRITE:/ sy-vline,
(10) wa_error-ebeln, sy-vline,
(11) wa_error-netpr CURRENCY wa_error-waers, sy-vline,
(73) wa_error-err_msg, sy-vline.
ENDLOOP.
WRITE:/ sy-uline(104).
REFRESH: it_error.
ENDFORM. " DISPLAY_ERROR_REPORT
*&---------------------------------------------------------------------*
*& Form DISPLAY_ERROR_HEADINGS
*&---------------------------------------------------------------------*
* Display error report headings
*----------------------------------------------------------------------*
FORM display_error_headings.
SKIP.
WRITE:2 ' Error Report '(007) COLOR COL_NEGATIVE.
SKIP.
WRITE:2 'The following records failed during update:'(008).
WRITE:/ sy-uline(104).
FORMAT COLOR COL_HEADING.
WRITE:/ sy-vline,
(10) 'Purchase Order'(009), sy-vline,
(11) 'Netpr'(010), sy-vline,
(73) 'Error Message'(012), sy-vline.
WRITE:/ sy-uline(104).
FORMAT COLOR COL_NORMAL.
ENDFORM. " DISPLAY_ERROR_HEADINGS
<b>Check this link for creating BDC with Screen shots</b>
http://www.sapdevelopment.co.uk/bdc/bdc_recording.htm
<b>Check this link on BDC doubts</b>
http://www.sap-img.com/abap/difference-between-batch-input-and-call-transaction-in-bdc.htm
Reward all helpfull answers
Regards
Pavan
Message was edited by:
Pavan praveen
07-21-2007 8:28 AM
This program will surely solve ur question....it consists of a include file in it...which im specying after the program
***********************
program
**********************
REPORT ZBDC_POSTING
NO STANDARD PAGE HEADING LINE-SIZE 255
MESSAGE-ID ZPP.
******************
INCLUDE BDCRECX1.
******************
*PARAMETERS: dataset(132) LOWER CASE.
TYPE-POOLS :SLIS.
TABLES : MAKT, MKAL.
DATA: WK_ELPRO TYPE MKAL-ALORT,
WK_MAKT TYPE MAKT-MAKTX,
WK_SUCCESS(5) TYPE C,
WK_FAILURE(5) TYPE C,
L_MSTRING(480),
T_DATE TYPE ZSERVICE_DATE,
WK_LINES(5) TYPE C,
LINES(5) TYPE C,
WK_LEN(150) TYPE C,
WK_ALP TYPE I,
LENT TYPE I,
B(4).
DATA: ALVFLD TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
V_EVENTS TYPE SLIS_T_EVENT WITH HEADER LINE,
WK_EVENTS LIKE LINE OF V_EVENTS,
IT_LIST_COMMENTS TYPE SLIS_T_LISTHEADER,
WK_LIST_COMMENTS LIKE LINE OF IT_LIST_COMMENTS,
WA_COLOR TYPE LVC_S_SCOL,
WK_LAYOUT TYPE SLIS_LAYOUT_ALV.
CONSTANTS: C_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME
VALUE 'F_TOP_OF_PAGE'.
--
Generated data section with specific formatting - DO NOT CHANGE ***
DATA: BEGIN OF RECORD OCCURS 0,
BUDAT_002(010),
BKTXT_004(025),
MATNR_005(018),
WERKS_006(004),
ALORT_007(004),
ERFMG_008(017),
END OF RECORD.
End generated data section ***
----
DATA: BEGIN OF MESSAGES OCCURS 0, "TO STORE FINAL STATUS DISPLAY
BUDAT_002(010),
BKTXT_004(025),
MATNR_005(018),
MAKTX TYPE MAKT-MAKTX,
WERKS_006(004),
ALORT_007(004),
ERFMG_008(017),
MSG_W(100),
MSG_E(100),
MSG_S(100),
MSGTYP TYPE C,
CELLCOLOR TYPE LVC_T_SCOL,
END OF MESSAGES.
DATA: BEGIN OF ST_RECORD1 ,
MATNR_005(018),
WERKS_006(004),
BUDAT_002(010),
BKTXT_004(025),
ERFMG_007(017),
ERFMG_008(017),
ALORT_007(004),
END OF ST_RECORD1.
DATA : RECORD1 LIKE TABLE OF ST_RECORD1 WITH HEADER LINE,
IT_EXCEL LIKE TABLE OF ALSMEX_TABLINE WITH HEADER LINE,
MESSTAB1 LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE,
IT_ACC LIKE TABLE OF RECORD WITH HEADER LINE,
IT_REJ LIKE TABLE OF RECORD WITH HEADER LINE.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-002.
PARAMETERS: P_FILE TYPE LOCALFILE OBLIGATORY .
SELECTION-SCREEN END OF BLOCK B1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
STATIC = 'X'
CHANGING
FILE_NAME = P_FILE.
AT SELECTION-SCREEN ON P_FILE.
WK_LEN = P_FILE.
CONDENSE WK_LEN NO-GAPS.
LENT = STRLEN( WK_LEN ).
WK_ALP = LENT - 4.
B = WK_LEN+WK_ALP(LENT).
IF ( B NE '.txt' ) AND ( B NE '.xls' ).
MESSAGE E939.
CLEAR P_FILE.
STOP.
ENDIF.
START-OF-SELECTION.
PERFORM UPLOAD_FUN.
PERFORM OPEN_GROUP.
PERFORM FILL_BDC_TABLE.
PERFORM CLOSE_GROUP.
PERFORM ASSIGN_COLORS.
PERFORM F_EVENT_BUILD.
SORT MESSAGES BY MATNR_005 ASCENDING.
PERFORM ASSIGN_COLUMNS.
PERFORM COUNT.
IF CTU = 'X'.
PERFORM ALV.
ENDIF.
FREE:MESSAGES,MESSTAB1,RECORD1.
END-OF-SELECTION.
--
FORM UPLOAD_FUN.
REFRESH: RECORD1, IT_ACC, IT_REJ, RECORD, MESSAGES, MESSTAB1, IT_EXCEL.
PERFORM FETCH_FROM_FLAT_FILE.
CLEAR IT_EXCEL.
DESCRIBE TABLE IT_EXCEL.
IF SY-TFILL = 0.
MESSAGE I937.
STOP.
ENDIF.
LOOP AT IT_EXCEL.
CASE IT_EXCEL-COL.
WHEN '0001'.
MOVE: IT_EXCEL-VALUE TO RECORD1-MATNR_005.
WHEN '0002'.
MOVE: IT_EXCEL-VALUE TO RECORD1-WERKS_006.
WHEN '0003'.
MOVE: IT_EXCEL-VALUE TO RECORD1-BUDAT_002.
WHEN '0004'.
MOVE: IT_EXCEL-VALUE TO RECORD1-BKTXT_004.
WHEN '0005'.
MOVE: IT_EXCEL-VALUE TO RECORD1-ERFMG_007.
WHEN '0006'.
MOVE: IT_EXCEL-VALUE TO RECORD1-ERFMG_008.
WHEN '0007'.
MOVE: IT_EXCEL-VALUE TO RECORD1-ALORT_007.
ENDCASE.
AT END OF ROW.
APPEND RECORD1.
CLEAR RECORD1.
ENDAT.
ENDLOOP.
CLEAR RECORD1.
DELETE RECORD1 WHERE MATNR_005 EQ ' '.
--
DELETE RECORD1 WHERE ( ERFMG_007 = 0 OR ERFMG_007 = ' ' )
AND ( ERFMG_008 = 0 OR ERFMG_008 = ' ' ).
DESCRIBE TABLE RECORD1[].
IF SY-TFILL > 0.
--
LOOP AT RECORD1 WHERE ERFMG_007 NE 0 AND ERFMG_007 NE ' '.
MOVE: RECORD1-BUDAT_002 TO IT_ACC-BUDAT_002,
RECORD1-BKTXT_004 TO IT_ACC-BKTXT_004,
RECORD1-MATNR_005 TO IT_ACC-MATNR_005,
RECORD1-WERKS_006 TO IT_ACC-WERKS_006,
RECORD1-ERFMG_007 TO IT_ACC-ERFMG_008.
APPEND IT_ACC.
CLEAR: IT_ACC,RECORD1.
ENDLOOP.
--
LOOP AT IT_ACC.
SELECT SINGLE ELPRO INTO WK_ELPRO FROM MKAL CLIENT SPECIFIED
WHERE MANDT = SY-MANDT
AND MATNR = IT_ACC-MATNR_005
AND WERKS = IT_ACC-WERKS_006.
MOVE WK_ELPRO TO IT_ACC-ALORT_007.
MODIFY IT_ACC.
CLEAR: WK_ELPRO, IT_ACC.
ENDLOOP.
--
LOOP AT RECORD1 WHERE ERFMG_008 NE 0 AND ERFMG_008 NE ' '.
MOVE: RECORD1-BUDAT_002 TO IT_REJ-BUDAT_002,
RECORD1-BKTXT_004 TO IT_REJ-BKTXT_004,
RECORD1-MATNR_005 TO IT_REJ-MATNR_005,
RECORD1-WERKS_006 TO IT_REJ-WERKS_006,
RECORD1-ERFMG_008 TO IT_REJ-ERFMG_008,
RECORD1-ALORT_007 TO IT_REJ-ALORT_007.
APPEND IT_REJ.
CLEAR: IT_REJ, RECORD1.
ENDLOOP.
--
APPEND LINES OF IT_ACC TO RECORD.
APPEND LINES OF IT_REJ TO RECORD.
FREE : IT_REJ, IT_ACC, RECORD1.
ELSE.
MESSAGE I937.
STOP.
ENDIF.
ENDFORM. " UPLOAD_FUN
--
FORM FILL_BDC_TABLE.
IF NOT RECORD[] IS INITIAL.
LOOP AT RECORD.
PERFORM BDC_DYNPRO USING 'SAPLBARM' '0800'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'RM61B-BKTXT'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=ISTDA'.
PERFORM BDC_FIELD USING 'RM61B-BUDAT' RECORD-BUDAT_002.
PERFORM BDC_FIELD USING 'RM61B-BKTXT' RECORD-BKTXT_004.
PERFORM BDC_FIELD USING 'RM61B-MATNR' RECORD-MATNR_005.
PERFORM BDC_FIELD USING 'RM61B-WERKS' RECORD-WERKS_006.
PERFORM BDC_FIELD USING 'RM61B-ALORT' RECORD-ALORT_007.
PERFORM BDC_FIELD USING 'RM61B-ERFMG' RECORD-ERFMG_008.
PERFORM BDC_DYNPRO USING 'SAPLCOWB' '0130'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=WEIT'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'G_COWB_HEADER-MNGTXT'.
PERFORM BDC_TRANSACTION USING 'MFBF'.
CLEAR MESSTAB.
APPEND LINES OF MESSTAB TO MESSTAB1.
CLEAR MESSTAB1.
LOOP AT MESSTAB1 WHERE MSGTYP = 'S' OR MSGTYP = 'E' OR MSGTYP = 'W'.
SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB1-MSGSPRA
AND ARBGB = MESSTAB1-MSGID
AND MSGNR = MESSTAB1-MSGNR.
IF SY-SUBRC = 0.
L_MSTRING = T100-TEXT.
IF L_MSTRING CS '&1'.
REPLACE '&1' WITH MESSTAB1-MSGV1 INTO L_MSTRING.
REPLACE '&2' WITH MESSTAB1-MSGV2 INTO L_MSTRING.
REPLACE '&3' WITH MESSTAB1-MSGV3 INTO L_MSTRING.
REPLACE '&4' WITH MESSTAB1-MSGV4 INTO L_MSTRING.
ELSE.
REPLACE '&' WITH MESSTAB1-MSGV1 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB1-MSGV2 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB1-MSGV3 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB1-MSGV4 INTO L_MSTRING.
ENDIF.
CONDENSE L_MSTRING.
IF MESSTAB1-MSGTYP = 'W'.
MOVE L_MSTRING TO MESSAGES-MSG_W.
ELSEIF MESSTAB1-MSGTYP = 'E'.
MOVE L_MSTRING TO MESSAGES-MSG_E.
MOVE 'E' TO MESSAGES-MSGTYP.
ELSEIF MESSTAB1-MSGTYP = 'S'.
MOVE L_MSTRING TO MESSAGES-MSG_S.
MOVE 'S' TO MESSAGES-MSGTYP.
ENDIF.
ENDIF.
CLEAR L_MSTRING.
ENDLOOP.
MOVE-CORRESPONDING RECORD TO MESSAGES.
SELECT SINGLE MAKTX INTO WK_MAKT FROM MAKT CLIENT SPECIFIED
WHERE MANDT = SY-MANDT
AND MATNR = MESSAGES-MATNR_005.
MOVE:WK_MAKT TO MESSAGES-MAKTX.
APPEND MESSAGES.
CLEAR: MESSAGES, WK_MAKT, MESSTAB1.
REFRESH MESSTAB1.
ENDLOOP.
ENDIF.
ENDFORM. "fill_bdc_table
--
FORM ASSIGN_COLUMNS .
REFRESH ALVFLD.
MOVE :'1' TO ALVFLD-COL_POS.
MOVE :'MATNR_005' TO ALVFLD-FIELDNAME.
MOVE :'PART NO' TO ALVFLD-SELTEXT_M.
MOVE :'X' TO ALVFLD-FIX_COLUMN.
APPEND ALVFLD.CLEAR ALVFLD.
MOVE :'2' TO ALVFLD-COL_POS.
MOVE :'MAKTX' TO ALVFLD-FIELDNAME.
MOVE :'DESCRIPTION' TO ALVFLD-SELTEXT_M.
APPEND ALVFLD.CLEAR ALVFLD.
MOVE :'3' TO ALVFLD-COL_POS.
MOVE :'WERKS_006' TO ALVFLD-FIELDNAME.
MOVE :'PLANT' TO ALVFLD-SELTEXT_M.
APPEND ALVFLD.CLEAR ALVFLD.
MOVE :'4' TO ALVFLD-COL_POS.
MOVE :'BUDAT_002' TO ALVFLD-FIELDNAME.
MOVE :'POSTING DATE' TO ALVFLD-SELTEXT_M.
APPEND ALVFLD.CLEAR ALVFLD.
MOVE :'5' TO ALVFLD-COL_POS.
MOVE :'BKTXT_004' TO ALVFLD-FIELDNAME.
MOVE :'SHIFT' TO ALVFLD-SELTEXT_M.
APPEND ALVFLD.CLEAR ALVFLD.
MOVE :'6' TO ALVFLD-COL_POS.
MOVE :'ERFMG_008' TO ALVFLD-FIELDNAME.
MOVE :'QTY' TO ALVFLD-SELTEXT_M.
APPEND ALVFLD.CLEAR ALVFLD.
MOVE :'7' TO ALVFLD-COL_POS.
MOVE :'ALORT_007' TO ALVFLD-FIELDNAME.
MOVE :'STGLOC' TO ALVFLD-SELTEXT_M.
APPEND ALVFLD.CLEAR ALVFLD.
MOVE :'8' TO ALVFLD-COL_POS.
MOVE :'MSG_E' TO ALVFLD-FIELDNAME.
MOVE :'ERRORS' TO ALVFLD-SELTEXT_M.
APPEND ALVFLD.CLEAR ALVFLD.
MOVE :'9' TO ALVFLD-COL_POS.
MOVE :'MSG_W' TO ALVFLD-FIELDNAME.
MOVE :'WARNINGS' TO ALVFLD-SELTEXT_M.
APPEND ALVFLD.CLEAR ALVFLD.
MOVE :'10' TO ALVFLD-COL_POS.
MOVE :'MSG_S' TO ALVFLD-FIELDNAME.
MOVE :'STATUS' TO ALVFLD-SELTEXT_M.
APPEND ALVFLD.CLEAR ALVFLD.
ENDFORM. " assign_columns
--
FORM F_EVENT_BUILD .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = V_EVENTS[].
READ TABLE V_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
INTO WK_EVENTS.
WK_LAYOUT-COLTAB_FIELDNAME = 'CELLCOLOR'. "FOR COLOUMN COLOR
WK_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
IF SY-SUBRC = 0.
MOVE C_FORMNAME_TOP_OF_PAGE TO WK_EVENTS-FORM.
MODIFY V_EVENTS FROM WK_EVENTS INDEX SY-TABIX.
ENDIF.
ENDFORM. " f_event_build
--
FORM F_TOP_OF_PAGE.
WRITE SY-DATUM TO T_DATE.
CLEAR: IT_LIST_COMMENTS[].
WK_LIST_COMMENTS-TYP = 'H'. "H=Header, S=Selection, A=Action
WK_LIST_COMMENTS-KEY = ''.
WK_LIST_COMMENTS-INFO = 'UPLOAD STATUS FOR PRODUCTION POSTING'.
APPEND WK_LIST_COMMENTS TO IT_LIST_COMMENTS.
CLEAR WK_LIST_COMMENTS.
WK_LIST_COMMENTS-TYP = 'S'. "H=Header, S=Selection, A=Action
WK_LIST_COMMENTS-KEY = ''.
CONCATENATE 'Uploaded Date:' T_DATE INTO WK_LIST_COMMENTS-INFO
SEPARATED BY SPACE.
APPEND WK_LIST_COMMENTS TO IT_LIST_COMMENTS.
CLEAR WK_LIST_COMMENTS.
DESCRIBE TABLE MESSAGES LINES WK_LINES.
LINES = WK_LINES.
WK_LIST_COMMENTS-TYP = 'S'. "H=Header, S=Selection, A=Action
WK_LIST_COMMENTS-KEY = ''.
CONCATENATE 'Total No of records:' LINES INTO WK_LIST_COMMENTS-INFO
SEPARATED BY SPACE.
APPEND WK_LIST_COMMENTS TO IT_LIST_COMMENTS.
CLEAR WK_LIST_COMMENTS.
WK_LIST_COMMENTS-TYP = 'S'. "H=Header, S=Selection, A=Action
WK_LIST_COMMENTS-KEY = ''.
CONCATENATE 'Successfull Entries:' WK_SUCCESS INTO
WK_LIST_COMMENTS-INFO SEPARATED BY SPACE.
APPEND WK_LIST_COMMENTS TO IT_LIST_COMMENTS.
CLEAR WK_LIST_COMMENTS.
WK_LIST_COMMENTS-TYP = 'S'. "H=Header, S=Selection, A=Action
WK_LIST_COMMENTS-KEY = ''.
CONCATENATE 'Failed Entries:' WK_FAILURE INTO WK_LIST_COMMENTS-INFO
SEPARATED BY SPACE.
APPEND WK_LIST_COMMENTS TO IT_LIST_COMMENTS.
CLEAR WK_LIST_COMMENTS.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
I_LOGO = 'ENJOYSAP_LOGO'
IT_LIST_COMMENTARY = IT_LIST_COMMENTS.
ENDFORM. "F_TOP_OF_PAGE
--
FORM ASSIGN_COLORS .
LOOP AT MESSAGES.
CASE MESSAGES-MSGTYP.
WHEN 'E'.
MOVE: 'MATNR_005' TO WA_COLOR-FNAME.
MOVE '6' TO WA_COLOR-COLOR-COL.
MOVE '0' TO WA_COLOR-COLOR-INT.
MOVE '0' TO WA_COLOR-COLOR-INV.
APPEND WA_COLOR TO MESSAGES-CELLCOLOR.
MODIFY MESSAGES TRANSPORTING CELLCOLOR.
ENDCASE.
MOVE: 'MSG_E' TO WA_COLOR-FNAME.
MOVE '6' TO WA_COLOR-COLOR-COL.
MOVE '0' TO WA_COLOR-COLOR-INT.
MOVE '1' TO WA_COLOR-COLOR-INV.
APPEND WA_COLOR TO MESSAGES-CELLCOLOR.
MODIFY MESSAGES TRANSPORTING CELLCOLOR.
MOVE: 'MSG_W' TO WA_COLOR-FNAME.
MOVE '7' TO WA_COLOR-COLOR-COL.
MOVE '0' TO WA_COLOR-COLOR-INT.
MOVE '1' TO WA_COLOR-COLOR-INV.
APPEND WA_COLOR TO MESSAGES-CELLCOLOR.
MODIFY MESSAGES TRANSPORTING CELLCOLOR.
MOVE: 'MSG_S' TO WA_COLOR-FNAME.
MOVE '5' TO WA_COLOR-COLOR-COL.
MOVE '0' TO WA_COLOR-COLOR-INT.
MOVE '1' TO WA_COLOR-COLOR-INV.
APPEND WA_COLOR TO MESSAGES-CELLCOLOR.
MODIFY MESSAGES TRANSPORTING CELLCOLOR.
ENDLOOP.
ENDFORM. " assign_colors
--
FORM COUNT .
LOOP AT MESSAGES.
CASE MESSAGES-MSGTYP.
WHEN 'E'.
ADD 1 TO WK_FAILURE.
WHEN 'S'.
ADD 1 TO WK_SUCCESS.
ENDCASE.
ENDLOOP.
ENDFORM. " COUNT
--
FORM ALV .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_BACKGROUND_ID = 'ALV_BACKGROUND'
IS_LAYOUT = WK_LAYOUT
IT_FIELDCAT = ALVFLD[]
IT_EVENTS = V_EVENTS[]
TABLES
T_OUTTAB = MESSAGES
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. " ALV
--
FORM FETCH_FROM_FLAT_FILE .
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = 1 "From 1st Column
I_BEGIN_ROW = 2 "From 2nd row
I_END_COL = 7 "Till &th Column
I_END_ROW = 65000 "Till Row
TABLES
INTERN = IT_EXCEL
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " FETCH_FROM_FLAT_FILE
****************************
Include program
**************************
***INCLUDE BDCRECX1.
for programs doing a data transfer by creating a batch-input session
and
for programs doing a data transfer by CALL TRANSACTION USING
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS SESSION RADIOBUTTON GROUP CTU. "create session
SELECTION-SCREEN COMMENT 3(20) TEXT-S07 FOR FIELD SESSION.
selection-screen position 45.
PARAMETERS CTU RADIOBUTTON GROUP CTU. "call transaction
SELECTION-SCREEN COMMENT 48(20) TEXT-S08 FOR FIELD CTU.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 3(20) TEXT-S01 FOR FIELD GROUP.
selection-screen position 25.
PARAMETERS GROUP(12). "group name of session
SELECTION-SCREEN COMMENT 48(20) TEXT-S05 FOR FIELD CTUMODE.
selection-screen position 70.
PARAMETERS CTUMODE LIKE CTU_PARAMS-DISMODE DEFAULT 'N'.
"A: show all dynpros
"E: show dynpro on error only
"N: do not display dynpro
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 3(20) TEXT-S02 FOR FIELD USER.
selection-screen position 25.
PARAMETERS: USER(12) DEFAULT SY-UNAME. "user for session in batch
SELECTION-SCREEN COMMENT 48(20) TEXT-S06 FOR FIELD CUPDATE.
selection-screen position 70.
PARAMETERS CUPDATE LIKE CTU_PARAMS-UPDMODE DEFAULT 'L'.
"S: synchronously
"A: asynchronously
"L: local
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 3(20) TEXT-S03 FOR FIELD KEEP.
selection-screen position 25.
PARAMETERS: KEEP AS CHECKBOX. "' ' = delete session if finished
"'X' = keep session if finished
SELECTION-SCREEN COMMENT 48(20) TEXT-S09 FOR FIELD E_GROUP.
selection-screen position 70.
parameters E_GROUP(12). "group name of error-session
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 3(20) TEXT-S04 FOR FIELD HOLDDATE.
selection-screen position 25.
PARAMETERS: HOLDDATE LIKE SY-DATUM.
SELECTION-SCREEN COMMENT 51(17) TEXT-S02 FOR FIELD E_USER.
selection-screen position 70.
PARAMETERS: E_USER(12) DEFAULT SY-UNAME. "user for error-session
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 51(17) TEXT-S03 FOR FIELD E_KEEP.
selection-screen position 70.
PARAMETERS: E_KEEP AS CHECKBOX. "' ' = delete session if finished
"'X' = keep session if finished
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 51(17) TEXT-S04 FOR FIELD E_HDATE.
selection-screen position 70.
PARAMETERS: E_HDATE LIKE SY-DATUM.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(33) TEXT-S10 FOR FIELD NODATA.
PARAMETERS: NODATA DEFAULT '/' LOWER CASE. "nodata
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(33) FOR FIELD SMALLLOG.
PARAMETERS: SMALLLOG as checkbox. "' ' = log all transactions
"'X' = no transaction logging
SELECTION-SCREEN END OF LINE.
----
data definition
----
Batchinputdata of single transaction
DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
messages of call transaction
DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
error session opened (' ' or 'X')
DATA: E_GROUP_OPENED.
message texts
TABLES: T100.
----
at selection screen *
----
AT SELECTION-SCREEN.
group and user must be filled for create session
IF SESSION = 'X' AND
GROUP = SPACE OR USER = SPACE.
MESSAGE E613(MS).
ENDIF.
----
open dataset *
----
FORM OPEN_DATASET USING P_DATASET.
OPEN DATASET P_DATASET
FOR INPUT IN TEXT MODE
ENCODING DEFAULT.
IF SY-SUBRC <> 0.
WRITE: / TEXT-E00, SY-SUBRC.
STOP.
ENDIF.
ENDFORM.
----
close dataset *
----
FORM CLOSE_DATASET USING P_DATASET.
CLOSE DATASET P_DATASET.
ENDFORM.
----
create batchinput session *
(not for call transaction using...) *
----
FORM OPEN_GROUP.
IF SESSION = 'X'.
SKIP.
WRITE: /(20) 'Create group'(I01), GROUP.
SKIP.
open batchinput group
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING CLIENT = SY-MANDT
GROUP = GROUP
USER = USER
KEEP = KEEP
HOLDDATE = HOLDDATE.
WRITE: /(30) 'BDC_OPEN_GROUP'(I02),
(12) 'returncode:'(I05),
SY-SUBRC.
ENDIF.
ENDFORM.
----
end batchinput session *
(call transaction using...: error session) *
----
FORM CLOSE_GROUP.
IF SESSION = 'X'.
close batchinput group
CALL FUNCTION 'BDC_CLOSE_GROUP'.
WRITE: /(30) 'BDC_CLOSE_GROUP'(I04),
(12) 'returncode:'(I05),
SY-SUBRC.
ELSE.
IF E_GROUP_OPENED = 'X'.
CALL FUNCTION 'BDC_CLOSE_GROUP'.
WRITE: /.
WRITE: /(30) 'Fehlermappe wurde erzeugt'(I06).
E_GROUP_OPENED = ' '.
ENDIF.
ENDIF.
ENDFORM.
----
Start new transaction according to parameters *
----
FORM BDC_TRANSACTION USING TCODE.
DATA: L_MSTRING(480).
DATA: L_SUBRC LIKE SY-SUBRC.
batch input session
IF SESSION = 'X'.
CALL FUNCTION 'BDC_INSERT'
EXPORTING TCODE = TCODE
TABLES DYNPROTAB = BDCDATA.
IF SMALLLOG <> 'X'.
WRITE: / 'BDC_INSERT'(I03),
TCODE,
'returncode:'(I05),
SY-SUBRC,
'RECORD:',
SY-INDEX.
ENDIF.
call transaction using
ELSE.
REFRESH MESSTAB.
CALL TRANSACTION TCODE USING BDCDATA
MODE CTUMODE
UPDATE CUPDATE
MESSAGES INTO MESSTAB.
L_SUBRC = SY-SUBRC.
IF SMALLLOG <> 'X'.
WRITE: / 'CALL_TRANSACTION',
TCODE,
'returncode:'(I05),
L_SUBRC,
'RECORD:',
SY-INDEX.
LOOP AT MESSTAB.
SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA
AND ARBGB = MESSTAB-MSGID
AND MSGNR = MESSTAB-MSGNR.
IF SY-SUBRC = 0.
L_MSTRING = T100-TEXT.
IF L_MSTRING CS '&1'.
REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.
REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.
REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.
REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.
ELSE.
REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.
ENDIF.
CONDENSE L_MSTRING.
WRITE: / MESSTAB-MSGTYP, L_MSTRING(250).
ELSE.
WRITE: / MESSTAB.
ENDIF.
ENDLOOP.
SKIP.
ENDIF.
Erzeugen fehlermappe ************************************************
IF L_SUBRC <> 0 AND E_GROUP <> SPACE.
IF E_GROUP_OPENED = ' '.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING CLIENT = SY-MANDT
GROUP = E_GROUP
USER = E_USER
KEEP = E_KEEP
HOLDDATE = E_HDATE.
E_GROUP_OPENED = 'X'.
ENDIF.
CALL FUNCTION 'BDC_INSERT'
EXPORTING TCODE = TCODE
TABLES DYNPROTAB = BDCDATA.
ENDIF.
ENDIF.
REFRESH BDCDATA.
ENDFORM.
----
Start new screen *
----
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM.
----
Insert field *
----
FORM BDC_FIELD USING FNAM FVAL.
IF FVAL <> NODATA.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDIF.
ENDFORM.
reward if useful
07-21-2007 8:31 AM
again kesav,
What u have to do is
U see after the call transaction is done i have stored the errors,ststus and warnings to a table...do the same