SELECT-OPTIONS: Change über Event abfangen

Trivial ist es nicht, aber es geht.

Trick ist, über 2 Events sich hineinzuhängen.

Select-Options durchläuft Events:

at selection-screen output

at selection-screen

Parameters durchläuft Event:

at selection-screen

at selection-screen output:

vor der Anzeige (einmalig)

nach jeder Eingabe über den Multiselektionbutton .

at selection-screen:

beim Drucken des Multiselektionsbuttons

am Ende der Gesamteingabe durchlaufen (einmalig)

Der Trick besteht darin, sich die Werte der select-options beim ersten Einstieg zu merken. Da das Event at selection-screen output

Hier sind Select-Options und Parameters parallel. Wenn sich die Select-Options ändern, ändern sich die Parameter und umgekehrt.

Das Bsp. ist etwas komplex, aber zumindest ist das Prinzip hier ersichtlich.

SELECTION-SCREEN: BEGIN OF BLOCK sta
  WITH FRAME TITLE TEXT-sta.
  "EROF FREI GLFT TGLI ABGS TABG RÜCK TRÜC MABS WABE EFRE ELIE EKUN
  "0001 0002 0012 0074 0046 0045 0009 0010 0340 0321 0188 0186 0099

  SELECT-OPTIONS pa_stat  FOR tj02t-txt04 NO INTERVALS MODIF ID unv.
  SELECT-OPTIONS po_stat  FOR tj02t-txt04 NO INTERVALS MODIF ID unv.
  SELECT-OPTIONS pno_stat FOR tj02t-txt04 NO INTERVALS MODIF ID unv.

  SELECT-OPTIONS pa_old  FOR tj02t-txt04 NO INTERVALS MODIF ID unv NO-DISPLAY.
  SELECT-OPTIONS po_old  FOR tj02t-txt04 NO INTERVALS MODIF ID unv NO-DISPLAY.
  SELECT-OPTIONS pno_old FOR tj02t-txt04 NO INTERVALS MODIF ID unv NO-DISPLAY.

  SELECTION-SCREEN SKIP 1.

  "FIELD-SYMBOLS <p_stat> TYPE any.
  FIELD-SYMBOLS <p_stat> LIKE LINE OF pa_stat[].



  SELECTION-SCREEN COMMENT 01(79) TEXT-151 MODIF ID and.
  SELECTION-SCREEN BEGIN OF LINE.
    PARAMETERS pa_EROF TYPE xfeld MODIF ID and USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-131 MODIF ID and.
    PARAMETERS pa_FREI TYPE xfeld MODIF ID and USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-132 MODIF ID and.
    PARAMETERS pa_GLFT TYPE xfeld MODIF ID and  USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-133 MODIF ID and.
    PARAMETERS pa_TGLI TYPE xfeld MODIF ID and  USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-134 MODIF ID and.
    PARAMETERS pa_ABGS TYPE xfeld MODIF ID and USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-135 MODIF ID and.
    PARAMETERS pa_TABG TYPE xfeld MODIF ID and USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-136 MODIF ID and.
    PARAMETERS pa_RUCK TYPE xfeld MODIF ID and USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-137 MODIF ID and.
    PARAMETERS pa_TRUC TYPE xfeld MODIF ID and USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-138 MODIF ID and.
    PARAMETERS pa_MABS TYPE xfeld MODIF ID and USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-139 MODIF ID and.
    PARAMETERS pa_WABE TYPE xfeld MODIF ID and USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-140 MODIF ID and.
    PARAMETERS pa_EFRE TYPE xfeld MODIF ID and USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-141 MODIF ID and.
    PARAMETERS pa_ELIE TYPE xfeld MODIF ID and USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-142 MODIF ID and.
    PARAMETERS pa_EKUN TYPE xfeld MODIF ID and USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-143 MODIF ID and.
    "SELECTION-SCREEN COMMENT 03(4) TEXT-131 for FIELD pa_frei.
  SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN COMMENT 01(79) TEXT-152 MODIF ID or.
  SELECTION-SCREEN BEGIN OF LINE.
    PARAMETERS po_EROF TYPE xfeld MODIF ID or USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-131 MODIF ID or.
    PARAMETERS po_FREI TYPE xfeld MODIF ID or USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-132 MODIF ID or.
    PARAMETERS po_GLFT TYPE xfeld MODIF ID or USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-133 MODIF ID or.
    PARAMETERS po_TGLI TYPE xfeld MODIF ID or USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-134 MODIF ID or.
    PARAMETERS po_ABGS TYPE xfeld MODIF ID or USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-135 MODIF ID or.
    PARAMETERS po_TABG TYPE xfeld MODIF ID or USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-136 MODIF ID or.
    PARAMETERS po_RUCK TYPE xfeld MODIF ID or USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-137 MODIF ID or.
    PARAMETERS po_TRUC TYPE xfeld MODIF ID or USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-138 MODIF ID or.
    PARAMETERS po_MABS TYPE xfeld MODIF ID or USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-139 MODIF ID or.
    PARAMETERS po_WABE TYPE xfeld MODIF ID or USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-140 MODIF ID or.
    PARAMETERS po_EFRE TYPE xfeld MODIF ID or USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-141 MODIF ID or.
    PARAMETERS po_ELIE TYPE xfeld MODIF ID or USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-142 MODIF ID or.
    PARAMETERS po_EKUN TYPE xfeld MODIF ID or USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-143 MODIF ID or.
    "SELECTION-SCREEN COMMENT 03(4) TEXT-131 for FIELD pa_frei.
  SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN COMMENT 01(79) TEXT-153 MODIF ID nor.
  SELECTION-SCREEN BEGIN OF LINE.
    PARAMETERS pno_EROF TYPE xfeld MODIF ID nor USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-131 MODIF ID nor.
    PARAMETERS pno_FREI TYPE xfeld MODIF ID nor USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-132 MODIF ID nor.
    PARAMETERS pno_GLFT TYPE xfeld MODIF ID nor USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-133 MODIF ID nor.
    PARAMETERS pno_TGLI TYPE xfeld MODIF ID nor USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-134 MODIF ID nor.
    PARAMETERS pno_ABGS TYPE xfeld MODIF ID nor USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-135 MODIF ID nor.
    PARAMETERS pno_TABG TYPE xfeld MODIF ID nor USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-136 MODIF ID nor.
    PARAMETERS pno_RUCK TYPE xfeld MODIF ID nor USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-137 MODIF ID nor.
    PARAMETERS pno_TRUC TYPE xfeld MODIF ID nor USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-138 MODIF ID nor.
    PARAMETERS pno_MABS TYPE xfeld MODIF ID nor USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-139 MODIF ID nor.
    PARAMETERS pno_WABE TYPE xfeld MODIF ID nor USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-140 MODIF ID nor.
    PARAMETERS pno_EFRE TYPE xfeld MODIF ID nor USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-141 MODIF ID nor.
    PARAMETERS pno_ELIE TYPE xfeld MODIF ID nor USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-142 MODIF ID nor.
    PARAMETERS pno_EKUN TYPE xfeld MODIF ID nor USER-COMMAND screen.
    SELECTION-SCREEN COMMENT (4) TEXT-143 MODIF ID nor.
    "SELECTION-SCREEN COMMENT 03(4) TEXT-131 for FIELD pa_frei.
  SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN: END OF BLOCK sta.



AT SELECTION-SCREEN OUTPUT.

  IF
    lines( pa_stat[] ) <> lines( pa_old[] )
    OR
    lines( po_stat[] ) <> lines( po_old[] )
    OR
    lines( pno_stat[] ) <> lines( pno_old[] )
    .
    PERFORM screen2.
    pa_old[] = pa_stat[].
    po_old[] = po_stat[].
    pno_old[] = pno_stat[].
  "ELSE.
    "PERFORM screen.
  ENDIF.


AT SELECTION-SCREEN.
  PERFORM screen.
  pa_old[] = pa_stat[].
  po_old[] = po_stat[].
  pno_old[] = pno_stat[].

*&---------------------------------------------------------------------*
*& Form screen2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM screen2.
  "USING p1.
  "CHANGING p2.
  "EROF FREI GLFT TGLI ABGS TABG RÜCK TRÜC MABS WABE EFRE ELIE EKUN
  "0001 0002 0012 0074 0046 0045 0009 0010 0340 0321 0188 0186 0099

  DEFINE add_stat.
    LOOP AT &3 ASSIGNING <p_stat> WHERE low = &2.
    <p_stat>-low = to_upper( <p_stat>-low ).
    IF <p_stat>-low = &2.
      &1 = 'X'.
    ENDIF.
    ENDLOOP.
    if sy-subrc <> 0.
      &1 = ''.
    endif.
  END-OF-DEFINITION.

    loop at pa_stat assigning <p_stat>.
      <p_stat>-low = to_upper( <p_stat>-low ).
    endloop.
    loop at po_stat assigning <p_stat>.
      <p_stat>-low = to_upper( <p_stat>-low ).
    endloop.
    loop at pno_stat assigning <p_stat>.
      <p_stat>-low = to_upper( <p_stat>-low ).
    endloop.





  add_stat pa_erof 'EROF' pa_stat[].
  add_stat pa_frei 'FREI' pa_stat[].
  add_stat pa_glft 'GLFT' pa_stat[].
  add_stat pa_tgli 'TGLI' pa_stat[].
  add_stat pa_abgs 'ABGS' pa_stat[].
  add_stat pa_tabg 'TABG' pa_stat[].
  add_stat pa_ruck 'RÜCK' pa_stat[].
  add_stat pa_truc 'TRÜC' pa_stat[].
  add_stat pa_mabs 'MABS' pa_stat[].
  add_stat pa_wabe 'WABE' pa_stat[].
  add_stat pa_efre 'EFRE' pa_stat[].
  add_stat pa_elie 'ELIE' pa_stat[].
  add_stat pa_ekun 'EKUN' pa_stat[].

  add_stat po_erof 'EROF' po_stat.
  add_stat po_frei 'FREI' po_stat.
  add_stat po_glft 'GLFT' po_stat.
  add_stat po_tgli 'TGLI' po_stat.
  add_stat po_abgs 'ABGS' po_stat.
  add_stat po_tabg 'TABG' po_stat.
  add_stat po_ruck 'RÜCK' po_stat.
  add_stat po_truc 'TRÜC' po_stat.
  add_stat po_mabs 'MABS' po_stat.
  add_stat po_wabe 'WABE' po_stat.
  add_stat po_efre 'EFRE' po_stat.
  add_stat po_elie 'ELIE' po_stat.
  add_stat po_ekun 'EKUN' po_stat.

  add_stat pno_erof 'EROF' pno_stat.
  add_stat pno_frei 'FREI' pno_stat.
  add_stat pno_glft 'GLFT' pno_stat.
  add_stat pno_tgli 'TGLI' pno_stat.
  add_stat pno_abgs 'ABGS' pno_stat.
  add_stat pno_tabg 'TABG' pno_stat.
  add_stat pno_ruck 'RÜCK' pno_stat.
  add_stat pno_truc 'TRÜC' pno_stat.
  add_stat pno_mabs 'MABS' pno_stat.
  add_stat pno_wabe 'WABE' pno_stat.
  add_stat pno_efre 'EFRE' pno_stat.
  add_stat pno_elie 'ELIE' pno_stat.
  add_stat pno_ekun 'EKUN' pno_stat.




ENDFORM.                    " screen2


*&---------------------------------------------------------------------*
*  & Form screen
*  &---------------------------------------------------------------------*
*  & text
*  &---------------------------------------------------------------------*
*  & -->  p1        text
*  & <--  p2        text
*  &---------------------------------------------------------------------*
FORM screen.
  "USING p1.
  "CHANGING p2.

  "EROF FREI GLFT TGLI ABGS TABG RÜCK TRÜC MABS WABE EFRE ELIE EKUN
  "0001 0002 0012 0074 0046 0045 0009 0010 0340 0321 0188 0186 0099
  REFRESH pa_stat[].
  REFRESH po_stat[].
  REFRESH pno_stat[].


  DEFINE add_stat.
  "ASSIGN pa_stat TO <p_stat>.
  ASSIGN &3 TO <p_stat>.
  <p_stat>-sign = 'I'.
  <p_stat>-option = 'EQ'.
    IF &1 = 'X'.
      <p_stat>-low = &2.
      APPEND <p_stat> TO &3.
    ENDIF.
  END-OF-DEFINITION.

  add_stat pa_erof 'EROF' pa_stat.
  add_stat pa_frei 'FREI' pa_stat.
  add_stat pa_glft 'GLFT' pa_stat.
  add_stat pa_tgli 'TGLI' pa_stat.
  add_stat pa_abgs 'ABGS' pa_stat.
  add_stat pa_tabg 'TABG' pa_stat.
  add_stat pa_ruck 'RÜCK' pa_stat.
  add_stat pa_truc 'TRÜC' pa_stat.
  add_stat pa_mabs 'MABS' pa_stat.
  add_stat pa_wabe 'WABE' pa_stat.
  add_stat pa_efre 'EFRE' pa_stat.
  add_stat pa_elie 'ELIE' pa_stat.
  add_stat pa_ekun 'EKUN' pa_stat.

  add_stat po_erof 'EROF' po_stat.
  add_stat po_frei 'FREI' po_stat.
  add_stat po_glft 'GLFT' po_stat.
  add_stat po_tgli 'TGLI' po_stat.
  add_stat po_abgs 'ABGS' po_stat.
  add_stat po_tabg 'TABG' po_stat.
  add_stat po_ruck 'RÜCK' po_stat.
  add_stat po_truc 'TRÜC' po_stat.
  add_stat po_mabs 'MABS' po_stat.
  add_stat po_wabe 'WABE' po_stat.
  add_stat po_efre 'EFRE' po_stat.
  add_stat po_elie 'ELIE' po_stat.
  add_stat po_ekun 'EKUN' po_stat.

  add_stat pno_erof 'EROF' pno_stat.
  add_stat pno_frei 'FREI' pno_stat.
  add_stat pno_glft 'GLFT' pno_stat.
  add_stat pno_tgli 'TGLI' pno_stat.
  add_stat pno_abgs 'ABGS' pno_stat.
  add_stat pno_tabg 'TABG' pno_stat.
  add_stat pno_ruck 'RÜCK' pno_stat.
  add_stat pno_truc 'TRÜC' pno_stat.
  add_stat pno_mabs 'MABS' pno_stat.
  add_stat pno_wabe 'WABE' pno_stat.
  add_stat pno_efre 'EFRE' pno_stat.
  add_stat pno_elie 'ELIE' pno_stat.
  add_stat pno_ekun 'EKUN' pno_stat.

*  if pa_erof = 'X'.
*    <p_stat>-low = 'EROF'.
*    append <p_stat> to pa_stat.
*  endif.

ENDFORM.                    " screen