Application Development and Automation 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: 
Read only

BDC using Table Control

Former Member
0 Likes
768

Hi,

Iam trying to learn BDC using Table Control.

I usually create a template pgm and record its execution using SHDB transaction and then use the recording to create the BDC pgm.

On Googling I found this link

[Using Table Control in BDC|http://wiki.sdn.sap.com/wiki/display/Snippets/UsingTableControlinBDC]

But Iam confused on how to perform scrolling in table control in case number of data is dynamic...???

Pls help...

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
665

To fill lines in Table control:

For table control in bdc declare two variable as integer.

set the variable value as 0.In the program before the line

item perform statement set the counter value as 1.

count=count+1.then u hv to use the concantenate

statementfor the line items for example

concantenate '(lfa1-banks('count'))' into cval

perform bdc using cval.

Next page:

during recording for the line items we have record for the

next page also for the line item.goto standard tool bar u

have to press the next page button.

if count=5.

perform bdc using p+ ->this for next page

endif

clear count.

To make the bdc execute in standard screen size do following:

data: w_params type ctu_params.

w_params-defsize = 'X'. " This is for resolution in any system

w_params-dismode = 'N'.

w_params-updmode = 'S'.

call transaction TCODE using t_bdcdata options from w_params.

BDC now will run in standard font size

Here is same question as yours'

[;

4 REPLIES 4
Read only

Former Member
0 Likes
666

To fill lines in Table control:

For table control in bdc declare two variable as integer.

set the variable value as 0.In the program before the line

item perform statement set the counter value as 1.

count=count+1.then u hv to use the concantenate

statementfor the line items for example

concantenate '(lfa1-banks('count'))' into cval

perform bdc using cval.

Next page:

during recording for the line items we have record for the

next page also for the line item.goto standard tool bar u

have to press the next page button.

if count=5.

perform bdc using p+ ->this for next page

endif

clear count.

To make the bdc execute in standard screen size do following:

data: w_params type ctu_params.

w_params-defsize = 'X'. " This is for resolution in any system

w_params-dismode = 'N'.

w_params-updmode = 'S'.

call transaction TCODE using t_bdcdata options from w_params.

BDC now will run in standard font size

Here is same question as yours'

[;

Read only

Former Member
0 Likes
665

perform bdc using cval.

during recording for the line items we hv record for the

next page also for the line item.goto standard tool bar u

hv to press the next page button.

if count=5.

perform bdc using p+ ->this for next page

endif

clear count.

<< Cut and paste without attribution from removed >>

Edited by: Rob Burbank on Apr 11, 2010 2:35 PM

Read only

Former Member
0 Likes
665

Hi,

Try this!! Let me know if you need dataset too!

&----


*& Report ZRT_SOUPLOAD

*&

&----


*&

*&

&----


REPORT zrt_soupload.

*TYPES Declaration

TYPES: BEGIN OF st_header,

auart TYPE vbak-auart,

vkorg TYPE vbak-vkorg,

vtweg TYPE vbak-vtweg,

spart TYPE vbak-spart,

vkbur TYPE vbak-vkbur,

vkgrp TYPE vbak-vkgrp,

kunnr_solto TYPE kunnr,

kunnr_shpto TYPE kunnr,

ketdat TYPE rv45a-ketdat,

kprgbz TYPE rv45a-kprgbz,

prsdt TYPE vbkd-prsdt,

header_index TYPE i,

END OF st_header,

BEGIN OF st_line,

mabnr TYPE rv45a-mabnr,

arktx TYPE vbap-arktx,

kwmeng TYPE rv45a-kwmeng,

kunnr_solto TYPE kunnr,

kunnr_shpto TYPE kunnr,

ketdat TYPE rv45a-ketdat,

kprgbz TYPE rv45a-kprgbz,

prsdt TYPE vbkd-prsdt,

inco1 TYPE vbkd-inco1,

inco2 TYPE vbkd-inco2,

zterm TYPE vbkd-zterm,

line_index TYPE i,

END OF st_line.

TYPES: BEGIN OF st_all,

auart TYPE vbak-auart,

vkorg TYPE vbak-vkorg,

vtweg TYPE vbak-vtweg,

spart TYPE vbak-spart,

vkbur TYPE vbak-vkbur,

vkgrp TYPE vbak-vkgrp,

kunnr_solto TYPE kunnr,

kunnr_shpto TYPE kunnr,

ketdat TYPE rv45a-ketdat,

kprgbz TYPE rv45a-kprgbz,

prsdt TYPE vbkd-prsdt,

mabnr TYPE rv45a-mabnr,

arktx TYPE vbap-arktx,

kwmeng TYPE rv45a-kwmeng,

kunnr_solto1 TYPE kunnr,

kunnr_shpto1 TYPE kunnr,

ketdat1 TYPE rv45a-ketdat,

kprgbz1 TYPE rv45a-kprgbz,

prsdt1 TYPE vbkd-prsdt,

inco11 TYPE vbkd-inco1,

inco21 TYPE vbkd-inco2,

zterm1 TYPE vbkd-zterm,

END OF st_all.

DATA: BEGIN OF itab OCCURS 0,

field1(25),

field2(25),

field3(25),

field4(15),

field5(25),

field6(25),

field7(25),

field8(25),

field9(25),

field10(25),

field11(25),

field12(25),

field13(25),

field14(25),

field15(25),

field16(25),

field17(25),

field18(25),

field19(25),

field20(25),

field21(25),

field22(25),

fiels23(25),

msgid LIKE sy-msgid,

msgno LIKE sy-msgno,

error(25),

success(25),

END OF itab.

DATA: gt_header TYPE STANDARD TABLE OF st_header,

gw_header TYPE st_header,

gt_line TYPE STANDARD TABLE OF st_line,

gw_line TYPE st_line,

gt_all TYPE STANDARD TABLE OF st_all,

gw_all TYPE st_all.

DATA: l_count TYPE i.

DATA: bdcdata TYPE STANDARD TABLE OF bdcdata WITH HEADER LINE.

START-OF-SELECTION.

PERFORM upload_data.

PERFORM put_data_in_itab.

PERFORM insert_data.

&----


*& Form UPLOAD_DATA

&----


  • text

----


FORM upload_data.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename = 'C:/UploadData/SALESORDER.TXT'

  • FILETYPE = 'ASC'

has_field_separator = 'X'

  • IMPORTING

  • FILELENGTH =

  • HEADER =

TABLES

data_tab = itab

EXCEPTIONS

file_open_error = 1

file_read_error = 2

OTHERS = 3.

.

IF sy-subrc <> 0.

CASE sy-subrc.

WHEN 1.

MESSAGE 'FILE OPEN ERROR' TYPE 'I'.

WHEN 2.

MESSAGE 'FILE READ ERROR' TYPE 'I'.

WHEN 3.

MESSAGE 'ERROR TYPE 3, WHAT IS THIS!!' TYPE 'I'.

ENDCASE.

ENDIF.

ENDFORM. "UPLOAD_DATA

&----


*& Form PUT_DATA_IN_ITAB

&----


  • text

----


FORM put_data_in_itab.

LOOP AT itab.

IF itab-field1+0(1) = '1'.

IF itab-field2+0(2) = 'OR'.

l_count = l_count + 1.

MOVE itab-field2 TO gw_header-auart.

MOVE itab-field3 TO gw_header-vkorg.

MOVE itab-field4 TO gw_header-vtweg.

MOVE itab-field5 TO gw_header-spart.

MOVE itab-field6 TO gw_header-vkbur.

MOVE itab-field7 TO gw_header-vkgrp.

MOVE itab-field8 TO gw_header-kunnr_solto.

MOVE itab-field9 TO gw_header-kunnr_shpto.

MOVE itab-field10 TO gw_header-ketdat.

MOVE itab-field11 TO gw_header-kprgbz.

MOVE itab-field12 TO gw_header-prsdt.

MOVE l_count TO gw_header-header_index.

APPEND gw_header TO gt_header.

ENDIF.

CLEAR: gw_header, l_count.

LOOP AT gt_header INTO gw_header.

MOVE-CORRESPONDING gw_header TO gw_all.

APPEND gw_all TO gt_all.

ENDLOOP.

ELSEIF itab-field1+0(1) = '2'.

l_count = l_count + 1.

MOVE itab-field2 TO gw_line-mabnr.

MOVE itab-field3 TO gw_line-arktx.

MOVE itab-field4 TO gw_line-kwmeng.

MOVE itab-field5 TO gw_line-kunnr_solto.

MOVE itab-field6 TO gw_line-kunnr_shpto.

MOVE itab-field7 TO gw_line-ketdat.

MOVE itab-field8 TO gw_line-kprgbz.

MOVE itab-field9 TO gw_line-prsdt.

MOVE itab-field10 TO gw_line-inco1.

MOVE itab-field11 TO gw_line-inco2.

MOVE itab-field12 TO gw_line-zterm.

MOVE l_count TO gw_line-line_index.

APPEND gw_line TO gt_line.

CLEAR: gw_line.

ENDIF.

ENDLOOP.

LOOP AT gt_line INTO gw_line.

MOVE-CORRESPONDING gw_line TO gw_all.

APPEND gw_all TO gt_all.

ENDLOOP.

ENDFORM. "PUT_DATA_IN_ITAB

*WRITE:/ 'REETESH'.

FORM insert_data.

CLEAR: gw_all, gw_header, gw_line, l_count.

DATA: head_count TYPE i,

line_count(25) TYPE c.

DATA: TABIX(10) TYPE C.

LOOP AT gt_header INTO gw_header.

CLEAR: bdcdata.

ON CHANGE OF gw_header-header_index.

IF sy-subrc <> 0.

EXIT.

ENDIF.

PERFORM bdc_dynpro USING 'SAPMV45A' '0101'.

PERFORM bdc_field USING 'BDC_CURSOR'

'VBAK-AUART'.

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'.

PERFORM bdc_field USING 'VBAK-AUART' gw_header-auart.

PERFORM bdc_field USING 'VBAK-VKORG' gw_header-vkorg.

PERFORM bdc_field USING 'VBAK-VTWEG' gw_header-vtweg.

PERFORM bdc_field USING 'VBAK-SPART' gw_header-spart.

PERFORM bdc_field USING 'VBAK-VKBUR' gw_header-vkbur.

PERFORM bdc_field USING 'VBAK-VKGRP' gw_header-vkgrp.

PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=ITEM'.

PERFORM bdc_field USING 'KUAGV-KUNNR' gw_header-kunnr_solto.

PERFORM bdc_field USING 'KUWEV-KUNNR' gw_header-kunnr_shpto.

PERFORM bdc_field USING 'RV45A-KETDAT' gw_header-ketdat.

PERFORM bdc_field USING 'RV45A-KPRGBZ' gw_header-kprgbz.

PERFORM bdc_field USING 'VBKD-PRSDT' gw_header-prsdt.

ENDON.

ENDLOOP.

LOOP AT gt_line INTO gw_line.

  • READ TABLE GT_LINE INTO GW_LINE-LINE_INDEX." LINE_COUNT.

  • IF SY-SUBRC = 0.

TABIX = SY-TABIX.

CONCATENATE 'VBAP-PSTYV' '(' tabix ')' INTO LINE_COUNT.

CONDENSE LINE_COUNT NO-GAPS.

PERFORM bdc_field USING 'BDC_CURSOR' LINE_COUNT.

  • 'VBAP-PSTYV(01)'.

CLEAR: LINE_COUNT.

CONCATENATE 'RV45A-MABNR' '(' tabix ')' INTO LINE_COUNT.

CONDENSE LINE_COUNT NO-GAPS.

PERFORM bdc_field USING LINE_COUNT

gw_line-mabnr.

CLEAR: LINE_COUNT.

CONCATENATE 'VBAP-ARKTX' '(' tabix ')' INTO LINE_COUNT.

CONDENSE LINE_COUNT NO-GAPS.

PERFORM bdc_field USING LINE_COUNT

gw_line-arktx.

CLEAR: LINE_COUNT.

CONCATENATE 'RV45A-KWMENG' '(' tabix ')' INTO LINE_COUNT.

CONDENSE LINE_COUNT NO-GAPS.

PERFORM bdc_field USING LINE_COUNT

'1'.

CLEAR: LINE_COUNT.

CONCATENATE 'VBAP-PSTYV' '(' tabix ')' INTO LINE_COUNT.

CONDENSE LINE_COUNT NO-GAPS.

PERFORM bdc_field USING LINE_COUNT

'TAN'.

PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=SICH'.

  • perform bdc_field using 'BDC_OKCODE'

  • '=P+'.

  • perform bdc_field using 'BDC_CURSOR'

  • 'VBAP-PSTYV(02)'.

*perform bdc_field using 'RV45A-MABNR(02)'

  • '100-251'.

*perform bdc_field using 'VBAP-ARKTX(02)'

  • 'Reetesh`s Order'.

*perform bdc_field using 'RV45A-KWMENG(02)'

  • '1'.

*perform bdc_field using 'VBAP-PSTYV(02)'

  • 'TAN'.

  • ENDIF.

ENDLOOP.

PERFORM call_transaction.

ENDFORM. "INSERT_DATA

&----


*& Form CALL_TRANSACTION

&----


  • text

----


FORM call_transaction.

CALL TRANSACTION 'VA01' USING bdcdata MODE 'A' UPDATE 'S'.

ENDFORM. "CALL_TRANSACTION

----


  • Start new screen *

----


FORM bdc_dynpro USING program dynpro.

CLEAR bdcdata.

bdcdata-program = program.

bdcdata-dynpro = dynpro.

bdcdata-dynbegin = 'X'.

APPEND bdcdata.

ENDFORM. "BDC_DYNPRO

----


  • Insert field *

----


FORM bdc_field USING fnam fval.

  • IF FVAL <> NODATA.

CLEAR bdcdata.

bdcdata-fnam = fnam.

bdcdata-fval = fval.

APPEND bdcdata.

  • ENDIF.

ENDFORM. "BDC_FIELD

Read only

Former Member
0 Likes
665

Hi Sentinel,

For BDC table control, two scenarios can be happened.

First one for page down:

For Page Down BDC_OKCODE is u2018P+u2019. [Ex: In Vendor creation (XK01) & Customer creation (XD01) for bank details data].

For second one:

For Enter Lines BDC_OKCODE is u2018NPu2019. [EX: RFQ Creation (ME41), PO Creation (ME21)]

Now you follow your code similar ways:

LOOP AT i_itemdata INTO wa_itemdata.

l_index = l_index + 1.

IF l_index > 15 .

CLEAR l_index.

PERFORM bdc_dynpro USING 'SAPMM06E' '0320'.

PERFORM bdc_field USING 'BDC_OKCODE' '=NP'.

l_index = 1.

l_index = l_index + 1.

ENDIF.

If your line item no is greater than 15, then it comes in next page.

Regards,

Tutun