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.
Wieso fragst du immer auf gleich SPACE ab?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.
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.
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.
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 ) .
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.
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
Du hast nur in der Tabelle BSAK Daten die zu deiner Where-Bedingng passen. In Tabelle BSIK passen keine Daten zu deiner Where-Bedingungrobin1at hat geschrieben:Aber warum stimmen dann die Daten die rauskommen?
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:robin1at hat geschrieben: Wo hat das Programm einen Fehler?
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.
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.