Hierarchical-ALV

Getting started ... Alles für einen gelungenen Start.
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Hierarchical-ALV

Beitrag von Fr3z3r (ForumUser / 4 / 1 / 0 ) »
Hallo zusammen,

ich habe hier folgenden Code:

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  Z_EXERCISE1_ALV_NEW
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  Z_EXERCISE3_HIERARCHICAL_LEVEL MESSAGE-ID z_msg_class_all.

TABLES: mara, mard, marc, t134t, t001w, makt. " Deklare Tables

TYPE-POOLS: slis.

SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS: s_fac  FOR marc-werks NO INTERVALS, " Multiple Selection for Factory
                s_loc  FOR mard-lgort, " For Location
                s_mat  FOR mara-matnr. " For Material
PARAMETERS: chk_alv AS CHECKBOX DEFAULT 'X'. " Checkbox if ALV = Yes
SELECTION-SCREEN END OF BLOCK a1.

DATA:   count TYPE i,
        index TYPE i,
        counter TYPE i VALUE 0.

" For ALV-Grid
DATA: g_repid LIKE sy-repid.
DATA:	itab_feldkatalog TYPE slis_t_fieldcat_alv,
      wa_feldkatalog TYPE LINE OF slis_t_fieldcat_alv,
      gs_layout TYPE slis_layout_alv.
" End: For ALV-Grid

" iTable with all required Fields
DATA: BEGIN OF itab_alv OCCURS 0,
      werks LIKE mard-werks,
      werksd LIKE t001w-name1,
      lgort LIKE mard-lgort,
      count TYPE i,
END OF itab_alv.
" End: iTable with all required Fields

" iTable with all required Fields
DATA: BEGIN OF itab_temp OCCURS 0,
      werks LIKE mard-werks,
      werksd LIKE t001w-name1,
      lgort LIKE mard-lgort,
      count TYPE i,
END OF itab_temp.
" End: iTable with all required Fields

DATA: wa_itab_alv LIKE LINE OF itab_alv. " WA for i-Tab
DATA: wa_itab_temp LIKE LINE OF itab_alv. " WA for i-Tab

DATA: BEGIN OF itab OCCURS 0,
      werks LIKE t001w-name1,
      lgort LIKE mard-lgort,
      matnr LIKE mard-matnr,
      mdes LIKE makt-maktx,
      mtype LIKE t134t-mtbez,
      cdate LIKE mara-ersda,
      mgroup LIKE mara-matkl,
      uom LIKE mara-meins,
END OF itab.

DATA: wa_itab LIKE LINE OF itab. " WA for i-Tab

START-OF-SELECTION.

  IF chk_alv = 'X'. " When Checkbox checked
    " Selection with Inner Join
    SELECT w~name1 d~lgort d~matnr md~maktx t~mtbez a~ersda a~matkl a~meins
        INTO wa_itab FROM ( ( ( ( mard AS d
                INNER JOIN mara AS a ON a~matnr = d~matnr )
                INNER JOIN t134t AS t ON a~mtart = t~mtart AND t~spras = sy-langu )
                INNER JOIN t001w AS w ON d~werks = w~werks )
                INNER JOIN makt AS md ON d~matnr = md~matnr AND md~spras = sy-langu )
          WHERE d~werks IN s_fac AND d~lgort IN s_loc AND d~matnr IN s_mat.

      APPEND wa_itab TO itab. " Glicht: INTO CORRESPONDING TABLE somehow isn't working

    ENDSELECT.

    SORT itab BY werks lgort matnr. " Sort i-Tab

    LOOP AT itab INTO wa_itab.
      counter = counter + 1.
      IF counter > 1.
        EXIT.
      ENDIF.
    ENDLOOP.

    IF NOT counter = 0.
* Feldkatalog fuellen.
      PERFORM feldkatalog_fuellen.
* Layout bestimmen.
      PERFORM layout_allg_build USING gs_layout.
* Daten als ALV-Liste anzeigen.
      PERFORM alv_anzeigen.
    ELSE.
      MESSAGE i000(z_msg_class_all). "MSG No data found!
    ENDIF.

  ELSE.

    " Some Selection for WRITE
    SELECT a~werks w~name1 a~lgort FROM mard AS a INNER JOIN t001w AS w ON a~werks = w~werks
      INTO wa_itab_temp WHERE a~werks IN s_fac AND a~lgort IN s_loc AND a~matnr IN s_mat.

      count = 0.
      LOOP AT itab_alv INTO wa_itab_alv.
        IF wa_itab_temp-werks = wa_itab_alv-werks AND wa_itab_temp-lgort = wa_itab_alv-lgort.
          count = wa_itab_alv-count.
          index = sy-tabix.
        ENDIF.
      ENDLOOP.

      wa_itab_alv-werks = wa_itab_temp-werks.
      wa_itab_alv-werksd = wa_itab_temp-werksd.
      wa_itab_alv-lgort = wa_itab_temp-lgort.
      IF count = 0.
        wa_itab_alv-count = 1.
        APPEND wa_itab_alv TO itab_alv.
      ELSE.
        wa_itab_alv-count = count + 1.
        MODIFY itab_alv INDEX index FROM wa_itab_alv.
      ENDIF.
    ENDSELECT.

    SORT itab_alv BY werks lgort count. " Sort i-Tab

    SKIP 1.
    ULINE /3(71).
    " Write Headings
    WRITE:  /3 '|',
             5 'Plant' COLOR COL_HEADING,
            12 '|',
            18 'Plant description' COLOR COL_HEADING,
            42 '|',
            44 'Location' COLOR COL_HEADING,
            54 '|',
            56 'n° of Materials' COLOR COL_HEADING,
            73 '|'.
    ULINE /3(71).
    LOOP AT itab_alv.
      " Write if found
      WRITE: /3 '|',
             5  itab_alv-werks,
            12  '|',
            14  itab_alv-werksd,
            42  '|',
            46  itab_alv-lgort,
            54  '|',
            55  itab_alv-count,
            73  '|'.
    ENDLOOP.
    ULINE /3(71).

  ENDIF.



*&---------------------------------------------------------------------*
*&      Form  alv_anzeigen
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM alv_anzeigen.

  g_repid = sy-repid.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = g_repid
      i_grid_title       = 'ALV Grid'
      it_fieldcat        = itab_feldkatalog
      is_layout          = gs_layout
    TABLES
      t_outtab           = itab.
  IF sy-subrc <> 0.

  ENDIF.
ENDFORM.  "alv_anzeigen.

*&---------------------------------------------------------------------*
*&      Form  feldkatalog_fuellen
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM feldkatalog_fuellen.

  CLEAR itab_feldkatalog.

  CLEAR wa_feldkatalog.
  wa_feldkatalog-fieldname  = 'WERKS'.
  wa_feldkatalog-seltext_m  = 'Factory'.
  APPEND wa_feldkatalog TO itab_feldkatalog.

  CLEAR wa_feldkatalog.
  wa_feldkatalog-fieldname  = 'LGORT'.
  wa_feldkatalog-seltext_m  = 'Location'.
  APPEND wa_feldkatalog TO itab_feldkatalog.

  CLEAR wa_feldkatalog.
  wa_feldkatalog-fieldname  = 'MATNR'.
  wa_feldkatalog-seltext_m  = 'Material Number'.
  APPEND wa_feldkatalog TO itab_feldkatalog.

  CLEAR wa_feldkatalog.
  wa_feldkatalog-fieldname  = 'MDES'.
  wa_feldkatalog-seltext_m  = 'Description'.
  APPEND wa_feldkatalog TO itab_feldkatalog.

  CLEAR wa_feldkatalog.
  wa_feldkatalog-fieldname  = 'MTYPE'.
  wa_feldkatalog-seltext_m  = 'Type Description'.
  APPEND wa_feldkatalog TO itab_feldkatalog.

  CLEAR wa_feldkatalog.
  wa_feldkatalog-fieldname  = 'CDATE'.
  wa_feldkatalog-seltext_m  = 'Creation Date'.
  APPEND wa_feldkatalog TO itab_feldkatalog.

  CLEAR wa_feldkatalog.
  wa_feldkatalog-fieldname  = 'MGROUP'.
  wa_feldkatalog-seltext_m  = 'Material Group'.
  APPEND wa_feldkatalog TO itab_feldkatalog.

  CLEAR wa_feldkatalog.
  wa_feldkatalog-fieldname  = 'UOM'.
  wa_feldkatalog-seltext_m  = 'Unit of Measure'.
  APPEND wa_feldkatalog TO itab_feldkatalog.

ENDFORM.  "feldkatalog_fuellen.

*&---------------------------------------------------------------------*
*&      Form  layout_allg_build
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->LS_LAYOUT  text
*----------------------------------------------------------------------*
FORM layout_allg_build USING ls_layout TYPE slis_layout_alv.
  ls_layout-zebra  = 'X'.
  ls_layout-colwidth_optimize = 'X'.
ENDFORM.  "layout_allg_build.
Nun muss ich diesen so ausbauen, dass bei einem Klick auf die Material Nummer ein PopUp mit mehr Informationen erscheint.
Das Beispielprg BALVHD01 kenne ich berreits doch da draus werde ich nicht schlau.
Ich habe nun den Code wie folgt angepasst:

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  Z_EXERCISE1_ALV_NEW
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  z_exercise3_hierarchical_level MESSAGE-ID z_msg_class_all.

TABLES: mara, mard, marc, t134t, t001w, makt. " Deklare Tables

TYPE-POOLS: slis.

SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS: s_fac  FOR marc-werks NO INTERVALS, " Multiple Selection for Factory
                s_loc  FOR mard-lgort, " For Location
                s_mat  FOR mara-matnr. " For Material
PARAMETERS: chk_alv AS CHECKBOX DEFAULT 'X'. " Checkbox if ALV = Yes
SELECTION-SCREEN END OF BLOCK a1.

DATA:   count TYPE i,
        index TYPE i,
        counter TYPE i VALUE 0.

" For ALV-Grid
DATA: g_repid LIKE sy-repid.
DATA:	itab_feldkatalog TYPE slis_t_fieldcat_alv,
      wa_feldkatalog TYPE LINE OF slis_t_fieldcat_alv,
      gs_layout TYPE slis_layout_alv,
      gs_keyinfo  TYPE slis_keyinfo_alv,
      G_TABNAME_HEADER TYPE SLIS_TABNAME,
      G_TABNAME_ITEM   TYPE SLIS_TABNAME.
" End: For ALV-Grid

" iTable with all required Fields
DATA: BEGIN OF itab_alv OCCURS 0,
      werks LIKE mard-werks,
      werksd LIKE t001w-name1,
      lgort LIKE mard-lgort,
      count TYPE i,
END OF itab_alv.
" End: iTable with all required Fields

" iTable with all required Fields
DATA: BEGIN OF itab_temp OCCURS 0,
      werks LIKE mard-werks,
      werksd LIKE t001w-name1,
      lgort LIKE mard-lgort,
      count TYPE i,
END OF itab_temp.
" End: iTable with all required Fields

DATA: wa_itab_alv LIKE LINE OF itab_alv. " WA for i-Tab
DATA: wa_itab_temp LIKE LINE OF itab_alv. " WA for i-Tab

DATA: BEGIN OF itab OCCURS 0,
      werks LIKE t001w-name1,
      lgort LIKE mard-lgort,
      matnr LIKE mard-matnr,
      mdes LIKE makt-maktx,
      mtype LIKE t134t-mtbez,
      cdate LIKE mara-ersda,
      mgroup LIKE mara-matkl,
      uom LIKE mara-meins,
END OF itab.

DATA: wa_itab LIKE LINE OF itab. " WA for i-Tab

START-OF-SELECTION.
  G_TABNAME_HEADER = 'Blub'.
  G_TABNAME_ITEM = 'Blub'.
  IF chk_alv = 'X'. " When Checkbox checked
    " Selection with Inner Join
    SELECT w~name1 d~lgort d~matnr md~maktx t~mtbez a~ersda a~matkl a~meins
        INTO wa_itab FROM ( ( ( ( mard AS d
                INNER JOIN mara AS a ON a~matnr = d~matnr )
                INNER JOIN t134t AS t ON a~mtart = t~mtart AND t~spras = sy-langu )
                INNER JOIN t001w AS w ON d~werks = w~werks )
                INNER JOIN makt AS md ON d~matnr = md~matnr AND md~spras = sy-langu )
          WHERE d~werks IN s_fac AND d~lgort IN s_loc AND d~matnr IN s_mat.

      APPEND wa_itab TO itab. " Glicht: INTO CORRESPONDING TABLE somehow isn't working

    ENDSELECT.

    SORT itab BY werks lgort matnr. " Sort i-Tab

    LOOP AT itab INTO wa_itab.
      counter = counter + 1.
      IF counter > 1.
        EXIT.
      ENDIF.
    ENDLOOP.

    IF NOT counter = 0.
* Feldkatalog fuellen.
      PERFORM feldkatalog_fuellen.
* Layout bestimmen.
      PERFORM layout_allg_build USING gs_layout.
* Daten als ALV-Liste anzeigen.
      PERFORM alv_anzeigen.
    ELSE.
      MESSAGE i000(z_msg_class_all). "MSG No data found!
    ENDIF.

  ELSE.

    " Some Selection for WRITE
    SELECT a~werks w~name1 a~lgort FROM mard AS a INNER JOIN t001w AS w ON a~werks = w~werks
      INTO wa_itab_temp WHERE a~werks IN s_fac AND a~lgort IN s_loc AND a~matnr IN s_mat.

      count = 0.
      LOOP AT itab_alv INTO wa_itab_alv.
        IF wa_itab_temp-werks = wa_itab_alv-werks AND wa_itab_temp-lgort = wa_itab_alv-lgort.
          count = wa_itab_alv-count.
          index = sy-tabix.
        ENDIF.
      ENDLOOP.

      wa_itab_alv-werks = wa_itab_temp-werks.
      wa_itab_alv-werksd = wa_itab_temp-werksd.
      wa_itab_alv-lgort = wa_itab_temp-lgort.
      IF count = 0.
        wa_itab_alv-count = 1.
        APPEND wa_itab_alv TO itab_alv.
      ELSE.
        wa_itab_alv-count = count + 1.
        MODIFY itab_alv INDEX index FROM wa_itab_alv.
      ENDIF.
    ENDSELECT.

    SORT itab_alv BY werks lgort count. " Sort i-Tab

    SKIP 1.
    ULINE /3(71).
    " Write Headings
    WRITE:  /3 '|',
             5 'Plant' COLOR COL_HEADING,
            12 '|',
            18 'Plant description' COLOR COL_HEADING,
            42 '|',
            44 'Location' COLOR COL_HEADING,
            54 '|',
            56 'n° of Materials' COLOR COL_HEADING,
            73 '|'.
    ULINE /3(71).
    LOOP AT itab_alv.
      " Write if found
      WRITE: /3 '|',
             5  itab_alv-werks,
            12  '|',
            14  itab_alv-werksd,
            42  '|',
            46  itab_alv-lgort,
            54  '|',
            55  itab_alv-count,
            73  '|'.
    ENDLOOP.
    ULINE /3(71).

  ENDIF.



*&---------------------------------------------------------------------*
*&      Form  alv_anzeigen
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM alv_anzeigen.

  g_repid = sy-repid.

  CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    EXPORTING
      i_callback_program = g_repid
      it_fieldcat        = itab_feldkatalog
      i_tabname_header   = G_TABNAME_HEADER
      i_tabname_item     = G_TABNAME_item
      is_keyinfo         = gs_keyinfo
    TABLES
      t_outtab_header    = itab_feldkatalog
      t_outtab_item      = itab.

  IF sy-subrc <> 0.

  ENDIF.

ENDFORM.  "alv_anzeigen.

*&---------------------------------------------------------------------*
*&      Form  feldkatalog_fuellen
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM feldkatalog_fuellen.

  CLEAR itab_feldkatalog.

  CLEAR wa_feldkatalog.
  wa_feldkatalog-fieldname  = 'WERKS'.
  wa_feldkatalog-seltext_m  = 'Factory'.
  APPEND wa_feldkatalog TO itab_feldkatalog.

  CLEAR wa_feldkatalog.
  wa_feldkatalog-fieldname  = 'LGORT'.
  wa_feldkatalog-seltext_m  = 'Location'.
  APPEND wa_feldkatalog TO itab_feldkatalog.

  CLEAR wa_feldkatalog.
  wa_feldkatalog-fieldname  = 'MATNR'.
  wa_feldkatalog-seltext_m  = 'Material Number'.
  APPEND wa_feldkatalog TO itab_feldkatalog.

  CLEAR wa_feldkatalog.
  wa_feldkatalog-fieldname  = 'MDES'.
  wa_feldkatalog-seltext_m  = 'Description'.
  APPEND wa_feldkatalog TO itab_feldkatalog.

  CLEAR wa_feldkatalog.
  wa_feldkatalog-fieldname  = 'MTYPE'.
  wa_feldkatalog-seltext_m  = 'Type Description'.
  APPEND wa_feldkatalog TO itab_feldkatalog.

  CLEAR wa_feldkatalog.
  wa_feldkatalog-fieldname  = 'CDATE'.
  wa_feldkatalog-seltext_m  = 'Creation Date'.
  APPEND wa_feldkatalog TO itab_feldkatalog.

  CLEAR wa_feldkatalog.
  wa_feldkatalog-fieldname  = 'MGROUP'.
  wa_feldkatalog-seltext_m  = 'Material Group'.
  APPEND wa_feldkatalog TO itab_feldkatalog.

  CLEAR wa_feldkatalog.
  wa_feldkatalog-fieldname  = 'UOM'.
  wa_feldkatalog-seltext_m  = 'Unit of Measure'.
  APPEND wa_feldkatalog TO itab_feldkatalog.

ENDFORM.  "feldkatalog_fuellen.

*&---------------------------------------------------------------------*
*&      Form  layout_allg_build
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->LS_LAYOUT  text
*----------------------------------------------------------------------*
FORM layout_allg_build USING ls_layout TYPE slis_layout_alv.
  ls_layout-zebra  = 'X'.
  ls_layout-colwidth_optimize = 'X'.
ENDFORM.  "layout_allg_build.
Doch ich bekomm folgenden Fehler:
Bild

Jemand eine Ahnung was falsch ist?

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Hierarchical-ALV

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »
Die hierarchische ALV dient zur Anzeige von Daten mit Kopf- und Positionsinformationen.

Also ganz einfaches Beispiel, VBAK, VBAP Anzeige.

2 interne Tabellen
1 Feldkatalog, der alle Felder pro interne Tabelle enthält, Tabellenname muß immer mitgegeben sein, damit der ALV weiß, zu welcher Tabelle das Feld gehört.
Keyinfo mit der Verknüpfung der Schlüsselfelder, in unserem Beispiel also MANDT, VBELN

Dann sollte es schon tun:

Code: Alles auswählen.

  CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    EXPORTING
      i_tabname_header               = 'GT_VBAK'
      i_tabname_item                 = 'GT_VBAP'
     I_STRUCTURE_NAME_HEADER        = 'VBAK'
     I_STRUCTURE_NAME_ITEM          = 'VBAP'
      is_keyinfo                     = gs_keyinfo
    tables
      t_outtab_header                = gt_vbak
      t_outtab_item                  = gt_vbap
   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.

Folgende Benutzer bedankten sich beim Autor Ratazong für den Beitrag:
Fr3z3r


Re: Hierarchical-ALV

Beitrag von Fr3z3r (ForumUser / 4 / 1 / 0 ) »
Danke für deine Antwort.

Ich habe nun meinen Code wie folgt geändert:

Code: Alles auswählen.

  CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    EXPORTING
      i_tabname_header        = 'GT_VBAK'
      i_tabname_item          = 'GT_VBAP'
      i_structure_name_header = 'VBAK'
      i_structure_name_item   = 'VBAP'
      is_keyinfo              = gs_keyinfo
    TABLES
      t_outtab_header         = itab
      t_outtab_item           = itab.
Ich möchte jetzt nur mal das beim Klick auf die Materialnummer der gleiche Eintrag nocheinmal im Popup erscheint.
Ich bekomme jedoch folgenden Fehler den ich nicht verstehe:

Bild

Re: Hierarchical-ALV

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »
Ich sehe irgendwie immer noch nicht den hierarchischen Ansatzpunkt. Hast Du denn 2 interne Tabellen, die voneinander abhängen?

Um nur die Details zu einer Zeile im ALV anzuzeigen, kannst Du ja die Standardfunktionalität "Details" nutzen.

Re: Hierarchical-ALV

Beitrag von Fr3z3r (ForumUser / 4 / 1 / 0 ) »
Bis jetzt habe ich noch keine 2 Tabellen aber diese werden später benötigt.
Zur Zeit versuche ich nur einmal dieses "PopUp" Fenster zu öffnen und dort sollten wieder die gleichen Daten angezeigt werden, jedoch komme ich mit dieser Funktion nicht klar und der Fehler der oben beschriben ist triit auf.

Edit:

Ich hab das Problem nun wie folgt gelöst:

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  Z_EXERCISE3
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  z_exercise3_hierarchical_level.
TYPE-POOLS: slis.
TABLES: mara, mard, marc, t134t, t001w, makt, vbap. " Deklare Tables

* Fieldcat's for ALV
DATA: i_fieldcat    TYPE   slis_t_fieldcat_alv,
      wa_fieldcat   TYPE   slis_fieldcat_alv,
      ls_layout     TYPE   slis_layout_alv.

* Some var's for Non-ALV
DATA:   count TYPE i,
        index TYPE i,
        counter TYPE i VALUE 0.

" iTable with all required Fields
DATA: BEGIN OF it_nonalv OCCURS 0,
      werks LIKE mard-werks,
      werksd LIKE t001w-name1,
      lgort LIKE mard-lgort,
      count TYPE i,
END OF it_nonalv.
" End: iTable with all required Fields

DATA: wa_nonalv LIKE LINE OF it_nonalv.

" iTable with all required Fields
DATA: BEGIN OF itab_temp OCCURS 0,
      werks LIKE mard-werks,
      werksd LIKE t001w-name1,
      lgort LIKE mard-lgort,
      count TYPE i,
END OF itab_temp.
" End: iTable with all required Fields

DATA: wa_it_nonalv LIKE LINE OF it_nonalv. " WA for i-Tab
DATA: wa_itab_temp LIKE LINE OF it_nonalv. " WA for i-Tab

* iTab for ALV
DATA: BEGIN OF it_items OCCURS 0,
        werks LIKE t001w-name1,
        lgort LIKE mard-lgort,
        matnr LIKE mard-matnr,
        mdes LIKE makt-maktx,
        mtype LIKE t134t-mtbez,
        cdate LIKE mara-ersda,
        mgroup LIKE mara-matkl,
        uom LIKE mara-meins,
      END OF it_items.

* SON for ALV
DATA: BEGIN OF it_infos OCCURS 0,
        vbeln LIKE vbap-vbeln,
      END OF it_infos.

DATA: wa_infos LIKE LINE OF it_infos.
DATA: wa_items LIKE LINE OF it_items.


* Selection
SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS: s_fac  FOR marc-werks NO INTERVALS, " Multiple Selection for Factory
                s_loc  FOR mard-lgort, " For Location
                s_mat  FOR mara-matnr. " For Material
PARAMETERS: chk_alv AS CHECKBOX DEFAULT 'X'. " Checkbox if ALV = Yes
SELECTION-SCREEN END OF BLOCK a1.

*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*

*----------------------------------------------------------------------*
*       CLASS CLASSEX3 DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS classex3 DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS:
      alv,
      nonalv.
ENDCLASS.                    "CLASSEX3 DEFINITION

*----------------------------------------------------------------------*
*       CLASS CLASSEX3 IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS classex3 IMPLEMENTATION.
  METHOD alv.
    SELECT w~name1 d~lgort d~matnr md~maktx t~mtbez a~ersda a~matkl a~meins
          INTO wa_items FROM ( ( ( ( mard AS d
                  INNER JOIN mara AS a ON a~matnr = d~matnr )
                  INNER JOIN t134t AS t ON a~mtart = t~mtart AND t~spras = sy-langu )
                  INNER JOIN t001w AS w ON d~werks = w~werks )
                  INNER JOIN makt AS md ON d~matnr = md~matnr AND md~spras = sy-langu )
            WHERE d~werks IN s_fac AND d~lgort IN s_loc AND d~matnr IN s_mat.

      APPEND wa_items TO it_items. " Glicht: INTO CORRESPONDING TABLE somehow isn't working

    ENDSELECT.

    wa_fieldcat-tabname = 'IT_ITEMS'.
    wa_fieldcat-fieldname  = 'WERKS'.
    wa_fieldcat-seltext_m  = 'Factory'.
    APPEND wa_fieldcat TO i_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-tabname = 'IT_ITEMS'.
    wa_fieldcat-fieldname  = 'LGORT'.
    wa_fieldcat-seltext_m  = 'Location'.
    APPEND wa_fieldcat TO i_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-tabname = 'IT_ITEMS'.
    wa_fieldcat-fieldname  = 'MATNR'.
    wa_fieldcat-seltext_m  = 'Material Number'.
    APPEND wa_fieldcat TO i_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-tabname = 'IT_ITEMS'.
    wa_fieldcat-fieldname  = 'MTYPE'.
    wa_fieldcat-seltext_m  = 'Type Description'.
    APPEND wa_fieldcat TO i_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-tabname = 'IT_ITEMS'.
    wa_fieldcat-fieldname  = 'CDATE'.
    wa_fieldcat-seltext_m  = 'Creation Date'.
    APPEND wa_fieldcat TO i_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-tabname = 'IT_ITEMS'.
    wa_fieldcat-fieldname  = 'MGROUP'.
    wa_fieldcat-seltext_m  = 'Material Group'.
    APPEND wa_fieldcat TO i_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-tabname = 'IT_ITEMS'.
    wa_fieldcat-fieldname  = 'UOM'.
    wa_fieldcat-seltext_m  = 'Unit of Measure'.
    APPEND wa_fieldcat TO i_fieldcat.
    CLEAR wa_fieldcat.



*  Call ALV
    CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
      EXPORTING
        i_bypassing_buffer      = 'X'
        i_buffer_active         = ' '
        i_callback_program      = sy-repid
        i_callback_user_command = 'EXECUTE_COMMAND'
        it_fieldcat             = i_fieldcat[]
        is_layout               = ls_layout
        i_save                  = 'A'
      TABLES
        t_outtab                = it_items
      EXCEPTIONS
        program_error           = 1
        OTHERS                  = 2.
  ENDMETHOD.                    "alv

  METHOD nonalv.
    " Some Selection for WRITE
    SELECT a~werks w~name1 a~lgort FROM mard AS a INNER JOIN t001w AS w ON a~werks = w~werks
      INTO wa_itab_temp WHERE a~werks IN s_fac AND a~lgort IN s_loc AND a~matnr IN s_mat.

      count = 0.
      LOOP AT it_nonalv INTO wa_it_nonalv.
        IF wa_itab_temp-werks = wa_it_nonalv-werks AND wa_itab_temp-lgort = wa_it_nonalv-lgort.
          count = wa_it_nonalv-count.
          index = sy-tabix.
        ENDIF.
      ENDLOOP.

      wa_it_nonalv-werks = wa_itab_temp-werks.
      wa_it_nonalv-werksd = wa_itab_temp-werksd.
      wa_it_nonalv-lgort = wa_itab_temp-lgort.
      IF count = 0.
        wa_it_nonalv-count = 1.
        APPEND wa_it_nonalv TO it_nonalv.
      ELSE.
        wa_it_nonalv-count = count + 1.
        MODIFY it_nonalv INDEX index FROM wa_it_nonalv.
      ENDIF.
    ENDSELECT.

    SORT it_nonalv BY werks lgort count. " Sort i-Tab

    SKIP 1.
    ULINE /3(71).
    " Write Headings
    WRITE:  /3 '|',
             5 'Plant' COLOR COL_HEADING,
            12 '|',
            18 'Plant description' COLOR COL_HEADING,
            42 '|',
            44 'Location' COLOR COL_HEADING,
            54 '|',
            56 'n° of Materials' COLOR COL_HEADING,
            73 '|'.
    ULINE /3(71).

    LOOP AT it_nonalv INTO wa_nonalv.
      " Write if found
      WRITE: /3 '|',
             5  wa_nonalv-werks,
            12  '|',
            14  wa_nonalv-werksd,
            42  '|',
            46  wa_nonalv-lgort,
            54  '|',
            55  wa_nonalv-count,
            73  '|'.
    ENDLOOP.

    ULINE /3(71).
 ENDMETHOD.
 ENDCLASS.

*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*

* Event when clicked
FORM execute_command USING ucomm LIKE sy-ucomm selfield TYPE slis_selfield.

  CLEAR it_infos[].
  READ TABLE it_items INDEX selfield-tabindex INTO wa_items.

  SELECT vbeln FROM vbap INTO wa_infos WHERE matnr = wa_items-matnr.
    APPEND wa_infos TO it_infos.
  ENDSELECT.


  IF sy-subrc = 0.
    CASE ucomm.
      WHEN '&IC1'. "Handle the 'double-click' event
        CASE selfield-sel_tab_field.
          WHEN 'IT_ITEMS-MATNR'.
            count = 1.
            CALL FUNCTION 'POPUP_WITH_TABLE'
              EXPORTING
                endpos_col   = 50
                endpos_row   = 35
                startpos_col = 20
                startpos_row = 30
                titletext    = 'Sales Order Nr'
              TABLES
                valuetab     = it_infos
              EXCEPTIONS
                break_off    = 1
                OTHERS       = 2.

            IF sy-subrc <> 0.

            ENDIF.
        ENDCASE.
    ENDCASE.
  ELSE.
    MESSAGE 'No data found!' TYPE 'I'.
  ENDIF.

ENDFORM.                    "execute_command

*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*

START-OF-SELECTION.
  IF chk_alv = 'X'. " When Checkbox checked
    classex3=>alv( ).
  ELSE.
    classex3=>nonalv( ).
  ENDIF.
Danke für eure Hilfe.

Seite 1 von 1

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

BAPI zur ABSO?
vor 2 Tagen von msfox 1 / 273
Materialstammerweiterung: Neuer Reiter
vor einer Woche von DeathAndPain gelöst 4 / 913
Ermittlung der Arbeitstage (Mosid)
vor einer Woche von Radinator 11 / 46585
LSMW-Problem
vor 3 Wochen von DeathAndPain gelöst 6 / 4463

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

BAPI zur ABSO?
vor 2 Tagen von msfox 1 / 273
Materialstammerweiterung: Neuer Reiter
vor einer Woche von DeathAndPain gelöst 4 / 913
Ermittlung der Arbeitstage (Mosid)
vor einer Woche von Radinator 11 / 46585
LSMW-Problem
vor 3 Wochen von DeathAndPain gelöst 6 / 4463

Unbeantwortete Forenbeiträge

BAPI zur ABSO?
vor 2 Tagen von msfox 1 / 273
SFP/SEGW - Fehler beim Rendering
March 2026 von Manfred K. 1 / 90125