manual de reporteador giro

127
Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 1 noTabla de Contenidos Acuerdos dispuestos para este manual……………………………………………. 4 Teclas Rápidas dentro del Reporteador Giro……………………………………. 5 Capitulo 1 Introducción…………………………………………………. 7 Finalidad de esta documentación…………………………………. 7 ¿Qué es el Reporteador Giro?................................... 8 Capitulo 2 Definiciones………………………………………………….. 9 Descripción de la interfaz del Reporteador Giro……….. 9 Definición de Objetos de Interfaz…………………………………. 13 Estándares……………………........................................... 16 Capitulo 3 Creación de Reportes……………………………………… 17 Como iniciar un Reporte……………………………………………….. 17 Empezar un Reporte desde cero…………………………………… 19 Modificando un reporte existente…………………………………. 20 Eliminar un reporte del Catálogo………………………………….. 21 Renombrar un reporte………………………………………………….. 21 Otorgando derechos a los usuarios Giro………………… 22 Capitulo 4 Impresión de Reportes…………………………………… 23 Tipos de Impresión……………………………………………………….. 23 Impresión Gráfica………………………………………………… 23 Impresión Directa………………………………………………… 23 Tipos de Letra……………………………………………………………….. 25 Rutinas y Funciones de Impresión………………………………. 27 Uso de Colores………………………………………………………………. 27 Definición de Encabezados y Pie de Página…………………. 38 Instrucciones para modificación INI…………………………….. 40 Instrucciones Gráficas………………………………………………….. 41 Mensajes……………………………………………………………………….. 44 Excel………………………………………………………………………………. 45 Word………………………………………………………………………………. 48

Upload: eduardo-sanchez

Post on 17-Feb-2016

28 views

Category:

Documents


4 download

DESCRIPTION

Giro

TRANSCRIPT

Page 1: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 1

noTabla de Contenidos Acuerdos dispuestos para este manual……………………………………………. 4 Teclas Rápidas dentro del Reporteador Giro……………………………………. 5 Capitulo 1 Introducción…………………………………………………. 7

Finalidad de esta documentación…………………………………. 7 ¿Qué es el Reporteador Giro?................................... 8

Capitulo 2 Definiciones………………………………………………….. 9

Descripción de la interfaz del Reporteador Giro……….. 9 Definición de Objetos de Interfaz…………………………………. 13 Estándares……………………........................................... 16

Capitulo 3 Creación de Reportes……………………………………… 17 Como iniciar un Reporte……………………………………………….. 17 Empezar un Reporte desde cero…………………………………… 19 Modificando un reporte existente…………………………………. 20 Eliminar un reporte del Catálogo………………………………….. 21 Renombrar un reporte………………………………………………….. 21 Otorgando derechos a los usuarios Giro………………… 22 Capitulo 4 Impresión de Reportes…………………………………… 23 Tipos de Impresión……………………………………………………….. 23 Impresión Gráfica………………………………………………… 23 Impresión Directa………………………………………………… 23 Tipos de Letra……………………………………………………………….. 25 Rutinas y Funciones de Impresión………………………………. 27 Uso de Colores………………………………………………………………. 27 Definición de Encabezados y Pie de Página…………………. 38

Instrucciones para modificación INI…………………………….. 40 Instrucciones Gráficas………………………………………………….. 41 Mensajes……………………………………………………………………….. 44 Excel………………………………………………………………………………. 45 Word………………………………………………………………………………. 48

Page 2: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 2

Tabla de Contenidos

Capitulo 5 Tipos de Variables…………………………………………. 49 Declaración de Variables………………………………………………. 49 Variables Numéricas……………………………………………. 49 Variables Alfanuméricas……………………………………… 50 Variables de Tabla………………………………………………. 51 Asignación de Valores a Variables………………………………. 51 Conversión de Variables……………………………………………… 52 Manejo de Valores Alfanuméricos………………………………. 53 Manejo de Valores Numéricos…………………………………….. 58 Manejo de Tablas…………………………………………………………. 59 Variables de Ambiente…………………………………………………. 69 Capitulo 6 Manejo de Ciclos…………………………………………… 72 Ciclo REPITE…………………………………………………………………. 72 Ciclo MIENTRAS……………………………………………………………. 73 Capitulo 7 Uso de Condicionales…………………………………….. 75 SI -> FIN_SI………………………………………………………………… 75 SI -> SI_NO -> FIN_SI……………………………………………….. 75 Capitulo 8 Uso de SubRutinas (Procedimientos) ……………… 77 Capitulo 9 Manejo de Parámetros…………………………………… 80

Parámetros Generales……………………………………………...... 80 Parámetros con uso de Check Box……………………………… 81 Parámetros de Selección ……………………………………………. 82 Parámetros de Salida …………………………………………………. 83 Parámetros de Referencia a Tabla …………………………….. 84

Parámetros de Fecha…………………………………………………… 87 Capitulo 10 Base de Datos……………………………………………… 89 Manejo de una Base de Datos…………………………………….. 89 Relaciones de una Base de Datos………………………………. 92 Operaciones con Base de Datos…………………………………. 97 Consultas SQL…………………………………………………………….. 99

Page 3: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 3

Tabla de Contenidos Capitulo 11 Instrucciones de Empleados…………………………. 105 Vigencia de Trabajadores……………………………………………. 105 Kárdex de Sueldos………………………………………………………. 106 Localización del Empleado…………………………............... 106 Ausentismos, Incapacidades y Retardos……………………. 107 Vacaciones………………………………………………………………….. 109 Capitulo 12 Manejo de Archivos de Texto………………………… 112

Instrucciones para Manejo de Archivos de Texto………. 112 Importaciones desde un archivo de Excel…………………. 115

Capitulo 13 Base de Datos de Nómina…………………………….. 117 Como abrir un período de Nómina…………………………….. 117 Capturas de Nómina………………………………………………….. 118 Instrucciones Especiales……………………………………………. 122 Kárdex de Nómina……………………………………………………… 123 Acumulados de Nomina……………………………………………… 125

Page 4: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 4

Acuerdos dispuestos para este manual

Hemos hecho lo posible por hacer de este manual una herramienta útil y sencilla en su manejo, con esta finalidad le hacemos participe de algunos formatos que hemos adquirido para su mayor comodidad en la lectura de este material:

Las frases importantes han sido resaltadas en letras negritas y cursivas para resaltarlas del resto del contexto.

Los menús utilizados serán referenciados de la siguiente manera: Menú>Sub-menú>Sub-menú ejemplo:

Los pasos para realizar una tarea serán indicados de manera secuencial y numerada, ejemplo:

1. Diríjase al menú Procesos>Generales>Respaldos

2. Seleccione la pestaña Recuperar

3. ...

Las anotaciones importantes serán presentadas de la siguiente manera:

Nota: Al llenar la tabla debe escribir los valores tal cual le sean entregados. NO realice alteraciones, de lo contrario sus cálculos serán erróneos.

Catálogos > de Nómina > Conceptos

Page 5: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 5

Teclas Rápidas dentro de Giro

Existen algunas combinaciones de teclas que facilitan y agilizan el trabajo en la computadora, a continuación te presentamos un listado con las teclas más comunes dentro de Giro y Windows.

Giro Combinación o tecla de función Descripción <F1> Ayuda <F2> Guardar <F3> Nuevo <F4> Borrar <F9> Cancelar Alt + Letra Subrayada Entrar a menú o seleccionar opción

Reporteador Durante la edición del reporte existen varias teclas que ayudan a agilizar algunas tareas.

Combinación o tecla de función Descripción Ctrl + S Muestra la pantalla de búsqueda de palabras.

Ctrl + L Continua con la búsqueda anterior o bien busca la siguiente palabra

Ctrl + Kn Donde n es un dígito de 0 a 9. Esto marca la posición del cursor

Ctrl + Qn

Donde n es un dígito de 0 a 9.Esto permite ir a una de las marcas anteriormente definida

Ctrl + U

Mueve el bloque seleccionado una columna a la derecha

Ctrl + Y Mueve el bloque seleccionado una columna a la izquierda

Ctrl + <F1> Muestra la ayuda de la instrucción donde se encuentra el cursor

<F2> Graba la formula <F3> Checa la sintaxis del reporte <F4> Debugea el reporte hasta la línea donde se

encuentra el cursor <F5> Muestra la salida del reporte <F6>

Continua la ejecución hasta el final del reporte

<F7> Debugea paso a paso el reporte <F8> Ejecuta el reporte de forma normal <F9> Cancela la ejecución del reporte o bien

cancela el debuger

Page 6: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 6

Teclas Rápidas dentro de Giro

Puede presionar el botón derecho del ratón para ver el equivalente en macros de cada uno de los botones durante la edición del reporte.

Windows Combinación o tecla de función Descripción Alt + Tab Cambiar de aplicación Ventanita + D muestra el escritorio Ventanita + F muestra el cuadro de búsqueda de archivos Ventanita + E Abre el Explorador de Windows Alt + <F4> Cierra una aplicación

Page 7: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 7

Capitulo 1

Introducción Bienvenido a Giro, la mejor solución a los problemas de administración de personal.

Finalidad de esta documentación

Pensando en las necesidades de un rápido aprendizaje que tienen nuestros nuevos usuarios, realizamos esta guía, la cual maneja de una manera muy clara y precisa todos los temas que aquí se plantean y que le permitirá entender de manera sencilla lo necesario para poder empezar a trabajar con nuestra herramienta.

Desde que el lector entra en contacto con este manual, comienza a

relacionarse de inmediato con la forma de trabajar del reporteador giro y a entender la estructura de programación con la que fue hecho, haciendo que desde el principio comience a desarrollar nuevos reportes y fórmulas de cálculo sencillas que le permitan mas adelante, con la practica, crear diseñar código mas complejo y elaborado para tareas mas especificas.

Por último, cabe mencionar que existen ciertos apéndices al final de esta guía, los

cuales son de gran importancia ya que integran información sobre características extra del sistema y son de gran ayuda en algunas ocasiones.

Page 8: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 8

¿Qué es el Reporteador Giro?

El reporteador es una poderosa herramienta de programación incluida dentro

del sistema giro diseñado para poder consultar y manipular la Base de Datos de la Empresa y poder a través de su lenguaje de programación – diseñado en ESPAÑOL - hacer uso de todas sus potencialidades.

El reporteador giro nació de la necesidad de hacer reportes fácil y rápidamente

que se adapten 100% a las necesidades del usuario. Esta basado en la sintaxis de el Lenguaje de programación Pascal y por tal razón muchas de las macros y teclas son similares.

El curso del reporteador tiene como objetivo que el usuario conozca, aprenda y aplique este lenguaje utilizado en giro para programar eficientemente formulas para el calculo de la nomina y a crear diversos reportes que se adecuen a las necesidades de su empresa.

Page 9: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 9

Capitulo 2

Definiciones

Descripción de la interfaz del Reporteador Giro

La interfaz es su espacio de trabajo, en esta área se desenvolverá diariamente al estar trabajando con nuestro sistema, como lo podrá ver al lo largo de este manual, hemos trabajado para brindarle una vista intuitiva y sencilla, que le ayude a agilizar su trabajo. Para comenzar, veremos las partes principales de nuestro sistema:

Page 10: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 10

Definición de Objetos de Interfaz del Reporteador Giro 1. Barra de título: Indica el nombre de la aplicación y muestra los botones que

permiten cerrar y minimizar (hacer pequeña) y maximizar (ampliar) la

ventana de trabajo de Giro.

2. Barra de menús: Muestra todos los menús que nos permitirán acceder a

todas y cada una de las herramientas del sistema.

3. Barra de herramientas: Esta parte nos muestra un listado de botones que

nos permiten acceder a las herramientas de Giro con “un solo clic”. Esta barra

es personalizable, característica que examinaremos en un momento.

4. Estado del sistema: Muestra los datos principales de la configuración del

sistema

El reporteador de giro se compone de dos pestañas: Reporte y Formula

Pestaña de Reporte Esta carpeta es donde se muestra la ejecución del reporte. En la parte superior de la carpeta se muestran las herramientas disponibles. Cuenta con las siguientes barras de herramientas:

2. Barra de iconos 3. Barra de Paginas 4. Area de impresión de resultados del reporte

Page 11: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 11

Definición de Objetos de Interfaz del Reporteador Giro Pestaña de Formula Desde esta carpeta se puede modificar la fórmula del reporte, esta carpeta solo es visible si se tiene los derechos para modificar reportes o bien si el reporte fue hecho por usted mismo. En la parte superior de la carpeta se muestran las herramientas disponibles para la edición del reporte. Cuenta con las siguientes barras de herramientas.

2. Barra de iconos 3. Barra de estado del sistema 4. Area de edición del reporte

Page 12: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 12

Definición de Objetos de Interfaz del Reporteador Giro

Page 13: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 13

Definición de Objetos de Interfaz Dentro de la barra de iconos de la pestaña de Reporte se encuentran:

Barra de navegación

Esta es la barra de navegación donde el primer botón muestra la página anterior pero esto funciona solo después de haber ejecutado el reporte, el segundo permite ejecutar el reporte, el tercero permite poner en pausa el reporte y solo funciona mientras el reporte esta en ejecución, el cuarto es el inverso al primero el cual permite avanzar una pagina y el último botón para el reporte y obviamente este funciona solo cuando el reporte esta en ejecución.

En ocasiones por error en la programación de alguno de los reportes puede el reporte terminar anormalmente y se recomienda presionar el botón de parar con la finalidad de terminar algunos procesos que pudieran haber quedado activos.

Barra de archivos

Esta barra sirve para guardar o abrir el resultado de la ejecución de un reporte.

Barra de zoom e imp.

Esta barra funciona solo cuando el reporte ha terminado la ejecución ya que el primer botón hace un acercamiento al reporte (Zoom) y el segundo es la operación inversa que permite ver el reporte mas pequeño, el último botón permite imprimir el reporte, una vez que presiona el botón se muestra una pantalla donde puede definir el número de copias, el rango de impresión, la impresora, etc.

Barra de páginas

Una vez que el reporte termina su ejecución se muestra en la parte inferior a manera de pestañas cada una de las paginas generadas por el reporte, haga clic en la página deseada para visualizarla. Cuando el reporte tiene mas de 10 paginas el sistema muestra una pestaña extra con el signo + con lo que se muestran las siguientes 10 paginas y otra pestaña - que muestra las 10 paginas anteriores.

Page 14: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 14

Definición de Objetos de Interfaz Dentro de la barra de iconos de la pestaña de Formula se encuentran:

Barra de navegación

Esta barra tiene el mismo funcionamiento a la carpeta de REPORTE solo que cuando se esta debugeando un reporte el botón de pausa es el equivalente a la tecla <F7> lo que significa que ejecuta instrucción por instrucción. El botón de play continua con la ejecución hasta el final y el botón de stop para de debugear el reporte.

Barra BD, letras, etc.

El primer botón de esta barra permite ver las bases disponibles con sus respectivos campos. El segundo botón muestra los tipos de letra disponibles. El tercer botón muestra la estructura del reporte y el cuarto botón permite hacer búsqueda de palabras en el código del reporte.

Barra de páginas

El primer botón inicia con el debuger, si se encuentra en otro archivo que no sea el principal el reporteador cambia al archivo principal e inicia el reporte en modo de depuración mostrando el cursor en la primera línea de ejecución, a partir de este momento puede ir presionando la tecla <F7> para ir paso a paso o bien la tecla <F4> para ejecutar hasta el cursor. El segundo botón permite hacer una verificación de sintaxis, en caso de ocurrir un error el sistema muestra el tipo de error y la línea donde ocurrió el mismo. El tercer botón es muy similar al anterior solo que este verifica que las bases de datos a las que se hace referencia existan realmente y los campo realmente existan en la base de datos. El último botón muestra el visualizador de variables. Solo se habilita cuando ejecuta el debuger.

Page 15: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 15

Definición de Objetos de Interfaz Barra de páginas

Si selecciona esta opción puede posicionarse en alguna instrucción y hacer clic con el botón izquierdo del ratón para ver una referencia de la instrucción.

Barra de páginas

El primer botón graba la formula en disco y el segundo permite imprimir la fórmula en impresora.

Barra de estado del sistema

En la parte inferior de la carpeta se muestra el estado del sistema donde se muestra el renglón y columna del cursor, el nombre del archivo activo, la versión y si ha sido o no modificado el reporte.

Page 16: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 16

Estándares • El reporteador giro es “case sensitive” lo que significa que si existe diferencia entre

una palabra escrita con mayúsculas y otra escrita con minúsculas ya sea de forma completa o por partes. Veamos un ejemplo:

Los tres conjuntos de palabras dicen exactamente lo mismo, pero solo en el bloque del lado derecho el Reporteador giro lo reconocerá como válido y correcto dentro de su sintaxis de programación debido a que esta exactamente escrito igual en sus dos referencias.

• Para efecto de diferenciar y resaltar aquellas palabras que funjan como instrucciones del reporteador éstas se escriben con mayúsculas y como recomendación las variables y nombres de subrutinas se escriben con minúsculas para evitar confusiones.

• La declaración de variables se hace de manera global, no existen variables

privadas.

• Se recomienda que para estandarizar los nombres de variables antepongan un símbolo para diferenciar el tipo de variable al que se hace referencia.

_ Para indicar variables de tipo numérico. $ Para indicar variables de tipo alfanumérico. & Para indicar variables de tipo tabla.

Nota: Esto no significa que así debe ser sino que es una recomendación para estandarizar.

• Cada instrucción pueden ir en una sola línea o bien puede definir varias instrucciones dentro de una sola línea, para esto tiene que separar cada instrucción con dos punto y coma( ;; ).

Ejemplo: INSTRUCCION ;; INSTRUCCION ;; INSTRUCCION

Nota: Si requiere ayuda mas explícita puede presionar Ctrl + F1 sobre cualquiera de las instrucciones para que el reporteador muestre la ayuda correspondiente a la instrucción solicitada.

holacomoestas :

HOLACOMOESTAS

HolaComoEstas :

HOLACOMOESTAS

holacomoestas :

holacomoestas

Page 17: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 17

Capitulo 3

Creación de reportes

Como iniciar un Reporte Para poder crear un reporte dentro de giro, es necesario entrar al menú de Reportes y ahí escoger en que sección desear anexar este nuevo registro. Bien puede ser un reporte “General, de Seguro Social, de Recursos Humanos o de Nómina”.

Page 18: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 18

Como iniciar un reporte

Una vez dentro del Catalogo de Reportes seleccionado, mostrará una ventana como la

que sigue y habrá que escoger el botón de

Se captura una clave de Reporte que no exista previamente que puede ser alfanumérica, y se le da un nombre para identificarlo con una descripción y se le da ACEPTAR.

Nota: Si se captura clave de reportes de forma numérica se recomienda que la numeración la establezcan del 200 en adelante ya que al actualizar en la empresa reportes estándares se sobrescriben del 0 al 199.

Una vez hecho esto, se busca en el catálogo el reporte que se acaba de crear y se

abre dándole doble clic .

Page 19: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 19

Como iniciar un reporte

Este reporte se crea con una utilería por default para generarlo con los filtros mas usados por las empresas que solicitan información del sistema, como enviar los datos agrupados por Sucursal, por Departamento, por Puesto etc. Y se anexan a la formula como archivos adjuntos llamados UTIL2.DAT y UTIL2A.DAT.

Empezar un Reporte desde Cero Para iniciar un reporte y omitir los filtros que se anexan al crear uno Nuevo (UTIL2.DAT y UTIL2A.DAT) se siguen los mismos pasos del punto anterior - Como Iniciar un Reporte -

Una vez hecho esto, hay que entrar a la pestaña de Fórmula y borrar los bloques de código que hacen referencia a estos archivos, eliminando todo el código que este después de la línea #FIN DE DESCRIPCION hasta el final del reporte. Una vez hecho esto se procede a verificar la sintaxis de la fórmula restante para checar que continúe correcta. Se compila haciendo uso de la tecla rápida <F3> o con un clic en el icono indicado.

Page 20: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 20

Empezar un Reporte desde cero Se guarda con la tecla <F2> o con el icono correspondiente. Después deberá salirse del reporte y volver a entrar. De esta manera ya no le aparecerán las referencias a los archivos UTIL2.DAT y UTIL2A.DAT quedando su reporte de la siguiente manera:

Modificando un Reporte existente Una vez que el usuario es capaz de entender y conoce perfectamente el lenguaje reporteador giro, se le hará muy sencillo hacer cambios a las fórmulas de los reportes ya contenidos en el catálogo. Más sin embargo y como una medida de seguridad, recomendamos que no se modifiquen directamente para evitar algún percance. Se sugiere que el usuario haga una copia del reporte requerido y ahora si, con suma confianza haga los cambios que necesita, así, si se requiere regresar al reporte original se pueda hacer fácilmente. También se recomienda esta opción para en cierta manera comenzar un nuevo reporte a partir de algo ya establecido y ahorrar tiempo de programación.

Page 21: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 21

Modificando un Reporte existente

En el catálogo de Reportes se encontrara la opción de el reporte y darle a este una clave y descripción nueva.

Eliminar un reporte del Catálogo Simplemente se selecciona el reporte que se desee borrar y se oprime el botón de

. Automáticamente el archivo es eliminado del Catalogo y de su ubicación física. Cuando el reporte no fue creado por el usuario, es decir que es un reporte Estándar. El botón de Borrar aparecerá como deshabilitado por protección.

Renombrar un reporte Se selecciona el reporte que se desee cambiar de Clave o de Descripción y se

oprime el botón , aparecerá una ventana para poder cambiar la clave del reporte – que no exista previamente - y el nombre del mismo. Se acepta el cambio y en automático hace la nueva modificación.

Page 22: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 22

Renombrar un reporte Cuando el reporte no fue creado por el usuario, es decir que es un reporte Estándar. El botón de RENOMBRAR aparecerá como deshabilitado por protección.

Otorgando derechos a los usuarios Giro Para establecer en giro quienes van a tener acceso a determinados reportes, existe dentro del mismo catálogo de reportes una opción que nos permitirá asignar quienes tendrán derecho dentro de nuestra empresa a ejecutarlos, dejando fuera de esa selección a los usuarios no requeridos. Se selecciona dentro del Catálogo el reporte deseado y se oprime el botón

, el cual nos desplegara una ventana donde podremos asignar los usuarios del sistema con privilegios sobre el mismo. Al dar clic sobre la flecha aparecen los usuarios del sistema a los que podrá restringir o permitir la edición de los reportes.

Page 23: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 23

Capitulo 4

Impresión de Reportes

Tipos de Impresión El reporteador giro permite definir dos tipos diferentes de impresión que determinan la forma de presentar el reporte tanto en pantalla como en hojas impresas. IMPRESIÓN GRAFICA Este tipo de reportes permite utilizar instrucciones especiales para imprimir en coordenadas basadas en centímetros y utilizar tipos de letra instalados en WINDOWS como los “TRUE TYPE”.

Nota: Este tipo de reportes son más lentos pero se imprimen en mucho más calidad.

IMPRESIÓN DIRECTA Este tipo de impresión se utiliza para impresoras de matriz de punto donde se requiere velocidad a baja calidad. Estos reportes no pueden utilizar instrucciones de impresión gráfica y deben utilizar letras definidas específicamente para la impresora a utilizar.

Nota: Si el reporte va a salir por disco, el tipo de impresión debe ser DIRECTO ya que de lo contrario el gráfico imprime instrucciones de más para especificar las coordenadas.

Page 24: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 24

Tipos de impresión

Para definir el tipo de impresión existe la instrucción MODO_IMPRESION y recibe como parámetro el tipo de impresión que puede ser GRAFICO o DIRECTO. Esta instrucción debe ir declarada al inicio del reporte. Ejemplo:

COLUMNAS:=80 RENGLONES:=65 MODO_IMPRESION( ‘GRAFICO’ ) IMP ( ‘HOLA’ ) IMPRIME

Para definir el tipo de impresión por default este se define en el archivo de configuración GIRO.INI en la sección del nombre de la impresora con la variable MODO_IMPRESION seguido por el tipo de impresión. Con esto define que por default el modo de impresión en DIRECTO. Si el reporte tiene definida la instrucción del modo de impresión entonces ignora el default y toma el que se defina en ese momento. Si el reporte no tiene definido el tipo de impresión y tampoco esta definido en el archivo de configuración el sistema define por default el modo de impresión DIRECTO.

Ejemplo: Archivo giro.ini [Star NX-1040] Definicion de tipos de letra.... .... ... MODO_IMPRESION = DIRECTO

Page 25: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 25

Tipos de Letra Todo el texto que se imprima ya sea en pantalla o en impresora se imprimirá con el tipo de letra especificado. Para especificar el tipo de letra a utilizar existe la instrucción LETRA que lleva como parámetro el nombre de la letra a utilizar, solo existen las siguientes letras: LETRA NORMAL LETRA CONDENSADA LETRA EXPANDIDA LETRA ENFATIZADA LETRA TITULO LETRA 1 LETRA 2 LETRA 3 Para cada una de estas letras se puede definir el tipo de letra a utilizar, esto es para facilitar el transportar los reportes de una maquina a otra ya que si se define directamente el nombre de la letra al correr el reporte en una maquina que no posea ese tipo de letra seria necesario modificar el código del reporte para que hiciera referencia a otro tipo de letra valido, por tal razón se definió de esta manera para que desde el menú de configuraciones en la configuración de tipos de letra se defina que tipo de letra corresponde a cada uno de los tipos antes mencionados. La ventana de configuración de letras tiene 2 carpetas una que corresponde a letras de pantalla y la otra a letras de impresora, ambas carpetas son similares y se configuran de igual manera solo que las letras de pantalla son las que se utilizan para desplegar el reporte en pantalla y las de impresora se utilizan al momento de enviar el reporte a impresora.

Page 26: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 26

Tipos de Letra Se recomienda que las letras de pantalla seleccionadas sean FIXED lo que significa que todas las letras tienen el mismo tamaño, esto es para que las columnas queden bien alineadas en los reportes, para verificar que una letra es FIXED en la carpeta de configuración seleccione el tipo de letra deseado y en la parte inferior se muestra un ejemplo de la impresión, si las columnas se muestran alineadas significa que la letra si es FIXED. Si el reporte esta definido como impresión DIRECTA al momento de imprimir el reporte a impresora tomará las letras especificadas en la pestaña 2 de ‘Letras impresora’ pero si el reporte es GRAFICO utilizará las mismas de ‘Letras Pantalla’ para imprimir por impresora. Recuerde que es muy recomendable que en la carpeta de letras de impresora defina letras que tengan una pequeña impresora dibujada al lado izquierdo lo que significa que son letras nativas de la impresora y son de mayor velocidad. Otra consideración a tomar para que la impresión en matriz de puntos sea más rápida es asignar la propiedad de calidad de impresión en BORRADOR o DRAFT en las propiedades de la impresora, esto puede variar de impresora a impresora. La instrucción LETRA cambia el tipo de letra desde la ejecución de la instrucción hasta encontrar otra definición de LETRA o terminar el reporte. Ejemplo LETRA( ‘LETRA NORMAL’ ) IMP ( ‘Impresión con letra Normal‘ ) ;; IMPRIME LETRA( ‘LETRA ENFATISADA’ ) IMP ( ‘Impresión con letra Enfatizada‘ ) ;; IMPRIME

Salida: Impresión con letra Normal Impresión con letra Enfatizada

Page 27: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 27

Rutinas y Funciones de Impresión Existen dos rutinas de impresión dependiendo el modo de impresión que tenga definido, ambas instrucciones funcionan de la misma manera solo que una lleva dos parámetros al inicio para indicar las coordenadas en X y Y a imprimir. Instrucción IMP Esta instrucción se puede utilizar en ambos tipos de impresión tanto DIRECTA como GRAFICA. Si se utiliza en modo GRAFICO se imprime donde actualmente se encuentre el apuntador de X y Y. Cuando se trate de imprimir valores alfanuméricos es necesario encerrar éstos en apóstrofes.

Esta instrucción puede recibir un número ilimitado de parámetros los cuales pueden ser numéricos o alfanuméricos. Cada uno de los parámetros debe ir separado por (,). Existen instrucciones que solo se utilizan como parámetros de esta instrucción que sirven para definir la columna donde se desea imprimir. Ejemplo: IMP ( ‘hola como estas‘, ‘ muy bien‘ );; IMPRIME

Instrucción COL La instrucción COL se utiliza como parámetro de la instrucción IMP para definir la columna donde se desea imprimir, la instrucción COL lleva como parámetro la columna donde se desea imprimir. Ejemplo:

IMP ( COL(10), ‘hola como estas‘, COL(30), ‘ muy bien‘ );;IMPRIME

Page 28: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 28

Rutinas y Funciones de Impresión

Instrucción IMPRIME La instrucción IMP no imprime inmediatamente después de ejecutada sino que esto lo almacena en un buffer hasta que se encuentre con la instrucción IMPRIME que indica que imprima todo lo que esta en ese momento en el buffer. Ejemplo: IMP ( ‘hola como estas‘, ‘ muy bien‘ ) IMPRIME

IMP ( COL(10), ‘hola como estas‘, COL(30), ‘ muy bien‘ ) IMPRIME

De esta manera se puede utilizar la instrucción IMP en varias ocasiones con diferentes parámetros de impresión y al final imprimir el contenido del buffer. Instrucción REPITETXT Si se desea imprimir uno o varios caracteres puede utilizar la instrucción REPITETXT que recibe como parámetros los caracteres a imprimir y el número de veces a imprimir. Ejemplo:

IMP ( ‘**************************************************’ ) IMPRIME IMP ( REPITETXT( ‘*’, 50 ) ) IMPRIME

Page 29: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 29

Rutinas y Funciones de Impresión Salida:

************************************************** **************************************************

Instrucción CANTIDAD_LETRA Si se desea imprimir la cantidad en letra existe la instrucción CANTIDAD_LETRA que recibe como parámetro el valor a convertir y retorna en un valor alfanumérico la cantidad con letra. Ejemplo: IMP ( CANTIDAD_LETRA (12345.67 ) ) ;; IMPRIME Salida: DOCE MIL TRESCIENTOS CUARENTA Y CINCO 67/100 M.N.

Instrucción $ La instrucción $ se utiliza también como parámetro del IMP para indicar que se desea imprimir una cantidad de pesos, esta instrucción recibe como parámetro el valor numérico que se desea imprimir. El formato de pesos que el reporteador utilizará estará determinado por la variable de ambiente FORMATO_PESOS ( Consulte la ayuda del reporteador para ver los formatos disponibles). Ejemplo:

Page 30: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 30

Rutinas y Funciones de Impresión

FORMATO_PESOS := 2 IMP ( $(12345.67) ) ;; IMPRIME FORMATO_PESOS := 3 IMP ( $(12345.67) ) ;; IMPRIME

Salida: 12,345.67 1234567

Justificación DERECHA – Instrucción DER La instrucción IMP por default imprime todo justificado a la izquierda, si desea

justificar a la derecha la impresión se utiliza la instrucción DER que lleva 2 parámetros, el primero que especifica el valor alfanumérico a imprimir y el segundo que indica la longitud del valor a imprimir. Esta instrucción no solo se utiliza dentro de la instrucción IMP, se puede utilizar en cualquier momento ya que retorna el valor alfanumérico con valor de pesos.

Ejemplo. 1 IMPRIME IMP( 123.45 ) ;; IMPRIME IMP( 12.34 ) ;; IMPRIME IMP( 1234.56 ) ;; IMPRIME IMP( 1234567.89 ) ;; IMPRIME

Page 31: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 31

Rutinas y Funciones de Impresión Salida: 123.45 12.34 1234.56 1234567.89 Ejemplo. 2 IMPRIME IMP( DER( $(123.45), 12 ) ) ;; IMPRIME IMP( DER( $(12.34), 12) ) ;; IMPRIME IMP( DER( $(1234.56), 12) ) ;; IMPRIME IMP( DER( $(1234567.89), 12) ) ;; IMPRIME $alf := $(12345.67) IMP ( DER($alf, 12 ) ) ;; IMPRIME Salida: 123.45 12.34 1,234.56 1,234,567.89 12,345.67

Page 32: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 32

Rutinas y Funciones de Impresión La instrucción DER rellena los valores en blanco con el valor que este configurado en la variable de ambiente RELLENO. Ejemplo: IMPRIME IMP ( DER( ‘hola’, 12 ) ) ;; IMPRIME RELLENO := ‘*’ IMP ( DER( ‘hola’, 12 ) ) ;; IMPRIME Salida: hola

********hola

Justificación CENTRO

La instrucción CENTRA recibe como parámetro un valor alfanumérico y se utiliza para centrar en la hoja el valor enviado como parámetro. El reporte por default toma 80 columnas y en base a eso lo centra pero puede cambiar el ancho de la hoja utilizando la variable de ambiente COLUMNAS que determina el número de columnas del reporte. Ejemplo:

Page 33: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 33

Rutinas y Funciones de Impresión

COLUMNAS := 200 IMP ( CENTRA( ‘Texto a imprimir en el centro de la hoja’ ) ) IMPRIME

Salida:

Texto a imprimir en el centro de la hoja

Instrucción IMP_XY Esta instrucción se utiliza de igual forma a IMP solo que en esta los 2 primeros parámetros indican las coordenadas X y Y respectivamente, y al final de cada instrucción IMP_XY es necesario ejecutar la instrucción de IMPRIME. Ejemplo: MODO_IMPRESION( ‘GRAFICO’ )

DECIMALES := 0 IMP_XY ( 200, 200, $(123.45 ) );; IMPRIME DECIMALES := 2 IMP_XY ( 1000, 200, $( 123.45 )) ;; IMPRIME

Page 34: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 34

Rutinas y Funciones de Impresión

Salida:

123 123.45 Note que la salida es la misma solo que la forma de programar es distinta y la calidad de impresión en papel es mejor. Las coordenadas que se especifican en cualquier instrucción gráfica se hace en base a centímetros donde un valor de 100 corresponde a 1 Cm. Instrucción FORMATO La instrucción FORMATO permite imprimir valores alfanuméricos con determinado formato que podemos establecer, esta instrucción recibe 2 parámetros, el primero que especifica la variable alfanumérica a imprimir y el segundo que especifica el formato a utilizar al momento de imprimir. Ejemplo: IMP ( FORMATO( ‘1234567890’, ‘XX-XX/XXX*XXX’ ) ) ;; IMPRIME Salida:

Page 35: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 35

Rutinas y Funciones de Impresión

12-34/567*890

Manejo de Fechas, Horas Si desea imprimir fechas debe utilizar la instrucción FECHA la cual recibe como parámetro la fecha que se desea imprimir, para determinar el formato a utilizar al momento de imprimir la fecha se utiliza la variable de ambiente FORMATO_FECHA (Consultar la ayuda en línea para ver los formatos disponibles.). Si desea saber la fecha del sistema existe otra variable de ambiente llamada FECHA_HOY que retorna la fecha del reloj del sistema. Ejemplo: FORMATO_FECHA := 2 IMP ( ‘La fecha del sistema es : ‘, FECHA( FECHA_HOY ) ) ;; IMPRIME El reporteador utiliza las fechas en formato Juliano lo que significa que el valor de la fecha es un Entero que guarda los días transcurridos desde el 1ro de Enero de 1900 hasta la fecha, por tal motivo para hacer operaciones con fecha basta con sumar o restar los días. Ejemplo:

Page 36: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 36

Manejo de Fechas, Horas FORMATO_FECHA := 2 IMP ( ‘La fecha de hoy es : ‘, FECHA( FECHA_HOY ) ) ;; IMPRIME IMP ( ‘La fecha de hoy + 30 días es : ‘, FECHA( FECHA_HOY + 30 ) ) IMPRIME Instrucción CALCULA_FECHA La instrucción CALCULA_FECHA recibe como parámetro el año, mes y día respectivamente y retorna la fecha en formato juliano.

Nota: Si la fecha especificada no existe la instrucción tratará de buscar una valida para evitar el error.

Ejemplo: FORMATO_FECHA := 2 IMP ( FECHA( CALCULA_FECHA( 98, 11, 16 ) ) ) ;; IMPRIME IMP ( FECHA( CALCULA_FECHA( 98, 02, 31 ) ) ) ;; IMPRIME Salida: 16-NOV-98 28-FEB-98

Page 37: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 37

Manejo de Fechas, Horas En el ejemplo anterior la segunda instrucción se pide que imprima la fecha del 31 de febrero lo cual es un error por lo que la instrucción retorna la del día inmediato anterior. Manejo de HORAS Al igual que la impresión de fecha existe una instrucción para imprimir valores de horas, HORA recibe como parámetro a imprimir,. La instrucción HORA_ACTUAL retorna la hora del sistema y al igual que la de la fecha no se le puede asignar valor. Ejemplo: IMP ( ‘La hora actual del sistema es : ‘, HORA( HORA_ACTUAL ) ) IMPRIME

Uso de colores El reporteador giro permite hacer uso de colores para hacer de sus reportes mas presentables, si no posee impresora a colores la impresión en papel será en el color de la tinta pero en pantalla se mostrará con los colores definidos. La instrucción para definir el color es COLOR la cual recibe como parámetro el color deseado (Vea la ayuda en línea para ver los colores disponibles en el sistema). Ejemplo: IMP ( ‘Color por default.’ ) ;; IMPRIME COLOR( ‘AZUL’ ) IMP ( ‘Impresión en color AZUL’ ) ;; IMPRIME COLOR( ‘ROJO’ ) IMP ( ‘Impresión en color ROJO’ ) ;; IMPRIME

Page 38: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 38

Uso de colores Si el modo de impresión esta definido como GRAFICO la definición de este color afecta también la impresión de gráficos que posteriormente se verán como la impresión de círculos, líneas y cuadros.

Definición de encabezados y pie de página El reporteador giro permite definir encabezados y pie para cada una de las páginas los cuales se mandan llamar automáticamente. Dentro de los bloques del encabezado y el pie se pueden ejecutar cualquier tipo de instrucciones excepto la declaración de variables. Cada uno de los bloques debe ir indicado el inicio y el fin del mismo, para el encabezado se indica con ENCABEZADO y FIN_ENCABEZADO, todas las instrucciones que se encuentren dentro de este ciclo se van a ejecutar automáticamente cuando el reporteador imprima una nueva página. El pie se inicia con PIE y termina con FIN_PIE.

Nota: Recuerde que todas las variables en el compilador son globales por los que se recomienda que las variables que se utilicen en el cuerpo del reporte no se utilicen en el pie o el encabezado ya que puede resultar en una terminación anormal del reporte o bien que este nunca termine.

Ejemplo: ENCABEZADO LETRA( ‘LETRA ENFATISADA’ ) IMP ( ‘Encabezado de la hoja’ ) ;; IMPRIME LETRA( ‘LETRA NORMAL’ ) FIN_ENCABEZADO PIE DECIMALES := 0 IMP( ‘Pie de página número : ‘, PAGINA ) ;; IMPRIME DECIMALES := 2 FIN_PIE IMPRIME Cuando la salida de un reporte se requiera por disco se recomienda que omita o bien se condicione para que el contenido del archivo no tenga la definición del encabezado ni el pie de página.

Page 39: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 39

Definición de encabezados y pie de página

Tamaño de reporte Todos los reportes por default tienen tamaño carta, si desea cambiarlo a un tamaño especifico puede utilizar la instrucción TAMAÑO_HOJA la cual recibe como parámetro el largo y ancho respectivamente, esta instrucción se puede utilizar tanto en reportes gráficos como directos. Los valores de largo y ancho se deben especificar en centímetros donde 100 representa 1 cm.

Esta instrucción debe utilizarse al inicio del reporte antes de hacer cualquier

impresión. Una vez que termine de imprimir una hoja y desee cambiar a la siguiente debe ejecutar la instrucción AVANZA_HOJA. NOTA: La instrucción AVANZA_HOJA manda llamar automáticamente el encabezado y pie de página si es que estos existen. Ejemplo: MODO_IMPRESION( ‘GRAFICO’ ) TAMAÑO_HOJA ( 1500, 2200 ) IMP ( ‘Esto se imprime en la primera hoja’ ) ;; IMPRIME AVANZA_HOJA IMP ( ‘Esto se imprime en la segunda hoja’ ) ;; IMPRIME Este reporte define un papel de 15 cm. de largo por 22 cm. de ancho. Existe otra forma de definir el tamaño del reporte pero esto solo funciona si el reporte esta definido como DIRECTO. Las variables COLUMNAS y RENGLONES determinan el tamaño de la hoja, esta variables solo se les puede asignar valores. Ejemplo: MODO_IMPRESION( ‘DIRECTO’ ) COLUMNAS := 100 RENGLONES := 15 IMP ( ‘Esto se imprime en la primera hoja’ ) ;; IMPRIME AVANZA_HOJA IMP ( ‘Esto se imprime en la segunda hoja’ ) ;; IMPRIME

Page 40: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 40

Definición de encabezados y pie de página

La variable PAGINA retorna la página en la que se encuentra actualmente, a

esta variable no se le puede asignar valor. Ejemplo: MODO_IMPRESION( ‘DIRECTO’ ) COLUMNAS := 100 RENGLONES := 15 IMP ( ‘Esto se imprime en la primera hoja’ ) ;; IMPRIME DECIMALES := 0 IMP ( ‘Número de Página : ‘, PAGINA ) ;; IMPRIME AVANZA_HOJA IMPRIME IMP ( ‘Esto se imprime en la segunda hoja’ ) ;; IMPRIME IMP ( ‘Número de Página : ‘, PAGINA ) ;; IMPRIME

Instrucción LEE_INI(seccion,variable,default) Esta instrucción nos permite leer alguna configuración especifica del archivo GIRO.INI del sistema para poder aplicarlo en la ejecución de algún reporte. seccion especifica el bloque del ini que se requiere, variable nos indica la linea requerida y default es el valor que toma de inicio.

_ajuste_x := VALOR( LEE_INI( TRAE_IMPRESORA, 'AJUSTE_X_RECIBOS_GRAFICO', '0' ) )

Page 41: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 41

Instrucción ESCRIBE_INI(seccion,variable,default) Esta instrucción nos permite escribir dentro de una configuración especifica del archivo GIRO.INI del sistema para grabar información en un parámetro de configuración válido. seccion especifica el bloque del ini que se requiere, variable nos indica la linea requerida y default es el valor que grabará en el archivo.

_ajuste_x := ESCRIBE_INI( TRAE_IMPRESORA, 'AJUSTE_X_RECIBOS_GRAFICO', _ajuste )

Instrucciones graficas El reporteador de giro permite definir reportes de tipo gráfico lo cual permite utilizar instrucciones para posicionamiento del cursor, impresión de líneas, círculos, cuadros, etc. VE_X ( pos ) VE_Y ( pos ) VE_XY ( pos1, pos2 ) Estas instrucciones mueven el cursor a la posición indicada. Una vez que se hace la impresión las coordenadas de X y Y se mueven automáticamente. Ejemplo:

MODO_IMPRESION( ‘GRAFICO’ ) VE_XY( 100, 100 ) ;; IMP ( ‘Posición 100, 100’ ) ;; IMPRIME

Page 42: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 42

Instrucciones graficas X_ACTUAL Y_ACTUAL Estas instrucciones respectivamente retornan la posición en X y Y del cursor en ese momento. A estas instrucciones se les puede asignar valor para cambiar la posición del cursor. Ejemplo:

MODO_IMPRESION( ‘GRAFICO’ ) VE_X( 100 ) IMP ( .(X_ACTUAL) ) ;; IMPRIME

IMP_XY( X, Y, ‘cadena’ ) Imprime una cadena de caracteres en las coordenadas especificadas por los parámetros X y Y. Esta instrucción requiere un IMPRIME para enviar el buffer a impresión. Ejemplo:

MODO_IMPRESION( ‘GRAFICO’ ) IMP_XY ( 100, 100, ‘Posición 100, 100’ ) ;; IMPRIME

IMPRIME_REC( X, Y, ANCHO, ALTO ) Imprime un rectángulo en las coordenadas X y Y, de las dimensiones especificadas en ANCHO y LARGO. Ejemplo:

Page 43: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 43

Instrucciones graficas

MODO_IMPRESION( ‘GRAFICO’ ) IMPRIME_REC ( 200, 100, 1000, 500 )

IMPRIME_CIRCULO( X, Y, ANCHO, ALTO ) Imprime un circulo en las coordenadas X y Y, de las dimensiones especificadas en ANCHO y LARGO. Ejemplo:

MODO_IMPRESION( ‘GRAFICO’ ) IMPRIME_CIRCULO ( 200, 100, 300, 300 )

IMPRIME_LINEA( X1, Y2, X2, Y2 ) Imprime una línea desde la coordenada X1 y Y1 hasta la coordenada X2 y Y2. Ejemplo:

MODO_IMPRESION( ‘GRAFICO’ ) IMPRIME_LINEA ( 200, 100, 1000, 500 )

Page 44: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 44

Instrucciones graficas IMPRIME_IMAGEN( ‘Imagen’, X, Y, ANCHO, ALTO ) Imprime una imagen en la posición X y Y, de las dimensiones especificadas en ANCHO y LARGO. ‘Imagen’ puede ser un valor alfanumérico especificando el nombre de la imagen deseada la cual debe estar dada de alta en el catálogo de imágenes del menú de configuración o bien puede ser una variable de tipo alfanumérico especificando la ruta completa del archivo, el cual debe ser formato BMP o JPG.

MODO_IMPRESION( ‘GRAFICO’) IMPRIME_IMAGEN ( ‘C:\GIRO\LOGO.BMP’, 100, 100, 500, 500 )

Mensajes MENSAJE( ‘mensaje a desplegar’ ) Esta instrucción muestra el mensaje enviado como parámetro en un pequeño dialogo el cual es necesario presionar Aceptar para continuar, esto funciona a manera de pausa en el reporte.

PREGUNTA( ‘pregunta de respuesta Si o No’ ) Esta instrucción permite hacer al usuario una pregunta a la cual solo existen dos respuestas posibles que son los botones Si y No. Esta hace una pausa hasta que el usuario responda, por lo que esta instrucción retorna 1 o VERDADERO cuando la respuesta es si y 0 o FALSO de lo contrario.

Page 45: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 45

Mensajes Ejemplo:

ABRE_BASE( ‘EMPPRIN’ ) PRIMER_REGISTRO( ‘EMPPRIN’ ) SI ( PREGUNTA( ‘Desea borrar el trabajador ’ + ‘EMPPRIN’:’CLAVE’ + ‘?’ ) ) BORRA_REGISTRO( ‘EMPPRIN’ ) FIN_SI

Nota: Recuerde que si borra registros de una tabla padre tiene que incluir el proceso de borrado de los registros relacionados en las tablas hijas. En el ejemplo anterior solo se elimina el registro de la tabla padre pero es en cierta forma un error ya que los registros de las tablas hijas quedan huérfanas.

EXCEL ( comando, col, ren, valor ) Con esta instrucción es posible enviar datos a una Hoja de Excel en columna, renglón, especificadas en la función, o inclusive en alguna pagina existente o crear nuevas hojas dentro del documento. Se utilizan 4 parámetros en donde el primero: comando sirve para especificar la instrucción empleada por Excel para acceder al archivo. Estas pueden ser: PON_VALOR, TRAE_VALOR, CAMBIA_PAGINA, AGREGA_PAGINA, AGREGA_HOJA_PLANTILLA. col y ren denotan la columna y renglón dentro de Excel, y valor es el dato numero o alfanumérico que puede enviarse.

PON_VALOR Este comando se puede utilizar como en el siguiente ejemplo:

Page 46: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 46

Excel

EXCEL (‘PON_VALOR’, 1, 1, ‘HOLA’ ) EXCEL (‘PON_VALOR’, 2, 1, ‘COMO’ ) EXCEL (‘PON_VALOR’, 3, 1, ‘ESTAS’ ) EXCEL (‘PON_VALOR’, 1, 2, 500 ) EXCEL (‘PON_VALOR’, 2, 2, 600 ) EXCEL (‘PON_VALOR’, 3, 2, 800 )

Nota: Al llegar el compilador de giro a la instrucción de EXCEL, este en automático abrirá el programa de Windows Excel para empezar a trabajar. Si no esta bien configurado, le marcará un error. Verificar la versión en el menú de giro de Configuraciones Varias. TRAE_VALOR Este comando se puede utilizar como en el siguiente ejemplo y funciona para

traerse valores ubicados en el renglón y columna que se le pase como parámetro.

EXCEL (‘TRAE_VALOR’, 1, 1, $valor1) EXCEL (‘TRAE_VALOR’, 2, 1, $valor2 ) EXCEL (‘TRAE_VALOR’, 3, 1, $valor3 )

En el ejemplo, el resultado de la consulta lo guardará en las variables

$valor1, $valor2 y $valor3.

Page 47: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 47

Excel

CAMBIA_PAGINA Este comando se aplica cuando se requiere cambiar a otra hoja de Excel del

documento y ya sea leer información de ahí, o escribir nuevos datos. AGREGA_PAGINA Como su nombre lo dice, la función agrega una nueva hoja en el documento

para comenzar a escribir. IMPRIME_PAGINA Imprime la hoja de Excel en la que se esta trabajando, Si es excel XP o superior

se puede especificar el numero de la hoja en el último parámetro de la instrucción EXCEL, los otros dos parametros intermedios no se utilizan.

EXCEL (‘CAMBIA_PAGINA’, 2, 0, ‘’ ) EXCEL (‘AGREGA_PAGINA’, 0, 0, ‘’ ) EXCEL (‘IMPRIME_PAGINA’, 0, 0, 2)

Nota: La instrucción AGREGA_HOJA_PLANTILLA la veremos mas adelante al ver importaciones de archivos de Excel a Giro.

Page 48: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 48

Word

IMPRIME_WORD Esta función nos permite imprimir documentos desde el Reporteador, aquellas cartas y/o contratos que tenemos especificados en el sistema Giro. El formato es el que sigue:

IMPRIME_WORD ( Documento, Clave_Empleado, Tipo (INICIAL,RENOVACION,GENERAL), Fecha_Consulta, Fecha_Contrato, Duracion, Formato_Fecha (Debe de existir en giroserv), Comentario, SQL )

IMPRIME_WORD ( ‘DOC001’, ‘0001’, ‘INICIAL’ , Fecha_Consulta, Fecha_Contrato, 28, ‘dd- mmm-aaaa’, Comentario, ‘’ )

Page 49: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 49

Capitulo 5

Tipos de Variables Existen 3 tipos de variables: Numéricas: Que pueden ser valores enteros o reales. Alfanuméricas: Que pueden ser de máximo 255 caracteres de longitud. Tabla: Que representan una matriz de n * n. Las restricciones para asignar el nombre de las variables son las siguientes: 1.-No exceder más de 20 caracteres. 2.-No tener espacios en blanco.

Declaración de variables Las variables se pueden declarar en cualquier momento la única restricción es que sea fuera de cualquier bloque como ciclos MIENTRAS, REPITE, ENCABEZADOS, CONDICIONALES, etc. Es decir, se declaran como globales dentro del reporte y tienen que ser declaradas Variables Numéricas Para declarar las variables numéricas existen dos formas: 1.-Utilizando la instrucción diseñada para declarar variables de este tipo: VAR_N ( _nombre ) 2.-Asignando directamente el valor a la variable:

Page 50: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 50

Declaración de Variables Ejemplo: _nombre := 13.25 _var2 := 3

Nota: Para hacer uso de este tipo de declaración es necesario anteponer el símbolo _ para indicar al reporteador que la variable es de tipo numérico.

Variables Alfanuméricas Para declarar las variables alfanuméricas existen dos formas: 1.-Utilizando la instrucción diseñada para declarar variables de este tipo: Ejemplo: VAR_A ( $nombre ) 2.-Asignando directamente el valor a la variable: Ejemplo: $nombre := ‘Variable de tipo alfanumérica’

Page 51: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 51

Declaración de Variables

Nota: Para hacer uso de este tipo de declaración es necesario anteponer el símbolo $ para indicar al reporteador que la variable es de tipo alfanumérico.

Variables Tipo Tabla Este tipo de variable solo se puede declarar utilizando la instrucción diseñada para este tipo de variables: Ejemplo: VAR_T ( &tabla ) Para asignar valores a este tipo de variable es necesario utilizar instrucciones que posteriormente se explicaran.

Asignación de Valores a Variables La asignación de variables se puede hacer en cualquier momento independientemente del bloque en el que se encuentre. A las variables se les puede asignar directamente el valor deseado o bien el resultado de alguna operación o como resultado de la llamada a una instrucción de retorna valor. Estos son algunos ejemplos de asignaciones: _var1 := 23.45 _var2 := _var1 * 5 $var3 := ‘Variable tipo’ $var4 := $var3 + ‘ ‘ + ‘Alfanumérico’ $var5 := ‘123’ _var6 := VALOR( $var5 ) $var7 := .( _var1 )

Page 52: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 52

Conversión de Variables Existen solo 2 tipos de conversión de datos ya que en realidad solo se manejan variables de tipo numérico y alfanumérico debido a que las variables de tipo tabla almacenan los valores de cada celda de forma alfanumérica. De alfanumérico a numérico: Alfanumérico -> Numérico La instrucción para este tipo de conversión es VALOR la cual recibe como parámetro la variable o el valor alfanumérico y retorna el valor numérico. Ejemplo: _var1 := VALOR( ‘123.45’ )

Nota: Si el valor enviado como parámetro no corresponde a un valor numérico valido el la instrucción retorna un 0.

Ejemplo: _var1 := VALOR ( ‘123a.45’ ) Salida:

Page 53: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 53

Conversión de Variables 0

De Numérico a alfanumérico: Numérico -> Alfanumérico La instrucción para este tipo de conversión es .( ) la cual recibe como parámetro la variable o el valor numérico y retorna el valor alfanumérico. Ejemplo:

$var1 := .( 123.45 )

Manejo de Valores Alfanuméricos LONGITUD( variable ) Esta instrucción retorna la longitud de la variable alfanumérica enviada como parámetro. Ejemplo:

Page 54: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 54

Manejo de Valores Alfanuméricos

VAR_A ( $cadena )

$cadena := ´valor alfanumérico´ IMP ( LONGITUD( $cadena ) ) ;; IMPRIME

SUBSTR( cadena, i, f ) Esta instrucción retorna la sub cadena de la cadena enviada como parámetro desde el caracter i hasta el caracter f. Ejemplo: VAR_A( $aux ) $aux := ‘Ejemplo de Subcadenas’ IMP ( SUBSTR( $aux, 12, 3 ), ‘marino’ ) IMPRIME Salida: Submarino

Page 55: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 55

Manejo de Valores Alfanuméricos POS( cadena, subcadena ) Esta instrucción retorna un valor numérico de la posición en la que el inicio de la subcadena dentro de la cadena. Ejemplo: VAR_A( $aux ) $aux := ‘Cadena de ejemplo’ DECIMALES := 0 IMP ( POS( ‘ejemplo’, $aux ) ) IMPRIME Salida: 11 ELIMINA( cadena, inicio, tot ) Esta instrucción elimina de la cadena una subcadena desde el valor de inicio hasta la longitud del valor tot. Esta instrucción retorna la cadena resultante de la eliminación de los caracteres. Ejemplo: VAR_A( $aux ) $aux := ‘Cadena de ejemplo’ IMP ( ELIMINA( $aux, 7, 3 ) ) IMPRIME

Page 56: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 56

Manejo de Valores Alfanuméricos Salida: Cadena ejemplo REEMPLAZA( cad1, cad2, cadena ) Esta instrucción permite hacer el reemplazo de un caracter o una subcadena dentro de la cadena enviada como parámetro. cad1 representa el la subcadena a reemplazar y cad2 la subcadena a ser reemplazada. Esta instrucción retorna la cadena resultante del reemplazo. Ejemplo: VAR_A( $aux ) $aux := ‘Cadena de ejemplo’ IMP ( REEMPLAZA( ‘e’, ‘E’, $aux ) ) IMPRIME Salida: CadEna dE Ejemplo

Page 57: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 57

Manejo de Valores Alfanuméricos MAYUSCULAS( cadena ) Esta instrucción recibe como parámetro una cadena y retorna la misma cadena pero convertida a mayúsculas. Ejemplo: VAR_A( $aux ) $aux := ‘Cadena de ejemplo’ IMP ( MAYUSCULAS( $aux ) ) IMPRIME Salida: CADENA DE EJEMPLO QUITA_CARACTER( car, cadena ) Esta instrucción elimina de la cadena el caracter enviado como parámetro. Ejemplo: VAR_A( $aux ) $aux := ‘Cadena de ejemplo’ IMP ( QUITA_CARACTER( ‘e’, $aux ) ) IMPRIME

Page 58: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 58

Manejo de Valores Alfanuméricos Salida: Cadna d jmplo

Manejo de Valores Numéricos TRUNCAR( valor ) Esta instrucción trunca el valor enviado como parámetro. Ejemplo:

VAR_N ( _int ) _int := 23.99 DECIMALES := 2 IMP ( ‘El valor truncado de int es ‘, TRUNCAR ( _int ) ) IMPRIME

Salida:

23.00

Page 59: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 59

Manejo de Valores Numéricos FRAC( valor ) Esta instrucción retorna el valor de la fracción del valor enviado como parámetro. Ejemplo:

VAR_N ( _int ) _int := 23.99 DECIMALES := 2 IMP ( 'El valor truncado de i es ', FRAC( _int ) ) IMPRIME

Salida:

0.99

Manejo de Tablas Este tipo de variables son muy útiles en los reportes ya que nos sirven para organizar mejor la información, ahorrar espacio, generar gráficas y hacer consultas SQL. Las tablas en sí son matrices que pueden ser de n*n donde n no debe exceder de 65000. Todas las celdas almacenan valores alfanuméricos por lo que si deseamos guardar valores numéricos tenemos que hacer una conversión. Existen varias instrucciones para el manejo de las tablas, vamos analizándolas una por una.

Page 60: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 60

Manejo de Tablas

PON_VALOR_TABLA( tabla, Col, Ren, Valor ) Esta instrucción permite asignar un valor a una celda, tabla representa la variable de tipo tabla previamente declarada, Col y Ren indican respectivamente la columna y el renglón de la celda a guardar el Valor.

Si Col y Ren tienen valor 0 (cero), indicará que el Valor se asignará en la columna 0, renglón 0. Valor corresponde a un dato numérico o alfanumérico este puede escribirse directamente como cadena o bien una variable. Esta instrucción sobrescribe el valor que actualmente tenga la celda.

Ejemplo:

VAR_T ( &tabla )

PON_VALOR_TABLA( &tabla, 0, 0, ‘Columna 0, Renglón 0’ ) PON_VALOR_TABLA( &tabla, 1, 0, ‘Columna 1, Renglón 0’ )

&tabla Columna 0 Renglón 0

Columna 1 Renglón 0

Hasta aquí hemos insertado datos en el arreglo o tabla, en ciertas posiciones de manera manual. Para leer los datos se utiliza la instrucción TRAE_VALOR_TABLA que veremos a continuación.

Nota: Cabe señalar que el VALOR que se inserte con esta instrucción se guarda en formato alfanumérico en la celda correspondiente. Es decir, para el caso de valores numéricos hay que hacer conversión una vez que se recupere ese dato.

Page 61: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 61

Manejo de Tablas

TRAE_VALOR_TABLA( tabla, Col, Ren ) Esta instrucción lee el valor que se encuentra en la celda indicada por la columna y el renglón. Esta instrucción retorna un valor alfanumérico. Ejemplo: VAR_T ( &tabla ) PON_VALOR_TABLA( &tabla, 0, 0, ‘Columna 0, Renglón 0 ‘) PON_VALOR_TABLA( &tabla, 1, 0, ‘Columna 1, Renglón 0 ‘) IMP ( TRAE_VALOR_TABLA( &tabla, 0, 0 ) ) ;; IMPRIME IMP ( TRAE_VALOR_TABLA( &tabla, 1, 0 ) ) ;; IMPRIME Completando el ejemplo anterior y utilizando además la instrucción IMP, mandamos llamar los datos guardados en las posiciones de la tabla para presentarlos en pantalla. Salida: Columna 0, Renglón 0 Columna 1, Renglón 0 LIMPIA_TABLA ( tabla )

Esta instrucción como su nombre lo dice limpia todas las celdas y las pone en blanco. Es muy útil para reutilizar variables en la misma ejecución del reporte.

Page 62: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 62

Manejo de Tablas AGREGA_VALOR_COL ( tabla, Col, Valor ) Esta instrucción es similar a PON_VALOR_TABLA ya que también asigna un valor a una determinada celda, la diferencia es que a esta instrucción, solo envías la columna y automáticamente la instrucción le busca una celda vacía iniciando del renglón 0 y asigna el valor a la celda correspondiente. VAR_T (&tabla ) AGREGA_VALOR_COL( &tabla, 0, ‘HOLA’ ) AGREGA_VALOR_COL( &tabla, 0, ‘SALUDOS’ ) AGREGA_VALOR_COL( &tabla, 0, ‘HOLA’ ) AGREGA_VALOR_COL( &tabla, 1, ‘MEXICO’ ) El grabado en la tabla sería de esta manera:

&tabla

HOLA MEXICO

SALUDOS

HOLA

Nótese que al ir utilizando esta instrucción el valor que se inserta se va acomodando al inicio de la columna y conforme volvamos a hacer referencia a la misma columna el valor se acomoda en la fila siguiente, no importando inclusive que una celda ya contenga un valor idéntico al que estemos agregando. Al cambiar de columna, el nuevo valor comienza desde la posición 0 ( cero ) de la misma. AGREGA_VALOR_REN ( tabla, Ren, Valor ) Esta instrucción es similar a la anterior solo que en esta se especifica el renglón y la columna corresponde a la celda donde se encuentre vacía.

Page 63: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 63

Manejo de Tablas TRAE_INDICE_COL( tabla, col, valor ) Esta instrucción nos ayuda a buscar un valor dentro de la columna especificada, si el valor se encuentra la instrucción retorna el índice de la columna y de lo contrario retorna –1. Ejemplo: SI ( TRAE_INDICE_COL( &tabla, 0, ‘SALUDOS’ ) <> -1 ) AGREGA_VALOR_REN ( &tabla, TRAE_INDICE_COL( &tabla, 0, ‘SALUDOS’ ), ‘A TODOS’ ) FIN_SI Si tomamos el ejemplo de la tabla anterior el resultado sería el siguiente: &tabla

HOLA MEXICO

SALUDOS A TODOS

HOLA

Esto debido a que TRAE_INDICE_COL busca el valor ‘SALUDOS’ dentro de la columna CERO, para la instrucción, el resultado que regresa es UNO (1), que es el renglón donde esta posicionada la variable; la instrucción AGREGA_VALOR_REN por consiguiente encuentra la columna UNO como siguiente para insertar el valor ‘A TODOS’. TRAE_INDICE_REN( tabla, ren, valor ) Esta instrucción nos ayuda a buscar un valor dentro del renglón especificado, si el valor se encuentra la instrucción retorna el índice del renglón y de lo contrario retorna –1. Funciona de la misma manera que su contraparte TRAE_INDICE_COL que analizamos en el ejemplo anterior.

Page 64: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 64

Manejo de Tablas

ASIGNA_VALOR_TABLA( tabla, valor1, valor2, numérico ) Esta instrucción nos sirve para insertar una valor a determinada celda en una tabla, pero este valor a asignar debe ser de tipo numérico, valor1 y valor2 deben ser de tipo alfanumérico y representan respectivamente la columna y el renglón en manera de etiquetas, lo que hace esta instrucción es buscar en la columna 0 el valor1 y en el renglón 0 el valor2, si no encuentra el valor automáticamente busca una celda vacía y ahí asigna el valor enviado como parámetro, este valor sobrescribe el valor que actualmente tenga la celda. Ejemplo: VAR_T( &tabla ) ASIGNA_VALOR_TABLA ( &tabla, ‘TOTAL’, ‘DEPTO’, 1234.55 ) ASIGNA_VALOR_TABLA ( &tabla, ‘TOTAL’, ‘ZONA’, 500 ) ASIGNA_VALOR_TABLA ( &tabla, ‘DEPTO’, ‘SISTEMAS’, 999.77 ) Para este caso, el acomodo de los datos se vería físicamente de la siguiente manera: &tabla

/ TOTAL

DEPTO

DEPTO 1234.55

ZONA 500

SISTEMAS

999.77

De esta manera la instrucción se encarga del acomodo de los datos de acuerdo solo a las etiquetas que nosotros le vamos asignando a los valores, si no existe el cruce de columna y renglón, lo crea y guarda en esa celda la información. Para leer el dato simplemente utilizamos la instrucción VALOR_TABLA que veremos a continuación.

Page 65: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 65

Manejo de Tablas

VALOR_TABLA ( tabla, valor1, valor2 ) Esta instrucción trae el valor numérico que se encuentra en la celda que cruza en valor1 y valor2 dentro de la variable tabla, donde valor1 y valor2 son las etiquetas con las que guardamos el valor anteriormente. Si alguno de los dos valores no existe entonces este retorna 0. Completando el ejemplo anterior, para leer los datos que recién guardamos lo haríamos de la siguiente forma: IMP ( ‘Total DEPTO:’ , VALOR_TABLA( &tabla, ‘TOTAL’ , ‘DEPTO’ ) ) ;; IMPRIME IMP ( ‘Total ZONA:’ , VALOR_TABLA( &tabla, ‘TOTAL’ , ‘ZONA’ ) ) ;; IMPRIME IMP ( ‘Total SISTEMAS:’ , VALOR_TABLA( &tabla, ‘DEPTO’, ‘SISTEMAS’ ) ) ;; IMPRIME La salida sería: Total DEPTO: 1234.55 Total ZONA: 500 Total SISTEMAS: 999.77 VALOR_TABLA_CADENA ( tabla, valor1, valor2 ) Esta instrucción se maneja igual a la instrucción VALOR_TABLA pero lo que regresa es la celda de forma alfanumérica.

Page 66: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 66

Manejo de Tablas

INCREMENTA_TABLA ( tabla, valor1, valor2, numérico ) Esta instrucción permite incrementar el contenido de una celda en forma numérica de la variable tabla, la celda a sumar es la que corresponde al cruce de valor1 y valor2 expresado en etiquetas, si alguno de los dos no existe entonces inicializa la celda en el valor de incremento que se le pasa en la instrucción. Ejemplo: VAR_T ( &tabla ) INCREMENTA_TABLA( &tabla, 'COL', 'REN', 10 ) INCREMENTA_TABLA( &tabla, 'COL', 'REN', 10 ) IMP ( VALOR_TABLA( &tabla,'COL', 'REN' ) ) ;; IMPRIME Salida: 20

IMPRIME_TABLA( tabla, col1, col2, col3.....) Esta instrucción permite imprimir el contenido de una tabla, para esto debe especificar las columnas (col1, col2, col3..) o posiciones en las que desee que imprima cada una de las columnas de la tabla en pantalla. Manejo de Tablas

Page 67: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 67

Ejemplo: VAR_T ( &tabla ) PON_VALOR_TABLA( &tabla, 0, 0, ‘00’ ) PON_VALOR_TABLA( &tabla, 0, 1, ‘01’ ) PON_VALOR_TABLA( &tabla, 0, 2, ‘02’ ) PON_VALOR_TABLA( &tabla, 1, 0, ‘10’ ) PON_VALOR_TABLA( &tabla, 1, 1, ‘11’ ) PON_VALOR_TABLA( &tabla, 1, 2, ‘12’ ) PON_VALOR_TABLA( &tabla, 2, 0, ‘20’ ) PON_VALOR_TABLA( &tabla, 2, 1, ‘21’ ) PON_VALOR_TABLA( &tabla, 2, 2, ‘22’ ) IMPRIME_TABLA ( &tabla, 10, 20 )

Salida:

00 10 01 11 02 12

Nota: En el ejemplo anterior no se imprime la tercera columna ya que solo se especificaron dos parámetros de columna.

CREA_GRAFICA ( tabla ) Esta instrucción como su nombre lo indica crea una gráfica en base al contenido de la tabla. Manejo de Tablas

Page 68: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 68

DEFINE_GRAFICA( tabla, Mayor, Division ) Esta instrucción permite definir el valor máximo de la tabla y las divisiones que deseamos aparezcan en la grafica. Esta instrucción debe ejecutarse después de crear la gráfica. TITULOS_GRAFICA(tabla, Superior, Derecha, Inferior, Izquierda) Esta instrucción permite definir los títulos que se muestran en la gráfica. Esta instrucción debe ejecutarse después de crear la gráfica. Ejemplo: #Digamos que tenemos una tabla con el siguiente contenido # 15 5 # 20 40 # 35 10 # 10 20 CREA_GRAFICA( &tabla ) DEFINE_GRAFICA( &tabla, 40, 5 ) TITULOS_GRAFICA ( &tabla, ‘Gráfica de prueba’, ‘’, ‘’, ‘’ ) Este ejemplo crea una gráfica definiendo como valor máximo el 40 y divisiones de 5 en 5. Finalmente imprime el mensaje en la parte inferior de la ventana de la gráfica. TRAE_SELECCION( &tabla ) Esta instrucción retorna en una cadena la lista de valores de la columna 0, en la siguiente forma “col1, col2, col3, col4”, esta instrucción se utiliza generalmente en la utilización de consultas SQL que posteriormente se analizará. Si la columna 0, renglón 0 es * entonces la instrucción retorna ‘’.

Page 69: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 69

Variables de Ambiente

Variables de Ambiente Las variables de ambiente determinan la forma de impresión y el comportamiento de algunas de las instrucciones del reporteador. DECIMALES Como ya se menciono anteriormente, determinan el número de decimales a utilizar al momento de imprimir valores numéricos y al momento de hacer operaciones aritméticas. COLUMNAS Determina el número de columnas del reporte. Solo se utiliza para definir el tamaño si el reporte es DIRECTO de otra forma solo sirve para determinar la impresión mediante la instrucción CENTRA. RENGLONES Determina el número de renglones del reporte. Solo se utiliza si el reporte es DIRECTO de otra manera no tiene ningún funcionamiento. FECHA_HOY Esta es una variable que retorna la fecha del sistema, a esta variable no se le puede asignar valor. HORA_ACTUAL Esta es una variable que retorna la hora del sistema, a esta variable no se le puede asignar valor. FORMATO_FECHA Determina el formato a utilizar al momento de utilizar la instrucción de FECHA.

Page 70: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 70

Variables de Ambiente FORMATO_PESOS Determina el formato a utilizar al momento de utilizar la instrucción $. SALIDA Determina por cual de los dispositivos va a salir el reporte, los dispositivos válidos son PANTALLA, IMPRESORA o DISCO. PAGINA Esta variable retorna el número de la página en la que se encuentra en ese momento. FALSO Es equivalente a 0. VERDADERO Es equivalente a 1. CLAVE_REPORTE Esta variable retorna en un valor alfanumérico la clave del reporte. NOMBRE_REPORTE

Esta variable retorna en un valor alfanumérico el nombre del reporte. FORMATO_BARRAS Esta variable determina el formato de código de barras a utilizar al momento de utilizar la instrucción de impresión de código de barras. (Vea la ayuda en línea para ver los formatos disponibles).

Page 71: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 71

Variables de Ambiente

IMPRESION_DIRECTA Esta variable retorna verdadero o 1 si se trata de un reporte definido como impresión DIRECTA. Esta variable se utiliza cuando en el reporte si se desea saber cual es el default de los reportes para en un mismo reporte hacer dos tipos de impresiones. CD_DC Esta variable retorna 0 o falso si la empresa con la que esta trabajando esta configurada como Centro de Costo - > Departamento de los contrario retorna 1 lo que significa que la configuración es Departamento - > Centro de Costo. ES_SUPERVISOR Retorna si el usuario que ejecuta el reporte es supervisor del sistema o no.

Page 72: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 72

Capitulo 6

Manejo de Ciclos

Ciclos Los ciclos son muy importantes y facilitan el trabajo, ahorrando tiempo y espacio en código. En el reporteador giro existen solo dos tipos de ciclos. Ciclo REPITE Este tipo de ciclo debe iniciar con la instrucción REPITE y terminar con la instrucción HASTA seguido de una condición lógica, esto significa que lo que esta dentro del bloque del REPITE se va a ejecutar cuando menos una vez y hasta que la condición del HASTA sea verdadera. Dentro de este bloque se puede utilizar cualquier tipo de instrucciones o asignaciones excepto declaración de variables. La condición lógica del HASTA puede contener varias condiciones lógicas todas estas encerradas entre paréntesis y separadas por un operador lógico.

Nota: Finalmente todas las condiciones lógicas deben estar encerradas entre paréntesis.

Page 73: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 73

Ciclo REPITE Ejemplo:

VAR_N ( _num ) DECIMALES := 0 _num := 1 REPITE _num := _num + 1 IMP( ‘Número actual : ‘, _num ) ;; IMPRIME HASTA(_num > 100 ) Ciclo MIENTRAS Este tipo de ciclo debe iniciar con la instrucción MIENTRAS seguido de una condición lógica y terminar con la instrucción FIN_MIENTRAS, esto significa que lo que esta dentro del bloque se va a ejecutar siempre y cuando la condición del MIENTRAS sea verdadera. Dentro de este bloque se puede utilizar cualquier tipo de instrucciones o asignaciones excepto declaración de variables. La condición lógica del MIENTRAS al igual que el REPITE puede contener varias condiciones lógicas todas estas encerradas entre paréntesis y separadas por un operador lógico. Ejemplo: VAR_N ( _num ) _num := 1 MIENTRAS( _num < 100 ) _num := _num + 1 IMP( ‘Número actual : ‘, _num ) ;; IMPRIME

FIN_MIENTRAS

Page 74: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 74

Ciclo MIENTRAS A diferencia del ciclo REPITE este bloque no se ejecuta a menos que la condición sea valida.

Page 75: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 75

Capitulo 7

Uso de Condicionales

SI –> FIN_SI SI -> SI_NO -> FIN_SI Las condicionales en el reporteador son de bastante utilidad ya que permite hacer una disyuntiva entre una situación. La condicional del reporteador funciona de la misma manera que cualquier compilador, si se cumple la condición se ejecuta lo del primer bloque de lo contrario lo del segundo bloque, la sintaxis de esta instrucción es: SI ( condición ) Instrucciones SI_NO Instrucciones FIN_SI La condición al igual que la de los ciclos MIENTRAS y REPITE puede tener varias condiciones separadas por los operadores OR y AND o bien en español O e Y. Finalmente todas las condiciones deben ir encerradas entre paréntesis. Ejemplo:

Page 76: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 76

Si -> FIN_SI

VAR_N ( _aux ) _aux := 0 MIENTRAS ( _aux < 100 ) _aux := _aux + 1 SI ( _aux > 50 ) IMP ( ‘La variables aux es mayor a 50: ’ , _aux ) ;; IMPRIME FIN_SI FIN_MIENTRAS La condicional SI_NO es opcional como en el ejemplo anterior por lo que se puede omitir. Dentro de los bloques se puede utilizar cualquier tipo de instrucción excepto la declaración de variables.

Page 77: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 77

Capitulo 8

Uso de SubRutinas

SubRutinas El uso de subrutinas en el reporteador es de mucha ayuda ya que nos ahorra tiempo, espacio y permite detectar y corregir errores más fácilmente. La definición de una subrutina debe ir indicada por una instrucción de inicio y otra de fin SUB_RUTINA nombre FIN_SUB_RUTINA Todas las instrucciones que estén dentro del bloque se ejecutarán cuando se mande llamar la subrutina. Se recomienda que el nombre de la subrutina este en minúsculas para no confundir con nombres de instrucciones definidas en el reporteador. Para mandar llamar una subrutina basta con escribir el nombre en el lugar del código en que se desea se ejecute. Dentro del bloque de la subrutina se puede utilizar cualquier tipo de instrucciones excepto la declaración de variables. Las subrutinas tienen una similitud con las variables ya que si aún no esta declarada la subrutina no podemos hacer referencia a ella aún cuando esta se encuentre definida más abajo. Dentro de una subrutina se puede a su vez mandar llamar otra subrutina.

Page 78: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 78

Uso de SubRutinas Ejemplo:

VAR_N (_var ) VAR_N (_var2)

VAR_N (_total) _var := 100 SUB_RUTINA imprime_asterisco IMP ( COL(1), ‘SUBTOTAL : ‘, _var2 ) ;; IMPRIME IMP ( COL(1), ‘IVA : ‘, _var2 * 0.15 ) ;; IMPRIME _total := _var2 + ( _var2 * 0.15 ) IMP ( COL(1), ‘TOTAL : ‘, _total ) ;; IMPRIME IMP ( COL(15), REPITETXT( ‘*’, 30 ) ) ;; IMPRIME IMP ( COL(15), REPITETXT( ‘*’, 30 ) ) ;; IMPRIME IMPRIME FIN_SUB_RUTINA _var2 := _var * 12 IMP ( ‘DEPARTAMENTO DE COMPRAS’ ) ;; IMPRIME IMP ( ‘TOTAL DE COMPRAS: ‘, _var2 ) ;; IMPRIME IMPRIME imprime_asterisco _var2 := _var * 5 IMP ( ‘DEPARTAMENTO DE VENTAS’ ) ;; IMPRIME IMP ( ‘TOTAL DE VENTAS: ‘, _var2 ) ;; IMPRIME IMPRIME imprime_asterisco

Salida:

Page 79: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 79

Uso de SubRutinas

DEPARTAMENTO DE COMPRAS TOTAL DE COMPRAS: 1200.00 SUBTOTAL : 1200.00 IVA : 180.00 TOTAL : 1380.00 ****************************** ****************************** DEPARTAMENTO DE VENTAS TOTAL DE VENTAS: 500.00 SUBTOTAL : 500.00 IVA : 75.00 TOTAL : 575.00 ****************************** ******************************

Page 80: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 80

Capitulo 9

Manejo de Parámetros

Parámetros Generales El reporteador giro permite pedir diferentes tipos de parámetros de manera que podamos emitir el reporte de diferentes maneras de acuerdo a los parámetros seleccionados. NUEVO_PARAMETRO ( ‘Etiqueta’, default, variable ) Este tipo de parámetro es de captura libre lo que significa que el parámetro se captura en una caja de edición sin límite de longitud. El primer parámetro corresponde a la etiqueta de desea imprimir al lado izquierdo de la captura, trate de ser breve ya que de lo contrario se puede perder al lado izquierdo de la ventana. El segundo parámetro corresponde al valor por omisión este valor debe ser un alfanumérico y finalmente la variable corresponde a la variable donde se va almacenar el resultado de la selección. Esta variable se declara automáticamente siempre y cuando la ejecución del parámetro sea en el nivel 0 o sea fuera de cualquier bloque. La variable debe ser de tipo numérico o alfanumérico para definir el tipo es necesario anteponer $ para variable alfanumérica o _ para valores de tipo numérico.

Nota: Si no antepone ninguno de los caracteres el compilador marcará variable indefinida a menos que con anterioridad declare la variable.

Ejemplo:

Page 81: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 81

Parámetros Generales NUEVO_PARAMETRO ( ‘Nombre’, ‘’, $nombre ) NUEVO_PARAMETRO ( ‘Sueldo’, ‘’, _sueldo ) LEE_PARAMETROS DECIMALES := 2 IMP ( $nombre ) ;; IMPRIME IMP ( _sueldo ) ;; IMPRIME

El ejemplo anterior muestra los dos casos en que se puede utilizar la toma de parámetros tanto numérico como alfanumérico, al final de la declaración de parámetros se utiliza la instrucción LEE_PARAMETROS que crea la ventana y muestra los parámetros definidos.

Parámetros con uso de Check Box NUEVO_PARAMETRO_CHEQ ( ‘Etiqueta’, ‘Etiqueta2’, variable )

Este tipo de parámetro solo puede tener dos valores VERDADERO o FALSO. Este tipo de parámetro permite definir 2 etiquetas ya que la segunda es la que se muestra al lado derecho del “Check Box”, La variable tiene que ser forzosamente de tipo numérica ya que de lo contrario el compilador marcará un error. Ejemplo:

Page 82: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 82

Parámetros Generales NUEVO_PARAMETRO_CHEQ ( ‘Incluir Bono’, ‘100 pesos’, _var ) LEE_PARAMETROS SI ( _var = 0 ) IMP ( ‘BONO ES IGUAL A CERO’ ) SI_NO IMP ( ‘BONO ES IGUAL A CIEN’ ) FIN_SI IMPRIME

Parámetros de Selección

NUEVO_PARAMETRO_SEL( ‘Etiqueta’, ‘Valor1/Valor2/Valor3’, var)

Este tipo de parámetro permite seleccionar solo un valor de entre varios, el segundo parámetro define la lista de posibles opciones cada una de ellas separada por /, la variable var puede ser numérica o alfanumérica, si es numérica el valor retornado corresponde al índice en la lista de valor seleccionado donde el primer valor tiene un índice de 0. Si la variable corresponde a un tipo alfanumérico entonces el valor retornado corresponde a una cadena con el valor seleccionado. Ejemplo: NUEVO_PARAMETRO_SEL ( ‘Etiqueta1’, ‘Valor1/Valor2/Valor3’, _var )

NUEVO_PARAMETRO_SEL ( ‘Etiqueta2’, ‘Valor1/Valor2/Valor3’, $var ) LEE_PARAMETROS DECIMALES := 0 IMP ( _var ) ;; IMPRIME IMP ( $var ) ;; IMPRIME

Page 83: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 83

Parámetros de Selección

Si en ambas seleccionamos el valor 2 la salida seria:

1 Valor2

Parámetros de Salida

NUEVO_PARAMETRO_SAL(‘Salida’,‘PANTALLA/DISCO’, var )

Este tipo de parámetro se utiliza solo para pedir la salida del reporte, esta puede ser solo por 4 tipos que es PANTALLA, DISCO o EXCEL, para los cuales al momento de pedir la salida mostrará un botón con un dibujo alusivo a la

Page 84: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 84

Parámetros de Salida opción, si desea otro tipo de salida diferente a este el reporteador mostrará otro dibujo estándar. La variable para este tipo de salida se recomienda que sea de tipo alfanumérico. Una vez que se lean los parámetros el valor retornado se debe asignar a la variable SALIDA que es la que determina el dispositivo por medio del cual se envía el reporte.

Ejemplo:

NUEVO_PARAMETRO_SAL( ‘Salida’, ‘PANTALLA/IMPRESORA’, $salida ) LEE_PARAMETROS SALIDA := $salida

Parámetros de Referencia a Tabla NUEVO_PARAMETRO_TAB ( ‘Etiqueta’, ‘base/indice/titulo’, var ) Este tipo de parámetro se utiliza cuando se quiere capturar un valor válido de una base de datos, además que muestra un pequeño botón al lado derecho de la captura el cual ayuda a ver la lista de valores válidos para la captura. Base corresponde al nombre de una base de datos, índice es el campo llave que se va a utilizar, titulo es el que se muestra al momento de mostrar la ventana con la lista de

Page 85: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 85

Parámetros de Referencia a Tabla valores válidos, PARAMn este parámetro es opcional y se utiliza para relacionar una campo con otro anterior mediante el indice2. Este tipo de parámetro puede utilizar de tipo alfanumérico y tabla, si se trata de alfanumérico solo permite seleccionar un solo valor de la lista por el contrario si la variable es de tipo tabla el compilador permite capturar una o varias opciones, estos valores se guardan en la tabla en la columna 0 y el renglón es el que varia, donde el renglón 0 corresponde al primer valor seleccionado el 1 al segundo y así sucesivamente. Ejemplo:

NUEVO_PARAMETRO_TAB( ‘Empleado’, ‘EMPPRIN/CLAVE/TABLA DE EMPLEADOS’, $empleado ) NUEVO_PARAMETRO_TAB ('DEPARTAMENTOS','DEPTO/CLAVE/DEPTOS',&registro) LEE_PARAMETROS IMP ( ‘Clave del Empleado : ‘, $empleado ) ;; IMPRIME IMP ( ‘Los registros patronales seleccionados son : ‘ ) SI ( TRAE_SELECCION( &registro ) = ‘’ ) IMP ( ‘Todos’ ) SI_NO IMP ( TRAE_SELECCION( &registro ) ) FIN_SI IMPRIME

En el ejemplo anterior la primer toma de parámetros permite seleccionar un solo empleado debido a que la variable es de tipo alfanumérica. En la segunda toma de parámetros permite seleccionar uno o varios registros debido a que es una tabla, la instrucción TRAE_SELECCION retorna la lista de valores seleccionados en una cadena, en caso de haber seleccionado todos entonces retorna ‘’.

Page 86: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 86

Parámetros de Referencia a Tabla

Page 87: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 87

Parámetros Fecha NUEVO_PARAMETRO_FEC( ‘Fecha’, default, _fecha )

Este tipo de parámetro se utiliza para capturar valores de tipo fecha, donde el segundo parámetro es la fecha por default a mostrar la cual debe estar en formato alfanumérico, si esta se deja en blanco por omisión pone la fecha del día de hoy. Si desea especificar una fecha tiene que ser en el formato DDMMAA. El parámetro debe ser de tipo numérico ya que de esta forma es como se manejan las fechas.

Ejemplo: FORMATO_FECHA := 2 NUEVO_PARAMETRO_FEC( ‘Fecha’, ‘010198’, _fecha ) LEE_PARAMETROS IMP ( FECHA( _fecha ) ) ;; IMPRIME

Salida:

01-01-98

Page 88: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 88

Parámetros Fecha Ejercicio: Hacer un reporte donde en base a la fecha de hoy pida como parámetro el número del mes como valor por default y en base al mes seleccionado imprimir la fecha del primer día y el último del mes. Ejemplo si hoy estamos en Septiembre por default debe pedir el mes 9 en una captura libre e imprimir el primer día del mes y el último.

Borra Parámetros BORRA_PARAMETROS Esta instrucción se utiliza para eliminar del buffer los parámetros antes utilizados esto con la finalidad de que en la ventana que se despliegan los parámetros solo aparezcan los nuevos. Ejemplo:

NUEVO_PARAMETRO_SAL( ‘Salida’, ‘PANTALLA/IMPRESORA’, $salida ) LEE_PARAMETROS BORRA_PARAMETROS NUEVO_PARAMETRO_FEC( ‘Fecha’, ‘010198’, _fecha ) LEE_PARAMETROS

Este ejemplo hace la petición de parámetros en dos ocasiones donde en la primera ocasión se pide solo la salida y en la segunda solo la fecha, si omitiéramos la instrucción de BORRA_PARAMETROS también se pedirían en dos ocasiones solo que en la primera ocasión se pide solo la salida y en la segunda se vuelve a pedir la salida y la fecha.

Page 89: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 89

Capitulo 10

Base de Datos

Manejo de una Base de Datos El manejo de las bases de datos del reporteador es muy sencillo pero hay que ser muy cuidadosos ya que existen instrucciones para agregar, modificar y borrar registros ya que un mal uso puede ocasionar perdida de datos. ABRE_BASE( ‘base’ )

Esta instrucción abre la base de datos especificada como parámetro y la deja lista para hacer uso de ella. El reportedor busca la base que se localice en el directorio de trabajo de la empresa que esta utilizando. Puede también hacer referencia directamente al la ruta y el nombre de la base. Una vez que se abre la base de datos el apuntador de registro se coloca en el primer registro de la tabla.

Nota: El reporteador ha sido validado para que cuando se haga referencia a un campo de una base de datos que aún esta cerrada que automáticamente la abra pero se recomienda que siempre utilice esta instrucción

Page 90: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 90

Manejo de una Base de Datos CIERRA_BASE( ‘base’ )

Esta instrucción es la operación inversa a la anterior pero la diferencia es que esta en realidad no se utiliza mucho ya que el reporteador al terminar el reporte aun cuando la terminación sea anormal cierra todas las bases de datos abiertas por lo que esta instrucción se puede omitir. En ocasiones talvez requiera de cerrar la base de datos para posteriormente abrirla y es entonces cuando puede ser útil. SIGUIENTE_REGISTRO( ‘base’ )

Esta instrucción mueve el apuntador de registro al siguiente registro de la tabla. Si la tabla se encuentra en el último registro entonces la instrucción no hace nada. REGISTRO_ANTERIOR( ‘base’ )

Esta instrucción es la operación inversa de la anterior ya que mueve el apuntador un registro antes. Al igual que la instrucción anterior si esta se encuentra es el primer registro y se ejecuta no genera ningún resultado. PRIMER_REGISTRO( ‘base’ )

Esta instrucción mueve el apuntador de registro al inicio de la base. Por omisión al abrir una base de datos se coloca en el inicio de la base pero se recomienda que después de abrir la base se ejecute esta instrucción para asegurarnos resetear el apuntador al inicio. ULTIMO_REGISTRO( ‘base’ )

Esta instrucción es la operación contraria a la anterior ya que mueve el apuntador al último registro de la tabla. FIN_BASE( ‘base’ )

Esta instrucción retorna un valor boleano de verdadero o falso. Retorna verdadero cuando la tabla se encuentra en el final de la base de datos de lo contrario retorna 0 o falso.

Page 91: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 91

Manejo de una Base de Datos INICIO_BASE( ‘base’ )

Esta instrucción es similar a la anterior solo que esta retorna verdadero cuando la tabla se encuentra al inicio de la misma y falso de lo contrario. Bueno hasta ahora se ha visto como abrir base de datos y como moverse entre ella, pero para hacer referencia a un campo tiene que ser de la siguiente manera. ‘base’:’campo’ Todos los campos de cualquier tabla pueden tanto retornar el valor que tienen almacenado como asignarles el valor deseado, siempre y cuando sea del tipo correcto. $aux := ‘base’:’campo’ ‘base’:’campo’ := $aux Para saber las bases de datos disponibles y sus campos puede presionar el botón de base de datos donde podrá ver todas las tablas con sus respectivos campos y el tipo de datos asociado a cada uno de ellos, para que el editor automáticamente escriba la sintaxis del campo deseado hago doble click en el campo deseado.

Con lo anterior antes visto podemos hacer un pequeño programa que recorra una base de datos e imprima su contenido. Ejemplo:

Page 92: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 92

Manejo de una Base de Datos FORMATO_FECHA := 2 ABRE_BASE( ‘EMPPRIN’ ) PRIMER_REGISTRO( ‘EMPPRIN’ ) MIENTRAS( FIN_BASE( ‘EMPPRIN’ ) = FALSO )

IMP ( COL(10), ‘EMPPRIN’:’CLAVE’ ) IMP ( COL(20), FECHA( ‘EMPRIN’:’INGRESO’ ) )

IMPRIME SIGUIENTE_REGISTRO( ‘EMPPRIN’ )

FIN_MIENTRAS Este ejemplo sencillo recorre la base de datos EMPPRIN que se trata de los datos principales de los trabajadores e imprime en la columna 10 la clave del empleado y en la columna 20 la fecha de ingreso.

Relaciones de una Base de Datos

TRAE_REGISTRO( ‘base’, campos llave )

Esta instrucción permite mover el apuntador de registro directamente al valor del campo llave indicado. Esto evita la tarea de recorrer por completo la base de datos donde para cada registro habría la necesidad de aplicar una condición para encontrar el registro deseado. Si una tabla tiene mas de un campo llave no es necesario enviar todos los valores del campo llave a menos que se quiera localizar un registro en particular. Esto es para una base de datos con un solo campo llave basta con especificar el valor del campo llave a buscar y es suficiente para una tabla que posea mas de 1 campo llave podríamos hacer la búsqueda especificando solo el valor del primer campo llave o si queremos la búsqueda exacta enviar el valor de todos los campos llave. Esta función retorna verdadero si se encuentra el registro deseado y falso de lo contrario. Ejemplo:

Page 93: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 93

Relaciones de una Base de Datos

ABRE_BASE( ‘EMPPRIN’ )

SI ( TRAE_REGISTRO( ‘EMPPRIN’, ‘001’ ) ) IMP ( ‘Registro ’, ‘EMPPRIN’:’CLAVE’, ‘ encontrado...’ ) SI_NO IMP ( ‘Registro no encontrado...’ ) FIN_SI IMPRIME

En el ejemplo anterior la tabla EMPPRIN solo posee un campo llave que es la

clave del empleado por lo que la búsqueda es directa, entonces si existe la clave 001 en la tabla EMPPRIN la instrucción retorna verdadero y mueve el apuntador de registro a la posición correspondiente. Note que dentro de la condición del si no se hace la comparación contra verdadero ya que como la instrucción retorna 1 o 0 entonces el compilador interpreta el 1 como verdadero el resultado de la condición, esto sería similar a ejecutar: SI ( TRAE_REGISTRO( ‘EMPPRIN’, ‘001’ ) = VERDADERO) O bien si se desea solo saber si el registro no existe puede ejecutar:

SI ( TRAE_REGISTRO( ‘EMPPRIN’, ‘001’ ) = FALSO ) LOCALIZA_REGISTRO ( ‘base’, ‘campo1;campo2’, ‘var1’, ‘var2’ )

Esta instrucción es similar a la de TRAE_REGISTRO, la diferencia es que esta instrucción se le indica que campos utilizar para la búsqueda así como el orden.

OPCIONES_LOCALIZA( 'PARCIAL;MAYUSCULAS' ) LOCALIZA_REGISTRO( 'EMPPRIN', 'NOMBREP;NOMBREN', 'PEREZ', 'JUAN' )

Page 94: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 94

Relaciones de una Base de Datos

Nota: La función OPCIONES_LOCALIZA nos define los parámetros de busqueda de los registros especificados, puede ser PARCIAL, MAYUSCULAS, la combinación de ambas o dejar Nulo el campo, que significa buscar el registro exacto.

TRAE_REGISTRO_VIG ( ‘base’, fecha )

Para tablas donde el índice corresponde a un valor de fecha existe esta instrucción la cual retorna el registro que sea vigente a la fecha enviada como parámetro. Esta instrucción se utiliza para tablas como la de salarios mínimos o la de cuotas de pago al seguro social. Al igual que la instrucción anterior esta retorna verdadero si la búsqueda es exitosa de lo contrario retorna falso. Ejemplo:

FORMATO_PESOS := 2 ABRE_BASE( ‘MINIMO’ ) SI ( TRAE_REGISTRO_VIG( ‘MINIMO’, FECHA_HOY ) ) IMP ( ‘Salario mínimo DF al día de hoy : ‘, $( ‘MINIMO’:’MINIMO A’ ) ) SI_NO IMP ( ‘No hay cuotas vigentes a la fecha de hoy’) FIN_SI IMPRIME

TOTAL_REGISTROS( ‘base’ )

Esta instrucción retorna el número de registros que posee la tabla enviada como parámetro. Ejemplo:

DECIMALES := 0 ABRE_BASE( ‘EMPPRIN’ )

IMP ( ‘El número de registros de la tabla de empleados es de : ‘ ) IMP ( TOTAL_REGISTROS( ‘tabla’ ) ) ;; IMPRIME

Page 95: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 95

Relaciones de una Base de Datos MUESTRA_AVANCE( ‘base’, ‘mensaje’ )

Esta instrucción permite mostrar una barra de avance la cual no ayuda a ver el porcentaje de avance del recorrido de la tabla. Esto no ayuda a calcular el tiempo que va a tomar el proceso o bien simplemente para saber si el reporte esta trabajando y no se ha detenido o ciclado, para esto existen también unos pequeños engranes en la parte superior derecha de la salida del reporte que indican que es reporte esta en proceso y que no esta atorado lo que no indica que no este ciclado. Esta instrucción se ejecuta antes de iniciar el recorrido de la tabla. Ejemplo:

FORMATO_FECHA := 2 ABRE_BASE( ‘EMPPRIN’ ) MUESTRA_AVANCE( ‘EMPPRIN’, ‘Tabla de Empleados’ ) PRIMER_REGISTRO( ‘EMPPRIN’ ) MIENTRAS( FIN_BASE( ‘EMPPRIN’ ) = FALSO )

IMP ( COL(10), ‘EMPPRIN’:’CLAVE’ ) IMP ( COL(20), FECHA( ‘EMPRIN’:’INGRESO’ ) )

IMPRIME SIGUIENTE_REGISTRO( ‘EMPPRIN’ )

FIN_MIENTRAS Ejercicio: Hacer un reporte que muestre la clave y nombre del empleado y que imprima la fecha de todos sus movimientos de sueldo.

Page 96: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 96

Relaciones de una Base de Datos USA_ARCHIVO( ‘padre’, ‘hijo’, ‘indice’ )

Esta instrucción permite establecer una relación entre una tabla padre y una hija mediante un índice, generalmente se utiliza entre la tabla principal de trabajadores y sus tablas relacionadas. Una solución al ejercicio anterior seria esta. Ejemplo:

FORMATO_FECHA := 2

FORMATO_PESOS := 2 ABRE_BASE( ‘EMPPRIN’ ) ABRE_BASE( ‘EMPSDO’ ) ;; #BASE DE SUELDOS PRIMER_REGISTRO( ‘EMPPRIN’ ) MIENTRAS( FIN_BASE( ‘EMPPRIN’ ) = FALSO ) IMP( ‘EMPPRIN’:’CLAVE’ ) ;; IMPRIME PRIMER_REGISTRO( ‘EMPSDO’ ) MIENTRAS ( FIN_BASE( ‘EMPSDO’ ) = FALSO ) SI ( ‘EMPSDO’:’CLAVE’ = ‘EMPPRIN’:’CLAVE’ ) IMP ( COL(10), ‘EMPSDO’:’TIPO’ ) IMP ( COL(20), FECHA( ‘EMPSDO’:’FECHA’ ) ) IMP ( COL(40), $( ‘EMPSDO’:’SDO3’ ) ) IMPRIME FIN_SI SIGUIENTE_REGISTRO( ‘EMPSDO’ ) FIN_MIENTRAS SIGUIENTE_REGISTRO( ‘EMPPRIN’ ) FIN_MIENTRAS Este reporte en si parece una buena solución pero si nos damos cuenta estamos recorriendo la tabla de sueldos n veces donde n es el número de empleados y eso hace el reporte de una complejidad de n*n. Este reporte con unos 100 trabajadores tardaría aproximadamente unos 40 Seg y entre mas trabajadores existan esto se dispararía en forma exponencial. La instrucción USA_ARCHIVO nos ayuda a resolver este tipo de problemas y además de facilitar el trabajo lo hace más veloz. El siguiente es el mismo ejemplo pero utilizando la instrucción USA_ARCHIVO.

Page 97: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 97

Relaciones de una Base de Datos

FORMATO_FECHA := 2 FORMATO_PESOS := 2 ABRE_BASE( 'EMPPRIN' ) USA_ARCHIVO( 'EMPPRIN', 'EMPSDO', 'CLAVE' ) PRIMER_REGISTRO( 'EMPPRIN' ) MIENTRAS( FIN_BASE( 'EMPPRIN' ) = FALSO ) IMP( 'EMPPRIN':'CLAVE' ) ;; IMPRIME PRIMER_REGISTRO( 'EMPSDO' ) MIENTRAS ( FIN_BASE( 'EMPSDO' ) = FALSO ) IMP ( COL(10), 'EMPSDO':'TIPO' ) IMP ( COL(20), FECHA( 'EMPSDO':'FECHA' ) ) IMP ( COL(40), $( 'EMPSDO':'SDO3' ) ) IMPRIME SIGUIENTE_REGISTRO( 'EMPSDO' ) FIN_MIENTRAS SIGUIENTE_REGISTRO( 'EMPPRIN' ) FIN_MIENTRAS La instrucción USA_ARCHIVO crea una subtabla de sueldos de acuerdo al índice

seleccionado. En el ejemplo anterior se crea una subtabla que contiene solo los registros de trabajador al que refiere la tabla EMPPRIN, esta subtabla se crea automáticamente al cambiar de registro en la tabla EMPPRIN, por esta razón es necesario solo recorrer la subtabla sin necesidad de verificar si corresponde al trabajador. Esto hace el reporte de una complejidad n. Por lo que no importa el número de trabajadores el incremento siempre va a ser de forma lineal. Este reporte tardaría aproximadamente unos 3 Seg que comparado con los 40 Seg del ejemplo anterior es un ahorro bastante significativo.

Operaciones con Base de Datos Para la modificación de registros existen instrucciones para agregar, borrar, y grabar registros, no existe instrucción para modificar ya que para esto basta solo con hacer la asignación de un valor a un campo y posteriormente grabar el registro.

Page 98: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 98

Operaciones con una Base de Datos

AGREGA_REGISTRO( ‘base’ )

Esta instrucción pone la tabla en modo de inserción y deja los campos en blanco para iniciar con la asignación de valores. Al terminar de asignar los valores es necesario confirmar la inserción con la instrucción GRABA_BASE( ‘base’ ). Ejemplo: ABRE_BASE( ‘EMPPRIN’ ) AGREGA_REGISTRO( ‘EMPPRIN’ ) ‘EMPPRIN’:’CLAVE’ := ‘001’ ‘EMPPRIN’:’NOMBREN’ := ‘EDUARDO’ GRABA_BASE( ‘EMPPRIN’ ) Al agregar registros hay que tener cuidado que no se duplique el campo llave ya que esto produce una terminación anormal del reporte. Para esto la solución sería la siguiente.

ABRE_BASE( ‘EMPPRIN’ )

SI ( TRAE_REGISTRO( ‘EMPPRIN’, ‘001’ ) = FALSO ) AGREGA_REGISTRO( ‘EMPPRIN’ ) ‘EMPPRIN’:’CLAVE’ := ‘001’ FIN_SI ‘EMPPRIN’:’NOMBREN’ := ‘EDUARDO’ GRABA_BASE( ‘EMPPRIN’ )

Este ejemplo verifica si existe el registro con la clave 001, si no existe lo inserta y le asigna la clave 001 y si existe solo le asigna el valor del nombre ya que la clave ya esta asignada. Por esta razón es por la que no existe instrucción para modificar ya que esto es directo. BORRA_REGISTRO( ‘base’ )

Esta instrucción borra el registro al que hace referencia el apuntador de registro. Hay que tener mucho cuidado con esta instrucción ya que una vez que se elimina un registro no hay manera de recuperarlo. Una vez que se elimina un registro el apuntador de registro se mueve al siguiente registro.

Page 99: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 99

Operaciones con una Base de Datos Ejercicio: Eliminar todos los registros de sueldo de un trabajador. EDITA_TABLA( ‘base’ )

Esta instrucción permite editar cualquier tabla del sistema en el formato estándar de catálogo, desde esta ventana podrá agregar, modificar y borrar registros. IMPRIME_BASE( ‘base’, col1, col2, col3 ) Esta instrucción imprime el contenido de la base de datos en las columnas especificadas, esta instrucción funciona de manera similar a IMPRIME_TABLA.

INSTRUCCIONES ESPECIALES SQL. Se tiene 2 instrucciones especiales en el Reporteador Giro para el caso que se quiera accesar o hacer uso de rutinas de código del SQL Server. La primera de ellas es para abrir tablas en el SQL Server que no sean de la base de datos de Giro. Para el caso de que se necesite leer datos o información necesaria para la ejecución de nuestro reporte.

ABRE_BASE_SQL( ‘SERVIDOR\BASE\TABLA’ ) En esta instrucción, el primer parámetro que se indica es el SERVIDOR en donde se encuentra la instancia del SQL a la que queramos tener acceso. Se le puede indicar con en nombre o la IP del servidor. El segundo parámetro es la Base de datos especifica y como tercer valor, tenemos que indicarle la tabla física en donde está la información. Un ejemplo podría ser el siguiente:

ABRE_BASE_SQL ( ‘MAINSERVER\CONTABILIDAD\POLIZA’ ) PRIMER_REGISTRO ( ‘POLIZA’ ) MIENTRAS ( FIN_BASE ( ‘POLIZA’ ) = FALSO ) IMP ( ‘POLIZA’:’NUMERO’ ) ;; IMPRIME SIGUIENTE_REGISTRO ( ‘POLIZA’ ) FIN_MIENTRAS

Page 100: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 100

Operaciones con una Base de Datos

Nota: Para poder conectarse desde el Reporteador Giro a otra base de SQL Server, se debe agregar el inicio de sesión “Supervisor_giro” a la sección de Seguridad del Administrador Corporativo, y en el apartado de Usuarios de la base de datos que se pretende accesar.

STORED_PROCEDURE(‘SERVIDOR\BASE’, ‘SP’, ‘var’) Esta instrucción accesa a un servidor y una base de datos del SQL Server especificado y ejecuta un stored procedure ya definido para el usuario Supervisor_giro y puede devolver un valor a una variable especificada. Se define como primer parámetro el SERVIDOR y la BASE en la cual se encuentra el SP, como segundo parámetro se especifica el nombre del stored procedure que se desee ejecutar y por ultimo y de manera opcional se mandan alguna variable o parámetro necesario para la ejecución del SP. Ejemplo: VAR_N ( _dato ) _dato := STORED_PROCEDURE( ‘MAINSERVER\CONTABILIDAD’, ‘act_empleados’, ‘_var=1’ ) SI ( _dato = 1 ) IMP ( ‘Se ejecuto con éxito el SP’ ) ;; IMPRIME FIN_SI

Page 101: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 101

Consultas SQL

CONSULTAS SQL Las consultas de SQL en el reporteador son sumamente importantes ya que la gran mayoría de reportes los utilizan debido a que ahorran tiempo de ejecución y facilitan la programación del mismo. El SQL que maneja el reporteador es el ANSI SQL por lo que se puede utilizar cualquiera de las instrucciones que este lenguaje proporciona, aquí veremos solo las básicas para crear tablas que se adecuen a nuestras necesidades. La finalidad del uso del SQL es debido a que podemos crear una consulta que llene 100% nuestras necesidades y en base a eso crear una tabla la cual solo es necesario recorrerla sin necesidad de hacer comparaciones en cada uno de los registros para ver si cumple con los requisitos que solicitamos. Lo primero que se hace para crear una consulta SQL es seleccionar los campos que vamos a requerir o que deseamos que contenga la consulta para esto se utiliza la instrucción SELECT, esta debe ir seguida del nombre de los campos que deseamos o bien un * para indicar que requerimos todos.

Nota: Cuando el nombre del campo contiene un espacio en blanco todo el campo se tiene que encerrar con ‘”’.

Ejemplo: SELECT * SELECT clave, feching, “nombre campo” SELECT clave, nombrep || “ “ || nombrem || “ “ || nombren as nombre En el ejemplo anterior la primera instrucción selecciona todos los campo, la segunda solo el campo de clave y fecha de ingreso, y la tercera hace una concatenación de 3 campos y se van a identificar como nombre. Posteriormente se define que tablas se van a utilizar, obviamente los campos indicados en el SELECT deben corresponder a la tabla definida ya que de lo contrario causa un error, la instrucción para definir las tabla es FROM la cual va seguida por una o varias tablas separadas por ‘,’. Ej. SELECT * FROM EMPPRIN SELECT EMPPRIN. CLAVE, EMPSDO. SDO1 FROM EMPPRIN, EMPSDO SELECT E. CLAVE, S. SDO1 FROM EMPPRIN E, EMPSDO S

Page 102: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 102

Consultas SQL

Si se utiliza mas de una tabla, la consulta realiza un producto X con cada una de las tablas seleccionadas por lo que es necesario filtrar la tabla. Para filtrar una tabla se utiliza la instrucción WHERE la cual puede llevar varias condiciones separadas cada una por instrucciones AND y OR.

SELECT E. CLAVE, S. SDO1, S. TIPO FROM EMPPRIN E, EMPSDO S

WHERE S. CLAVE = E. CLAVE AND S. TIPO = ‘M’ La instrucción WHERE puede utilizar variables que aún no sabe su valor, para

esto se utilizan los ‘:’. Ejemplo:

SELECT E. CLAVE, S. SDO1, S. TIPO. S. FECHA FROM EMPPRIN E, EMPSDO S

WHERE S. CLAVE = E. CLAVE AND S. TIPO = ‘M’ AND S. FECHA = :fecha Finalmente la instrucción ORDER BY que se utiliza para definir el orden que

deseamos aplicar a la tabla, esta puede llevar varios índices donde cada uno debe ir separados por ‘,’, por default la consulta toma los ordenes ascendentes si desea lo contrario debe agregar la instrucción DESC después del índice.

Ejemplo:

SELECT E. CLAVE, S. SDO1, S. TIPO. S. FECHA FROM EMPPRIN E, EMPSDO S

WHERE S. CLAVE = E. CLAVE AND S. TIPO = ‘M’ AND S. FECHA = :fecha ORDER BY E. CLAVE, S. FECHA DESC El SQL también tiene instrucciones para agregar, modificar y borrar registros,

pero debido a que el reporteador ya posee estas funciones omitiremos estas instrucciones. Para aplicar todo esto en el reporteador se debe utilizar una variable de tipo tabla en la cual debemos almacenar las instrucciones en la columna 0, para esto se utiliza la instrucción AGREGA_VALOR_COL. Ejemplo:

VAR_T ( &tabla ) AGREGA_VALOR_COL ( &tabla, 0, ‘SELECT *’ )

AGREGA_VALOR_COL ( &tabla, 0, ‘FROM EMPPRIN E’ ) AGREGA_VALOR_COL ( &tabla, 0, ‘ORDER BY E. CLAVE’ )

CREA_CONSULTA( ‘EMPPRIN’, &tabla )

Page 103: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 103

Consultas SQL La instrucción CREA_CONSULTA del ejemplo anterior asigna la consulta especificada a una tabla llamada EMPPRIN, hasta este momento aún no se hace la consulta, esta se realiza hasta el momento que hagamos referencia a un registro. Ejemplo:

VAR_T ( &tabla ) AGREGA_VALOR_COL ( &tabla, 0, ‘SELECT *’ )

AGREGA_VALOR_COL ( &tabla, 0, ‘FROM EMPPRIN E’ ) AGREGA_VALOR_COL ( &tabla, 0, ‘ORDER BY E. CLAVE’ )

CREA_CONSULTA( ‘EMPPRIN’, &tabla ) PRIMER_REGISTRO( ‘EMPPRIN’ )

#hasta este momento se realiza la consulta. MIENTRAS( FIN_BASE( ‘EMPPRIN’ ) = FALSO ) IMP ( ‘EMPPRIN’:’CLAVE’ ) ;; IMPRIME SIGUIENTE_REGISTRO( ‘EMPPRIN’ ) FIN_MIENTRAS El manejo que se le da a una consulta es similar al de una base de datos. Para

asignar el valor de los parámetros de una consulta se utiliza la instrucción PARAMETRO_SQL la cual lleva como parámetros la consulta, el parámetro y el valor a asignar.

Ejemplo:

NUEVO_PARAMETRO_FEC ( ‘FECHA’, ‘ ‘, _ff ) LEE_PARAMETROS VAR_T ( &tabla ) AGREGA_VALOR_COL ( &tabla, 0, ‘SELECT *’ )

AGREGA_VALOR_COL ( &tabla, 0, ‘FROM EMPPRIN E’ ) AGREGA_VALOR_COL ( &tabla, 0, ‘WHERE E. INGRESO < :_fech’ ) AGREGA_VALOR_COL ( &tabla, 0, ‘ORDER BY E. CLAVE’ )

CREA_CONSULTA( ‘EMPPRIN’, &tabla ) PARAMETRO_SQL ( ‘EMPPRIN’, ‘_fech’, _ff ) PRIMER_REGISTRO( ‘EMPPRIN’ )

#hasta este momento se realiza la consulta. MIENTRAS( FIN_BASE( ‘EMPPRIN’ ) = FALSO ) IMP ( ‘EMPPRIN’:’CLAVE’, COL(10), FECHA(‘EMPPRIN’:’INGRESO’) ) ;; IMPRIME SIGUIENTE_REGISTRO( ‘EMPPRIN’ ) FIN_MIENTRAS

Page 104: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 104

Consultas SQL

El ejemplo anterior utiliza un parámetro llamado _fech el cual posteriormente se reemplaza por la fecha de día, por lo que la consulta se crea con los trabajadores que su fecha de ingreso es menor a la fecha del sistema.

Page 105: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 105

Capitulo 11

Instrucciones de Empleados Estas instrucciones retornan información referente a los empleados por lo que es necesario que tenga abierta la base EMPPRIN.

Vigencia de Trabajadores

ES_VIGENTE( fecha )

Esta instrucción retorna VERDADERO si el trabajador actual es vigente a la fecha enviada como parámetro, de lo contrario retorna FALSO. FUE_VIGENTE( fecha1, fecha2 )

Esta instrucción es similar a la anterior solo que esta recibe 2 fechas, la inicial y la final, retorna los días que fue vigente en el rango de fechas de lo contrario retorna 0. FUE_VIGENTE_IMSS( fecha1, fecha2 )

Esta instrucción es similar a FUE_VIGENTE solo que esta recibe se basa en el campo de la Baja del IMSS del trabajador.

Page 106: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 106

Kardex de Sueldos SUELDO_ACTUAL( fecha1, fecha2 ) VAR_IMSS_ACTUAL( fecha1, fecha2 ) VAR_INFONAVIT_ACTUAL( fecha1, fecha2 ) INT_IMSS_ACTUAL( fecha1, fecha2 ) INT_INFONAVIT_ACTUAL( fecha1, fecha2 ) Estas instrucciones retornan respectivamente el sueldo, la variable IMSS e infonavit y el integrado IMSS e infonavit promedio entre el rango de fechas enviados como parámetros.

TRAE_DSP( tipo, fecha )

Esta instrucción retorna la clave del departamento, puesto o sucursal dependiendo del tipo enviado como parámetro. Si la empresa esta definida como Dep. � C.C. entonces en lugar del departamento retorna el C.C. Esta instrucción retorna el registro vigente a la fecha enviada como parámetro. Ejemplo:

VAR_A ( $desc ) ABRE_BASE( ‘EMPPRIN’ ) PRIMER_REGISTRO( ‘EMPPRIN’ ) SI ( TRAE_REGISTRO( ‘PUESTO’, TRAE_DSP ( ‘P’, FECHA_HOY ) ) ) $desc := ‘PUESTO‘:’DESCRIPCION’ SI_NO $desc := ‘Puesto Desconocido’ FIN_SI IMP ( ‘El puesto del empleado al día de hoy es : ‘, $desc ) ;; IMPRIME TRAE_MOV_FECHA( fecha )

Esta instrucción busca el movimiento de salario vigente a la fecha enviada como parámetro y lo pone como registro actual en la base de sueldos.

Page 107: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 107

Ausentismos, Incapacidades y Retardos Ejemplo:

ABRE_BASE ( ‘EMPPRIN’ ) USA_ARCHIVO ( ‘EMPPRIN’, ‘EMPSDO’, ‘CLAVE’ ) MIENTRAS ( FIN_BASE( ‘EMPPRIN’ ) = FALSO ) TRAE_MOV_FECHA ( FECHA_HOY ) IMP ( ‘El sueldo vigente del trabajador es : ‘, $ ( ‘EMPSDO’:’SDO1’ )) IMPRIME SIGUIENTE_REGISTRO ( ‘EMPPRIN’ ) FIN_MIENTRAS

TRAE_FALTAS ( fi, ff, Tipos )

Esta función retorna el número de faltas del tipo especificado en Tipos, donde Tipos puede contener cuantas claves de faltas se desee, si se desea todas las faltas basta con especificar en tipo ´*´.

Ejemplo:

MIENTRAS ( FIN_BASE( 'EMPPRIN' ) = 0 ) IMP ( 'Todas las faltas : ', TRAE_FALTAS( _fi, _ff, '*' ) ) ;; IMPRIME IMP ( 'Faltas y Permisos: ',TRAE_FALTAS( _fi, _ff, 'FP' )) ;; IMPRIME IMP ( 'Solo Permisos: ', TRAE_FALTAS( _fi, _ff, 'P' ) ) ;; IMPRIME SIGUIENTE_REGISTRO ( 'EMPPRIN' ) FIN_MIENTRAS

TOTAL_FALTAS ( fi, ff, Tipo )

Esta función retorna el número de faltas del tipo especificado en Tipo, donde Tipo identifica si se desea las faltas con Goce, Sin Goce o Todas (*). Ausentismos, Incapacidades y Retardos

Page 108: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 108

Ejemplo: NUEVO_PARAMETRO_FEC ( 'FECHA INICIAL' , '' , _fi ) NUEVO_PARAMETRO_FEC ( 'FECHA FINAL' , '' , _ff )

ABRE_BASE ( ´EMPPRIN´ ) MIENTRAS ( FIN_BASE( ´EMPPRIN´ ) = 0 ) IMP ( ´Todas las faltas : ´, TOTAL_FALTAS( _fi, _ff, ´*´ ) ) ; ; IMPRIME IMP ( ´Con Goce de sueldo: ´, TRAE_FALTAS( _fi, _ff, ´G´ ) ) ; ; IMPRIME IMP ( ´Sin Goce de sueldo: ´, TRAE_FALTAS( _fi, _ff, ´S´ ) ) ; ; IMPRIME SIGUIENTE_REGISTRO ( ´EMPPRIN´ ) FIN_MIENTRAS

TRAE_INCAPACIDADES ( ff, fi, ´*´ )

Esta función retorna el número de incapacidades del tipo especificado en Tipo.

Ejemplo: NUEVO_PARAMETRO_FEC ( 'FECHA INICIAL' , '' , _fi ) NUEVO_PARAMETRO_FEC ( 'FECHA FINAL' , '' , _ff ) ABRE_BASE ( ´EMPPRIN´ )

MIENTRAS ( FIN_BASE( ‘EMPPRIN’ ) = 0 ) IMP ( ‘Total incapacidades :’, TRAE_INCAPACIDADES( _fi, _ff, ‘*’ ) ) IMPRIME SIGUIENTE_REGISTRO ( ‘EMPPRIN´’) FIN_MIENTRAS

TRAE_RETARDOS (Inicio, Final)

Esta función retorna el numero de retardos que tuvo el trabajador en el rango de fecha especificado.

Vacaciones

Page 109: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 109

Ejemplo:

_ret:=0 ABRE_BASE ( ‘EMPPRIN’ ) PRIMER_REGISTRO ( ‘EMPPRIN’ )

MIENTRAS ( FIN_BASE ( ‘EMPPRIN’ ) = FALSO ) _ret := TRAE_RETARDOS( FECHA_HOY-30, FECHA_HOY) IMP ( ‘Número de retardos en los 30 días pasados :’, _ret ) IMPRIME SIGUIENTE_REGISTRO(‘EMPPRIN’) FIN_MIENTRAS

TRAE_VACACIONES (Inicio, Final, Efectivas)

Esta retorna las vacaciones que tuvo durante el periodo de fechas especificado, si efectivas es VERDADERO entonces retorna las efectivas.

Ejemplo:

_ret:=0

ABRE_BASE ( 'EMPPRIN' ) PRIMER_REGISTRO ( 'EMPPRIN' ) MIENTRAS ( FIN_BASE ( 'EMPPRIN' ) = FALSO ) _ret:=TRAE_VACACIONES( FECHA_HOY-30, FECHA_HOY, VERDADERO) IMP ( 'Vacaciones efectivas en los 30 días pasados :', _ret ) IMPRIME SIGUIENTE_REGISTRO('EMPPRIN') FIN_MIENTRAS

DIAS_INHABILES (Fechai, Fechaf, Cal, Desc1, Desc2)

Esta función retorna los días inhábiles en el periodo especificado como parámetro y que correspondan al calendario Cal. Los días inhábiles se consideran los días festivos como los de descanso. Nota: Si Desc1 y Desc2 son cero entonces toma del calendario los días de descanso. Vacaciones

Page 110: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 110

Ejemplo: ABRE_BASE ( 'EMPPRIN' ) PRIMER_REGISTRO ( 'EMPPRIN' ) MIENTRAS ( FIN_BASE ( 'EMPPRIN' ) = FALSO ) IMP ( 'Días inhábiles de hoy en 30 : ' ) IMP ( DIAS_INHABILES( FECHA_HOY, FECHA_HOY+30, 'EMPPRIN':'CALENDARIO', 0, 0 )) IMPRIME

SIGUIENTE_REGISTRO('EMPPRIN') FIN_MIENTRAS

SDO_VACACIONAL_DIAS(Fecha)

Esta función retorna los días de saldo vacacional a la fecha especificada. Este saldo depende de los parámetros definidos en la opción de configuración de vacaciones.

Ejemplo:

_sdo:= 0 ABRE_BASE ( 'EMPPRIN' )

PRIMER_REGISTRO ( 'EMPPRIN' ) MIENTRAS ( FIN_BASE ( 'EMPPRIN' ) = FALSO ) _sdo:=SDO_VACACIONAL_DIAS(FECHA_HOY) IMP ( 'Saldo en días al día de hoy :', _sdo ) ;; IMPRIME SIGUIENTE_REGISTRO('EMPPRIN') FIN_MIENTRAS

SDO_VACACIONAL_PRIMA(Fecha)

Esta función retorna la prima de saldo vacacional a la fecha especificada. Este saldo depende de los parámetros definidos en la opción de configuración de vacaciones. Vacaciones

Page 111: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 111

Ejemplo:

_sdo:=0 ABRE_BASE ( 'EMPPRIN' )

PRIMER_REGISTRO ( 'EMPPRIN' ) MIENTRAS ( FIN_BASE ( 'EMPPRIN' ) = FALSO ) _sdo:=SDO_VACACIONAL_PRIMA(FECHA_HOY) IMP ( 'Saldo en prima al día de hoy :', _sdo ) ;; IMPRIME SIGUIENTE_REGISTRO('EMPPRIN') FIN_MIENTRAS

SDO_VACACIONAL_X_PAGAR(Fecha)

Esta función retorna los días de saldo vacacional por pagar a la fecha especificada. Este saldo depende de los parámetros definidos en la opción de configuración de vacaciones.

Page 112: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 112

Capitulo 12

Manejo de Archivos de Texto

El manejo de archivos de texto es de gran utilidad en el reporteador ya que nos permite leer o escribir archivos con lo cual podemos realizar importación y exportación de la base de datos. Generalmente estas instrucciones se utilizan para leer información e insertarla en la base de datos ya que para la exportación de datos no es necesario utilizar estas instrucciones sino que se puede hacer directamente.

Instrucciones para el Manejo de Archivos de texto El orden de utilización de las instrucciones es el siguiente: SALIDA_REPORTE ( ‘Path’ ) Esta instrucción se utiliza cuando se desea exportar información a un archivo de texto. Path es la ruta a la cual se mandara el archivo y el nombre con el que será creado. Ejemplo:

NUEVO_PARAMETRO_SAL ( ‘SALIDA REPORTE’, ‘DISCO’, $salida ) LEE_PARAMETROS MODO_IMPRESION ( ‘DIRECTO’ ) SALIDA := $salida SALIDA_REPORTE ( ‘C:\GIRO\ARCHIVO.TXT’ )

Page 113: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 113

Instrucciones para Manejo de Archivos de texto CREA_BASE_TXT ( ‘Tabla’, ‘Archivo’, ‘Tipo’ ) Esta instrucción define el archivo que vamos a utilizar, ‘Tabla’ es el nombre con el cual posteriormente vamos a identificar al archivo, ‘Archivo’ es la ruta completa con el nombre del archivo deseado y ‘Tipo’ que debe ser el valor FIJO que significa que la longitud de los campos es constante.

DEFINE_CAMPO_TXT( ‘Tabla’, ‘Campo’, Inicio, Fin )

Una vez creada la base de texto es necesario definir los campos, para esto utilizamos esta instrucción donde ‘Tabla’ es el nombre con el que identificamos la base de Texto, ‘Campo’ es el nombre con el cual queremos identificar el campo a definir, Inicio y Fin son valores numéricos que determinan la columna inicio y fin del campo en el archivo de texto.

Nota: Si el tipo de base de texto es VARIABLE Inicio y Fin deben ser 0.

ABRE_BASE_TXT( ‘Tabla’, ‘Tipo’ )

Esta instrucción abre la base de texto anteriormente creada. ‘Tabla’ corresponde al identificador asignado a la base de datos y ‘Tipo’ puede ser ‘EDICION’ cuando desea abrir la base de datos en forma de lectura y edición o ‘APERTURA’ que crea el archivo en blanco.

Nota: Tenga cuidado al definir el tipo de APERTURA ya que si existe el archivo lo elimina y lo crea en blanco.

ORDENA_TXT ( ‘Tabla’, ‘campo’ )

Esta instrucción ordena la ‘Tabla’ de acuerdo al campo seleccionado.

Page 114: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 114

Instrucciones para Manejo de Archivos de texto Una vez creada y abierta la base de Texto se puede manejar como cualquier otra base de datos del sistema, utilizando todas las instrucciones disponibles para las bases de datos.

Nota: Estas instrucciones se utilizan principalmente para leer archivos de texto ya que para escribir es recomendable hacerlo directamente seleccionando el reporte en modo DIRECTO. Esta instrucción solo va ha ser ejecutada si en la ruta que se señale en este caso, c:\HOLA.TXT tiene que estar el archivo para que se pueda habrir

Ejemplo: CREA_BASE_TXT ( ‘TABLA’, ‘C:\HOLA.TXT’, ‘FIJO’ ) DEFINE_CAMPO_TXT ( ‘TABLA’, ‘CLAVE’, 1, 10 ) DEFINE_CAMPO_TXT ( ‘TABLA’, ‘CONC’, 11, 10 ) DEFINE_CAMPO_TXT ( ‘TABLA’, ‘ACUM’, 21, 10 ) ABRE_BASE_TXT ( ‘TABLA’, ‘EDICION’ ) PRIMER_REGISTRO ( ‘TABLA’ ) MIENTRAS ( FIN_BASE ( ‘TABLA’ ) = FALSO ) IMP ( COL(1), ‘TABLA’:’CLAVE’, COL(10), ‘TABLA’:’CONC’, COL(20), ‘TABLA’:’ACUM’ ) IMPRIME SIGUIENTE_REGISTRO( ‘TABLA’ ) FIN_MIENTRAS

EXISTE_ARCHIVO ( ‘archivo’ )

Esta instrucción nos permite verificar si existe determinado archivo dentro de algún directorio específico. En el parámetro archivo le indicamos a la función la ruta en donde posiblemente se localiza el documento.

Page 115: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 115

Instrucciones para Manejo de Archivos de Excel

Ejemplo:

_var := EXISTE_ARCHIVO ( ‘C:\GIRO\EMPLEADOS\EMPLEADO.INI’ )

BORRA_ARCHIVO ( ‘C:\GIRO\EMPLEADOS\EMPLEADO.INI’ )

La instrucción retorna un 1 si el archivo existe y 0 en caso contrario. La función BORRA_ARCHIVO nos permite eliminar ese archivo del directorio.

IMPORTACION DESDE UN ARCHIVO DE EXCEL Hasta este momento hemos visto como hacer la importación de información a Giro desde un archivo de texto plano. A continuación se mostrará como hacer una importación desde un formato de Excel. Supongamos que tenemos el archivo siguiente: altas.xls dentro de la carpeta: C:\GIRO. Altas.xls

clave nombre rfc 0001 IKER DISI770829QK0

Para realizar la carga de información se requerirá de usar las siguientes instrucciones:

Page 116: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 116

Instrucciones para Manejo de Archivos de Excel

EXCEL( ‘AGREGA_HOJA_PLANTILLA’, 1, 1, ‘C:\GIRO\altas.xls’ ) ABRE_BASE( ‘EMPPRIN’ ) EXCEL('TRAE_VALOR', 1, 2, $clave ) EXCEL('TRAE_VALOR', 2, 2, $nombre ) EXCEL('TRAE_VALOR', 3, 2, $rfc ) AGREGA_REGISTRO(‘EMPPRIN’) ‘EMPPRIN’:’CLAVE’ := $clave ‘EMPPRIN’:’NOMBREN’ := $nombre ‘EMPPRIN’:’RFC’ := $rfc GRABA_BASE(‘EMPPRIN’)

Teniendo como inicio la instrucción EXCEL con el parámetro: AGREGA_HOJA_PLANTILLA, la cual crea una copia de nuestro archivo y lo prepara para leerlo por Giro. Se utiliza el parámetro TRAE_VALOR para asignar a una variable el valor de la columna de Excel y luego se procede a la rutina de grabado en las tablas del sistema.

Ejercicio: Hacer un reporte que genere un archivo de texto con la clave del trabajador, el sueldo actual, la fecha del movimiento y un aumento de sueldo del 15%. Posteriormente hacer un reporte que lea ese archivo y agregue un nuevo registro para cada uno de los trabajadores en el archivo con su nuevo sueldo y con fecha de 10 días después a la fecha de su última modificación.

Page 117: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 117

Capitulo 13

Base de Datos de Nómina

Como abrir un período de Nómina En giro es posible tener un número indefinido de tipos de nómina y cada uno de ellos con sus respectivos periodos, pero no es posible tener todos abiertos al mismo tiempo dentro del reporteador. Solo es posible tener un solo periodo abierto a la vez y para esto es necesario tener abierta la base de trabajadores y la tabla de tipos de nómina apuntando al registro del tipo de nómina deseado y la de periodos haciendo referencia al periodo actual. Finalmente es necesario establecer la relación entre la base de datos del empleado y la de nómina mediante la instrucción USA_ARCHIVO. Ejemplo:

ABRE_BASE ( 'EMPPRIN' ) SI ( TRAE_REGISTRO( 'TIPONOM', 'SEM' ) ) SI ( TRAE_REGISTRO ( 'PERIODO', 'SEM', 'TIPONOM':'ACTUAL' ) = FALSO ) TERMINA_REPORTE FIN_SI FIN_SI USA_ARCHIVO( 'EMPPRIN', 'EMPNOM', 'CLAVE' )

Una vez establecida la relación el sistema abre el periodo de nómina indicado y se abre dos tablas mas CONCEPTO y NOMINA. La tabla de CONCEPTO contiene el

Page 118: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 118

Como abrir un período de Nómina catálogo de conceptos del periodo abierto y la tabla de NOMINA hace referencia a cada uno de los registros del kardex de nómina de los empleados. Estas tabla como cualquier otra se puede agregar y borrar registros pero se recomienda que se haga desde el reporteador. Una vez teniendo lista la base de nómina el sistema automáticamente al cambiar de empleado pone como activo su kardex de nómina y se puede hacer referencia a las siguientes Instrucciones.

Capturas de Nómina Para comprender la referencia que se hace cuando se mencionan capturas de nómina y totales de nómina, es necesario enfatizar que en Giro cada tipo de nomina dado de alta en el sistema, llámense nominas Semanales, Quincenales, Mensuales, etc., tiene su catálogo propio de periodos de nómina, que es el lugar donde se calcula y se guardan los montos a pagar al empleado. Cada periodo de Nómina tiene sus propias fórmulas con las cuales se hace posible el cálculo de la misma; cada vez que se cierra una nómina -proceso que se efectúa para pasar al siguiente periodo- las fórmulas se copian en automático. Para entrar al código de estos periodos se debe entrar al menú:

Catálogos>de Nómina>Conceptos

Page 119: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 119

Capturas de Nómina

Dentro del catálogo se da doble clic en cualquier concepto y aparece la siguiente ventana:

En esta ventana del concepto , se puede observar varios campos que se pueden acceder por medio del Reporteador Giro. Nos vamos a enfocar en la sección de CAPTURAS, ( abajo a la izquierda ) donde aparecen 3 campos, en el ejemplo el primero de ellos DIAS DE SUELDO corresponde a la captura del concepto 01 – CAP1, el segundo, MONTO X SUELDO es parte de la captura 2 – CAP2, y el tercero que permanece en blanco sería la captura 3 – CAP3.

Page 120: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 120

Capturas de Nómina Si entramos al kárdex de capturas de nomina de un trabajador, y seleccionamos el concepto de sueldo podremos ver la siguiente ventana:

Vemos las capturas que se habían configurado en el catálogo de Conceptos DIAS DE SUELDO y MONTO X SUELDO -CAP1 y CAP2 respectivamente- debido a que CAP3 permaneció en blanco, no se activa en la interfaz del usuario. Para hacer uso de estas capturas de un concepto de Nómina desde el Reporteador Giro se utilizan las siguientes instrucciones. CAP1( ‘clave_concepto’ ) CAP2( ‘clave_concepto’ ) CAP3( ‘clave_concepto’ ) Estas instrucciones pueden utilizarse para que nos retorne el valor almacenado en la captura seleccionada del concepto indicado en la ‘clave’ o bien puede utilizarse para asignar el valor a almacenar en la captura del concepto. _aux := CAP1(‘01’) CAP2(‘05’) := _aux

Page 121: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 121

Capturas de Nómina TOTAL( ‘clave’ ) Es similar a las anteriores solo que esta hace referencia al total del concepto. Con esta instrucción podemos hacer uso del monto calculado en el proceso de la nómina que es en si, el que se despliega en la mayoría de reportes y recibos del trabajador. CAP1C( ‘clave_concepto’ ) CAP2C( ‘clave_concepto’ ) CAP3C( ‘clave_concepto’ ) Estas instrucciones son similares a las anteriores solo que estas almacenan valores alfanuméricos. CAP1C(‘02’) := ‘Hola’ $aux := CAP1C(‘02’) Ejemplo : SI ( TRAE_REGISTRO ( 'TIPONOM', 'QUI' ) ) SI ( TRAE_REGISTRO ( 'PERIODO', 'QUI', 'TIPONOM':'ACTUAL' ) ) ;; FIN_SI FIN_SI USA_ARCHIVO ( 'EMPPRIN', 'EMPNOM', 'CLAVE' ) PRIMER_REGISTRO ( 'EMPPRIN' ) MIENTRAS ( FIN_BASE ( 'EMPPRIN' ) = FALSO )

SI ( TOTAL_PERCEPCIONES > 0 ) IMP ( COL(1), 'EMPPRIN':'CLAVE' , COL(10), 'EMPPRIN':'NOMBREP' + ' ' + 'EMPPRIN':'NOMBREN' ) ;; IMPRIME IMP ( COL(5), CAP1('01'), COL(15), CAP2('01'), COL(25), CAP3('01'), COL(35), TOTAL('01') ) IMPRIME FIN_SI SIGUIENTE_REGISTRO ( 'EMPPRIN' ) FIN_MIENTRAS

Page 122: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 122

Instrucciones Especiales PON_TOTAL_0 Esta instrucción pone el TOTAL de todos los conceptos del kardex del empleado seleccionado en 0. PON_CAPTURAS_0 Esta instrucción pone las capturas CAP1, CAP2, CAP3 de todos los conceptos del Kárdex del empleado seleccionado en 0. Estas dos instrucciones hacen cambios en el kardex de nómina del empleado pero estos cambios no toman efecto hasta que se hace el grabado de la base de nómina. GRABA_BASE( ‘EMPNOM’ )

Nota: Todas las instrucciones anteriores retornan y asignan valores a los conceptos ya existentes dentro del kardex del empleado. Si queremos el total de un concepto que el empleado no tiene no hay problema ya que el reporteador retorna 0, pero si queremos asignar una captura a un concepto que no existe puede resultar en un comportamiento anormal.

Para esto existen 2 instrucciones: CONCEPTO_CAPTURADO( ‘CONCEPTO’ )

Esta instrucción retorna verdadero si el concepto al que hacemos referencia si existe dentro del kardex del empleado. CAPTURA_CONCEPTO( ‘CONCEPTO’ )

Esta instrucción crea el concepto dentro del kardex del empleado para posteriormente poder asignar valores a sus capturas.

Page 123: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 123

Kardex de Nómina

Kárdex de Nómina Los kardex de nómina son útiles para llevar subtotales. Los kardex son en si tablas donde se almacena los conceptos y totales de los mismos. Por omisión siempre existe un kardex creado que es el GENERAL que implícitamente se utiliza con cada trabajador. Para crear un kardex se utiliza la siguiente instrucción. CREA_KARDEX( ‘NOMBRE KARDEX’ )

Una vez creado el kardex podemos almacenar información dentro del mismo, para esto se utiliza la instrucción : ACUMULA_TOTALES( ‘NOMBRE KARDEX’ )

Ya teniendo almacenada la información en el kardex y deseemos hacer referencia al contenido es necesario poner como activo el kardex, para esto se utiliza la instrucción: USA_KARDEX( ‘NOMBRE KARDEX’ )

Una vez teniendo activo el kardex podemos utilizar las instrucciones de nomina para traer los totales de determinado concepto. Se recomienda que una vez que termine de utilizar un determinado kardex retorne al kardex original.

USA_KARDEX( ‘GENERAL’ ) Aunque la información del kardex internamente se almacena en una tabla,

dentro del reporteador no podemos hacer referencia a ella como tal, para esto es necesario utilizar una instrucción que pasa la información del kardex a una tabla.

TABULA_KARDEX_NOMINA( Tabla, Longitud )

Tabla tiene que ser una variable de tipo tabla previamente declarada y longitud indica el número de caracteres a contemplar para las cantidades.

Page 124: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 124

Kardex de Nómina Ejemplo: VAR_T ( &tabla ) _cont := 0 CREA_KARDEX( 'UNO' ) CREA_KARDEX( 'DOS' ) CREA_KARDEX( 'TOTAL' ) SUB_RUTINA imprime_tabla IMPRIME_TABLA ( &tabla , 5 , 10 , 0 , 0 , 0 , 30 , 50 , 55 , 0 , 0 , 0 , 75 , 0 , 96 , 0 , 0 , 0 , 116 ) FIN_SUB_RUTINA SI ( TRAE_REGISTRO ( 'TIPONOM', 'QUI' ) ) SI ( TRAE_REGISTRO ( 'PERIODO', 'QUI', 'TIPONOM':'ACTUAL' ) ) ;; FIN_SI FIN_SI USA_ARCHIVO ( 'EMPPRIN', 'EMPNOM', 'CLAVE' ) PRIMER_REGISTRO ( 'EMPPRIN' ) MIENTRAS ( FIN_BASE ( 'EMPPRIN' ) = FALSO ) SI ( TOTAL_PERCEPCIONES > 0 ) USA_KARDEX( 'GENERAL' ) SI ( _cont = 0 ) ACUMULA_TOTALES ( 'UNO' ) SI_NO ACUMULA_TOTALES ( 'DOS' ) _cont := -1 FIN_SI ACUMULA_TOTALES ( 'TOTAL' ) IMP ( COL(1), 'EMPPRIN':'CLAVE' , COL(10), 'EMPPRIN':'NOMBREP' + ' ' + 'EMPPRIN':'NOMBREN' ) ;; IMPRIME TABULA_KARDEX_NOMINA( &tabla, 12 ) imprime_tabla IMPRIME _cont := _cont + 1 FIN_SI SIGUIENTE_REGISTRO ( 'EMPPRIN' ) FIN_MIENTRAS IMPRIME IMP ( 'TOTALES UNO: ' ) ;; IMPRIME USA_KARDEX( 'UNO' ) TABULA_KARDEX_NOMINA( &tabla, 12 ) imprime_tabla IMPRIME IMPRIME IMP ( 'TOTALES DOS: ' ) ;; IMPRIME USA_KARDEX( 'DOS' ) TABULA_KARDEX_NOMINA( &tabla, 12 ) imprime_tabla IMPRIME IMPRIME IMP ( 'TOTALES TOTAL: ' ) ;; IMPRIME USA_KARDEX( 'TOTAL' ) TABULA_KARDEX_NOMINA( &tabla, 12 ) imprime_tabla IMPRIME

Page 125: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 125

Kardex de Nómina

Existen otras 3 funciones que permiten calcular totales en el kardex actual.

TOTAL_PERCEPCIONES Esta instrucción retorna el total de percepciones hasta ese momento en el

kardex actual.

TOTAL_DEDUCCIONES

Esta instrucción retorna el total de deducciones hasta ese momento en el

kardex actual.

TOTAL_NEGATIVO Retorna verdadero si el total las percepciones menos las deducciones es

negativo.

Acumulados de Nómina Solo existen dos instrucciones para hacer referencia a los acumulados, pero para esto es necesario que establezca la relación entre el archivo de acumulados y la base de empleados utilizando la instrucción USA_ARCHIVO. ACUM_MENSUAL( ‘Mes’, ‘CONCEPTO’ )

Esta instrucción retorna el acumulado del concepto en el mes especificado, los meses se deben especificar de la siguiente manera:

Page 126: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 126

Acumulados de Nómina ‘ENE’, ‘FEB’, ‘MAR’, ‘ABR’, ‘MAY’, ‘JUN’, ‘JUL’, ‘AGO’, ‘SEP’, ‘OCT’, ‘NOV’, ‘DIC’. Una variante que tiene esta instrucción es que ‘Mes’ puede ser también : ‘BIMESTRE1’, ‘BIMESTRE2’, ‘BIMESTRE3’, ‘BIMESTRE4’, ‘BIMESTRE5’, ‘BIMESTRE6’, ‘SEMESTRE1’, ‘SEMESTRE2’, ‘ANUAL’, ‘ESPECIAL’, ‘FINIQUITO’, ‘AGUINALDO’. Con esto la instrucción retorna el acumulado especificado. La otra función para acumulados es: ACUM_ANUAL ( ‘CONCEPTO’ )

Esta solo retorna el acumulado anual del concepto especificado. Ejemplo:

FORMATO_PESOS := 2 DECIMALES:= 2 ABRE_BASE( ‘EMPPRIN’ ) USA_ARCHIVO ( ‘EMPPRIN’, ‘EMPACUM’, ‘CLAVE’ ) PRIMER_REGISTRO( ‘EMPPRIN’ ) MIENTRAS ( FIN_BASE ( ‘EMPPRIN’ ) = FALSO ) SI ( ACUM_MENSUAL ( ‘ENE’, ‘01’ ) <> 0 ) IMP ( COL(1), ‘EMPPRIN’:’CLAVE’ ) IMP ( COL(10), DER( $(ACUM_MENSUAL(‘ENE’,’01’)), 10) ) IMPRIME FIN_SI SIGUIENTE_REGISTRO( ‘EMPPRIN’ ) FIN_MIENTRAS

Page 127: Manual de Reporteador Giro

Copyright © 2003. Todos los derechos reservados. (Copia fiel del original ) 127

Acumulados de Nómina

En el ejemplo anterior se muestra el acumulado del concepto 01 del mes de

Enero para todos los empleados, siempre y cuando, como lo establece la Condición, éste sea diferente de cero. Ejemplo: VAR_N ( _acum )

FORMATO_PESOS := 2 DECIMALES:= 2 ABRE_BASE( ‘EMPPRIN’ ) USA_ARCHIVO ( ‘EMPPRIN’, ‘EMPACUM’, ‘CLAVE’ ) PRIMER_REGISTRO( ‘EMPPRIN’ ) MIENTRAS ( FIN_BASE ( ‘EMPPRIN’ ) = FALSO ) SI ( TRAE_REGISTRO ( ‘EMPACUM’, ‘EMPPRIN’:’CLAVE’, ‘01’ ) ) SI ( 'EMPACUM':'ENE' <> 0 ) _acum := ‘EMPACUM’:’ENE’ _acum := _acum + 1000 ‘EMPACUM’:’ENE’ := _acum GRABA_BASE( ‘EMPACUM’ ) IMP ( COL(1), ‘EMPPRIN’:’CLAVE’ ) IMP ( COL(10), DER( $(ACUM_MENSUAL(‘ENE’,’01’)), 10) ) IMPRIME FIN_SI FIN_SI SIGUIENTE_REGISTRO( ‘EMPPRIN’ ) FIN_MIENTRAS Esta es la manera de poder accesar y modificar los acumulados de los trabajadores, en el ejemplo, se recorre la base de empleados y se apunta al concepto ‘01’, se verifica que sea diferente a cero y se aumenta su cantidad en 1000.