Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

LOOP FROM INDEX

Former Member
0 Likes
33,846

Hello ppl,

Following is the way i was doing the loop.

But the same records or the records which have same key fields get missed, hence they dint show up at ALV.

Thus i came to know that using LOOP FROM INDEX will help but I need syntax for that......Plz provide me with it keeping in consideration the condition below.

FORM final_table .

LOOP AT it_data INTO wa_data.

READ TABLE it_knvp

INTO wa_knvp

WITH KEY kunnr = wa_data-kunnr

BINARY SEARCH .

IF sy-subrc = 0.

MOVE: wa_data-kunnr TO wa_alv-kunnr,

wa_data-ort01 TO wa_alv-ort01,

wa_data-pstlz TO wa_alv-pstlz,

wa_data-regio TO wa_alv-regio,

wa_data-bukrs TO wa_alv-bukrs,

wa_data-zterm TO wa_alv-zterm,

wa_knvp-vkorg TO wa_alv-vkorg,

wa_knvp-vtweg TO wa_alv-vtweg,

wa_knvp-spart TO wa_alv-spart,

wa_knvp-parvw TO wa_alv-parvw,

wa_knvp-parza TO wa_alv-parza,

wa_knvp-kunn2 TO wa_alv-kunn2,

wa_knvp-lifnr TO wa_alv-lifnr.

APPEND wa_alv TO it_alv.

ENDIF.

ENDLOOP.

ENDFORM. " FINAL_TABLE

Regards

Edited by: Faisal Khan on Mar 27, 2008 4:09 PM

10 REPLIES 10
Read only

mamHB
Explorer
0 Likes
16,338

Hi,

I didn't test it, but I think this could give you a hint....


LOOP AT it_data INTO wa_data.
READ TABLE it_knvp
transporting no fields
*INTO wa_knvp
WITH KEY kunnr = wa_data-kunnr
BINARY SEARCH .

check sy-subrc = 0.

 lv_from = sy-index.

clear lv_kunnr.

loop at it_knvp into wa_knvp from lv_from.

 if lv_kunnr is initial or
    lv_kunnr = wa_knvp-kunnr. 

 lv_kunnr =  wa_knvp-kunnr.
MOVE: wa_data-kunnr TO wa_alv-kunnr,
wa_data-ort01 TO wa_alv-ort01,
wa_data-pstlz TO wa_alv-pstlz,
wa_data-regio TO wa_alv-regio,
wa_data-bukrs TO wa_alv-bukrs,
wa_data-zterm TO wa_alv-zterm,
wa_knvp-vkorg TO wa_alv-vkorg,
wa_knvp-vtweg TO wa_alv-vtweg,
wa_knvp-spart TO wa_alv-spart,
wa_knvp-parvw TO wa_alv-parvw,
wa_knvp-parza TO wa_alv-parza,
wa_knvp-kunn2 TO wa_alv-kunn2,
wa_knvp-lifnr TO wa_alv-lifnr.

APPEND wa_alv TO it_alv.
else.
	exit.
endif.
endloop.
ENDLOOP.

Read only

Sm1tje
Active Contributor
0 Likes
16,338

At the moment your are doing a read on the internal table it_knvp with KUNNR. But what you're saying is that the internal table it_knvp has more entries for a certain KUNNR. Then you shouldn't do a read, in which you will only get one record back being the first. In this case it's better to use the following:

LOOP AT it_knvp where KUNNR = wa_data-kunnr.

ENDLOOP.

So if KUNNR more than once in internal table it_knvp, then in this case you will get them all.

LOOP AT it_knvp FROM INDEX x TO y won't solve your problem but LOOP AT WHERE will.

Read only

Former Member
0 Likes
16,338

@ Matthias Murken

Hey Matthias thanks for the help but ur code works the same way as mine.

@ Micky Oestreich

Hi Micky...i tried to use loop for both my internal tables but the records getting repeated.......If u'll plz elaborate ur reply that will be grateful....

For that sake i m providing the code below ppl.

*----------------------------------------------------------------------*
*  TYPE-GROUPS                                                         *
*----------------------------------------------------------------------*
TYPE-POOLS: slis.

*----------------------------------------------------------------------*
*  TYPES                                                               *
*----------------------------------------------------------------------*
TYPES: BEGIN OF ty_data,
       kunnr TYPE kunnr,
       ort01 TYPE ort01,
       pstlz TYPE pstlz,
       regio TYPE regio,
       bukrs TYPE bukrs,
       zterm TYPE zterm,
       END OF ty_data,


       BEGIN OF ty_knvp,
       kunnr TYPE kunnr,
       vkorg TYPE vkorg,
       vtweg TYPE vtweg,
       spart TYPE spart,
       parvw TYPE parvw,
       parza TYPE parza,
       kunn2 TYPE kunn2,
       lifnr TYPE lifnr,
       END OF ty_knvp,

       BEGIN OF ty_alv,
       kunnr TYPE kunnr,
       ort01 TYPE ort01,
       pstlz TYPE pstlz,
       regio TYPE regio,
       bukrs TYPE bukrs,
       zterm TYPE zterm,
       vkorg TYPE vkorg,
       vtweg TYPE vtweg,
       spart TYPE spart,
       parvw TYPE parvw,
       parza TYPE parza,
       kunn2 TYPE kunn2,
       lifnr TYPE lifnr,
       END OF ty_alv,


       BEGIN OF ty_kna1,
       kunnr TYPE kunnr,
       END OF ty_kna1,

       BEGIN OF ty_knb1,
       bukrs TYPE bukrs,
       END OF ty_knb1.



*DATA: IT_KNVP TYPE KNVP,
DATA: it_knvp TYPE STANDARD TABLE OF ty_knvp .


DATA: it_data TYPE STANDARD TABLE OF ty_data .

* Report data to be shown.
DATA: it_alv TYPE STANDARD TABLE OF ty_alv .

* Heading of the report.
DATA: t_heading TYPE slis_t_listheader.

DATA: fieldcatalog TYPE  slis_t_fieldcat_alv .

*TABLES
TABLES:knvp,kna1,knb1.
*----------------------------------------------------------------------*
*                  CONSTANTS                                           *
*----------------------------------------------------------------------*

CONSTANTS: c_kunnr TYPE char5 VALUE 'KUNNR',
 c_ort01 TYPE char5 VALUE 'ORT01',
 c_pstlz TYPE char5 VALUE 'PSTLZ',
 c_regio TYPE char5 VALUE 'REGIO',
 c_bukrs TYPE char5 VALUE 'BUKRS',
 c_zterm TYPE char5 VALUE 'ZTERM',
 c_vkorg TYPE char5 VALUE 'VKORG',
 c_vtweg TYPE char5 VALUE 'VTWEG',
 c_spart TYPE char5 VALUE 'SPART',
 c_parvw TYPE char5 VALUE 'PARVW',
 c_parza TYPE char5 VALUE 'PARZA',
 c_kunn2 TYPE char5 VALUE 'KUNN2',
 c_lifnr TYPE char5 VALUE 'LIFNR'.

*----------------------------------------------------------------------*
*  WORKAREA                                                           *
*----------------------------------------------------------------------*
DATA:  wa_data TYPE ty_data,
       wa_knvp TYPE ty_knvp,
       wa_alv TYPE ty_alv,
       wa_fcat  TYPE slis_fieldcat_alv,
       wa_layout TYPE slis_layout_alv,
       data_entries TYPE sy-tabix,
       knvp_entries TYPE sy-tabix.

*======================= Selection Screen ==========================*

SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

*----------------------------------------------------------------------*
*  SELECT-OPTIONS                                                      *
*----------------------------------------------------------------------*
SELECT-OPTIONS s_kunnr FOR kna1-kunnr NO INTERVALS OBLIGATORY.

SELECT-OPTIONS: s_bukrs FOR knb1-bukrs NO-EXTENSION NO INTERVALS,
                s_vkorg FOR knvp-vkorg  NO-EXTENSION NO INTERVALS,
                s_vtweg FOR knvp-vtweg NO-EXTENSION NO INTERVALS,
                s_spart FOR knvp-spart NO-EXTENSION NO INTERVALS,
                s_parvw FOR knvp-parvw NO-EXTENSION NO INTERVALS.
SELECTION-SCREEN: END OF BLOCK b1.


*----------------------------------------------------------------------*
* AT SELECTION-SCREEN                                            *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON: s_kunnr,
                        s_bukrs,
                        s_vkorg,
                        s_vtweg,
                        s_spart,
                        s_parvw.

  PERFORM validate_data.

*----------------------------------------------------------------------*
* START-OF-SELECTION                                                   *
*----------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM get_data.  "fetch data from table and perform join on them

  CHECK it_data[] IS NOT INITIAL.

  PERFORM final_table.

  CHECK it_alv IS NOT INITIAL.

  PERFORM build_fieldcatalog.            "populate field catalog

  PERFORM build_layout.

  PERFORM grid_display.                  "display the result in ALV grid


*----------------------------------------------------------------------*
* END-OF-SELECTION                                                     *
*----------------------------------------------------------------------*
END-OF-SELECTION.
* describe


*----------------------------------------------------------------------*
* SUBROUTINES (FORMS)
*----------------------------------------------------------------------*

*&------------------------------------------------------------------*
*&      Form  get_data
*&------------------------------------------------------------------*
*       Gets the information to be shown in the report.
*-------------------------------------------------------------------*
*       Join on tables KNA1, KNB1 and for all enteries in KNVP
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*

FORM get_data.

  SELECT kna1~kunnr
  kna1~ort01
  kna1~pstlz
  kna1~regio
  knb1~bukrs
  knb1~zterm
  INTO TABLE it_data
  FROM kna1 INNER JOIN knb1
  ON kna1~kunnr = knb1~kunnr
    WHERE kna1~kunnr IN s_kunnr
   AND knb1~bukrs IN s_bukrs.

  CHECK it_data[] IS NOT INITIAL.
*check sy-subrc IS  INITIAL.


  SELECT kunnr
         vkorg
         vtweg
         spart
         parvw
         parza
         kunn2
         lifnr
        INTO TABLE it_knvp FROM knvp
   FOR ALL ENTRIES IN it_data
   WHERE  kunnr = it_data-kunnr
     AND  vkorg IN s_vkorg
     AND  vtweg IN s_vtweg
     AND  spart IN s_spart
     AND  parvw IN s_parvw.
  IF sy-subrc EQ 0.
    SORT it_knvp BY kunnr.
  ENDIF.

* order by it_knvp-kunnr.


  DESCRIBE TABLE it_data LINES data_entries.
  DESCRIBE TABLE it_knvp LINES knvp_entries.

  WRITE:  /005 'Number of it_data entries:', data_entries,
         /005 'Number of it_knvp entries:', knvp_entries.
  SKIP 1.

ENDFORM. " get_data



*&---------------------------------------------------------------------*
*&      Form  FINAL_TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM final_table .
*loop at itab from index v_index.
  LOOP AT it_data INTO wa_data.

    READ TABLE it_knvp
    INTO wa_knvp
    WITH KEY kunnr = wa_data-kunnr
    BINARY SEARCH .
    IF sy-subrc = 0.

*      MOVE-CORRESPONDING wa_data TO wa_alv.
*      MOVE-CORRESPONDING wa_knvp TO wa_alv.

      MOVE: wa_data-kunnr TO wa_alv-kunnr,
            wa_data-ort01 TO wa_alv-ort01,
            wa_data-pstlz TO wa_alv-pstlz,
            wa_data-regio TO wa_alv-regio,
            wa_data-bukrs TO wa_alv-bukrs,
            wa_data-zterm TO wa_alv-zterm,
            wa_knvp-vkorg TO wa_alv-vkorg,
            wa_knvp-vtweg TO wa_alv-vtweg,
            wa_knvp-spart TO wa_alv-spart,
            wa_knvp-parvw TO wa_alv-parvw,
            wa_knvp-parza TO wa_alv-parza,
            wa_knvp-kunn2 TO wa_alv-kunn2,
            wa_knvp-lifnr TO wa_alv-lifnr.


      APPEND wa_alv TO it_alv.
    ENDIF.
  ENDLOOP.

ENDFORM.                    " FINAL_TABLE




************************************************************************
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*       Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------*

FORM build_fieldcatalog.

  IF it_alv[] IS NOT INITIAL.

    wa_fcat-fieldname   = c_kunnr.
    wa_fcat-seltext_l   = 'Customer Master'(001).
    wa_fcat-col_pos     = 1.
    APPEND wa_fcat TO fieldcatalog.
    CLEAR  wa_fcat.

    wa_fcat-fieldname   = c_ort01.
    wa_fcat-seltext_l   = 'City'(002).
    wa_fcat-col_pos     = 2.
    APPEND wa_fcat TO fieldcatalog.
    CLEAR  wa_fcat.

    wa_fcat-fieldname   = c_pstlz.
    wa_fcat-seltext_l   = 'Postal Code'(003).
    wa_fcat-col_pos     = 3.
    APPEND wa_fcat TO fieldcatalog.
    CLEAR  wa_fcat.

    wa_fcat-fieldname   = c_regio.
    wa_fcat-seltext_l   = 'Region'(004).
    wa_fcat-col_pos     = 4.
    APPEND wa_fcat TO fieldcatalog.
    CLEAR  wa_fcat.

    wa_fcat-fieldname   = c_bukrs.
    wa_fcat-seltext_l   = 'Company Code'(005).
    wa_fcat-col_pos     = 5.
    APPEND wa_fcat TO fieldcatalog.
    CLEAR  wa_fcat.

    wa_fcat-fieldname   = c_zterm.
    wa_fcat-seltext_l   = 'Terms of payment'(006).
    wa_fcat-col_pos     = 6.
    APPEND wa_fcat TO fieldcatalog.
    CLEAR  wa_fcat.

    wa_fcat-fieldname   = c_vkorg.
    wa_fcat-seltext_l   = 'Sales Organization'(007).
    wa_fcat-col_pos     = 7.
    APPEND wa_fcat TO fieldcatalog.
    CLEAR  wa_fcat.

    wa_fcat-fieldname   = c_vtweg.
    wa_fcat-seltext_l   = 'Distribution Channel'(008).
    wa_fcat-col_pos     = 8.
    APPEND wa_fcat TO fieldcatalog.
    CLEAR  wa_fcat.

    wa_fcat-fieldname   = c_spart.
    wa_fcat-seltext_l   = 'Division'(009).
    wa_fcat-col_pos     = 9.
    APPEND wa_fcat TO fieldcatalog.
    CLEAR  wa_fcat.

    wa_fcat-fieldname   = c_parvw.
    wa_fcat-seltext_l   = 'Partner function'(010).
    wa_fcat-col_pos     = 10.
    APPEND wa_fcat TO fieldcatalog.
    CLEAR  wa_fcat.


    wa_fcat-fieldname   = c_kunn2.
    wa_fcat-seltext_l   = 'Customer number of partner'(011).
    wa_fcat-col_pos     = 11.
    APPEND wa_fcat TO fieldcatalog.
    CLEAR  wa_fcat.

    wa_fcat-fieldname   = c_lifnr.
    wa_fcat-seltext_l   = 'Account Number of Vendor'(012).
    wa_fcat-col_pos     = 12.
    APPEND wa_fcat TO fieldcatalog.
    CLEAR  wa_fcat.

    wa_fcat-fieldname   = c_parza.
    wa_fcat-seltext_l   = 'Partner counter'(013).
    wa_fcat-col_pos     = 13.
    APPEND wa_fcat TO fieldcatalog.
    CLEAR  wa_fcat.

  ENDIF.

ENDFORM.                    " BUILD_FIELDCATALOG

*&---------------------------------------------------------------------*
*&      Form  build_layout
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_layout .





* Set layout field for field attributes(i.e. input/output)
*  wa_layout-stylefname = 'FIELD_STYLE'.
  wa_layout-zebra             = 'X'.





ENDFORM.                    " build_layout

*&---------------------------------------------------------------------*
*&      Form  GRID_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM grid_display. "using t_data type ty_tbl_data.
  IF it_alv[] IS NOT INITIAL.

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
        i_callback_program = sy-repid
        is_layout          = wa_layout
        it_fieldcat        = fieldcatalog[]
      TABLES
        t_outtab           = it_alv[]
      EXCEPTIONS
        program_error      = 1
        OTHERS             = 2.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    .
  ENDIF.


ENDFORM.                    "GRID_DISPLAY

*&---------------------------------------------------------------------*
*&      Form  VALIDATE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM validate_data .
  DATA : li_kna1 TYPE STANDARD TABLE OF ty_kna1,
         li_knb1 TYPE STANDARD TABLE OF ty_knb1,
         li_knvp TYPE STANDARD TABLE OF ty_knvp.


  SELECT kunnr
  FROM kna1
  INTO TABLE li_kna1
  WHERE kunnr IN s_kunnr.

  IF sy-subrc <> 0.
    MESSAGE 'Invalid Customer Number'(013) TYPE 'E'.
  ENDIF.

  SELECT  bukrs
  FROM t001
  INTO TABLE li_knb1
  WHERE bukrs IN s_bukrs.

  IF sy-subrc <> 0.
    MESSAGE 'Invalid Company Code'(014) TYPE 'E'.
  ENDIF.


  SELECT vkorg
  FROM tvko
  INTO TABLE li_knvp
  WHERE vkorg IN s_vkorg.

  IF sy-subrc <> 0.
    MESSAGE 'Invalid Sales Organization'(015) TYPE 'E'.
  ENDIF.

  SELECT vtweg
  FROM tvtw
  INTO TABLE li_knvp
  WHERE vtweg IN s_vtweg.

  IF sy-subrc <> 0.
    MESSAGE 'Invalid Distribution Channel'(016) TYPE 'E'.
  ENDIF.

  SELECT spart
  FROM tspa
  INTO TABLE li_knvp
  WHERE spart IN s_spart.

  IF sy-subrc <> 0.
    MESSAGE 'Invalid Division'(017) TYPE 'E'.
  ENDIF.

  SELECT parvw
  FROM tpar
  INTO TABLE li_knvp
  WHERE parvw IN s_parvw.

  IF sy-subrc <> 0.
    MESSAGE 'Invalid Partner function'(018) TYPE 'E'.
  ENDIF.

ENDFORM.                    " VALIDATE_DATA

Edited by: Faisal Khan on Mar 27, 2008 5:14 PM

Read only

0 Likes
16,338

Hi

Why don't u use WHERE option in the internal loop?

LOOP AT it_data INTO wa_data.
 
    LOOP AT TABLE it_knvp
    INTO wa_knvp
    WHERE kunnr = wa_data-kunnr.
  
      MOVE: wa_data-kunnr TO wa_alv-kunnr,
            wa_data-ort01 TO wa_alv-ort01,
            wa_data-pstlz TO wa_alv-pstlz,
            wa_data-regio TO wa_alv-regio,
            wa_data-bukrs TO wa_alv-bukrs,
            wa_data-zterm TO wa_alv-zterm,
            wa_knvp-vkorg TO wa_alv-vkorg,
            wa_knvp-vtweg TO wa_alv-vtweg,
            wa_knvp-spart TO wa_alv-spart,
            wa_knvp-parvw TO wa_alv-parvw,
            wa_knvp-parza TO wa_alv-parza,
            wa_knvp-kunn2 TO wa_alv-kunn2,
            wa_knvp-lifnr TO wa_alv-lifnr.
 
 
      APPEND wa_alv TO it_alv.
    ENDLOOP.
  ENDLOOP.

Max

Read only

0 Likes
16,338

Faisal,

i will try and copy paste your report and check your problem.

At the moment I would say, that when doing your selects the way you do, you will get duplicate entries in your IT_KNVP table. If this is the case, you should sort this table according to the key fields and delete all duplicate entries.

DELETE ADJACENT DUPLICATES FROM it_knvp COMPARING [key field(s)].

I'll get back to yuo ASAP.

Read only

0 Likes
16,338

Hi Faisal,

I don't think that my example does the same as your code, cause there is another loop.

What I think you have to do:

1. get the start index of your internal table by binary search (make sure your table is sorted)

2. start your loop at the index you ve found under 1. (make sure that this table is also sorted)

3. compare the search criteria to find out if you have to leave the inner loop

For internal tables with large data this way can be the choice. Otherwise a LOOP...WHERE should it also do.

Regards Matthias

Read only

Former Member
0 Likes
16,338

Try the below code and this will help.


sort it_knvp by kunnr.
LOOP AT it_data INTO wa_data.
  READ TABLE it_knvp transporting no fields
                       WITH KEY kunnr = wa_data-kunnr
                       BINARY SEARCH .
  if sy-subrc = 0.
    lv_from = sy-index.
    loop at it_knvp into wa_knvp from lv_from.
      if wa_knvp-kunnr = wa_data-kunnr.
       MOVE: wa_data-kunnr TO wa_alv-kunnr,
                   wa_data-ort01 TO wa_alv-ort01,
                   wa_data-pstlz TO wa_alv-pstlz,
                   wa_data-regio TO wa_alv-regio,
                   wa_data-bukrs TO wa_alv-bukrs,
                   wa_data-zterm TO wa_alv-zterm,
                   wa_knvp-vkorg TO wa_alv-vkorg,
                   wa_knvp-vtweg TO wa_alv-vtweg,
                   wa_knvp-spart TO wa_alv-spart,
                   wa_knvp-parvw TO wa_alv-parvw,
                   wa_knvp-parza TO wa_alv-parza,
                   wa_knvp-kunn2 TO wa_alv-kunn2,
                   wa_knvp-lifnr TO wa_alv-lifnr.
       APPEND wa_alv TO it_alv.
   else. 
     clear: lv_from.
     exit.
   endif.
endloop.

Hope this helps. Rwd points if helpful.

Thanks,

Balaji

Read only

Sm1tje
Active Contributor
0 Likes
16,338

Faisal (Max),

exactly what I've trying to tell is to use a double LOOP. So have a look at Max's code, which is exactly the same as mine after copy and paste it and testing it. I get the output I was looking for.

Good luck and let me know if it works.

Look at the way I changed your code (as said before) exactly the same as Max's code:

FORM final_table .

*loop at itab from index v_index.

LOOP AT it_data INTO wa_data.

  • READ TABLE it_knvp

  • INTO wa_knvp

  • WITH KEY kunnr = wa_data-kunnr

  • BINARY SEARCH .

LOOP AT it_knvp INTO wa_knvp WHERE kunnr = wa_data-kunnr.

  • IF sy-subrc = 0.

  • MOVE-CORRESPONDING wa_data TO wa_alv.

  • MOVE-CORRESPONDING wa_knvp TO wa_alv.

MOVE: wa_data-kunnr TO wa_alv-kunnr,

wa_data-ort01 TO wa_alv-ort01,

wa_data-pstlz TO wa_alv-pstlz,

wa_data-regio TO wa_alv-regio,

wa_data-bukrs TO wa_alv-bukrs,

wa_data-zterm TO wa_alv-zterm,

wa_knvp-vkorg TO wa_alv-vkorg,

wa_knvp-vtweg TO wa_alv-vtweg,

wa_knvp-spart TO wa_alv-spart,

wa_knvp-parvw TO wa_alv-parvw,

wa_knvp-parza TO wa_alv-parza,

wa_knvp-kunn2 TO wa_alv-kunn2,

wa_knvp-lifnr TO wa_alv-lifnr.

APPEND wa_alv TO it_alv.

ENDLOOP.

  • ENDIF.

ENDLOOP.

ENDFORM

Read only

Former Member
0 Likes
16,338

Hi,

I think you are using BINARY SEARCH without sorting the table .So before LOOP sort the internal table.

SORT it_data BY kunnr.

Pls. reward if useful...

Read only

Former Member
0 Likes
16,338

hello faisal khan,

There is small correction is needed in your code.

READ TABLE it_knvp

INTO wa_knvp

WITH KEY kunnr = wa_data-kunnr.

but, READ TABLE fetches only one record from it_knvp which matches with the given wa_data-kunnr value.

I understood , you are expecting all records from it_knvp which have the same kunnr value into alv.

Note: when you are using binary search , the internal table

must be sorted.

In this current scenario, READ TABLE is irrelavent.

To get all records, u must use another loop istead of read table

with this syntax.

LOOP AT it_knvp INTO w_knvp where kunnr = wa_data-kunnr.

Then your code looks like in this way.

FORM final_table .

LOOP AT it_data INTO wa_data.

LOOP AT it_knvp INTO w_knvp

where kunnr = wa_data-kunnr.IF sy-subrc = 0.

MOVE: wa_data-kunnr TO wa_alv-kunnr,

wa_data-ort01 TO wa_alv-ort01,

wa_data-pstlz TO wa_alv-pstlz,

wa_data-regio TO wa_alv-regio,

wa_data-bukrs TO wa_alv-bukrs,

wa_data-zterm TO wa_alv-zterm,

wa_knvp-vkorg TO wa_alv-vkorg,

wa_knvp-vtweg TO wa_alv-vtweg,

wa_knvp-spart TO wa_alv-spart,

wa_knvp-parvw TO wa_alv-parvw,

wa_knvp-parza TO wa_alv-parza,

wa_knvp-kunn2 TO wa_alv-kunn2,

wa_knvp-lifnr TO wa_alv-lifnr.

APPEND wa_alv TO it_alv.

ENDIF.

ENDLOOP.

ENDFORM. " FINAL_TABLE

if it useful, reward points.

thank you,

PRASAD G.V.K

Edited by: PRASAD GVK on Mar 29, 2008 7:06 AM