Select Options

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

Select Options

Beitrag von robin1at (Specialist / 190 / 0 / 0 ) »
Hallo liebe Experten!

Habe ein Problem mit meinen Select Option´s.

Und zwar, wenn ich in meinem Programm die Selektionskriterien eingebe, haben diese sogut wie keinen Einfluß auf meine Ausgabe.

Ich möchte, wenn nichts eingegeben ist, daß alle Daten angezeigt werden, und wenn die Selektionskriterien erfüllt sind, die Selektierten Daten ausgeben werden.

Leider weis ich da im Moment nicht, wo mein Fehler liegt. Hoffe Ihr könnt mir wieder einmal helfen.

Danke

Robin

Code: Alles auswählen.


SELECT-OPTIONS: so_land FOR lfa1-land1,
                so_perio FOR bkpf-monat.

PARAMETERS pa_gj LIKE bseg-gjahr.

SELECT-OPTIONS: so_dlkz FOR zdlkz_t-zdlkz.

START-OF-SELECTION.
*##################

  SELECT zdlkz bezeichnung
  FROM zdlkz_t INTO CORRESPONDING FIELDS OF TABLE itab_zdlkz_t
  WHERE zdlkz IN so_dlkz.

SELECT a~lifnr a~land1 b~diekz b~belnr b~zuonr b~blart b~bukrs b~monat
         b~gjahr b~shkzg b~bschl b~dmbtr b~wrbtr
                 INTO CORRESPONDING FIELDS OF TABLE itab_sumla
                      FROM ( lfa1 AS a
                                  INNER JOIN bsak AS b
                                  ON a~lifnr = b~lifnr )
                                       WHERE bukrs IN ('1001')
                                       AND blart IN ('A1', 'A2', 'A3')
                                       AND land1 IN so_land
                                       OR land1 = space
                                       AND gjahr = pa_gj
                                       OR gjahr = space
                                       AND monat IN so_perio.
                                       OR monat = space.

 SELECT a~lifnr a~land1 b~diekz b~belnr b~zuonr b~blart b~bukrs b~monat
         b~gjahr b~shkzg b~bschl b~dmbtr b~wrbtr
                 APPENDING CORRESPONDING FIELDS OF TABLE itab_sumla
                      FROM ( lfa1 AS a
                                  INNER JOIN bsik AS b
                                  ON a~lifnr = b~lifnr )
                                       WHERE bukrs IN ('1001')
                                       AND blart IN ('A1', 'A2', 'A3')
                                       AND land1 IN so_land
                                       OR land1 = space
                                       AND gjahr = pa_gj
                                       OR gjahr = space
                                       AND monat IN so_perio.
                                       OR monat = space.

  IF sy-subrc <> 0.
    MESSAGE i819(3f).
*   Keine Daten im gewählten Zeitraum vorhanden
  ENDIF.

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


Re: Select Options

Beitrag von Gast ( / / 0 / 3 ) »
robin1at hat geschrieben: Ich möchte, wenn nichts eingegeben ist, daß alle Daten angezeigt werden, und wenn die Selektionskriterien erfüllt sind, die Selektierten Daten ausgeben werden.
Wieso fragst du immer auf gleich SPACE ab?
Schmeiß das überall raus, dass brauchst du nicht.

WHERE bukrs IN ('1001')
AND blart IN ('A1', 'A2', 'A3')
AND land1 IN so_land
AND gjahr = pa_gj
AND monat IN so_perio.

Gruß Hendrik

Beitrag von robin1at (Specialist / 190 / 0 / 0 ) »
Hallo Hendrik!

Danke für Deine Hilfe!

Habe das space rausgeschmissen. Das Problem liegt bei pa_gj.

Wenn ich hier z.B.: 2005 eingebe, werden auch älter Daten angezeigt. (2003, 2004, 2005)

...
and gjahr = pa_gj.

Wie könnte ich das anders machen? Der IN Operator funktioniert hier nicht, weil es keine bis Option gibt.

Danke

Robin

Beitrag von GastX (Specialist / 277 / 4 / 18 ) »
Kurz angenommen, die Abfragen auf Space wären nötig (siehe vorigen Poster), dann müsstest Du aber noch Klammern setzen.
Der Code

Code: Alles auswählen.

WHERE bukrs IN ('1001') 
AND blart IN ('A1', 'A2', 'A3') 
AND land1 IN so_land 
OR land1 = space 
AND gjahr = pa_gj 
OR gjahr = space 
AND monat IN so_perio. 
OR monat = space. 
hat zwei Punkte, einen nach so_perio und einen nach monat?
Angenommen, der nach so_perio wäre nicht da, dann wäre dein Code, da AND stärker als OR bindet, gleichbedeutend mit

Code: Alles auswählen.

WHERE 
( bukrs IN ('1001') AND blart IN ('A1', 'A2', 'A3') AND land1 IN so_land ) 
OR 
( land1 = space AND gjahr = pa_gj )
OR 
( gjahr = space AND monat IN so_perio) 
OR 
monat = space. 
Du hast aber wahrscheinlich

Code: Alles auswählen.

WHERE bukrs IN ('1001') 
AND blart IN ('A1', 'A2', 'A3') 
AND ( land1 IN so_land OR land1 = space ) "<<< 
AND ( gjahr = pa_gj OR gjahr = space )    "<<<
AND ( monat IN so_perio OR monat = space ) . 
gemeint, oder?
Gruß, Frank

Beitrag von GastX (Specialist / 277 / 4 / 18 ) »
Ups, da hat sich was überschnitten.
Poste doch nochmal dein aktuelles Coding.

Beitrag von robin1at (Specialist / 190 / 0 / 0 ) »
Hallo Frank!

Auch Dir danke für Deine Hilfe!

Das Problem liegt bei dem Parameter pa_gj.

Danke

Robin

Code: Alles auswählen.

SELECT-OPTIONS: so_land FOR lfa1-land1,
                so_perio FOR bkpf-monat.

PARAMETERS pa_gj LIKE bseg-gjahr.

SELECT-OPTIONS: so_dlkz FOR zdlkz_t-zdlkz.

START-OF-SELECTION.
*##################

  SELECT zdlkz bezeichnung
  FROM zdlkz_t INTO CORRESPONDING FIELDS OF TABLE itab_zdlkz_t
  WHERE zdlkz IN so_dlkz.

 SELECT a~lifnr a~land1 b~diekz b~belnr b~zuonr b~blart b~bukrs b~monat
          b~gjahr b~shkzg b~bschl b~dmbtr b~wrbtr
                  INTO CORRESPONDING FIELDS OF TABLE itab_sumla
                       FROM ( lfa1 AS a
                                   INNER JOIN bsak AS b
                                   ON a~lifnr = b~lifnr )
                                        WHERE bukrs IN ('1001')
                                        AND blart IN ('A1', 'A2', 'A3')
                                        AND land1 IN so_land
                                        AND gjahr = pa_gj
                                        AND monat IN so_perio.

 SELECT a~lifnr a~land1 b~diekz b~belnr b~zuonr b~blart b~bukrs b~monat
          b~gjahr b~shkzg b~bschl b~dmbtr b~wrbtr
                  APPENDING CORRESPONDING FIELDS OF TABLE itab_sumla
                       FROM ( lfa1 AS a
                                   INNER JOIN bsik AS b
                                   ON a~lifnr = b~lifnr )
                                        WHERE bukrs IN ('1001')
                                        AND blart IN ('A1', 'A2', 'A3')
                                        AND land1 IN so_land
                                        AND gjahr = pa_gj
                                        AND monat IN so_perio.

  IF sy-subrc <> 0.
    MESSAGE i819(3f).
*   Keine Daten im gewählten Zeitraum vorhanden
  ENDIF.

Beitrag von robin1at (Specialist / 190 / 0 / 0 ) »
Hallo liebe Experten!

Ich weis absolut nicht mehr weiter.
:roll:
Hat noch jemand einen Rat oder Tip für mich?

Danke

Robin

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Wenn ich das ganze jetzt richtig verstanden habe liegt dein Problem an deinem "pa_gj" bzw wenn du in diesen Paramter nichts eingibst.

In dem Fall gibts jetzt folgende Möglichkeiten:
1) Mach aus diesem Parameter ein Select-Option
2) oder

Code: Alles auswählen.

RANGES: range type bseg-gjahr.
IF NOT pa_gj IS INITIAL.
range-sign = 'I'.
range-option = 'EQ'.
range-low = pa_gj .
append range.
ELSE.
REFRESH range.
ENDIF.
*im select dann auf den range mit "IN" abfragen

Beitrag von Gast ( / / 0 / 3 ) »
Ich würde es auch mit Ranges machen, wie DeathGuardian es vorgeschlagen hat.

Eine andere Möglichkeit wäre noch vor dem Select eine Abfrage zu machen, ob dein Parameter leer ist und du dann das select ohne Bedingung auf diesen Parameter ausführst.
Sieht allerdings nicht so schön aus, wie mit Ranges!!

Beitrag von robin1at (Specialist / 190 / 0 / 0 ) »
Hallo Death und Gast!

Vielen Dank für die Hilfe!

Ja, mit dem Range hat es super funktioniert! :)

Jetzt habe ich aber noch ein anderes Problem. Weis gar nicht ob ich jetzt richtig verstanden werde.

Ich probiere es mal ...

Die Selektion läßt sich jetzt über das Jahr auch einschränken.

2005 funktioniert tadellos!

Wenn ich jetzt 2004 selektiere, bekomme ich den sy-subrc von 4.

[/code] IF sy-subrc <> 0.
MESSAGE i819(3f).
* Keine Daten im gewählten Zeitraum vorhanden
ENDIF.

Nur weis ich absolut nicht warum?

Die Daten zeigt mir der ALV dann trotzdem an, und die stimmen auch!

Warum bekomme ich hier plötzlich sy-subrc = 4???

Hoffe Ihr könnt mir nochmal weiterhelfen.

Danke

Robin

Beitrag von GastX (Specialist / 277 / 4 / 18 ) »
Vielleicht denke ich gerade zu simpel, aber Du hast in Deinen obigen Beispielen zwei Selects und dahinter eine Abfrage auf den sy-subrc.
So wie Du das schilderst würde ich vermuten, dass der erste Select einen sy-subrc = 0 zurückliefert und Daten in die itab-sumla stellt, der zweite Select nix findet und daher den sy-subrc mit 4 liefert.

Dann würde das weitere Coding zwar ein Ergebnis anzeigen können (nämlich das des ersten Select), du bekämst aber dennoch eine Fehlermeldung.

Gruß, Frank

Beitrag von robin1at (Specialist / 190 / 0 / 0 ) »
Hallo Frank!

Genauso ist es!

Aber warum stimmen dann die Daten die rauskommen?

Wo hat das Programm einen Fehler?

Danke

Robin

Beitrag von Gast ( / / 0 / 3 ) »
robin1at hat geschrieben:Aber warum stimmen dann die Daten die rauskommen?
Du hast nur in der Tabelle BSAK Daten die zu deiner Where-Bedingng passen. In Tabelle BSIK passen keine Daten zu deiner Where-Bedingung
robin1at hat geschrieben: Wo hat das Programm einen Fehler?
Du fragst nur den sy-subrc nach dem Select auf BSIK ab, nicht aber den von BSAK. Besser an dieser Stelle wäre es zu schauen ob die Tabelle itab_sumla Daten enthällt:

* Schauen ob Daten gelesen wurden
IF itab_sumla[] is initial.
MESSAGE i819(3f).
ENDIF.

wobei die []-Klammern expliziet den Tabelleninhalt abfragt und nicht die Kopfzeile betrachtet.

Gruß Hendrik

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

der Fehler besteht darin, dass Du Dir nicht den SY-SUBRC des ersten Selekt auf die BSAK merkst und nur dann eine Fehlermeldung bringst, wenn der zweite SELECT in die Hose geht.

Code: Alles auswählen.

  SELECT ... JOIN bsak...

  lv_subrc = sy-subrc.

  SELECT ... JOIN bsik...

* nur wenn beide kein Ergebnis liefern...
  IF sy-subrc <> 0 AND lv_subrc NE 0. 
    MESSAGE i819(3f). 
*   Keine Daten im gewählten Zeitraum vorhanden 
  ENDIF. 
alternativ würde ich einfach prüfen, ob denn die Tabelle itab_sumla überhaupt gefüllt ist:

Code: Alles auswählen.

IF lines( itab_sumla ) EQ 0. "eine Variante

IF itab_sumla[] IS INITIAL. " eine Weitere

DESCRIBE TABLE itab_sumla LINES sy-tfill."noch eine mit Systemfeld
IF sy-tfill EQ 0.

* etc.
Nachtrag: und wieder war ein Anderer schneller...
Gruß
Ereglam


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

Beitrag von robin1at (Specialist / 190 / 0 / 0 ) »
Hallo Hendrik und Ereglam!

DANKE!!!! :D

Ja, jetzt kapier ich es auch. :oops:

Vielen vielen Dank für Eure Hilfe!!!

Schöne Grüße

Robin

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1759
Views
select-options depend on select-options.
von dragospirnut1 » 19.07.2017 09:54 • Verfasst in ABAP® Core
10
Antw.
5789
Views
2 Select-Options zu einem für Select zusammenfügen
von manuk » 23.03.2005 11:02 • Verfasst in ABAP® Core
4
Antw.
17872
Views
Select nach Parameter & Select-Options
von doeme » 10.07.2012 16:37 • Verfasst in ABAP® für Anfänger
2
Antw.
3427
Views
SELECT - Options & SELECT Abfrage
von Mavrix » 14.05.2007 08:41 • Verfasst in ABAP® für Anfänger
2
Antw.
1909
Views
SELECT-OPTIONS
von Caro » 05.10.2004 12:04 • Verfasst in ABAP® Core

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 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 3 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 3 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