ALV set_table_for_first display "nicht typkompatibel"

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
4 Beiträge • Seite 1 von 1
4 Beiträge Seite 1 von 1

ALV set_table_for_first display "nicht typkompatibel"

Beitrag von Murdock (Specialist / 115 / 55 / 8 ) »
Hallo,

als erstes sei erwähnt, dass ich das was ich machen wollte letztendlich geschafft habe, aber dennoch wissen möchte warum das folgende nicht funktioniert.

Es geht um die Darstellung von Drucktasten in einem ALV. Also eine Zelle als Taste darzustellen und zu behandeln.

Die SAP sagt dazu unter https://help.sap.com/saphelp_crm700_ehp ... elp.sap.de folgendes:


Einsatzmöglichkeiten

Wenn Sie Zellen, Zeilen oder Spalten den Style
mc_style_button zuweisen, stellt das ALV Grid Control die zugehörigen Zellen als Drucktaste dar. Der Benutzer sieht dann unmittelbar, daß er weiter Informationen zur Zelle erhält, indem er auf sie klickt. Das ALV Grid Control löst dann das Ereignis button_click aus.

Ablauf

Hinweis

Um alle Zellen einer Spalte als Drucktaste darzustellen, verwenden Sie das
Feld STYLE des Feldkatalogs.

Um Zeilen oder einzelne Zellen als Drucktaste darzustellen, gehen Sie folgendermaßen vor:

Definieren Sie die

Layout-Struktur vom Typ LVC_S_LAYO .
Erweitern Sie Ihre Ausgabetabelle um eine Zellentabelle vom Typ
LVC_T_STYL wie im folgenden Beispiel:

DATA: BEGIN OF GT_OUTTAB OCCURS 0.
INCLUDE STRUCTURE
<DDIC-Struktur> .

DATA: CT TYPE LVC_T_STYL. "Table buttons

DATA: END OF GT_OUTTAB.
Selektieren Sie Ihre Daten und kopieren Sie sie in die Ausgabetabelle.
Lesen Sie in einem Loop jeweils eine Zeile der Ausgabetabelle. Eine Zeile der Zellentabelle hat die Felder
FIELDNAME und STYLE . Belegen Sie diese Felder folgendermaßen:

Wenn alle Zellen einer Zeile als Drucktaste dargestellt werden sollen, weisen Sie dem Feld

style das Attribut cl_gui_alv_grid=>mc_style_button zu. Das Feld fieldname bleibt in diesem Fall leer.
Wenn nur bestimmte Spalten der Zeile wie eine Drucktaste aussehen sollen, hängen Sie pro Spalte eine Zeile an die Zellentabelle an. Dem Feld
fieldname weisen Sie den Namen der gewünschten Spalte und dem Feld style das Attribut cl_gui_alv_grid=>mc_style_button zu.

Weisen Sie den Namen der internen Tabelle dem Feld

stylefname der Layout-Struktur zu (in unserem Fall 'CT', siehe Schritt 2).
Übergeben Sie die Layout-Struktur und die Ausgabetabelle mit der Methode
set_table_for_first_display.


Ergebnis

Das ALV Grid Control gibt die mit dem Attribut gekennzeichneten Zellen als Drucktaste aus.
So habe ich es gemacht:

Code: Alles auswählen.

DATA: BEGIN OF gt_werks_daten OCCURS 0.
        INCLUDE STRUCTURE zqms_qm_werke.
DATA: t_style TYPE lvc_t_styl. "Style Tabelle 
DATA: END OF gt_werks_daten.

DATA: go_alv            TYPE REF TO cl_gui_alv_grid,
      go_container      TYPE REF TO cl_gui_custom_container,
      gs_werks_daten    LIKE LINE OF gt_werks_daten,
      gt_fieldcat       TYPE lvc_t_fcat,
      gs_layout         TYPE lvc_s_layo,
      gt_mat_pruefarten TYPE TABLE OF qmat.

WRITE '.'. "Damit der ALV einen Screen hat

gs_werks_daten-disgr = '1000'.
APPEND gs_werks_daten TO gt_werks_daten.

* Feldkatalog aufbauen

CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
  EXPORTING
    i_structure_name       = 'ZQMS_QM_WERKE'
  CHANGING
    ct_fieldcat            = gt_fieldcat
  EXCEPTIONS
    inconsistent_interface = 1
    program_error          = 2
    OTHERS                 = 3.


IF go_alv IS INITIAL.
  CREATE OBJECT go_alv
    EXPORTING
      i_parent          = cl_gui_container=>default_screen
    EXCEPTIONS
      error_cntl_create = 1
      error_cntl_init   = 2
      error_cntl_link   = 3
      error_dp_create   = 4
      OTHERS            = 5.
  CHECK sy-subrc = 0.

  CALL METHOD go_alv->set_table_for_first_display
    EXPORTING
      i_structure_name = 'ZQMS_QM_WERKE'
    CHANGING
      it_outtab        = gt_werks_daten
      it_fieldcatalog  = gt_fieldcat
    EXCEPTIONS
      OTHERS           = 4.
ELSE.
  CALL METHOD go_alv->refresh_table_display.
ENDIF.

Und nun sagt der Compiler:
"GT_WERKS_DATEN" ist nicht typkompatibel zum formalen Parameter "IT_OUTTAB".

Wie gesagt, ich habe es zum Laufen bekommen (Types anstatt Data), aber ist das jetzt ein Fehler in der SAP Beschreibung oder habe ich was übersehen?

Danke.

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


Re: ALV set_table_for_first display "nicht typkompatibel"

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Mit OCCURS (obsolete Art eine interne Tabelle zu definieren) wird eine interne Tabelle mit Kopfzeile angelegt. Der Name der Tabelle hat dann zwei Bedeutungen. Einmal die Kopfzeile (bzw. Workarea) und einmal den Tabellenkörper. Je nach Kontext (oder Befehl) entscheidet der ABAP Prozessor, was gemeint ist.
Refresh tabellenname. --> Tabellenkörper
Clear tabellenname. --> Kopfzeile
Move tabellenname ---> Kopfzeile
Loop at tabellenname. --> tabellenkörper mit Übertragung in Kopfzeile

In deinem Fall will er die Kopfzeile dem Parameter "IT_OUTTAB" zuweisen und das passt nicht.

Besser ist es Tabellen ohne Kopfzeilen zu definieren.

Du kannst das Problem aber auch lösen, indem du gt_werks_daten[] angibts.
Mit den eckigen Klammern wird der Tabellenkorper angesprochen.

Folgende Benutzer bedankten sich beim Autor Dele für den Beitrag:
Murdock


Re: ALV set_table_for_first display "nicht typkompatibel"

Beitrag von a-dead-trousers (Top Expert / 4276 / 213 / 1140 ) »
Murdock hat geschrieben:Und nun sagt der Compiler:
"GT_WERKS_DATEN" ist nicht typkompatibel zum formalen Parameter "IT_OUTTAB".

Wie gesagt, ich habe es zum Laufen bekommen (Types anstatt Data), aber ist das jetzt ein Fehler in der SAP Beschreibung oder habe ich was übersehen?
Ganz einfach: GT_WERKS_DATEN mit DATA und OCCURS ergibt eine Tabelle mit Kopfzeile. Daher ist GT_WERKS_DATEN eine Struktur und keine Tabelle. Um auf die Tabelle zu verweisen musst du die GT_WERKS_DATEN[] Syntax verwenden.

lg ADT

EDIT: Dele war um zwei Minuten schneller :P

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Murdock

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV set_table_for_first display "nicht typkompatibel"

Beitrag von Murdock (Specialist / 115 / 55 / 8 ) »
Mann, Mann, Mann,... Wald und Bäume und so...
Danke euch.

Seite 1 von 1

Vergleichbare Themen

4
Antw.
4668
Views
Set table for first display
von pippi1710 » 27.10.2011 10:34 • Verfasst in ABAP® für Anfänger
0
Antw.
1819
Views
display a Internal table on a SmartForm
von jamiguel77 » 31.12.2014 20:15 • Verfasst in ABAP® für Anfänger
6
Antw.
4982
Views
ALV Refresh Table Display funktioniert nicht.
von Ichse2 » 21.02.2020 13:02 • Verfasst in ABAP Objects®
1
Antw.
1909
Views
cl_salv_table=>factory "lt_bkpf ist nicht typkompatibel zum formalen Parameter "t_table"
von Elekam » 07.10.2020 15:59 • Verfasst in ABAP Objects®
2
Antw.
4088
Views
message (...) DISPLAY LIKE
von an4kh4 » 21.03.2007 14:42 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Aktuelle Forenbeiträge

PDF-Anzeige unter EDGE
vor 5 Tagen von jocoder 2 / 73

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

PDF-Anzeige unter EDGE
vor 5 Tagen von jocoder 2 / 73

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Wochen von Lucyalison 1 / 132
Group Items auf einer Filterbar
vor 4 Wochen von Bright4.5 1 / 166