Status ausschließen
Beispielcoding: (kopieren erlaubt aber auf eigene Gefahr :-))
Um zum Beispiel bei der Bearbeitung von Fertigungsaufträgen gewisse Status ausschließen zu können folgendes Coding anpassen:
Auf dem Selektionsbildschirm kann der Status im 'Klartext' ausgewählt werden.
*
* Coded by Thorsten Neubüser - www.4ap.de
*
DATA:
h_fehler,
help_system LIKE tj02t-txt04,
help_status LIKE jest-stat.
DATA: fufi TYPE c.
SELECT-OPTIONS: s_syste FOR help_system NO INTERVALS,
s_systh FOR help_status NO-DISPLAY.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_syste-low.
DATA: stsma LIKE atj49-stsma.
DATA: f4_cstate LIKE atj49-cstate.
PERFORM value_state(saplcoss) USING stsma
CHANGING f4_cstate s_syste-low.
INITIALIZATION.
* auszuschließende Status vorbelegen
s_syste-sign = 'E'.
s_syste-option = 'EQ'.
s_syste-low = 'TABG'.
APPEND s_syste.
s_syste-low = 'GLFT'.
APPEND s_syste.
START-OF-SELECTION.
* Prüfen der Selektionseingaben
PERFORM selektionen_pruefen.
IF h_fehler = 'X'.
EXIT.
ENDIF. " h_fehler = 'X'
* Daten anreichern
LOOP AT ifauf INTO wa_ifauf. " iauf enthält die Fertigungsaufträge
my_tabix = sy-tabix.
CLEAR fufi.
PERFORM status_check.
IF fufi = 'A'.
* Status soll ausgeschlossen werden
DELETE ifauf INDEX my_tabix.
CONTINUE.
ENDIF.
ENDLOOP. " AT ifauf INTO wa_ifauf
*&---------------------------------------------------------------------*
*& Form SELEKTIONEN_PRUEFEN
*&---------------------------------------------------------------------*
FORM selektionen_pruefen .
* Status prüfen
LOOP AT s_syste.
IF NOT s_syste-high IS INITIAL.
MESSAGE i000(z_uo) WITH
'Eingabe von Intervallen für Status nicht zulässig.'(e02).
h_fehler = 'X'.
EXIT.
ENDIF. " not s_syste-high is initial
IF s_syste-option NE 'EQ'.
MESSAGE i000(z_uo) WITH
'Status nur als gleich oder ungleich eingeben.'(e03).
h_fehler = 'X'.
EXIT.
ENDIF. " s_syste-option ne 'EQ'
CLEAR s_systh.
MOVE-CORRESPONDING s_syste TO s_systh.
PERFORM system_state_check(ppio_entry)
USING 'X' CHANGING s_syste-low s_systh-low.
IF s_syste-low IS INITIAL.
MESSAGE i000(z_uo) WITH
'Status'(e04) s_syste-low 'nicht zulässig.'(e05).
h_fehler = 'X'.
EXIT.
ELSE. " s_syste-low is initial
* jawohl, diesen Status gibt es
APPEND s_systh.
ENDIF. " s_syste-low is initial
ENDLOOP. " at s_syste
ENDFORM. " SELEKTIONEN_PRUEFEN
*&---------------------------------------------------------------------*
*& Form STATUS_CHECK
*&---------------------------------------------------------------------*
FORM status_check .
* Aus- bzw. Einschluss verschiedener Status laut Selektionsbildschirm
LOOP AT s_systh.
IF s_systh-sign = 'E'.
* Status soll ausgeschlossen sein
CALL FUNCTION 'STATUS_CHECK'
EXPORTING
* BYPASS_BUFFER = ' '
client = sy-mandt
objnr = wa_ifauf-objnr
status = s_systh-low
EXCEPTIONS
object_not_found = 1
status_not_active = 2
OTHERS = 3.
IF sy-subrc EQ 0. " CALL FUNCTION 'STATUS_CHECK'
* Status ist vorhanden
fufi = 'A'.
EXIT. " erster Treffer zählt
ENDIF. " sy-subrc ne 0. " CALL FUNCTION 'STATUS_CHECK'
ENDIF. " s_systh-sign = 'I'
ENDLOOP. " at s_systh
ENDFORM. " STATUS_CHECK