Das Problem ist eigentlich nur das IS NULL.
Damit kriegst du alle Einträge die "Ungleich C" sind inklusive jener die auf der Datenbank gar nicht existieren (also in ABAP auch "Ungleich C" wären).
In ABAP selbst gibt es kein "NULL". Da wird der Wert nach der Abfrage automatisch zu "INITIAL" umgewandelt. Daher muss man bei Datenbankabfragen (auch in OpenSQL) das IS NULL mit berücksichtigen.
EDIT:
Wenn deine Methode einmal mehr als einen Status berücksichtigen soll, kannst du dir mit einem IN behelfen.
Alternativ kann man, sofern die AMDP Implementierung das unterstützt (hab ich leider noch nie verwendet), auch Range-Tabellentypen verwenden.
Was hier leider nicht geht, ist die Abfrage des IS [NOT] NULL in den Rangetyp aufzunehmen.
Wenn in AMDP auch Bedingungen gehen, kann man aber folgendes machen
Code: Alles auswählen.
IF space IN lt_range.
...
WHERE status IS NULL OR status IN lt_range
ELSE.
...
WHERE status IN lt_range
ENDIF.
Damit prüft man of der "Leerwert" Teil der Range ist und kann dies für die Abfrage auf den NULL-Wert verwenden.
(Für Zahlenwerte muss man natürlich "0" anstatt "space" verwenden)
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.
ECC: 6.18
Basis: 7.50