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

Problem in doing BDC for XK01

Former Member
0 Likes
427

Hi all,

i am doing BDC for XK01 with Line Item for Bank Details(Table Control..)

With 3 Internal table

IT_dummy to get the flat file

IT_vend for Header details

IT_bank for Item Details

in this there is a Nested loop

Loop at it_vend.

perform bdc

..................

..................

loop at it_bank.

concatenate................

..................

..................

endloop.

endloop.

because of the above nested loops..it's bit slow..

& i am trying to do with a single internal table..

The problem is..

with the header data it's not picking all the item data(it's picking only one..)..help me in resolving the problem..

Below the code..

REPORT ZMM_BDCTC1 NO STANDARD PAGE HEADING LINE-SIZE 255.

PARAMETER:P_FILE TYPE RLGRAP-FILENAME.

DATA BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF IT_DUMMY OCCURS 0,

TYP,

DES(255) TYPE C,

END OF IT_DUMMY.

DATA:DELIMITER VALUE ',',

cnt(4) TYPE N,

L_FNAM(30) TYPE C,

FILENAME TYPE STRING.

TYPES:BEGIN OF TY_FINAL,

N(4) TYPE C,

LIFNR TYPE RF02K-LIFNR,

BUKRS TYPE RF02K-BUKRS,

EKORG TYPE RF02K-EKORG,

KTOKK TYPE RF02K-KTOKK,

NAME1 TYPE LFA1-NAME1,

SORTL TYPE LFA1-SORTL,

LAND1 TYPE LFA1-LAND1,

AKONT TYPE LFB1-AKONT,

FDGRV TYPE LFB1-FDGRV,

WAERS LIKE LFM1-WAERS,

M(4) TYPE C,

BANKS TYPE LFBK-BANKS,

BANKL TYPE LFBK-BANKL,

BANKN TYPE LFBK-BANKN,

KOINH TYPE LFBK-KOINH,

END OF TY_FINAL.

DATA: IT_FINAL TYPE TABLE OF TY_FINAL,

WA_FINAL TYPE TY_FINAL.

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.

FILENAME = P_FILE.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename = FILENAME

FILETYPE = 'ASC'

tables

data_tab = IT_DUMMY.

START-OF-SELECTION.

LOOP AT it_dummy.

IF it_dummy-typ = 'H'.

SPLIT it_dummy-des AT delimiter INTO WA_FINAL-lifnr "Populating Header Table

WA_FINAL-bukrs

WA_FINAL-ekorg

WA_FINAL-ktokk

WA_FINAL-name1

WA_FINAL-sortl

WA_FINAL-land1

WA_FINAL-akont

WA_FINAL-fdgrv

WA_FINAL-waers.

WA_FINAL-N = WA_FINAL-N + 1.

WA_FINAL-M = WA_FINAL-M + 1.

ELSEIF it_dummy-typ = 'I'.

SPLIT it_dummy-des AT delimiter INTO WA_FINAL-BANKS

WA_FINAL-BANKL

WA_FINAL-BANKN

WA_FINAL-KOINH.

APPEND WA_FINAL TO IT_FINAL.

ENDIF.

ENDLOOP.

LOOP AT IT_FINAL INTO WA_FINAL.

WRITE:/ WA_FINAL-N,

WA_FINAL-LIFNR,

WA_FINAL-BUKRS,

WA_FINAL-EKORG,

WA_FINAL-KTOKK,

WA_FINAL-NAME1,

WA_FINAL-SORTL,

WA_FINAL-LAND1,

WA_FINAL-AKONT,

WA_FINAL-FDGRV,

WA_FINAL-WAERS,

WA_FINAL-M,

WA_FINAL-BANKS,

WA_FINAL-BANKL,

WA_FINAL-BANKN,

WA_FINAL-KOINH.

ENDLOOP.

data: WA_FINAL1 like line of IT_FINAL.

clear WA_FINAL1.

******************BDC STARTS***********************

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT = SY-MANDT

GROUP = 'ZMM_BDCTAB'

KEEP = 'X'

USER = SY-UNAME.

Clear wa_final.

LOOP AT IT_FINAL INTO WA_FINAL.

WA_FINAL1 = WA_FINAL.

CLEAR BDCDATA[].

AT NEW N.

cnt = 1.

perform bdc_dynpro using 'SAPMF02K' '0100'.

perform bdc_field using 'BDC_CURSOR'

'RF02K-KTOKK'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'RF02K-LIFNR'

WA_FINAL1-LIFNR.

perform bdc_field using 'RF02K-BUKRS'

WA_FINAL1-BUKRS.

perform bdc_field using 'RF02K-EKORG'

WA_FINAL1-EKORG.

perform bdc_field using 'RF02K-KTOKK'

WA_FINAL1-KTOKK.

perform bdc_dynpro using 'SAPMF02K' '0110'.

perform bdc_field using 'BDC_CURSOR'

'LFA1-LAND1'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'LFA1-NAME1'

WA_FINAL1-NAME1.

perform bdc_field using 'LFA1-SORTL'

WA_FINAL1-SORTL.

perform bdc_field using 'LFA1-LAND1'

WA_FINAL1-LAND1.

perform bdc_dynpro using 'SAPMF02K' '0120'. "ERROR CLEARED

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(01)'.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

ENDAT.

*ENDON.

IF WA_FINAL1-N = WA_FINAL1-M.

CONCATENATE 'LFBK-BANKS(' cnt ')' INTO L_FNAM.

perform bdc_field using L_FNAM

WA_FINAL1-BANKS.

CONCATENATE 'LFBK-BANKL(' cnt ')' INTO L_FNAM.

perform bdc_field using L_FNAM

WA_FINAL1-BANKL.

CONCATENATE 'LFBK-BANKN(' cnt ')' INTO L_FNAM.

perform bdc_field using L_FNAM

WA_FINAL1-BANKN.

CONCATENATE 'LFBK-KOINH(' cnt ')' INTO L_FNAM.

perform bdc_field using L_FNAM

WA_FINAL1-KOINH.

*ENDDO.

cnt = cnt + 1.

ENDIF.

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

*AT NEW LIFNR.

perform bdc_field using 'LFB1-AKONT'

WA_FINAL1-AKONT.

perform bdc_field using 'LFB1-FDGRV'

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

WA_FINAL1-WAERS.

perform bdc_dynpro using 'SAPMF02K' '0320'.

perform bdc_field using 'BDC_CURSOR'

'RF02K-LIFNR'.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

AT END OF M.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE = 'XK01'

TABLES

DYNPROTAB = BDCDATA.

ENDAT.

CLEAR WA_FINAL1.

CLEAR WA_FINAL.

ENDLOOP.

CALL FUNCTION 'BDC_CLOSE_GROUP'.

*********************BDC ENDS***********************

----


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

Flat File is..

HAAA45,1000,1000,0002,NAME45,N,IN,31000,A1,USD

IIN,1000,1021,Name45

IIN,1000,1022,Name45

HAAA50,1000,1000,0002,NAME50,N,IN,31000,A1,USD

IIN,1000,1023,Name50

IIN,1000,1024,Name50

Hi all,

i am doing BDC for XK01 with Line Item for Bank Details(Table Control..)

With 3 Internal table

IT_dummy to get the flat file

IT_vend for Header details

IT_bank for Item Details

in this there is a Nested loop

Loop at it_vend.

perform bdc

..................

..................

loop at it_bank.

concatenate................

..................

..................

endloop.

endloop.

because of the above nested loops..it's bit slow..

& i am trying to do with a single internal table..

The problem is..

with the header data it's not picking all the item data(it's picking only one..)..help me in resolving the problem..

Below the code..

REPORT ZMM_BDCTC1 NO STANDARD PAGE HEADING LINE-SIZE 255.

PARAMETER:P_FILE TYPE RLGRAP-FILENAME.

DATA BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF IT_DUMMY OCCURS 0,

TYP,

DES(255) TYPE C,

END OF IT_DUMMY.

DATA:DELIMITER VALUE ',',

cnt(4) TYPE N,

L_FNAM(30) TYPE C,

FILENAME TYPE STRING.

TYPES:BEGIN OF TY_FINAL,

N(4) TYPE C,

LIFNR TYPE RF02K-LIFNR,

BUKRS TYPE RF02K-BUKRS,

EKORG TYPE RF02K-EKORG,

KTOKK TYPE RF02K-KTOKK,

NAME1 TYPE LFA1-NAME1,

SORTL TYPE LFA1-SORTL,

LAND1 TYPE LFA1-LAND1,

AKONT TYPE LFB1-AKONT,

FDGRV TYPE LFB1-FDGRV,

WAERS LIKE LFM1-WAERS,

M(4) TYPE C,

BANKS TYPE LFBK-BANKS,

BANKL TYPE LFBK-BANKL,

BANKN TYPE LFBK-BANKN,

KOINH TYPE LFBK-KOINH,

END OF TY_FINAL.

DATA: IT_FINAL TYPE TABLE OF TY_FINAL,

WA_FINAL TYPE TY_FINAL.

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.

FILENAME = P_FILE.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename = FILENAME

FILETYPE = 'ASC'

tables

data_tab = IT_DUMMY.

START-OF-SELECTION.

LOOP AT it_dummy.

IF it_dummy-typ = 'H'.

SPLIT it_dummy-des AT delimiter INTO WA_FINAL-lifnr "Populating Header Table

WA_FINAL-bukrs

WA_FINAL-ekorg

WA_FINAL-ktokk

WA_FINAL-name1

WA_FINAL-sortl

WA_FINAL-land1

WA_FINAL-akont

WA_FINAL-fdgrv

WA_FINAL-waers.

WA_FINAL-N = WA_FINAL-N + 1.

WA_FINAL-M = WA_FINAL-M + 1.

ELSEIF it_dummy-typ = 'I'.

SPLIT it_dummy-des AT delimiter INTO WA_FINAL-BANKS

WA_FINAL-BANKL

WA_FINAL-BANKN

WA_FINAL-KOINH.

APPEND WA_FINAL TO IT_FINAL.

ENDIF.

ENDLOOP.

LOOP AT IT_FINAL INTO WA_FINAL.

WRITE:/ WA_FINAL-N,

WA_FINAL-LIFNR,

WA_FINAL-BUKRS,

WA_FINAL-EKORG,

WA_FINAL-KTOKK,

WA_FINAL-NAME1,

WA_FINAL-SORTL,

WA_FINAL-LAND1,

WA_FINAL-AKONT,

WA_FINAL-FDGRV,

WA_FINAL-WAERS,

WA_FINAL-M,

WA_FINAL-BANKS,

WA_FINAL-BANKL,

WA_FINAL-BANKN,

WA_FINAL-KOINH.

ENDLOOP.

data: WA_FINAL1 like line of IT_FINAL.

clear WA_FINAL1.

******************BDC STARTS***********************

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT = SY-MANDT

GROUP = 'ZMM_BDCTAB'

KEEP = 'X'

USER = SY-UNAME.

Clear wa_final.

LOOP AT IT_FINAL INTO WA_FINAL.

WA_FINAL1 = WA_FINAL.

CLEAR BDCDATA[].

AT NEW N.

cnt = 1.

perform bdc_dynpro using 'SAPMF02K' '0100'.

perform bdc_field using 'BDC_CURSOR'

'RF02K-KTOKK'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'RF02K-LIFNR'

WA_FINAL1-LIFNR.

perform bdc_field using 'RF02K-BUKRS'

WA_FINAL1-BUKRS.

perform bdc_field using 'RF02K-EKORG'

WA_FINAL1-EKORG.

perform bdc_field using 'RF02K-KTOKK'

WA_FINAL1-KTOKK.

perform bdc_dynpro using 'SAPMF02K' '0110'.

perform bdc_field using 'BDC_CURSOR'

'LFA1-LAND1'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'LFA1-NAME1'

WA_FINAL1-NAME1.

perform bdc_field using 'LFA1-SORTL'

WA_FINAL1-SORTL.

perform bdc_field using 'LFA1-LAND1'

WA_FINAL1-LAND1.

perform bdc_dynpro using 'SAPMF02K' '0120'. "ERROR CLEARED

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(01)'.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

ENDAT.

*ENDON.

IF WA_FINAL1-N = WA_FINAL1-M.

CONCATENATE 'LFBK-BANKS(' cnt ')' INTO L_FNAM.

perform bdc_field using L_FNAM

WA_FINAL1-BANKS.

CONCATENATE 'LFBK-BANKL(' cnt ')' INTO L_FNAM.

perform bdc_field using L_FNAM

WA_FINAL1-BANKL.

CONCATENATE 'LFBK-BANKN(' cnt ')' INTO L_FNAM.

perform bdc_field using L_FNAM

WA_FINAL1-BANKN.

CONCATENATE 'LFBK-KOINH(' cnt ')' INTO L_FNAM.

perform bdc_field using L_FNAM

WA_FINAL1-KOINH.

*ENDDO.

cnt = cnt + 1.

ENDIF.

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

*AT NEW LIFNR.

perform bdc_field using 'LFB1-AKONT'

WA_FINAL1-AKONT.

perform bdc_field using 'LFB1-FDGRV'

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

WA_FINAL1-WAERS.

perform bdc_dynpro using 'SAPMF02K' '0320'.

perform bdc_field using 'BDC_CURSOR'

'RF02K-LIFNR'.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

AT END OF M.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE = 'XK01'

TABLES

DYNPROTAB = BDCDATA.

ENDAT.

CLEAR WA_FINAL1.

CLEAR WA_FINAL.

ENDLOOP.

CALL FUNCTION 'BDC_CLOSE_GROUP'.

*********************BDC ENDS***********************

----


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

Flat File is..

HAAA45,1000,1000,0002,NAME45,N,IN,31000,A1,USD

IIN,1000,1021,Name45

IIN,1000,1022,Name45

HAAA50,1000,1000,0002,NAME50,N,IN,31000,A1,USD

IIN,1000,1023,Name50

IIN,1000,1024,Name50

1 REPLY 1
Read only

Former Member
0 Likes
321

Regarding avoiding the loop I have a suggestion, though I have not tried this .

SAP help says " Using the internal table bdc_tab, you can provide any number of screens of the called transaction with input and user actions. " .

Above implies you can load all records in the itab bdc_tab when doing call transaction. Say, your bdc_tabl has 30 records for 1 pass of the transaction. You need to update 10 vendor records. You simply load up all 300 records into bdc_tab. After every 30 record loads, you simulate a 'SAVE' press in your program but do not leave the transaction. Rather you simulate the keystroke that takes you to the first screen of XK01 after the save if not aready there, and start loading up the next transaction.