Interne Tabelle an Form übergeben innerhalb eines FuBa's

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

Interne Tabelle an Form übergeben innerhalb eines FuBa's

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Hallo zusammen,

ich habe gerade ein Brett vor dem Kopf :oops: Ich habe einen Funktionsbaustein erstellt, in dem ich eine interne Tabelle definiert habe:

Code: Alles auswählen.

data: begin of itab_equi,
        equnr like equi-equnr,
        shtxt like itob-shtxt,
        pequi like equi-equnr,
      end of itab_equi.
Diese möchte ich an eine FORM übergeben, die sich dann auch noch rekursiv aufrufen soll!!!

Code: Alles auswählen.


FUNCTION Z_FUBA.

PERFORM getchildelements
                using
                   itab_equi
                .

ENDFUNCTION.

form getChildElements using itab_equi.

select * from ... . " Irgendwas

    " Füllen der internen Tabelle
    itab_equi-idnrk = equz-equnr.
    itab_equi-ojtxp = my_SHTXT.
    itab_equi-zparent = equz-hequi.
    
    append itab_equi.

    " rekursiver FORM-Aufruf
    PERFORM getchildelements
                using
                   itab_equi
                .
endselect.

endform.

Leider komme ich mit der Deklaration nicht so ganz klar und bin hier nur noch am wild rumprobieren!!!

In der Form bekomme ich beim Syntax-Check den Fehler: "itab_equi is not an internal table" und "itab_equi is neither specified under tables nor definied as an internal table".
Die Deklaration ist ja auch im FuBa, aber wie mache ich sie der FORM bekannt?

Bin für jede Hilfe dankbar!!!

Gruß,
Andy

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


Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
HI!

Versuch mal beim PERFORM und FORM stats USING lieber TABLE, dann klappt.

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
DeathGuardian hat geschrieben:HI!

Versuch mal beim PERFORM und FORM stats USING lieber TABLE, dann klappt.
Hey,
wenn ich es so mache:

Code: Alles auswählen.

form getChildElements tables itab_equi.

dann gibt er folgenden Fehler aus:

"The data object itab_equi has no structure and therefor no component called equnr."
:-(

Beitrag von Flo (Specialist / 161 / 0 / 0 ) »
Du brauchst neben deiner Tabelle auch einen Arbeitsbereich (also eine Zeile) die musst du dir in der Form dann definieren und immer mit append an die Tabelle anhängen.

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Flo hat geschrieben:Du brauchst neben deiner Tabelle auch einen Arbeitsbereich (also eine Zeile) die musst du dir in der Form dann definieren und immer mit append an die Tabelle anhängen.
Ja, aber wie ??? :?: Das ist ja das Problem.
Ich habs versucht mit:

Code: Alles auswählen.

data: wa_itab like line of itab_equi.
aber ich weiß einfach nich wie ich's machen soll!!

Sorry, aber meine ABAP-Grundlagen scheinen etwas eingestaubt... :oops:

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
OK, Problem gelöst.
Ich musste einfach die interne Tabelle innerhalb der Form noch einmal deklarieren (unter einem anderen Namen) und dann einen Arbeitsbereicht auf diese Tab erstellen.
Anschließend konnte ich dann diesen WA an die übergebene Tabelle ranhängen!

Trotzdem danke für eure Hilfe!!!

Code: Alles auswählen.

form getChildElements tables itab_equi.

data: begin of f_itab_equi occurs 0,
        equnr like equi-equnr,
        shtxt like itob-shtxt,
        pequi like equi-equnr,
      end of f_itab_equi.

data: wa_itab like line of f_itab_equi.

select * from ...

    wa_itab-equnr = equz-equnr.
    wa_itab-shtxt = my_SHTXT.
    wa_itab-pequi = equz-hequi.

    append wa_itab to itab_equi.


Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

so ganz wohl ist mir bei dem Ergebnis nicht, obwohl es irgendwie funktioniert.

Zum einen ist das keine Tabelle, die da im 1. Beitrag definiert wurde:

Code: Alles auswählen.

data: begin of itab_equi, 
      equnr like equi-equnr, 
      shtxt like itob-shtxt, 
      pequi like equi-equnr, 
      end of itab_equi. 
Es ist nur eine "Feldleiste" und keine Tabelle.

Dann, beim rekursiven Aufruf hast Du wieder using statt tables und schickst nur eine Feldleiste in die form ..!!??


Also:
man muß eine Tabelle, die man "von oben" an die form übergibt nicht nochmal als Tabelle innerhalbe der Form definieren. (Das macht meistens keine Sinn.)

Man will doch sicherlich die Tabelle durch die Form ein wenig verändern oder füllen lassen.

Ich würde mit dem Zeilentyp beginnen, dann einen Tabellentyp definieren und dann die Tabelle selbst.

Code: Alles auswählen.

types: begin of y_itab_equi, 
             equnr like equi-equnr, 
             shtxt like itob-shtxt, 
             pequi like equi-equnr, 
       end of y_itab_equi. 
     
types: t_itab_equi type table of y_itab_equi.

data: itab_equi type t_itab_equi.
Beim Perform nehme ich die USING-Anweisung und übergebe den Tabellenkörper. (Dann ist es egal, ob die Tabelle eine Kopfzeile hatte oder nicht.)

Code: Alles auswählen.

Perform getChildElements using itab_equi[].
...
In der Form beziehe ich mich wieder auf den Typen, den ich schon mal definiert hatte

Code: Alles auswählen.

FORM getChildElements p_itab_equi type t_itab_equi.
Danach braucht man nicht noch eine Tabelle, sondern eigentlich noch die Workarea.
Ich persönlich nehme da ein Feldsymbol.

Code: Alles auswählen.

FIELD-SYMBOLS: <p_itab_equi> like line of p_itab_equi.
und dann ran an die Tabelle.

Code: Alles auswählen.

select * from ... . " Irgendwas 

* Neue Zeile an die Tabelle anfügen
* Coding bis 4.6C
      append initial line to p_itab_equi.
      read table p_itab_equi assigning <p_itab_equi>
      index sy-tabix.

* ab 4.7 heißt das einfacher:
      append initial line to p_itab_equi
      assigning <p_itab_equi>.

* Füllen der Tabellenzeile
      <p_itab_equi>-idnrk = equz-equnr. 
      <p_itab_equi>-ojtxp = my_SHTXT. 
      <p_itab_equi>-zparent = equz-hequi. 
    

* rekursiver FORM-Aufruf 
      PERFORM getchildelements 
                using 
                   p_itab_equi[]
                . 
...
endselect.
Zumindest haben wir jetzt eine Tabelle, die an eine FORM weitergereicht wird.

Ob das aber schon das eigentliche Problem löst weiß ich nicht.

Als ich einmal die TP- und EQ-Strukturen aus dem SAP-PM lesen musste habe ich den SAP-Funktionsbaustein dazu genommen. Ich programmiere das erst selbst, wenn mir das Ding um die Ohren fliegt, oder sich einer beschwert, daß es zu langsam läuft.

Gruß
babap

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Hallo babap,
erstmal vielen Dank für deine Infos. Die bringen mich auf jeden Fall weiter!!

Ich sitze zwar gerade nicht am System, aber ich bin mir nicht sicher, ob das auch in meiner Situation funktioniert. Das Problem ist ja, dass ich einen eigenen Funktionsbaustein habe, in dem die interne "Tabelle" deklariert ist. Dort soll dann eine FORM aufgerufen werden, die aber erst ausserhalb des Funktionsbausteins definiert ist. Das heißt, dass die Typdeklaration dort nicht bekannt ist.

Ich werde das morgen mal testen und schreiben, ob es trotzdem geklappt hat...

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
shapoc hat geschrieben: Dort soll dann eine FORM aufgerufen werden, die aber erst ausserhalb des Funktionsbausteins definiert ist. Das heißt, dass die Typdeklaration dort nicht bekannt ist.
Dann leg dir doch im DICT eine Struktur und einen Tabellentyp der als Zeilentyp die zuvor angelegte Struktur hat an. Dann kannst du Systemweit auf die Typdefinitionen zugreifen.
Gruß Hendrik

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
JHM hat geschrieben:
shapoc hat geschrieben: Dort soll dann eine FORM aufgerufen werden, die aber erst ausserhalb des Funktionsbausteins definiert ist. Das heißt, dass die Typdeklaration dort nicht bekannt ist.
Dann leg dir doch im DICT eine Struktur und einen Tabellentyp der als Zeilentyp die zuvor angelegte Struktur hat an. Dann kannst du Systemweit auf die Typdefinitionen zugreifen.
Ja, das hatte ich befürchtet. Wollte das aber umgehen (keine Ahnung warum?) und nur die Tabelle übergeben...

Gibt es "nur diesen Weg?!

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

Angst vorm Dictionary gibt's nicht.

Alles was Du irgendwie wiederverwenden willst/musst, gehört zentral definiert.

Für Funktionsbausteine gibt es in der Funktionsgruppe eine Stelle, an der zentrale Datentype definiert werden können (TOP-Include).

Es reicht schon, den Datentyp zu benutzen und mit Doppelklick mal zu probieren, was die Workbench so vorhat. Meistens schlägt sie vor, den Datentyp zu definieren und macht schon das Include auf.

Gruß
babap
(Du hast noch nicht so viel Abap-Erfahrung ...???)

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
DeathGuardian hat geschrieben:Versuch mal beim PERFORM und FORM stats USING lieber TABLE, dann klappt.
Naja, "sauberer" wäre ein Tabellentyp, den kann man auch mit USING oder CHANGING übergeben. Von TABLES rät sogar die SAP inzwischen ab.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
[quote="JHMDann leg dir doch im DICT eine Struktur und einen Tabellentyp der als Zeilentyp die zuvor angelegte Struktur hat an. Dann kannst du Systemweit auf die Typdefinitionen zugreifen.[/quote]

Naja, da kommt es immer drauf an, wie oft man den Typen braucht. Ich lege normalerweise Tabellentypen in einem Programm an und eher nicht im DDIC, sonst hat man das DDIC sehr schnell mit Objekten zugeknallt.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
1.) Was ich definitiv unterlassen würde ( und ich hasse auch SAP jedesmal, wenn ich sowas sehe ) ist einen Parameter mittels "USING" zu übergeben und ihn dann trotzdem zu ändern.


2.) Zum Aufbau einer Equihierarchie nehm ich immer den FB "EQUI_HIERARCHY_READ" - der liefert mir alles was ich brauche.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,
black_adept hat geschrieben:1.) Was ich definitiv unterlassen würde ( und ich hasse auch SAP jedesmal, wenn ich sowas sehe ) ist einen Parameter mittels "USING" zu übergeben und ihn dann trotzdem zu ändern.

2.) Zum Aufbau einer Equihierarchie nehm ich immer den FB "EQUI_HIERARCHY_READ" - der liefert mir alles was ich brauche.
zu 1.)
oh weiha, jetzt habe ich mir aber was geleistet, natürlich nimmt man CHANGING, damit es deutlich wird, was man damit macht.

zu 2.)
jawoll, lass man SAP ran!!

Gruß
babap

Vergleichbare Themen

3
Antw.
6412
Views
interne Tabelle an Form übergeben
von Andrzej » 17.05.2017 14:14 • Verfasst in ABAP® für Anfänger
5
Antw.
2523
Views
Interne Tabs an Form übergeben
von Gast » 06.04.2005 11:24 • Verfasst in ABAP® für Anfänger
46
Antw.
10819
Views
Tabelle an form übergeben
von Tgut » 07.02.2014 14:56 • Verfasst in ABAP® für Anfänger
2
Antw.
2003
Views
Nochmal Tabelle übergeben an Form
von Tgut » 12.09.2014 11:13 • Verfasst in ABAP® für Anfänger
1
Antw.
1019
Views

Aktuelle Forenbeiträge

Eclipse - warum/wann verwendet ihr es [nicht]
vor 10 Stunden von tar 21 / 1724
Dialog-Container mit Toolbar/Status
vor 12 Stunden von DeathAndPain gelöst 22 / 3141
Daten an Tabelle binden
vor 17 Stunden von Lukas Sanders 2 / 1029
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 602

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

Eclipse - warum/wann verwendet ihr es [nicht]
vor 10 Stunden von tar 21 / 1724
Dialog-Container mit Toolbar/Status
vor 12 Stunden von DeathAndPain gelöst 22 / 3141
Daten an Tabelle binden
vor 17 Stunden von Lukas Sanders 2 / 1029
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 602

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2602
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9187