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: 

BDC - TABLE CONTROL

Former Member
0 Kudos
1,320

hi friends please send me bdc-table control

6 REPLIES 6

Former Member
0 Kudos
225

Please find sample code below.

BDC Example: Using Table Control in BDC

Among beginners, using table control in BDC is always a puzzle.

Following is a sample code of handling table control in BDC.

REPORT Y730_BDC5 .

*HANDLING TABLE CONTROL IN BDC

DATA : BEGIN OF IT_DUMMY OCCURS 0,

DUMMY(100) TYPE C,

END OF IT_DUMMY.

DATA : BEGIN OF IT_XK01 OCCURS 0,

LIFNR(10) TYPE C,

BUKRS(4) TYPE C,

EKORG(4) TYPE C,

KTOKK(4) TYPE C,

NAME1(30) TYPE C,

SORTL(10) TYPE C,

LAND1(3) TYPE C,

SPRAS(2) TYPE C,

AKONT(6) TYPE C,

FDGRV(2) TYPE C,

WAERS(3) TYPE C,

END OF IT_XK01,

BEGIN OF IT_BANK OCCURS 0,

BANKS(3) TYPE C,

BANKL(10) TYPE C,

BANKN(10) TYPE C,

KOINH(30) TYPE C,

LIFNR(10) TYPE C,

END OF IT_BANK.

DATA : IT_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE,

IT_BDCMSGCOLL LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.

CALL FUNCTION 'WS_UPLOAD'

EXPORTING

FILENAME = 'C:\VENDOR.TXT'

FILETYPE = 'ASC'

TABLES

DATA_TAB = IT_DUMMY.

LOOP AT IT_DUMMY.

IF IT_DUMMY-DUMMY+0(2) = '11'.

IT_XK01-LIFNR = IT_DUMMY-DUMMY+2(10).

IT_XK01-BUKRS = IT_DUMMY-DUMMY+12(4).

IT_XK01-EKORG = IT_DUMMY-DUMMY+16(4).

IT_XK01-KTOKK = IT_DUMMY-DUMMY+20(4).

IT_XK01-NAME1 = IT_DUMMY-DUMMY+24(30).

IT_XK01-SORTL = IT_DUMMY-DUMMY+54(10).

IT_XK01-LAND1 = IT_DUMMY-DUMMY+64(3).

IT_XK01-SPRAS = IT_DUMMY-DUMMY+67(2).

IT_XK01-AKONT = IT_DUMMY-DUMMY+69(6).

IT_XK01-FDGRV = IT_DUMMY-DUMMY+75(2).

IT_XK01-WAERS = IT_DUMMY-DUMMY+77(3).

APPEND IT_XK01.

ELSE.

IT_BANK-BANKS = IT_DUMMY-DUMMY+2(3).

IT_BANK-BANKL = IT_DUMMY-DUMMY+5(10).

IT_BANK-BANKN = IT_DUMMY-DUMMY+15(10).

IT_BANK-KOINH = IT_DUMMY-DUMMY+25(30).

IT_BANK-LIFNR = IT_DUMMY-DUMMY+55(10).

APPEND IT_BANK.

ENDIF.

ENDLOOP.

LOOP AT IT_XK01.

REFRESH IT_BDCDATA.

perform bdc_dynpro using 'SAPMF02K' '0100'.

perform bdc_field using 'BDC_CURSOR'

'RF02K-REF_LIFNR'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'RF02K-LIFNR'

IT_XK01-LIFNR.

perform bdc_field using 'RF02K-BUKRS'

IT_XK01-BUKRS.

perform bdc_field using 'RF02K-EKORG'

IT_XK01-EKORG.

perform bdc_field using 'RF02K-KTOKK'

IT_XK01-KTOKK.

perform bdc_dynpro using 'SAPMF02K' '0110'.

perform bdc_field using 'BDC_CURSOR'

'LFA1-TELX1'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'LFA1-NAME1'

IT_XK01-NAME1.

perform bdc_field using 'LFA1-SORTL'

IT_XK01-SORTL.

perform bdc_field using 'LFA1-LAND1'

IT_XK01-LAND1.

perform bdc_field using 'LFA1-SPRAS'

IT_XK01-SPRAS.

perform bdc_dynpro using 'SAPMF02K' '0120'.

perform bdc_field using 'BDC_CURSOR'

'LFA1-KUNNR'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_dynpro using 'SAPMF02K' '0130'.

perform bdc_field using 'BDC_CURSOR'

'LFBK-KOINH(02)'.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

DATA : FNAM(20) TYPE C,

IDX TYPE C.

MOVE 1 TO IDX.

LOOP AT IT_BANK WHERE LIFNR = IT_XK01-LIFNR.

CONCATENATE 'LFBK-BANKS(' IDX ')' INTO FNAM.

perform bdc_field using FNAM

IT_BANK-BANKS.

CONCATENATE 'LFBK-BANKL(' IDX ')' INTO FNAM.

perform bdc_field using FNAM

IT_BANK-BANKL.

CONCATENATE 'LFBK-BANKN(' IDX ')' INTO FNAM.

perform bdc_field using FNAM

IT_BANK-BANKN.

CONCATENATE 'LFBK-KOINH(' IDX ')' INTO FNAM.

perform bdc_field using FNAM

IT_BANK-KOINH.

IDX = IDX + 1.

ENDLOOP.

perform bdc_dynpro using 'SAPMF02K' '0130'.

perform bdc_field using 'BDC_CURSOR'

'LFBK-BANKS(01)'.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

perform bdc_dynpro using 'SAPMF02K' '0210'.

perform bdc_field using 'BDC_CURSOR'

'LFB1-FDGRV'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'LFB1-AKONT'

IT_XK01-AKONT.

perform bdc_field using 'LFB1-FDGRV'

IT_XK01-FDGRV.

perform bdc_dynpro using 'SAPMF02K' '0215'.

perform bdc_field using 'BDC_CURSOR'

'LFB1-ZTERM'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_dynpro using 'SAPMF02K' '0220'.

perform bdc_field using 'BDC_CURSOR'

'LFB5-MAHNA'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_dynpro using 'SAPMF02K' '0310'.

perform bdc_field using 'BDC_CURSOR'

'LFM1-WAERS'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'LFM1-WAERS'

IT_XK01-WAERS.

perform bdc_dynpro using 'SAPMF02K' '0320'.

perform bdc_field using 'BDC_CURSOR'

'WYT3-PARVW(01)'.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

perform bdc_dynpro using 'SAPLSPO1' '0300'.

perform bdc_field using 'BDC_OKCODE'

'=YES'.

CALL TRANSACTION 'XK01' USING IT_BDCDATA

MODE 'A'

UPDATE 'S'

MESSAGES INTO IT_BDCMSGCOLL.

ENDLOOP.

FORM BDC_DYNPRO USING PROG SCR.

CLEAR IT_BDCDATA.

IT_BDCDATA-PROGRAM = PROG.

IT_BDCDATA-DYNPRO = SCR.

IT_BDCDATA-DYNBEGIN = 'X'.

APPEND IT_BDCDATA.

ENDFORM.

FORM BDC_FIELD USING FNAM FVAL.

CLEAR IT_BDCDATA.

IT_BDCDATA-FNAM = FNAM.

IT_BDCDATA-FVAL = FVAL.

APPEND IT_BDCDATA.

ENDFORM.

Former Member
0 Kudos
225

former_member235056
Active Contributor
0 Kudos
225

Hi,,

Create Table Control

• Step 1 (Create new structure for table control)

Type is name of structure (ZTC_EKKO) and press create

• Step 2 (Create Program)

Goto transaction SE80(Object Navigator) -> Repository Browser -> Program.

Enter your program name, please ensure that is begins with SAPMZ…… as this is a module pool (dialog program).

Press enter to create, and press yes!

Ensure that you create a top include, and press Enter.

Accept the name created for the top include.

Press Enter.

Press Save

• Step 3 (Create TOP include)

Double click on the top include and enter following ABAP code:

Tables: ZTC_EKKO.

controls: tc100 type tableview using screen 100.

data: ok_code type sy-ucomm.

data: it_ekko type standard

table of ZTC_EKKO initial size 0,

wa_ekko type ZTC_EKKO.

data: ok_code type sy-ucomm.

Press Save and Activate

• Step 4 (Create screen)

Right click the program to create a screen 100 for the dialog. Enter Short description, set screen type to Normal and enter 0 or blank into Next screen. Then move to Element List tab and enter the OK code as OK_CODE (i.e. the same as what you declared in the top include with data: ok_code type sy-ucomm).

• Step 5 (Create table control)

Press the Layout button to bring up the screen painter editor.

Press table control button and drag it on to the screen, enter the name of table control created in TOP include (TC100). Now press the yellow button for attributes and set the table control as below options

• Step 6 (Populate table control )

Press the orange button (Fields). On the next screen enter ZTC_EKKO and press the ‘Get from Dict’ button. Select the fields you want (all) and press enter. Now drag them onto your Table Control.

Below is the result, there will been syntax errors if we check now! So Save and go back into the flow logic tab.

• Step 7 (Create flow control )

Within the flow logic of screen 100 and create two modules, one to select the data from the database and the other to move the selected fields into the table control. Also insert the two loop statements to populate and retrieve the lines of the table control.

PROCESS BEFORE OUTPUT.

  • MODULE STATUS_0100.

module data_retrieval.

loop at it_ekko into wa_ekko with control TC100.

module populate_screen.

endloop.

*

PROCESS AFTER INPUT.

loop at it_ekko.

endloop.

  • MODULE USER_COMMAND_0100.

Double click the module data_retrieval to create and click yes to get past the popup. Ensure that a new include is created to hold all the PBO modules (default). Press enter.

Select 10 rows of data from the EKKO table and load into the internal table it_ekko. Go back to the flow logic to load this data into the Table Control.

----


***INCLUDE MZ_TCONTROL_DATA_RETRIEVALO01 .

----


&----


*& Module data_retrieval OUTPUT

&----


  • text

----


MODULE data_retrieval OUTPUT.

  • select data from ekko table

SELECT ebeln bukrs bstyp bsart

bsakz loekz statu aedat

UP TO 10 ROWS

FROM ekko

INTO CORRESPONDING FIELDS OF TABLE it_ekko.

ENDMODULE. " data_retrieval OUTPUT

Double click the module populate_screen to create. Now move the values in this loop from the wa_ekko into the Table Control with the move-corresponding statement.

MODULE populate_screen OUTPUT.

DATA: ld_line TYPE i.

  • Set which line of table is a top of displayed table control

IF sy-stepl = 1.

tc100-lines =

tc100-top_line + sy-loopc - 1.

ENDIF.

  • move fields from work area to scrren fields

MOVE-CORRESPONDING wa_ekko TO ztc_ekko.

ENDMODULE. " populate_screen OUTPUT

• Step 8 (Create transaction )

Now create a transaction to test the table control program. Right click the Program and select create-> transaction.

• Step 9 (Execute transaction )

Execute transaction ZTC

Pls do reward points.

Regards,

Ameet

Former Member
0 Kudos
225

<b>Learning BDC Programming</b>

I want to learn how to upload data using BDC. If I have a excel data file how will upload it using BDC. I don't know the full process of doing it, if someone help me in this. I want it using BDC session process and processing that session. I was trying to upload material master other day. But could not follow the process of uploading using BDC though I know LSMW. Please explain me the BDC process in details with examples.

<b>For a BDC upload you need to write a program which created BDC sessions.</b>

<b>Steps:</b>

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.

<b>Execute the program. It will have options to create a batch session or to process directly.</b>

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

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

BDC Example: Using Table Control in BDC 
Among beginners, using table control in BDC is always a puzzle. 

Following is a sample code of handling table control in BDC. 

REPORT Y730_BDC5 .
*HANDLING TABLE CONTROL IN BDC
DATA : BEGIN OF IT_DUMMY OCCURS 0,
       DUMMY(100) TYPE C,
       END OF IT_DUMMY.
DATA : BEGIN OF IT_XK01 OCCURS 0,
       LIFNR(10) TYPE C,
       BUKRS(4)  TYPE C,
       EKORG(4)  TYPE C,
       KTOKK(4)  TYPE C,
       NAME1(30) TYPE C,
       SORTL(10) TYPE C,
       LAND1(3)  TYPE C,
       SPRAS(2)  TYPE C,
       AKONT(6)  TYPE C,
       FDGRV(2)  TYPE C,
       WAERS(3)  TYPE C,
       END OF IT_XK01,
       BEGIN OF IT_BANK OCCURS 0,
       BANKS(3)  TYPE C,
       BANKL(10) TYPE C,
       BANKN(10) TYPE C,
       KOINH(30) TYPE C,
       LIFNR(10) TYPE C,
       END OF IT_BANK.
DATA : IT_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE,
       IT_BDCMSGCOLL LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.

CALL FUNCTION 'WS_UPLOAD'
 EXPORTING
   FILENAME                      = 'C:VENDOR.TXT'
   FILETYPE                      = 'ASC'
 TABLES
   DATA_TAB                      = IT_DUMMY.

LOOP AT IT_DUMMY.
  IF IT_DUMMY-DUMMY+0(2) = '11'.
    IT_XK01-LIFNR = IT_DUMMY-DUMMY+2(10).
    IT_XK01-BUKRS = IT_DUMMY-DUMMY+12(4).
    IT_XK01-EKORG = IT_DUMMY-DUMMY+16(4).
    IT_XK01-KTOKK = IT_DUMMY-DUMMY+20(4).
    IT_XK01-NAME1 = IT_DUMMY-DUMMY+24(30).
    IT_XK01-SORTL = IT_DUMMY-DUMMY+54(10).
    IT_XK01-LAND1 = IT_DUMMY-DUMMY+64(3).
    IT_XK01-SPRAS = IT_DUMMY-DUMMY+67(2).
    IT_XK01-AKONT = IT_DUMMY-DUMMY+69(6).
    IT_XK01-FDGRV = IT_DUMMY-DUMMY+75(2).
    IT_XK01-WAERS = IT_DUMMY-DUMMY+77(3).
    APPEND IT_XK01.
  ELSE.
    IT_BANK-BANKS = IT_DUMMY-DUMMY+2(3).
    IT_BANK-BANKL = IT_DUMMY-DUMMY+5(10).
    IT_BANK-BANKN = IT_DUMMY-DUMMY+15(10).
    IT_BANK-KOINH = IT_DUMMY-DUMMY+25(30).
    IT_BANK-LIFNR = IT_DUMMY-DUMMY+55(10).
    APPEND IT_BANK.
  ENDIF.
ENDLOOP.

LOOP AT IT_XK01.
REFRESH IT_BDCDATA.
perform bdc_dynpro      using 'SAPMF02K' '0100'.
perform bdc_field       using 'BDC_CURSOR'
                              'RF02K-REF_LIFNR'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_field       using 'RF02K-LIFNR'
                              IT_XK01-LIFNR.
perform bdc_field       using 'RF02K-BUKRS'
                              IT_XK01-BUKRS.
perform bdc_field       using 'RF02K-EKORG'
                              IT_XK01-EKORG.
perform bdc_field       using 'RF02K-KTOKK'
                              IT_XK01-KTOKK.
perform bdc_dynpro      using 'SAPMF02K' '0110'.
perform bdc_field       using 'BDC_CURSOR'
                              'LFA1-TELX1'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_field       using 'LFA1-NAME1'
                              IT_XK01-NAME1.
perform bdc_field       using 'LFA1-SORTL'
                              IT_XK01-SORTL.
perform bdc_field       using 'LFA1-LAND1'
                              IT_XK01-LAND1.
perform bdc_field       using 'LFA1-SPRAS'
                              IT_XK01-SPRAS.
perform bdc_dynpro      using 'SAPMF02K' '0120'.
perform bdc_field       using 'BDC_CURSOR'
                              'LFA1-KUNNR'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_dynpro      using 'SAPMF02K' '0130'.
perform bdc_field       using 'BDC_CURSOR'
                              'LFBK-KOINH(02)'.
perform bdc_field       using 'BDC_OKCODE'
                              '=ENTR'.
DATA : FNAM(20) TYPE C,
       IDX      TYPE C.
  MOVE 1 TO IDX.
LOOP AT IT_BANK WHERE LIFNR = IT_XK01-LIFNR.
  CONCATENATE 'LFBK-BANKS(' IDX ')' INTO FNAM.
  perform bdc_field       using FNAM
                                IT_BANK-BANKS.

  CONCATENATE 'LFBK-BANKL(' IDX ')' INTO FNAM.
  perform bdc_field       using FNAM
                                IT_BANK-BANKL.

  CONCATENATE 'LFBK-BANKN(' IDX ')' INTO FNAM.
  perform bdc_field       using FNAM
                                IT_BANK-BANKN.

  CONCATENATE 'LFBK-KOINH(' IDX ')' INTO FNAM.
  perform bdc_field       using FNAM
                                IT_BANK-KOINH.
  IDX = IDX + 1.
ENDLOOP.

perform bdc_dynpro      using 'SAPMF02K' '0130'.
perform bdc_field       using 'BDC_CURSOR'
                              'LFBK-BANKS(01)'.
perform bdc_field       using 'BDC_OKCODE'
                              '=ENTR'.
perform bdc_dynpro      using 'SAPMF02K' '0210'.
perform bdc_field       using 'BDC_CURSOR'
                              'LFB1-FDGRV'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_field       using 'LFB1-AKONT'
                              IT_XK01-AKONT.
perform bdc_field       using 'LFB1-FDGRV'
                              IT_XK01-FDGRV.
perform bdc_dynpro      using 'SAPMF02K' '0215'.
perform bdc_field       using 'BDC_CURSOR'
                              'LFB1-ZTERM'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_dynpro      using 'SAPMF02K' '0220'.
perform bdc_field       using 'BDC_CURSOR'
                              'LFB5-MAHNA'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_dynpro      using 'SAPMF02K' '0310'.
perform bdc_field       using 'BDC_CURSOR'
                              'LFM1-WAERS'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_field       using 'LFM1-WAERS'
                              IT_XK01-WAERS.
perform bdc_dynpro      using 'SAPMF02K' '0320'.
perform bdc_field       using 'BDC_CURSOR'
                              'WYT3-PARVW(01)'.
perform bdc_field       using 'BDC_OKCODE'
                              '=ENTR'.
perform bdc_dynpro      using 'SAPLSPO1' '0300'.
perform bdc_field       using 'BDC_OKCODE'
                              '=YES'.
CALL TRANSACTION 'XK01' USING IT_BDCDATA
                        MODE  'A'
                       UPDATE 'S'
                     MESSAGES INTO IT_BDCMSGCOLL.
ENDLOOP.

FORM BDC_DYNPRO USING PROG SCR.
  CLEAR IT_BDCDATA.
  IT_BDCDATA-PROGRAM = PROG.
  IT_BDCDATA-DYNPRO  = SCR.
  IT_BDCDATA-DYNBEGIN = 'X'.
  APPEND IT_BDCDATA.
ENDFORM.

FORM BDC_FIELD USING FNAM FVAL.
  CLEAR IT_BDCDATA.
  IT_BDCDATA-FNAM = FNAM.
  IT_BDCDATA-FVAL  = FVAL.
  APPEND IT_BDCDATA.
ENDFORM.

reward points if it is usefull ...

Girish

Former Member
0 Kudos
225

<b>BDC for ME21 Transcation code </b>

Handling Table Control in BDC 
An example abap program of handling Table Control during bdc programming. 

REPORT zmm_bdcp_purchaseorderkb02
       NO STANDARD PAGE HEADING LINE-SIZE 255.

*----------------------------------------------------------------------*
*                 Declaring internal tables                            *
*----------------------------------------------------------------------*

*-----Declaring line structure

DATA : BEGIN OF it_dummy OCCURS 0,

         dummy(255) TYPE c,

       END OF it_dummy.

*-----Internal table for line items


DATA :  BEGIN OF it_idata OCCURS 0,
          ematn(18),      "Material Number.
          menge(13),      "Qyantity.
          netpr(11),      "Net Price.
          werks(4),       "Plant.
          ebelp(5),       "Item Number.
        END OF it_idata.

*-----Deep structure for header data and line items

DATA  :  BEGIN OF it_me21 OCCURS 0,
           lifnr(10),      "Vendor A/c No.
           bsart(4),       "A/c Type.
           bedat(8),       "Date of creation of PO.
           ekorg(4),       "Purchasing Organisation.
           ekgrp(3),       "Purchasing Group.
           x_data LIKE TABLE OF it_idata,
         END OF it_me21.

DATA  :  x_idata LIKE LINE OF it_idata.
DATA  :  v_delimit VALUE ','.
DATA  :  v_indx(3) TYPE n.
DATA  :  v_fnam(30) TYPE c.
DATA  :  v_count TYPE n.
DATA  :  v_ne TYPE i.
DATA  :  v_ns TYPE i.

*include bdcrecx1.

INCLUDE zmm_incl_purchaseorderkb01.

*----------------------------------------------------------------------*
*                 Search help for file                                 *
*----------------------------------------------------------------------*

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  = syst-cprog
      dynpro_number = syst-dynnr
    IMPORTING
      file_name     = p_file.

START-OF-SELECTION.

*----------------------------------------------------------------------*
*        To upload the data into line structure                        *
*----------------------------------------------------------------------*

  CALL FUNCTION 'WS_UPLOAD'
    EXPORTING
      filename = p_file
      filetype = 'DAT'
    TABLES
      data_tab = it_dummy.

*----------------------------------------------------------------------*
*     Processing the data from line structure to internal tables       *
*----------------------------------------------------------------------*

  REFRESH:it_me21.
  CLEAR  :it_me21.

  LOOP AT it_dummy.
    IF it_dummy-dummy+0(01) = 'H'.
      v_indx = v_indx + 1.
      CLEAR   it_idata.
      REFRESH it_idata.
      CLEAR   it_me21-x_data.
      REFRESH it_me21-x_data.
      SHIFT it_dummy.
      SPLIT it_dummy AT v_delimit INTO it_me21-lifnr
                                       it_me21-bsart
                                       it_me21-bedat
                                       it_me21-ekorg
                                       it_me21-ekgrp.
      APPEND it_me21.
    ELSEIF it_dummy-dummy+0(01) = 'L'.
      SHIFT it_dummy.
      SPLIT it_dummy AT v_delimit INTO it_idata-ematn
                                       it_idata-menge
                                       it_idata-netpr
                                       it_idata-werks
                                       it_idata-ebelp.

      APPEND it_idata TO it_me21-x_data.
      MODIFY it_me21 INDEX v_indx.
    ENDIF.
  ENDLOOP.

*----------------------------------------------------------------------*
*                 To open the group                                    *
*----------------------------------------------------------------------*

  PERFORM open_group.

*----------------------------------------------------------------------*
*         To populate the bdcdata table for header data                *
*----------------------------------------------------------------------*

  LOOP AT it_me21.
    v_count = v_count + 1.
    REFRESH it_bdcdata.
    PERFORM subr_bdc_table USING:   'X' 'SAPMM06E'    '0100',
                                    ' ' 'BDC_CURSOR'  'EKKO-LIFNR',
                                    ' ' 'BDC_OKCODE'  '/00',
                                    ' ' 'EKKO-LIFNR'  it_me21-lifnr,
                                    ' ' 'RM06E-BSART' it_me21-bsart,
                                    ' ' 'RM06E-BEDAT' it_me21-bedat,
                                    ' ' 'EKKO-EKORG'  it_me21-ekorg,
                                    ' ' 'EKKO-EKGRP'  it_me21-ekgrp,
                                    ' ' 'RM06E-LPEIN' 'T'.


    PERFORM subr_bdc_table USING:   'X' 'SAPMM06E'    '0120',
                                    ' ' 'BDC_CURSOR'  'RM06E-EBELP',
                                    ' ' 'BDC_OKCODE'  '/00'.

    MOVE 1 TO v_indx.

*-----To populate the bdcdata table for line item data

    LOOP AT it_me21-x_data INTO x_idata.
      CONCATENATE 'EKPO-EMATN(' v_indx ')'  INTO v_fnam.
      PERFORM  subr_bdc_table USING ' ' v_fnam x_idata-ematn.
      CONCATENATE 'EKPO-MENGE(' v_indx ')'  INTO v_fnam.
      PERFORM  subr_bdc_table USING ' ' v_fnam x_idata-menge.
      CONCATENATE 'EKPO-NETPR(' v_indx ')'  INTO v_fnam.
      PERFORM  subr_bdc_table USING ' ' v_fnam x_idata-netpr.
      CONCATENATE 'EKPO-WERKS(' v_indx ')'  INTO v_fnam.
      PERFORM  subr_bdc_table USING ' ' v_fnam x_idata-werks.
      v_indx = v_indx + 1.

      PERFORM subr_bdc_table USING:  'X' 'SAPMM06E'    '0120',
                                     ' ' 'BDC_CURSOR'  'RM06E-EBELP',
                                     ' ' 'BDC_OKCODE'  '/00'.
    ENDLOOP.

    PERFORM subr_bdc_table USING:    'X' 'SAPMM06E'    '0120',
                                     ' ' 'BDC_CURSOR'  'RM06E-EBELP',
                                     ' ' 'BDC_OKCODE'  '=BU'.

    PERFORM bdc_transaction USING 'ME21'.
  ENDLOOP.
  PERFORM close_group.

*----------------------------------------------------------------------*
*                   End of selection event                             *
*----------------------------------------------------------------------*

END-OF-SELECTION.
  IF session NE 'X'.

*-----To display the successful records
    WRITE :/10  text-001.          "Sucess records
    WRITE :/10  SY-ULINE(20).
    SKIP.
    IF it_sucess IS INITIAL.
      WRITE 😕  text-002.
    ELSE.
      WRITE 😕   text-008,          "Total number of Succesful records
              35 v_ns.
      SKIP.
      WRITE:/   text-003,          "Vendor Number
             17 text-004,          "Record number
             30 text-005.          "Message
    ENDIF.

    LOOP AT it_sucess.
      WRITE:/4  it_sucess-lifnr,
             17 it_sucess-tabix CENTERED,
             30 it_sucess-sucess_rec.
    ENDLOOP.

    SKIP.

*-----To display the erroneous records

    WRITE:/10   text-006.          "Error Records
    WRITE:/10   SY-ULINE(17).
    SKIP.

    IF it_error IS INITIAL.
      WRITE:/   text-007.          "No error records
    ELSE.
      WRITE:/   text-009,          "Total number of erroneous records
             35 v_ne.
      SKIP.
      WRITE:/   text-003,          "Vendor Number
             17 text-004,          "Record number
             30 text-005.          "Message
    ENDIF.

    LOOP AT it_error.
      WRITE:/4  it_error-lifnr,
             17 it_error-tabix CENTERED,
             30 it_error-error_rec.
    ENDLOOP.

    REFRESH it_sucess.
    REFRESH it_error.

  ENDIF.

CODE IN INCLUDE.

*----------------------------------------------------------------------*
*  Include           ZMM_INCL_PURCHASEORDERKB01
*----------------------------------------------------------------------*

DATA:   it_BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE.
DATA:   it_MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA:   E_GROUP_OPENED.

*-----Internal table to store sucess records

DATA:BEGIN OF it_sucess OCCURS 0,
       msgtyp(1)   TYPE c,
       lifnr  LIKE  ekko-lifnr,
       tabix  LIKE  sy-tabix,
       sucess_rec(125),
     END OF it_sucess.

DATA: g_mess(125) type c.

*-----Internal table to store error records
DATA:BEGIN OF it_error OCCURS 0,
       msgtyp(1)   TYPE c,
       lifnr  LIKE  ekko-lifnr,
       tabix  LIKE  sy-tabix,
       error_rec(125),
     END OF it_error.

*----------------------------------------------------------------------*
*        Selection screen
*----------------------------------------------------------------------*

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 48(20) text-s06 FOR FIELD cupdate.
SELECTION-SCREEN POSITION 70.
PARAMETERS cupdate LIKE ctu_params-updmode DEFAULT 'L'.
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 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.
PARAMETERS:p_file LIKE rlgrap-filename.

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

*----------------------------------------------------------------------*
*   create batchinput session                                          *
*----------------------------------------------------------------------*

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   = sy-uname.
    WRITE:/(30) 'BDC_OPEN_GROUP'(I02),
            (12) 'returncode:'(I05),
                 SY-SUBRC.
  ENDIF.
ENDFORM.                    "OPEN_GROUP

*----------------------------------------------------------------------*
*   end batchinput 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).
    ENDIF.
  ENDIF.
ENDFORM.                    "CLOSE_GROUP


*----------------------------------------------------------------------*
*        Start new transaction according to parameters                 *
*----------------------------------------------------------------------*

FORM BDC_TRANSACTION USING TCODE TYPE ANY.
  DATA: L_SUBRC LIKE SY-SUBRC.
*------batch input session
  IF SESSION = 'X'.
    CALL FUNCTION 'BDC_INSERT'
      EXPORTING
        TCODE     = TCODE
      TABLES
        DYNPROTAB = it_BDCDATA.

    WRITE: / 'BDC_INSERT'(I03),
             TCODE,
             'returncode:'(I05),
             SY-SUBRC,
             'RECORD:',
             SY-INDEX.
  ELSE.
    REFRESH it_MESSTAB.
    CALL TRANSACTION TCODE USING it_BDCDATA
                     MODE   CTUMODE
                     UPDATE CUPDATE
                     MESSAGES INTO it_MESSTAB.
    L_SUBRC = SY-SUBRC.
    WRITE: / 'CALL_TRANSACTION',
             TCODE,
             'returncode:'(I05),
             L_SUBRC,
             'RECORD:',
             SY-INDEX.
  ENDIF.

*----------------------------------------------------------------------*
*   Message handling for Call Transaction                              *
*----------------------------------------------------------------------*
  perform subr_mess_hand using g_mess.

*-----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   = sy-uname
          KEEP   = E_KEEP.
      E_GROUP_OPENED = 'X'.
    ENDIF.

    CALL FUNCTION 'BDC_INSERT'
      EXPORTING
        TCODE     = TCODE
      TABLES
        DYNPROTAB = it_BDCDATA.
  ENDIF.

  REFRESH it_BDCDATA.

ENDFORM.                    "BDC_TRANSACTION

*----------------------------------------------------------------------*
*      Form  subr_bdc_table                                            *
*----------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0220   text                                                *
*      -->P_0221   text                                                *
*      -->P_0222   text                                                *
*----------------------------------------------------------------------*

FORM subr_bdc_table  USING      VALUE(P_0220) TYPE ANY
                                VALUE(P_0221) TYPE ANY
                                VALUE(P_0222) TYPE ANY.

  CLEAR it_bdcdata.
  IF P_0220 = ' '.
    CLEAR it_bdcdata.
    it_bdcdata-fnam     = P_0221.
    it_bdcdata-fval     = P_0222.
    APPEND it_bdcdata.
  ELSE.
    it_bdcdata-dynbegin = P_0220.
    it_bdcdata-program  = P_0221.
    it_bdcdata-dynpro   = P_0222.
    APPEND it_bdcdata.
  ENDIF.

ENDFORM.                    " subr_bdc_table

*----------------------------------------------------------------------*
*      Form  subr_mess_hand                                            *
*----------------------------------------------------------------------*
*       text                                                           *
*----------------------------------------------------------------------*
*      -->P_G_MESS  text                                               *
*----------------------------------------------------------------------*

FORM subr_mess_hand USING  P_G_MESS TYPE ANY.
  LOOP AT IT_MESSTAB.
    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        ID     = it_messtab-msgid
        LANG   = it_messtab-msgspra
        NO     = it_messtab-msgnr
        v1     = it_messtab-msgv1
        v2     = it_messtab-msgv2
      IMPORTING
        MSG    = P_G_MESS
      EXCEPTIONS
        OTHERS = 0.

    CASE it_messtab-msgtyp.
      when 'E'.
        it_error-error_rec   =  P_G_MESS.
        it_error-lifnr       =  it_me21-lifnr.
        it_error-tabix       =  v_count.
        APPEND IT_ERROR.
      when 'S'.
        it_sucess-sucess_rec =  P_G_MESS.
        it_sucess-lifnr      =  it_me21-lifnr.
        it_sucess-tabix      =  v_count.
        APPEND IT_SUCESS.

    endcase.

  ENDLOOP.
  Describe table it_sucess lines v_ns.
  Describe table it_error  lines v_ne.

ENDFORM.                    " subr_mess_hand

reward points if it is usefull ...

Girish

Former Member
0 Kudos
225

Hi,

generally speaking in BDC table control is handeled with row index no. with field like tabctrl-flld(01) means first row on table. data to be updated in table control is fetched in seprate table control and this table in looped in main loop at itab.

this is one example:

"BDC XK01 using Table control:
REPORT Y730_BDC5 .
*HANDLING TABLE CONTROL IN BDC
DATA : BEGIN OF IT_DUMMY OCCURS 0,
       DUMMY(100) TYPE C,
       END OF IT_DUMMY.
DATA : BEGIN OF IT_XK01 OCCURS 0,
       LIFNR(10) TYPE C,
       BUKRS(4)  TYPE C,
       EKORG(4)  TYPE C,
       KTOKK(4)  TYPE C,
       NAME1(30) TYPE C,
       SORTL(10) TYPE C,
       LAND1(3)  TYPE C,
       SPRAS(2)  TYPE C,
       AKONT(6)  TYPE C,
       FDGRV(2)  TYPE C,
       WAERS(3)  TYPE C,
       END OF IT_XK01,
       BEGIN OF IT_BANK OCCURS 0,
       BANKS(3)  TYPE C,
       BANKL(10) TYPE C,
       BANKN(10) TYPE C,
       KOINH(30) TYPE C,
       LIFNR(10) TYPE C,
       END OF IT_BANK.
DATA : IT_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE,
       IT_BDCMSGCOLL LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.

CALL FUNCTION 'WS_UPLOAD'
 EXPORTING
   FILENAME                      = 'C:VENDOR.TXT'
   FILETYPE                      = 'ASC'
 TABLES
   DATA_TAB                      = IT_DUMMY.

LOOP AT IT_DUMMY.
  IF IT_DUMMY-DUMMY+0(2) = '11'.
    IT_XK01-LIFNR = IT_DUMMY-DUMMY+2(10).
    IT_XK01-BUKRS = IT_DUMMY-DUMMY+12(4).
    IT_XK01-EKORG = IT_DUMMY-DUMMY+16(4).
    IT_XK01-KTOKK = IT_DUMMY-DUMMY+20(4).
    IT_XK01-NAME1 = IT_DUMMY-DUMMY+24(30).
    IT_XK01-SORTL = IT_DUMMY-DUMMY+54(10).
    IT_XK01-LAND1 = IT_DUMMY-DUMMY+64(3).
    IT_XK01-SPRAS = IT_DUMMY-DUMMY+67(2).
    IT_XK01-AKONT = IT_DUMMY-DUMMY+69(6).
    IT_XK01-FDGRV = IT_DUMMY-DUMMY+75(2).
    IT_XK01-WAERS = IT_DUMMY-DUMMY+77(3).
    APPEND IT_XK01.
  ELSE.
    IT_BANK-BANKS = IT_DUMMY-DUMMY+2(3).
    IT_BANK-BANKL = IT_DUMMY-DUMMY+5(10).
    IT_BANK-BANKN = IT_DUMMY-DUMMY+15(10).
    IT_BANK-KOINH = IT_DUMMY-DUMMY+25(30).
    IT_BANK-LIFNR = IT_DUMMY-DUMMY+55(10).
    APPEND IT_BANK.
  ENDIF.
ENDLOOP.

LOOP AT IT_XK01.
REFRESH IT_BDCDATA.
perform bdc_dynpro      using 'SAPMF02K' '0100'.
perform bdc_field       using 'BDC_CURSOR'
                              'RF02K-REF_LIFNR'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_field       using 'RF02K-LIFNR'
                              IT_XK01-LIFNR.
perform bdc_field       using 'RF02K-BUKRS'
                              IT_XK01-BUKRS.
perform bdc_field       using 'RF02K-EKORG'
                              IT_XK01-EKORG.
perform bdc_field       using 'RF02K-KTOKK'
                              IT_XK01-KTOKK.
perform bdc_dynpro      using 'SAPMF02K' '0110'.
perform bdc_field       using 'BDC_CURSOR'
                              'LFA1-TELX1'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_field       using 'LFA1-NAME1'
                              IT_XK01-NAME1.
perform bdc_field       using 'LFA1-SORTL'
                              IT_XK01-SORTL.
perform bdc_field       using 'LFA1-LAND1'
                              IT_XK01-LAND1.
perform bdc_field       using 'LFA1-SPRAS'
                              IT_XK01-SPRAS.
perform bdc_dynpro      using 'SAPMF02K' '0120'.
perform bdc_field       using 'BDC_CURSOR'
                              'LFA1-KUNNR'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_dynpro      using 'SAPMF02K' '0130'.
perform bdc_field       using 'BDC_CURSOR'
                              'LFBK-KOINH(02)'.
perform bdc_field       using 'BDC_OKCODE'
                              '=ENTR'.
DATA : FNAM(20) TYPE C,
       IDX      TYPE C.
LFBK-BANKS(3)
  MOVE 1 TO IDX.
LOOP AT IT_BANK WHERE LIFNR = IT_XK01-LIFNR.
  CONCATENATE 'LFBK-BANKS(' IDX ')' INTO FNAM.
  perform bdc_field       using FNAM
                                IT_BANK-BANKS.

  CONCATENATE 'LFBK-BANKL(' IDX ')' INTO FNAM.
  perform bdc_field       using FNAM
                                IT_BANK-BANKL.

  CONCATENATE 'LFBK-BANKN(' IDX ')' INTO FNAM.
  perform bdc_field       using FNAM
                                IT_BANK-BANKN.

  CONCATENATE 'LFBK-KOINH(' IDX ')' INTO FNAM.
  perform bdc_field       using FNAM
                                IT_BANK-KOINH.
  IDX = IDX + 1.
ENDLOOP.

perform bdc_dynpro      using 'SAPMF02K' '0130'.
perform bdc_field       using 'BDC_CURSOR'
                              'LFBK-BANKS(01)'.
perform bdc_field       using 'BDC_OKCODE'
                              '=ENTR'.
perform bdc_dynpro      using 'SAPMF02K' '0210'.
perform bdc_field       using 'BDC_CURSOR'
                              'LFB1-FDGRV'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_field       using 'LFB1-AKONT'
                              IT_XK01-AKONT.
perform bdc_field       using 'LFB1-FDGRV'
                              IT_XK01-FDGRV.
perform bdc_dynpro      using 'SAPMF02K' '0215'.
perform bdc_field       using 'BDC_CURSOR'
                              'LFB1-ZTERM'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_dynpro      using 'SAPMF02K' '0220'.
perform bdc_field       using 'BDC_CURSOR'
                              'LFB5-MAHNA'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_dynpro      using 'SAPMF02K' '0310'.
perform bdc_field       using 'BDC_CURSOR'
                              'LFM1-WAERS'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_field       using 'LFM1-WAERS'
                              IT_XK01-WAERS.
perform bdc_dynpro      using 'SAPMF02K' '0320'.
perform bdc_field       using 'BDC_CURSOR'
                              'WYT3-PARVW(01)'.
perform bdc_field       using 'BDC_OKCODE'
                              '=ENTR'.
perform bdc_dynpro      using 'SAPLSPO1' '0300'.
perform bdc_field       using 'BDC_OKCODE'
                              '=YES'.
CALL TRANSACTION 'XK01' USING IT_BDCDATA
                        MODE  'A'
                       UPDATE 'S'
                     MESSAGES INTO IT_BDCMSGCOLL.
ENDLOOP.

FORM BDC_DYNPRO USING PROG SCR.
  CLEAR IT_BDCDATA.
  IT_BDCDATA-PROGRAM = PROG.
  IT_BDCDATA-DYNPRO  = SCR.
  IT_BDCDATA-DYNBEGIN = 'X'.
  APPEND IT_BDCDATA.
ENDFORM.

FORM BDC_FIELD USING FNAM FVAL.
  CLEAR IT_BDCDATA.
  IT_BDCDATA-FNAM = FNAM.
  IT_BDCDATA-FVAL  = FVAL.
  APPEND IT_BDCDATA.
ENDFORM.
&#8195;

Jogdand M B