lunes, 24 de noviembre de 2008

Modulo 11 (Verificador de RUT), y como crear elemento de Plantilla.

En esta oportunidad lo que veremos, es como crear el módulo 11, en Chile conocido como Verificador de RUT o RUN, pero, con la particularidad de crearlo como elemento de plantilla, es decir, lo podremos utilizar en todos los formularios de InfoPath que queramos.. sin volverlo a "diseñar".

El módulo 11 corresponde al método o algoritmo para validar el RUT (Rol Único Tributario) o RUN (Rol Único Nacional), existen otros metodos para validar números, pero en Chile ocupamos unicamente el módulo 11, es por esta razón que decidí tomar esta validación para explicar los elementos de plantilla.

(tu puedes probar con cualquier metodo de comprobación que necesites. Lo más importante de este mini-tutorial es crear los elementos de plantilla)

Un elemento de plantilla es una parte o sección de una plantilla InfoPath, es como crear un componente en visual basic que después es utilizado en asp o como crear una función para después llamarla desde el programa principal, la finalidad es reducir el tiempo de desarrollo.

En fin, ya sabes lo que es el módulo 11 y lo que es un elemento de plantilla.

Comenzamos...

1.- Creamos un nuevo elemento de plantilla como se ve en la imagen:


(la opción "Habilitar solamente características compatibles con el explorador" esta abierta, ustedes deciden si la habilitan o no, yo le puse un check, ya que este elemento de plantilla lo ocupare en plantillas de InfoPath que funcionarán en SharePoint)

Seleccionamos las opciones y presionamos aceptar...


2.- Presionamos "Guardar Como...", y seleccionamos donde guardaremos el elemento de plantilla, como verán, la extensión del archivo es xtp.

(Siempre guarden periódicamente sus proyectos, no queremos que se nos reinicie el computador en la mitad del desarrollo y tener que partir desde cero otra vez)


3.- Luego creamos la siguiente estructura de campos:


Estos campos serán los que utilizaremos para crear el módulo 11, como única consideración... si se fijan, el campo Modulo11 es un campo(elemento) y los demás son campo(atributo)


4.- En el campo Modulo11, ingresaremos el rut (cuando este todo funcionando) el formato de ingreso es:

XX.XXX.XXX-Y

Algunos ejemplos son: 1-9, 2-7, 6-k, etc

5.- Nos vamos a propiedaddes del campo M11_estandar.

...El objetivo de este campo es estandarizar el rut, es decir, quitarle los puntos o comas y dejar el RUT en minúscula.


Le he puesto la siguiente función:

translate(translate(.., ",.", ""),"QWERTYUIOPASDFGHJKLÑZXCVBNM",
"qwertyuiopasdfghjklñzxcvbnm")

Esta función tiene 2 translate anidados, sin embargo, es sólo necesario uno, así:

translate(..,"QWERTYUIOPASDFGHJKLÑZXCVBNM.,",
"qwertyuiopasdfghjklñzxcvbnm")


Pero yo ocupe la primera alternativa, para los que no están familiarizados con la función translate, lo que hace es traducir o reemplazar los elementos de la segunda cadena, por los elementos de la tercera, pero en forma lineal, es decir, el primer caracter de la cadena 2 se reemplaza por el primer caracter de la cadena 3... el segundo caracter de la cadena 2 por el segundo de la cadena 3 y asi susesivamente... la cadena 1 (que es nuestro RUT), si tiene un caracter que existe en la cadena 2 es reemplazado por el de la cadena 3, como indique anteriormente...


6.- Nos vamos a las propiedades del campo M11_ConCeros:

El objetivo de este campo es estandarizar el RUT, es decir, si tenemos un 1-9 llevarlo a 00000001-9, esto lo logramos con la siguiente función:

concat(substring("00000000-1", 1, 10 - string-length(../@my:M11_Estandar)), ../@my:M11_Estandar)



7.- Ya que tenemos estandarizado el RUT Nos vamos a las propiedades del campo M11_DigitoVerificador:

El objetivo de este campo es obtener el dígito verificador que se encuentra después del guion

Este dígito lo obtenemos con la siguiente función:

substring-after(../@my:M11_ConCeros, "-")


8.- Ahora separaremos el dígito verificador del dígito que se encuentra antes del guión, ingresamos en las propiedades del campo M11_Digito

Ingresamos la siguiente función:

substring-before(../@my:M11_ConCeros, "-")


9.- Ahora ingresamos en las propiedades de M11_Total e ingresamos la siguiente función:

number(substring(../@my:M11_Digito , 1 , 1)) * 3 + number(substring(../@my:M11_Digito , 2 , 1)) * 2 + number(substring(../@my:M11_Digito , 3 , 1)) * 7 + number(substring(../@my:M11_Digito , 4 , 1)) * 6 + number(substring(../@my:M11_Digito , 5 , 1)) * 5 + number(substring(../@my:M11_Digito , 6 , 1)) * 4 + number(substring(../@my:M11_Digito , 7 , 1)) * 3 + number(substring(../@my:M11_Digito , 8 , 1)) * 2

El objetivo de este campo es realizar el calculo del verificador de RUT que se realizara multiplicando el primer digito x 2 el segundo x 3, desde derecha a izquierda, algo así:

  +---+---+---+---+---+---+   +---+
| 2 | 6 | 1 | 5 | 3 | 3 | - | 9 |
+---+---+---+---+---+---+ +---+
| | | | | |
x7 x6 x5 x4 x3 x2
| | | | | |
=14 =36 =5 =20 =9 =6
+---+---+---+---+---+-> = 90


Recuerden que cuando el multiplicador llega a 7 parte de 2 nuevamente.


10.- Luego ingresamos en las propiedades del campo M11_Calculo e ingresamos la siguiente función:

11 - (../@my:M11_Total mod 11)

Esta función nos permitirá obtener el dígito verificador calculado, es decir, que dígito verificador que debe tener el RUT.

11.- Luego ingresamos en las reglas del campoM11_DigitoVerificador y debemos crear 3 reglas, como se indica en la imagen:


La primera condición es cuando M11_DigitoVerificador="k"



Y la acción será establecer el valor de @M11_DigitoComprobador = 10


La segunda condición será cuando el campo M11_DigitoVerificador="0"


La acción será @M11_DigitoComprobador=11


Para finalizar agregamos una nueva regla, esta vez sin condición, en la cual estableceremos el @M11_DigitoComprobador=número(.)


12.- Luego, guardamos y cerramos nuestro elemento de plantilla (ya lo hemos configurado todo), ahora creamos una plantilla de formulario en blanco:


13.- En el panel de controles seleccionamos la última opción "Agregar o quitar controles personalizados"


14.- En esta pantalla yo tengo agregado un control personalizado, el "Contact Selector", lo que aremos será agregar el verificador de rut como un control personalizado. Presionamos Agregar...


15.- Seleccionamos "Elemento de plantilla"


16.- Ingresamos la dirección en donde se encuentra el elemento de plantilla y presionamos finalizar.



17.- Nos aparecerá un mensaje indicándonos que el control personalizado se agregó.


18.- Luego, tendremos el modulo 11 como componente personalizado.



En el panel de controles aparecerá el módulo 11 al final del listado.


Utilizando el elemento de plantilla, Módulo 11

1.- Agregamos el modulo 11 al formulario, se crearán todos los campos que hemos creado en el elemento de plantilla.

Nota Importante: Los campos me aparecen con una terminación _1, es decir cada vez que nosotros agreguemos elementos o modulos 11 a nuestra plantilla, se agregarán mas grupos de campos, diferenciandolos con un _1, _2, _3 al final de cada campo, por lo tanto, las funciones deberán adaptarlas dependiendo de sus campos.



Nota: Si se fijan en la imagen, todos los campos del módulo 11 quedaron con un "_1" al final, cada vez que agreguen nuevos elementos de plantilla Módulo 11 o cualquiera que ustedes creen, el valor _1 aumentará, ejemplo: _2, _3

2.- Creamos el campo tipo texto en el formulario, yo lo llamaré RUN.


3.- Establecemos una nueva regla para el campo RUN, esta regla asignará automáticamente el valor del campo Modulo1_1 con el valor del RUN que ingresemos, de la siguiente forma:


En acción debemos seleccionar establecer el valor de un campo

Campo: Seleccionar el campo Modulo11_1
Valor: Seleccionamos el campo RUN. (En este caso se muestra como un ".")


4.- Agregamos el campo RUN al formulario, como se ve en la imagen, y nos vamos a la "Validación de datos..".


5.- Presionamos el botón agregar


6.- Ingresamos la condición si M11_Calculo_1 no es igual a M11_DigitoComprobador_1

En:

Mostrar este mensaje de error:
Información en pantalla: Rut Incorrecto



7.- Si presionamos Vista Previa, e ingresamos un rut que sabemos es incorrecto, nos aparecerá el siguiente mensaje :

Este elemento de plantilla lo puedes descargar desde el centro de descargas de desachile.com, en la siguiente dirección: http://www.desachile.com/biblioteca/infopath.html

Saludos, espero les sirva, cualquier duda, deja tu comentario

Francisco Rojas C.-

5 comentarios:

Anónimo dijo...

hola de antemano gracias por contestar.

Mira tengo una documento de excel que me necesito que lo llenen 900 personas y acumular y agrupar los datos obtenidos.

Quisiera saber si es posbile que las personas al llenar los datos esots fueran enviados a una base de datos y automaticamente se recopilaran para poder hacer los analisis, no se como hacerlo me gustaria saber si tambien infopath serviria para este proposito.

Gracias por tu amable ayuda.

Mi correo es trigosdiego@hotmail.com, te agradeceria inmensamente contestarme al correo

Anónimo dijo...

Hola, te doy gracias por el instructivo ejemplo, pero en uno de ellos mencionas al modulo 11, talvez por que recien explore y encontre tu pagina, me perdi de algo muy importante como son los modulos 1 al 10.
Atte.Giovanni (gguerrero123@hotmail.com)

Anónimo dijo...

Hola estoy trabajando en un formulario infopath 2010 y necesito validar el rut, realize el tutorial pero siempre me muestra el mensaje de rut incorrecto ¿cual es la forma correcta de ingresar el rut?
Saludos cordiales,

JUAN
jvillagra21@gmail.com

Wenceslao dijo...

Excelente, funciona super bien, hace tiempo que no actualizas el blog, estas disponible, enviame un correo a este contacto por favor, wenceslao.leon@sharepoint911.cl

saludos,

Wenceslao.

Anónimo dijo...

Estimado, primero agradecer el que comparta sus conocimientos, lo segundo, encontre un problemita al querer validar un RUN el mio (18310618-k) sea en el formato que lo ingrese el valor devuelto en M11_calculo es igual a nan (error de calculo) esto me ha sucedido con varios Rut o RUN probados