Code: Alles auswählen.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-name = 'S_C_ID-LOW'.
IF p_holida = 'X'.
SCREEN-input = '1'.
screen-required = '2'.
ELSE.
SCREEN-input = '0'.
screen-required = '0'.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
Code: Alles auswählen.
IF ... IS INITIAL.
SET CURSOR FIELD '...'. "Optional wenn man den Cursor setzen möchte
MESSAGE ID '00' TYPE 'E' NUMBER '055'. "<-- Standard-Fehlermeldung
ENDIF.
Das wäre sicherlich die beste Methode. Alles andere ist eher "Spielkram".a-dead-trousers hat geschrieben: ↑03.05.2021 11:48Alternativ könnte man die Prüfung auch in AT SELECTION-SCREEN (ON block) einbauen und dort vorher auf den Funktionscode (sy-ucomm oder sscrfields-ucomm) abfragen um die Prüfung nur im Falle der Ausführung (ONLI, CRET) oder des Speicherns als Variante (SPOS) zu durchlaufen.
Schon, aber bevor er das dann wieder in einen LOOP AT SCREEN ändern kann, müssen zuerst alle Mussfelder ausgefüllt werden. Ansonsten wird immer die Standardfehlermeldung ausgegeben und PAI/PBO nicht durchlaufen.DeathAndPain hat geschrieben: ↑04.05.2021 14:48Ich persönlich finde Lukas Sanders' Lösung die beste und alles andere Overkill. Der Threadersteller will ja einfach nur die Standardfunktionalität, feldabhängig gesteuert wie in seinem Beispielcode dargestellt. Da muss einfach nur die Mussfeldfunktionalität stimmen. Falls er die Logik später doch wieder ändern möchte, na dann wird er halt wieder an genau diese Zeilen im AT SELECTION OUTPUT ranmüssen. Das ist normal und liegt in der Natur der Sache.