Sei sulla pagina 1di 127

noTabla de Contenidos

Acuerdos dispuestos para este manual.


Teclas Rpidas dentro del Reporteador Giro.

4
5

Capitulo 1 Introduccin.

Finalidad de esta documentacin.


Qu es el Reporteador Giro?...................................

7
8

Capitulo 2 Definiciones..

Descripcin de la interfaz del Reporteador Giro..


Definicin de Objetos de Interfaz.
Estndares...........................................

9
13
16

Capitulo 3 Creacin de Reportes

17

Como iniciar un Reporte..


Empezar un Reporte desde cero
Modificando un reporte existente.
Eliminar un reporte del Catlogo..
Renombrar un reporte..
Otorgando derechos a los usuarios Giro

17
19
20
21
21
22

Capitulo 4 Impresin de Reportes

23

Tipos de Impresin..
Impresin Grfica
Impresin Directa
Tipos de Letra..
Rutinas y Funciones de Impresin.
Uso de Colores.
Definicin de Encabezados y Pie de Pgina.
Instrucciones para modificacin INI..
Instrucciones Grficas..
Mensajes..
Excel.
Word.

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

23
23
23
25
27
27
38
40
41
44
45
48

Tabla de Contenidos
Capitulo 5 Tipos de Variables.

49

Declaracin de Variables.
Variables Numricas.
Variables Alfanumricas
Variables de Tabla.
Asignacin de Valores a Variables.
Conversin de Variables
Manejo de Valores Alfanumricos.
Manejo de Valores Numricos..
Manejo de Tablas.
Variables de Ambiente.

49
49
50
51
51
52
53
58
59
69

Capitulo 6 Manejo de Ciclos

72

Ciclo REPITE.
Ciclo MIENTRAS.

72
73

Capitulo 7 Uso de Condicionales..

75

SI -> FIN_SI
SI -> SI_NO -> FIN_SI..

75
75

Capitulo 8 Uso de SubRutinas (Procedimientos)

77

Capitulo 9 Manejo de Parmetros

80

Parmetros
Parmetros
Parmetros
Parmetros
Parmetros
Parmetros

Generales......
con uso de Check Box
de Seleccin .
de Salida .
de Referencia a Tabla ..
de Fecha

80
81
82
83
84
87

Capitulo 10 Base de Datos

89

Manejo de una Base de Datos..


Relaciones de una Base de Datos.
Operaciones con Base de Datos.
Consultas SQL..

89
92
97
99

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

Tabla de Contenidos
Capitulo 11 Instrucciones de Empleados.

105

Vigencia de Trabajadores.
Krdex de Sueldos.
Localizacin del Empleado...............
Ausentismos, Incapacidades y Retardos.
Vacaciones..

105
106
106
107
109

Capitulo 12 Manejo de Archivos de Texto

112

Instrucciones para Manejo de Archivos de Texto.


Importaciones desde un archivo de Excel.

112
115

Capitulo 13 Base de Datos de Nmina..

117

Como abrir un perodo de Nmina..


Capturas de Nmina..
Instrucciones Especiales.
Krdex de Nmina
Acumulados de Nomina

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

117
118
122
123
125

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 mens utilizados sern referenciados de la siguiente manera:


Men>Sub-men>Sub-men ejemplo:

Catlogos > de Nmina > Conceptos

Los pasos para realizar una tarea sern indicados de manera secuencial
y numerada, ejemplo:

1. Dirjase al men Procesos>Generales>Respaldos


2. Seleccione la pestaa Recuperar
3. ...
Las anotaciones importantes sern 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 clculos sern errneos.

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

Teclas Rpidas dentro de Giro


Existen algunas combinaciones de teclas que facilitan y agilizan el trabajo en la
computadora, a continuacin te presentamos un listado con las teclas ms
comunes dentro de Giro y Windows.

Giro
Combinacin o tecla de funcin Descripcin
<F1>
Ayuda
<F2>
Guardar
<F3>
Nuevo
<F4>
Borrar
<F9>
Cancelar
Alt + Letra Subrayada
Entrar a men o seleccionar opcin

Reporteador
Durante la edicin del reporte existen varias teclas que ayudan a agilizar algunas
tareas.

Combinacin o tecla de funcin Descripcin


Ctrl + S
Muestra la pantalla de bsqueda de palabras.
Ctrl + L
Ctrl + Kn
Ctrl + Qn
Ctrl + U
Ctrl + Y
Ctrl + <F1>
<F2>
<F3>
<F4>
<F5>
<F6>
<F7>
<F8>
<F9>

Continua con la bsqueda anterior o bien


busca la siguiente palabra
Donde n es un dgito de 0 a 9. Esto marca la
posicin del cursor
Donde n es un dgito de 0 a 9.Esto permite ir
a una de las marcas anteriormente definida
Mueve el bloque seleccionado una columna a
la derecha
Mueve el bloque seleccionado una columna a
la izquierda
Muestra la ayuda de la instruccin donde se
encuentra el cursor
Graba la formula
Checa la sintaxis del reporte
Debugea el reporte hasta la lnea donde se
encuentra el cursor
Muestra la salida del reporte
Continua la ejecucin hasta el final del
reporte
Debugea paso a paso el reporte
Ejecuta el reporte de forma normal
Cancela la ejecucin del reporte o bien
cancela el debuger

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

Teclas Rpidas dentro de Giro


Puede presionar el botn derecho del ratn para ver el equivalente en macros de cada
uno de los botones durante la edicin del reporte.

Windows
Combinacin o tecla de funcin Descripcin
Alt + Tab
Cambiar de aplicacin
Ventanita + D
muestra el escritorio
Ventanita + F
muestra el cuadro de bsqueda de archivos
Ventanita + E
Abre el Explorador de Windows
Alt + <F4>
Cierra una aplicacin

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

Capitulo 1

Introduccin
Bienvenido a Giro, la mejor solucin a los problemas de administracin de personal.

Finalidad de esta documentacin


Pensando en las necesidades de un rpido aprendizaje que tienen nuestros
nuevos usuarios, realizamos esta gua, 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 programacin con la que fue hecho, haciendo que desde el principio
comience a desarrollar nuevos reportes y frmulas de clculo sencillas que le permitan
mas adelante, con la practica, crear disear cdigo mas complejo y elaborado para
tareas mas especificas.
Por ltimo, cabe mencionar que existen ciertos apndices al final de esta gua, los
cuales son de gran importancia ya que integran informacin sobre caractersticas extra
del sistema y son de gran ayuda en algunas ocasiones.

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

Qu es el Reporteador Giro?
El reporteador es una poderosa herramienta de programacin incluida dentro
del sistema giro diseado para poder consultar y manipular la Base de Datos de la
Empresa y poder a travs de su lenguaje de programacin diseado en ESPAOL hacer uso de todas sus potencialidades.
El reporteador giro naci de la necesidad de hacer reportes fcil y rpidamente
que se adapten 100% a las necesidades del usuario. Esta basado en la sintaxis de el
Lenguaje de programacin Pascal y por tal razn 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.

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

Capitulo 2

Definiciones

Descripcin 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:

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

Definicin de Objetos de Interfaz del Reporteador Giro

1.

Barra de ttulo: Indica el nombre de la aplicacin y muestra los botones que


permiten cerrar y minimizar (hacer pequea) y maximizar (ampliar) la
ventana de trabajo de Giro.

2.

Barra de mens: Muestra todos los mens que nos permitirn 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, caracterstica que examinaremos en un momento.

4.

Estado del sistema: Muestra los datos principales de la configuracin del


sistema

El reporteador de giro se compone de dos pestaas: Reporte y Formula

Pestaa de Reporte
Esta carpeta es donde se muestra la ejecucin 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 impresin de resultados del reporte

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

10

Definicin de Objetos de Interfaz del Reporteador Giro

Pestaa de Formula
Desde esta carpeta se puede modificar la frmula 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
edicin del reporte.
Cuenta con las siguientes barras de herramientas.

2. Barra de iconos
3. Barra de estado del sistema
4. Area de edicin del reporte

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

11

Definicin de Objetos de Interfaz del Reporteador Giro

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

12

Definicin de Objetos de Interfaz


Dentro de la barra de iconos de la pestaa de Reporte se encuentran:

Barra de navegacin
Esta es la barra de navegacin donde el primer botn
muestra la pgina anterior pero esto funciona solo
despus 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 ejecucin, el cuarto es el inverso al
primero el cual permite avanzar una pagina y el
ltimo botn para el reporte y obviamente este
funciona solo cuando el reporte esta en ejecucin.
En ocasiones por error en la programacin de alguno de los reportes puede el
reporte terminar anormalmente y se recomienda presionar el botn 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
ejecucin de un reporte.

Barra de zoom e imp.


Esta barra funciona solo cuando el reporte ha
terminado la ejecucin ya que el primer botn hace
un acercamiento al reporte (Zoom) y el segundo es la
operacin inversa que permite ver el reporte mas
pequeo, el ltimo botn permite imprimir el reporte,
una vez que presiona el botn se muestra una
pantalla donde puede definir el nmero de copias, el
rango de impresin, la impresora, etc.

Barra de pginas
Una vez que el reporte termina su ejecucin se
muestra en la parte inferior a manera de pestaas
cada una de las paginas generadas por el reporte,
haga clic en la pgina deseada para visualizarla.
Cuando el reporte tiene mas de 10 paginas el sistema
muestra una pestaa extra con el signo + con lo que
se muestran las siguientes 10 paginas y otra pestaa
- que muestra las 10 paginas anteriores.
Copyright 2003. Todos los derechos reservados. (Copia fiel del original )

13

Definicin de Objetos de Interfaz

Dentro de la barra de iconos de la pestaa de Formula se encuentran:

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

Barra BD, letras, etc.


El primer botn de esta barra permite ver las bases
disponibles con sus respectivos campos. El segundo
botn muestra los tipos de letra disponibles. El tercer
botn muestra la estructura del reporte y el cuarto
botn permite hacer bsqueda de palabras en el
cdigo del reporte.

Barra de pginas
El primer botn 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 depuracin mostrando el cursor en la primera lnea
de ejecucin, 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 botn permite hacer una verificacin de
sintaxis, en caso de ocurrir un error el sistema
muestra el tipo de error y la lnea donde ocurri el
mismo.
El tercer botn 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 botn muestra el visualizador de variables.
Solo se habilita cuando ejecuta el debuger.

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

14

Definicin de Objetos de Interfaz

Barra de pginas
Si selecciona esta opcin puede posicionarse en
alguna instruccin y hacer clic con el botn izquierdo
del ratn para ver una referencia de la instruccin.

Barra de pginas
El primer botn graba la formula en disco y el
segundo permite imprimir la frmula en impresora.

Barra de estado del


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

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

15

Estndares

El reporteador giro es case sensitive lo que significa que si existe diferencia entre
una palabra escrita con maysculas y otra escrita con minsculas ya sea de forma
completa o por partes. Veamos un ejemplo:

holacomoestas
:
HOLACOMOESTAS

HolaComoEstas
:
HOLACOMOESTAS

holacomoestas
:
holacomoestas

Los tres conjuntos de palabras dicen exactamente lo mismo, pero solo en el bloque del
lado derecho el Reporteador giro lo reconocer como vlido y correcto dentro de su
sintaxis de programacin 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 maysculas y como
recomendacin las variables y nombres de subrutinas se escriben con
minsculas para evitar confusiones.

La declaracin de variables se hace de manera global, no existen variables


privadas.

Se recomienda que para estandarizar los nombres de variables antepongan un


smbolo para diferenciar el tipo de variable al que se hace referencia.

_
$
&

Para indicar variables de tipo numrico.


Para indicar variables de tipo alfanumrico.
Para indicar variables de tipo tabla.

Nota:

Esto no significa que as debe ser sino que es una recomendacin para estandarizar.

Cada instruccin pueden ir en una sola lnea o bien puede definir varias
instrucciones dentro de una sola lnea, para esto tiene que separar cada
instruccin con dos punto y coma( ;; ).
Ejemplo:
INSTRUCCION ;; INSTRUCCION ;; INSTRUCCION
Nota:

Si requiere ayuda mas explcita puede presionar Ctrl + F1 sobre cualquiera de las
instrucciones para que el reporteador muestre la ayuda correspondiente a la instruccin
solicitada.

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

16

Capitulo 3

Creacin 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 seccin desear anexar este nuevo registro. Bien puede ser un
reporte General, de Seguro Social, de Recursos Humanos o de Nmina.

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

17

Como iniciar un reporte

Una vez dentro del Catalogo de Reportes seleccionado, mostrar una ventana como la
que sigue y habr que escoger el botn de

Se captura una clave de Reporte que no exista previamente que puede ser
alfanumrica, y se le da un nombre para identificarlo con una descripcin y se le da
ACEPTAR.

Nota:

Si se captura clave de reportes de forma numrica se recomienda que la numeracin la


establezcan del 200 en adelante ya que al actualizar en la empresa reportes estndares
se sobrescriben del 0 al 199.

Una vez hecho esto, se busca en el catlogo el reporte que se acaba de crear y se
abre dndole doble clic

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

18

Como iniciar un reporte

Este reporte se crea con una utilera por default para generarlo con los filtros mas
usados por las empresas que solicitan informacin 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 pestaa de Frmula y borrar los bloques de
cdigo que hacen referencia a estos archivos, eliminando todo el cdigo que este
despus de la lnea #FIN DE DESCRIPCION hasta el final del reporte. Una vez hecho
esto se procede a verificar la sintaxis de la frmula restante para checar que contine
correcta. Se compila haciendo uso de la tecla rpida <F3> o con un clic en el icono
indicado.

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

19

Empezar un Reporte desde cero

Se guarda con la tecla <F2> o con el icono correspondiente. Despus deber salirse
del reporte y volver a entrar. De esta manera ya no le aparecern 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 frmulas de los
reportes ya contenidos en el catlogo. Ms sin embargo y como una medida de
seguridad, recomendamos que no se modifiquen directamente para evitar algn
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 fcilmente. Tambin se recomienda esta opcin para en cierta
manera comenzar un nuevo reporte a partir de algo ya establecido y ahorrar tiempo de
programacin.

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

20

Modificando un Reporte existente

En el catlogo de Reportes se encontrara la opcin de


darle a este una clave y descripcin nueva.

el reporte y

Eliminar un reporte del Catlogo


Simplemente se selecciona el reporte que se desee borrar y se oprime el botn de
.
Automticamente el archivo es eliminado del Catalogo y de su ubicacin fsica.
Cuando el reporte no fue creado por el usuario, es decir que es un reporte
Estndar. El botn de Borrar aparecer como deshabilitado por proteccin.

Renombrar un reporte
Se selecciona el reporte que se desee cambiar de Clave o de Descripcin y se
oprime el botn
, 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 automtico hace la nueva modificacin.

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

21

Renombrar un reporte

Cuando el reporte no fue creado por el usuario, es decir que es un reporte


Estndar. El botn de RENOMBRAR aparecer como deshabilitado por proteccin.

Otorgando derechos a los usuarios Giro


Para establecer en giro quienes van a tener acceso a determinados reportes,
existe dentro del mismo catlogo de reportes una opcin que nos permitir asignar
quienes tendrn derecho dentro de nuestra empresa a ejecutarlos, dejando fuera de
esa seleccin a los usuarios no requeridos.
Se selecciona dentro del Catlogo el reporte deseado y se oprime el botn
, 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 edicin de los reportes.

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

22

Capitulo 4

Impresin de Reportes

Tipos de Impresin
El reporteador giro permite definir dos tipos diferentes de impresin que determinan la
forma de presentar el reporte tanto en pantalla como en hojas impresas.

IMPRESIN GRAFICA
Este tipo de reportes permite utilizar instrucciones especiales para imprimir en
coordenadas basadas en centmetros y utilizar tipos de letra instalados en WINDOWS
como los TRUE TYPE.

Nota:

Este tipo de reportes son ms lentos pero se imprimen en mucho ms calidad.

IMPRESIN DIRECTA
Este tipo de impresin se utiliza para impresoras de matriz de punto donde se
requiere velocidad a baja calidad. Estos reportes no pueden utilizar instrucciones de
impresin grfica y deben utilizar letras definidas especficamente para la impresora a
utilizar.
Nota:

Si el reporte va a salir por disco, el tipo de impresin debe ser DIRECTO ya que de lo
contrario el grfico imprime instrucciones de ms para especificar las coordenadas.

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

23

Tipos de impresin

Para definir el tipo de impresin existe la instruccin MODO_IMPRESION y recibe como


parmetro el tipo de impresin que puede ser GRAFICO o DIRECTO. Esta instruccin
debe ir declarada al inicio del reporte.
Ejemplo:

COLUMNAS:=80
RENGLONES:=65
MODO_IMPRESION( GRAFICO )

IMP ( HOLA )
IMPRIME

Para definir el tipo de impresin por default este se define en el archivo de


configuracin GIRO.INI en la seccin del nombre de la impresora con la variable
MODO_IMPRESION seguido por el tipo de impresin.

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

Con esto define que por default el modo de impresin en DIRECTO. Si el reporte
tiene definida la instruccin del modo de impresin entonces ignora el default y toma
el que se defina en ese momento. Si el reporte no tiene definido el tipo de impresin y
tampoco esta definido en el archivo de configuracin el sistema define por default el
modo de impresin DIRECTO.

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

24

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
instruccin LETRA que lleva como parmetro el nombre de la letra a utilizar, solo
existen las siguientes letras:
LETRA
LETRA
LETRA
LETRA
LETRA
LETRA
LETRA
LETRA

NORMAL
CONDENSADA
EXPANDIDA
ENFATIZADA
TITULO
1
2
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 cdigo del reporte para que hiciera
referencia a otro tipo de letra valido, por tal razn se defini de esta manera para que
desde el men de configuraciones en la configuracin de tipos de letra se defina que
tipo de letra corresponde a cada uno de los tipos antes mencionados.

La ventana de configuracin 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.
Copyright 2003. Todos los derechos reservados. (Copia fiel del original )

25

Tipos de Letra

Se recomienda que las letras de pantalla seleccionadas sean FIXED lo que


significa que todas las letras tienen el mismo tamao, esto es para que las columnas
queden bien alineadas en los reportes, para verificar que una letra es FIXED en la
carpeta de configuracin seleccione el tipo de letra deseado y en la parte inferior se
muestra un ejemplo de la impresin, si las columnas se muestran alineadas significa
que la letra si es FIXED.
Si el reporte esta definido como impresin DIRECTA al momento de imprimir el
reporte a impresora tomar las letras especificadas en la pestaa 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 pequea impresora dibujada al lado izquierdo lo que
significa que son letras nativas de la impresora y son de mayor velocidad. Otra
consideracin a tomar para que la impresin en matriz de puntos sea ms rpida es
asignar la propiedad de calidad de impresin en BORRADOR o DRAFT en las
propiedades de la impresora, esto puede variar de impresora a impresora.
La instruccin LETRA cambia el tipo de letra desde la ejecucin de la instruccin
hasta encontrar otra definicin de LETRA o terminar el reporte.
Ejemplo

LETRA( LETRA NORMAL )


IMP ( Impresin con letra Normal ) ;; IMPRIME
LETRA( LETRA ENFATISADA )
IMP ( Impresin con letra Enfatizada ) ;; IMPRIME

Salida:
Impresin con letra Normal
Impresin con letra Enfatizada

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

26

Rutinas y Funciones de Impresin


Existen dos rutinas de impresin dependiendo el modo de impresin que tenga
definido, ambas instrucciones funcionan de la misma manera solo que una lleva dos
parmetros al inicio para indicar las coordenadas en X y Y a imprimir.

Instruccin IMP
Esta instruccin se puede utilizar en ambos tipos de impresin 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 alfanumricos
es necesario encerrar stos en apstrofes.
Esta instruccin puede recibir un nmero ilimitado de parmetros los cuales
pueden ser numricos o alfanumricos. Cada uno de los parmetros debe ir separado
por (,). Existen instrucciones que solo se utilizan como parmetros de esta instruccin
que sirven para definir la columna donde se desea imprimir.
Ejemplo:

IMP ( hola como estas, muy bien );; IMPRIME

Instruccin COL
La instruccin COL se utiliza como parmetro de la instruccin IMP para definir
la columna donde se desea imprimir, la instruccin COL lleva como parmetro la
columna donde se desea imprimir.
Ejemplo:

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

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

27

Rutinas y Funciones de Impresin

Instruccin IMPRIME
La instruccin IMP no imprime inmediatamente despus de ejecutada sino que
esto lo almacena en un buffer hasta que se encuentre con la instruccin 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 instruccin IMP en varias ocasiones con


diferentes parmetros de impresin y al final imprimir el contenido del buffer.

Instruccin REPITETXT
Si se desea imprimir uno o varios caracteres puede utilizar la instruccin
REPITETXT que recibe como parmetros los caracteres a imprimir y el nmero de
veces a imprimir.

Ejemplo:

IMP ( ************************************************** ) IMPRIME


IMP ( REPITETXT( *, 50 ) )
IMPRIME

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

28

Rutinas y Funciones de Impresin

Salida:

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

Instruccin CANTIDAD_LETRA
Si se desea imprimir la cantidad en letra existe la instruccin CANTIDAD_LETRA
que recibe como parmetro el valor a convertir y retorna en un valor alfanumrico la
cantidad con letra.
Ejemplo:

IMP ( CANTIDAD_LETRA (12345.67 ) ) ;; IMPRIME


Salida:
DOCE MIL TRESCIENTOS CUARENTA Y CINCO 67/100 M.N.

Instruccin $
La instruccin $ se utiliza tambin como parmetro del IMP para indicar que se desea
imprimir una cantidad de pesos, esta instruccin recibe como parmetro el valor
numrico 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:
Copyright 2003. Todos los derechos reservados. (Copia fiel del original )

29

Rutinas y Funciones de Impresin

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

Salida:

12,345.67
1234567

Justificacin DERECHA Instruccin DER


La instruccin IMP por default imprime todo justificado a la izquierda, si desea
justificar a la derecha la impresin se utiliza la instruccin DER que lleva 2
parmetros, el primero que especifica el valor alfanumrico a imprimir y el segundo
que indica la longitud del valor a imprimir. Esta instruccin no solo se utiliza dentro de
la instruccin IMP, se puede utilizar en cualquier momento ya que retorna el valor
alfanumrico con valor de pesos.
Ejemplo. 1

IMPRIME
IMP( 123.45 ) ;; IMPRIME
IMP( 12.34 ) ;; IMPRIME
IMP( 1234.56 ) ;; IMPRIME
IMP( 1234567.89 ) ;; IMPRIME

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

30

Rutinas y Funciones de Impresin

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

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

31

Rutinas y Funciones de Impresin

La instruccin 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

Justificacin CENTRO
La instruccin CENTRA recibe como parmetro un valor alfanumrico y se
utiliza para centrar en la hoja el valor enviado como parmetro. 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 nmero de columnas
del reporte.
Ejemplo:

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

32

Rutinas y Funciones de Impresin

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

Salida:

Texto a imprimir en el centro de la hoja

Instruccin IMP_XY
Esta instruccin se utiliza de igual forma a IMP solo que en esta los 2 primeros
parmetros indican las coordenadas X y Y respectivamente, y al final de cada
instruccin IMP_XY es necesario ejecutar la instruccin de IMPRIME.
Ejemplo:

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

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

33

Rutinas y Funciones de Impresin

Salida:

123

123.45

Note que la salida es la misma solo que la forma de programar es distinta y la


calidad de impresin en papel es mejor. Las coordenadas que se especifican en
cualquier instruccin grfica se hace en base a centmetros donde un valor de 100
corresponde a 1 Cm.

Instruccin FORMATO
La instruccin FORMATO permite imprimir valores alfanumricos con
determinado formato que podemos establecer, esta instruccin recibe 2 parmetros, el
primero que especifica la variable alfanumrica 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:

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

34

Rutinas y Funciones de Impresin

12-34/567*890

Manejo de Fechas, Horas


Si desea imprimir fechas debe utilizar la instruccin FECHA la cual recibe como
parmetro 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 lnea 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 das 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 das.

Ejemplo:

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

35

Manejo de Fechas, Horas

FORMATO_FECHA := 2
IMP ( La fecha de hoy es : , FECHA( FECHA_HOY ) ) ;; IMPRIME
IMP ( La fecha de hoy + 30 das es : , FECHA( FECHA_HOY + 30 ) )
IMPRIME

Instruccin CALCULA_FECHA
La instruccin CALCULA_FECHA recibe como parmetro el ao, mes y da
respectivamente y retorna la fecha en formato juliano.

Nota:

Si la fecha especificada no existe la instruccin 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

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

36

Manejo de Fechas, Horas

En el ejemplo anterior la segunda instruccin se pide que imprima la fecha del


31 de febrero lo cual es un error por lo que la instruccin retorna la del da inmediato
anterior.

Manejo de HORAS
Al igual que la impresin de fecha existe una instruccin para imprimir valores
de horas, HORA recibe como parmetro a imprimir,. La instruccin 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 impresin en papel ser en el
color de la tinta pero en pantalla se mostrar con los colores definidos.
La instruccin para definir el color es COLOR la cual recibe como parmetro el
color deseado (Vea la ayuda en lnea para ver los colores disponibles en el sistema).
Ejemplo:

IMP ( Color por default. ) ;; IMPRIME


COLOR( AZUL )
IMP ( Impresin en color AZUL ) ;; IMPRIME
COLOR( ROJO )
IMP ( Impresin en color ROJO ) ;; IMPRIME

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

37

Uso de colores

Si el modo de impresin esta definido como GRAFICO la definicin de este color


afecta tambin la impresin de grficos que posteriormente se vern como la
impresin de crculos, lneas y cuadros.

Definicin de encabezados y pie de pgina


El reporteador giro permite definir encabezados y pie para cada una de las
pginas los cuales se mandan llamar automticamente. Dentro de los bloques del
encabezado y el pie se pueden ejecutar cualquier tipo de instrucciones excepto la
declaracin 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
automticamente cuando el reporteador imprima una nueva pgina. 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 terminacin 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 pgina nmero : , 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 definicin del
encabezado ni el pie de pgina.

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

38

Definicin de encabezados y pie de pgina

Tamao de reporte
Todos los reportes por default tienen tamao carta, si desea cambiarlo a un
tamao especifico puede utilizar la instruccin TAMAO_HOJA la cual recibe como
parmetro el largo y ancho respectivamente, esta instruccin se puede utilizar tanto en
reportes grficos como directos. Los valores de largo y ancho se deben especificar en
centmetros donde 100 representa 1 cm.
Esta instruccin debe utilizarse al inicio del reporte antes de hacer cualquier
impresin. Una vez que termine de imprimir una hoja y desee cambiar a la siguiente
debe ejecutar la instruccin AVANZA_HOJA. NOTA: La instruccin AVANZA_HOJA
manda llamar automticamente el encabezado y pie de pgina si es que estos existen.
Ejemplo:

MODO_IMPRESION( GRAFICO )
TAMAO_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 tamao del reporte pero esto solo funciona si el reporte esta
definido como DIRECTO. Las variables COLUMNAS y RENGLONES determinan el
tamao 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

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

39

Definicin de encabezados y pie de pgina

La variable PAGINA retorna la pgina 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 ( Nmero de Pgina : , PAGINA ) ;; IMPRIME
AVANZA_HOJA
IMPRIME
IMP ( Esto se imprime en la segunda hoja ) ;; IMPRIME
IMP ( Nmero de Pgina : , PAGINA ) ;; IMPRIME

Instruccin LEE_INI(seccion,variable,default)
Esta instruccin nos permite leer alguna configuracin especifica del archivo GIRO.INI
del sistema para poder aplicarlo en la ejecucin de algn 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' ) )

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

40

Instruccin ESCRIBE_INI(seccion,variable,default)
Esta instruccin nos permite escribir dentro de una configuracin especifica del archivo
GIRO.INI del sistema para grabar informacin en un parmetro de configuracin
vlido. 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 grfico lo cual permite
utilizar instrucciones para posicionamiento del cursor, impresin de lneas, crculos,
cuadros, etc.
VE_X ( pos )
VE_Y ( pos )
VE_XY ( pos1, pos2 )
Estas instrucciones mueven el cursor a la posicin indicada. Una vez que se
hace la impresin las coordenadas de X y Y se mueven automticamente.
Ejemplo:

MODO_IMPRESION( GRAFICO )
VE_XY( 100, 100 ) ;; IMP ( Posicin 100, 100 ) ;; IMPRIME

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

41

Instrucciones graficas

X_ACTUAL
Y_ACTUAL
Estas instrucciones respectivamente retornan la posicin en X y Y del cursor en
ese momento. A estas instrucciones se les puede asignar valor para cambiar la
posicin 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
parmetros X y Y. Esta instruccin requiere un IMPRIME para enviar el buffer a
impresin.
Ejemplo:

MODO_IMPRESION( GRAFICO )
IMP_XY ( 100, 100, Posicin 100, 100 ) ;; IMPRIME

IMPRIME_REC( X, Y, ANCHO, ALTO )


Imprime un rectngulo en las coordenadas X y Y, de las dimensiones
especificadas en ANCHO y LARGO.

Ejemplo:
Copyright 2003. Todos los derechos reservados. (Copia fiel del original )

42

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 lnea desde la coordenada X1 y Y1 hasta la coordenada X2 y Y2.
Ejemplo:

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

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

43

Instrucciones graficas

IMPRIME_IMAGEN( Imagen, X, Y, ANCHO, ALTO )


Imprime una imagen en la posicin X y Y, de las dimensiones especificadas en
ANCHO y LARGO. Imagen puede ser un valor alfanumrico especificando el nombre
de la imagen deseada la cual debe estar dada de alta en el catlogo de imgenes del
men de configuracin o bien puede ser una variable de tipo alfanumrico
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 instruccin muestra el mensaje enviado como parmetro en un pequeo
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 instruccin 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 instruccin retorna 1 o VERDADERO cuando la
respuesta es si y 0 o FALSO de lo contrario.

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

44

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 hurfanas.

EXCEL ( comando, col, ren, valor )


Con esta instruccin es posible enviar datos a una Hoja de Excel en columna, rengln,
especificadas en la funcin, o inclusive en alguna pagina existente o crear nuevas
hojas dentro del documento.
Se utilizan 4 parmetros en donde el primero:
comando sirve para especificar la instruccin 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
rengln dentro de Excel, y valor es el dato numero o alfanumrico que puede
enviarse.

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

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

45

Excel

EXCEL
EXCEL
EXCEL
EXCEL
EXCEL
EXCEL

(PON_VALOR,
(PON_VALOR,
(PON_VALOR,
(PON_VALOR,
(PON_VALOR,
(PON_VALOR,

1,
2,
3,
1,
2,
3,

1,
1,
1,
2,
2,
2,

HOLA )
COMO )
ESTAS )
500 )
600 )
800 )

Nota:

Al llegar el compilador de giro a la instruccin de EXCEL, este en automtico abrir el


programa de Windows Excel para empezar a trabajar. Si no esta bien configurado, le
marcar un error. Verificar la versin 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 rengln y columna que se le pase como parmetro.

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.

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

46

Excel

CAMBIA_PAGINA
Este comando se aplica cuando se requiere cambiar a otra hoja de Excel del
documento y ya sea leer informacin de ah, o escribir nuevos datos.

AGREGA_PAGINA
Como su nombre lo dice,
para comenzar a escribir.

la funcin agrega una nueva hoja en el documento

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 parmetro de la instruccin
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 instruccin AGREGA_HOJA_PLANTILLA la veremos mas adelante al ver importaciones


de archivos de Excel a Giro.

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

47

Word

IMPRIME_WORD
Esta funcin 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, ddmmm-aaaa, Comentario, )

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

48

Capitulo 5

Tipos de Variables
Existen 3 tipos de variables:
Numricas:
Alfanumricas:
Tabla:

Que pueden ser valores enteros o reales.


Que pueden ser de mximo 255 caracteres de longitud.
Que representan una matriz de n * n.

Las restricciones para asignar el nombre de las variables son las siguientes:
1.-No exceder ms de 20 caracteres.
2.-No tener espacios en blanco.

Declaracin de variables
Las variables se pueden declarar en cualquier momento la nica restriccin 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 Numricas
Para declarar las variables numricas existen dos formas:
1.-Utilizando la instruccin diseada para declarar variables de este tipo:
VAR_N ( _nombre )
2.-Asignando directamente el valor a la variable:

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

49

Declaracin de Variables
Ejemplo:

_nombre := 13.25
_var2
:= 3

Nota:

Para hacer uso de este tipo de declaracin es necesario anteponer el smbolo _ para
indicar al reporteador que la variable es de tipo numrico.

Variables Alfanumricas
Para declarar las variables alfanumricas existen dos formas:
1.-Utilizando la instruccin diseada para declarar variables de este tipo:
Ejemplo:

VAR_A ( $nombre )

2.-Asignando directamente el valor a la variable:


Ejemplo:

$nombre := Variable de tipo alfanumrica

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

50

Declaracin de Variables

Nota:

Para hacer uso de este tipo de declaracin es necesario anteponer el smbolo $ para
indicar al reporteador que la variable es de tipo alfanumrico.

Variables Tipo Tabla


Este tipo de variable solo se puede declarar utilizando la instruccin diseada
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.

Asignacin de Valores a Variables


La asignacin 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 operacin o como
resultado de la llamada a una instruccin de retorna valor.
Estos son algunos ejemplos de asignaciones:

_var1
_var2
$var3
$var4
$var5
_var6
$var7

:=
:=
:=
:=
:=
:=
:=

23.45
_var1 * 5
Variable tipo
$var3 + + Alfanumrico
123
VALOR( $var5 )
.( _var1 )

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

51

Conversin de Variables
Existen solo 2 tipos de conversin de datos ya que en realidad solo se manejan
variables de tipo numrico y alfanumrico debido a que las variables de tipo tabla
almacenan los valores de cada celda de forma alfanumrica.
De alfanumrico a numrico:

Alfanumrico -> Numrico

La instruccin para este tipo de conversin es VALOR la cual recibe como


parmetro la variable o el valor alfanumrico y retorna el valor numrico.
Ejemplo:

_var1 := VALOR( 123.45 )

Nota:

Si el valor enviado como parmetro no corresponde a un valor numrico valido el la


instruccin retorna un 0.

Ejemplo:

_var1 := VALOR ( 123a.45 )

Salida:

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

52

Conversin de Variables

De Numrico a alfanumrico:

Numrico -> Alfanumrico

La instruccin para este tipo de conversin es .( ) la cual recibe como


parmetro la variable o el valor numrico y retorna el valor alfanumrico.
Ejemplo:

$var1 := .( 123.45 )

Manejo de Valores Alfanumricos


LONGITUD( variable )
Esta instruccin retorna la longitud de la variable alfanumrica enviada como
parmetro.

Ejemplo:

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

53

Manejo de Valores Alfanumricos

VAR_A ( $cadena )
$cadena := valor alfanumrico
IMP ( LONGITUD( $cadena ) ) ;; IMPRIME

SUBSTR( cadena, i, f )
Esta instruccin retorna la sub cadena de la cadena enviada como parmetro
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

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

54

Manejo de Valores Alfanumricos

POS( cadena, subcadena )


Esta instruccin retorna un valor numrico de la posicin 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 instruccin elimina de la cadena una subcadena desde el valor de inicio
hasta la longitud del valor tot. Esta instruccin retorna la cadena resultante de la
eliminacin de los caracteres. Ejemplo:

VAR_A( $aux )
$aux := Cadena de ejemplo
IMP ( ELIMINA( $aux, 7, 3 ) )
IMPRIME

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

55

Manejo de Valores Alfanumricos

Salida:

Cadena ejemplo

REEMPLAZA( cad1, cad2, cadena )


Esta instruccin permite hacer el reemplazo de un caracter o una subcadena
dentro de la cadena enviada como parmetro. cad1 representa el la subcadena a
reemplazar y cad2 la subcadena a ser reemplazada. Esta instruccin retorna la cadena
resultante del reemplazo.
Ejemplo:

VAR_A( $aux )
$aux := Cadena de ejemplo
IMP ( REEMPLAZA( e, E, $aux ) )
IMPRIME

Salida:

CadEna dE Ejemplo

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

56

Manejo de Valores Alfanumricos

MAYUSCULAS( cadena )
Esta instruccin recibe como parmetro una cadena y retorna la misma cadena
pero convertida a maysculas.
Ejemplo:

VAR_A( $aux )
$aux := Cadena de ejemplo
IMP ( MAYUSCULAS( $aux ) )
IMPRIME

Salida:

CADENA DE EJEMPLO

QUITA_CARACTER( car, cadena )


Esta instruccin elimina de la cadena el caracter enviado como parmetro.
Ejemplo:

VAR_A( $aux )
$aux := Cadena de ejemplo
IMP ( QUITA_CARACTER( e, $aux ) )
IMPRIME

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

57

Manejo de Valores Alfanumricos

Salida:

Cadna d jmplo

Manejo de Valores Numricos


TRUNCAR( valor )
Esta instruccin trunca el valor enviado como parmetro.
Ejemplo:

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

Salida:

23.00

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

58

Manejo de Valores Numricos

FRAC( valor )
Esta instruccin retorna el valor de la fraccin del valor enviado como
parmetro.
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 informacin, ahorrar espacio, generar grficas 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 alfanumricos por lo que si deseamos
guardar valores numricos tenemos que hacer una conversin.
Existen varias
instrucciones para el manejo de las tablas, vamos analizndolas una por una.

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

59

Manejo de Tablas

PON_VALOR_TABLA( tabla, Col, Ren, Valor )


Esta instruccin 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 rengln 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, rengln 0. Valor corresponde a un dato numrico o alfanumrico este
puede escribirse directamente como cadena o bien una variable. Esta instruccin
sobrescribe el valor que actualmente tenga la celda.
Ejemplo:

VAR_T ( &tabla )
PON_VALOR_TABLA( &tabla, 0, 0, Columna 0, Rengln 0 )
PON_VALOR_TABLA( &tabla, 1, 0, Columna 1, Rengln 0 )

&tabla
Columna 0
Rengln 0

Columna 1
Rengln 0

Hasta aqu hemos insertado datos en el arreglo o tabla,


en ciertas posiciones de
manera manual. Para leer los datos se utiliza la instruccin TRAE_VALOR_TABLA que
veremos a continuacin.

Nota:

Cabe sealar que el VALOR que se inserte con esta instruccin se guarda en formato
alfanumrico en la celda correspondiente. Es decir, para el caso de valores numricos
hay que hacer conversin una vez que se recupere ese dato.

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

60

Manejo de Tablas

TRAE_VALOR_TABLA( tabla, Col, Ren )


Esta instruccin lee el valor que se encuentra en la celda indicada por la
columna y el rengln. Esta instruccin retorna un valor alfanumrico.
Ejemplo:

VAR_T ( &tabla )
PON_VALOR_TABLA( &tabla, 0, 0, Columna 0, Rengln 0 )
PON_VALOR_TABLA( &tabla, 1, 0, Columna 1, Rengln 0 )
IMP ( TRAE_VALOR_TABLA( &tabla, 0, 0 ) ) ;; IMPRIME
IMP ( TRAE_VALOR_TABLA( &tabla, 1, 0 ) ) ;; IMPRIME

Completando el ejemplo anterior y utilizando adems la instruccin IMP, mandamos


llamar los datos guardados en las posiciones de la tabla para presentarlos en pantalla.
Salida:

Columna 0, Rengln 0
Columna 1, Rengln 0

LIMPIA_TABLA ( tabla )
Esta instruccin como su nombre lo dice limpia todas las celdas y las pone en
blanco. Es muy til para reutilizar variables en la misma ejecucin del reporte.

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

61

Manejo de Tablas

AGREGA_VALOR_COL ( tabla, Col, Valor )


Esta instruccin es similar a PON_VALOR_TABLA ya que tambin asigna un
valor a una determinada celda, la diferencia es que a esta instruccin, solo envas la
columna y automticamente la instruccin le busca una celda vaca iniciando del
rengln 0 y asigna el valor a la celda correspondiente.

VAR_T (&tabla )
AGREGA_VALOR_COL(
AGREGA_VALOR_COL(
AGREGA_VALOR_COL(
AGREGA_VALOR_COL(

&tabla,
&tabla,
&tabla,
&tabla,

0,
0,
0,
1,

HOLA )
SALUDOS )
HOLA )
MEXICO )

El grabado en la tabla sera de esta manera:


&tabla
HOLA

MEXICO

SALUDOS
HOLA

Ntese que al ir utilizando esta instruccin 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 idntico al que estemos agregando.
Al cambiar de columna, el
nuevo valor comienza desde la posicin 0 ( cero ) de la misma.

AGREGA_VALOR_REN ( tabla, Ren, Valor )


Esta instruccin es similar a la anterior solo que en esta se especifica el rengln
y la columna corresponde a la celda donde se encuentre vaca.

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

62

Manejo de Tablas

TRAE_INDICE_COL( tabla, col, valor )


Esta instruccin nos ayuda a buscar un valor dentro de la columna especificada,
si el valor se encuentra la instruccin 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 sera el siguiente:


&tabla
HOLA
SALUDOS

MEXICO
A TODOS

HOLA

Esto debido a que TRAE_INDICE_COL busca el valor SALUDOS dentro de la columna


CERO, para la instruccin, el resultado que regresa es UNO (1), que es el rengln
donde esta posicionada la variable; la instruccin AGREGA_VALOR_REN
por
consiguiente encuentra la columna UNO como siguiente para insertar el valor A
TODOS.

TRAE_INDICE_REN( tabla, ren, valor )


Esta instruccin nos ayuda a buscar un valor dentro del rengln especificado, si
el valor se encuentra la instruccin retorna el ndice del rengln y de lo contrario
retorna 1. Funciona de la misma manera que su contraparte TRAE_INDICE_COL que
analizamos en el ejemplo anterior.

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

63

Manejo de Tablas

ASIGNA_VALOR_TABLA( tabla, valor1, valor2, numrico )


Esta instruccin nos sirve para insertar una valor a determinada celda en una
tabla, pero este valor a asignar debe ser de tipo numrico, valor1 y valor2 deben
ser de tipo alfanumrico y representan respectivamente la columna y el rengln en
manera de etiquetas, lo que hace esta instruccin es buscar en la columna 0 el valor1
y en el rengln 0 el valor2, si no encuentra el valor automticamente busca una celda
vaca y ah asigna el valor enviado como parmetro, 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 vera fsicamente de la siguiente manera:
&tabla
/

TOTAL

DEPTO

1234.55

ZONA

500

SISTEMAS

DEPTO

999.77

De esta manera la instruccin se encarga del acomodo de los datos


las etiquetas que nosotros le vamos asignando a los valores, si no
columna y rengln, lo crea y guarda en esa celda la informacin.
simplemente utilizamos la instruccin VALOR_TABLA que veremos a

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

de acuerdo solo a
existe el cruce de
Para leer el dato
continuacin.

64

Manejo de Tablas

VALOR_TABLA ( tabla, valor1, valor2 )


Esta instruccin trae el valor numrico 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,
haramos de la siguiente forma:

para leer los datos que recin guardamos lo

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 sera:

Total DEPTO: 1234.55


Total ZONA: 500
Total SISTEMAS: 999.77

VALOR_TABLA_CADENA ( tabla, valor1, valor2 )


Esta instruccin se maneja igual a la instruccin VALOR_TABLA pero lo que regresa es
la celda de forma alfanumrica.

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

65

Manejo de Tablas

INCREMENTA_TABLA ( tabla, valor1, valor2, numrico )


Esta instruccin permite incrementar el contenido de una celda en forma
numrica 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 instruccin.

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 instruccin 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

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

66

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
01
02

10
11
12

Nota:

En el ejemplo anterior no se imprime la tercera columna ya que solo se especificaron dos


parmetros de columna.

CREA_GRAFICA ( tabla )
Esta instruccin como su nombre lo indica crea una grfica en base al contenido
de la tabla.

Manejo de Tablas

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

67

DEFINE_GRAFICA( tabla, Mayor, Division )


Esta instruccin permite definir el valor mximo de la tabla y las divisiones que
deseamos aparezcan en la grafica. Esta instruccin debe ejecutarse despus de crear
la grfica.

TITULOS_GRAFICA(tabla, Superior, Derecha, Inferior, Izquierda)


Esta instruccin permite definir los ttulos que se muestran en la grfica. Esta
instruccin debe ejecutarse despus de crear la grfica.
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, Grfica de prueba, , , )

Este ejemplo crea una grfica definiendo como valor mximo el 40 y divisiones
de 5 en 5. Finalmente imprime el mensaje en la parte inferior de la ventana de la
grfica.

TRAE_SELECCION( &tabla )
Esta instruccin retorna en una cadena la lista de valores de la columna 0, en la
siguiente forma col1, col2, col3, col4, esta instruccin se utiliza generalmente en la
utilizacin de consultas SQL que posteriormente se analizar. Si la columna 0, rengln
0 es * entonces la instruccin retorna .

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

68

Variables de Ambiente

Variables de Ambiente
Las variables de ambiente determinan la forma de
comportamiento de algunas de las instrucciones del reporteador.

impresin

el

DECIMALES
Como ya se menciono anteriormente, determinan el nmero de decimales a
utilizar al momento de imprimir valores numricos y al momento de hacer operaciones
aritmticas.

COLUMNAS
Determina el nmero de columnas del reporte. Solo se utiliza para definir el
tamao si el reporte es DIRECTO de otra forma solo sirve para determinar la impresin
mediante la instruccin CENTRA.

RENGLONES
Determina el nmero de renglones del reporte. Solo se utiliza si el reporte es
DIRECTO de otra manera no tiene ningn 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 instruccin de FECHA.

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

69

Variables de Ambiente

FORMATO_PESOS
Determina el formato a utilizar al momento de utilizar la instruccin $.

SALIDA
Determina por cual de los dispositivos va a salir el reporte, los dispositivos
vlidos son PANTALLA, IMPRESORA o DISCO.

PAGINA
Esta variable retorna el nmero de la pgina 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 alfanumrico la clave del reporte.

NOMBRE_REPORTE
Esta variable retorna en un valor alfanumrico el nombre del reporte.

FORMATO_BARRAS
Esta variable determina el formato de cdigo de barras a utilizar al momento de
utilizar la instruccin de impresin de cdigo de barras. (Vea la ayuda en lnea para ver
los formatos disponibles).

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

70

Variables de Ambiente

IMPRESION_DIRECTA
Esta variable retorna verdadero o 1 si se trata de un reporte definido como
impresin 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 configuracin es Departamento - > Centro de Costo.

ES_SUPERVISOR
Retorna si el usuario que ejecuta el reporte es supervisor del sistema o no.

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

71

Capitulo 6

Manejo de Ciclos

Ciclos
Los ciclos son muy importantes y facilitan el trabajo, ahorrando tiempo y
espacio en cdigo. En el reporteador giro existen solo dos tipos de ciclos.

Ciclo REPITE
Este tipo de ciclo debe iniciar con la instruccin REPITE y terminar con la
instruccin HASTA seguido de una condicin lgica, esto significa que lo que esta
dentro del bloque del REPITE se va a ejecutar cuando menos una vez y hasta que la
condicin del HASTA sea verdadera.
Dentro de este bloque se puede utilizar cualquier tipo de instrucciones o
asignaciones excepto declaracin de variables.
La condicin lgica del HASTA puede contener varias condiciones lgicas
todas estas encerradas entre parntesis y separadas por un operador lgico.

Nota:

Finalmente todas las condiciones lgicas deben estar encerradas entre parntesis.

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

72

Ciclo REPITE

Ejemplo:

VAR_N ( _num )
DECIMALES := 0
_num := 1
REPITE
_num := _num + 1
IMP( Nmero actual : , _num ) ;; IMPRIME
HASTA(_num > 100 )

Ciclo MIENTRAS
Este tipo de ciclo debe iniciar con la instruccin MIENTRAS seguido de una
condicin lgica y terminar con la instruccin FIN_MIENTRAS, esto significa que lo
que esta dentro del bloque se va a ejecutar siempre y cuando la condicin del
MIENTRAS sea verdadera.
Dentro de este bloque se puede utilizar cualquier tipo de instrucciones o
asignaciones excepto declaracin de variables.
La condicin lgica del MIENTRAS al igual que el REPITE puede contener varias
condiciones lgicas todas estas encerradas entre parntesis y separadas por un
operador lgico.
Ejemplo:

VAR_N ( _num )
_num := 1
MIENTRAS( _num < 100 )
_num := _num + 1
IMP( Nmero actual : , _num ) ;; IMPRIME
FIN_MIENTRAS

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

73

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

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

74

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 situacin. La condicional del reporteador funciona de la
misma manera que cualquier compilador, si se cumple la condicin se ejecuta lo del
primer bloque de lo contrario lo del segundo bloque, la sintaxis de esta instruccin es:

SI ( condicin )
Instrucciones
SI_NO
Instrucciones
FIN_SI

La condicin al igual que la de los ciclos MIENTRAS y REPITE puede tener varias
condiciones separadas por los operadores OR y AND o bien en espaol O e Y.
Finalmente todas las condiciones deben ir encerradas entre parntesis.

Ejemplo:

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

75

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:
FIN_SI
FIN_MIENTRAS

, _aux ) ;; IMPRIME

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 instruccin
excepto la declaracin de variables.

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

76

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 ms fcilmente. La definicin de
una subrutina debe ir indicada por una instruccin de inicio y otra de fin
SUB_RUTINA nombre
FIN_SUB_RUTINA
Todas las instrucciones que estn dentro del bloque se ejecutarn cuando se
mande llamar la subrutina. Se recomienda que el nombre de la subrutina este en
minsculas 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 cdigo en que se desea se ejecute. Dentro del bloque de la subrutina se
puede utilizar cualquier tipo de instrucciones excepto la declaracin de variables. Las
subrutinas tienen una similitud con las variables ya que si an no esta declarada la
subrutina no podemos hacer referencia a ella an cuando esta se encuentre definida
ms abajo. Dentro de una subrutina se puede a su vez mandar llamar otra subrutina.

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

77

Uso de SubRutinas

Ejemplo:

VAR_N (_var )
VAR_N (_var2)
VAR_N (_total)
_var := 100

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

_var2 )
;; IMPRIME
_var2 * 0.15 ) ;; IMPRIME
)
_total ) ;; IMPRIME
30 ) )
;; IMPRIME
30 ) )
;; IMPRIME

;; IMPRIME
;; IMPRIME

;; IMPRIME
;; IMPRIME

Salida:

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

78

Uso de SubRutinas

DEPARTAMENTO DE COMPRAS
TOTAL DE COMPRAS: 1200.00
SUBTOTAL
IVA
TOTAL

: 1200.00
: 180.00
: 1380.00
******************************
******************************

DEPARTAMENTO DE VENTAS
TOTAL DE VENTAS: 500.00
SUBTOTAL
IVA
TOTAL

: 500.00
: 75.00
: 575.00
******************************
******************************

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

79

Capitulo 9

Manejo de Parmetros

Parmetros Generales
El reporteador giro permite pedir diferentes tipos de parmetros de manera que
podamos emitir el reporte de diferentes maneras de acuerdo a los parmetros
seleccionados.

NUEVO_PARAMETRO ( Etiqueta, default, variable )


Este tipo de parmetro es de captura libre lo que significa que el parmetro se
captura en una caja de edicin sin lmite de longitud. El primer parmetro 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
parmetro corresponde al valor por omisin este valor debe ser un alfanumrico y
finalmente la variable corresponde a la variable donde se va almacenar el resultado de
la seleccin. Esta variable se declara automticamente siempre y cuando la ejecucin
del parmetro sea en el nivel 0 o sea fuera de cualquier bloque. La variable debe ser
de tipo numrico o alfanumrico para definir el tipo es necesario anteponer $ para
variable alfanumrica o _ para valores de tipo numrico.

Nota:

Si no antepone ninguno de los caracteres el compilador marcar variable indefinida a


menos que con anterioridad declare la variable.

Ejemplo:
Copyright 2003. Todos los derechos reservados. (Copia fiel del original )

80

Parmetros 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
parmetros tanto numrico como alfanumrico, al final de la declaracin de
parmetros se utiliza la instruccin LEE_PARAMETROS que crea la ventana y muestra
los parmetros definidos.

Parmetros con uso de Check Box


NUEVO_PARAMETRO_CHEQ ( Etiqueta, Etiqueta2, variable )
Este tipo de parmetro solo puede tener dos valores VERDADERO o FALSO. Este
tipo de parmetro 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
numrica ya que de lo contrario el compilador marcar un error.
Ejemplo:

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

81

Parmetros 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

Parmetros de Seleccin
NUEVO_PARAMETRO_SEL( Etiqueta, Valor1/Valor2/Valor3, var)

Este tipo de parmetro permite seleccionar solo un valor de entre varios, el


segundo parmetro define la lista de posibles opciones cada una de ellas separada por
/, la variable var puede ser numrica o alfanumrica, si es numrica 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 alfanumrico 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

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

82

Parmetros de Seleccin

Si en ambas seleccionamos el valor 2 la salida seria:

1
Valor2

Parmetros de Salida
NUEVO_PARAMETRO_SAL(Salida,PANTALLA/DISCO, var )
Este tipo de parmetro 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 botn con un dibujo alusivo a la

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

83

Parmetros de Salida

opcin, si desea otro tipo de salida diferente a este el reporteador mostrar otro dibujo
estndar. La variable para este tipo de salida se recomienda que sea de tipo
alfanumrico. Una vez que se lean los parmetros el valor retornado se debe asignar a
la variable SALIDA que es la que determina el dispositivo por medio del cual se enva
el reporte.
Ejemplo:

NUEVO_PARAMETRO_SAL( Salida, PANTALLA/IMPRESORA, $salida )


LEE_PARAMETROS
SALIDA := $salida

Parmetros de Referencia a Tabla


NUEVO_PARAMETRO_TAB ( Etiqueta, base/indice/titulo, var )
Este tipo de parmetro se utiliza cuando se quiere capturar un valor vlido de
una base de datos, adems que muestra un pequeo botn al lado derecho de la
captura el cual ayuda a ver la lista de valores vlidos 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
Copyright 2003. Todos los derechos reservados. (Copia fiel del original )

84

Parmetros de Referencia a Tabla

valores vlidos, PARAMn este parmetro es opcional y se utiliza para relacionar una
campo con otro anterior mediante el indice2. Este tipo de parmetro puede utilizar de
tipo alfanumrico y tabla, si se trata de alfanumrico 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 rengln es el que varia, donde el rengln 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 parmetros permite seleccionar un


solo empleado debido a que la variable es de tipo alfanumrica. En la segunda toma de
parmetros permite seleccionar uno o varios registros debido a que es una tabla, la
instruccin TRAE_SELECCION retorna la lista de valores seleccionados en una
cadena, en caso de haber seleccionado todos entonces retorna .

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

85

Parmetros de Referencia a Tabla

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

86

Parmetros Fecha
NUEVO_PARAMETRO_FEC( Fecha, default, _fecha )

Este tipo de parmetro se utiliza para capturar valores de tipo fecha, donde el
segundo parmetro es la fecha por default a mostrar la cual debe estar en formato
alfanumrico, si esta se deja en blanco por omisin pone la fecha del da de hoy. Si
desea especificar una fecha tiene que ser en el formato DDMMAA. El parmetro debe
ser de tipo numrico 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

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

87

Parmetros Fecha

Ejercicio:
Hacer un reporte donde en base a la fecha de hoy pida como parmetro el
nmero del mes como valor por default y en base al mes seleccionado imprimir la
fecha del primer da 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 da del mes y el
ltimo.

Borra Parmetros
BORRA_PARAMETROS
Esta instruccin se utiliza para eliminar del buffer los parmetros antes
utilizados esto con la finalidad de que en la ventana que se despliegan los parmetros
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 peticin de parmetros en dos ocasiones donde en la


primera ocasin se pide solo la salida y en la segunda solo la fecha, si omitiramos la
instruccin de BORRA_PARAMETROS tambin se pediran en dos ocasiones solo que en
la primera ocasin se pide solo la salida y en la segunda se vuelve a pedir la salida y la
fecha.

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

88

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 instruccin abre la base de datos especificada como parmetro 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 tambin 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 an esta cerrada que automticamente la abra pero se recomienda
que siempre utilice esta instruccin

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

89

Manejo de una Base de Datos

CIERRA_BASE( base )
Esta instruccin es la operacin 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 terminacin sea anormal cierra todas las bases de datos abiertas por lo que
esta instruccin 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 instruccin mueve el apuntador de registro al siguiente registro de la tabla.
Si la tabla se encuentra en el ltimo registro entonces la instruccin no hace nada.

REGISTRO_ANTERIOR( base )
Esta instruccin es la operacin inversa de la anterior ya que mueve el
apuntador un registro antes. Al igual que la instruccin anterior si esta se encuentra es
el primer registro y se ejecuta no genera ningn resultado.

PRIMER_REGISTRO( base )
Esta instruccin mueve el apuntador de registro al inicio de la base. Por omisin
al abrir una base de datos se coloca en el inicio de la base pero se recomienda que
despus de abrir la base se ejecute esta instruccin para asegurarnos resetear el
apuntador al inicio.

ULTIMO_REGISTRO( base )
Esta instruccin es la operacin contraria a la anterior ya que mueve el
apuntador al ltimo registro de la tabla.

FIN_BASE( base )
Esta instruccin 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.

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

90

Manejo de una Base de Datos

INICIO_BASE( base )
Esta instruccin 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
botn 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 automticamente
escriba la sintaxis del campo deseado hago doble click en el campo deseado.

Con lo anterior antes visto podemos hacer un pequeo programa que recorra
una base de datos e imprima su contenido.

Ejemplo:

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

91

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 instruccin 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 habra la necesidad de aplicar una condicin 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 podramos hacer la bsqueda especificando solo el valor del
primer campo llave o si queremos la bsqueda exacta enviar el valor de todos los
campos llave. Esta funcin retorna verdadero si se encuentra el registro deseado y
falso de lo contrario.

Ejemplo:

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

92

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 bsqueda es directa, entonces si existe la clave 001
en la tabla EMPPRIN la instruccin retorna verdadero y mueve el apuntador de registro
a la posicin correspondiente. Note que dentro de la condicin del si no se hace la
comparacin contra verdadero ya que como la instruccin retorna 1 o 0 entonces el
compilador interpreta el 1 como verdadero el resultado de la condicin, esto sera
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 instruccin es similar a la de TRAE_REGISTRO, la diferencia es que esta
instruccin se le indica que campos utilizar para la bsqueda as como el orden.

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

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

93

Relaciones de una Base de Datos

Nota:

La funcin OPCIONES_LOCALIZA nos define los parmetros de busqueda de los registros


especificados, puede ser PARCIAL, MAYUSCULAS, la combinacin 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
instruccin la cual retorna el registro que sea vigente a la fecha enviada como
parmetro. Esta instruccin se utiliza para tablas como la de salarios mnimos o la de
cuotas de pago al seguro social. Al igual que la instruccin anterior esta retorna
verdadero si la bsqueda es exitosa de lo contrario retorna falso.
Ejemplo:

FORMATO_PESOS := 2
ABRE_BASE( MINIMO )
SI ( TRAE_REGISTRO_VIG( MINIMO, FECHA_HOY ) )
IMP ( Salario mnimo DF al da de hoy : , $( MINIMO:MINIMO A ) )
SI_NO
IMP ( No hay cuotas vigentes a la fecha de hoy)
FIN_SI
IMPRIME

TOTAL_REGISTROS( base )
Esta instruccin retorna el nmero de registros que posee la tabla enviada como
parmetro.
Ejemplo:

DECIMALES := 0
ABRE_BASE( EMPPRIN )
IMP ( El nmero de registros de la tabla de empleados es de : )
IMP ( TOTAL_REGISTROS( tabla ) ) ;; IMPRIME

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

94

Relaciones de una Base de Datos

MUESTRA_AVANCE( base, mensaje )


Esta instruccin 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 tambin unos pequeos 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 instruccin 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.

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

95

Relaciones de una Base de Datos

USA_ARCHIVO( padre, hijo, indice )


Esta instruccin permite establecer una relacin entre una tabla padre y una
hija mediante un ndice, generalmente se utiliza entre la tabla principal de trabajadores
y sus tablas relacionadas. Una solucin 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 solucin pero si nos damos cuenta estamos
recorriendo la tabla de sueldos n veces donde n es el nmero de empleados y eso hace
el reporte de una complejidad de n*n. Este reporte con unos 100 trabajadores tardara
aproximadamente unos 40 Seg y entre mas trabajadores existan esto se disparara en
forma exponencial.
La instruccin USA_ARCHIVO nos ayuda a resolver este tipo de problemas y
adems de facilitar el trabajo lo hace ms veloz. El siguiente es el mismo ejemplo pero
utilizando la instruccin USA_ARCHIVO.

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

96

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 instruccin 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
automticamente al cambiar de registro en la tabla EMPPRIN, por esta razn 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
nmero de trabajadores el incremento siempre va a ser de forma lineal. Este
reporte tardara 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 modificacin de registros existen instrucciones para agregar, borrar, y
grabar registros, no existe instruccin para modificar ya que para esto basta solo con
hacer la asignacin de un valor a un campo y posteriormente grabar el registro.

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

97

Operaciones con una Base de Datos

AGREGA_REGISTRO( base )
Esta instruccin pone la tabla en modo de insercin y deja los campos en blanco
para iniciar con la asignacin de valores. Al terminar de asignar los valores es
necesario confirmar la insercin con la instruccin
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 terminacin anormal del reporte. Para esto la solucin sera 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 razn es por la que no existe instruccin para modificar ya que
esto es directo.

BORRA_REGISTRO( base )
Esta instruccin borra el registro al que hace referencia el apuntador de
registro. Hay que tener mucho cuidado con esta instruccin 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.

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

98

Operaciones con una Base de Datos


Ejercicio:
Eliminar todos los registros de sueldo de un trabajador.

EDITA_TABLA( base )
Esta instruccin permite editar cualquier tabla del sistema en el formato
estndar de catlogo, desde esta ventana podr agregar, modificar y borrar registros.

IMPRIME_BASE( base, col1, col2, col3 )


Esta instruccin imprime el contenido de la base de datos en las columnas
especificadas, esta instruccin 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 cdigo 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 informacin necesaria
para la ejecucin de nuestro reporte.

ABRE_BASE_SQL( SERVIDOR\BASE\TABLA )
En esta instruccin, el primer parmetro 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 parmetro es la Base de datos
especifica y como tercer valor, tenemos que indicarle la tabla fsica en donde est la
informacin. Un ejemplo podra 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

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

99

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 sesin Supervisor_giro a la seccin 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 instruccin 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 parmetro el SERVIDOR y la BASE en la cual se encuentra el
SP, como segundo parmetro se especifica el nombre del stored procedure que se
desee ejecutar y por ultimo y de manera opcional se mandan alguna variable o
parmetro necesario para la ejecucin 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

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

100

Consultas SQL

CONSULTAS SQL
Las consultas de SQL en el reporteador son sumamente importantes ya que la
gran mayora de reportes los utilizan debido a que ahorran tiempo de ejecucin y
facilitan la programacin 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
bsicas 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
instruccin 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 instruccin selecciona todos los campo, la
segunda solo el campo de clave y fecha de ingreso, y la tercera hace una
concatenacin 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 instruccin 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

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

101

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 instruccin 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 instruccin WHERE puede utilizar variables que an 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 instruccin 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 instruccin DESC despus 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 tambin 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 instruccin 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 )

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

102

Consultas SQL
La instruccin CREA_CONSULTA del ejemplo anterior asigna la consulta
especificada a una tabla llamada EMPPRIN, hasta este momento an 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 parmetros de una consulta se utiliza la instruccin
PARAMETRO_SQL la cual lleva como parmetros la consulta, el parmetro 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

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

103

Consultas SQL

El ejemplo anterior utiliza un parmetro llamado _fech el cual posteriormente


se reemplaza por la fecha de da, por lo que la consulta se crea con los trabajadores
que su fecha de ingreso es menor a la fecha del sistema.

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

104

Capitulo 11

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

Vigencia de Trabajadores
ES_VIGENTE( fecha )
Esta instruccin retorna VERDADERO si el trabajador actual es vigente a la
fecha enviada como parmetro, de lo contrario retorna FALSO.

FUE_VIGENTE( fecha1, fecha2 )


Esta instruccin es similar a la anterior solo que esta recibe 2 fechas, la inicial y
la final, retorna los das que fue vigente en el rango de fechas de lo contrario retorna
0.

FUE_VIGENTE_IMSS( fecha1, fecha2 )


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

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

105

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 parmetros.

TRAE_DSP( tipo, fecha )


Esta instruccin retorna la clave del departamento, puesto o sucursal
dependiendo del tipo enviado como parmetro. Si la empresa esta definida como Dep.
 C.C. entonces en lugar del departamento retorna el C.C. Esta instruccin retorna el
registro vigente a la fecha enviada como parmetro.
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 da de hoy es : , $desc ) ;; IMPRIME

TRAE_MOV_FECHA( fecha )
Esta instruccin busca el movimiento de salario vigente a la fecha enviada como
parmetro y lo pone como registro actual en la base de sueldos.

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

106

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 funcin retorna el nmero 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 funcin retorna el nmero 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

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

107

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 funcin retorna el nmero 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 funcin retorna el numero de retardos que tuvo el trabajador en el rango
de fecha especificado.

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

108

Ejemplo:

_ret:=0
ABRE_BASE ( EMPPRIN )
PRIMER_REGISTRO ( EMPPRIN )
MIENTRAS ( FIN_BASE ( EMPPRIN ) = FALSO )
_ret := TRAE_RETARDOS( FECHA_HOY-30, FECHA_HOY)
IMP ( Nmero de retardos en los 30 das 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 das pasados :', _ret )
IMPRIME
SIGUIENTE_REGISTRO('EMPPRIN')
FIN_MIENTRAS

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


Esta funcin retorna los das inhbiles en el periodo especificado como
parmetro y que correspondan al calendario Cal. Los das inhbiles se consideran los
das festivos como los de descanso. Nota: Si Desc1 y Desc2 son cero entonces toma
del calendario los das de descanso.
Vacaciones

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

109

Ejemplo:

ABRE_BASE ( 'EMPPRIN' )
PRIMER_REGISTRO ( 'EMPPRIN' )
MIENTRAS ( FIN_BASE ( 'EMPPRIN' ) = FALSO )
IMP ( 'Das inhbiles de hoy en 30 : ' )
IMP ( DIAS_INHABILES( FECHA_HOY, FECHA_HOY+30,
IMPRIME
SIGUIENTE_REGISTRO('EMPPRIN')
FIN_MIENTRAS

'EMPPRIN':'CALENDARIO', 0, 0 ))

SDO_VACACIONAL_DIAS(Fecha)
Esta funcin retorna los das de saldo vacacional a la fecha especificada. Este
saldo depende de los parmetros definidos en la opcin de configuracin 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 das al da de hoy :', _sdo ) ;; IMPRIME
SIGUIENTE_REGISTRO('EMPPRIN')
FIN_MIENTRAS

SDO_VACACIONAL_PRIMA(Fecha)
Esta funcin retorna la prima de saldo vacacional a la fecha especificada. Este
saldo depende de los parmetros definidos en la opcin de configuracin de
vacaciones.
Vacaciones

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

110

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 da de hoy :', _sdo ) ;; IMPRIME
SIGUIENTE_REGISTRO('EMPPRIN')
FIN_MIENTRAS

SDO_VACACIONAL_X_PAGAR(Fecha)
Esta funcin retorna los das de saldo vacacional por pagar a la fecha
especificada. Este saldo depende de los parmetros definidos en la opcin de
configuracin de vacaciones.

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

111

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 importacin y exportacin
de la base de datos. Generalmente estas instrucciones se utilizan para leer informacin
e insertarla en la base de datos ya que para la exportacin 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 utilizacin de las instrucciones es el siguiente:

SALIDA_REPORTE ( Path )
Esta instruccin se utiliza cuando se desea exportar informacin 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 )

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

112

Instrucciones para Manejo de Archivos de texto

CREA_BASE_TXT ( Tabla, Archivo, Tipo )


Esta instruccin 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 instruccin 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 numricos 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 instruccin 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 edicin 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 instruccin ordena la Tabla de acuerdo al campo seleccionado.

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

113

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 instruccin solo va ha ser ejecutada si en la ruta que se seale 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 instruccin nos permite verificar si existe determinado archivo dentro de algn
directorio especfico. En el parmetro archivo le indicamos a la funcin la ruta en
donde posiblemente se localiza el documento.

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

114

Instrucciones para Manejo de Archivos de Excel

Ejemplo:

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


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

La instruccin retorna un 1 si el archivo existe y 0 en caso contrario.


BORRA_ARCHIVO nos permite eliminar ese archivo del directorio.

La funcin

IMPORTACION DESDE UN ARCHIVO DE EXCEL


Hasta este momento hemos visto como hacer la importacin de informacin a Giro
desde un archivo de texto plano.
A continuacin se mostrar como hacer una
importacin desde un formato de Excel.
Supongamos que tenemos el archivo siguiente:
C:\GIRO.

Altas.xls
clave
nombre
0001
IKER

altas.xls

dentro de la carpeta:

rfc
DISI770829QK0

Para realizar la carga de informacin se requerir de usar las siguientes instrucciones:

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

115

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
instruccin
EXCEL
con
el
parmetro:
AGREGA_HOJA_PLANTILLA, la cual crea una copia de nuestro archivo y lo prepara
para leerlo por Giro.
Se utiliza el parmetro 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 das
despus a la fecha de su ltima modificacin.

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

116

Capitulo 13

Base de Datos de Nmina


Como abrir un perodo de Nmina
En giro es posible tener un nmero indefinido de tipos de nmina 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
nmina apuntando al registro del tipo de nmina deseado y la de periodos haciendo
referencia al periodo actual. Finalmente es necesario establecer la relacin entre la
base de datos del empleado y la de nmina mediante la instruccin 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 relacin el sistema abre el periodo de nmina indicado y


se abre dos tablas mas CONCEPTO y NOMINA. La tabla de CONCEPTO contiene el
Copyright 2003. Todos los derechos reservados. (Copia fiel del original )

117

Como abrir un perodo de Nmina

catlogo de conceptos del periodo abierto y la tabla de NOMINA hace referencia a cada
uno de los registros del kardex de nmina 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 nmina el sistema automticamente al
cambiar de empleado pone como activo su kardex de nmina y se puede hacer
referencia a las siguientes Instrucciones.

Capturas de Nmina
Para comprender la referencia que se hace cuando se mencionan capturas de nmina y
totales de nmina, es necesario enfatizar que en Giro cada tipo de nomina dado de
alta en el sistema, llmense nominas Semanales, Quincenales, Mensuales, etc., tiene
su catlogo propio de periodos de nmina, que es el lugar donde se calcula y se
guardan los montos a pagar al empleado.
Cada periodo de Nmina tiene sus propias frmulas con las cuales se hace posible el
clculo de la misma; cada vez que se cierra una nmina -proceso que se efecta para
pasar al siguiente periodo- las frmulas se copian en automtico. Para entrar al
cdigo de estos periodos se debe entrar al men:

Catlogos>de Nmina>Conceptos

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

118

Capturas de Nmina

Dentro del catlogo se da doble clic en cualquier concepto


ventana:

y aparece la siguiente

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 seccin 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 sera la captura 3 CAP3.

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

119

Capturas de Nmina

Si entramos al krdex de capturas de nomina de un trabajador, y seleccionamos el


concepto de sueldo podremos ver la siguiente ventana:

Vemos las capturas que se haban configurado en el catlogo 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 Nmina 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

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

120

Capturas de Nmina

TOTAL( clave )
Es similar a las anteriores solo que esta hace referencia al total del concepto.
Con esta instruccin podemos hacer uso del monto calculado en el proceso de la
nmina que es en si, el que se despliega en la mayora 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 alfanumricos.
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

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

121

Instrucciones Especiales
PON_TOTAL_0
Esta instruccin pone el TOTAL de todos los conceptos del kardex del empleado
seleccionado en 0.

PON_CAPTURAS_0
Esta instruccin pone las capturas CAP1, CAP2, CAP3 de todos los conceptos del
Krdex del empleado seleccionado en 0.

Estas dos instrucciones hacen cambios en el kardex de nmina del empleado pero
estos cambios no toman efecto hasta que se hace el grabado de la base de nmina.

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 instruccin retorna verdadero si el concepto al que hacemos referencia si
existe dentro del kardex del empleado.

CAPTURA_CONCEPTO( CONCEPTO )
Esta instruccin crea el concepto dentro del kardex del empleado para
posteriormente poder asignar valores a sus capturas.

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

122

Kardex de Nmina

Krdex de Nmina
Los kardex de nmina son tiles para llevar subtotales. Los kardex son en si
tablas donde se almacena los conceptos y totales de los mismos. Por omisin siempre
existe un kardex creado que es el GENERAL que implcitamente se utiliza con cada
trabajador. Para crear un kardex se utiliza la siguiente instruccin.

CREA_KARDEX( NOMBRE KARDEX )


Una vez creado el kardex podemos almacenar informacin dentro del mismo,
para esto se utiliza la instruccin :

ACUMULA_TOTALES( NOMBRE KARDEX )


Ya teniendo almacenada la informacin en el kardex y deseemos hacer
referencia al contenido es necesario poner como activo el kardex, para esto se utiliza la
instruccin:

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 informacin 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 instruccin que pasa la informacin 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 nmero de caracteres a contemplar para las cantidades.

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

123

Kardex de Nmina
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'
'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

COL(10),

'EMPPRIN':'NOMBREP'

'

'

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

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

124

Kardex de Nmina

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

TOTAL_PERCEPCIONES
Esta instruccin retorna el total de percepciones hasta ese momento en el
kardex actual.

TOTAL_DEDUCCIONES
Esta instruccin 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 Nmina
Solo existen dos instrucciones para hacer referencia a los acumulados, pero
para esto es necesario que establezca la relacin entre el archivo de acumulados y la
base de empleados utilizando la instruccin USA_ARCHIVO.

ACUM_MENSUAL( Mes, CONCEPTO )

Esta instruccin retorna el acumulado del concepto en el mes especificado, los


meses se deben especificar de la siguiente manera:
Copyright 2003. Todos los derechos reservados. (Copia fiel del original )

125

Acumulados de Nmina

ENE, FEB, MAR, ABR, MAY, JUN, JUL, AGO, SEP, OCT, NOV, DIC.
Una variante que tiene esta instruccin es que Mes puede ser tambin :
BIMESTRE1,
BIMESTRE2,
BIMESTRE3,
BIMESTRE4,
BIMESTRE6, SEMESTRE1, SEMESTRE2, ANUAL, ESPECIAL,
AGUINALDO.

BIMESTRE5,
FINIQUITO,

Con esto la instruccin retorna el acumulado especificado. La otra funcin 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

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

126

Acumulados de Nmina

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 Condicin,
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.

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

127

Potrebbero piacerti anche