Select-Statement

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

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

Select-Statement

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

der Ist-Zustand sieht wie folgt aus:

Code: Alles auswählen.

FORM select_data. "Selektion der Daten aus Datenbank-Tabelle

  SELECT * FROM /eas/zebghprot INTO CORRESPONDING FIELDS OF TABLE gt_zebghprot
          WHERE kundenr      = ls_zebghprot-kundenr
          AND datum          = ls_zebghprot-datum
          AND dokid          = ls_zebghprot-dokid
          AND barcodenr      = ls_zebghprot-barcodenr
          AND kassenzeichen  = ls_zebghprot-kassenzeichen
          AND dokart         = ls_zebghprot-dokart
          AND status         = ls_zebghprot-status
          AND serkenn        = ls_zebghprot-serkenn
          AND aktion         = ls_zebghprot-aktion.


ENDFORM.                    "select_data
Ich möchte also Daten selektieren, die eine Filtrierung durch die WHERE-Bedingung erhalten.
Soweit keine große Sache (...)
Nun soll es allerdings so sein, dass ich in der Selektionsmake auch ein Ergebnis erhalten möchte,
wenn ich z.B. nur ein Datum oder eine Kundennummer eingebe.
OR passt an dieser Stelle aber natürlich nicht, weil dann keine bedingte Filterung mehr möglich ist (Z.B. Kundennummer und Datum in Abhängigkeit zueinander).

Was schlagt ihr mir für eine Lösung vor?
Wahrscheinlich habe ich auch einfach nur ein montagliches Brett vor dem Kopf.

Schon einmal vielen Dank im Voraus! :)

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


Re: Select-Statement

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
hi!

Was du brauchst sind RANGE-Tabellen bzw. SELECT-OPTIONS auf dem Selektionsschirm.
Statt dem = in der WHERE Klausel wird dann der IN Operator verwendet.
--> Mehr dazu in der ABAP-Hilfe

lg ADT

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

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: Select-Statement

Beitrag von Chilledkroete (ForumUser / 42 / 5 / 0 ) »
Hallo und erstmal vielen Dank für die schnelle Antwort.

Ich habe mit die ABAP-Hilfe dazu einmal durchgelesen.
Wenn ich das soweit richtig verstanden habe, muss ich erstmal die FORM-Routine wieder rückgängig machen,
da ein SELECT-OPTIONS lokal nicht erlaubt sind.

Dann würde mein Coding als Selektions-Part wie folgt aussehen:

Code: Alles auswählen.

  SELECT-OPTIONS kundenr FOR ls_zebghprot-kundenr
                 datum FOR ls_zebghprot-datum
                 dokid FOR ls_zebghprot-dokid
                 barcodenr FOR ls_zebghprot-barcodenr
                 kassenzeichen FOR ls_zebghprot-kassenzeichen
                 dokart FOR ls_zebghprot-dokart
                 status FOR ls_zebghprot-status
                 serkenn FOR ls_zebghprot-serkenn
                 aktion for ls_zebghprot-aktion.
  
  SELECT * FROM /eas/zebghprot INTO CORRESPONDING FIELDS OF TABLE gt_zebghprot
          WHERE kundenr      IN ls_zebghprot-kundenr
          AND datum          IN ls_zebghprot-datum
          AND dokid          IN ls_zebghprot-dokid
          AND barcodenr      IN ls_zebghprot-barcodenr
          AND kassenzeichen  IN ls_zebghprot-kassenzeichen
          AND dokart         IN ls_zebghprot-dokart
          AND status         IN ls_zebghprot-status
          AND serkenn        IN ls_zebghprot-serkenn
          AND aktion         IN ls_zebghprot-aktion.
Könnte das soweit stimmen?
Kann gerade nicht testen - System down :P

Re: Select-Statement

Beitrag von Chilledkroete (ForumUser / 42 / 5 / 0 ) »
Nicht nachgedacht - ich muss für jedes Attribut ein eigenständiges Select-Options machen...

Re: Select-Statement

Beitrag von Chilledkroete (ForumUser / 42 / 5 / 0 ) »
Dann fällt mir noch gerade auf, dass das mit der lokalen Struktur problematisch werden dürfte.
Ich stehe wohl immer noch auf dem Schlauch.

Re: Select-Statement

Beitrag von Chilledkroete (ForumUser / 42 / 5 / 0 ) »
Um es einmal an zwei Attributen festzumachen.

Code: Alles auswählen.

SELECT-OPTIONS kundenr FOR ls_tab-kundenr.
SELECT-OPTIONS datum FOR ls_tab-datum.

SELECT * FROM dbtab INTO gt_tab
WHERE kundenr IN ls_tab-kundenr
AND datum IN ls_tab_daum.
Wie muss es richtig lauten?

Re: Select-Statement

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
hi!

Code: Alles auswählen.

SELECT-OPTIONS so_kunnr FOR ls_tab-kundenr.
SELECT-OPTIONS so_datum FOR ls_tab-datum.

SELECT * FROM dbtab INTO gt_tab
WHERE kundenr IN so_kunnr
AND datum IN so_datum.
Damit man den Unterschied besser erkennt, hab ich die Variablen umbenannt.

Du kannst aber auch weiterhin eine FORM-Routine (oder auch Funktionsbaustein/Methode verwenden)

Code: Alles auswählen.

TYPE: tr_kunnr TYPE RANGE OF datentyp.

FORM select_data USING lr_kunnr TYPE tr_kunnr.
...
ENDFORM.

PERFORM select_data USING so_kunnr.
Wichtig ist, dass bei der Typdefinition der tatsächliche (DDIC) Datentyp verwendet werden muss. Für Funktionsbausteine/Methoden kann man diese Rang-Typ-Definition auch im DDIC erstellen. Einfach in der SE11 einen Tabellentyp anlegen und unter "Bearbeiten->Als Ranges Tabellentyp definieren"
Schau aber vorher nach, oft gibt es schon einen entsprechenden Range-Typ im DDIC (Verwendungsnachweis auf den Datentyp und nach "Tabellentypen" suchen)

lg ADT
Zuletzt geändert von a-dead-trousers am 01.07.2013 14:34, insgesamt 2-mal geändert.
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: Select-Statement

Beitrag von McCauchy (ForumUser / 14 / 0 / 0 ) »
Select-options sind wie Parameter zu behandeln, heißt, durch ein Komma trennen und du musst nicht in jeder Zeile Select-Options schreiben.
Hinter dem FOR schreibst du einfach am besten den Eintrag aus der zu selektierenden Liste, also

Code: Alles auswählen.

SELECT-OPTIONS kundenr FOR dbtab-kundenr
Und hinter dem IN steht dann der Name der Select-Option also

Code: Alles auswählen.

WHERE kundenr IN kundenr
Dann sollte es klappen.

Re: Select-Statement

Beitrag von Chilledkroete (ForumUser / 42 / 5 / 0 ) »
Danke ADT ! :)

Dank deiner weiteren Erläuterung habe ich es nun, so glaube ich, verstanden.
Vor allem mit der klaren Unterscheidung der Variablen macht es den Sinn dahinter noch einmal deutlich.

Einen Aspekt habe ich von meiner Seite aus soweit nur noch nicht bedacht.
Unter der Verwendung von Select-Options ist es ja ähnlich bis gleich mit einer Verwendung von Parameters- es erscheint eine Selektionsmaske.

Soweit ich das richtig annehme, kann ich diese Maske nicht permanent in den Hauptscreen eines Dynpros einbetten.
Ist es eventuell möglich eine Selektionsmaske mit diesen Range-Tabellen in ein Dynpro zu implementieren?

Viele Grüße,
Hendrik

PS: Hoffentlich habe ich das verständlich genug auf den Punkt gebracht(...)

Re: Select-Statement

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Chilledkroete hat geschrieben:Unter der Verwendung von Select-Options ist es ja ähnlich bis gleich mit einer Verwendung von Parameters- es erscheint eine Selektionsmaske.
Soweit ich das richtig annehme, kann ich diese Maske nicht permanent in den Hauptscreen eines Dynpros einbetten.
Ist es eventuell möglich eine Selektionsmaske mit diesen Range-Tabellen in ein Dynpro zu implementieren?
Ich neheme an du willst sowas in der Art oben Selektionsmaske und unten z.B. Alv-Grid machen oder?
Ob es überhaupt funktioniert ein Selektionsdynpro so ohne weiteres in den Subscreen-Bereich eines anderen Dynpros einzubetten, weiß ich jetzt nicht genau. Ich glaub ich hab das mal versucht und es hat nicht so geklappt wie ich mir das vorgestellt hab. Vielleicht gibts ja hier im Forum schon was zu dem Thema oder auf Tricktresor.
Was du aber machen kannst ist folgendes:
Mithilfe der Befehle SELECTION-SCREEN BEGIN OF SCREEN und SELECTION-SCREEN END OF SCREEN am Anfang bzw. Ende deiner Parameterliste kannst du eine bestimmte Dynpro-Nummer vergeben und dieses dann z.B. mit CALL SCREEN bzw. CALL SELECTION-SCREEN wann immer du es brauchst aufrufen. Mit den Zusätzen STARTING AT und ENDING AT kannst du sogar ein Popup-Fenster daraus machen.

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: Select-Statement

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
a-dead-trousers hat geschrieben:Mithilfe der Befehle SELECTION-SCREEN BEGIN OF SCREEN und SELECTION-SCREEN END OF SCREEN am Anfang bzw. Ende deiner Parameterliste kannst du eine bestimmte Dynpro-Nummer vergeben und dieses
dann als SubScreen in das Hauptdynpro einbinden. Das ganze funktioniert eigentlich sehr gut, man muss nur aufpassen alles global im TOP-Include zu definieren.
Gruß Hendrik

Re: Select-Statement

Beitrag von Chilledkroete (ForumUser / 42 / 5 / 0 ) »
Guten Morgen zusammen.

Vielen Dank für die beiden Antworten!

Meine Absicht habt ihr auf jeden Fall richtig verstanden.
Genau das habe ich vor, also, dass ein ALV-Grid in einem Custom-Control unterhalb auf dem Haupt-Dynpro und oberhalb die Selektion ist.
Das hat dann natürlich den Vorteil, dass man über einen Button mittels Funktionscode über eine CASE-Abfrage fortlaufend andere Suchkriterien auswählen und sich direkt anzeigen lassen kann. Daraus entsteht dann ein halbwegs interaktives "Programm".

Diese Vorstellung konnte ich auch schon soweit umsetzen.
Eine Interaktivität und Funkionalität ist also bereits gegeben.

Nur besteht meine Selektion eben aus einem einfachen Select-Statement, ohne, dass die Eingabekriterien, also Variablen einen Bezug untereinander haben.
Ich werde versuchen auf der Ebene des Haupt-Dynpros einen Subscreen-Bereich einzurichten und dann dort das Selection-Screen einzubetten.

Sobald ich mehr weiß, melde ich mich wieder.

In diesem Sinne aber schon mal vielen Dank!
Es ist wirklich toll zu sehen, wie stark der Unterstützungsgrad hier ist.
Man lernt einfach deutlich mehr, da Lösungsmöglichkeiten gut beschrieben werden.

Und ABAP ist ja nunmal eine eigenständige Welt ;)

Re: Select-Statement

Beitrag von Chilledkroete (ForumUser / 42 / 5 / 0 ) »
Na klasse, irgendwie habe ich auch an dieser Stelle meine Probleme, obwohl ich bereits vor ca. einem viertel Jahr einen Subscreen implementiert habe.

Also ich bin wie folgt vorgegangen:

- Anlegen eines Subscreen-Bereichs innerhalb des Screen-Painters mit dem Namen "SUB"
- Aufruf Subscreen in Hauptdynpro 100
-- PBO: CALL SUBSCREEN SUB INCLUDING sy-repid '200'.
-- PAI: CALL SUBSCREEN SUB.
- Im Dynpro 200 "MODULE STATUS_0200" setzen
- in der PAI-Ablauflogik dann noch folgendes:

Code: Alles auswählen.

WHEN 'EXECUTE'.    
      SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
      SELECT-OPTIONS so_kdnr FOR ls_tab-kundenr.
      SELECT-OPTIONS so_datum FOR ls_tab-datum.
      SELECTION-SCREEN END OF SCREEN 200.

      SELECT * FROM dbtab INTO CORRESPONDING FIELDS OF TABLE gt_tab
              WHERE kundenr      IN so_kdnr
              AND datum          IN so_datum.
Also mein Coding kann derzeit nicht einmal mehr generiert werden.
Habe ich etwas vergessen oder generell falsch umgesetzt?

Re: Select-Statement

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

nun bin ich doch mit den Ideenanstößen auf eine Lösung gekommen.

Natürlich muss der Selection-Screen für den Subscreen-Bereich außerhalb des Haupt-Dynpros definiert werden,
also somit außerhalb des PAIs.

Die entsprechende Definition bleibt so stehen.

Geschlossen und gelöst. :)

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1354
Views
problem mit Select - Statement
von liberado » 31.07.2007 08:26 • Verfasst in ABAP® für Anfänger
2
Antw.
1372
Views
Punktoperator im Select Statement?
von Tom_KN » 21.09.2006 10:11 • Verfasst in ABAP® Core
18
Antw.
9497
Views
ABAP 7.40 - SELECT-Statement
von ralf.wenzel » 05.03.2016 12:19 • Verfasst in ABAP® Core
6
Antw.
1270
Views
Select Statement mit inner und outer
von Bernd_AD » 08.06.2020 15:56 • Verfasst in ABAP® für Anfänger
7
Antw.
3161
Views
Problem mit dynamischen SELECT-Statement
von Falloutboy3k » 25.04.2007 08:55 • 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

Dialog-Container mit Toolbar/Status
vor 5 Stunden von DeathAndPain gelöst 22 / 2797
Daten an Tabelle binden
vor 10 Stunden von Lukas Sanders 2 / 875
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 430

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

Dialog-Container mit Toolbar/Status
vor 5 Stunden von DeathAndPain gelöst 22 / 2797
Daten an Tabelle binden
vor 10 Stunden von Lukas Sanders 2 / 875
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 430

Unbeantwortete Forenbeiträge

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