Dirty Assign und danach Änderung

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

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

Dirty Assign und danach Änderung

Beitrag von FelixFICO (ForumUser / 22 / 9 / 0 ) »
Liebes Forum,

ich möchte mit einem Dirty Assign eine Select Option aus dem Überprogramm ergänzen. Genau genommen ist es dasselbe Programm, nur ist ein Teil des Codes von SAP generiert, und an diesen komme ich anders nicht ran.

Ich bin bisher folgendermaßen vorgegangen (symbolisch):
RANGES: range FOR tcurr-gdatu.
FIELD-SYMBOLS: <tab> TYPE table.
range-sign = 'I'.
range-option = 'EQ'.
range-low = temp1.
range-high = temp2.
APPEND range.

ASSIGN ('(AQZZZ_CFM_QUERY=Z_CFM_FX_KURSE)SP$00004[]') TO <tab>.

IF <tab> IS ASSIGNED.
APPEND range TO <tab>.
ENDIF.

SP$00004 ist eine automatisch generierte SelectOption an die ich nicht rankomme. In dem Beispiel fülle ich die SelectOption SP$00004 auf dem Selektionsscreen mit einer Zeile. Im Debugger sehe ich nach dem ASSIGN genau diese Zeile unter dem Feldsymbol <tab>. D.h. die Zuweisung des Feldsymbols hat aus meiner Sicht geklappt. Nach dem APPEND sehe ich im Debugger, dass <tab> auf eine Tabelle mit zwei Zeilen zeigt. Die SelectOption SP$00004 hat im Debugger aber immer noch nur die eine ursprüngliche Zeile.

Sollte das Feldsymbol nicht ein Zeiger sein? Wie schaffe ich es, mit dem Append auf die SelectOption SP$00004 zu verändern?

Bin für jeden Input dankbar, da ich schon Stunden herumprobiere und einfach nicht weiterkomme...

Viele Grüße,
Felix

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


Re: Dirty Assign und danach Änderung

Beitrag von black_adept (Top Expert / 4087 / 126 / 940 ) »
Sieht eigentlich richtig aus .
Probier mal mit 2 Einträgen in der Selopt, ob dann im Debugger tatsächlich auf dem Feldsymbol 3 Zeilen kommen und in der Originalselopt 2 Zeilen stehen bleiben.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
FelixFICO

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Dirty Assign und danach Änderung

Beitrag von ST22 (Specialist / 279 / 43 / 41 ) »
...oder guckst du nur auf die Kopfzeile der Select-Option?
SP$00004[] -> Tabellenkörper
SP$00004 -> Kopfzeile

Grüße
Frank

Folgende Benutzer bedankten sich beim Autor ST22 für den Beitrag:
FelixFICO


Re: Dirty Assign und danach Änderung

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
ST22 hat geschrieben:...oder guckst du nur auf die Kopfzeile der Select-Option?
SP$00004[] -> Tabellenkörper
SP$00004 -> Kopfzeile
Dasselbe gilt übrigens auch für RANGE in dem Coding:

IF <tab> IS ASSIGNED.
APPEND LINES OF range[] TO <tab>.
ENDIF.

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

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: Dirty Assign und danach Änderung

Beitrag von FelixFICO (ForumUser / 22 / 9 / 0 ) »
black_adept hat geschrieben:Sieht eigentlich richtig aus .
Probier mal mit 2 Einträgen in der Selopt, ob dann im Debugger tatsächlich auf dem Feldsymbol 3 Zeilen kommen und in der Originalselopt 2 Zeilen stehen bleiben.
Habe ich probiert und es verhält sich genau so wie von Dir beschrieben. Das Feldsymbol zeigt dann auch 3 Zeilen und in der Select-Option bleiben zwei Zeilen stehen.

Re: Dirty Assign und danach Änderung

Beitrag von FelixFICO (ForumUser / 22 / 9 / 0 ) »
a-dead-trousers hat geschrieben:
ST22 hat geschrieben:...oder guckst du nur auf die Kopfzeile der Select-Option?
SP$00004[] -> Tabellenkörper
SP$00004 -> Kopfzeile
Dasselbe gilt übrigens auch für RANGE in dem Coding:

IF <tab> IS ASSIGNED.
APPEND LINES OF range[] TO <tab>.
ENDIF.
Danke für die Tipps! Ich war optimistisch dass das mein Fehler war, aber leider hat es nichts geholfen, da ich dann einen Dump bekommen habe. :-(

"Konvertierung von Typ "TABLE OF FLAT_STRUCTURE" nach Typ "FLAT_STRUCTURE" nicht unterstützt."

Re: Dirty Assign und danach Änderung

Beitrag von FelixFICO (ForumUser / 22 / 9 / 0 ) »
Ich habe jetzt nochmals weiter geforscht und ein seltsames Phänomen entdeckt.

Zunächst habe ich das ganze in einem Testreport ohne das ganze Drumherum probiert:

REPORT zftrm_test.
TABLES: tcurr.

SELECT-OPTIONS sp$00004 FOR tcurr-gdatu.

FIELD-SYMBOLS: <fs_struct> TYPE any,
<fs_value> TYPE any,
<fs_table> TYPE STANDARD TABLE.
ASSIGN ('(ZFTRM_TEST)SP$00004[]') TO <fs_table>.
ASSIGN ('(ZFTRM_TEST)SP$00004') TO <fs_struct>.
ASSIGN COMPONENT 'HIGH' OF STRUCTURE <fs_struct> TO <fs_value>.
MOVE '99999900' TO <fs_value>.
APPEND <fs_struct> TO <fs_table>.

In diesem Programm verhält sich alles wie erwartet. Die SELECT-OPTION sp$00004 hat nach der letzen Zeile zwei Einträge. Super!

Nun habe ich dasselbe auch in das generierten Coding als Exit eingebaut:

Die Deklaration der SELECT-OPTION ist im generierten Coding, aber genauso wie oben:
[...]
select-options SP$00004 for TCURR-GDATU.
[...]

Mein Coding im Exit ist auch das gleiche wie oben:

FIELD-SYMBOLS: <fs_struct> TYPE ANY,
<fs_value> TYPE ANY,
<fs_table> TYPE STANDARD TABLE.
ASSIGN ('(AQZZZ_CFM_QUERY=Z_CFM_FX_KURSE)SP$00004[]') TO <fs_table>.
ASSIGN ('(AQZZZ_CFM_QUERY=Z_CFM_FX_KURSE)SP$00004') TO <fs_struct>.
ASSIGN COMPONENT 'HIGH' OF STRUCTURE <fs_struct> TO <fs_value>.
MOVE '99999900' TO <fs_value>.
APPEND <fs_struct> TO <fs_table>.

Nach der letzten Zeile zeigt das Feldsymbol <fs_table> auf eine Tabelle mit zwei Einträgen. Die SELECT-OPTION SP$00004 hat aber immer noch nur einen Eintrag. :-( Ich kann mir das ehrlich gesagt nicht erklären, denn das Coding ist in beiden Fällen in allen Zeilen identisch!?! Allerdings bin ich jetzt kein so erfahrener Entwickler, vielleicht habe ich etwas übersehen?

Bin für jeden Input dankbar!

Viele Grüße,
Felix

Re: Dirty Assign und danach Änderung

Beitrag von FelixFICO (ForumUser / 22 / 9 / 0 ) »
Habe den Fehler gefunden. Mein Anfängerfehler und zwar der Klassiker, den man wohl schon in der ersten Programmierstunde lernt. :-)

Das Coding mit dem relevanten Select-Statement ist in einen Funktionsbaustein (/1BCDWB/SAPLIQG000000003002) ausgelagert. Die SELECT-OPTION SP$00004 gibt es aber wohl unter gleichem Namen auch im Hauptprogramm (AQZZZ_CFM_QUERY=Z_CFM_FX_KURSE). Jedenfalls habe ich immer die interne Tabelle des Hauptprogramms angesehen und nicht gecheckt, dass ich eigentlich ganz wo anders bin. Vor lauter Bäumen den Wald nicht mehr gesehen...

Wenn ich das Assign ändere geht es wie es soll (im Coding-Auszug aus meinem ersten Post):
ASSIGN ('(/1BCDWB/SAPLIQG000000003002)SP$00004[]') TO <tab>.

Es ist natürlich sehr unschön auf diesen generierten Programmnamen (/1BCDWB/SAPLIQG000000003002) aufzusetzen. Ich muss mal prüfen, ob der Name in allen Systemen nach dem Transport noch gleich bleibt, oder ob es schon auf dem Q-System einen anderen Namen gibt. Dann könnte ich das wohl vergessen. Falls es funktioniert werden ich es eventuell so machen, denn es ist nur eine kleine Auswertung. Immerhin weiß ich jetzt, wo der Fehler lag, denn das hat mir keine Ruhe bereitet.

Oder hat jemand einen Tipp wie man dies auch mit dem generierten Programmname konsistent hin bekommen könnte?

Wahrscheinlich werde ich das ganze wohl in ein eigenes Programm unterbringen müssen. Ist auch nicht viel Aufwand, nur wäre es in der Query (SQ01) schöner gewesen, denn dort befinden sich auch die anderen Queries zu dem Themenbereich um den es geht.

Danke an alle!

Viele Grüße,
Felix

Re: Dirty Assign und danach Änderung

Beitrag von black_adept (Top Expert / 4087 / 126 / 940 ) »
Hi Felix,

wenn du den Namen des generierten FuBa bzw. der zugehörigen Funktionsgruppe nicht sauber ableiten kannst, könntest du schauen, ob er sich evtl. im Callstack findet.
FuBa: SYSTEM_CALLSTACK

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
FelixFICO

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Dirty Assign und danach Änderung

Beitrag von FelixFICO (ForumUser / 22 / 9 / 0 ) »
black_adept hat geschrieben:Hi Felix,

wenn du den Namen des generierten FuBa bzw. der zugehörigen Funktionsgruppe nicht sauber ableiten kannst, könntest du schauen, ob er sich evtl. im Callstack findet.
FuBa: SYSTEM_CALLSTACK
Hi Stefan,

wow, danke für den Tipp! Der FuBa ist genau das was mir noch gefehlt hat, jetzt läuft es so wie es soll! :-)

Ich gebe nicht gerne auf, aber in dem Fall war ich Millimeter davor das ganze doch in einem eigenen Report zu verwirklichen.

Daher ein großes Danke für die Tipps! Tolles Forum! :D

Gruß,
Felix

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1647
Views
Dirty Assign
von allgrinder » 10.08.2015 11:14 • Verfasst in ABAP® für Anfänger
7
Antw.
1388
Views
AIF: Dirty assign in background funktioniert nicht?
von Romaniac » 02.01.2023 11:10 • Verfasst in ABAP® Core
3
Antw.
4234
Views
Dirty Assign auf Variablen einer Klasse
von jensschladitz » 17.01.2019 11:23 • Verfasst in ABAP® Core
5
Antw.
3016
Views
Dirty assign auf Feld in interner Tabelle mit Index
von Romaniac » 06.12.2019 12:31 • Verfasst in ABAP® Core
5
Antw.
7657
Views
Dynamischer ("Dirty") Assign
von Gast » 18.01.2006 11:26 • Verfasst in ABAP® Core

Ü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

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

Daten an Tabelle binden
Gestern von Bright4.5 1 / 511
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2146
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8742