Weiterverarbeitung von Mehrfachselektion aus SELECT-OPTIONS

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

Weiterverarbeitung von Mehrfachselektion aus SELECT-OPTIONS

Beitrag von Patrick1982 (ForumUser / 15 / 1 / 0 ) »
Moin zusammen,

ich stehe vor folgendem Problem:
In einem Programm habe ich ein SELECTION-SCREEN, in welchem der Anwender mehrere Werte bzw. Ranges eingeben kann:

Code: Alles auswählen.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_kof_cu FOR ls_selectionscreen-kofiz.
SELECTION-SCREEN END OF BLOCK b1.
Gibt der Anwender nun zum Beispiel die zwei Ranges "A1" bis "A5" und "B2" bis "B9" ein, wird die Tabelle s_kof_cu wie folgt gefüllt:

Code: Alles auswählen.

| SIGN | OPTION | LOW | HIGH |
| I    | BT     | A1  | A5   |
| I    | BT     | B2  | B9   |
Nun möchte ich im weiteren Programmablauf einen SELECT bauen, der aus einer Datenbanktabelle alle Einträge mit den Werten aus der s_kof_cu selektiert.
"FOR ALL ENTRIES IN" funktioniert ja jetzt so leider noch nicht.
Wie formatiere ich meine itab nun um, dass alle Einzelwerte sichtbar werden, dass ich hieraus nachher einen sinnvollen SELECT bauen kann?

Hat jemand einen Tipp für mich?

Besten Dank und viele Grüße,
Patrick


Re: Weiterverarbeitung von Mehrfachselektion aus SELECT-OPTIONS

Beitrag von a-dead-trousers (Top Expert / 3590 / 124 / 933 ) »
Den Operator IN in der WHERE-CLause des SELECT Statements verwenden.
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.07
Basis: 7.40

Re: Weiterverarbeitung von Mehrfachselektion aus SELECT-OPTIONS

Beitrag von Radinator (ForumUser / 12 / 4 / 2 ) »
Ich hab da auch so ein ähnliches Problem bei einem meiner Reports gehabt. Dem User wird die Auswahl über Lieferantennummer und Materialnummer ermöglicht. Da ich für beides eine Range angegeben habe (also mit SELECT-OPTIONS) hab ich einen ellenlange Teil des Codes darauf "verwenschwendet" die möglichen Kombinationen
Lieferantennumnmer
- VON gefüllt + BIS nicht gefüllt,
- VON nicht gefüllt + BIS gefüllt,
- VON gefüllt + BIS gefüllt,
- VON gefüllt + BIS gefüllt
und Materialnummer
- VON gefüllt + BIS nicht gefüllt,
- VON nicht gefüllt + BIS gefüllt,
- VON gefüllt + BIS gefüllt,
- VON gefüllt + BIS gefüllt
(jeweils die Kombinationen davon) so abzuprüfen, dass bei einer Falscheingabe eine Fehlermeldung angezeigt und bei korrekter Eingabe die Daten für die Selektion aus der entsprechenden Tabelle gezogen werden.

Wenn nun der User meinetwegen 1 Lieferantennummer und/oder 1 Materialnummer angibt, dann kann das auch gemacht werden. Die große Hürde ist nur wenn etwa Lieferant VON+BIS und gleichzeitig aber ein Ausschluss definiert ist (VON 4711 BIS 4717 aber OHNE 4716). Wenn solche Eingaben gemacht werden dann kommt einfache eine Meldung von wegen "Komplexe Suchkriterien werden nicht unterstützt".

Leider findet man auch sogut wie keine vernünftigen Tutorials wie man die SELECT-OPTIONS in so einer Situation einsetzt :(. Daher musste ich mir hier diese Krücke bauen.

Re: Weiterverarbeitung von Mehrfachselektion aus SELECT-OPTIONS

Beitrag von Shortcut IT (ForumUser / 16 / 1 / 1 ) »
Hallo,
in den Funktionsbaustein F4_CONV_SELOPT_TO_WHERECLAUSE kannst du deine Select-Options reinkippen und kriegst eine aufbereitete WHERE-Klausel raus.

Re: Weiterverarbeitung von Mehrfachselektion aus SELECT-OPTIONS

Beitrag von black_adept (Top Expert / 3462 / 68 / 681 ) »
a-dead-trousers hat geschrieben:
12.01.2021 20:14
Den Operator IN in der WHERE-CLause des SELECT Statements verwenden.

Code: Alles auswählen.

SELECT ...  
WHERE kofiz IN s_kof_cu
WHERE kofiz IN s_kof_cu

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

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Weiterverarbeitung von Mehrfachselektion aus SELECT-OPTIONS

Beitrag von Patrick1982 (ForumUser / 15 / 1 / 0 ) »
Top, hat funktioniert, vielen Dank!

Re: Weiterverarbeitung von Mehrfachselektion aus SELECT-OPTIONS

Beitrag von DeathAndPain (Top Expert / 1490 / 165 / 335 ) »
Radinator hat geschrieben:
13.01.2021 09:20
Ich hab da auch so ein ähnliches Problem bei einem meiner Reports gehabt. Dem User wird die Auswahl über Lieferantennummer und Materialnummer ermöglicht. Da ich für beides eine Range angegeben habe (also mit SELECT-OPTIONS) hab ich einen ellenlange Teil des Codes darauf "verwenschwendet" die möglichen Kombinationen so abzuprüfen, dass bei einer Falscheingabe eine Fehlermeldung angezeigt und bei korrekter Eingabe die Daten für die Selektion aus der entsprechenden Tabelle gezogen werden.

Wenn nun der User meinetwegen 1 Lieferantennummer und/oder 1 Materialnummer angibt, dann kann das auch gemacht werden. Die große Hürde ist nur wenn etwa Lieferant VON+BIS und gleichzeitig aber ein Ausschluss definiert ist (VON 4711 BIS 4717 aber OHNE 4716). Wenn solche Eingaben gemacht werden dann kommt einfache eine Meldung von wegen "Komplexe Suchkriterien werden nicht unterstützt".

Leider findet man auch sogut wie keine vernünftigen Tutorials wie man die SELECT-OPTIONS in so einer Situation einsetzt :(. Daher musste ich mir hier diese Krücke bauen.
Mal abgesehen von Deiner Zusatzanforderung, "Falscheingaben" zu erkennen (wobei Du nicht näher erläutert hast, wann eine Eingabe bei Dir "falsch" ist), ist auch dieser Fall trivial mit dem IN-Operator abgedeckt. Da schreibst Du dann einfach:

Code: Alles auswählen.

WHERE LIFNR IN range_lieferant
  AND MATNR IN range_matnr
Das funktioniert bei all Deinen Fällen und auch dann, wenn z.B. bei der Materialnummer gar nichts eingegeben worden ist (denn eine leere RANGES-Tabelle ist eine Tautologie).

Re: Weiterverarbeitung von Mehrfachselektion aus SELECT-OPTIONS

Beitrag von Radinator (ForumUser / 12 / 4 / 2 ) »
Mit Falscheingaben war gemeint
- entweder das "VON" nicht gefüllt und das "BIS" gefüllt
- oder VON >= BIS
- oder "komplexe Suchriterien" (inklusive VON + exklusive VON-BIS / inklusive VON-BIS + exklusive VON / inklusive BIS + exklusive VON-BIS / inklusive VON-BIS + exklusive BIS)

Da man es dem User recht einfach macht solche Abfragen zu machen (Standard SAP Auswertungen schaffen das ja irgendwie) wollte ich das eben verhindern.

Der User soll die Möglichkeit haben entweder für eine
- einzelne Materialnummer
- einzelne Lieferantennummer
- einzelne Materialnummer und einzelnen Lieferant
- einzelne Materialnummer und mehrere Lieferant
- einzelne Lieferantennummer und einzelnen Materialnummer
- einzelne Lieferantennummer und mehrere Materialnummern
die Anfrage ausführen können. Ursprünglich war die Auswertung auch nur auf 1 Lieferantnnummer beschränkt. Aber wie es immer ist, die "Kunden" (in dem Fall die Kollegen aus dem Einkauf) wollten sich ihre Möglichkeiten offen halten. So kam es halt auch zu der Frage ob man z.B. von LF 4711 bis 4717 ohne 4716 für Material 1-999 ohne 200-400 das auch machen kann". Und da ich halt erst seit Oktober wirklich ABAP schreibe und (wie oben bereits geschrieben) bisher keinen Artikel/Guide gefunden habe wie man solche komplexen Suchkriterien befriedet, bin ich diesen Weg gegangen.

Re: Weiterverarbeitung von Mehrfachselektion aus SELECT-OPTIONS

Beitrag von a-dead-trousers (Top Expert / 3590 / 124 / 933 ) »
Falscheingaben bei Selektionsfeldern prüft der "Reportprozessor" automatisch.
VON nicht gefüllt, aber BIS gefüllt ist eine GÜLTIGE Eingabe und müsste daher händisch vor dem Ausführen (Event AT SELECTION-SCREEN) geprüft werden.

Einschränken der Möglichkeiten würde ich nicht machen, man kann das aber über den Funktionsbaustein SELECT_OPTIONS_RESTRICT dennoch tun. Siehe auch https://tricktresor.de/blog/eingabeopti ... chraenken/

Was die gewünschte Selektion der "Kollegen" betrifft: Die können die sich selbst nach ihren eigenen Wünschen zusammenstellen und dann auch abspeichern. Das ist eigentlich keine Aufgabe eines Entwicklers.
Z.B.:

Code: Alles auswählen.

| SIGN | OPTION | LOW   | HIGH   |
| I    | BT     | 4711  | 4717   |
| E    | EQ     | 4716  |        |

| SIGN | OPTION | LOW   | HIGH   |
| I    | BT     | 0     | 999    |
| E    | BT     | 200   | 400    |

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

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.07
Basis: 7.40

Re: Weiterverarbeitung von Mehrfachselektion aus SELECT-OPTIONS

Beitrag von Radinator (ForumUser / 12 / 4 / 2 ) »
Ok, dass ich hier den Begriff des "Falscheingabe" verwendet habe, sehe ich jetzt ein. Für mich ist (bedingt durch die Nomenklatur aus dem alten System) alles was nicht zu einer Datenausgabe führt (nicht vorhandene Lieferanten/Materialnummer, VON ungefüllt+BIS gefüllt) eine Falscheingabe. Da muss ich an meiner Denkweise arbeiten, daher danke für den Hinweis :D

Bezügelich deines dritten Punktes: Wie ich das in meinem (korrigierten) Post beschrieben habe, war die Selektion LF 4711 bis 4717 ohne 4716 für Material 1-999 ohne 200-400 nur ein anschauliches Beispiel. Es kann auch sein, dass die Abfrage LF 4711 bis 4717 für Material 1-999 oder LF 4711 für Material 1-999 ist. Ich will dem User nur die Felder zur Verfügung stellen und ihm dann die Freiheit lassen die Kombinationen so zu wählen wie er/sie es will.
Wenn ich nun so eine Selektionstabelle habe, wie du sie eben geschrieben hast, wie kann ich das dann in der SQL Abfrage verwenden? Natürlich unter der Voraussetzung, dass die Tabelle so

Code: Alles auswählen.

| SIGN | OPTION | LOW   | HIGH   |
| I    | BT     | 4711  | 4717   |

| SIGN | OPTION | LOW   | HIGH   |
| I    | BT     | 0     | 999    |
| E    | BT     | 200   | 400    |
oder so

Code: Alles auswählen.

| SIGN | OPTION | LOW   | HIGH   |
| I    | EQ     | 4711  |        |

| SIGN | OPTION | LOW   | HIGH   |
| I    | BT     | 0     | 999    |
aussehen kann.

Vielen Dank schon mal für deine Zeit!

Re: Weiterverarbeitung von Mehrfachselektion aus SELECT-OPTIONS

Beitrag von DeathAndPain (Top Expert / 1490 / 165 / 335 ) »
Na, wie gesagt, einfach mit dem IN-Operator in der WHERE-Bedingung! Dazu sind solche Ranges-Tabellen ja da, beliebig komplexe Selektionsbedingungen aufzunehmen, und der IN-Operator interpretiert die dann alle richtig und liefert die entsprechenden Ergebnisse.

Da können 100 Zeilen in der Tabelle stehen, gerne auch I und E gemischt, und das wird richtig ausgewertet. Sofern mindestens eine I-Zeile dabei ist, werden alle Zeilen mit I oder-verknüpft und die so gebildete Vereinigungsmenge wird dann mit allen E-Zeilen (sofern vorhanden) AND-verknüpft. Gibt es keine I-Zeile, dann werden eben nur alle E-Zeilen AND-verknüpft, und Du bekommst alle Ergebnisse, die keiner der Ausschlusszeilen entsprechen.

Bei Deinen beiden obenstehenden Beispielen wäre es wie folgt:

Beispiel 1: 0-199 zuzüglich 201-999 zuzüglich 4711-4717
Beispiel 2: 0-999 zuzüglich 4711

Aufpassen musst Du mit "ungleich". Davon kannst Du nur eine Zeile sinnvoll angeben, denn wenn Du sagst
I NE 1
I NE 2
dann ergibt die erste Zeile "alles außer 1" und die zweite Zeile "alles außer 2", und die Vereinigungsmenge ist dann alles. 😛 Willst Du mehrere Werte ausschließen, musst Du daher anstelle von I NE einfach E EQ nutzen. Dann funktioniert es.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
Radinator


Re: Weiterverarbeitung von Mehrfachselektion aus SELECT-OPTIONS

Beitrag von Radinator (ForumUser / 12 / 4 / 2 ) »
Ok der Punkt mit dem "IN-Operator in der WHERE-Bedingung" hab ich jetzt endlich verstanden! Ich dachte bisher halt immer der IN-Operator is halt "doof" und ich muss mir wie einen String zusammen bastlen der die ganzen Include Werte und eine zweite Zeile mit NOT IN + die exkludierten Werte mit Komma getrennt beinhalten.

Vielen, vielen Dank für diesen nützlichen Tipp!

Seite 1 von 1

Vergleichbare Themen

Select-Options Mehrfachselektion
von ChristianHo » 16.11.2015 11:45
select-options depend on select-options.
von dragospirnut1 » 19.07.2017 09:54
Select nach Parameter & Select-Options
von doeme » 10.07.2012 16:37
2 Select-Options zu einem für Select zusammenfügen
von manuk » 23.03.2005 11:02
SELECT - Options & SELECT Abfrage
von Mavrix » 14.05.2007 08:41