Bestimmte Spalte einer bestimmten Zeile in einer itab

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

Bestimmte Spalte einer bestimmten Zeile in einer itab

Beitrag von DonBosca (ForumUser / 5 / 0 / 0 ) »
Hallo zusammen,

sitze gerade wieder vor einem Problem. Ich generiere erst zur Laufzeit des Reports die benötigten itabs. Klappt ganz gut. Habe es in etwa so wie in der F1-Hilfe aufgezogen.

Code: Alles auswählen.

PARAMETERS: dbtab(10) TYPE c, 
            rows      TYPE i DEFAULT 100. 

DATA dref TYPE REF TO data. 

FIELD-SYMBOLS: <table> TYPE ANY TABLE, 
               <wa>    TYPE ANY, 
               <comp>  TYPE ANY. 

TRY. 
    CREATE DATA dref TYPE STANDARD TABLE OF (dbtab) 
                          WITH NON-UNIQUE DEFAULT KEY. 
    ASSIGN dref->* TO <table>. 
    SELECT * 
           FROM (dbtab) UP TO rows ROWS 
           INTO TABLE <table>. 
    LOOP AT <table> ASSIGNING <wa>. 
      DO. 
        ASSIGN COMPONENT sy-index 
               OF STRUCTURE <wa> TO <comp>. 
        IF sy-subrc = 0. 
          WRITE / <comp>. 
        ELSE. 
          EXIT. 
        ENDIF. 
      ENDDO. 
      ULINE. 
    ENDLOOP. 
  CATCH cx_sy_create_data_error. 
    WRITE 'Wrong Database!'. 
ENDTRY. 
Nun stehe ich aber vor dem Problem, dass ich in der itab, nachdem ich über einen SELECT Daten reingeschaufelt habe, mir eine bestimmte Zeile auslese. Mich interessiert nun der Wert dieser bestimmten Spalte. Diese Splate heißt zum Glück bei allen in diesem Fall dynamisch angelegten itabs gleich. Dies muss also nicht gesondert berücksichtigt werden :)

Ich habe probiert, dass Problem mit einem weiteren Feldsymbol zu lösen. Leider meckert die Systaxprüfung nicht, es dumpt auch nicht, aber dieses dritte Feldsymbol wird nicht gefüllt. Und somit auch nicht meine Hilfsvariable, die diesen Wert speichern soll. Das Ganze sieht in etwa so aus.

Code: Alles auswählen.

create data wa like line of <table>.
assign wa->* to <wa>.
assign component 'xyz' of structure <wa> to
<wa_2>.

read table <table> index 100 assigning <wa>.
move <wa_2> to v_xyz.
Das Feldsymbol <wa> wird mit der richtigen Zeile gefüllt. <wa_2> leider bekommt nichts zugewiesen.

Was kann man da machen?

Danke für die Antworten oder Denkanstöße im voraus.

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


Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
verwendest Du nur hier im Beispiel Kleinbuchstaben für Feld 'xyz' oder auch in Deinem Report.
SAP mag an dieser Stelle keine Großbuchstabenkonvertierung durchführen und findet dann das Feld nicht...

/Nachtrag:
SAP konvertiert beim ASSIGN keine Literale oder Feldinhalte. Die müssen bereits in Großbuchstaben vorliegen.
Zuletzt geändert von ereglam am 19.10.2005 15:55, insgesamt 1-mal geändert.
Gruß
Ereglam


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

Beitrag von DonBosca (ForumUser / 5 / 0 / 0 ) »
Hi,

ein erster Erfolg ist zu verbuchen. Du hattest mit Deinem Verdacht recht. Ich hatte XYZ geschrieben. Er möchte aber lieber xyz. Nun habe ich aber das Problem, dass er dumpt, da das Feldsymbol <wa_2> lt. ihm nicht zugewiesen ist. Ich habe aber

Code: Alles auswählen.

assign component 'xyz' of structure <wa> to
<wa_2>. 
mit drin. Was will er denn jetzt?

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
:?:
poste mal bitte Deinen Quelltext.

PS:
Sollte ich mich missverständlich ausgedrückt haben, hier noch einmal die Klarstellung:
SAP arbeitet bei den dynamischen Zuweisungen nur dann verlässlich, wenn die Felder, Tabellen, etc. in Literalen und Variablen in Großbuchstaben angegeben sind!
Ab 4.7 scheint es stellenweise auch mit Kleinbuchstaben zu funktionieren... deshalb lieber immer mit Großbuchstaben arbeiten...
Gruß
Ereglam


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

Beitrag von DonBosca (ForumUser / 5 / 0 / 0 ) »
Hmm,

dann war ich mit den Großbuchstaben doch nicht verkehrt :?
Anbei der der Auszug aus dem Quelltext:

Code: Alles auswählen.

Data:
t_dyntable type ref to data,
wa_t_dyntable type ref to data,
wa_t_dyntable_2 type ref to data,
v_value type i.
v_index type i.

field-symbols:
<t_dyntable> type table,
<wa_t_dyntable> type any,
<wa_t_dyntable_2> type any.

...

create data t_dyntable type table of (dbtab).
assign t_dyntable->* to <t_dyntable>.
create data wa_t_dyntable like line of <t_dyntable>.
assign wa_t_dyntable->* to <wa_t_dyntable>.
assign component 'DIMID' of structure <wa_t_dyntable> to <wa_t_dyntable_2>.

...

read table <t_dyntable> index v_index assigning
<wa_t_dyntable>.
move <wa_t_dyntable_2> to v_value.

...
Wenn ich nun den Spaltenname wieder groß schreibe, passiert es wieder, dass dem FS <wa_t_dyntable_2> kein Wert zugewiesen wird, obwohl das FS <wa_t_dyntable> gefüllt ist. Nach meinem Verständnis sollte doch nun <wa_t_dyntable_2> auf den Wert von 'DIMID' im FS <wa_t_dyntable> verweisen, oder?

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

das Problem liegt daran, dass Du den ASSIGN COMPONENT zur falschen Zeit ausführst.
Unter Feldsymbolen musst Du Dir Zeiger vorstellen, die auf Speicherbereiche verweisen.
Nun hast Du Dir mit 'CREATE DATA wa_t_dyntable LIKE LINE OF <t_dyntable>.' eine Referenz auf einen Datenbereich angelegt, den Du mit dem anschließenden ASSIGN auch über das Feldsymbol <wa_t_dyntable> ansprechbar macht. Darauf setzt Du mit dem ASSIGN COMPONENT einen Zeiger auf das Feld DIMID! :!: !

Jetzt kommt Dein READ TABLE ... ASSIGNING, der mittels Feldsymbol <wa_t_dyntable> auf die aktuelle Zeile verweisen soll. Damit zeigt aber <wa_t_dyntable_2> immer noch auf das Feld DIMID der Datenreferenz wa_t_dyntable :!:

Fazit:
der ASSIGN COMPONENT darf demnach erst nach dem READ gesetzt werden oder du benutzt statt dessen
'READ TABLE <t_dyntable> INDEX v_index INTO <wa_t_dyntable>.'. Dann passt sogar <wa_t_dyntable_2>, weil Du das Ziel des Feldsymbols nicht verschoben hast.

Code: Alles auswählen.

Data: 
t_dyntable type ref to data, 
wa_t_dyntable type ref to data, 
wa_t_dyntable_2 type ref to data, 
v_value type i. 
v_index type i. 

field-symbols: 
<t_dyntable> type table, 
<wa_t_dyntable> type any, 
<wa_t_dyntable_2> type any. 

... 

create data t_dyntable type table of (dbtab). 
assign t_dyntable->* to <t_dyntable>. 
create data wa_t_dyntable like line of <t_dyntable>. 
assign wa_t_dyntable->* to <wa_t_dyntable>. 
* ACHTUNG: zeigt eigentlich auf wa_t_dyntable->DIMID. 
assign component 'DIMID' of structure <wa_t_dyntable> to <wa_t_dyntable_2>. 

... 

read table <t_dyntable> index v_index INTO <wa_t_dyntable>. 
move <wa_t_dyntable_2> to v_value. 

... 
Gruß
Ereglam


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

Beitrag von Gast ( / / 0 / 3 ) »
Hallo ereglam,

erst ein mal vielen vielen Dank für Deine freundliche Hilfe und Geduld :!:

Ich habe es nun mit Deinen Anmerkungen hinbekommen. Nachdem Du noch mal aufgezählt hast, wer auf wen und vor allem wann zeigt, war einiges klar.

Es hatte noch einen Moment an 'DIMID' gehackt, aber dies konnte ich durch das Ersetzen des Ausdrucks mit der Reihenfolge der Comp als Zahl lösen.

Ich danke Dir :D

Seite 1 von 1

Vergleichbare Themen

1
Antw.
2663
Views
bestimmte Spalte ausblenden
von nordlender » 07.07.2011 11:21 • Verfasst in Web-Dynpro, BSP + BHTML
2
Antw.
2283
Views
<field-symbols>: Wert einer bestimmten Spalte zuweisen
von Jura » 13.08.2004 14:06 • Verfasst in SAP - Allgemeines
4
Antw.
1349
Views
Interne Tabelle ab einer bestimmten Spalte anfangen zu befüllen möglich?
von tekko » 11.09.2020 15:00 • Verfasst in ABAP® für Anfänger
3
Antw.
4540
Views
Loop ab bestimmte Zeile
von autohandel7 » 13.09.2018 12:15 • Verfasst in ABAP® für Anfänger
1
Antw.
2698
Views
ALV: bestimmte Zeile färben
von Jimmy Chandra » 18.10.2005 16:43 • Verfasst in ABAP Objects®

Über diesen Beitrag


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

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.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141