Problem mit select

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

Problem mit select

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

Habe ein Problem mit meinem Select.

Und zwar funktioniert die Abfrage nach Monat und Jahr nicht.

Wenn ich zb: nur land eingebe, sehe ich die Daten mit Monat 1, Jahr 2006.

Gebe ich nur das Monat ein, oder das Jahr, oder beides, kommt nichts raus.

Hoffe Ihr könnt mir 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.

RANGES: range FOR bseg-gjahr.
IF NOT pa_gj IS INITIAL.
  range-sign = 'I'.
  range-option = 'EQ'.
  range-low = pa_gj.
  APPEND range.
ELSE.
  REFRESH range.
ENDIF.

  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 b~hkont
              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 in range
                         and monat IN so_perio.

  IF sy-subrc <> 0.
    lv_subrc = sy-subrc.
  ENDIF.

 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 b~hkont
              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 in range,
                         and monat IN so_perio.

  IF sy-subrc <> 0 OR lv_subrc <> 0.
    MESSAGE i819(3f).
*   Keine Daten im gewählten Zeitraum vorhanden / EXIT, weil Message
*   Typ i sonst Daten zeigen würde, die in einen der Joins wären !!!
    EXIT.
  ENDIF.

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


Beitrag von c oco (Specialist / 326 / 12 / 16 ) »
hallo robin,

was ist mit dem parameter pa_gj??? wo wird der gefüllt???

grüße coco

Beitrag von zzcpak (Expert / 673 / 5 / 68 ) »
interessante Variante um einen Parameter in eine SELECT-OPTION zu konvertieren ;-)

einfacher gehts vielleicht, wenn du PA_GJ gleich als SELECT-OPTION definierst.

Code: Alles auswählen.

SELECT-OPTIONS:  pa_gj FOR bseg-gjahr NO-EXTENSION NO INTERVALS.
wird dann angezeigt wie ein Parameter, kann aber gleich mit "IN" abgefragt werden im SELECT.

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

pa_gj wird beim range gefüllt.

Hallo Zzcpak!

Das habe ich schon gemacht, aber das stimmt dann leider auch nicht.

Das Problem sind monat und gjahr.

Weis schön langsam nicht mehr weiter.

Wenn ich es mit 2005 und 2006 debugge, werden beide mal die selben Felder gefüllt, nur daß bei 2006 der sy-subrc von join 1 plötzlich 4 ist und ich absolut keine ahnung habe wie er darauf kommt. :roll:

Ich glaube es muß irgendwie in der Where Bedingung noch abgefangen werden.

Vielen Dank für Eure Hilfe.

Hoffe Euch fällt noch was ein.

Beitrag von zzcpak (Expert / 673 / 5 / 68 ) »
ach so noch was.

in der WHERE-Klausel sollten vor den Feldnamen doch auch die Tabellen- bzw. Alias-Namen stehen

also statt

Code: Alles auswählen.

and land1 IN so_land 
sollte dann stehen

Code: Alles auswählen.

and a~land1 IN so_land 
Hier musst du natürlich aufpassen welches Feld zu welcher Tabelle gehört. Denke mal das ist der Fehler.

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
zzcpak hat geschrieben:interessante Variante um einen Parameter in eine SELECT-OPTION zu konvertieren ;-)

einfacher gehts vielleicht, wenn du PA_GJ gleich als SELECT-OPTION definierst.

Code: Alles auswählen.

SELECT-OPTIONS:  pa_gj FOR bseg-gjahr NO-EXTENSION NO INTERVALS.
wird dann angezeigt wie ein Parameter, kann aber gleich mit "IN" abgefragt werden im SELECT.
@zzcpak:
Glaub mir, sowas kann man gut gebrauchen, wenn der User nur eine EQ-Bedingung eingeben darf.
Bei einer Selct-Option mit NO-EXTENSION NO INTERVALS kanst ja immernoch sagen das es NE GT LT GE usw sein soll

@robin:
Sicher das du überhaupt Daten in der DB hast?
Rein von der Syntax müsste eigentlich alles stimmen.



EDIT:
zzcpak hat geschrieben:ach so noch was.

in der WHERE-Klausel sollten vor den Feldnamen doch auch die Tabellen- bzw. Alias-Namen stehen

also statt

Code: Alles auswählen.

and land1 IN so_land 
sollte dann stehen

Code: Alles auswählen.

and a~land1 IN so_land 
Hier musst du natürlich aufpassen welches Feld zu welcher Tabelle gehört. Denke mal das ist der Fehler.
Schöner ist es wenn manns angibt! Der Optik/Übersichtlichkeit wegen.
Aber Programmtechnisch ist das nur nötig, wenn beide odere mehrere Tabellen eines Joins die gleichen Felder haben.

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

Habe ich auch schon probiert, macht aber leider überhaupt keinen Unterschied.

Ja, bin mir sicher Death. Denn wenn ich z.B: nur das Land eingebe, bekomme ich auch Daten aus dem Jahr 2006, oder auch Land und Monat funktionieren.

Wenn ich nur das Jahr eingebe funktioniert es nicht.

Auch Monat und Jahr funktionieren nicht.

Woran kann das nur liegen? :roll: :shock:

Danke

Robin

Beitrag von robin1at (Specialist / 190 / 0 / 0 ) »
bin gerade auf noch was draufgekommen.

wenn ich bei zdlk einen wert angebe, bringt er alle daten.

Wie kann ich hier sagen, daß wenn kein Wert vorkommt, ebenfalls die Fehlermeldung kommt? (kein Wert zu den unten stehenden Joins)

Weil wie der select jetzt ist, findet er in der Tabelle zdlkz_t immer Werte.

Es wird erst weiter unten im Coding die Tabelle für einen Vergleich herangezogen.

Danke vielmals für Eure Hilfe ....

Hier mein komplettes Coding ...

[/code]REPORT zsumla.

TYPE-POOLS slis.

TABLES: lfa1, bseg, bkpf, bsik, bsak, zdlkz_t.

DATA: BEGIN OF itab_sumla OCCURS 10,
lifnr LIKE lfa1-lifnr,
land1 LIKE lfa1-land1,
diekz LIKE bsak-diekz,
belnr LIKE bsak-belnr,
zuonr LIKE bsak-zuonr,
blart LIKE bsak-blart,
bukrs LIKE bsak-bukrs,
monat LIKE bsak-monat,
gjahr LIKE bsak-gjahr,
shkzg LIKE bsak-shkzg,
bschl LIKE bsak-bschl,
dmbtr LIKE bsak-dmbtr,
wrbtr LIKE bsak-wrbtr,
zdlkz LIKE zdlkz_t-zdlkz,
bezeichnung LIKE zdlkz_t-bezeichnung,
soha TYPE p DECIMALS 2,
soll TYPE p DECIMALS 2,
haben TYPE p DECIMALS 2,
zahler TYPE i,
END OF itab_sumla.

* Zweite interne Tabelle für "READ" - Spalten Vergleich

DATA: BEGIN OF itab_zdlkz_t OCCURS 10,
zdlkz LIKE zdlkz_t-zdlkz,
bezeichnung LIKE zdlkz_t-bezeichnung,
END OF itab_zdlkz_t.

DATA: wa_soha LIKE LINE OF itab_sumla,
wa_zdlkz LIKE LINE OF itab_zdlkz_t.

* zum sy-subrc Auswerten von beiden JOINS

DATA: lv_subrc TYPE sy-subrc.

DATA: my_fieldcat TYPE slis_t_fieldcat_alv,
wa_layout TYPE slis_layout_alv,
wa_fieldcat LIKE LINE OF my_fieldcat,
repid TYPE sy-repid.

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.

* damit die Selektion Geschäftsjahr funktioniert

RANGES: range FOR bseg-gjahr.
IF NOT pa_gj IS INITIAL.
range-sign = 'I'.
range-option = 'EQ'.
range-low = pa_gj .
APPEND range.
ELSE.
REFRESH range.
ENDIF.

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

* GUI-Titel anlegen

SET TITLEBAR 'T_SOHA'.

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 IN range
AND monat IN so_perio.
IF sy-subrc <> 0.
lv_subrc = sy-subrc.
ENDIF.

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 IN range
AND monat IN so_perio.

IF sy-subrc <> 0 OR lv_subrc <> 0.
MESSAGE i819(3f).
* Keine Daten im gewählten Zeitraum vorhanden + EXIT, weil Message
* Typ i sonst Daten zeigen würde, die in einen der Joins wären !!!
EXIT.
ENDIF.


* wa_soha-.... weil durch DATA Deklaration wa_soha

LOOP AT itab_sumla INTO wa_soha.


IF wa_soha-shkzg = 'H'.
wa_soha-haben = wa_soha-dmbtr.
ELSE.
wa_soha-soll = wa_soha-dmbtr.
ENDIF.

wa_soha-soha = wa_soha-haben - wa_soha-soll.

* Spalten Vergleich

IF wa_soha-zuonr = space.
wa_soha-zdlkz = space.
ELSE.
READ TABLE itab_zdlkz_t INTO wa_zdlkz WITH KEY zdlkz =
wa_soha-zuonr.
IF sy-subrc = 0.
wa_soha-zdlkz = wa_zdlkz-zdlkz.
wa_soha-bezeichnung = wa_zdlkz-bezeichnung.
ENDIF.
ENDIF.

* Zähler für keine Einträge in DlKz

IF wa_soha-zdlkz = space.
wa_soha-zahler = 1.
ELSE.
wa_soha-zahler = 0.
ENDIF.

MODIFY itab_sumla FROM wa_soha TRANSPORTING soll haben soha zahler
zdlkz bezeichnung.

ENDLOOP.


* Zusätzliche Spalten für Haben - Soll Berechnung, ...

wa_fieldcat-fieldname = 'ZUONR'.
wa_fieldcat-col_pos = 14.
wa_fieldcat-seltext_l = 'ZUONR'.
APPEND wa_fieldcat TO my_fieldcat.

wa_fieldcat-fieldname = 'BEZEICHNUNG'.
wa_fieldcat-col_pos = 15.
wa_fieldcat-seltext_l = 'BEZEICHNUNG'.
APPEND wa_fieldcat TO my_fieldcat.

wa_fieldcat-fieldname = 'SOLL'.
wa_fieldcat-col_pos = 16.
wa_fieldcat-seltext_l = 'Soll'.
wa_fieldcat-no_zero = 'X'. " Es werden keine Einträge mit 0 angezeigt
wa_fieldcat-do_sum = 'X'. " Spalte summieren
APPEND wa_fieldcat TO my_fieldcat.

wa_fieldcat-fieldname = 'HABEN'.
wa_fieldcat-col_pos = 17.
wa_fieldcat-seltext_l = 'Haben'.
wa_fieldcat-no_zero = 'X'.
wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO my_fieldcat.

wa_fieldcat-fieldname = 'SOHA'.
wa_fieldcat-col_pos = 18.
wa_fieldcat-seltext_l = 'Haben - Soll'.
wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO my_fieldcat.

wa_fieldcat-fieldname = 'BELNR'.
wa_fieldcat-col_pos = 19.
wa_fieldcat-seltext_l = 'BELNR'.
APPEND wa_fieldcat TO my_fieldcat.

wa_fieldcat-fieldname = 'ZAHLER'.
wa_fieldcat-col_pos = 20.
wa_fieldcat-seltext_l = 'keine Einträge DlKz'.
wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO my_fieldcat.

* Tabelle sortieren

SORT itab_sumla BY gjahr monat land1.

* Spaltenbreite optimieren, Zebra Muster

wa_layout-colwidth_optimize = 'X'.
wa_layout-zebra = 'X'.

repid = sy-repid.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_structure_name = 'ZMYSTRUKTUR'
CHANGING
ct_fieldcat = my_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.

IF sy-subrc <> 0.
MESSAGE e707(69).
* Lesefehler
ENDIF.

DELETE my_fieldcat WHERE NOT ( fieldname = 'BLART'
OR fieldname = 'ZDLKZ'
OR fieldname = 'LAND1'
OR fieldname = 'GJAHR'
* OR fieldname = 'ZUONR'
OR fieldname = 'BEZEICHNUNG'
* OR fieldname = 'SHKZG'
* OR fieldname = 'DMBTR'
* OR fieldname = 'WRBTR'
OR fieldname = 'BELNR'
OR fieldname = 'SOLL'
OR fieldname = 'HABEN'
OR fieldname = 'SOHA'
OR fieldname = 'ZAHLER'
OR fieldname = 'MONAT' ).

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = wa_layout
it_fieldcat = my_fieldcat
TABLES
t_outtab = itab_sumla
EXCEPTIONS
program_error = 1
OTHERS = 2.

Seite 1 von 1

Vergleichbare Themen

8
Antw.
1988
Views
Select Problem die x-te
von Thanatos82 » 21.09.2012 15:31 • Verfasst in ABAP® für Anfänger
2
Antw.
1219
Views
Select Problem
von ostpower » 22.07.2011 15:25 • Verfasst in ABAP® für Anfänger
1
Antw.
1053
Views
SELECT Problem
von frany*89* » 02.09.2011 05:01 • Verfasst in ABAP® für Anfänger
3
Antw.
1651
Views
SELECT - Problem
von RiffRaff » 13.04.2006 08:38 • Verfasst in ABAP® Core
1
Antw.
1247
Views
Problem mit Select
von Schmarsi » 29.09.2010 09:59 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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 / 523
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2154
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8749