Skip to Content
author's profile photo Former Member
Former Member

TABLE CONTROL IN BDC

Hey guyz,

it seems to be a very big problem for me sinse 3-4 days....

plz dont ask me to go thru the threads available...coz.. i did so...and ..moreover

plz dont copy paste the code coz i dont even know ABCDs in this concept,

i have hell loda questions....please pay attention.....plzzz

what this table control in bdc???

when does this table control come into picture in BDC???

how and where wud we insert dat????

how wud we handle dat??

like this i have loda questions......soo....can some1 gimme SPOON FEED explanation regarding this... do watever u cud...but help me out...ill definitely award points...

regards,

Zid.

Add a comment
10|10000 characters needed characters exceeded

Assigned Tags

Related questions

7 Answers

  • author's profile photo Former Member
    Former Member
    Posted on Apr 26, 2007 at 06:01 AM

    <b>>>when does this table control come into picture in BDC?</b>

    Table control comes into picture when you write a BDC (creating a recording using shdb) for a transaction that contains table control...

    <b>>>how and where wud we insert dat????</b>

    just do the recording... by filling the first row of the table control.

    it will automatically come in the BDC when u create a program for taht recording.

    <b>>>how wud we handle dat??</b>

    In the program created, u will see something like

    PERFORM bdc_field USING 'COWB_COMP-MATNR(01)'

    'NK-1.75'.

    put this statement (and all consecutive table control statements in a loop.)

    use sy-tabix as index instead of (01)

    hope this helps...

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Apr 26, 2007 at 05:55 AM

    How to deal with table control / step loop in BDC

    Steploop and table contol is inevitable in certain transactions. When we run BDC for such transactions, we will face the situation: how many visible lines of steploop/tablecontrol are on the screen? Although we can always find certain method to deal with it, such as function code 'NP', 'POPO', considering some extreme situation: there is only one line visible one the screen, our BDC program should display an error message. (See transaction 'ME21', we you resize your screen to let only one row visible, you can not enter mutiple lines on this screen even you use 'NP')

    Now with the help of Poonam on sapfans.com developement forum, I find a method with which we can determine the number of visible lines on Transaction Screen from our Calling BDC program. Maybe it is useless to you, but I think it will give your some idea.

    Demo ABAP code has two purposes:

    1. how to determine number of visible lines and how to calculte page number;

    (the 'calpage' routine has been modify to meet general purpose usage)

    2. using field symbol in BDC program, please pay special attention to the difference in Static ASSIGN and Dynamic ASSIGN.

    Now I begin to describe the step to implement my method:

    (I use transaction 'ME21', screen 121 for sample,

    the method using is Call Transation Using..)

    Step1: go to screen painter to display the screen 121, then we can count the fixed line on this screen, there is 7 lines above the steploop and 2 lines below the steploop, so there are total 9 fixed lines on this screen. This means except these 9 lines, all the other line is for step loop. Then have a look at steploop itselp, one entry of it will occupy two lines.

    (Be careful, for table control, the head and the bottom scroll bar will possess another two fixed lines, and there is a maximum number for table line)

    Now we have : FixedLine = 9

    LoopLine = 2(for table control, LoopLine is always equal to 1)

    Step2: go to transaction itself(ME21) to see how it roll page, in ME21, the first line of new page is always occupied by the last line of last page, so it begin with index '02', but in some other case, fisrt line is empty and ready for input.

    Now we have: FirstLine = 0

    or FirstLine = 1 ( in our case, FirstLine is 1 because the first line of new page is fulfilled)

    Step3: write a subroutine calcalculating number of pages

    (here, the name of actual parameter is the same as formal parameter)

    global data: FixedLine type i, " number of fixed line on a certain screen

    LoopLine type i, " the number of lines occupied by one steploop item

    FirstLine type i, " possbile value 0 or 1, 0 stand for the first line of new " scrolling screen is empty, otherwise is 1

    Dataline type i, " number of items you will use in BDC, using DESCRIBE to get

    pageno type i, " you need to scroll screen how many times.

    line type i, " number of lines appears on the screen.

    index(2) type N, " the screen index for certain item

    begin type i, " from parameter of loop

    end type i. " to parameter of loop

    *in code sample, the DataTable-linindex stands for the table index number of this line

    form calpage using FixedLine type i (see step 1)

    LoopLine type i (see step 1)

    FirstLine type i (see step 2)

    DataLine type i ( this is the item number you will enter in transaction)

    changing pageno type i (return the number of page, depends on run-time visible line in table control/ Step Loop)

    changing line type i.(visible lines one the screen)

    data: midd type i,

    vline type i, "visible lines

    if DataLine eq 0.

    Message eXXX.

    endif.

    vline = ( sy-srows - FixedLine ) div LoopLine.

    *for table control, you should compare vline with maximum line of

    *table control, then take the small one that is min(vline, maximum)

    *here only illustrate step loop

    if FirstLine eq 0.

    pageno = DataLine div vline.

    if pageno eq 0.

    pageno = pageno + 1.

    endif.

    elseif FirstLine eq 1.

    pageno = ( DataLine - 1 ) div ( vline - 1 ) + 1.

    midd = ( DataLine - 1 ) mod ( vline - 1).

    if midd = 0 and DataLine gt 1.

    pageno = pageno - 1.

    endif.

    endif.

    line = vline.

    endform.

    Step4 write a subroutine to calculate the line index for each item.

    form calindex using Line type i (visible lines on the screen)

    FirstLine type i(see step 2)

    LineIndex type i(item index)

    changing Index type n. (index on the screen)

    if FirstLine = 0.

    index = LineIndex mod Line.

    if index = '00'.

    index = Line.

    endif.

    elseif FirstLine = 1.

    index = LineIndex mod ( Line - 1 ).

    if ( index between 1 and 0 ) and LineIndex gt 1.

    index = index + Line - 1.

    endif.

    if Line = 2.

    index = index + Line - 1.

    endif.

    endif.

    endform.

    Step5 write a subroutine to calculate the loop range.

    form calrange using Line type i ( visible lines on the screen)

    DataLine type i

    FirstLine type i

    loopindex like sy-index

    changing begin type i

    end type i.

    If FirstLine = 0.

    if loopindex = 1.

    begin = 1.

    if DataLine <= Line.

    end = DataLine.

    else.

    end = Line.

    endif.

    elseif loopindex gt 1.

    begin = Line * ( loopindex - 1 ) + 1.

    end = Line * loopindex.

    if end gt DataLine.

    end = DataLine.

    endif.

    endif.

    elseif FirstLine = 1.

    if loopindex = 1.

    begin = 1.

    if DataLine <= Line.

    end = DataLine.

    else.

    end = Line.

    endif.

    elseif loop index gt 1.

    begin = ( Line - 1 ) * ( loopindex - 1 ) + 2.

    end = ( Line - 1 ) * ( loopindex - 1 ) + Line.

    if end gt DataLine.

    end = DataLine.

    endif.

    endif.

    endif.

    endform.

    Step6 using field sysbol in your BDC, for example: in ME21, but you should calculate each item will correponding to which index in steploop/Table Control

    form creat_bdc.

    field-symbols: <material>, <quan>, <indicator>.

    data: name1(14) value 'EKPO-EMATN(XX)',

    name2(14) value 'EKPO-MENGE(XX)',

    name3(15) value 'RM06E-SELKZ(XX)'.

    assign: name1 to <material>,

    name2 to <quan>,

    name3 to <indicator>.

    .

    do pageno times.

    if sy-index gt 1

    *insert scroll page ok_code"

    endif.

    .

    .

    perform calrange using Line DataLine FirstLine sy-index

    changing begin end.

    .

    .

    loop at DataTable from begin to end.

    perform calindex using Line FirstLine DataTable-LineIndex changing Index.

    name1+11(2) = Index.

    name2+11(2) = Index.

    name3+12(2) = Index.

    .

    .

    perform bdcfield using <material> DataTable-matnr.

    perform bdcfield using <quan> DataTable-menge.

    perform bdcfield using <indicator> DataTable-indicator.

    .

    .

    .

    endloop.

    enddo.

    I only focus on the most difficult part, otherwise we will lost in the sea of code.

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Apr 26, 2007 at 05:56 AM

    Hi,

    syntax:

    CONTROLS .

    if you only want to determine the row of the table control. SY´-SUBRC allows you to check if the cursor is placed in a row of a table control.

    u need to comment the performs of table control fields and write ur own perform statements. And u have to declare the table control fields as separate internal tables.

    Go through this urls.

    www.saptechnical.com

    www.sap-img.com

    Check the below links.

    http://www.planetsap.com/howdo_a.htm

    http://help.sap.com/saphelp_nw2004s/helpdata/en/9f/dbac5135c111d1829f0000e829fbfe/content.htm

    http://sap.niraj.tripod.com/id25.html

    Check the below link.

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

    THis is example to upload the Bank details of the Vendor which has the TC.

    REPORT zprataptable2

    NO STANDARD PAGE HEADING LINE-SIZE 255.

    DATA : BEGIN OF itab OCCURS 0,

    i1 TYPE i,

    lifnr LIKE rf02k-lifnr,

    bukrs LIKE rf02k-bukrs,

    ekorg LIKE rf02k-ekorg,

    ktokk LIKE rf02k-ktokk,

    anred LIKE lfa1-anred,

    name1 LIKE lfa1-name1,

    sortl LIKE lfa1-sortl,

    land1 LIKE lfa1-land1,

    akont LIKE lfb1-akont,

    fdgrv LIKE lfb1-fdgrv,

    waers LIKE lfm1-waers,

    END OF itab.

    DATA : BEGIN OF jtab OCCURS 0,

    j1 TYPE i,

    banks LIKE lfbk-banks,

    bankl LIKE lfbk-bankl,

    bankn LIKE lfbk-bankn,

    END OF jtab.

    DATA : cnt(4) TYPE n.

    DATA : fdt(20) TYPE c.

    DATA : c TYPE i.

    INCLUDE bdcrecx1.

    START-OF-SELECTION.

    CALL FUNCTION 'WS_UPLOAD'

    EXPORTING

    filename = 'C: irst1.txt'

    filetype = 'DAT'

    TABLES

    data_tab = itab.

    CALL FUNCTION 'WS_UPLOAD'

    EXPORTING

    filename = 'C:second.txt'

    filetype = 'DAT'

    TABLES

    data_tab = jtab.

    LOOP AT itab.

    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'

    itab-lifnr.

    PERFORM bdc_field USING 'RF02K-BUKRS'

    itab-bukrs.

    PERFORM bdc_field USING 'RF02K-EKORG'

    itab-ekorg.

    PERFORM bdc_field USING 'RF02K-KTOKK'

    itab-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-ANRED'

    itab-anred.

    PERFORM bdc_field USING 'LFA1-NAME1'

    itab-name1.

    PERFORM bdc_field USING 'LFA1-SORTL'

    itab-sortl.

    PERFORM bdc_field USING 'LFA1-LAND1'

    itab-land1.

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

    PERFORM bdc_field USING 'BDC_OKCODE'

    '=ENTR'.

    cnt = 0.

    LOOP AT jtab WHERE j1 = itab-i1.

    cnt = cnt + 1.

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

    PERFORM bdc_field USING fdt jtab-banks.

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

    PERFORM bdc_field USING fdt jtab-bankl.

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

    PERFORM bdc_field USING fdt jtab-bankn.

    IF cnt = 5.

    cnt = 0.

    PERFORM bdc_dynpro USING 'SAPMF02K' '0130'.

    PERFORM bdc_field USING 'BDC_CURSOR'

    'LFBK-BANKS(01)'.

    PERFORM bdc_field USING 'BDC_OKCODE'

    '=P+'.

    PERFORM bdc_dynpro USING 'SAPMF02K' '0130'.

    PERFORM bdc_field USING 'BDC_CURSOR'

    'LFBK-BANKN(02)'.

    PERFORM bdc_field USING 'BDC_OKCODE'

    '=ENTR'.

    ENDIF.

    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'

    itab-akont.

    PERFORM bdc_field USING 'LFB1-FDGRV'

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

    itab-waers.

    PERFORM bdc_dynpro USING 'SAPMF02K' '0320'.

    PERFORM bdc_field USING 'BDC_CURSOR'

    'RF02K-LIFNR'.

    PERFORM bdc_field USING 'BDC_OKCODE'

    '=ENTR'.

    PERFORM bdc_dynpro USING 'SAPLSPO1' '0300'.

    PERFORM bdc_field USING 'BDC_OKCODE'

    '=YES'.

    PERFORM bdc_transaction USING 'XK01'.

    ENDLOOP.

    PERFORM close_group.

    Header file:

    1 63190 0001 0001 0001 mr bal188 b in 31000 a1 inr

    2 63191 0001 0001 0001 mr bal189 b in 31000 a1 inr

    TC file:

    1 in sb 11000

    1 in sb 12000

    1 in sb 13000

    1 in sb 14000

    1 in sb 15000

    1 in sb 16000

    1 in sb 17000

    1 in sb 18000

    1 in sb 19000

    1 in sb 20000

    1 in sb 21000

    1 in sb 22000

    2 in sb 21000

    2 in sb 22000

    **********************************************

    reward points

    regards,

    Anji

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Apr 26, 2007 at 06:07 AM

    guyz,

    thnx for ur reply...but

    wat my question is....in which conditions , do we need to use this table control in bdc?

    like...we have a conventional way of uploading data rite....then waz d need of goin for this table control...advantages...and where do we need to define design this TC??

    this kinda Q i have...so cud u plz put ya efforts to enlighten me than answering the Q..

    thnx in advance..

    Zid.

    Add a comment
    10|10000 characters needed characters exceeded

    • Former Member

      Ziden.

      The screen that have a table display like header data and item data. In thet case itam information comes in a table control format. So while uploading data to the line items you have to cosnider that table control involved for displaying item data. You can see the vendor invoice transction (FB60).

  • author's profile photo Former Member
    Former Member
    Posted on Apr 26, 2007 at 06:37 AM

    Hello anji,

    can u plz explain me Where have u handled TABLE CONTROL in the code given by u??

    explain me in detail...this solves my problem...

    regards,

    Zid.

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Apr 26, 2007 at 06:50 AM

    soooo....what is the precised answer if some1 asks "how do u handles table controls in BDCs?"...

    Add a comment
    10|10000 characters needed characters exceeded

    • Former Member

      Hi,

      Table control in BDC is very simple but tricky if u r got little experience in that. if som e one asks how u handled the table control in BDCs then answer "Using loops and index"...

      one e.g i did is MB21. in this table control is used. for material no and qty etc.

      More explanation:

      In table control, various entries are there for main data so

      loop at git_main_data.

      loop at git_table_data where key1 = git_main_data-key1.

      "insert data in BDC_DATA.

      endloop. " loop for table data ends here

      "Inset data in BDC_DATA.

      endloop. "Main loop ends here

      Hope this iwll help u.

      Jogdand M B

  • author's profile photo Former Member
    Former Member
    Posted on Apr 26, 2007 at 07:12 AM

    <b>what this table control in bdc???

    when does this table control come into picture in BDC???

    </b>

    The table control provides a look similar to spreadsheet programs, with column and row headers that may select entire columns or rows, a new selection logic, an inbuilt scroll mechanism, and much more. This control makes interaction with tables much easier for the users, but also for the developer.

    In cases of one-line tables the table control should replace the step loop when presenting structures in table form. It offers improved usability and clarity compared with the loop due to the range of functions installed and the more precise visualization. You still have to implement multi-line tables in steploop technique.

    Here We come Accross the Table Comtrol While Recording the transaction (Ex ME21N - For Line Items) in SHDB.

    <b>how and where wud we insert dat????

    how wud we handle dat??</b>

    Just Go Through the program For Purchase Order which has table Control

    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

    Add a comment
    10|10000 characters needed characters exceeded

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.