2012-07-27 9 views
5

The pictureCome selezionare più intervalli per un parametro SENZA prima riempire tutti gli altri parametri richiesti?

Vorrei poter avere più selezioni di intervallo per "Nr. Ordine cliente".

Il problema è: quando premo il pulsante contrassegnato da verde, viene visualizzato l'errore "Compila tutti i campi di inserimento obbligatori".

Ho inserito il blocco di elaborazione principale all'evento START-OF-SELECTION.

Cosa fare per non farlo accadere? Mi sembra che dovrei essere in grado di aggiungere più selezioni senza il fastidio di riempire prima ogni altro campo obbligatorio.

risposta

6

Con parametri/opzioni di selezione impostate su OBBLIGATORIO, questo non funzionerà. Ho avuto lo stesso problema qualche tempo fa, e non aveva alcuna possibilità di riempire i parametri di input OBBLIGATORI con valori utili di default, così ho fatto la seguente:

  • rimuovere l'opzione OBBLIGATORIA da tutti Select-opzioni e parametri
  • Maneggiare il controllo per l'ingresso obbligatoria se stessi in casi non F4, aiuto, aiuto F1 o il pulsante accanto a qualsiasi opzione di selezione viene premuto:

Codice:

AT SELECTION-SCREEN ON s_reswk. 

IF sy-ucomm(1) <> '%' AND  " sel screen action request 
    sy-ucomm(1) <> '_' AND  " scope option 
    s_reswk IS INITIAL.   " Obligatory input missing 
    MESSAGE text-e01 TYPE 'E'. " Error message 
ENDIF. 
+3

... e mentre ci sei, usa una classe di messaggi. Questo ti permetterà di aggiungere un testo di documentazione in seguito. – vwegert

-2

Ecco cosa ho trovato che riproduce completamente il comportamento impostato dall'aggiunta OBBLIGATORIA:

1: Estrarre l'aggiunta "OBBLIGATORIA".

2: in PBO:

LOOP AT SCREEN. 
    IF screen-name cs 'name-of-your-select-options-or-parameter'. 
    screen-required = 2. 
    MODIFY SCREEN. 
    ENDIF. 

3: al PAI:

if sscrfields-ucomm = 'ONLI'. 
    if 'name of your select-option-or-parameter' is initial. 
     clear sscrfields. 
     message 'Fill in all required fields.'(009) type 'E'. 
    endif. 
    endif. 

Avviso la prima istruzione if contiene un operatore logico 'cs'. Questo perché il nome del tuo controllo conterrà anche altre cose strane. Ad esempio% _P_MATNR_% SCREEN %% (dove il parametro era p_matnr).

Inoltre, la dichiarazione: TABLES sscrfields. è necessaria.

+2

Questa è una pessima idea. In questo modo, si impone l'immissione del campo richiesto quando si esegue direttamente il programma, ma l'utente sarà in grado di programmarlo come lavoro in background senza inserire lo stesso parametro. Inoltre, secondo la documentazione, lo schermo richiesto richiede 0 o 1. Impostandolo su 2 potrebbe funzionare ora, ma modificarne l'effetto o fermarsi per lavorare del tutto senza ulteriori avvisi. – vwegert

Problemi correlati