FuBa POPUP_TO_DECIDE_LIST- PARVA Userparameter setzen

Hier ein kurzes Programm (aus fremder Feder) zum setzen der Userparameter.

Eine Auswahltabelle wird gefüllt.

Abhängig von den vorhandenen Userparametern wird die aktuelle Einstellung ausgewählt.

Die Auswahl wird aufgerufen.

Abhängig von der Auswahl werden die Parameter gesetzt.

*&---------------------------------------------------------------------*
*& Report  ZZSET_USRVARS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT  zzset_usrvars.

DATA: BEGIN OF spopli OCCURS 15.
        INCLUDE STRUCTURE spopli.
DATA: END   OF spopli.
DATA: antwort TYPE c,
      werks   TYPE werks_d,
      lgnum   TYPE lgnum,
      hstr    TYPE string,
      line    TYPE i.

spopli-varoption = 'Freilassing(Log.)/FRL/ZL1'.   APPEND spopli.
spopli-varoption = 'Freilassing(Prod.)/FRL/100'.  APPEND spopli.
spopli-varoption = 'Haagen/HIB/HI1'.              APPEND spopli.
spopli-varoption = 'Schweiz/CH10/CH1'.            APPEND spopli.
spopli-varoption = 'Sittensen/SIT/SI1'.           APPEND spopli.

SELECT SINGLE parva INTO werks FROM usr05 WHERE bname = sy-uname AND parid = 'WRK'.
SELECT SINGLE parva INTO lgnum FROM usr05 WHERE bname = sy-uname AND parid = 'LGN'.
hstr = '/' && werks.
IF lgnum IS NOT INITIAL.
  hstr = hstr && '/' && lgnum.
ENDIF.

LOOP AT  spopli WHERE varoption CS hstr.
  line = sy-tabix.
  EXIT.
ENDLOOP.


CALL FUNCTION 'POPUP_TO_DECIDE_LIST'
  EXPORTING
    cursorline       = line
    titel            = 'Benutzerparameter setzen,'
    textline1        = 'wählen Sie das richtige Werk'
*   TEXTLINE2        = ' '
    start_col        = 5
    start_row        = 3
  IMPORTING
    answer           = antwort
  TABLES
    t_spopli         = spopli
  EXCEPTIONS
    too_much_answers = 1
    too_much_marks   = 2.

IF sy-subrc = 2.
  WRITE: 'Zu viele Antworten wurden markiert.'.
  RETURN.
ENDIF.
IF antwort = 'A'.
*  WRITE: 'Das Popup wurde abgebrochen.'.
  RETURN.
ENDIF.


WRITE: 'Folgende Einstellung wurde gesetzt:'.
LOOP AT spopli WHERE selflag = 'X'.
  SPLIT spopli-varoption AT '/'  INTO hstr werks lgnum.
  WRITE: / hstr, / 'Werk(WRK)=' , werks, / 'Lagernummer(LGN,MLV)=' , lgnum.

  PERFORM update_insert USING 'WRK' werks.
  PERFORM update_insert USING 'LGN' lgnum.
  PERFORM update_insert USING 'MLV' lgnum.
  COMMIT WORK AND WAIT.
  EXIT.
ENDLOOP.


*&---------------------------------------------------------------------*
*&      Form  update_insert
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->VALUE      text
*      -->(PARID)    text
*      -->VALUE      text
*      -->(PARVA)    text
*----------------------------------------------------------------------*
FORM update_insert USING value(parid) TYPE usr05-parid
                         value(parva) TYPE clike.
  DATA:       s_usr05 TYPE usr05.

  s_usr05-parid = parid.
  s_usr05-parva = parva.
  s_usr05-bname = sy-uname .

  set parameter id parid field parva.

  UPDATE usr05 FROM s_usr05.
  IF sy-subrc <> 0.
    INSERT INTO usr05 VALUES s_usr05.
    IF sy-subrc <> 0.
      MESSAGE 'Fehler beim update' TYPE 'E'.
    ENDIF.
  ENDIF.

ENDFORM.