Hola a tod@s, tengo un mensaje de error para controlar que un campo se digite correctamente, al poner el MESSAGE e398(00) WITH 'xxxx' me controla el error pero bloquea la pantalla obligando a cancelar lo que ya tenia digitado y volver a empezar de nuevo, se que se puede cambiar a tipo W o I pero requiero que no deje continuar hasta que no se corrija el error pero que no bloque la pantalla, que recomendaciones me sugieren, gracias por la ayuda.
MESSAGE e398(00)
Colapsar
X
-
Re: MESSAGE e398(00)
Buenas!
Si es un reporte Z podes controlar el mensaje como decís hacerle tipo W con like E para que se vea error y luego validarlo con un if en tu código para que no haga nada.Edward Manrique A. -
Re: MESSAGE e398(00)
Hola Johava,
Que tipo de programa es donde quieres controlar el mensaje?
Si es un programa con parámetros de selección puedes usar los eventos
AT SELECTION-SCREEN ON p_param.
AT SELECTION-SCREEN ON BLOCK blq01.
Si es un programa con dynpros debes usar la sentencia CHAIN y FIELD en el evento PAI.
Para un grupo de campos:
CHAIN.
FIELD abc.
FIELD def MODULE xyz.
ENDCHAIN.
o un campo individual
FIELD abc MODULE xyz.
Espero te sirva.David Carballido Córdova
Comentario
-
Re: MESSAGE e398(00)
Hola Edward gracias por la respuesta, el mensaje debe ser tipo E dado que se requiere que sea restrictivo, es decir que obligue a hacer la corrección (pero sin bloquear las pantalla que es lo que esta haciendo actualmente y obliga a cancelar para volver a iniciar), si lo dejo tipo W o I el usuario final podria omitir la corrección y eso impacta la calidad e integridad de la data.Originalmente publicado por seimeinomiBuenas!
Si es un reporte Z podes controlar el mensaje como decís hacerle tipo W con like E para que se vea error y luego validarlo con un if en tu código para que no haga nada.Comentario
-
Re: MESSAGE e398(00)
Originalmente publicado por DavidXD_XDHola Johava,
Que tipo de programa es donde quieres controlar el mensaje?
Si es un programa con parámetros de selección puedes usar los eventos
AT SELECTION-SCREEN ON p_param.
AT SELECTION-SCREEN ON BLOCK blq01.
Si es un programa con dynpros debes usar la sentencia CHAIN y FIELD en el evento PAI.
Para un grupo de campos:
CHAIN.
FIELD abc.
FIELD def MODULE xyz.
ENDCHAIN.
o un campo individual
FIELD abc MODULE xyz.
Espero te sirva.
Hola David gracias por la respuesta, el proceso funciona de la siguiente manera:
1. Por la Trx FB60 se hace la causación de una obligación contractual, en el campo referencia de esta Trx se hizo una regla de derivación en el componente FI (user exit) que permite que en ciertos casos el contenido de este campo sea validado para garantizar su existencia (Para no hacer una ampliación en el estándar).
2. Esta regla envía como parámetro el campo referencia a un programa Z que se hizo a partir del programa estándar RGGBS000, con el parámetro recibido se hace una validación en un tabla y si su resultado no es exitoso genera mensaje tipo E (porque se requiere que obligue al usuario a corregir, pero sin bloquear la pantalla que es lo que hace actualmente y obliga a cancelar la transacción para volver a digitar los datos).
3. La interacción a través del USER-EXIT funciona bien y hace lo que se requiere solo que cuando se genera el MESSAGE S398(00) bloquea la pantalla completamente, si lo cambio a W genera el error, no bloquea la pantalla pero deja opcional la corrección del dato errado.
4. Utilice la instrucción RAISING VENDOR_MISSING en el message que utiliza la FB60 en otro campo del formulario (que tambien hace genera un mensaje de error y hace lo que requiero en el Z) pero tampoco funciona.
Este es el código del Z
FORM get_exit_titles TABLES etab.
*@JHVT 001 19.06.2024
exits-name = 'U902'.
exits-param = c_exit_param_field.
exits-title = text-902. "Cons. transaction type
APPEND exits. "from xref1/2
REFRESH etab.
LOOP AT exits.
etab = exits.
APPEND etab.
ENDLOOP.
ENDFORM.
FORM u902 USING im_lifnr.
DATA: ls_brsch TYPE lfa1-brsch.
DATA: ls_lifnr TYPE lfa1-lifnr.
DATA: ls_name1 TYPE lfa1-name1.
ls_lifnr = im_lifnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_lifnr
IMPORTING
output = ls_lifnr.
SELECT SINGLE brsch name1 INTO (ls_brsch, ls_name1)
FROM lfa1 WHERE lifnr EQ ls_lifnr.
IF sy-subrc NE 0.
MESSAGE e104(f5) WITH ls_lifnr 'en GVAL ' RAISING VENDOR_MISSING.
ELSE.
IF ls_brsch NE 'FLLC'.
MESSAGE e398(00) WITH 'Tercero no esta asociado a clave ramo FLLC. '.
ELSE.
BKPF-XREF2_HD = ls_name1.
ENDIF.
ENDIF.Comentario
Comentario