Hay varias formas de hacer validaciones de campo de infotipos. En este artículo te mostraré un ejemplo para el IT0002.
- La primera opción: Buscamos la BADI necesaria para la validación del nuevo campo cliente. Vemos que esta BADI es llamada : HRPAD00INFTY.
Una vez encontrada la badi, vamos a crear una copia de nuestra BADI, de forma que:
- Vamos a la se19 y ponemos la siguiente configuración:
- Una vez creado, entramos en la modificación del la badi, lo que a nosotros nos interesa es el proceso PAI (Process after Input) de forma que vamos al método llamado AFTER_INPUT e introducimos el siguiente código para la validación de la cedula ecuatoriana:
Esta forma tiene un problema, que en caso de ser campos creados específicos para clientes, los campos se quedan bloqueados sin poder hacer las modificaciones (o por lo menos no he investigado mucho)
- La segunda posibilidad la tenemos con el include ZXPADU02, pero pasa exactamente lo mismo, por lo que vamos a la última.
- La tercera posibilidad: Ampliación del ModulPool del infotipo 0002. Iremos al include ZP000230 e introduciremos las líneas de código que necesitaramos. Aquí les expongo un ejemplo de como sería una validación con las siguientes líneas de código:
MODULE MODULE_PAI_0002 INPUT.
«Validación de la cédula en infotipo 0002
» Sección de creación de variables
DATA : contador TYPE i,
ced TYPE pa0002-zperid,
wa_pa0002 TYPE pa0002,
«VARIABLES PARA VALIDACION,
hlp_code(10),
length TYPE i,
iref TYPE i,
iref2 TYPE i,
iref3 TYPE i,
iref4(3),
iref5 TYPE i,
wa_screen LIKE screen.
************************************************
«Comprobamos que la cédula no existe en el sistema
SELECT zperid COUNT( * )
FROM pa0002
INTO (ced , contador)
WHERE zperid = p0002-zperid
GROUP BY zperid.
ENDSELECT.
«Como obtenemos un contador de todas las células comprobamos si es mayor a 1
IF contador > 1 .
MESSAGE ‘El número de cédula ya existe’ TYPE ‘W’.
ELSE. «En este else, hacemos la Validación de la cédula de Ecuador en este caso
length = strlen( p0002-zperid ).
hlp_code = p0002-zperid. » save tax code
CASE length.
WHEN ’10’.
* calculate check sum
iref = 0.
DO 9 TIMES.
iref3 = ( ( sy-index + 1 ) MOD 2 ).
IF iref3 = 0. iref3 = 2. ENDIF.
iref4 = hlp_code(1) * iref3.
IF strlen( iref4 ) > 1.
DO 2 TIMES.
iref = iref + iref4(1).
SHIFT iref4 LEFT.
ENDDO.
ELSE.
MOVE iref4 TO iref5.
iref = iref + iref5.
ENDIF.
SHIFT hlp_code LEFT.
ENDDO.
iref2 = iref MOD 10.
iref2 = 10 – iref2.
IF iref2 = 10.
iref2 = 0.
ENDIF.
IF iref2 NE p0002-zperid+9(1) OR p0002-zperid+2(1) >= 6.
LOOP AT screen INTO wa_screen.
IF wa_screen-name = ‘P0002-ZPERID’.
wa_screen-input = ‘1’.
wa_screen-output = ‘1’.
MOVE-CORRESPONDING wa_screen TO screen.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
MESSAGE e001(ztax).
ENDIF.
WHEN OTHERS.
LOOP AT screen INTO wa_screen.
IF wa_screen-name = ‘P0002-ZPERID’.
wa_screen-input = ‘1’.
wa_screen-output = ‘1’.
MOVE-CORRESPONDING wa_screen TO screen.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
MESSAGE e001(ztax).
ENDCASE.
ENDIF.
ENDMODULE. » MOD_PAI INPUT
Recuerda:
Si quieres esta página siga en pié pudiendote ayudar en el día a día, dona, cualquier donativo hará que pueda ayudarte más.