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