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: 

field symbol and BDC cursor

Former Member
0 Kudos
575

hai guru's....

can u send me some material on field symbol and BDC cursor...and also can send me the definition and where we actulally use it...

Thnaks

Pavan

1 ACCEPTED SOLUTION

Former Member
0 Kudos
115

<b>Field Symbols</b>

Field symbols are symbolic names declared with FIELD-SYMBOLS to which a memory area can be assigned during program runtime. A field symbol can be used instead of data objects at operand positions of statements.

<b>Field Symbols</b>

Field symbols are placeholders or symbolic names for other fields. They do not physically reserve space for a field, but point to its contents. A field symbol cam point to any data object. The data object to which a field symbol points is assigned to it after it has been declared in the program.

Whenever you address a field symbol in a program, you are addressing the field that is assigned to the field symbol. After successful assignment, there is no difference in ABAP whether you reference the field symbol or the field itself. You must assign a field to each field symbol before you can address the latter in programs

The first example shows the obsolete usage of the addition STRUCTURE.

<b>Example using the obsolete STRUCTURE addition:</b>

DATA: wa(10) VALUE '0123456789'.

DATA: BEGIN OF line1,

col1(3),

col2(2),

col3(5),

END OF line1.

DATA: BEGIN OF line2,

col1(2),

col2 LIKE sy-datum,

END OF line2.

FIELD-SYMBOLS: <f1> STRUCTURE line1 DEFAULT wa,

<f2> STRUCTURE line2 DEFAULT wa.

WRITE: / <f1>-col1, <f1>-col2, <f1>-col3,

/ <f2>-col1, <f2>-col2.

<b>Example using the correct syntax (TYPE and CASTING):</b>

DATA: wa(10) VALUE '0123456789'.

DATA: BEGIN OF line1,

col1(3),

col2(2),

col3(5),

END OF line1.

DATA: BEGIN OF line2,

COL1(2),

COL2 LIKE sy-datum,

END OF line2.

FIELD-SYMBOLS: <f1> LIKE line1.

ASSIGN wa TO <f1> CASTING.

FIELD-SYMBOLS: <f2> LIKE line2.

ASSIGN wa TO <f2> CASTING.

WRITE: / <f1>-col1, <F1>-col2, <F1>-col3,

/ <f2>-col1, <F2>-col2.

In both cases, the list appears as follows:

012 34 56789

01 2345/67/89

reward points if it is usefull....

Girish

6 REPLIES 6

Former Member
0 Kudos
115

HI Pavan,

<b>Field-symbols :</b>

Field symbols

Field symbols are placeholders or symbolic names for other fields. They do not physically reserve space for a field, but point to its contents. A field symbol cam point to any data object. The data object to which a field symbol points is assigned to it after it has been declared in the program.

Whenever you address a field symbol in a program, you are addressing the field that is assigned to the field symbol. After successful assignment, there is no difference in ABAP whether you reference the field symbol or the field itself. You must assign a field to each field symbol before you can address the latter in programs.

Field symbols are similar to dereferenced pointers in C (that is, pointers to which the content operator * is applied). However, the only real equivalent of pointers in ABAP, that is, variables that contain a memory address (reference) and that can be used without the contents operator, are reference variables in ABAP Objects

Field Symbols

Field symbols are placeholders or symbolic names for other fields. They do not physically reserve space for a field, but point to its contents. A field symbol cam point to any data object. The data object to which a field symbol points is assigned to it after it has been declared in the program.

Whenever you address a field symbol in a program, you are addressing the field that is assigned to the field symbol. After successful assignment, there is no difference in ABAP whether you reference the field symbol or the field itself. You must assign a field to each field symbol before you can address the latter in programs.

Field symbols are similar to dereferenced pointers in C (that is, pointers to which the content operator * is applied). However, the only real equivalent of pointers in ABAP, that is, variables that contain a memory address (reference) and that can be used without the contents operator, are reference variables in ABAP Objects.

All operations programmed with field symbols are applied to the field assigned to it. For example, a MOVE statement between two field symbols moves the contents of the field assigned to the first field symbol to the field assigned to the second field symbol. The field symbols themselves point to the same fields after the MOVE statement as they did before.

You can create field symbols either without or with type specifications. If you do not specify a type, the field symbol inherits all of the technical attributes of the field assigned to it. If you do specify a type, the system checks the compatibility of the field symbol and the field you are assigning to it during the ASSIGN statement.

Field symbols provide greater flexibility when you address data objects:

If you want to process sections of fields, you can specify the offset and length of the field dynamically.

You can assign one field symbol to another, which allows you to address parts of fields.

Assignments to field symbols may extend beyond field boundaries. This allows you to address regular sequences of fields in memory efficiently.

You can also force a field symbol to take different technical attributes from those of the field assigned to it.

The flexibility of field symbols provides elegant solutions to certain problems. On the other hand, it does mean that errors can easily occur. Since fields are not assigned to field symbols until runtime, the effectiveness of syntax and security checks is very limited for operations involving field symbols. This can lead to runtime errors or incorrect data assignments.

While runtime errors indicate an obvious problem, incorrect data assignments are dangerous because they can be very difficult to detect. For this reason, you should only use field symbols if you cannot achieve the same result using other ABAP statements.

For example, you may want to process part of a string where the offset and length depend on the contents of the field. You could use field symbols in this case. However, since the MOVE statement also supports variable offset and length specifications, you should use it instead. The MOVE statement (with your own auxiliary variables if required) is much safer than using field symbols, since it cannot address memory beyond the boundary of a field. However, field symbols may improve performance in some cases.

check the below links u will get the answers for your questions

http://help.sap.com/saphelp_nw04/helpdata/en/fc/eb3860358411d1829f0000e829fbfe/content.htm

http://www.sts.tu-harburg.de/teaching/sap_r3/ABAP4/field_sy.htm

http://searchsap.techtarget.com/tip/1,289483,sid21_gci920484,00.html

Syntax Diagram

FIELD-SYMBOLS

Basic form

FIELD-SYMBOLS <fs>.

Extras:

1. ... TYPE type

2. ... TYPE REF TO cif

3. ... TYPE REF TO DATA

4. ... TYPE LINE OF type

5. ... LIKE s

6. ... LIKE LINE OF s

7. ... TYPE tabkind

8. ... STRUCTURE s DEFAULT wa

The syntax check performed in an ABAP Objects context is stricter than in other ABAP areas. See Cannot Use Untyped Field Symbols ad Cannot Use Field Symbols as Components of Classes.

Effect

This statement declares a symbolic field called <fs>. At runtime, you can assign a concrete field to the field symbol using ASSIGN. All operations performed with the field symbol then directly affect the field assigned to it.

You can only use one of the additions.

Example

Output aircraft type from the table SFLIGHT using a field symbol:

FIELD-SYMBOLS <PT> TYPE ANY.

DATA SFLIGHT_WA TYPE SFLIGHT.

...

ASSIGN SFLIGHT_WA-PLANETYPE TO <PT>.

WRITE <PT>.

Addition 1

... TYPE type

Addition 2

... TYPE REF TO cif

Addition 3

... TYPE REF TO DATA

Addition 4

... TYPE LINE OF type

Addition 5

... LIKE s

Addition 6

... LIKE LINE OF s

Addition 7

... TYPE tabkind

Effect

You can define the type of the field symbol using additions 2 to 7 (just as you can for FORM parameters (compare Defining the Type of Subroutine Parameters). When you use the ASSIGN statement, the system carries out the same type checks as for USING parameters of FORMs.

This addition is not allowed in an ABAP Objects context. See Cannot Use Obsolete Casting for FIELD SYMBOLS.

In some cases, the syntax rules that apply to Unicode programs are different than those for non-Unicode programs. See Defining Types Using STRUCTURE.

Effect

Assigns any (internal) field string or structure to the field symbol from the ABAP Dictionary (s). All fields of the structure can be addressed by name: <fs>-fieldname. The structured field symbol points initially to the work area wa specified after DEFAULT.

The work area wa must be at least as long as the structure s. If s contains fields of the type I or F, wa should have the structure s or at least begin in that way, since otherwise alignment problems may occur.

Example

Address components of the flight bookings table SBOOK using a field symbol:

DATA SBOOK_WA LIKE SBOOK.

FIELD-SYMBOLS <SB> STRUCTURE SBOOK

DEFAULT SBOOK_WA.

...

WRITE: <SB>-BOOKID, <SB>-FLDATE.

Related

ASSIGN, DATA

<b>Reward pts if found usefull</b>

Regards

Sathish

Former Member
0 Kudos
115

Pavan,

Field Symble :

Check out these threads..

Field symbols are placeholders or symbolic names for other fields. They do not physically reserve space for a field, but point to its contents. A field symbol cam point to any data object. The data object to which a field symbol points is assigned to it after it has been declared in the program.

Whenever you address a field symbol in a program, you are addressing the field that is assigned to the field symbol. After successful assignment, there is no difference in ABAP whether you reference the field symbol or the field itself. You must assign a field to each field symbol before you can address the latter in programs.

Field symbols are similar to dereferenced pointers in C (that is, pointers to which the content operator * is applied). However, the only real equivalent of pointers in ABAP, that is, variables that contain a memory address (reference) and that can be used without the contents operator, are reference variables in ABAP Objects.

All operations programmed with field symbols are applied to the field assigned to it. For example, a MOVE statement between two field symbols moves the contents of the field assigned to the first field symbol to the field assigned to the second field symbol. The field symbols themselves point to the same fields after the MOVE statement as they did before.

You can create field symbols either without or with type specifications. If you do not specify a type, the field symbol inherits all of the technical attributes of the field assigned to it. If you do specify a type, the system checks the compatibility of the field symbol and the field you are assigning to it during the ASSIGN statement.

Field symbols provide greater flexibility when you address data objects:

If you want to process sections of fields, you can specify the offset and length of the field dynamically.

You can assign one field symbol to another, which allows you to address parts of fields.

Assignments to field symbols may extend beyond field boundaries. This allows you to address regular sequences of fields in memory efficiently.

You can also force a field symbol to take different technical attributes from those of the field assigned to it.

The flexibility of field symbols provides elegant solutions to certain problems. On the other hand, it does mean that errors can easily occur. Since fields are not assigned to field symbols until runtime, the effectiveness of syntax and security checks is very limited for operations involving field symbols. This can lead to runtime errors or incorrect data assignments.

While runtime errors indicate an obvious problem, incorrect data assignments are dangerous because they can be very difficult to detect. For this reason, you should only use field symbols if you cannot achieve the same result using other ABAP statements.

For example, you may want to process part of a string where the offset and length depend on the contents of the field. You could use field symbols in this case. However, since the MOVE statement also supports variable offset and length specifications, you should use it instead. The MOVE statement (with your own auxiliary variables if required) is much safer than using field symbols, since it cannot address memory beyond the boundary of a field. However, field symbols may improve performance in some cases.

check the below links u will get the answers for your questions

http://help.sap.com/saphelp_nw04/helpdata/en/fc/eb3860358411d1829f0000e829fbfe/content.htm

http://www.sts.tu-harburg.de/teaching/sap_r3/ABAP4/field_sy.htm

http://searchsap.techtarget.com/tip/1,289483,sid21_gci920484,00.html

Syntax Diagram

FIELD-SYMBOLS

Basic form

FIELD-SYMBOLS <fs>.

Extras:

1. ... TYPE type

2. ... TYPE REF TO cif

3. ... TYPE REF TO DATA

4. ... TYPE LINE OF type

5. ... LIKE s

6. ... LIKE LINE OF s

7. ... TYPE tabkind

8. ... STRUCTURE s DEFAULT wa

The syntax check performed in an ABAP Objects context is stricter than in other ABAP areas. See Cannot Use Untyped Field Symbols ad Cannot Use Field Symbols as Components of Classes.

Effect

This statement declares a symbolic field called <fs>. At runtime, you can assign a concrete field to the field symbol using ASSIGN. All operations performed with the field symbol then directly affect the field assigned to it.

You can only use one of the additions.

Example

Output aircraft type from the table SFLIGHT using a field symbol:

FIELD-SYMBOLS <PT> TYPE ANY.

DATA SFLIGHT_WA TYPE SFLIGHT.

...

ASSIGN SFLIGHT_WA-PLANETYPE TO <PT>.

WRITE <PT>.

Addition 1

... TYPE type

Addition 2

... TYPE REF TO cif

Addition 3

... TYPE REF TO DATA

Addition 4

... TYPE LINE OF type

Addition 5

... LIKE s

Addition 6

... LIKE LINE OF s

Addition 7

... TYPE tabkind

Effect

You can define the type of the field symbol using additions 2 to 7 (just as you can for FORM parameters (compare Defining the Type of Subroutine Parameters). When you use the ASSIGN statement, the system carries out the same type checks as for USING parameters of FORMs.

This addition is not allowed in an ABAP Objects context. See Cannot Use Obsolete Casting for FIELD SYMBOLS.

In some cases, the syntax rules that apply to Unicode programs are different than those for non-Unicode programs. See Defining Types Using STRUCTURE.

Effect

Assigns any (internal) field string or structure to the field symbol from the ABAP Dictionary (s). All fields of the structure can be addressed by name: <fs>-fieldname. The structured field symbol points initially to the work area wa specified after DEFAULT.

The work area wa must be at least as long as the structure s. If s contains fields of the type I or F, wa should have the structure s or at least begin in that way, since otherwise alignment problems may occur.

Example

Address components of the flight bookings table SBOOK using a field symbol:

DATA SBOOK_WA LIKE SBOOK.

FIELD-SYMBOLS <SB> STRUCTURE SBOOK

DEFAULT SBOOK_WA.

...

WRITE: <SB>-BOOKID, <SB>-FLDATE.

Related

ASSIGN, DATA

BDC cursor :

is used to point to a particular field. Ex: 'BDC_CURSOR' 'RMMG1-MATNR' places your cursor in that particular field.

for details on BDC recordings go through the following link and you will have all details.

http://www.sapbrain.com/TUTORIALS/TECHNICAL/BDC_tutorial.html

Don't forget to reward if useful......

Former Member
0 Kudos
115

<b>Field Symbols</b>

Field symbols are symbolic names declared with FIELD-SYMBOLS to which a memory area can be assigned during program runtime. A field symbol can be used instead of data objects at operand positions of statements.

<b>Field Symbols</b>

Field symbols are placeholders or symbolic names for other fields. They do not physically reserve space for a field, but point to its contents. A field symbol cam point to any data object. The data object to which a field symbol points is assigned to it after it has been declared in the program.

Whenever you address a field symbol in a program, you are addressing the field that is assigned to the field symbol. After successful assignment, there is no difference in ABAP whether you reference the field symbol or the field itself. You must assign a field to each field symbol before you can address the latter in programs

The first example shows the obsolete usage of the addition STRUCTURE.

<b>FIELD-SYMBOLS <FS> [<type>|STRUCTURE <s> DEFAULT <wa>].</b>

DATA wa1 TYPE c LENGTH 512. 
FIELD-SYMBOLS <scarr1> STRUCTURE scarr DEFAULT wa1. 
<scarr1>-carrid = '...

'.

The second example shows the replacement of STRUCTURE with the additions TYPE and CASTING.

<b>

FIELD-SYMBOLS <FS> STRUCTURE <s> DEFAULT <f>.</b>

[code]DATA wa2 TYPE c LENGTH 512. 
FIELD-SYMBOLS <scarr2> TYPE scarr. 
ASSIGN wa2 TO <scarr2> CASTING. 
<scarr2>-carrid = '...'.

<b>Examples for the above both types :</b>

<b>Example using the obsolete STRUCTURE addition</b>:

DATA: wa(10) VALUE '0123456789'.

DATA: BEGIN OF line1,
         col1(3),
         col2(2),
         col3(5),
      END OF line1.

DATA: BEGIN OF line2,
         col1(2),
         col2 LIKE sy-datum,
      END OF line2.

FIELD-SYMBOLS: <f1> STRUCTURE line1 DEFAULT wa,
               <f2> STRUCTURE line2 DEFAULT wa.

WRITE: / <f1>-col1, <f1>-col2, <f1>-col3,
       / <f2>-col1, <f2>-col2.

<b>Example using the correct syntax (TYPE and CASTING):</b>

DATA: wa(10) VALUE '0123456789'.

DATA: BEGIN OF line1,

col1(3),

col2(2),

col3(5),

END OF line1.

DATA: BEGIN OF line2,

COL1(2),

COL2 LIKE sy-datum,

END OF line2.

FIELD-SYMBOLS: <f1> LIKE line1.

ASSIGN wa TO <f1> CASTING.

FIELD-SYMBOLS: <f2> LIKE line2.

ASSIGN wa TO <f2> CASTING.

WRITE: / <f1>-col1, <F1>-col2, <F1>-col3,

/ <f2>-col1, <F2>-col2.[/code]

<b>In both cases, the list appears as follows:

012 34 56789

01 2345/67/89</b>

reward points if it is usefull....

Girish

Former Member
0 Kudos
116

<b>Field Symbols</b>

Field symbols are symbolic names declared with FIELD-SYMBOLS to which a memory area can be assigned during program runtime. A field symbol can be used instead of data objects at operand positions of statements.

<b>Field Symbols</b>

Field symbols are placeholders or symbolic names for other fields. They do not physically reserve space for a field, but point to its contents. A field symbol cam point to any data object. The data object to which a field symbol points is assigned to it after it has been declared in the program.

Whenever you address a field symbol in a program, you are addressing the field that is assigned to the field symbol. After successful assignment, there is no difference in ABAP whether you reference the field symbol or the field itself. You must assign a field to each field symbol before you can address the latter in programs

The first example shows the obsolete usage of the addition STRUCTURE.

<b>Example using the obsolete STRUCTURE addition:</b>

DATA: wa(10) VALUE '0123456789'.

DATA: BEGIN OF line1,

col1(3),

col2(2),

col3(5),

END OF line1.

DATA: BEGIN OF line2,

col1(2),

col2 LIKE sy-datum,

END OF line2.

FIELD-SYMBOLS: <f1> STRUCTURE line1 DEFAULT wa,

<f2> STRUCTURE line2 DEFAULT wa.

WRITE: / <f1>-col1, <f1>-col2, <f1>-col3,

/ <f2>-col1, <f2>-col2.

<b>Example using the correct syntax (TYPE and CASTING):</b>

DATA: wa(10) VALUE '0123456789'.

DATA: BEGIN OF line1,

col1(3),

col2(2),

col3(5),

END OF line1.

DATA: BEGIN OF line2,

COL1(2),

COL2 LIKE sy-datum,

END OF line2.

FIELD-SYMBOLS: <f1> LIKE line1.

ASSIGN wa TO <f1> CASTING.

FIELD-SYMBOLS: <f2> LIKE line2.

ASSIGN wa TO <f2> CASTING.

WRITE: / <f1>-col1, <F1>-col2, <F1>-col3,

/ <f2>-col1, <F2>-col2.

In both cases, the list appears as follows:

012 34 56789

01 2345/67/89

reward points if it is usefull....

Girish

Former Member
0 Kudos
115

Hi Pavan,

field symbol : This is using nothing but run time memoery (Dynamic memory). Instaed of using so many work areas we can use one field symbol.

Suppose while upload the data from excel sheet we should take field symbols becuase each record have different lenth in different cell, so we can populate data into internal table by using field sybols.

BDC cursor: In bdc we have the value for BDC cursor.

While recording when ever u will keep u r cursor on the input prameter automatically it saved under one value.

Hope this helps you. Reply for queries, shall post the updates.

Regards.

Kumar.

Former Member
0 Kudos
115

<b>Here is the program for handling the BDC CURSOR Iin the table control of me21 .</b>

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

reward points if it is usefull..

Girish