Process internal table

Hi experts,
I need help, I don't know how can I do that, I've an internal table like below..
date                   status            hour
06/08/10             01                 9:00
06/08/10             03                 9:15
06/08/10             01                 9:20
06/08/10             02                 9:50
07/08/10             01                 12:00
07/08/10             02                 12:00
08/08/10             01                 12:00
From that internal table I need these which the date is unique and has the maxim hour, for that table I will need that entries:
06/08/10             02                 9:50
07/08/10             02                 12:00
08/08/10             01                 12:00
Can anybody help me? I don't know how can I do that
Thanks in advanced,
Regards,
Rebeca

Hi,
    Please sort and then use delete adjacent duplicates.
    Sort itab by date hour descending.
    delete adjacent duplicates from itab comparing date.
Regards,
Srini.

Similar Messages

  • Need help in processing internal table

    Hi all,
    Im facing a  problem in processing an internal table..especially with MODIFY.
    The internal table is having following records.(t_vttp)
    TKNUM       VBELN      KUNNR       NAME1                             LAND1
    0000975179|0071004839|0000022946|HUNTSMAN APC LIMITED               |SA   |
    0000975180|0071004845|0000022946|                                   |     |
    In the above, there are two delviry documents with same customers.
    The customer data is coming from different internal table.
      LOOP AT t_vttp.
        READ TABLE t_kna1_temp INTO wa_kna1_temp WITH KEY kunnr = t_vttp-kunnr.
        IF sy-subrc = 0.
          t_vttp-name1 = wa_kna1_temp-name1.
          t_vttp-land1 = wa_kna1_temp-land1.
          MODIFY t_vttp INDEX sy-tabix TRANSPORTING name1 land1.
        ENDIF.
      ENDLOOP.
    Here for second record,,the customer name and country is nt getting populated to t_vttop.
    Pls correct where it is going wrong.
    Thanks,
    Priya

    Hi Try the follwoing code with a little modification in your code.
    LOOP AT t_vttp.
    READ TABLE t_kna1_temp INTO wa_kna1_temp WITH KEY kunnr = t_vttp-kunnr.
    IF sy-subrc = 0.
    t_vttp-name1 = wa_kna1_temp-name1.
    t_vttp-land1 = wa_kna1_temp-land1.
    MODIFY t_vttp INDEX sy-tabix  TRANSPORTING name1 land1.
    append t_vttp.
    ENDIF.
    clear: wa_kna1_temp, t_vttp.
    ENDLOOP
    Also Please debugg your code and check if you are getting values.
    also check the value of t_vttp-kunnr in debugging for the second run of your loop.
    thanks
    lalit

  • How to process internal table

    Hi friends/experts,
    My case is:
    1. A dialog screen 100 to display/ update some fields of an internal table itab, Records are processed one by one on the screen
    2. Need UPDATE, DELETE, PREV. NEXT buttons to process records.
    I have made the screen with fields and buttons. What I like to know is how to code DELETE, PREV. and NEXT buttons. Could you kindly provide a sample to do that?
    Thanks.
    Yu

    Hi,
      check this sample code..
    ***Create a global variable for storing the current index that is getting displayed..
    ***I am assuming V_CURRENT_INDEX TYPE SYINDEX.
    CASE SY-UCOMM.
      WHEN 'NEXT'.
    INcrement the index.
        V_CURRENT_INDEX = V_CURRENT_INDEX + 1.
        DESCRIBE TABLE ITAB.
        IF V_CURRENT_INDEX  > SY-TFILL.
    If the current index is greater than the number of rows.
    set the sy-tfill.
          V_CURRENT_INDEX = SY-TFILL.
          MESSAGE S208(00) WITH 'Last record reached'.
          LEAVE SCREEN.
        ENDIF.
    Read the internal table with the current index.
          READ TABLE ITAB INDEX V_CURRENT_INDEX.
    Move the values to the screen variables from the header line of ITAB.
      WHEN 'PREV'.
    Decrement the counter.
        V_CURRENT_INDEX = V_CURRENT_INDEX - 1.
        IF V_CURRENT_INDEX  <  0.
    If the current index is Lesser than zero set 1.
          V_CURRENT_INDEX = 1.
          MESSAGE S208(00) WITH 'First record reached'.
          LEAVE SCREEN.
        ENDIF.
    Read the internal table with the current index.
          READ TABLE ITAB INDEX V_CURRENT_INDEX.
    Move the values to the screen variables from the header line of ITAB.
    ENDCASE.
    Thanks,
    Naren

  • Process Internal table -Logic

    Hi,
    My internal table has following data
    A      10     30
    A      20     50
    A      00     100
    B      20     40
    B      10     90
    I need output as
        (Lowest)   (Highest)
    A   10               100
    B   10               90
    How do we do?
    rgds
    Praveen

    Namesh,
    Program does'nt work for  3  or more records. any ideas?
    <
    report x.
    DATA: BEGIN OF ITAB OCCURS 0,
          FLD1  TYPE CHAR20,
          NUM1  TYPE I,
          NUM2  TYPE I,
          END   OF ITAB.
    *A 10 30
    *A 20 50
    *A 00 100
    *B 20 40
    *B 10 90
    *C 0  40
    *C 10 120
    ITAB-FLD1 = 'A'.
    ITAB-NUM1 = '10'.
    ITAB-NUM2 = '30'.
    APPEND ITAB.
    ITAB-FLD1 = 'A'.
    ITAB-NUM1 = '20'.
    ITAB-NUM2 = '50'.
    APPEND ITAB.
    ITAB-FLD1 = 'A'.
    ITAB-NUM1 = '00'.
    ITAB-NUM2 = '100'.
    APPEND ITAB.
    ITAB-FLD1 = 'B'.
    ITAB-NUM1 = '20'.
    ITAB-NUM2 = '40'.
    APPEND ITAB.
    ITAB-FLD1 = 'B'.
    ITAB-NUM1 = '10'.
    ITAB-NUM2 = '90'.
    APPEND ITAB.
    itab-fld1 = 'C'.
    itab-num1 = '0'.
    itab-num2 = '40'.
    append itab.
    itab-fld1 = 'C'.
    itab-num1 = '10'.
    itab-num2 = '120'.
    append itab.
    DATA: ITAB2    LIKE ITAB OCCURS 0 WITH HEADER LINE,
          ITAB_TMP LIKE ITAB OCCURS 0 WITH HEADER LINE.
    DATA: NEW_FLD TYPE C.
    LOOP AT ITAB.
      AT NEW FLD1.
        NEW_FLD = 'X'.
      ENDAT.
      IF NEW_FLD = 'X'.
        ITAB_TMP[] = ITAB[].
        DELETE ITAB_TMP WHERE FLD1 = ITAB-FLD1.
        CLEAR NEW_FLD.
        SORT ITAB_TMP BY FLD1 ASCENDING
                         NUM1 ASCENDING.
        READ TABLE ITAB_TMP INDEX 1.
        ITAB2-FLD1 = ITAB_TMP-FLD1.
        ITAB2-NUM1 = ITAB_TMP-NUM1.
        SORT ITAB_TMP BY FLD1 ASCENDING
                         NUM2 DESCENDING.
        READ TABLE ITAB_TMP INDEX 1.
        ITAB2-NUM2 = ITAB_TMP-NUM2.
        APPEND ITAB2.
      ENDIF.
    ENDLOOP.
    LOOP AT ITAB2.
      WRITE: / ITAB2-FLD1,
               ITAB2-NUM1,
               ITAB2-NUM2.
    ENDLOOP. >

  • Problem in processing internal table

    Hi All,
    Im facing some problem with an internal table with header.
    This is Xvbkd with heaer line.
    Header     100     0000000049     000010                         EXW     China
    1     100     0000000049     000000                         CIF     HK
    2     100     0000000049     000010                         CIF     HK
    3     100     0000000049     000020                         CIF     HK
    Now I want modify the internal table of 2nd record. The data above has modified in the header.but not reflected in the body.
    Here is my code:
    SELECT SINGLE inco1 inco2
                            INTO (knvv-inco1, knvv-inco2)
                            FROM knvv
                            WHERE kunnr EQ w_shipto
                              AND vkorg EQ vbak-vkorg
                              AND vtweg EQ vbak-vtweg
                              AND spart EQ vbak-spart.
                        IF sy-subrc EQ 0 AND
                            knvv-inco1 NE space or
                            knvv-inco2 NE space.
                          MOVE: knvv-inco1 TO wa_xvbkd-inco1,
                                knvv-inco2 TO wa_xvbkd-inco2.
                         READ table xvbkd with key vbeln = xvbap-vbeln
                                                    posnr = xvbap-posnr.
                          IF sy-subrc = 0.
                          xvbkd-inco1 = wa_xvbkd-inco1.
                          xvbkd-inco2 = wa_xvbkd-inco2.
                          modify table xvbkd from wa_xvbkd transporting  inco1 inco2.
                         endif.
                        ENDIF.
    Requirement: is the 2nd record(item 10) in above internal table has to reflect the change with EXW and China.
    Pls help me with ur valuable suggestions.
    Regards,
    Priya

    try,
    SELECT SINGLE inco1 inco2
                            INTO (knvv-inco1, knvv-inco2)
                            FROM knvv
                            WHERE kunnr EQ w_shipto
                              AND vkorg EQ vbak-vkorg
                              AND vtweg EQ vbak-vtweg
                              AND spart EQ vbak-spart.
                        IF sy-subrc EQ 0 AND
                            knvv-inco1 NE space or
                            knvv-inco2 NE space.
                          MOVE: knvv-inco1 TO xvbkd-inco1,
                                knvv-inco2 TO xvbkd-inco2.
                         READ table xvbkd with key vbeln = xvbap-vbeln
                                                    posnr = xvbap-posnr.
                          IF sy-subrc = 0.
                          modify xvbkd index sy-tabix.
                         endif.
                        ENDIF.
    Regards,
    John
    Edited by: jvanpelt on Jul 16, 2010 9:36 AM

  • Problem while processing internal table

    Hi ,
    I have to read 2 line item of same invoice no
    for  eg.
    IN_NO      !    MAT          !      AMT
    XYZ         !    MAT1       !     125
    XYZ         !     MAT2       !     325
    In o/p its display only 325 for both line items
    I used this statement for readiing..
    loop at i_final
    loop at i_itab1 where knumv = i_final-knumv.
           move i_itab1-kwert to i_vbtab-comm .
           clear i_itab1-kwert.
           endloop.
    endloop.
    In debuging i have determine that both first line item
    amt is coming in header line but while coming in body.
    I become the second line item amt
    Can any one help me

    You still are not MODIFYing the table if you intend to write it later
    loop at i_final
      loop at i_itab1 where knumv = i_final-knumv.
        move i_itab1-kwert to i_final-comm .
    *   clear i_itab1-kwert.  "<== No need for this at all
      endloop.
    endloop.
    Additionally, you're moving to your primary loop table.  Never going to see two for it unless you write to a 3rd table or
    replace the CLEAR with a WRITE:/ .......
    Edited by: Paul Chapman on May 14, 2008 10:35 AM

  • Maximum record limit for internal table

    hello all,
    can any one tell me what is the maximum limit of internal table. i would like to add all records from bseg to internal table. so i can improve processing time.
    thanks,
    raj

    hi,
    Before Release 4.0A, ABAP stored the content of internal tables in a combination of main memory and file space. This means that the maximum size of all internal tables of all programs running on such an application server at one time is about 2 GB. With Release 4.0A or greater, this size decreases to about 500 MB. (Note that those values aren't fixed, but this is a good guide. This minimum of 500 MB is the lowest limit of the real value, which varies among different operating systems and even among different releases of the same operating system.)
    It may sound strange that a newer release has a higher restriction on capacity. But it's a consequence of the fact that the contents of internal tables move from a reserved file to shared memory. When you process internal tables this way in Release 4.0A or greater, you pay for much better performance with a smaller potential size.
    Regards,
    Sourabh

  • Reg: internal table?

    hello friends?
    i have one basic doubts,
    please clear this things,
    what are all the ways we can create the internal table?
    how we create internal table using data statement?
    how we create internal table using types statement?
    what is the difference between these two methods?

    FYI..
    DATA - Defining an Internal Table
    Variants:
    1. DATA itab TYPE itabtype [WITH HEADER LINE].
    2. DATA itab {TYPE tabkind OF linetype|
                  LIKE tabkind OF lineobj}
              WITH [UNIQUE|NON-UNIQUE] keydef
              [INITIAL SIZE n] [WITH HEADER LINE].
    3. DATA itab {TYPE TABLE OF linetype|LIKE TABLE OF lineobj}.
    4. DATA itab TYPE RANGE OF type.
    DATA itab LIKE RANGE OF f.
    5. DATA itab [TYPE linetype|LIKE lineobj] OCCURS n
              [WITH HEADER LINE].
    6. DATA: BEGIN OF itab OCCURS n,
          END   OF itab [VALID BETWEEN f1 AND f2].
    In an ABAP Objects context, a more severe syntax check is performed that in other ABAP areas. See New naming conventions and LIKE references to Dictionary Types not allowed.
    Effect
    Defines an internal table.
    To fill and process internal tables, use the statements INSERT, APPEND, READ TABLE, LOOP, SORT, and so on.
    The OCCURS or INITIAL SIZE parameter (OCCURS value) determines the number of lines that are created when the table itself is created. However, the table is extended dynamically on demand. For details, refer to Performance Notes for Internal Tables. The OCCURS value, has no other semantic meaning (apart from one exception in the APPEND SORTED BY statement). If you do not specify an INIT IAL SIZE , the system uses the default value 0.
    If you specify WITH HEADER LINE, the table is created with a header line, that is, a field with the same name. It has the same type as the line type of the table.
    This addition is not allowed in an ABAP Objects context. See Tables with header line not allowed.
    Variant 1
    DATA itab TYPE itabtype [WITH HEADER LINE].
    Effect
    itabtype must be an internal table type that you have already defined using TYPES. The statement creates an internal table in the program with this type.
    In general, the type specification for the table object must be complete. The exception to this is a standard table, in which the key definition may be missing. In this case, the system automatically uses a default key.
    Example
    Creating a hashed table by referring to an existing table type:
    TYPES: BEGIN OF STRUC, NAME(10), AGE TYPE I, END OF STRUC,
           HTAB TYPE HASHED TABLE OF STRUC WITH UNIQUE KEY NAME.
    DATA : PERSONS TYPE HTAB.
    Variant 2
    DATA itab {TYPE tabkind OF linetype|LIKE tabkind OF lineobj}           WITH [UNIQUE|NON-UNIQUE] keydef
              [INITIAL SIZE n] [WITH HEADER LINE].
    Effect
    Creates an internal table in the program with the type tabkind. Since there are no generic field definitions, you cannot use the table types ANY TABLE or INDEX TABLE.
    The structure of the table lines is defined by the type linetype if you use a TYPE reference) or by the type of the referred object lineobj (when you use a LIKE reference).
    The same rules apply to the UNIQUE and NON-UNIQUE additions in the DATA statement as in a TYPES definition. You may only omit the definition when defining a standard table.
    If you do not specify the INITIAL SIZE the system uses a default initial size of 0.
    Variant 3
    DATA itab {TYPE TABLE OF linetype|LIKE TABLE OF lineobj}.
    Effect
    This is a shortened form of the definition of a standard table. It corresponds to
       DATA itab {TYPE STANDARD TABLE OF linetype|
                  LIKE STANDARD TABLE OF lineobj} WITH DEFAULT KEY.
    or the old definition (compare variant 4)
       DATA itab {TYPE linetype|LIKE lineobj} OCCURS 0.
    Variant 4
    DATA itab TYPE RANGE OF type. DATA itab LIKE RANGE OF f.
    Additions:
    1. ... INITIAL SIZE n
    2. ... WITH HEADER LINE
    Effect
    Creates an internal table itab with table type STANDARD. The line type is a structure with the following components:
      SIGN(1)   TYPE C
      OPTION(2) TYPE C
      LOW       TYPE type bzw. LIKE f
      HIGH      TYPE type bzw. LIKE f
    Addition 1
    ...INITIAL SIZE n
    Effect
    The INITIAL SIZE specification determines how many table lines are created when the table itself is created. The table is also dynamically expanded as required. For further information, refer to Performance Notes for Internal Tables. The INITIAL SIZE value has no semantic meaning (apart from one exception in the ei APPEND SORTED BY statement). If you do not specify the INITIAL SIZE, the system uses the default value 0.
    Addition 2
    ... WITH HEADER LINE
    This addition is not allowed in an ABAP Objects context. See Tables with Header Lines Not Allowed.
    Effect
    Creates an internal table and a header line for it, that is, a field with the same name as the internal table and the same type as the line type of the internal table.
    Variant 5
    DATA itab [TYPE linetype|LIKE lineobj] OCCURS n                                        [WITH HEADER LINE].
    This variant is not allowed in an ABAP Objects context. See Declaration with OCCURS not allowed.
    Effect
    This variant exists to ensure compatibility with Release 3.x. If you do not specify a line type, the system uses type C with length 1. Otherwise, the variant is the same as
       DATA itab {TYPE STANDARD TABLE OF linetype|
                  LIKE STANDARD TABLE OF lineobj}
                 INITIAL SIZE n [WITH HEADER LINE].
    Example
    TYPES: BEGIN OF LINE_TYPE,
             NAME(20) TYPE C,
             AGE      TYPE I,
           END   OF LINE_TYPE.
    DATA:  PERSONS    TYPE LINE_TYPE OCCURS 20,
           PERSONS_WA TYPE LINE_TYPE.
    PERSONS_WA-NAME = 'Michael'.  PERSONS_WA-AGE  = 25.
    APPEND PERSONS_WA TO PERSONS.
    PERSONS_WA-NAME = 'Gabriela'. PERSONS_WA-AGE  = 22.
    APPEND PERSONS_WA TO PERSONS.
    The internal table PERSONS now contains two entries.
    Variant 6
    DATA: BEGIN OF itab OCCURS n,         ...
          END   OF itab [VALID BETWEEN f1 AND f2].
    This variant is not allowed in an ABAP Objects context. See Declaration with OCCURS not allowed.
    Effect
    Creates an internal table itab with type STANDARD and a header line. The line type consists of the fields between "BEGIN OF itab OCCURS n" and " END OF itab".
    Use the VALID BETWEEN f1 AND f2 addition to specify that the components f1 and f2 of the internal table itab contain a line-based validity interval. You can only use this addition in conjunction with the PROVIDE statement.
    Example
    DATA: BEGIN OF PERSONS OCCURS 20,
            NAME(20),
            AGE TYPE I,
          END   OF PERSONS.
    PERSONS-NAME = 'Michael'.
    PERSONS-AGE  = 25.
    APPEND PERSONS.
    PERSONS-NAME = 'Gabriela'.
    PERSONS-AGE  = 22.
    APPEND PERSONS.
    The internal table consists of two entries. PERSONS also has a header line (work area), which is an interface between the program and the actual table contents.
    Additional help
    Internal Table Objects
    Ramesh

  • Control statement in internal tables

    hi experts,
    can any body will provide me the control statement of internal table.
                                                               thank you

    Hi,
    check this link
    http://help.sap.com/saphelp_nw2004s/helpdata/en/9f/db9f1f35c111d1829f0000e829fbfe/content.htm
    Control Break Statements
    Control break statements are used to create statement blocks which process only specific table lines the LOOP – ENDLOOP block.
    You open such a statement block with the control level statement AT and close it with the control level statement ENDAT. The syntax is as follows:
    Table should be sorted when you use control-break statements
    You can break the sequential access of internal tables by using these statements.
    Syntax:
    At first.
    <Statement block>
    Endat.
    This is the first statement to get executed inside the loop (remember control break statements are applicable only inside the loop)
    So in this block you can write or process those statements which you want to get executed when the loop starts.
    At New carrid.
    Write:/ carrid.
    Endat.
    In this case whenever the new carrid is reached, carrid will be written.
    At End of carrid.
    Uline.
    Endat.
    In this case whenever the end of carrid is reached, a line will be drawn.
    At Last.
    Write:/ ‘Last Record is reached’.
    Endat.
    Processing of statements within this block is done when entire processing of entire internal table is over. Usually used to display grand totals.
    You can use either all or one of the above control break statements with in the loop for processing internal table.
    At end of carrid.
    Sum.
    Endat.
    In above case the statement SUM (applicable only within AT-ENDAT) will sum up all the numeric fields in internal table and result is stored in same internal table variable.
    Regards,
    Sruthi

  • REG:Internal table and Database table

    Hi Xperts,
    Can you tell me /give me a sample code so as to
    Compare the data present in the database table and internal table.i.e
    Wheher the data in the db table matches with the data in the internal table
    Thanks.

    Hello,  
    First make sure that data is there in the internal table
    TABLES : Declare your table example MARA, VBAK etc
    TYPES: BEGIN OF ITAB1,
    Declare your fields here
    example
    v_mat(10) type c,
    v_code(5) type I,
    END OF ITAB1.
    IF NOT ITAB[] is INITIAL.
    LOOP AT
    END IF.
    To compare the data with DB tables, read the database table and copy into the internal table ITAB2
    Then compare the ITAB and ITAB1
    IF ITAB1[] = ITAB2[]
    END IF
    See these links for [Creating Internal Tables|http://help.sap.com/saphelp_nw04/helpdata/en/fc/eb3660358411d1829f0000e829fbfe/content.htm]
    [Comparing Internal Tables|http://help.sap.com/saphelp_nw04/helpdata/en/fc/eb3841358411d1829f0000e829fbfe/content.htm]
    See this for more about [Processing Internal Tables|http://help.sap.com/saphelp_nw04/helpdata/en/fc/eb36ae358411d1829f0000e829fbfe/content.htm]
    Declaring the internal table in ABAP objects
    [Thanks|http://chandranonline.blogspot.com/]
    [Chandran|http://chandranonline.blogspot.com/]

  • Inner join on internal table

    HI all,
    How to access data from two internal table using join condition ?
    suppose i have tow internal table itab and jtab and i want to access data by using inner join on this tow table.
    please tell .
    thanx..

    hi,
    You can use PROVIDE ENDPROVIDE statements in ABAP to achive this.
    Check the below documenttaion.
    PROVIDE
    Syntax
    PROVIDE FIELDS {*|{comp1 comp2 ...}}
                   FROM itab1 INTO wa1 VALID flag1
                   BOUNDS intliml1 AND intlimu1
                   [WHERE log_exp1]
            FIELDS {*|{comp1 comp2 ...}}
                   FROM itab2 INTO wa2 VALID flag2
                   BOUNDS intliml2 AND intlimu2
                   [WHERE log_exp2]
            BETWEEN extliml AND extlimu
            [INCLUDING GAPS].
    ENDPROVIDE.
    Effect
    The statements PROVIDE and ENDPROVIDE define a loop through a statement block. In this loop, any number of internal tables itab1 itab2 ... are processed together. A single table can appear several times. For every table itab you must specify a FIELDS clause. After FIELDS you must specify the character * for all components or a list comp1 comp2 ... for specific components of the relevant table. The names of the components comp1 comp2 ... can only be specified directly.
    To be able to process internal tables using PROVIDE, all tables itab1 itab2 ... must be fully typed index tables and contain two special columns that have the same data type (d, i, n, or t) for all relevant tables. For every table you must specify the names intliml1 intliml2 ... and intlimu1 intlimu2 ... of these columns using the addition BOUNDS.
    The columns intliml1 intliml2 ... and intlimu1 intlimu2 ... in every row of the relevant internal tables must contain values that can be interpreted as limits of closed intervals. Within a table, the intervals specified in these columns must not overlap and must be sorted in ascending order. The intervals therefore make up a unique key for every row.
    For every table you must specify a work area wa1 wa2 ... compatible with the row type and a variable flag1 flag2 ..., for which a character-type data type with length 1 is expected. In the PROVIDE loop, the components specified after FIELDS are filled with values in the relevant work areas wa1 wa2 ... for every specified internal table. The variables flag1 flag2 ... are also filled. A work area wa1 wa2 ... or a variable flag1 flag2 ... cannot be specified more than once.
    With the BETWEEN addition you must specify an interval extliml, extlimu. It must be possible to convert the data objects extliml and extlimu into the data types of the respective columns intliml1 intliml2 ... and intlimu1 intlimu2 ... of the individual tables.
    The interval limits intliml1 intliml2 ... and intlimu1 intlim2 for every row of all relevant internal tables itab1 itab2 ... that are within the closed interval made up by extliml and extlimu divide the latter into new intervals and every interval limit closes one interval in the original direction. If, within a relevant table, a lower interval limit follows an upper interval limit with no space or gap between them and the components of the corresponding rows specified after FIELDS have the same content, the two intervals are combined and the corresponding interval limits intliml1 intliml2 ... and intlimu1 intlimu2 ... are ignored for the new intervals.
    For every interval that is created in such a way and overlaps with at least one of the intervals of a table involved, the PROVIDE loop is passed once. The components of every work area wa1 wa2 ... specified after FIELDS and the variables flag1 flag2 ... are filled with values as follows:
    The components intliml1 intliml2 ... and intlimu1 intlimu2 ... of every work area wa1 wa2 ... are filled with the interval limits of the current interval.
    If the current interval overlaps with one of the intervals of an involved table, the remaining components of the corresponding work area are assigned the contents of the relevant components of this table row and the variable flag1 flag2 ... is set to the value "X". Otherwise, the work area components and the variables flag1 flag2 ... are set to their Initial value.
    Except for intliml1 intliml2 ... and intlimu1 intlimu2 ..., the components not specified after FIELDS are always set to their initial value. The components intliml1 intliml2 ... and intlimu1 intlimu2 ... are always assigned.
    The ABAP runtime environment checks for every table involved, whether the condition of sorted and non-overlapping intervals is met within the interval made up by extliml and extlimu and, if necessary, triggers an exception that can be handled.
    If the INCLUDING GAPS addition is specified, the system passes the PROVIDE loop for every interval, that is also when the current interval does not overlap with at least one of the intervals of an involved table. In the latter case, the variable flag is of initial value for every relevant table.
    You can use the WHERE addition to specify a condition for every table itab1 itab2 ... involved. After WHERE, you can specify any logical expression log_exp1 log_exp2 ... ; the first operand of every comparison must be a component of the internal table. As such, all logical expressions except for IS ASSIGNED, IS REQUESTED, and IS SUPPLIED are possible. You can only specify components that are in the list after FIELDS. Here it is not possible to specify a component using character-type data objects in brackets. The table entries for which the condition is not met are ignored by the PROVIDE loop. You can leave the PROVIDE loop following the instructions in the section Leaving loops.
    System fields
    The system fields sy-subrc and sy-tabix are set to the value 0 before every loop pass and at ENDPROVIDE. Only if the loop is not passed once, is sy-subrc set to 4 at ENDPROVIDE.
    Notes
    The relevant internal tables should not be modified in the PROVIDE loop.
    The WHERE condition can be used to remove overlaps between the tables involved or to ensure the sorting of the intervals.
    In two tables itab1 and itab2, the respective columns col1 and col2 are interval limits of type i. The filling of the internal tables results in the following intervals (rows two and three):
    |01|02|03|04|05|06|07|08|09|10|11|12|13|14|
    |   Itab1 Int1    |     |Itab1 Int2 |     |
    |        |      Itab2 Int1       |        |
    |  |          ... BETWEEN ...             |
    |  | i1  |   i2   | i3  |   i4   |i5|     |
    The interval specified in the BETWEEN addition to the PROVIDE statement is shown in the fourth row. It serves as a basis for the five intervals in the fifth row represented by i1 to i5. These can be processed in the PROVIDE loop.
    Because each of the five intervals overlaps with one of the intervals from rows two and three, the PROVIDE loop is passed five times.
    Only the component col3 of wa1 is filled in the first pass, only the component col3 of wa2 in the third pass, and the components col3 of both work areas in the second and fourth passes. The fields valid1 and valid2 are set accordingly.
    DATA: BEGIN OF wa1,
            col1 TYPE i,
            col2 TYPE i,
            col3 TYPE string,
          END OF wa1.
    DATA: BEGIN OF wa2,
            col1 TYPE i,
            col2 TYPE i,
            col3 TYPE string,
          END OF wa2.
    DATA: itab1 LIKE STANDARD TABLE OF wa1,
          itab2 LIKE STANDARD TABLE OF wa2.
    DATA: flag1(1) TYPE c,
          flag2(1) TYPE c.
    wa1-col1 = 1.
    wa1-col2 = 6.
    wa1-col3 = 'Itab1 Int1'.
    APPEND wa1 TO itab1.
    wa1-col1 = 9.
    wa1-col2 = 12.
    wa1-col3 = 'Itab1 Int2'.
    APPEND wa1 TO itab1.
    wa2-col1 = 4.
    wa2-col2 = 11.
    wa2-col3 = 'Itab2 Int1'.
    PROVIDE FIELDS col3 FROM itab1 INTO wa1
                                   VALID flag1
                                   BOUNDS col1 AND col2
            FIELDS col3 FROM itab2 INTO wa2
                                   VALID flag2
                                   BOUNDS col1 AND col2
            BETWEEN 2 AND 14.
      WRITE: / wa1-col1, wa1-col2, wa1-col3, flag1.
      WRITE: / wa2-col1, wa2-col2, wa2-col3, flag2.
      SKIP.
    ENDPROVIDE.
    The list output is as follows:
       2           3  Itab1 Int1 X
       2           3
       4           6  Itab1 Int1 X
       4           6  Itab2 Int1 X
       7           8
       7           8  Itab2 Int1 X
       9          11  Itab1 Int2 X
       9          11  Itab2 Int1 X
      12          12  Itab1 Int2 X
      12          12
    Exceptions
    Catchable Exceptions
    CX_SY_PROVIDE_INTERVAL_OVERLAP
    Cause: In one of the involved tables there are overlapping intervals within extlim1 and extlim2.
    Runtime Error: UNCAUGHT_EXCEPTION
    CX_SY_PROVIDE_TABLE_NOT_SORTED
    Cause: One of the involved tables is not sorted in ascending order by the intervals within extlim1 and extlim2.
    Runtime Error: UNCAUGHT_EXCEPTION
    Edited by: Velangini Showry Maria Kumar Bandanadham on Apr 28, 2008 1:36 PM

  • How to do parallel processing with dynamic internal table

    Hi All,
    I need to implement parallel processing that involves dynamically created internal tables. I tried doing so using RFC function modules (using starting new task and other such methods) but didn't get success this requires RFC enabled function modules and at the same time RFC enabled function modules do not allow generic data type (STANDARD TABLE) which is needed for passing dynamic internal tables. My exact requirement is as follows:
    1. I've large chunk of data in two internal tables, one of them is formed dynamically and hence it's structure is not known at the time of coding.
    2. This data has to be processed together to generate another internal table, whose structure is pre-defined. But this data processing is taking very long time as the number of records are close to a million.
    3. I need to divide the dynamic internal table into (say) 1000 records each and pass to a function module and submit it to run in another task. Many such tasks will be executed in parallel.
    4. The function module running in parallel can insert the processed data into a database table and the main program can access it from there.
    Unfortunately, due to the limitation of not allowing generic data types in RFC, I'm unable to do this. Does anyone has any idea how to implement parallel processing using dynamic internal tables in these type of conditions.
    Any help will be highly appreciated.
    Thanks and regards,
    Ashin

    try the below code...
      DATA: w_subrc TYPE sy-subrc.
      DATA: w_infty(5) TYPE  c.
      data: w_string type string.
      FIELD-SYMBOLS: <f1> TYPE table.
      FIELD-SYMBOLS: <f1_wa> TYPE ANY.
      DATA: ref_tab TYPE REF TO data.
      CONCATENATE 'P' infty INTO w_infty.
      CREATE DATA ref_tab TYPE STANDARD TABLE OF (w_infty).
      ASSIGN ref_tab->* TO <f1>.
    * Create dynamic work area
      CREATE DATA ref_tab TYPE (w_infty).
      ASSIGN ref_tab->* TO <f1_wa>.
      IF begda IS INITIAL.
        begda = '18000101'.
      ENDIF.
      IF endda IS INITIAL.
        endda = '99991231'.
      ENDIF.
      CALL FUNCTION 'HR_READ_INFOTYPE'
        EXPORTING
          pernr           = pernr
          infty           = infty
          begda           = '18000101'
          endda           = '99991231'
        IMPORTING
          subrc           = w_subrc
        TABLES
          infty_tab       = <f1>
        EXCEPTIONS
          infty_not_found = 1
          OTHERS          = 2.
      IF sy-subrc <> 0.
        subrc = w_subrc.
      ELSE.
      ENDIF.

  • How to process a block for each row in an internal table....

    Hi experts....
    In po approval workflow the scenario is like this.... for each po there may be more than one approver. approvers list i am maintaining in the ztable. list of approvers(no of approvers) is decided by the po value. I have collected these approvers into internal table. now i have to process a block ( approving or rejecting the po... )in the workflow for each row in the internal table.
    how can i do this. based on the decision of the 1st approver  approves the po then it should go to next approver in the internal table...otherwise end the workflow.....
    Please help me......

    i have created an internal table in the workflow container in which i am getting the list of approvers....
    how can i loop the internal table in the workflow...?
    how can i know the index of the loop in the workflow.....(will sy-index work here....? so that i can use loop until step in the main workflow to call the subworkflow..so that if sy-index is greater than no of entires in the itab then i can come out of the loop)

  • How to process very large internal tables and stop time limit

    Hello Experts,
    I am currently having a problem on how to fix a certain report where we process more than 500 thousand
    records in the internal table. I can't think of any solution that can make the below code any faster.
    I just checked in our prod server and the error time limit exceeded stops in the loop statement. Anyway,
    Below is the code. Any input will be appreciated. Thanks guys and take care!
    Get sales document and corresponding line item
      SELECT avbeln bposnr a~auart
             avkorg avtweg a~kunnr
             bmatnr bpstyv b~spart
        FROM vbak AS a
       INNER JOIN vbap AS b
          ON avbeln = bvbeln
       APPENDING TABLE lt_vbap
       WHERE a~auart IN lr_auart
         AND a~vbeln IN s_vbeln
         AND a~vbeln IN s_vbill
         AND a~vbtyp EQ p_vbtyp.
      LOOP AT lt_vbap ASSIGNING <wa_vbap>.
        IF <wa_vbap>-auart EQ 'ZUCI' OR
           <wa_vbap>-auart EQ 'ZURV' OR
           <wa_vbap>-auart EQ 'ZUPR'.
        Check ifa delivery document has been created
          CLEAR wa_vbill.
          SELECT SINGLE vbeln
            FROM vbfa
            INTO wa_vbill
           WHERE vbelv = <wa_vbap>-vbeln
             AND ( ( vbtyp_n EQ 'J' AND vbtyp_v = 'C' )
              OR ( vbtyp_n EQ 'T' AND vbtyp_v = 'H' ) ).
          IF sy-subrc <> 0.
            <wa_vbap>-del_ind = 'X'.
            CONTINUE.
          ELSE.
          Check if within selection parameters
            CLEAR wa_likp.
            READ TABLE lt_likp INTO wa_likp WITH KEY vbeln = wa_vbill.
            IF sy-subrc <> 0.
              SELECT SINGLE *
                FROM likp
                INTO wa_likp
               WHERE vbeln = wa_vbill.
              APPEND wa_likp TO lt_likp.
            ENDIF.
            IF NOT wa_likp-wadat_ist IN s_erdat.
              <wa_vbap>-del_ind = 'X'.
              CONTINUE.
            ENDIF.
          ENDIF.
        ELSE.
      Check if this has already been billed
          CLEAR wa_vbill.
          SELECT SINGLE vbeln
            FROM vbfa
            INTO wa_vbill
           WHERE vbelv = <wa_vbap>-vbeln
             AND ( ( vbtyp_n EQ 'M' AND vbtyp_v = 'C' )
              OR ( vbtyp_n EQ 'O' AND vbtyp_v = 'H' ) ).
          IF sy-subrc <> 0.
            <wa_vbap>-del_ind = 'X'.
            CONTINUE.
          ELSE.
          Check if within selection parameters
            CLEAR wa_vbrk.
            READ TABLE lt_vbrk INTO wa_vbrk WITH KEY vbeln = wa_vbill.
            IF sy-subrc <> 0.
              SELECT SINGLE vbeln fkdat
                FROM vbrk
                INTO wa_vbrk
               WHERE vbeln = wa_vbill.
              APPEND wa_vbrk TO lt_vbrk.
            ENDIF.
            IF NOT wa_vbrk-fkdat IN s_erdat.
              <wa_vbap>-del_ind = 'X'.
              CONTINUE.
            ENDIF.
          ENDIF.
        ENDIF.
      Get Material Type and Division
        IF <wa_vbap>-spart IS NOT INITIAL.
          SELECT SINGLE mtart
            FROM mara
            INTO lv_mtart
           WHERE matnr = <wa_vbap>-matnr.
        ELSE.
          SELECT SINGLE mtart spart
            FROM mara
            INTO (lv_mtart,<wa_vbap>-spart)
           WHERE matnr = <wa_vbap>-matnr.
        ENDIF.
      If material division is same as parameter division
        IF <wa_vbap>-spart = p_spart.
      If material is subsidiary-owned
       IF <wa_vbap>-spart in lr_spart.
        If customer is the same as that of parameter division
          IF <wa_vbap>-kunnr NE lr_kunnr OR <wa_vbap>-auart EQ 'ZUDO' OR <wa_vbap>-auart EQ 'ZUS3'.
          If item is a free good, tag order type as 'ZUPR' to treat
          the item the same way as 'ZUPR'
            IF <wa_vbap>-pstyv = 'TANN' OR
               <wa_vbap>-pstyv = 'ZKNF' OR
               <wa_vbap>-pstyv = 'ZKNN' OR
               <wa_vbap>-pstyv = 'ZFLO' OR
               <wa_vbap>-pstyv = 'ZKBF' OR
               <wa_vbap>-pstyv = 'ZKLN' OR
               <wa_vbap>-pstyv = 'ZREN'.
              lv_auart = <wa_vbap>-auart.
              IF lv_auart EQ 'ZUPR'.
                CLEAR <wa_vbap>-pstyv.
              ENDIF.
              <wa_vbap>-auart = 'ZUPR'.
              CLEAR: lv_mtart.
            ENDIF.
          Set Cost of Goods Sold Account
            <wa_vbap>-cogshkont = '0050000010'.
            CASE <wa_vbap>-auart.
              WHEN 'ZUPR'.
                CASE lv_mtart.
                  WHEN 'ZUL4'.
                    <wa_vbap>-del_ind = 'X'.
                    CONTINUE.
                  WHEN OTHERS.
                  Check if division is defined in mapping table
                    READ TABLE lt_ulsub INTO wa_ulsub
                         WITH KEY spart = <wa_vbap>-spart.
                    IF sy-subrc = 0.
                      <wa_vbap>-kostl = wa_ulsub-kostlp.
                      <wa_vbap>-bukrs = wa_ulsub-bukrsp.
                      <wa_vbap>-type = 'TP'.
                    Set Cost of Goods Sold Account
                      IF lv_auart = 'ZUPR'.
                        <wa_vbap>-cogshkont = '0050000006'.
                      ENDIF.
                    ELSE.
                      <wa_vbap>-del_ind = 'X'.
                      CONTINUE.
                    ENDIF.
                ENDCASE.
              WHEN 'ZUCI' OR 'ZUDO' OR 'ZURD' OR 'ZUS3'.
            Get cost center from header text
                PERFORM get_cost_center USING <wa_vbap>-vbeln
                                     CHANGING <wa_vbap>-kostl.
    *  Change by LGTE 11-02-2006
            Check if Medvale sales
                IF <wa_vbap>-auart EQ 'ZUCI' AND <wa_vbap>-kostl IS INITIAL.
                  <wa_vbap>-del_ind = 'X'.
                  CONTINUE.
            Check if UL Cost Center
                ELSEIF <wa_vbap>-kostl NE gv_ul_kostl.
               IF <wa_vbap>-kostl NE gv_ul_kostl.
    *  End change.
              Get material division and check if subsidiary product
                 SELECT SINGLE spart FROM mara INTO <wa_vbap>-spart
                 WHERE matnr = <wa_vbap>-matnr.
                  READ TABLE lt_ulsub INTO wa_ulsub
                       WITH KEY spart = <wa_vbap>-spart.
                  IF sy-subrc = 0.
                  Get requestor's company code from cost center data
                    SELECT SINGLE bukrs
                      FROM csks
                      INTO <wa_vbap>-bukrs
                     WHERE kokrs =  lc_kokrs
                       AND kostl =  <wa_vbap>-kostl
                       AND datbi GE sy-datum
                       AND datab LE sy-datum.
                    IF sy-subrc = 0.
                    For donations, only include if a subsidiary company is donating
                      IF <wa_vbap>-auart EQ 'ZUDO' OR <wa_vbap>-auart EQ 'ZUS3'.
                        IF NOT <wa_vbap>-kunnr IN lr_kunnrnt.
                          <wa_vbap>-del_ind = 'X'.
                          CONTINUE.
                        ENDIF.
                       CHECK <wa_vbap>-kunnr IN lr_kunnrnt.
                      ENDIF.
                    For ZUCI, if the company code of the costcenter is UL, do not include
                      IF <wa_vbap>-bukrs EQ gc_ul_bukrs.
                        <wa_vbap>-del_ind = 'X'.
                        CONTINUE.
                      ENDIF.
                      IF <wa_vbap>-bukrs = wa_ulsub-bukrsp.
                        <wa_vbap>-type = 'RV'.
                      ELSE.
                        <wa_vbap>-type = 'RV'.
                      ENDIF.
                    ELSE.
                    Check if customer defined in table ZFI_DONATIONS
                      SELECT SINGLE kunnr FROM zfi_donations INTO <wa_vbap>-kostl
                        WHERE kunnr = <wa_vbap>-kostl.
                      IF sy-subrc <> 0.
                        lv_error = 'X'.
                        CONCATENATE 'Cost center/Customer' <wa_vbap>-kostl
                                    'does not exist. Please check Sales Order'
                                    <wa_vbap>-vbeln
                                    INTO lt_disp-message SEPARATED BY space.
                        lt_disp-type = 'E'.
                        <wa_vbap>-del_ind = 'X'.
                        APPEND lt_disp.
                        CONTINUE.
                      ELSE.
                        <wa_vbap>-type = 'RV'.
                      ENDIF.
                    ENDIF.
                  ELSE.
                    <wa_vbap>-del_ind = 'X'.
                    CONTINUE.
                  ENDIF.
                ELSE.
                  <wa_vbap>-del_ind = 'X'.
                  CONTINUE.
                ENDIF.
              WHEN OTHERS.
                <wa_vbap>-del_ind = 'X'.
                CONTINUE.
            ENDCASE.
          ELSE.
            <wa_vbap>-del_ind = 'X'.
            CONTINUE.
          ENDIF.
        ELSE.
          <wa_vbap>-del_ind = 'X'.
          CONTINUE.
        ENDIF.
      Get company code description
        SELECT SINGLE butxt FROM t001 INTO <wa_vbap>-butxt
         WHERE bukrs = <wa_vbap>-bukrs.
        IF sy-subrc <> 0.
          SELECT SINGLE name1 FROM kna1 INTO <wa_vbap>-butxt
           WHERE kunnr = <wa_vbap>-kostl.
        ENDIF.
    Change by LGTE on 11-02-2006
    Get Transaction Type
        CASE <wa_vbap>-auart.
          WHEN 'ZUPR'. "UL Promo/Samples
            IF <wa_vbap>-pstyv = 'TANN' OR
               <wa_vbap>-pstyv = 'ZKNF' OR
               <wa_vbap>-pstyv = 'ZKNN' OR
               <wa_vbap>-pstyv = 'ZFLO' OR
               <wa_vbap>-pstyv = 'ZKBF' OR
               <wa_vbap>-pstyv = 'ZKLN' OR
               <wa_vbap>-pstyv = 'ZREN'.
              <wa_vbap>-ltext = 'Free Goods'.
            ELSE.
              <wa_vbap>-ltext = 'Product Samples'.
            ENDIF.
          WHEN 'ZUDO'. "Donations - R/3
            <wa_vbap>-ltext = 'Donations - R/3'.
          WHEN 'ZUCI'. "Donations - ZUCI
            <wa_vbap>-ltext = 'Donations - ZUCI'.
          WHEN 'ZURD' OR 'ZUS3'. "UL Returns - Donation
            <wa_vbap>-ltext = 'UL Returns - Donation'.
        ENDCASE.
    Get material description
        SELECT SINGLE maktx
          FROM makt
          INTO <wa_vbap>-maktx
         WHERE matnr = <wa_vbap>-matnr
           AND spras = sy-langu.
    Get division from material master
       SELECT SINGLE spart FROM mara INTO <wa_vbap>-spart
        WHERE matnr = <wa_vbap>-matnr.
    Get division description
        SELECT SINGLE vtext
          FROM tspat
          INTO <wa_vbap>-vtext
         WHERE spras = sy-langu
           AND spart = <wa_vbap>-spart.
    Get Valuation Class
        SELECT SINGLE bklas
          FROM mbew
          INTO lv_bklas
         WHERE matnr = <wa_vbap>-matnr.
    Determine G/L of FG Based on Valuation Class
        READ TABLE lt_val_cls INTO wa_val_cls WITH TABLE KEY bklas = lv_bklas.
        <wa_vbap>-fghkont = wa_val_cls-hkont.
    Determine Cost Center of Cogs Account
        READ TABLE lt_ulsub INTO wa_ulsub WITH TABLE KEY spart = <wa_vbap>-spart.
        <wa_vbap>-cogskostl = wa_ulsub-kostlp.

    Hi!
    First of all, don't use SELECT SINGLE inside of LOOP,
    instead  SELECT all relevated rows before LOOP in intertal tables (using FOR ALL ENTRIES) and then use
    READ TABLE WITH KEY BINARY SEARCH.
    it will match faster.
    for example:
    IF NOT lt_vbap[] IS INITIAL.
    SELECT vbeln
    FROM vbfa
    INTO lt_vbill
    FOR ALL ENTRIES IN lt_vbap
    WHERE vbelv = lt_vbap-vbeln.
    ENDIF.
    SORT lt_vbap BY vbeln.
    READ TABLE lt_vbill WITH KEY vbeln = <wa_vbap>-vbeln
    BINARY SEARCH.

  • Error "Error in ABAP statement when processing an internal table. table."

    Hello,
    I am facing the error when tried for GR from SRM portal for my shopping cart and for others created shopping cart. The error is
    "Error in ABAP statement when processing an internal table. table."
    I have the central receipient role. Couold any body assist me?
    Thanks,
    Pijush

    Hi Harish,
    Execute the query in RSRT and check whether you have any short dump is in ST22. This would give a clear idea at what might have gone wrong.
    Another thing is to check whether the code for the variable is fine in the user exit.
    Hope this helps.
    Bye
    Dinesh

Maybe you are looking for

  • HP recovery manager failed error code 45D

    Hey all, tryed to restore laptop to original settings. Popper up with error code 45D followed by ffff15 (something like that) any idea what this is? any solutions? happened when trying to back up Kind regards

  • FOLIO_CRAWL problem

    Hi all, I am using FolioCrawl component, in order to fetch the content of created folios. In general, it works fine, and service FOLIO_CRAWL returns two appropriate result sets. However, there is one important exception: Namely, if I create folio bas

  • Alerts in SAPAPO P20

    Hi All, We got access to Alert Monitor last week and start using them, but on one of them getting error message  that missing authorization on Orders. Could you please help where is the issue and what to do Kindly check attach file. BR, Ankit

  • Sorting an array of objects

    hi there, i have to sort an array of object that looks like: surname, name, age, height well i have to sort them alphabetically like this: based on the surnames, if the surnames are the same than sort on the base of the names; if the names are the sa

  • 98% of CPU

    The right side of my menu bar is freezing, disappearing and hogging up the whole computer. I trashed the systemUIserver.plist files but that didn't work. I check the systemUIserver in Activity Monitor and it said "not responding". It also said it was