2012-07-27 10 views
5

The picture¿Cómo seleccionar múltiples rangos para un parámetro SIN llenar primero todos los demás parámetros requeridos?

Me gustaría poder tener varias selecciones de rango para "Número de orden de venta".

El problema es: cuando se presiona el botón marcado con verde, me sale el error "Rellene todos los campos obligatorios".

puse mi bloque de procesamiento principal en el evento de inicio de SELECCIÓN.

¿Qué hacer para no tener que esto suceda? Me parece que debería poder agregar múltiples selecciones sin la molestia de llenar primero cada otro campo obligatorio.

Respuesta

6

Con parámetros/Select-opciones establecidas para obligatorio, esto no funcionará. Yo tenía el mismo problema hace algún tiempo, y no tenía ninguna oportunidad de llenar los parámetros de entrada obligatoria que tienen valores útiles de forma predeterminada, por lo que hizo lo siguiente:

  • eliminar la opción obligatorias de todos Select-opciones y parámetros
  • Mango el cheque para la entrada obligatoria a sí mismo en los casos sin F4, ayuda, ayuda F1 o el botón situado junto a cualquier opción de selección se presiona:

Código:

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

... y mientras estás en ello, utilice una clase de mensaje. Esto le permitirá agregar un texto de documentación más adelante. – vwegert

-2

Esto es lo que encontré que reproduce completamente el comportamiento establecido por la adición OBLIGATORIA:

1: TOMAR la adición "OBLIGATORIA".

2: en el PBO:

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

3: en el 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. 

Aviso la primera sentencia if contiene un operador lógico 'CS'. Es porque el nombre de tu control también contiene otras cosas raras. Por ejemplo% _P_MATNR_% PANTALLA %% (donde su parámetro fue p_matnr).

Además, la declaración: TABLES sscrfields. es necesario.

+2

Esta es una muy mala idea. De esta forma, aplica la entrada del campo requerido al ejecutar el programa directamente, pero el usuario podrá programarlo como un trabajo en segundo plano sin ingresar el mismo parámetro. Además, de acuerdo con la documentación, la pantalla requerida requiere 0 o 1. Ponerla en 2 podría funcionar ahora, pero cambiar su efecto o detenerse para funcionar sin más advertencia. – vwegert

Cuestiones relacionadas