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

abap 7.5 loop at error

former_member622718
Participant
0 Likes
3,153

hi all,

i not getting these fields data in alv output...

VBELN, AUDAT, POSNR, MATNR, MEINS, MAKTX. please check code.

REPORT zmanoj4.
TABLES : kna1, vbak, vbap, makt.

TYPES : BEGIN OF ty,
          kunnr  TYPE kunnr,
          name1  TYPE name1,
          vbeln  TYPE vbeln,
          audat  TYPE audat,
          posnr  TYPE posnr,
          matnr  TYPE matnr,
          kwmeng TYPE kwmeng,
          meins  TYPE meins,
          netwr  TYPE netwr,
          maktx  TYPE maktx,
        END OF ty.


DATA : it TYPE TABLE OF ty,
       wa TYPE ty.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
      wa_fieldcat TYPE slis_fieldcat_alv.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS p_num TYPE kna1-kunnr.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.
  PERFORM get.
  PERFORM alv.
  PERFORM out.

FORM get.
  SELECT kunnr,
         name1 FROM kna1 INTO TABLE @DATA(it_knal)
         WHERE kunnr EQ @p_num.

  IF sy-subrc EQ 0.
  SELECT vbeln,
           audat,
           kunnr FROM vbak INTO TABLE @DATA(it_vbak)
           FOR ALL ENTRIES IN @it_knal
           WHERE kunnr EQ @it_knal-kunnr.
  ENDIF.

  SELECT vbeln,
         posnr,
         matnr,
         kwmeng,
         meins,
         netwr FROM vbap INTO TABLE @DATA(it_vbap)
         FOR ALL ENTRIES IN @it_vbak
         WHERE vbeln EQ @it_vbak-vbeln.

  IF sy-subrc EQ 0.
    SELECT matnr,
           maktx FROM makt INTO TABLE @DATA(it_makt)
           FOR ALL ENTRIES IN @it_vbap
           WHERE matnr EQ @it_vbap-matnr.
  ENDIF.


  LOOP AT it_vbak INTO DATA(wa_vbak).
    READ TABLE it_vbap INTO DATA(wa_vbap) WITH KEY vbeln = wa_vbak-vbeln.
    READ TABLE it_knal  INTO DATA(wa_knal) WITH KEY kunnr = wa_vbak-kunnr.
    READ TABLE it_makt INTO DATA(wa_makt) WITH KEY matnr = wa_vbap-matnr.
    APPEND wa_vbak TO it.
  ENDLOOP.
ENDFORM.



FORM alv.
  wa_fieldcat-fieldname = 'KUNNR'.
  wa_fieldcat-ref_tabname = 'KNA1'.
  wa_fieldcat-seltext_m = 'Accounting Document Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.

  wa_fieldcat-fieldname = 'NAME1'.
  wa_fieldcat-ref_tabname = 'KNA1'.
  wa_fieldcat-seltext_m = 'AccountDocument Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.

  wa_fieldcat-fieldname = 'VBELN'.
  wa_fieldcat-ref_tabname = 'VBAK'.
  wa_fieldcat-seltext_m = 'Accounng Document Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.

  wa_fieldcat-fieldname = 'AUDAT'.
  wa_fieldcat-ref_tabname = 'VBAK'.
  wa_fieldcat-seltext_m = 'AccounDocument Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'POSNR'.
  wa_fieldcat-ref_tabname = 'VBAP'.
  wa_fieldcat-seltext_m = 'Acing Document Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'MATNR'.
  wa_fieldcat-ref_tabname = 'VBAP'.
  wa_fieldcat-seltext_m = 'Acincument Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'KWMENG'.
  wa_fieldcat-ref_tabname = 'VBAP'.
  wa_fieldcat-seltext_m = 'Acing Document Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'MEINS'.
  wa_fieldcat-ref_tabname = 'VBAP'.
  wa_fieldcat-seltext_m = 'Acing Document Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'NETWR'.
  wa_fieldcat-ref_tabname = 'VBAP'.
  wa_fieldcat-seltext_m = 'AcingD'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'MAKTX'.
  wa_fieldcat-ref_tabname = 'MAKT'.
  wa_fieldcat-seltext_m = 'Acing r'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.
ENDFORM.

FORM out.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_grid_title = 'ACCOUNTING DOCUMENT DETAILS'
      it_fieldcat  = it_fieldcat
    TABLES
      t_outtab     = it.
ENDFORM.
1 ACCEPTED SOLUTION
Read only

michael_piesche
Active Contributor
2,562

Your main problem is in this logic. What do you suppose happens here?

  LOOP AT it_vbak INTO DATA(wa_vbak).
    READ TABLE it_vbap INTO DATA(wa_vbap) WITH KEY vbeln = wa_vbak-vbeln.
    READ TABLE it_knal  INTO DATA(wa_knal) WITH KEY kunnr = wa_vbak-kunnr.
    READ TABLE it_makt INTO DATA(wa_makt) WITH KEY matnr = wa_vbap-matnr.
    APPEND wa_vbak TO it.
  ENDLOOP.
  • You read from tables into structure, but you dont do anything with these
    e.g.
    CLEAR wa.
    MOVE-CORRESPONDING wa_vbak TO wa.
    MOVE-CORRESPONDING wa_vbap TO wa.
    MOVE-CORRESPONDING wa_knal TO wa.
    MOVE-CORRESPONDING wa_makt TO wa.
    APPEND wa TO it.
  • You dont loop over the order positions to get all possible items of the orders
    LOOP AT it_vbap INTO DATA(wa_vbap) WITH KEY vbeln = wa_vbak-vbeln.
    ....
    ENDLOOP.
  • what language are you wanting to read from makt
    e.g. SPRAS = 'D' in your select statement

But there are also other issues:

  • instead of doing separate selects, you could have also done one select with joins
  • otherwise, you should think about using KEYs on the table types for a better performance in the loop with reads and nested loop, but this depends on the amount of data selected
  • you dont have to build the fieldcatalog separately, it will be generated by the given table type automatically. you only need to change it, if you want other DDIC functionalities like descriptions and f4-values, of if you are using ABAP internal types which dont have DDIC functionalities

Your main problem is in this logic. What do you suppose happens here?

  LOOP AT it_vbak INTO DATA(wa_vbak).
    READ TABLE it_vbap INTO DATA(wa_vbap) WITH KEY vbeln = wa_vbak-vbeln.
    READ TABLE it_knal  INTO DATA(wa_knal) WITH KEY kunnr = wa_vbak-kunnr.
    READ TABLE it_makt INTO DATA(wa_makt) WITH KEY matnr = wa_vbap-matnr.
    APPEND wa_vbak TO it.
  ENDLOOP.
  • You read from tables into structure, but you dont do anything with these
    e.g.
    CLEAR wa.
    MOVE-CORRESPONDING wa_vbak TO wa.
    MOVE-CORRESPONDING wa_vbap TO wa.
    MOVE-CORRESPONDING wa_knal TO wa.
    MOVE-CORRESPONDING wa_makt TO wa.
    APPEND wa TO it.
  • You dont loop over the order positions to get all possible items of the orders
    LOOP AT it_vbap INTO DATA(wa_vbap) WITH KEY vbeln = wa_vbak-vbeln.
    ....
    ENDLOOP.
  • what language are you wanting to read from makt
    e.g. SPRAS = 'D' in your select statement

But there are also other issues:

  • instead of doing separate selects, you could have also done one select with joins
  • otherwise, you should think about using KEYs on the table types for a better performance in the loop with reads and nested loop, but this depends on the amount of data selected
  • you dont have to build the fieldcatalog separately, it will be generated by the given table type automatically. you only need to change it, if you want other DDIC functionalities like descriptions and f4-values, of if you are using ABAP internal types which dont have DDIC functionalities
8 REPLIES 8
Read only

michael_piesche
Active Contributor
2,563

Your main problem is in this logic. What do you suppose happens here?

  LOOP AT it_vbak INTO DATA(wa_vbak).
    READ TABLE it_vbap INTO DATA(wa_vbap) WITH KEY vbeln = wa_vbak-vbeln.
    READ TABLE it_knal  INTO DATA(wa_knal) WITH KEY kunnr = wa_vbak-kunnr.
    READ TABLE it_makt INTO DATA(wa_makt) WITH KEY matnr = wa_vbap-matnr.
    APPEND wa_vbak TO it.
  ENDLOOP.
  • You read from tables into structure, but you dont do anything with these
    e.g.
    CLEAR wa.
    MOVE-CORRESPONDING wa_vbak TO wa.
    MOVE-CORRESPONDING wa_vbap TO wa.
    MOVE-CORRESPONDING wa_knal TO wa.
    MOVE-CORRESPONDING wa_makt TO wa.
    APPEND wa TO it.
  • You dont loop over the order positions to get all possible items of the orders
    LOOP AT it_vbap INTO DATA(wa_vbap) WITH KEY vbeln = wa_vbak-vbeln.
    ....
    ENDLOOP.
  • what language are you wanting to read from makt
    e.g. SPRAS = 'D' in your select statement

But there are also other issues:

  • instead of doing separate selects, you could have also done one select with joins
  • otherwise, you should think about using KEYs on the table types for a better performance in the loop with reads and nested loop, but this depends on the amount of data selected
  • you dont have to build the fieldcatalog separately, it will be generated by the given table type automatically. you only need to change it, if you want other DDIC functionalities like descriptions and f4-values, of if you are using ABAP internal types which dont have DDIC functionalities
Read only

0 Likes
2,562

hi i made this modification now its working!!

REPORT zmanoj4.
TABLES : kna1, vbak, vbap, makt.

TYPES : BEGIN OF ty,
          kunnr  TYPE kunnr,
          name1  TYPE name1,
          vbeln  TYPE vbeln,
          audat  TYPE audat,
          posnr  TYPE posnr,
          matnr  TYPE matnr,
          kwmeng TYPE kwmeng,
          meins  TYPE meins,
          netwr  TYPE netwr,
          maktx  TYPE maktx,
        END OF ty.
DATA : it TYPE TABLE OF ty,
       wa TYPE ty.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
      wa_fieldcat TYPE slis_fieldcat_alv.


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS p_num TYPE kna1-kunnr.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.

  PERFORM get.
  PERFORM alv.
  PERFORM out.


FORM get.

  SELECT kunnr,
         name1 FROM kna1 INTO TABLE @DATA(it_knal)
         WHERE kunnr EQ @p_num.

  IF sy-subrc EQ 0.
    SELECT vbeln,
           audat,
           kunnr FROM vbak INTO TABLE @DATA(it_vbak)
 FOR ALL ENTRIES IN @it_knal
     WHERE kunnr EQ @it_knal-kunnr.
  ENDIF.

  SELECT vbeln,
         posnr,
         matnr,
         kwmeng,
         meins,
         netwr FROM vbap INTO TABLE @DATA(it_vbap)
         FOR ALL ENTRIES IN @it_vbak
         WHERE vbeln EQ @it_vbak-vbeln.

  IF sy-subrc EQ 0.
    SELECT matnr,
           maktx FROM makt INTO TABLE @DATA(it_makt)
           FOR ALL ENTRIES IN @it_vbap
           WHERE matnr EQ @it_vbap-matnr.
  ENDIF.


*  LOOP AT it_vbak INTO DATA(wa_vbak).
*    READ TABLE it_vbap INTO DATA(wa_vbap) WITH KEY vbeln = wa_vbak-vbeln.
*    READ TABLE it_knal  INTO DATA(wa_knal) WITH KEY kunnr = wa_vbak-kunnr.
*    READ TABLE it_makt INTO DATA(wa_makt) WITH KEY matnr = wa_vbap-matnr.
*    APPEND wa_vbak TO it.
*  ENDLOOP.
LOOP at it_knal INTO data(wa_knal).
  READ TABLE it_vbak INTO data(wa_vbak) with key kunnr = wa_knal-kunnr.
  READ TABLE it_vbap INTO data(wa_vbap) with key vbeln = wa_vbak-vbeln.
  READ TABLE it_makt INTO data(wa_makt) with key matnr = wa_vbap-matnr.

  wa-kunnr = wa_vbak-kunnr.
  wa-name1 = wa_knal-name1.
  wa-vbeln = wa_vbap-vbeln.
  wa-audat = wa_vbak-audat.
  wa-posnr = wa_vbap-posnr.
  wa-matnr = wa_makt-matnr.
  wa-kwmeng = wa_vbap-kwmeng.
  wa-meins = wa_vbap-meins.
  wa-netwr = wa_vbap-netwr.
  wa-maktx = wa_makt-maktx.

  APPEND wa to it.
  CLEAR wa.

ENDLOOP.




ENDFORM.

FORM alv.

  wa_fieldcat-fieldname = 'KUNNR'.
  wa_fieldcat-ref_tabname = 'KNA1'.
  wa_fieldcat-seltext_m = 'Accounting Document Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.

  wa_fieldcat-fieldname = 'NAME1'.
  wa_fieldcat-ref_tabname = 'KNA1'.
  wa_fieldcat-seltext_m = 'AccountDocument Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.

  wa_fieldcat-fieldname = 'VBELN'.
  wa_fieldcat-ref_tabname = 'VBAK'.
  wa_fieldcat-seltext_m = 'Accounng Document Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.

  wa_fieldcat-fieldname = 'AUDAT'.
  wa_fieldcat-ref_tabname = 'VBAK'.
  wa_fieldcat-seltext_m = 'AccounDocument Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'POSNR'.
  wa_fieldcat-ref_tabname = 'VBAP'.
  wa_fieldcat-seltext_m = 'Acing Document Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'MATNR'.
  wa_fieldcat-ref_tabname = 'VBAP'.
  wa_fieldcat-seltext_m = 'Acincument Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'KWMENG'.
  wa_fieldcat-ref_tabname = 'VBAP'.
  wa_fieldcat-seltext_m = 'Acing Document Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'MEINS'.
  wa_fieldcat-ref_tabname = 'VBAP'.
  wa_fieldcat-seltext_m = 'Acing Document Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'NETWR'.
  wa_fieldcat-ref_tabname = 'VBAP'.
  wa_fieldcat-seltext_m = 'AcingD'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'MAKTX'.
  wa_fieldcat-ref_tabname = 'MAKT'.
  wa_fieldcat-seltext_m = 'Acing r'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.

ENDFORM.

FORM out.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_grid_title = 'ACCOUNTING DOCUMENT DETAILS'
      it_fieldcat  = it_fieldcat
    TABLES
      t_outtab     = it.
ENDFORM.
Read only

2,562

manoj16393, glad you are a step further now, but there are still issues that need to be fixed with your coding that have been mentioned by me as well as by Mateusz:

1. If you select with the option FOR ALL ENTRIES from table VBAP, make sure, that this table is not initial, otherwise, you will select all values :

IF it_vbak[] IS NOT INITIAL. " make sure it_vbak is not initial when using FOR ALL ENTRIES
      SELECT vbeln, posnr, matnr, kwmeng, meins, netwr 
            FROM vbap INTO TABLE @DATA(it_vbap)
            FOR ALL ENTRIES IN @it_vbak
            WHERE vbeln EQ @it_vbak-vbeln.
ENDIF.

2. If you use READ TABLE, either make sure to handle sy-subrc = 0, or initialize the fields, otherwise, you might end up with values from other records, in case there are missing matches:

APPEND wa to it.
CLEAR: wa, wa_vbak, wa_vbap, wa_makt.

3. Currently you are selecting all possible VBAK orders for a customer as well as all VBAP positions for a VBAK order, but you are not transferring those to your ALV, is that on purpose? As of right now, you are just selecting one 'random' hit from VBAK as well as from VBAP to your ALV for one order. You would have to do a LOOP AT it_vbak instead of a READ TABLE it_vbak and the same with it_vbap to address this issue:

LOOP AT it_knal INTO data(wa_knal).
  LOOP AT it_vbak INTO data(wa_vbak) with key kunnr = wa_knal-kunnr.
    LOOP AT it_vbap INTO data(wa_vbap) with key vbeln = wa_vbak-vbeln.
      READ TABLE it_makt INTO data(wa_makt) with key matnr = wa_vbap-matnr.
      wa-kunnr = wa_vbak-kunnr.
      wa-name1 = wa_knal-name1.
      wa-vbeln = wa_vbap-vbeln.
      wa-audat = wa_vbak-audat.
      wa-posnr = wa_vbap-posnr.
      wa-matnr = wa_makt-matnr.
      wa-kwmeng = wa_vbap-kwmeng.
      wa-meins = wa_vbap-meins.
      wa-netwr = wa_vbap-netwr.
      wa-maktx = wa_makt-maktx.
      APPEND wa to it.
      CLEAR: wa, wa_makt.
    ENDLOOP.
  ENDLOOP.
ENDLOOP.

4. Currently you select from the language dependent description table MAKT for material descriptions without the preferred language (e.g. SPRAS = sy-langu), so all language descriptions will be selected. And when you loop, you also dont address this issue, and you cant, because you did not select the language.

Read only

MateuszAdamus
Active Contributor
2,562

Hi manoj16393

You're not moving information from the source internal tables to the result internal table. That's why you're not getting the value in ALV.

You can do this with MOVE-CORRESPONDING or field by field. Depends on the situation.

FORM get.
  " DB SELECTs here

  LOOP AT it_vbak INTO DATA(wa_vbak).
    APPEND INITIAL LINE TO it REFERENCE INTO DATA(ld_it).
    MOVE-CORRESPONDING wa_vbak TO ld_it->*.

    READ TABLE it_vbap INTO DATA(wa_vbap) WITH KEY vbeln = wa_vbak-vbeln.
    IF sy-subrc = 0.
      MOVE-CORRESPONDING wa_vbap TO ld_it->*.

      READ TABLE it_makt INTO DATA(wa_makt) WITH KEY matnr = wa_vbap-matnr.
      IF sy-subrc = 0.
        MOVE-CORRESPONDING wa_makt TO ld_it->*
      ENDIF
    ENDIF.

    READ TABLE it_knal  INTO DATA(wa_knal) WITH KEY kunnr = wa_vbak-kunnr.
    IF sy-subrc = 0.
      MOVE-CORRESPONDING wa_kna1 TO ld_it->*.
    ENDIF.
  ENDLOOP.
ENDFORM.

Also, your SELECT on VBAP table should be executed only if VBAK SELECT returns any results.

  SELECT kunnr,
         name1 FROM kna1 INTO TABLE @DATA(it_knal)
         WHERE kunnr EQ @p_num.
  IF sy-subrc EQ 0.
    SELECT vbeln,
           audat,
           kunnr FROM vbak INTO TABLE @DATA(it_vbak)
           FOR ALL ENTRIES IN @it_knal
           WHERE kunnr EQ @it_knal-kunnr.
    IF sy-subrc = 0.
      SELECT vbeln,
            posnr,
            matnr,
            kwmeng,
            meins,
            netwr FROM vbap INTO TABLE @DATA(it_vbap)
            FOR ALL ENTRIES IN @it_vbak
            WHERE vbeln EQ @it_vbak-vbeln.
      IF sy-subrc EQ 0.
        SELECT matnr,
               maktx FROM makt INTO TABLE @DATA(it_makt)
               FOR ALL ENTRIES IN @it_vbap
               WHERE matnr EQ @it_vbap-matnr.
      ENDIF.
    ENDIF.
  ENDIF.<br>

You can do this like this, or you can simply exit the GET procedure, after one of the KNA1/VBAK SELECT statements returns no results, because all others are dependent on these.

  SELECT kunnr,
         name1 FROM kna1 INTO TABLE @DATA(it_knal)
         WHERE kunnr EQ @p_num.
  IF sy-subrc <> 0.
    RETURN.
  ENDIF.

  SELECT vbeln,
         audat,
         kunnr FROM vbak INTO TABLE @DATA(it_vbak)
         FOR ALL ENTRIES IN @it_knal
         WHERE kunnr EQ @it_knal-kunnr.
  IF sy-subrc <> 0.
    RETURN
  ENDIF.

  SELECT vbeln,
         posnr,
         matnr,
         kwmeng,
         meins,
         netwr FROM vbap INTO TABLE @DATA(it_vbap)
         FOR ALL ENTRIES IN @it_vbak
         WHERE vbeln EQ @it_vbak-vbeln.
  IF sy-subrc = 0.
    SELECT matnr,
           maktx FROM makt INTO TABLE @DATA(it_makt)
           FOR ALL ENTRIES IN @it_vbap
           WHERE matnr EQ @it_vbap-matnr.
  ENDIF.

This way the code is easier to read and understand.

Also, it would be good to have IT_VBAP, IT_MAKT and IT_KNA1 defined as sorted internal tables, because you're reading data from these tables in a LOOP. Defining them as sorted (TYPE SORTED TABLE OF), with a key used for reading, would make your report's performance better.

regards,

Mateusz

Read only

0 Likes
2,562

hi i made this modification now its working!!

REPORT zmanoj4.
TABLES : kna1, vbak, vbap, makt.

TYPES : BEGIN OF ty,
          kunnr  TYPE kunnr,
          name1  TYPE name1,
          vbeln  TYPE vbeln,
          audat  TYPE audat,
          posnr  TYPE posnr,
          matnr  TYPE matnr,
          kwmeng TYPE kwmeng,
          meins  TYPE meins,
          netwr  TYPE netwr,
          maktx  TYPE maktx,
        END OF ty.
DATA : it TYPE TABLE OF ty,
       wa TYPE ty.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
      wa_fieldcat TYPE slis_fieldcat_alv.


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS p_num TYPE kna1-kunnr.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.

  PERFORM get.
  PERFORM alv.
  PERFORM out.


FORM get.

  SELECT kunnr,
         name1 FROM kna1 INTO TABLE @DATA(it_knal)
         WHERE kunnr EQ @p_num.

  IF sy-subrc EQ 0.
    SELECT vbeln,
           audat,
           kunnr FROM vbak INTO TABLE @DATA(it_vbak)
 FOR ALL ENTRIES IN @it_knal
     WHERE kunnr EQ @it_knal-kunnr.
  ENDIF.

  SELECT vbeln,
         posnr,
         matnr,
         kwmeng,
         meins,
         netwr FROM vbap INTO TABLE @DATA(it_vbap)
         FOR ALL ENTRIES IN @it_vbak
         WHERE vbeln EQ @it_vbak-vbeln.

  IF sy-subrc EQ 0.
    SELECT matnr,
           maktx FROM makt INTO TABLE @DATA(it_makt)
           FOR ALL ENTRIES IN @it_vbap
           WHERE matnr EQ @it_vbap-matnr.
  ENDIF.


*  LOOP AT it_vbak INTO DATA(wa_vbak).
*    READ TABLE it_vbap INTO DATA(wa_vbap) WITH KEY vbeln = wa_vbak-vbeln.
*    READ TABLE it_knal  INTO DATA(wa_knal) WITH KEY kunnr = wa_vbak-kunnr.
*    READ TABLE it_makt INTO DATA(wa_makt) WITH KEY matnr = wa_vbap-matnr.
*    APPEND wa_vbak TO it.
*  ENDLOOP.
LOOP at it_knal INTO data(wa_knal).
  READ TABLE it_vbak INTO data(wa_vbak) with key kunnr = wa_knal-kunnr.
  READ TABLE it_vbap INTO data(wa_vbap) with key vbeln = wa_vbak-vbeln.
  READ TABLE it_makt INTO data(wa_makt) with key matnr = wa_vbap-matnr.

  wa-kunnr = wa_vbak-kunnr.
  wa-name1 = wa_knal-name1.
  wa-vbeln = wa_vbap-vbeln.
  wa-audat = wa_vbak-audat.
  wa-posnr = wa_vbap-posnr.
  wa-matnr = wa_makt-matnr.
  wa-kwmeng = wa_vbap-kwmeng.
  wa-meins = wa_vbap-meins.
  wa-netwr = wa_vbap-netwr.
  wa-maktx = wa_makt-maktx.

  APPEND wa to it.
  CLEAR wa.

ENDLOOP.




ENDFORM.

FORM alv.

  wa_fieldcat-fieldname = 'KUNNR'.
  wa_fieldcat-ref_tabname = 'KNA1'.
  wa_fieldcat-seltext_m = 'Accounting Document Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.

  wa_fieldcat-fieldname = 'NAME1'.
  wa_fieldcat-ref_tabname = 'KNA1'.
  wa_fieldcat-seltext_m = 'AccountDocument Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.

  wa_fieldcat-fieldname = 'VBELN'.
  wa_fieldcat-ref_tabname = 'VBAK'.
  wa_fieldcat-seltext_m = 'Accounng Document Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.

  wa_fieldcat-fieldname = 'AUDAT'.
  wa_fieldcat-ref_tabname = 'VBAK'.
  wa_fieldcat-seltext_m = 'AccounDocument Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'POSNR'.
  wa_fieldcat-ref_tabname = 'VBAP'.
  wa_fieldcat-seltext_m = 'Acing Document Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'MATNR'.
  wa_fieldcat-ref_tabname = 'VBAP'.
  wa_fieldcat-seltext_m = 'Acincument Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'KWMENG'.
  wa_fieldcat-ref_tabname = 'VBAP'.
  wa_fieldcat-seltext_m = 'Acing Document Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'MEINS'.
  wa_fieldcat-ref_tabname = 'VBAP'.
  wa_fieldcat-seltext_m = 'Acing Document Number'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'NETWR'.
  wa_fieldcat-ref_tabname = 'VBAP'.
  wa_fieldcat-seltext_m = 'AcingD'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.


  wa_fieldcat-fieldname = 'MAKTX'.
  wa_fieldcat-ref_tabname = 'MAKT'.
  wa_fieldcat-seltext_m = 'Acing r'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.

ENDFORM.

FORM out.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_grid_title = 'ACCOUNTING DOCUMENT DETAILS'
      it_fieldcat  = it_fieldcat
    TABLES
      t_outtab     = it.
ENDFORM.
Read only

2,562

Good news manoj16393 ! 🙂 I'm glad I was able to help you.


Regards,
Mateusz
Read only

2,562

thank you mateuszadamus..!

Read only

Sandra_Rossi
Active Contributor
2,562

Do you mean that the columns are there in the ALV, but all the values are empty?