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 with table control in FB50

former_member206377
Active Contributor
0 Kudos

hi ,

I am building BDC for transaction FB50 which has table control, can anybody help me how to do this..

Thanks ,

Vasuki

1 ACCEPTED SOLUTION

former_member189629
Active Contributor
0 Kudos

Vasuki,

You will basically need to have a variable to hold the index value (of type sy-tabix), and based on the number of lines u nhave to insert in the table control, you will have to increase the index counter to determine the line number into which you will enter the new entry.

Check out these links for code examples

http://www.sap-img.com/abap/bdc-example-using-table-control-in-bdc.htm

https://www.sdn.sap.com/irj/sdn/forumsearch

heres an example

*--- Local variables

DATA: lv_cnt(2) TYPE n, " to hold field count

lv_field(40), " to hold field names

lv_limit(2) TYPE n VALUE '09'. " max lines in a table control

*--- Looping at it_example to populate grid values into the table control

LOOP AT it_example.

*--- Incrementing the field counter at every loop

lv_cnt = lv_cnt + 1.

*--- Populating the pack code

CLEAR lv_field.

CONCATENATE 'J_3ABOMD-J_3AKORDXL(' lv_cnt ')' INTO lv_field.

PERFORM bdc_field USING lv_field it_example-packcode.

*--- Populating the Grid size

CLEAR lv_field.

CONCATENATE 'J_3ABOMD-J_3AKORDX(' lv_cnt ')' INTO lv_field.

PERFORM bdc_field USING lv_field it_example-gridsize.

*--- Populating the Quantity

CLEAR lv_field.

CONCATENATE 'J_3ABOMD-MENGE(' lv_cnt ')' INTO lv_field.

PERFORM bdc_field USING lv_field it_example-quantity.

*--- Checking if the table control display limit is crossed. If crossed

*--- page down is clicked

IF lv_cnt = 9..

PERFORM bdc_field USING 'BDC_OKCODE' '=P+'.

PERFORM bdc_dynpro USING 'SAPLJ3AC' '2000'.

*---

CLEAR lv_cnt.

  • LV_CNT = LV_CNT + 2.

  • LV_LIMIT = LV_LIMIT + LV_LIMIT.

ENDIF.

ENDLOOP.

Message was edited by:

Karthik

6 REPLIES 6

former_member189629
Active Contributor
0 Kudos

Vasuki,

You will basically need to have a variable to hold the index value (of type sy-tabix), and based on the number of lines u nhave to insert in the table control, you will have to increase the index counter to determine the line number into which you will enter the new entry.

Check out these links for code examples

http://www.sap-img.com/abap/bdc-example-using-table-control-in-bdc.htm

https://www.sdn.sap.com/irj/sdn/forumsearch

heres an example

*--- Local variables

DATA: lv_cnt(2) TYPE n, " to hold field count

lv_field(40), " to hold field names

lv_limit(2) TYPE n VALUE '09'. " max lines in a table control

*--- Looping at it_example to populate grid values into the table control

LOOP AT it_example.

*--- Incrementing the field counter at every loop

lv_cnt = lv_cnt + 1.

*--- Populating the pack code

CLEAR lv_field.

CONCATENATE 'J_3ABOMD-J_3AKORDXL(' lv_cnt ')' INTO lv_field.

PERFORM bdc_field USING lv_field it_example-packcode.

*--- Populating the Grid size

CLEAR lv_field.

CONCATENATE 'J_3ABOMD-J_3AKORDX(' lv_cnt ')' INTO lv_field.

PERFORM bdc_field USING lv_field it_example-gridsize.

*--- Populating the Quantity

CLEAR lv_field.

CONCATENATE 'J_3ABOMD-MENGE(' lv_cnt ')' INTO lv_field.

PERFORM bdc_field USING lv_field it_example-quantity.

*--- Checking if the table control display limit is crossed. If crossed

*--- page down is clicked

IF lv_cnt = 9..

PERFORM bdc_field USING 'BDC_OKCODE' '=P+'.

PERFORM bdc_dynpro USING 'SAPLJ3AC' '2000'.

*---

CLEAR lv_cnt.

  • LV_CNT = LV_CNT + 2.

  • LV_LIMIT = LV_LIMIT + LV_LIMIT.

ENDIF.

ENDLOOP.

Message was edited by:

Karthik

0 Kudos

Hi karthik,

Thanks for ur reply..which field do u concatenate?.. "'J_3ABOMD-J_3AKORDXL" which is this field which u r concatenating?can u be a bit clear abt this pls..

Thanks,

vasuki

0 Kudos

hi,

u had to concatenate the fields which are present in table control.

regards

siva

Former Member
0 Kudos

Hi,

Refer this thread

Regards

Shiva

Former Member
0 Kudos

Hi,

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.

Hope that would clear the matters for freshers.

Regards,

Bhaskar

raymond_giuseppi
Active Contributor
0 Kudos

There are ways simpler and perennial to do it:

(1) <b>BAPI</b> way

BAPI_ACC_GL_POSTING_POST 

(2) Some <b>Function Modules</b> can create the BDC for you :

POSTING_INTERFACE_START
POSTING_INTERFACE_DOCUMENT
POSTING_INTERFACE_END

(3) Some <b>programs</b> can create the BDC for you

RFBIBL00

Regards