Vorsicht bei “FOR ALL ENTRIES”

ACHTUNG: Bei folgender Konstellation liefert der Befehl FOR ALL ENTRIES evtl. nicht das gewünschte Ergebnis, denn doppelte Ergebnismengen werden eliminiert!!

ACHTUNG: Bei folgender Konstellation liefert der Befehl FOR ALL ENTRIES evtl. nicht das gewünschte Ergebnis, denn doppelte Ergebnismengen werden eliminiert!!

Nehmen wir folgende zwei BSIS-Einträge:

BUKRS HKONT  AUGDT      ZUONR        GJAHR BELNR   BUZEI SHKZG   DMBTR
0001  920002 00.00.0000 55661999     1999  005566   002    H     450,00
0001  920002 00.00.0000 55661999     1999  005566   004    H     450,00

Die Einträge unterscheiden sich nur in der Buchungszeile. Im unten stehenden Programm werden diese beiden auch selektiert, da HKONT-BELNR-BUZEI eindeutig sind. Wenn wir aber BUZEI aus der Selektion herausnehmen, dann erhalten wir nur noch einen Eintrag in die Tabelle und nicht beide Zeilen, auf die die Bedingung zutrifft.

Man sollte sich dieses Umstandes bewusst sein, wenn man FOR ALL ENTRIES verwendet, denn es kann zu unerwünschten Nebeneffekten führen. Wenn man bei obigem Beispiel auch noch den Buchungsbetrag lesen möchte, dann kann es durchaus vorkommen, dass zwei mal der selbe Betrag in unterschiedlichen Buchungszeilen vorhanden ist. Bei einer Summierung hätte man dann eben nur noch die Hälfte des Wertes.

________________________________________________________

REPORT zzenno04 LINE-SIZE 1000.

TABLES bsis.

TYPES:
  BEGIN OF ty_konto,
    saknr  TYPE saknr,
  END OF   ty_konto.


DATA:
  BEGIN OF tab OCCURS 0,
    hkont TYPE hkont,
    belnr TYPE belnr_d,
    buzei type buzei,
  END OF tab,
  git_konto  TYPE STANDARD TABLE OF ty_konto.

PARAMETERS: p_kont TYPE hkont DEFAULT ‘0021789004’.
SELECT-OPTIONS: s_belnr FOR bsis-belnr.

START-OF-SELECTION.

  SELECT saknr FROM skb1 INTO TABLE git_konto
   WHERE bukrs = ‘0002’
     AND saknr = p_kont.

  SELECT hkont
         belnr
         buzei            “ohne BUZEI selektieren…
    FROM bsis INTO TABLE tab
     FOR ALL ENTRIES IN git_konto
   WHERE bukrs = ‘0002’
     AND hkont = git_konto-saknr
     AND belnr IN s_belnr.

  LOOP AT tab.
    WRITE: / tab-hkont, tab-belnr.
  ENDLOOP.

 

Enno Wulff
Letzte Artikel von Enno Wulff (Alle anzeigen)