FREE_SELECTIONS_DIALOG als Subscreen

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

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
44 Beiträge • Vorherige Seite 3 von 3 (current)
44 Beiträge Vorherige Seite 3 von 3 (current)

Re: FREE_SELECTIONS_DIALOG als Subscreen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Gern geschehen!
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

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


Re: FREE_SELECTIONS_DIALOG als Subscreen

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Hi ADT,
ich muss heir nochmal das Thema aufwärmen, da es inhaltlich irgendwie dazugehört...

Ich habe das Problem, dass die Rückgabewerte/Ranges bzw. die Werte die ich über das perform auslese nicht im internen Format sondern unkonvertiert in die Ranges bzw. Where Tabellen zurückgegeben werden.
Bsp.: Ich füge die VBAK Tabelle hinzu und will für das Feld VBELN entsprechend die Suche einschränken. Wenn ich dann eine Nummer eingebe, z.B. 1234, wird diese in der Range als:

Code: Alles auswählen.

I EQ '1234'
'
und in der Where als:

Code: Alles auswählen.

( VBELN EQ '1234      ')
angezeigt.

So findet er natürlich nix, weil die Nummer intern mit führenden Nullen in der DB steht. Auf dem Screen zeigt er das Feld auch korrekt an und kann auch die Wertehilfe einblenden.

Das das ganze dynamisch sein soll, kann ich natürlich schlect jeden Wert aus der Range wieder manuell prüfen.

Hat jemand einen Tipp, ob man da was einstellen kann oder wie man das Problem lösen kann? Oder übersehe ich da was?

Edit:
Das Problem scheint sich auf die Einbindung als Subscreen zu beschränken. Benutze ich die beiden Bausteine im Report direkt, werden die Werte korrekt konvertiert zurückgegeben... Was aber leider noch keine Lösung für mein Problem ist.

Danke und Grüße,
Shapoc

Re: FREE_SELECTIONS_DIALOG als Subscreen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Ich würde mal drauf tippen, dass da aus irgendeinem Grund die Konvertierungsexits (==ALPHA) nicht durchlaufen werden.
Schau mal im Debugger, was genau den Unterschied beim Aufruf ausmacht. (FORM GEN_WHERE_CLAUSES)

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: FREE_SELECTIONS_DIALOG als Subscreen

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Hi,
also irrgendwie ist das merkwürdig. Ich komm mit dem Debugger weder in den perform noch in den Aufruf des Funktionsbausteines rein, er springt einfach drüber. :(

Ich habe als Work-around jetzt erstmal eine eigene Methode in meiner Klasse, welche die Ranges-Tabelle einmal nach dem Abschicken des Screens durchläuft und dann für jeden Wert den Baustein 'RS_CHECK_CONV_EX_2_IN' aufruft und in das interne Format konvertiert. Das scheint erstmal zu funktionieren, finde ich aber nicht so prickelnd.

Ich seh im Coding selbst auch keine Stelle, warum er die Konvertierung nicht durchlaufen sollte, wenn die Einbindung über einen Subscreen erfolgt...

Mein anderes Problem ist mir beim Testen aufgefallen: Durch die Einbindung als Subscreen mit dessen Subscreen 1106 habe ich ja auch die Darstellung als Select-Options, allerdings funktionieren die noch gar nicht wie gedacht. Bisher habe ich immer direkt auf dem Screen in das LOW-Feld einen Wert eingegeben. Wenn ich im Popup des Ranges LOW und High eingebe, werden diese Werte nicht zurück ins Dynpro/Subscreen geschrieben, sondern jeweils nur eine '0'. D.h. da gibt's noch ein Problem der Datenübergabe...

Re: FREE_SELECTIONS_DIALOG als Subscreen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
shapoc hat geschrieben:also irrgendwie ist das merkwürdig. Ich komm mit dem Debugger weder in den perform noch in den Aufruf des Funktionsbausteines rein, er springt einfach drüber. :(
Systemdebugging aktivieren (Im Debugger oben im Menü)
shapoc hat geschrieben:Mein anderes Problem ist mir beim Testen aufgefallen: Durch die Einbindung als Subscreen mit dessen Subscreen 1106 habe ich ja auch die Darstellung als Select-Options, allerdings funktionieren die noch gar nicht wie gedacht. Bisher habe ich immer direkt auf dem Screen in das LOW-Feld einen Wert eingegeben. Wenn ich im Popup des Ranges LOW und High eingebe, werden diese Werte nicht zurück ins Dynpro/Subscreen geschrieben, sondern jeweils nur eine '0'. D.h. da gibt's noch ein Problem der Datenübergabe...
Sorry, da muss ich leider passen.

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: FREE_SELECTIONS_DIALOG als Subscreen

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Hallo ADT,
konnte mich erst heute wieder dem Thema widmen. Also: Das Problem lässt sich noch weiter einschränken, und zwar tritt es speziell auf, wenn ich als Tabelle die VBAK oder VBAP in meinen Tree hinzufüge und von dort das Feld VBELN (Sales Document Number) auswähle). Bei anderen Feldern scheint die Konvertierung zu funktionieren.

Beim Debuggen habe ich den Fehler so weit eingegrenzt, dass ich die Form "FILL_FIELD_SEL_FROM_DYN" verdächtige. Dort wird die Länge des Feldes (45 Zeichen, für alle dynamisch die maximale Länge) und die Feldlänge (hier 10 Zeichen aus VBELN) verglichen und dann einfach diese ersten 10 Zeichen aus der Gesamtlänge von 45 Zeichen genommen. Da aber wie man sich denken kann bei einem numerischen Wert die eingegebenen Zahlen hinten stehen, werden halt nur die führenden Nullen zurückgeschrieben.

Warum das aber bei anderen Feldern funktioniert und hier nicht, konnte ich leider nicht herausfinden. Ich bin ratlos :(

Zusätzlich ist jetzt noch ein Dump aufgetreten, der bei einem "Quantity" Feld auftritt mit der Fehlermeldung: "ASSIGN_DECIMALS_WRONG_TYPE" wobei der Typ aber als "P" erkannt wurde und das assign in der Form "SHOW_ONE_LINE_TABC" trotzdem fehlschlägt. Das Datenelement ist als "QUAN" Länge 9 mit 4 Dezimalstellen definiert.

Falls noch jemand einen guten Tipp hat, wäre ich sehr dankbar.

Re: FREE_SELECTIONS_DIALOG als Subscreen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Die Domäne VBELN hat einen Konvertierungsexit dabei: ALPHA
Der bewirkt, dass bei der Eingabe einer ZAHL intern vorne die führenden Nullen reingeschrieben werden. Sobald aber auch nur ein Buchstabe drin vorkommt, passiert das nicht mehr. Da die Feldlänge INTERN auf 45 Zeichen steht werden ebensoviele Nullen reingeschrieben.
Aus irgendeinem Grund wird nun dem Konvertierungsexit die falsche(?) Feldlänge mitgegeben. Anstatt der Ausgabelänge 10 eben die 45.
Debug mal den Baustein CONVERSION_EXIT_ALPHA_INPUT und schau dir an welcher Datentyp da bei OUTPUT daherkommt.
Anhand von diesem wird nämlich die Feldlänge für die Aufbereitung bestimmt.
Dann könntest du noch das Ganze mit der "ohne Subscreen"-Variante vergleichen um herauszufinden wo da eventuell der Unterschied ist.

Die "Quantity"-Felder haben meist auch ein "Einheiten"-Feld dabei. Ich vermute, dass der FREE_SELECTIONS_DIALOG damit nicht umgehen kann.
Funktionierts in der "ohne Subscreen"-Variante?

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: FREE_SELECTIONS_DIALOG als Subscreen

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Das Schlimme ist ja, dass beide "Probleme" in der Report-Variante funktionieren. VBELN wird korrekt zurückgegeben und auch die Quantity-Werte werden mit Trennzeichen und Dezimalstellen dargestellt.
Ich versuche mal, den Konvertierungsbaustein entsprechend auf Unterschiede zu debuggen...

Re: FREE_SELECTIONS_DIALOG als Subscreen

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Tatsächlich kommt er im Report in den Konvertierungsbaustein mit INPUT und OUTPUT jeweils schon in der Länge 10 und schreibt dort dann auch die Nummer innerhalb der 10 Zeichen. Im Dynpro kommt er mit INPUT 10 und OUTPUT 45 Zeichen rein und dort schreibt er die Nummer dann halt nach hinten.

Re: FREE_SELECTIONS_DIALOG als Subscreen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Kannst du zum Aufrufer des Konvertierungsbaustein zurückspringen (F7; Systemdebugging aktiv)?
Wenn du in einem Verarbeitungsblock des FREE_SELECTIONS_DIALOG (oder der beteiligten Komponenten; ALV, Tree usw.) landest, solltest du herausfinden können wer da für die falsche Feldlänge verantwortlich ist.
Wenn du aber in der Dynproverarbeitung landest passt irgendwas im Dynpro nicht. Eventuell hast du was beim Kopieren des Dynpros vergessen.
Ich befürchte aber ehe, dass der eingebundene Subscreen einen Fehler hat. Normalerweise macht die SAP meistens zwei unterschiedliche Screen, einen für die Vollbildanzeige und einen anderen für die Einbindung als Subscreen. Ich vermute dass sich die beiden bei einigen Einstellungen unterscheiden und daher die Verarbeitung schief läuft. Da wirst du leider dann nicht mehr viel machen können.

lg ADT

EDIT:
Da gibt es ja auch einen FREE_SELECTIONS_INIT Baustein zum FREE_SELECTIONS_DIALOG. Wie oft rufst du den im Programlauf auf?
Wenn man sich das Coding http://scn.sap.com/thread/1404455 anschaut, werden beide Bausteine nur einmal aufgerufen:

Code: Alles auswählen.

IF gs_sel-selid IS INITIAL.
Möglich, dass du die Bausteine mehrmals aufrufst und du deswegen die Feldlänge immer zurücksetzt.
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: FREE_SELECTIONS_DIALOG als Subscreen

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Hi,
also die Aufrufe sollten eigentlich nicht das Problem sein, beide Bausteine rufe ich nur einmalig beim Initialisieren meines Dynpros auf, danach läuft alles im Subscreen 2000 ohne expliziten Aufruf.

Beim Debuggen komme ich zwar mit F7 jeweils einen Call nach oben, allerdings nur bis zum Aufruf "TAKE_ONE_LINE_TC", der anscheinend aus einem generierten Modul "&_LINK_%%DYN001" aufgerufen wird und den Parameter "P_LOW" und "P_HIGH" reingereicht bekommt. Hier hat dieser bereits die Länge 45, aber ich sehe leider nicht, wo dieser initial definiert wird.

Ich habe mal versucht den Call Stack rauszukopieren:

Code: Alles auswählen.

FUNCTION CONVERSION_EXIT_ALPHA_INPUT SAPLALFA		LALFAU01
FORM	 CONVERT_EX_2_IN	     RSDYNSS0		RSDYNSS0
FORM	 TAKE_ONE_LINE_TABC	     SAPLALDB		LALDBF02
FORM	 TAKE_ONE_LINE_TC	     SAPLALDB		LALDBF02
FORM	 %_LINK_%%DYN001	     SAPLSSEL		SAPLSSEL
MODULE (PAI) PAI_3010_LOOP	     SAPLALDB		LALDBI02
FUNCTION  RS_COMPLEX_SELECTION       SAPLALDB		LALDBU02
FORM	 MULTIPLE_SELECTIONS	     RSDBRUNT		RSDBRUNT
FORM	 OK_CODE_J	             RSDBRUNT		RSDBRUNT
FORM	 %_OK_CODE_1000	             RSDBRUNT		RSDBRUNT
MODULE (PAI) %_OK_CODE_1000	     SAPLSSEL		<REPINI>

Re: FREE_SELECTIONS_DIALOG als Subscreen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Debugge mal durch die Formroutine TAKE_ONE_LINE_TABC (Programm SAPLALDB bzw. Funktionsgruppe ALDB).

Besonders der Abschnitt

Code: Alles auswählen.

IF GLCOMPLEX-FREE_SELECTIONS EQ SPACE.
sieht interessant aus.

Weiters wäre zu prüfen ob der Parameter P_LOW sich zwischen den Aufrufen (mit und ohne Subscreen) unterscheidet.

Meine Vermutung ist...
... dass der Parameter P_LOW immer die Länge 45 hat
UND
... dass der Wert GLCOMPLEX-FREE_SELECTIONS ohne Subscreen den Wert 'X' hat, aber mit Subscreen nicht.

Der Wert wird über die Formroutine INIT_SOME_THINGS bzw. den Funktionsbaustein RS_COMPLEX_SELECTION gesetzt.
Ich vermute weiter, dass der Parameter aus irgendeinem Grund von FREE_SELECTIONS_INIT bzw. FREE_SELECTIONS_DIALOG nicht richtig durchgereicht wird, wenn die Subscreen-Verarbeitung ausgewählt wird.

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: FREE_SELECTIONS_DIALOG als Subscreen

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Hi,
also deine Vermutung sind allesamt vollkommen richtig... leider finde ich keine Möglichkeit dieses Feld irgendwo zu setzen. Habe es jetzt versucht, das globale Feld in GLCOMPLEX-FREE_SELECTIONS und über DYNS-SEL_SCREEN_FLAG zu setzen, aber beides ohne Auswirkungen.

Re: FREE_SELECTIONS_DIALOG als Subscreen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Wie ich schon gesagt hab:
Schau dir (im Debugger) an wie der Funktionsbaustein RS_COMPLEX_SELECTION bzw die Formroutine INIT_SOME_THINGS von FREE_SELECTIONS_* aus aufgerufen werden.

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

1
Antw.
644
Views
Selections Screen
von luk4s » 16.11.2017 14:44 • Verfasst in ABAP® für Anfänger
0
Antw.
1848
Views
Probleme Beim Subscreen im Subscreen
von dimes » 07.03.2007 14:50 • Verfasst in Dialogprogrammierung
4
Antw.
5059
Views
Instanz-Methode FREE
von Frank Zet. » 15.06.2005 09:00 • Verfasst in ABAP Objects®
12
Antw.
4790
Views
Free selection dynamisch???
von c oco » 21.04.2015 08:48 • Verfasst in ABAP® für Anfänger
2
Antw.
2323
Views
FREE MEMORY ohne Parameter-ID
von Tellerchen58 » 14.08.2012 11:23 • 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

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

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

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140