Pasar un parametro a obligatorio al llenar otro

buenas tardes, estoy realizando un reporte,
asi que tengo dos parametros, el primer parametro al llenarlo, se debe convertir el otro en obligatorio pero no se de que manera, se que los parametros los conviertes con OBLIGATORY pero no se de que manera convertirlo al llenar otro parametro.

PD: Apenas estoy iniciando en el mundo de SAP, de ante mano gracias

Hola @JESUSSALGADO, de qué versión de SAP estamos hablando? :thinking:

Estoy utilizando el editor abap y la version es SAP NetWeaver

Ok, habías publicado este tema en otra categoría, ya le he movido a la categoría de la versión que usas. Lee por favor: Cómo usar el foro de Consultoria-SAP y también pasa por #presentaciones así creas un debate nuevo para tu presentación, y nos contas qué haces, cuánto llevas con SAP etc, así te ayudamos mejor en las consultas que abras.

Saludos

1 me gusta

Podrías usar una validación en el evento AT SELECTION SCREEN, Si el primer campo tiene información, validas que el segundo también, si no cumple mandas un mensaje sencillo indicado que debe de llenarse.

1 me gusta

Según se el valor de OBLIGATORY no se puede asignar en tiempo de ejecución, te tocaría ya colocarlo despues del START-OF-SELECTION validar si está lleno o no o de otra forma como dice @Alonso_mx.

Efectivamente, cómo te comenta Alonso_mx, en lugar de utilizar el comando OBLIGATORY puedes validar el segundo de esta forma:

IF p_valor1 IS INITIAL.

* Sigues con tu flujo normal

ELSE. "Si el primer parametro tiene algún valor 

  IF p_valor2 IS INITIAL.
    MESSAGE TEXT-e01 TYPE 'S' DISPLAY LIKE 'E'. "Mensaje de valor 2 obligatorio
  ELSE. 
    "Sigues con el flujo normal
  ENDIF.

ENDIF.

Sólo por poner un ejemplo, saludos!

Agregado a esto para que sea visual el obligatorio podes usar el siguiente evento:

AT SELECTION-SCREEN OUTPUT.

LOOP AT SCREEN.
IF p_valor1 is initial.
IF screen-name EQ p_valor2.
screen-required = ‘2’.
ENDIF.
MODIFY SCREEN.
ENDLOOP.

De esta forma esta loopeando el screen, cuando parametro 1 (p_valor1) este vacío, se mostrará la “tilde” de campo obligatorio en el parametro 2 (p_valor2).

Saludos!

1 me gusta

gracias por responder, me podrias decir cual es la diferencia entre un selection screen y un at selection screen

gracias por responder, estoy tratando de llevarlo en practica pero esta instruccion no la comprendo
el parametro 2 hace la comparacion screen-name pero que vendria siendo (screen.name)

IF screen-name EQ p_valor2.

y el screen-required a que se refiere? , al ejecutarlo me marca error en el 2

screen-required = ‘2’.

Screen es la pantalla de selección, es una tabla, cuando la recorres en cada recorrido vas obteniendo cada objeto de la pantalla de seleccción, el campo NAME nos da el ID del parámetro, el objetivo es modificar el registro del parámetro 2, el que queremos poner como obligatorio, indicar en el campo required el valor 2, lo que hacemos es que el campo sea “visualmente” obligatorio, osea se va a mostrar con la “tilde” de obligatorio.

Osea nos ubicamos en el parámetro que queremos modificar y le indicamos que sea “visualmente” obligatorio, el contro del campo completado lo haces con la lógica compartida por @Jafetlo_Lo

ya quedo, muchas gracias, dejo el codigo
PARAMETERS: p_valor1 TYPE string,
p_valor2 TYPE string.

AT SELECTION-SCREEN OUTPUT.

LOOP AT SCREEN.
IF p_valor2 IS NOT INITIAL AND p_valor1 is INITIAL.
IF screen-name CS ‘p_valor1’.
screen-required = ‘2’.
MESSAGE ‘Llena valor 1’ TYPE ‘S’ DISPLAY LIKE ‘E’.
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDLOOP.

1 me gusta