Dynamisches SELECT in Fuba

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

Dynamisches SELECT in Fuba

Beitrag von ROL (ForumUser / 7 / 0 / 0 ) »
Hallo,

ich habe folgendes Problem:

Es soll ein Funktionsbaustein erstellt werden, in dem ein SELECT durchgeführt wird. Dabei sollen die Spalten, die Datenbanktabelle und die where-klausel dynamisch durch parameteer übergeben werden. Bis dahin ist das auch kein Problem, aber damit das auch Sinn macht, muss auch die interne Tabelle, in die selektiert wird dynamisch sein (also am Ende vom Typen der Datenbank). Und da liegt auch mein Problem.
Ich würd mich freuen, wenn mir da jemand weiter helfen könnte. Das ganze muss auf einem 4.6 system umzusetzen sein.

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


Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo ROL,

es gibt einen Funktionsbaustein ALV_CREATE_TABLE (o.ä.), dem man eine Feldkatalogtabelle, Typ LVC_T_FCAT, übergibt und eine Datenreferenz (REF TO DATA) zurückbekommt. Damit kann man dann den SELECT durchführen.
Der Funktionsbaustein muss natürlich seinerseits auch die Tabelle als Exporting-Parameter mit Typ REF TO DATA an den Aufrufer übergeben.

Den Zugriff auf die Tabelle erhält man jeweils über ein Feldsymbol, das mit 'ASSIGN dat_ref->* TO <lt_itab>' zugewiesen wurde. Zugriff auf Felder einer Zeile muss auch über Feldsymbol mit 'ASSIGN COMPONENT <name> OF STRUCTURE <ls_itab>' erfolgen.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von ROL (ForumUser / 7 / 0 / 0 ) »
Ganz großes Dankeschön,

du bist für heute schon mal mein prsönlicher Held. Vor allem, weil somit gleich das exporting Problem mitgelöst wurde. Die Idee mit der Referenz hat es auch schon gegeben, aber das hing dann beim erstellen der Tabelle und auch beim exporting.

Ich werds morgen gleich als erstes umsetzen.

Beitrag von ROL (ForumUser / 7 / 0 / 0 ) »
Okay, der Fuba ALV_TABLE_CREATE ist bestimmt der richtige, allerdings habe ich Schwierigkeiten damit, ihn zu füllen. Die Dokumentation ist nämlich leider nicht vorhanden.
Was muss bei i_formname rein?

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo ROL,

benutze lieber den LVC_TABLE_CREATE, der den ALV_TABLE_CREATE benutzt. Damit brauchst Du den Parameter I_FORMNAME dann nicht mehr zu bestücken.

PS:
das war der FB, den ich eigentlich sogar meinte...

PPS:
Du kannst auch die Methode CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE benutzen
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von ROL (ForumUser / 7 / 0 / 0 ) »
Hallo ereglam,

ich danke dir nochmals sehr für deine Hilfe. Ich habe es jetzt geschafft, das SELECT zum laufen zu bringen - auch ohne die FB's. Allerdings wäre ich ohne deine Denkanstöße nicht so schnell auf die Fährte gekommen ;)

Hier mein Ergebnis, welches funktioniert:

FUNCTION z_rol_test_selection.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" REFERENCE(IV_DBNAME) TYPE STRING
*" REFERENCE(IV_COLS) TYPE STRING
*" EXPORTING
*" REFERENCE(ET_TABNAME) TYPE TABLE
*"----------------------------------------------------------------------
DATA:
lv_dbname TYPE dd02l-tabname,
lv_cols TYPE string,
lt_tabelle TYPE REF TO data.

FIELD-SYMBOLS:
<lt_tabelle> TYPE STANDARD TABLE,
<lt_exptab>.

lv_dbname = iv_dbname.
lv_cols = iv_cols.

CREATE DATA lt_tabelle TYPE STANDARD TABLE OF (lv_dbname).
ASSIGN lt_tabelle->* TO <lt_tabelle>.

break rol.

SELECT (lv_cols)
FROM (lv_dbname)
INTO CORRESPONDING FIELDS OF TABLE <lt_tabelle>.

LOOP AT <lt_tabelle> ASSIGNING <lt_exptab>.
APPEND <lt_exptab> TO et_tabname.
ENDLOOP.

ENDFUNCTION.
----------------------------------------------------------------------------------------------
Aber ich werde den FuBa LVC_TABLE_CREATE auch noch einmal ausprobieren, damit ich diesen Lösungsweg auch gesehen habe. Danach gehts an den vertiefenden Feinschliff!

Beitrag von donny (Specialist / 253 / 0 / 2 ) »
Hallo Freunde,

vielleicht darf ich mich hier mit eine Frage einklinken, die genau in das Umfeld passt?

Ich benutze den CALL METHOD cl_alv_table_create=>create_dynamic_table zum Erstellen einer Datentabelle aus einem ALV-Feldkatalog wie im Thread beschrieben. Die gebe ich dann mit dem REUSE_ALV.... aus.

Funzt prima. 8)

Jetzt möchte ich aber gerne einzelne Zellen farblich kennzeichnen und brauche dafür im Feldkatalog und dann auch in der dynamisch erzeugten Datentabelle die ALV-Farbtabelle vom Typ slis_t_specialcol_alv.

Wie krieg ich diesen Datentyp in den Feldkatalog? Ich hab schon versucht, mir einen Eintrag mittels REUSE_ALV_FIELDCATALOG_MERGE aus einer statisch definierten Tabelle mit nur diesem Feld zu erzeugen, aber der FB bringt nix zurück. Und ohne Eintrag im Feldkatalog wird's ja auch nix mit der Generierung der Datentabelle.

Gruß
donny

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo donny,

was hält dich davon ab, eine lokale Kopie das Katalogs mit dem Feld für die Farben zu ergänzen und durch die Methode zu schicken?

Es kann jedoch sein, dass es zunächst nicht funktioniert, weil Du eine Referenztabelle und -feld eintragen musst. Dann mach einen Verwendungsnachweis auf den Typ.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von donny (Specialist / 253 / 0 / 2 ) »
Hallo ereglam,

deinen ersten Vorschlag hatte ich schon versucht, leider ohne Erfolg, weil es eben nicht ein einfaches Feld ist, sondern eine Tabelle.

Dein zweiter Vorschlag überfordert mich zugegebenermassen etwas. Wie muss ich Referenztabelle und -feld in den Feldkatalog eintragen, und was meinst du mit "Verwendungsnachweis auf den Typ machen"?

:?: donny

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
hm, hatte ich jetzt nicht dran gedacht...
Wenn Du einen OO-ALV benutzt, hat die Farbtabelle den Typ LVC_T_SCOL, der in anderen Tabellen und Strukturen verwendet wird und somit als Referenztabelle und Feld im Feldkatolog benutzt werden könnten.

Wie man das Problem beim REUSE-ALV löst, kann ich leider nicht sagen... :-(
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von donny (Specialist / 253 / 0 / 2 ) »
Hi ereglam,

eigentlich liegt mein Problem gar nicht im REUSE_ALV..., sondern schon beim
create_dynamic table. Ich möchte ja, daß mir die Methode ein Feld vom Typ LVC_T_SCOL mit in die Datentabelle generiert. Das versuche ich wie folgt:

Code: Alles auswählen.

DATA: lt_fieldcat TYPE lvc_t_fcat,
      lt_fc_wa    TYPE lvc_s_fcat.
  CLEAR lt_fc_wa.
  lt_fc_wa-fieldname     = 'TAB_FARBE'.
  lt_fc_wa-datatype       = 'TTYP'.
  lt_fc_wa-ref_field     = 'LVC_T_SCOL'.
  append lt_fc_wa to lt_fieldcat.

* Create new table
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = lt_fieldcat
    IMPORTING
      ep_table        = new_tab.
Mache ich das, bekomme ich folgende verstümmelte Fehlermeldung:

Code: Alles auswählen.

Meldungsnr. 0K000: Der Typ "" besitzt keine Struktur und daher auch k 4 -LVC_T_SCOL 
Wie muss ich denn den Typ im Feldkatalog beschreiben, damit er in der Datentabelle richtig generiert wird?

Gruß
donny

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo donny,

dann gilt genau, was ich schon zuvor geschrieben hatte bzgl. Verwendungsnachweis des Tabellentyps LVC_T_SCOL (bzw. dessen Struktur LVC_S_SCOL).
Der Tabellentyp wird z.B. in Struktur BSPL_GRID_FIELDCAT für Feld CELL_COLOR benutzt. Daher trägst Du in deinem Feldkatalog als Referenztabelle BSPL_GRID_FIELDCAT und als Referenzfeld CELL_COLOR ein.

Die Fehlermeldung an sich resultiert daraus, dass Du zwar REF_FIELD, aber nicht REF_TABLE gefüllt hattest und innerhalb der Methode im Endeffekt ein Subroutine-Pool benutzt wird, der beim Generieren auf besagten Fehler läuft, weil im generierten Quelltext etwas wie 'TAB_FARBE TYPE -LVC_S_COL' steht.

PS:
wenn schon hättest Du LVC_T_SCOL im Feld DD_ROLLNAME eintragen müssen, was aber m.W. für die Methode CREATE_DYNAMIC_TABLE egal ist, da tiefer drin nur INTTYPE und die REF-felder aus dem Feldkatalog für die Typen der Tabelle ausgewertet werden.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von donny (Specialist / 253 / 0 / 2 ) »
Hallo Ereglam,

du bist mein Held :D

Kaum hatte ich REF_TABLE auch sinnvoll befüllt, hat's funktioniert und die Methode hat mir ein prima Feld mit in die Datentabelle generiert.

Jetzt kämpfe ich noch etwas mit dem Befüllen diese Feldes, aber das krieg ich noch hin.

Vielen Dank für die Hilfe
donny

Seite 1 von 1

Vergleichbare Themen

3
Antw.
12757
Views
"dynamisches" Select Statement in ABAP
von Frank Meyer » 08.07.2009 13:54 • Verfasst in ABAP® Core
3
Antw.
2351
Views
Fuba out über ALV und select-options
von MSFL » 24.02.2023 13:13 • Verfasst in ABAP® für Anfänger
2
Antw.
853
Views
FuBa Import Param, dynamische Select oder
von HH_ABAP » 15.01.2019 11:25 • Verfasst in ABAP® für Anfänger
2
Antw.
1463
Views
Dynamisches Tabellenupdate.
von Prego » 09.06.2011 11:05 • Verfasst in ABAP® Core
1
Antw.
1567
Views
Dynamisches Zuweisung
von Handeglo » 30.11.2009 14:15 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

FUBA 'HR_INFOTYPES_OPERATION'
vor 21 Stunden von Bright4.5 1 / 49
RFC vs. ODATA
Gestern von rob_abc 7 / 421

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.