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.