-1

Create an ALV report

  • with select option VBRK-VBELN

  • with output :

    VBRK-
    VBELN
    VBRP-
    POSNR
    VBRK-
    FKART
    LIPS-
    VBELN
    LIPS-
    POSNR
    LIKP-
    LFART
    VBAK-
    VBELN
    VBAP-
    POSNR
    VBAK-
    AUART

I am not getting LFART field from LIKP table and not getting AUART field from VBAK table in my final output table. Last Read table statement Read Table lt_vbap is returning sy-subrc = 4. getting a dump with error

Field Symbol not assigned yet

kindly help, I am stuck for 3 days.

TABLES: vbrk, vbrp, lips, likp, vbak, vbap.
TYPE-POOLS: slis, icon.
TYPES: BEGIN OF ty_output,
         vbeln  TYPE vbrk-vbeln,
         posnr  TYPE vbrp-posnr,
         fkart  TYPE vbrk-fkart,
         vbeln1 TYPE lips-vbeln,
         posnr1 TYPE lips-posnr,
         lfart  TYPE likp-lfart,
         vbeln2 TYPE vbak-vbeln,
         posnr2 TYPE vbap-posnr,
         auart  TYPE vbak-auart,
       END OF ty_output.

DATA: lt_output TYPE TABLE OF ty_output,
      ls_output TYPE ty_output.

DATA: lt_fieldcat TYPE slis_t_fieldcat_alv,
      ls_fieldcat LIKE LINE OF lt_fieldcat.
DATA: ls_layout TYPE slis_layout_alv.

DATA:ls_vbak TYPE vbak,
     lt_vbap TYPE TABLE OF vbap,
     ls_vbap TYPE vbap,
     ls_lips TYPE lips,
     ls_likp TYPE likp,
     ls_vbrk TYPE vbrk.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
  SELECT-OPTIONS:
   p_vbeln FOR vbrk-vbeln.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.
  SELECT vbeln, fkart, vbtyp
  FROM vbrk
  INTO TABLE @DATA(lt_vbrk)
   WHERE vbeln IN @p_vbeln.

  IF lt_vbrk IS NOT INITIAL.
    SELECT vbeln, posnr, vgpos, vgbel, aubel
        FROM vbrp
        INTO TABLE @DATA(lt_vbrp)
        FOR ALL ENTRIES IN @lt_vbrk
        WHERE vbeln = @lt_vbrk-vbeln.

    SELECT vbeln ,posnr, vgbel
        FROM lips
        INTO TABLE @DATA(lt_lips)
        FOR ALL ENTRIES IN @lt_vbrp
         WHERE vbeln = @lt_vbrp-vgbel
         AND posnr = @lt_vbrp-vgpos.

    SELECT vbeln ,lfart
        FROM likp
        INTO TABLE @DATA(lt_likp)
        FOR ALL ENTRIES IN @lt_lips
        WHERE vbeln = @lt_lips-vbeln.

    SELECT vbeln ,auart
        FROM vbak
        INTO TABLE @DATA(lt_vbak)
        FOR ALL ENTRIES IN @lt_vbrp
        WHERE vbeln = @lt_vbrp-aubel.

    SELECT vbeln ,posnr
        FROM vbap
        INTO TABLE @lt_vbap
        FOR ALL ENTRIES IN @lt_vbrp
        WHERE vbeln = @lt_vbrp-aubel
        AND posnr = @lt_vbrp-vgpos.
  ENDIF.

  LOOP AT lt_vbrp INTO DATA(ls_vbrp).
    READ TABLE lt_vbrk INTO ls_vbrk WITH KEY vbeln = ls_vbrp-vbeln.
    IF sy-subrc = 0.
      ls_output-vbeln = ls_vbrk-vbeln.
      ls_output-fkart = ls_vbrk-fkart.
      APPEND ls_output TO lt_output.
    ENDIF.
    CLEAR ls_lips.
    READ TABLE lt_lips INTO ls_lips WITH KEY posnr = ls_vbrp-vgpos. "ls_vbrp-vgbel.
    IF sy-subrc = 0.
      ls_output-vbeln1 = ls_lips-vbeln.
      ls_output-posnr1 = ls_lips-posnr.
      APPEND ls_output TO lt_output.
    ENDIF.
    CLEAR ls_likp.
    READ TABLE lt_likp INTO ls_likp WITH KEY vbeln = ls_lips-vbeln.   "vbeln = ls_vbrp-vgbel.
    IF sy-subrc = 0.
      ls_output-lfart = ls_likp-lfart.
      APPEND ls_output TO lt_output.
    ENDIF.
    CLEAR ls_vbak.
    READ TABLE lt_vbak INTO ls_vbak WITH KEY vbeln = ls_vbrp-aubel.
    IF sy-subrc = 0.
      ls_output-vbeln2 = ls_vbak-vbeln.
      ls_output-auart = ls_vbak-auart.
      APPEND ls_output TO lt_output.
    ENDIF.
    CLEAR ls_vbap.
    READ TABLE lt_vbap INTO ls_vbap WITH KEY vbeln = ls_vbrp-vbeln.
    IF sy-subrc = 0.
      ls_output-posnr2 = ls_vbap-posnr.
      APPEND ls_output TO lt_output.
    ENDIF.
  ENDLOOP.


  IF sy-subrc = 0 AND lt_output IS NOT INITIAL.

    CLEAR ls_fieldcat.
    ls_fieldcat-fieldname  = 'VBRK_VBELN'.
    ls_fieldcat-inttype    = 'C'.
    ls_fieldcat-col_pos   = '1'.
    ls_fieldcat-outputlen  = 10.
    ls_fieldcat-seltext_l  = 'INVOICE NUMBER'.
    APPEND ls_fieldcat TO lt_fieldcat.

    CLEAR ls_fieldcat.
    ls_fieldcat-fieldname = 'VBRP_POSNR'.
    ls_fieldcat-inttype = 'C'.
    ls_fieldcat-col_pos   = '2'.
    ls_fieldcat-outputlen = 6.
    ls_fieldcat-seltext_l = 'INVOICE ITEM'.
    APPEND ls_fieldcat TO lt_fieldcat.

    CLEAR ls_fieldcat.
    ls_fieldcat-fieldname = 'VBRK_FKART'.
    ls_fieldcat-inttype = 'C'.
    ls_fieldcat-col_pos   = '3'.
    ls_fieldcat-outputlen = 4.
    ls_fieldcat-seltext_l = 'INVOICE TYPE'.
    APPEND ls_fieldcat TO lt_fieldcat.

    CLEAR ls_fieldcat.
    ls_fieldcat-fieldname = 'LIPS_VBELN'.
    ls_fieldcat-inttype = 'C'.
    ls_fieldcat-col_pos   = '4'.
    ls_fieldcat-outputlen = 10.
    ls_fieldcat-seltext_l = 'DELIVERY NUMBER'.
    APPEND ls_fieldcat TO lt_fieldcat.

    CLEAR ls_fieldcat.
    ls_fieldcat-fieldname = 'LIPS_POSNR'.
    ls_fieldcat-inttype = 'C'.
    ls_fieldcat-col_pos   = '5'.
    ls_fieldcat-outputlen = 6.
    ls_fieldcat-seltext_l = 'DELIVERY ITEM'.
    APPEND ls_fieldcat TO lt_fieldcat.

    CLEAR ls_fieldcat.
    ls_fieldcat-fieldname = 'LIKP_LFART'.
    ls_fieldcat-inttype = 'C'.
    ls_fieldcat-col_pos   = '6'.
    ls_fieldcat-outputlen = 4.
    ls_fieldcat-seltext_l = 'DELIVERY TYPE'.
    APPEND ls_fieldcat TO lt_fieldcat.

    CLEAR ls_fieldcat.
    ls_fieldcat-fieldname = 'VBAK_VBELN'.
    ls_fieldcat-inttype = 'C'.
    ls_fieldcat-col_pos   = '7'.
    ls_fieldcat-outputlen = 10.
    ls_fieldcat-seltext_l = 'SALES DOCUMENT NUMBER'.
    APPEND ls_fieldcat TO lt_fieldcat.
    CLEAR ls_fieldcat.

    ls_fieldcat-fieldname = 'VBAP_POSNR'.
    ls_fieldcat-inttype = 'C'.
    ls_fieldcat-col_pos   = '8'.
    ls_fieldcat-outputlen = 6.
    ls_fieldcat-seltext_l = 'SALES DOCUMENT ITEM'.
    APPEND ls_fieldcat TO lt_fieldcat.

    CLEAR ls_fieldcat.
    ls_fieldcat-fieldname = 'VBAK_AUART'.
    ls_fieldcat-inttype = 'C'.
    ls_fieldcat-col_pos   = '9'.
    ls_fieldcat-outputlen = 4.
    ls_fieldcat-seltext_l = 'SALES DOCUMENT TYPE'.
    APPEND ls_fieldcat TO lt_fieldcat.

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
        i_callback_program = sy-repid
        it_fieldcat        = lt_fieldcat
      TABLES
        t_outtab           = lt_output
      EXCEPTIONS
        program_error      = 1
        OTHERS             = 2.
Sandra Rossi
  • 11,934
  • 5
  • 22
  • 48
  • Please post a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example). Currently your question matches [Why is "Can someone help me?" not an actual question?](https://meta.stackoverflow.com/a/284237/9150270) (see [Help center](https://stackoverflow.com/help) > Frequently asked questions). – Sandra Rossi May 23 '23 at 07:57
  • I’m voting to close this question because the question matches [Why is "Can someone help me?" not an actual question?](https://meta.stackoverflow.com/a/284237/9150270) (see [Help center](https://stackoverflow.com/help) > Frequently asked questions). – Sandra Rossi May 23 '23 at 07:58

1 Answers1

0

The read table is not working because the select doesn't work. You're not selecting the fields into the correct columns. You could use into corresponding fields of table @lt_vbap to get it working. This is because lt_vbrp has more fields than you're selecting. The other selects only work without it because you have an inline declaration for those.

You should also guard the for all entries everytime. For example: The select on lips could return an empty list in your case, if the delivery receipt is archived already.

The dump is because the fieldcatalog (or the output table) is wrong. The table lt_output acutally has to have all the fields defined in the fieldcatalog (in your case VBRK_VBELN, VBRP_POSNR etc.). Otherwise REUSE_ALV_GRID_DISPLAY dumps, because it's trying to read the fieldvalues of the fieldnames in the fieldcatalog from the table.

Herr Berthm
  • 128
  • 5