Inner Join - ALV Grid (Dynpro)

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
18 Beiträge • Seite 1 von 2 (current) Nächste
18 Beiträge Seite 1 von 2 (current) Nächste

Inner Join - ALV Grid (Dynpro)

Beitrag von Andro02 (ForumUser / 8 / 3 / 0 ) »
Guten Tag Alleman(n),

ich bin gerade auf der Suche nach einem Lösungsweg, welcher mir es erlaubt einen ALV Grid mit einer "gejointen" Tabelle ausgibt.

Speziell geht es um die Tabellen MARC und MBEW, welche durch einen Inner Join über die Spalten MATNR und BWKEY(WERKS für MARC) verbunden werden sollen.
Einen ALV Grid für eine einzelne Tabelle ist kein Problem, aber irgendwie habe ich Schwierigkeiten mit der oben genannten Konstellation.

Mein TOP Include sieht folgendermaßen aus:

Code: Alles auswählen.

PROGRAM  ZZ_07_GLOBAL2.

TABLES MBEW.
TABLES MARC.

DATA: ok_code LIKE sy-ucomm.

Types: BEGIN OF wa,
        struc1 TYPE marc,
        struc2 TYPE mbew,
      END OF wa.

DATA: itab TYPE TABLE OF wa.

* Declare reference variables to the ALV grid and the container
DATA:
go_grid TYPE REF TO cl_gui_alv_grid,
go_custom_container TYPE REF TO cl_gui_custom_container.
Das Unterprogramm "LOAD DATA INTO GRID":

Code: Alles auswählen.

form LOAD_DATA_INTO_GRID .


* read data from table sflight
SELECT mbew~bwkey mbew~matnr mbew~bwtar
        mbew~vprsv mbew~verpr mbew~stprs  marc~kautb
       FROM MARC
         INNER JOIN MBEW ON marc~matnr = mbew~matnr
         and marc~werks = mbew~bwkey
       INTO TABLE itab where MARC~kautb = 'X'.

CALL METHOD go_grid->set_table_for_first_display
EXPORTING
i_structure_name = 'ZZ07GLOBAL2'
CHANGING
it_outtab = itab.


endform.                    
Die Struktur ZZ07GLOBAL2 enthält alle Felder welche zur Ausgabe gehören sollen, siehe Screenshot.
Bild


Aber irgendwie bekomme ich trotzdem noch einen Error beim Ausführen :(. Irgednwie komm ich dem Wurm nicht auch die Schliche.

Danke schon mal für die Hilfestellung!!!


edit: es hat wohl was mit der Abfrage zu tun, DBIF_RSQL_INVALID_RSQL :/

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


Re: Inner Join - ALV Grid (Dynpro)

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
Hallo Andro02 und willkommen hier im Forum,

du hast nicht erwähnt an welcher Stelle das Programm abbricht, ich denke aber, dass es beim SELECT der Fall sein wird. Bei dir ist die Tabelle itab als TYPE TABLE OF wa deklariert. Wa besteht wiederum aus kompletten marc und mbew und hat nichts mit der Struktur ZZ07GLOBAL2 zu tun. Deswegen passen die selektierten Felder im SELECT nicht zur Tabelle und das Programm stürzt ab
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Inner Join - ALV Grid (Dynpro)

Beitrag von Andro02 (ForumUser / 8 / 3 / 0 ) »
Hi Alexander,

du hast recht, das Programm bricht bei der Select-Anweisung ab.
Ich habe wa jetzt folgendermaßen geändert.

Code: Alles auswählen.

DATA: BEGIN OF wa,
BWKEY TYPE MBEW-BWKEY,
MATNR TYPE MBEW-MATNR,
BWTAR TYPE MBEW-BWTAR,
VPRSV TYPE MBEW-VPRSV,
VERPR TYPE MBEW-VERPR,
STPRS TYPE MBEW-STPRS,
KAUTB TYPE MARC-KAUTB,
END OF wa.

DATA itab like TABLE OF wa.
bei der Syntaxprüfung kommt leider die Fehlermeldung
Der Typ der Datenbanktabelle und des Arbeitsbereiches "ITAB" sind nicht Unicode-konvertibel.
Ich habe schon eben etwas gegooglet, konnte jedoch keine konkrete Lösung finden.

Re: Inner Join - ALV Grid (Dynpro)

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
hi!

Probiers mit TYPES BEGIN OF ... (Das wäre eine Typdefinition und keine Variable) und TYPE STANDARD TABLE OF ... WITH DEFAULT KEY (Das wäre die komplette Syntax)

Die ALV-Ausgabe wird aber vermutlich auch nicht funktionieren, da dir ein Feldkatalog oder zumindest die Struktur auf der Datenbank fehlen wird. Da du wahrscheinlich auch nicht für jedes Programm auf der Datenbank die zugehörige Strktur anlegen möchtest, würde ich dir raten für solche "dynamischen" Programme zur Ausgabe den SALV (CL_SALV_TABLE) zu verwenden. Dieser kann nämlich zur Laufzeit den Feldkatalog (mittels RTTI) selbst ermitteln. Außerdem ersparst du dir das Ausgabedynpro und im Falle einer Hintergrundausführung erfolgt automatisch eine Listausgabe.

lg ADT
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: Inner Join - ALV Grid (Dynpro)

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
a-dead-trousers hat geschrieben:...würde ich dir raten für solche "dynamischen" Programme zur Ausgabe den SALV (CL_SALV_TABLE) zu verwenden
das setzt allerdings voraus, dass ein SAP-System > 4.7 vorhanden ist
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Inner Join - ALV Grid (Dynpro)

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
Andro02 hat geschrieben:
Der Typ der Datenbanktabelle und des Arbeitsbereiches "ITAB" sind nicht Unicode-konvertibel.
Ich habe schon eben etwas gegooglet, konnte jedoch keine konkrete Lösung finden.
Wenn du schon eine Struktur im DDIC anlegst solltest du diese auch für deine Variablen verwenden:

Code: Alles auswählen.

DATA: wa TYPE zz07global1,
DATA: itab TYPE TABLE OF zz07global1.
Wobei man dann noch eine Notation verwenden sollte, damit das ganze lesbarer wird:

Code: Alles auswählen.

DATA: gs_data TYPE zz07global1,                          "globale Struktur
DATA: gt_data TYPE TABLE OF zz07global1.           "globale Tabelle
dann aber bitte auch die Verwendung analog anpassen.

Wichtig beim Select ist, dass die selektierten Felder die gleiche Reihenfolge haben, wie sie in der DDIC-Structur definiert sind. Die DDIC-Structur muss noch aktiviert werden (zumind. laut Screenshoot).

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
Andro02

Gruß Hendrik

Re: Inner Join - ALV Grid (Dynpro)

Beitrag von Andro02 (ForumUser / 8 / 3 / 0 ) »
Guten Morgen,

also ich habe jetzt beides probiert, aber es bleibt beim gleichen Fehler (nicht unicode-konvertibel). Ich habe nochmal die von mir erstellte Struktur mit der Abfrage etc gecheckt, sollte richtig sein (und aktiviert) ;).

Als System nutze ich ECC 6.0, SALV (CL_SALV_TABLE) sollte also funktionieren.

Re: Inner Join - ALV Grid (Dynpro)

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
hi!

Habt ihr überhaupt ein Unicode-System im Einsatz?
Von der Fehlermeldung her vermute ich trotzdem, dass die Felddefinition in deiner Struktur nicht mit jener der Datenbanktabellen übereinstimmt.
Gib mal testweise in deiner Struktur dieselben Datenelemente wie in den Datenbank-Tabellen an. (Knopf "Komponententyp")
Sonst könntest du noch versuchen zu den CURR-Feldern die entsprechenden UNIT Felder dazuzuselektieren, möglich das man die nur gemeinsam auslesen kann.

lg ADT
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: Inner Join - ALV Grid (Dynpro)

Beitrag von Andro02 (ForumUser / 8 / 3 / 0 ) »
Super Leute, es funktioniert jetzt. :)

Also ich habe, wie dead-trousers sagte, die Datenelemente nochmal mit den aus den Tabellen ergänzt und die Syntax nochmal, wie oben beschrieben, geändert. Die Ausgabe entspricht jetzt genau dem was ich gewollt habe ;).

Sieht jetzt folgendermaßen aus.

Code: Alles auswählen.

form LOAD_DATA_INTO_GRID .

* Join MBEW und MARC
SELECT mbew~bwkey mbew~matnr mbew~bwtar
        mbew~vprsv mbew~verpr mbew~stprs  marc~kautb
       FROM mbew
         INNER JOIN marc ON marc~matnr = mbew~matnr
         and marc~werks = mbew~bwkey
        INTO TABLE gt_data where MARC~kautb = 'X'.

CALL METHOD go_grid->set_table_for_first_display
EXPORTING
i_structure_name = 'ZZ07GLOBAL2'
CHANGING
it_outtab = gt_data.

endform.                    " LOAD_DATA_INTO_GRID
und

Code: Alles auswählen.

PROGRAM  ZZ_07_GLOBAL2.

DATA: ok_code LIKE sy-ucomm.

DATA: gs_data TYPE ZZ07GLOBAL2.
DATA: gt_data TYPE TABLE OF ZZ07GLOBAL2.

* Declare reference variables to the ALV grid and the container
DATA:
go_grid TYPE REF TO cl_gui_alv_grid,
go_custom_container TYPE REF TO cl_gui_custom_container.
Eventuell kann ich gleich mit einer Folgefrage "durchstarten" :)
Es gibt noch einen "vorherigen" Dynpro mit einem Eingabefenster in dem ich BWKEY eingeben möchte und dann sollen im ALV Grid nur jene BWKEY's ausgeben werden, welche dort eingegeben worden sind.

Reicht dafür eine Ergänzung der Select-Abfrage oder muss ich noch ein paar Dinge beachten?
Ich Fummel mich gerade erst in die ABAP-Geschichte hinein, deswegen die vielen Fragen.

Re: Inner Join - ALV Grid (Dynpro)

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
hi!

Um dir etwas an Arbeit zu sparen, kannst du gleich einen Report mit einem Selection-Screen bauen.
Ließ dich dazu ein wenig in die Hilfe ein oder schau dir einen der zig-tausend Reports an die mit SAP ausgeliefert werden

Auf alle Fälle gehört dann deine Datenselektion in das Event START-OF-SELECTION rein. (Nähere Infos auch der Hilfe zu ennehmen)
Wenn du eine SELECT-OPTION verwendest musst du bei deinem SELECT-STATEMENT das Schlüsselwort IN verwenden.

Code: Alles auswählen.

WHERE mbew~bwkey IN so_bwkey.
Wenn es nur ein Paremter sein soll ein normales EQUAL

Code: Alles auswählen.

WHERE mbew~bwkey EQ pa_bwkey.
lg ADT
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: Inner Join - ALV Grid (Dynpro)

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Okay weils eh nicht soviele Zeilen sind. Hier die Lösung:

Code: Alles auswählen.

REPORT ZZ_07_GLOBAL2.

TABLES mbew.

SELECT-OPTIONS so_bwkey FOR mbew-bwkey.

START-OF-SELECTION.

DATA:
  lt_data TYPE STANDARD TABLE OF ZZ07GLOBAL2 WITH DEFAULT KEY, "Vollständige OO-Syntax!
  lr_table TYPE REF TO cl_salv_table.

SELECT mbew~bwkey mbew~matnr mbew~bwtar
        mbew~vprsv mbew~verpr mbew~stprs  marc~kautb
       FROM mbew
         INNER JOIN marc ON marc~matnr = mbew~matnr
         and marc~werks = mbew~bwkey
        INTO TABLE gt_data where MARC~kautb = 'X' and mbew~bwkey IN so_bwkey.

CL_SALV_TABLE=>FACTORY(
  IMPORTING
    r_salv_table = lr_table
  CHANGING
    t_table = lt_data ).

lr_table->display( ).
Fehlerhandling usw. musst du programmieren. :P

lg ADT

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

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: Inner Join - ALV Grid (Dynpro)

Beitrag von Andro02 (ForumUser / 8 / 3 / 0 ) »
super funktioniert. Danke schön. ;)

Beim ALV Grid fand ich nur die gleich implementierten Funktionen (Sortieren, EXCEL Export etc.) recht nützlich. Für den Augenblick werde ich das erstmal so lassen. Nichtsdestotrotz habe ich vorhin mal etwas rumprobiert, aber irgendwie finde ich es in der Dynpro Doku nirgends verständlich beschrieben wie ich Eingabefelder von einem DynPro auf das nächste weitergebe :(

Re: Inner Join - ALV Grid (Dynpro)

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Die Felder am Dynpro werden beim sog. PAI in die gleichnamigen Variablen des Programms übertragen.
Beim PBO werden die Inhalte von den Variablen im Programm in das Dynpro zurückgeschrieben.
d.h. Die Felder am Dynpro brauchen eine gleichnamige Entsprechung im Programm für den Feldtransport.
Bei den Befehlen rund um den SELECTION-SCREEN werden sowohl die Variablen im Programm als auch jene am Dynpro angelegt.
d.h. Du musst dich nicht selbst darum kümmern und kannst direkt auf die Variablen in deinem Programm zugreifen.
Einen Sonderfall stellen die FIELDS- und CHAIN-Anweisungen in der Dynpro-Logik dar, da hier nur die umschlossenen Felder übertragen werden. Erst wenn diese abgearbeitet wurden sind alle Variablen im Programm "angekommen".

In meinem Beispiel sind beim START-OF-SELECTION bereits alle Variablen in das Programm übertragen worden und du kannst direkt damit arbeiten.

Eine Große Ausnahme sind auch die Ereignisse Process-On-Value-Request (POV; Taste F4) und Process-On-Help-Request (POH; Taste F1)
Hierbei wird KEIN PAI/PBO ausgelöst und es wird auch nur jenes Feld zwischen Dynpro und Programm ausgetauscht, auf welchem das Ereignis stattgefunden hat.
Möchte man nun bei einem F4-Ereignis neben dem eigentlichen Feld auch ein anderes (z.B. Infotext) verändern oder abfragen, muss man sich mit einem kleinen "Workaround" behelfen. Die Bausteine dazu lauten DYNP_VALUES_READ und DYNP_VALUES_UPDATE und ersetzen grundsätzlich PAI/PBO. In der Schnittstelle beider Funktionsbausteine muss man eine Tabelle aller Felder angeben die von Dynpro gelesen bzw. in das Dynpro transferiert werden sollen. Zu beachten ist, dass die übergebenen Werte der Darstellung am Dynpro entsprechen. d.h. Bei Datumsfeldern muss man die entsprechende Aufbereitung durchführen (20.10.2012 => 20121020 und umgekehrt) sonst kommt es zu Fehlern.
(Deswegen bezeichne ich das Ganze auch als "Workaround", da man viel beachten muss und es nicht immer out-of-the-box funktioniert)

lg ADT

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

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: Inner Join - ALV Grid (Dynpro)

Beitrag von Andro02 (ForumUser / 8 / 3 / 0 ) »
ok, das habe ich soweit verstanden. Bei mir haperts wohl noch etwas an der Syntax.

Mal angenommen ich habe im Dynpro100 eine Eingabe namens "INPUT", diese Eingabe würde ich gerne an Dynpro200 weitergeben und in der SQL-Abfrage verwenden.

Mein Vorhaben wäre jetzt gewesen erstmal zwei Variablen zu deklarieren:

Code: Alles auswählen.

DATA: eingabe TYPE c LENGTH 4,
      ausgabe TYPE c LENGTH 4.
und dann im PAI (Dynpro100) die Eingabe mittels

Code: Alles auswählen.

INPUT = eingabe.
in der Variable "eingabe" zu speichern.

Diese Variable hätte ich einfach an die Abfrage im Dynpro200 angehangen.

Praktisch ist das ja immer etwas anders.... also es funktioniert nicht :D.


edit: ok, habe es mit "SET/GET Parameter ID ...." hinbekommen :)

Re: Inner Join - ALV Grid (Dynpro)

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Viel einfacher:
Nenn einfach beide Felder (auf Dnypro 100 UND Dynpro 200) GLEICH.
Die Zuweisung in PAI/PBO kannst du dir sparen, dass macht SAP selbst wenn die Felder auch GLEICH heißen wie die Variable im Programm.

Der Ablauf ist dann ungefähr so, wobei der sog. Feldtransport bei PAI/PBO von SAP erledigt wird.
Dynpro 100 / Feld INPUT -> Ausführen(PAI) -> Programm Variable INPUT -> Call Screen(PBO) -> Dynpro 200 / Feld INPUT

lg ADT
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

Vergleichbare Themen

2
Antw.
5608
Views
Dynpro ALV Grid Vollbild
von nycrom » 14.09.2009 17:17 • Verfasst in ABAP® Core
2
Antw.
4744
Views
ALV GRID ohne Dynpro
von hadde85 » 01.07.2008 09:50 • Verfasst in ABAP® für Anfänger
4
Antw.
9121
Views
interne Tabelle auf Dynpro und ALV Grid
von bohne » 27.11.2006 14:20 • Verfasst in ABAP® für Anfänger
2
Antw.
2613
Views
(ISU) ALV Grid für verteilte Tabelle, Selektion über Dynpro
von Eliona » 06.12.2011 22:01 • Verfasst in ABAP® für Anfänger
3
Antw.
7226
Views
ALV Grid wird auf Popup Dynpro nicht angezeigt
von cosmo » 07.01.2009 14:42 • Verfasst in ABAP Objects®

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 2 Stunden von DeathAndPain gelöst 20 / 2425
Zeilenumbrüche ersetzen
vor 23 Stunden von ralf.wenzel 6 / 210
SAP Trial Version für SAP Fiori
vor 2 Tagen von tar 2 / 1584

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

Dialog-Container mit Toolbar/Status
vor 2 Stunden von DeathAndPain gelöst 20 / 2425
Zeilenumbrüche ersetzen
vor 23 Stunden von ralf.wenzel 6 / 210
SAP Trial Version für SAP Fiori
vor 2 Tagen von tar 2 / 1584

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 649
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2280
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8864