‎2007 Jul 04 2:19 PM
HI
WHEN I UPLOAD FLAT FILE(HAS 25 RECORDS) USING BDC FIRST 18 ITEMS ARE LOADED PROPERLY.(MY TABLE CONTROL CAN HOLD 18 ITEMS ONLY)
BUT 19TH RECORD IS OVERWRITTEN ON 18TH RECORD ITSELF. AND REAT OF 6 RECORDS ARE LOADED SUCCESSFUKLLY.. WHAT SHOULD I DO?
‎2007 Jul 04 2:29 PM
Here is the program for 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.
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
‎2007 Jul 04 3:04 PM
Hi,
Check the table CTU_PARAMS and field DEFSIZE for setting fixed line of a table control.
CALL TRANSACTION 'VA01' USING it_bdcdata
OPTIONS FROM OPT
MESSAGES INTO it_mesg.
opt of type ctu_params.
WA_CTU_PARAMS-DISMODE = 'N'. "no screen mode
WA_CTU_PARAMS-UPDMODE = 'S'. "synchronus update
WA_CTU_PARAMS-NOBINPT = 'X'.
WA_CTU_PARAMS-NOBIEND = 'X'.
WA_CTU_PARAMS-DEFSIZE = 'X'. "Default size
Default size will play good role in terms of resoultion. in one system in table control you can see 10rows, but in others system it will show 20 records. it depends on resoultion. but when you set the default size then it will take same (default screen size) in all the systems when you run BDC.
Reward if helps.
Regards,
Omkar.
‎2007 Jul 04 3:15 PM
Step loop fields, table control fields
When assigning values to step loop fields, you must specify the number of the loop line in parentheses after the field name (for example, BDCDATA-FNAM = 'FELDX(5)' addresses the step loop field FELDX from the fifth line of the step loop).
The same applies to table control fields.
Reward Points if usefull.
-Veerndrnath Maddula.
‎2007 Jul 04 3:16 PM
It depends on the transaction. which are you using?
Many transactions have some sort of 'position' function. I find this much easier to use rather than trying to scroll down.
Rob
‎2007 Jul 05 7:38 AM
Hi,
To avoid that problem you increment page after 19th record and this code will help you to load all the records.
&----
*& Report ZTEST_BDC *
*& *
&----
*& *
*& *
&----
*REPORT ZTEST_BDC
REPORT ZTEST_BDC NO STANDARD PAGE HEADING LINE-SIZE 255.
INCLUDE BDCRECX1.
DATA : BEGIN OF ITAB OCCURS 0,
NUM(3) TYPE C,
EMATN LIKE EKPO-EMATN,
TXZ01 LIKE EKPO-TXZ01,
ANMNG(13) TYPE C,
MEINS LIKE EKPO-MEINS,
EEIND LIKE RM06E-EEIND,
MATKL LIKE EKPO-MATKL,
MEINS(3) TYPE C,
LPEIN LIKE RM06E-LPEIN,
EEIND LIKE RM06E-EEIND,
END OF ITAB.
DATA : LASTNUM(3) TYPE C,
TEMPVAR(15),
PAGES(3) TYPE C VALUE '10',
COUNT TYPE I,
CTR TYPE I,
TCTR(3) TYPE C VALUE 0,
TEST TYPE C VALUE 0,
ITEM LIKE RM06E-EBELP.
*DATA: BDCDATA TYPE BDCDATA OCCURS 0 WITH HEADER LINE.
START-OF-SELECTION.
PERFORM GET-DATA.
SORT ITAB BY NUM EEIND.
PERFORM OPEN_GROUP.
LOOP AT ITAB.
IF ITAB-NUM NE LASTNUM.
COUNT = 0.
TEST = 0.
TCTR = 0.
PAGES = 10.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0300'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'EKKO-ANGDT'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'RM06E-ASART'
'AN'.
PERFORM BDC_FIELD USING 'EKKO-SPRAS'
'EN'.
PERFORM BDC_FIELD USING 'RM06E-ANFDT'
'19.07.2007'.
PERFORM BDC_FIELD USING 'EKKO-ANGDT'
'29.07.2007'.
PERFORM BDC_FIELD USING 'EKKO-EKORG'
'3000'.
PERFORM BDC_FIELD USING 'EKKO-EKGRP'
'003'.
PERFORM BDC_FIELD USING 'RM06E-LPEIN'
'T'.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0301'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'EKKO-SUBMI'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'EKKO-EKGRP'
'003'.
PERFORM BDC_FIELD USING 'EKKO-PINCR'
'10'.
PERFORM BDC_FIELD USING 'EKKO-SUBMI'
'1'.
PERFORM BDC_FIELD USING 'EKKO-SPRAS'
'EN'.
PERFORM BDC_FIELD USING 'EKKO-UPINC'
'1'.
PERFORM BDC_FIELD USING 'EKKO-ANGDT'
'29.07.2007'.
**********tab ctrl*********************************************
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0320'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RM06E-EEIND(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'EKKO-ANGDT'
'29.07.2007'.
*
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0320'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RM06E-EEIND(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
CTR = 0.
LOOP AT ITAB WHERE NUM = ITAB-NUM.
CTR = CTR + 1.
TCTR = TCTR + 1.
IF TCTR >= 19.
PAGES = PAGES + 10.
TCTR = '19'.
ENDIF.
IF TCTR > 9.
TEST = ''.
ENDIF.
CTR = CTR + 1.
*
IF CTR <= 19.
TCTR = CTR.
ENDIF.
*
IF CTR > 19.
TCTR = '19'.
ENDIF.
*
IF CTR >= 10.
TEST = ''.
ENDIF.
IF CTR <= 19.
PAGES = 10.
ENDIF.
*
IF CTR > 19.
PAGES = PAGES + 10.
ebelp = 10.
ITEM = ITEM + 10.
ENDIF.
**
PERFORM BDC_FIELD USING 'RM06E-EBELP' PAGES.
PERFORM BDC_FIELD USING 'RM06E-EBELP'
PAGES.
CONCATENATE 'ekpo-ematn(' TEST TCTR ')' INTO TEMPVAR.
CONDENSE TEMPVAR NO-GAPS.
PERFORM BDC_FIELD USING TEMPVAR ITAB-EMATN.
CONCATENATE 'ekpo-txz01(' TEST TCTR ')' INTO TEMPVAR.
CONDENSE TEMPVAR NO-GAPS.
PERFORM BDC_FIELD USING TEMPVAR ITAB-TXZ01.
CONCATENATE 'rm06e-anmng(' TEST TCTR ')' INTO TEMPVAR.
CONDENSE TEMPVAR NO-GAPS.
PERFORM BDC_FIELD USING TEMPVAR '500'."ITAB-ANMNG.
CONCATENATE 'ekpo-meins(' TEST TCTR ')' INTO TEMPVAR.
CONDENSE TEMPVAR NO-GAPS.
PERFORM BDC_FIELD USING TEMPVAR ITAB-MEINS.
CONCATENATE 'rm06e-lpein(' TEST TCTR ')' INTO TEMPVAR.
CONDENSE TEMPVAR NO-GAPS.
PERFORM BDC_FIELD USING TEMPVAR ITAB-LPEIN.
CONCATENATE 'rm06e-eeind(' TEST TCTR ')' INTO TEMPVAR.
CONDENSE TEMPVAR NO-GAPS.
PERFORM BDC_FIELD USING TEMPVAR ITAB-EEIND.
CONCATENATE 'EKPO-MATKL(' TEST TCTR ')' INTO TEMPVAR.
CONDENSE TEMPVAR NO-GAPS.
PERFORM BDC_FIELD USING TEMPVAR ITAB-MATKL.
*
***
PERFORM BDC_FIELD USING 'EKPO-EMATN(01)'
ITAB-EMATN. "1500-520'.
PERFORM BDC_FIELD USING 'EKPO-txz01(01)'
ITAB-TXZ01."10W30 MOTOR OILCASE'.
.
*
PERFORM BDC_FIELD USING 'RM06E-ANMNG(01)'
ITAB-ANMNG. "10'.
PERFORM BDC_FIELD USING 'EKPO-MEINS(01)'
ITAB-MEINS ."cse'.
PERFORM BDC_FIELD USING 'RM06E-EEIND(01)'
ITAB-EEIND . "29.07.2007'.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0320'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'EKKO-ANGDT'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=LS'.
PERFORM BDC_FIELD USING 'EKKO-ANGDT'
'29.07.2007'.
PERFORM BDC_FIELD USING 'RM06E-EBELP'
PAGES.
CONCATENATE 'ekpo-ematn(' TEST TCTR ')' INTO TEMPVAR.
CONDENSE TEMPVAR NO-GAPS.
PERFORM BDC_FIELD USING 'BDC_CURSOR' TEMPVAR.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
ENDLOOP.
*************************vendor addr*******************
LASTNUM = ITAB-NUM.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0140'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'EKKO-LIFNR'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'EKKO-LIFNR'
'9054'.
PERFORM BDC_DYNPRO USING 'SAPLMEXF' '0100'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ENTE'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RM06E-SPRAS'.
PERFORM BDC_FIELD USING 'BUTTON_INIT'
'X'.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0140'.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0140'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'EKKO-LIFNR'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BU'.
PERFORM BDC_FIELD USING 'EKKO-LIFNR'
'9054'.
PERFORM BDC_FIELD USING 'ADDR1_DATA-NAME1'
'tttt'.
PERFORM BDC_FIELD USING 'ADDR1_DATA-SORT1'
'TT'.
PERFORM BDC_FIELD USING 'ADDR1_DATA-COUNTRY'
'AZ'.
PERFORM BDC_DYNPRO USING 'SAPLSPO1' '0300'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=YES'.
PERFORM BDC_TRANSACTION USING 'ME41'.
*CALL TRANSACTION 'ME41' USING BDCDATA MODE 'A'.
REFRESH BDCDATA.
ENDIF.
ENDLOOP.
PERFORM CLOSE_GROUP.
&----
*& Form get-data
&----
text
----
FORM GET-DATA.
CALL FUNCTION 'UPLOAD'
EXPORTING
CODEPAGE = ' '
FILENAME = ' '
FILETYPE = ' '
ITEM = ' '
FILEMASK_MASK = ' '
FILEMASK_TEXT = ' '
FILETYPE_NO_CHANGE = ' '
FILEMASK_ALL = ' '
FILETYPE_NO_SHOW = ' '
LINE_EXIT = ' '
USER_FORM = ' '
USER_PROG = ' '
SILENT = 'S'
IMPORTING
FILESIZE =
CANCEL =
ACT_FILENAME =
ACT_FILETYPE =
TABLES
DATA_TAB = ITAB
EXCEPTIONS
CONVERSION_ERROR = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3
NO_BATCH = 4
UNKNOWN_ERROR = 5
GUI_REFUSE_FILETRANSFER = 6
OTHERS = 7
.
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. "get-data.
IF USEFULL REWARD