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

Regarding BDC

Former Member
0 Kudos

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

1 ACCEPTED SOLUTION

Former Member
0 Kudos

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

6 REPLIES 6

Former Member
0 Kudos

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

Former Member
0 Kudos

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

Former Member
0 Kudos

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

Former Member
0 Kudos

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

kesavadas_thekkillath
Active Contributor
0 Kudos

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'.

--


TO STORE FINAL DATA TO BE POSTED--

      • 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--

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 ' '.

--


DO NOT UPLOAD WHERE PRD QTY = 0--

DELETE RECORD1 WHERE ( ERFMG_007 = 0 OR ERFMG_007 = ' ' )

AND ( ERFMG_008 = 0 OR ERFMG_008 = ' ' ).

DESCRIBE TABLE RECORD1[].

IF SY-TFILL > 0.

--


MOVE ACCEPTED QTY AND FETCH THE RESPECTIVE STGLOC-**

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.

--


MOVE ELPRO FOR THE ACCEPTED ENTRIES--

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.

--


MOVE PRD QTY FOR REJECTED QTY--

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.

--


MOVE ACCEPTED AND REJECTED READINGS TO FINAL TABLE

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--

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--

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--

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--

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--

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--

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--

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

--


FETCH_FROM_FLAT_FILE--

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

kesavadas_thekkillath
Active Contributor
0 Kudos

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