P. 1
Curso SQR v1.2

Curso SQR v1.2

5.0

|Views: 1.304|Likes:
Publicado porFrancisco De León

More info:

Published by: Francisco De León on Feb 23, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

02/18/2013

pdf

text

original

Sections

  • Un programa SQR simple
  • Programa ex1a.sqr
  • Procedimiento para crear y correr un programa SQR
  • Salida del SQR
  • Resumen
  • Los encabezados y pies de página
  • Program ex2a.sqr
  • Salida del programa ex2a.sqr
  • Obteniendo datos de una base de datos
  • Program ex3a.sqr
  • Salida del programa ex3a.sqr
  • La sentencia SELECT de SQR
  • Sintaxis de la instrucción SELECT
  • Posicionamiento de datos
  • Variables de Columnas
  • Lógica de rupturas
  • Program ex5a.sqr
  • Salida del programa ex5a.sqr
  • Utilizando ON-BREAK
  • Program ex5b.sqr
  • Saltar líneas entre grupos
  • La organización de múltiples columnas de ruptura
  • Program ex5c.sqr
  • Salida del programa ex5c.sqr
  • Mejoras al procesamiento de rupturas
  • Program ex5d.sqr
  • Salida del programa ex5d.sqr
  • Manejo de saltos de página
  • Impresión de la Fecha
  • La obtención de los totales
  • Procedimientos de ruptura con BEFORE y AFTER
  • Comprensión de la Orden de Eventos
  • Program ex5e.sqr
  • Salida del programa ex5e.sqr
  • Controlar los saltos de página en columnas con múltiples columnas ON-BREAK
  • Guardar un valor cuando ocurre una ruptura
  • Restricciones y limitaciones de ON-BREAK
  • Anexos
  • Funciones
  • Relacionadas con archivos
  • Funciones numéricas
  • Funciones misceláneas
  • Variables reservadas
  • Definic.sqr
  • Log.sqr
  • Begin-Procedure Inicializar_Programa
  • Begin-Procedure Fecha_Proceso_Hoy
  • Begin-Procedure Validar_Dependencia
  • Begin-Procedure Verificar_Tiene_Padre
  • Begin-Procedure Validar_Estatus_Padre
  • Begin-Procedure Analizar_Repeticion
  • Begin-Procedure Analizar_Una_Repeticion
  • Begin-Procedure Validar_Fecha ($fecha,:#flag)
  • Begin-Procedure Error_Fecha
  • Begin-Procedure Inicializar_Corrida
  • Begin-Procedure Clave_Duplicada
  • Begin-Procedure Obtener_Parametros
  • Begin-Procedure Asignar_Parametros
  • Begin-Procedure Finalizar_Corrida
  • Begin-Procedure Abortar
  • Begin-Procedure Actualizar_Reg_Proc
  • Begin-Procedure Ejecutar_Actualizacion
  • Begin-Procedure ParamN (#indice,:#variable,$tabla,$cond,$mensaje)
  • Begin-Procedure ParamS (#indice,:$variable,$tabla,$cond,$mensaje)
  • Begin-Procedure Verificar_Existencia ($tablas,$condicion,$mensaje)
  • Begin-Procedure Comparar_Fechas ($fecha_i,$fecha_f,:#flag)
  • Begin-Procedure Centrar_Show ($mensaje,#fila)
  • Begin-Procedure Finalizar_Programa
  • Begin-Procedure Nombre_Programa_Fuente (:$nombre)
  • Begin-Procedure Generar_Listado (#oficina)
  • Begin-Procedure Generar_Listado2 (#oficina,#producto)
  • Begin-Procedure Before_Pagina
  • Begin-Procedure After_Pagina

Manual SQR

Manual Técnico de Aprendizaje Elaborado por Business & Solutions Consulting, S. A.

Todos los derechos de propiedad intelectual del sistema Bancario “COBIS” son de la empresa Macosa de Ecuador.

Tabla de Contenido
Un programa SQR simple .............................................................................................................................. 1 Programa ex1a.sqr ................................................................................................................................ 1 Procedimiento para crear y correr un programa SQR .............................................................................. 1 Salida del SQR ........................................................................................................................................... 1 Resumen ................................................................................................................................................... 2 Los encabezados y pies de página ................................................................................................................ 3 Program ex2a.sqr .................................................................................................................................. 4 Salida del programa ex2a.sqr ................................................................................................................ 4 Resumen ................................................................................................................................................... 5 Obteniendo datos de una base de datos ...................................................................................................... 6 Program ex3a.sqr .................................................................................................................................. 6 Salida del programa ex3a.sqr ................................................................................................................ 7 La sentencia SELECT de SQR ..................................................................................................................... 8 Sintaxis de la instrucción SELECT .............................................................................................................. 8 Posicionamiento de datos......................................................................................................................... 9 Resumen ................................................................................................................................................... 9 Variables de Columnas................................................................................................................................ 10 Resumen ................................................................................................................................................. 11 Lógica de rupturas....................................................................................................................................... 13 Program ex5a.sqr .................................................................................................................................... 13 Salida del programa ex5a.sqr.................................................................................................................. 14 Utilizando ON-BREAK .............................................................................................................................. 14 Program ex5b.sqr .................................................................................................................................... 15 Salida del programa ex5a.sqr.................................................................................................................. 15 Saltar líneas entre grupos ....................................................................................................................... 15 La organización de múltiples columnas de ruptura ................................................................................ 16 Program ex5c.sqr .................................................................................................................................... 17 Salida del programa ex5c.sqr .................................................................................................................. 17 Mejoras al procesamiento de rupturas. ................................................................................................ 18 Program ex5d.sqr .................................................................................................................................... 18 Salida del programa ex5d.sqr ................................................................................................................. 20

Manejo de saltos de página .................................................................................................................... 22 Impresión de la Fecha ............................................................................................................................. 22 La obtención de los totales ..................................................................................................................... 22 Guiones y guiones bajos ......................................................................................................................... 23 Procedimientos de ruptura con BEFORE y AFTER. .................................................................................. 24 Comprensión de la Orden de Eventos .................................................................................................... 24 Program ex5e.sqr .................................................................................................................................... 25 Salida del programa ex5e.sqr.................................................................................................................. 27 Controlar los saltos de página en columnas con múltiples columnas ON-BREAK .................................. 29 Guardar un valor cuando ocurre una ruptura ........................................................................................ 30 Restricciones y limitaciones de ON-BREAK ............................................................................................. 30 Resumen ................................................................................................................................................. 30 Anexos......................................................................................................................................................... 31 Funciones ................................................................................................................................................ 31 Relacionadas con archivos .................................................................................................................. 31 Funciones numéricas .......................................................................................................................... 31 Funciones misceláneas........................................................................................................................ 31 Variables reservadas ............................................................................................................................... 31 Definic.sqr ............................................................................................................................................... 32 Log.sqr ..................................................................................................................................................... 33 Begin-Procedure Inicializar_Programa................................................................................................ 33 Begin-Procedure Fecha_Proceso_Hoy ................................................................................................ 34 Begin-Procedure Validar_Dependencia .............................................................................................. 34 Begin-Procedure Verificar_Tiene_Padre............................................................................................. 35 Begin-Procedure Validar_Estatus_Padre ............................................................................................ 35 Begin-Procedure Analizar_Repeticion ................................................................................................ 36 Begin-Procedure Analizar_Una_Repeticion ........................................................................................ 36 Begin-Procedure Validar_Fecha ($fecha,:#flag) ................................................................................. 36 Begin-Procedure Error_Fecha ............................................................................................................. 37 Begin-Procedure Inicializar_Corrida ................................................................................................... 37 Begin-Procedure Clave_Duplicada ...................................................................................................... 38 Begin-Procedure Obtener_Parametros .............................................................................................. 38

Begin-Procedure Asignar_Parametros ................................................................................................ 38 Begin-Procedure Finalizar_Corrida ..................................................................................................... 39 Begin-Procedure Abortar .................................................................................................................... 40 Begin-Procedure Actualizar_Reg_Proc ............................................................................................... 40 Begin-Procedure Ejecutar_Actualizacion ............................................................................................ 41 Begin-Procedure ParamN (#indice,:#variable,$tabla,$cond,$mensaje) ............................................. 41 Begin-Procedure ParamS (#indice,:$variable,$tabla,$cond,$mensaje) ............................................. 41 Begin-Procedure Verificar_Existencia ($tablas,$condicion,$mensaje) .............................................. 41 Begin-Procedure Comparar_Fechas ($fecha_i,$fecha_f,:#flag) ......................................................... 42 Begin-Procedure Centrar_Show ($mensaje,#fila) .............................................................................. 42 Begin-Procedure Finalizar_Programa ................................................................................................. 42 Begin-Procedure Nombre_Programa_Fuente (:$nombre) ................................................................. 42 Begin-Procedure Generar_Listado (#oficina)...................................................................................... 43 Begin-Procedure Generar_Listado2 (#oficina,#producto) .................................................................. 43 Begin-Procedure Before_Pagina ......................................................................................................... 44 Begin-Procedure After_Pagina............................................................................................................ 44

Los archivos de salida deben aparecer tan pronto como ha terminado su programa de funcionamiento.. Para correr el programa. SQR es invocada desde la línea de comandos con "sqrw".’ (1.lis” en lugar de “. Normalmente la salida del programa tendrá el mismo nombre que el programa fuente.] Salida del SQR SQR normalmente coloca a la salida de los archivos de programa SQR en el directorio de la el que se ejecute el programa. Programa ex1a. La sintaxis siguiente se muestra cómo ejecutar SQR de la línea de comandos: [sqr o sqrw] [] programa [conectividad] [banderas . El archivo de salida tendrá el mismo nombre de archivo SQR que el archivo que lo creó. empezando por BEGIN-PROGRAM y termina con 1 .sqr”. Eche una mirada al programa de ejemplo “ex1a. incluya "sqr" o "sqrw". pero su extensión será “. Este programa consiste en tres líneas de código.. SQR es invocada desde la línea de comandos con "sqr". En los sistemas UNIX.] [args .Un programa SQR simple En este capítulo aprenderá tres comandos de SQR:    Begin-Program End-Program Print El primer ejemplo es el programa SQR más simple posible.. todo en una sola línea.sqr”.sqr begin-program print ’Hola Mundo. grabe el archivo como “ex1a.sqr”. Luego guarde el programa con el nombre deseado y la extensión “.. Solamente imprime una cadena de caracteres.] [@ archivo . si está ingresando la información de la línea de comandos.sqr” Para este ejemplo. el nombre del programa SQR y la cadena de conexión.1) end-program Procedimiento para crear y correr un programa SQR Debe abrir un editor de texto y escribir el código del programa tal cual aparece. pero la extensión del archivo será diferente. El SQR para sistemas Windows...

y usted puede tener sólo una por programa. Puede indentar los comandos SQR Resumen     La sección de programas es que la ejecución del programa comienza. El último elemento del comando Imprimir da la posición en la salida página. El siguiente capítulo explica la forma de ampliar su programa mediante la impresión de un título en la parte superior de la página y el número de página en la parte inferior de la página. La sección PROGRAM es necesaria. La sección del programa contiene un comando de impresión. Introduzca cada comando en una línea nueva. Una página de salida puede ser pensada como una cuadrícula de líneas y columnas.1)" indica la línea uno. Este texto se encierra en comillas simples marcas ( '). Estos dos comandos y el código entre ellos componen la sección de programas. El comando de impresión se puede utilizar para imprimir una cadena de texto. una columna.END-PROGRAM. Normalmente se coloca en o cerca de la parte superior del programa. usted debe colocar cada comando en una línea nueva. que es la esquina superior izquierda de la la página. El "(1. que se utiliza para controlar el orden del procesamiento. que en este caso. 2 . En SQR. Mundo". que se utilizan en SQR para distinguir el texto literal de otros elementos del programa. La posición de impresión puede ser expresado por un par de números encerrados en paréntesis. imprime el texto "Hola.

La zona inferior de la página es el pie de página. En otras palabras. La parte central de la página se llama el cuerpo. independiente del tamaño de la cabecera. la fecha y el número de página. Usted aprenderá a usar el BEGINHEADING y BEGIN-FOOTING. El área superior de la página es la cabecera. cada página de un informe tiene alguna información sobre el informe de en sí. El programa que usted escribió en el capítulo anterior se puede ampliar añadiendo un encabezamiento y pie de página. el cuerpo y de pie de página: El gráfico muestra también que la cabecera. Aquí es donde normalmente se imprime el título del informe y la fecha. Aquí se suele imprimir el número de página. tales como el título.Los encabezados y pies de página Este capítulo explica cómo crear encabezados y pies de página. Usted puede imprimir en cada una de estas áreas página utilizando los números de línea que son relativos a la esquina superior de esa zona sin preocuparse por el tamaño de las otras áreas. usted puede de impresión a la primera línea del cuerpo utilizando el número de la línea 1. Esta es donde se imprimen los datos del informe. El siguiente diagrama muestra la estructura de una página con el encabezado. Por lo general. Aquí está el código: 3 . En SQR. el cuerpo y el pie de página tienen números de línea independientes. la página se puede dividir en tres áreas lógicas.

El comando BEGIN-HEADING es seguido por un número. El comando BEGIN-FOOTING es seguido por el número 1. Esta línea estará compuesta por el texto "Page 1 of 1. el título tendrá exactamente una línea y consistirá en el texto "Tutorial Report". En nuestro ejemplo. 4 . lo que significa que el pie de página será de solo una línea.1) end-program begin-heading 1 print ’Tutorial Report’ (1) center end-heading begin-footing 1 !print "Page n of m" in the footing page-number (1. El argumento CENTER asegura que el texto se centra en la línea.Program ex2a. El pie de página se define en la sección FOOTING. La sección comienza con BEGIN-HEADING y termina con END-HEADING." Tenga en cuenta que cualquier espacio reservado para el título y pie se le quita del cuerpo.sqr La cabecera se define en la sección HEADING. que comienza con la instrucción BEGIN-FOOTING y termina con END-FOOTING. Con una línea cada uno en el encabezamiento y pie. el máximo tamaño posible del cuerpo de nuestro informe se reduce en dos líneas.sqr begin-program print ’Hello.1) ’Page ’ last-page () ’ of ’ end-footing Salida del programa ex2a. World. que es el número de líneas reservadas para el título.’ (1.

Nótese también que la línea 1 del cuerpo es en realidad la primera línea después de la partida. columna es la columna (posición de caracteres) y el ancho es el ancho del texto. World" se ejecuta en primer lugar. El comando LASTPAGE imprime el número de la última página. la línea 1 del pie de página está en la parte inferior de la página. ¿Cuál es el orden de ejecución? El comando PRINT realmente coloca el texto en la memoria. a continuación. columna. World!!’ (1. Línea 1 del cuerpo es la primera por debajo de la línea de la cabecera. Si también se omite la línea y columna de números. ya que por defecto es la anchura del texto se está imprimiendo. dentro del cuerpo de la partida. la posición siguiente a lo último que se imprimió.1) en el cuerpo. La opción CENTER del comando PRINT centrea el texto en una línea. Del mismo modo. precedido por la palabra "of". Una posición en SQR se expresa en tres números en paréntesis . La anchura suele omitirse. La posición de impresión es un punto dentro de la zona de la página. SQR imprime "Page 1 of 1" porque hay una sola página. que está entre espacios. En el programa." Resumen     Un programa SQR puede tener secciones HEADING y FOOTING que crean el encabezado y pie de página de cada página del reporte. SQR siempre prepara una página en la memoria antes de de impresión al papel. Los comentarios se preceden por un signo de exclamación. PAGE-NUMBER y LAST-PAGE. el título sólo tiene una línea. En muchos casos. el último comando de página tiene la posición de "()" Para que la situación actual aquí es la siguiente posición en el número de página. "Tutorial Report" y finalmente "Page 1 of 1.(línea. Por ejemplo: print ’Hello. ancho)-donde la línea es el número de línea. se debe escribir dos veces para decirle que no SQR a tomar como el comienzo de un comentario. Los números de página pueden imprimirse en el formato “Page n of m” con los comandos PAGENUMBER y LAST-PAGE Las posiciones de impresión se expresan por números entre paréntesis 5 . Es la primera línea después del cuerpo. Si desea imprimir un signo de exclamación. La primera línea en la sección de PIE es un comentario. En este caso. En el ejemplo.1) La instrucción PAGE-NUMBER imprime el texto "Page" y el número de página actual. "Hello. la impresión de defecto de posición a la posición actual. o más precisamente. de modo la línea 1 del cuerpo es en realidad la segunda línea de la página. consiste únicamente en una posición de la línea y columna de números. Los números entre estos paréntesis dar la posición de impresión. a continuación. o de pie. Note los paréntesis en los comandos PRINT. realizando el primer cuerpo. y se extienden desde el signo de exclamación hasta el final de la línea. no en papel. La posición (1. En nuestro ejemplo. el título y Secciones de base.1) en el título es no la misma que la posición (1.

32) state (.32) print ’State’ (.1) print ’City’ (.sqr begin-program do list_customers end-program begin-heading 4 print ’Customer Listing’ (1) center print ’Name’ (3.49) phone (. también aprenderá a utilizar los procedimientos.55) end-heading begin-footing 1 !Print "Page n of m" in the footing page-number (1. Aquí está el código. Program ex3a.Obteniendo datos de una base de datos En este capítulo se describe cómo escribir un programa que muestra los datos de la base de datos y lo imprime en las columnas. Usted aprenderá el comando BEGIN-SELECT que es el principal medio de recuperación de datos de la base de datos e impresión en un informe.1) ’Page ’ last-page () ’ of ’ end-footing begin-procedure list_customers begin-select name (.49) print ’Phone’ (. Debido a que el comando BEGIN SELECT debe usarse dentro de en un procedimiento.55) position (+1) !Advance to the next line from customers end-select end-procedure !list_customers 6 .1) city (.

Salida del programa ex3a. Un procedimiento se invoca con un comando DO. Cuatro líneas están reservadas para el título. 7 . En SQR. que invoca al procedimiento list_customers. Normalmente. como un procedimiento (o subrutina) en la programación de otros idiomas. La sección HEADING (que se muestra más abajo) crea las títulos de las columnas del informe. debería consistir en unos cuantos comandos DO para los componentes principales de su informe. Le recomendamos que divida la lógica del programa en procedimientos y mantenga pequeña la sección PROGRAM. uno tras el otro.sqr La sección de programa consta de un comando DO único. un procedimiento es un grupo de comandos que se ejecutan.

32) print ’State’ (. el comando POSITION es indentado para evitar ser tomado como un nombre de columna. El resto de la instrucción SELECT de SQR se escribe libremente. Tenga en cuenta el comentario siguiente a la instrucción END-PROCEDURE. La sentencia SELECT de SQR Veamos de nuevo el procedimiento list_customers. se coloca en la línea 3 de la cabecera. lo cual es útil cuando se tiene un programa con muchos procedimientos.begin-heading 4 print ’Customer Listing’ (1) center print ’Name’ (3. El párrafo SELECT es único. En el siguiente ejemplo. PHONE FROM CUSTOMERS Sintaxis de la instrucción SELECT En el párrafo SQR SELECT. (También se puede omitir el signo de exclamación: END-PROCEDURE main. Los nombres de columna debe ser colocado en el principio de una línea. SQR distingue los nombres de columna de los comandos SQR en un SELECT párrafo por su sangría. "Name". Se combina una instrucción SQL SELECT con el procesamiento de SQR en una forma perfecta.1) print ’City’ (. Los comandos SQR comandos deben tener una sangría de al menos un espacio.55) end-heading El título de "Customer Listing" está impreso en la línea 1. el SELECT palabra se omite. posición de carácter 1. En su lugar. El resto de los comandos de la sección HEADING omiten los números de línea en sus posiciones y por defecto utilizan la línea actual. siguiendo la sintaxis SQL. STATE. La instrucción SQL real es: SELECT NAME. La línea 4 del el título se deja en blanco. El título de la primera columna . y no hay comas entre los nombres de columna. Le dice cuál procedimiento se está terminado.49) print ’Phone’ (. La palabra FROM debe ser la primera palabra en una línea. que comienza con BEGIN-PROCEDURE y termina con END-PROCEDURE. Nota: Se deben nombrar cada columna de la tabla. La línea 2 se deja en blanco. La instrucción “select * from” no está permitida en SQR. y estos comandos se ejecutan para cada registro que el SELECT obtiene. También puede colocar los comandos SQR entre los nombres de columna.) El procedimiento en sí contiene un párrafo SELECT. CITY. 8 . que comienza con BEGIN-SELECT y termina con END-SELECT. cada columna está en su propia línea.

49) phone (.55) position (+1) !Advance to the next line from customers end-select El comando PRINT implícito de SQR es una característica especial diseñada para ahorrar el tiempo de codificación. hay un comando Position: (+1). Como antes. Cuando se indican las posiciones de impresión mediante signos más o menos. Los comandos SQR. El siguiente capítulo se describe un tipo especial de variable SQR llama variable de columna. incluida la impresión de las columnas. Los comandos de SQR en un párrafo SELECT deben estar indentados por lo menos un espacio para evitar que se tomen como nombres de columna. begin-select name (.1) city (. Un signo más que la posición de impresión se mueve hacia adelante desde la posición actual. Este comando hará avanzar la impresión actual la posición a la línea siguiente. El ciclo termina después que el último registro es devuelto. omitiendo el número de línea en la posición usa por defecto a la línea actual. El signo más (o un signo menos) indica la posición relativa en SQR. 9 . y un signo menos se mueve hacia atrás. Esto se llama un comando de impresión implícito. Después de la última columna. El comando de posición se utiliza para indicar la posición. En una instrucción SELECT.32) state (. se ejecutan en un bucle. Posicionamiento de datos En la instrucción SELECT (repite a continuación). se ve la posición después de cada nombre de la columna.Usted puede pensar en el párrafo SELECT como un bucle. una vez para cada registro que es devuelto por el SELECT. El "1" en nuestro programa significa una línea de por debajo de la línea actual. Sólo funciona dentro de un párrafo SELECT. puede imprimir una columna colocando su nombre en el principio de la línea con un calificador de posición. Estas variables tienen los resultados de un párrafo SELECT. Un procedimiento comienza con BEGIN-PROCEDURE y termina con END-PROCEDURE Un párrafo SELECT comienza con BEGIN-SELECT y termina con END-SELECT. Este posicionamiento implica un comando de impresión para esa columna. asegúrese de que su número no especifica una posición fuera de los límites de página. Resumen       El comando DO es utilizado para invocar un procedimiento.

1) else print &phone (. por ejemplo.Variables de Columnas Este capítulo explica cómo nombrar las columnas de base de datos con las variables y de cómo utilizar sus valores en las condiciones y los comandos. Por ejemplo: begin-select phone (. las variables de columna son de sólo lectura. en una condición? El siguiente ejemplo muestra cómo hacerlo begin-program do list_customers end-program begin-procedure list_customers begin-select phone if &phone = ’’ print ’No phone’ (. Variables de columna están precedidos por un ampersand (&). Al seleccionar las columnas de la base de datos en un párrafo SELECT.1) position (+1) from customers end-select Pero si lo que desea es utilizar el valor del teléfono para otro propósito. 10 .1) end-if position (+1) from customers end-select end-procedure !list_customers La columna de teléfono se considera una variable de columna SQR. inmediatamente puede imprimir utilizando una posición. pero no se puede asignar un nuevo valor a una variable de columna. A diferencia de las variables de otro programa. Puede utilizar su valor existente.

se selecciona la expresión count(name).En el programa de ejemplo. Las variables de columna se pueden utilizar en los comandos y condiciones. Será también se explica cómo imprimir los registros de base de datos a través de varias líneas en un informe. Podemos cambiar el nombre de las variables de columna para recibir el valor de las expresiones. Este es el comportamiento por defecto. &phone es una variable de columna que se puede utilizar en sentencias SQR como si se tratara de una cadena. como los siguientes ejemplos lo demuestran. Las variables de columnas están precedidas por un ampersand (&). Tenga en cuenta que la variable de la columna &phone ha heredado su nombre de la columna phone. el programa imprime "No hay teléfono". Si el &phone es una cadena vacía.1) if &cust_cnt < 100 print ’Less than 100 customers’ end-if position (+1) from customers group by city. una cadena vacía. fecha o variable numérica en función de su contenido.1) else print &cust_phone (. state end-select En este ejemplo.1) end-if position (+1) from customers end-select ¿Por qué quieres cambiar el nombre de la variable de columna? Una razón es que usted quisiera utilizar una columna que no tiene nombre. El siguiente capítulo se introduce el concepto de una ruptura informe. Por ejemplo: begin-select count(name) &cust_cnt (. En la condición &phone se compara con ‘’. En el programa. podemos hacer referencia a las columnas de base de datos como variables. 11 . pero usted puede cambiarlo. begin-select phone &cust_phone if &cust_phone = ’’ print ’No phone’ (. se almacena esta expresión en la variable de columna &cust_cnt y se refiere a ella después con ese nombre. Resumen   En SQR.

12 .

sqr begin-program do list_customers end-program begin-heading 2 print ’State’ (1. Hay una serie de razones para utilizar la lógica de ruptura en un informe. el recuento de registros.1) city (. La lógica de rupturas hará que el agrupamiento sea más evidente. puede escribir un programa similar al del Capítulo 3. y realizar un procesamiento adicional en el contar o subtotal.55) end-heading begin-procedure list_customers begin-select state (. región. subtotal de una columna. un nuevo grupo comienza. Para ver cómo funciona una ruptura.7) print ’Name’ (1.24) phone (. por ejemplo. También se presentan algunas técnicas adicionales para mejorar la apariencia de los informes que utilizan la lógica de rupturas.1) print ’City’ (1.Lógica de rupturas Este capítulo describe las técnicas para el uso de la lógica de rupturas en sus programas SQR. Una ruptura es un cambio en el valor de una columna o variable. lógicamente pertenecen a un grupo. usted puede querer preparar un informe de ventas con los registros agrupados por producto. Registros con el mismo valor. Usted puede imprimir los encabezados de columna. sin lógica de ruptura: Program ex5a.7) name (. o vendedor (o los tres). Aquí está el programa. La lógica de rupturas le permite hacer todo eso y más.55) position (+1) !Advance to the next line from customers order by state. los registros con el mismo valor para el Estado.24) print ’Phone’ (1. name end-select end-procedure !list_customers 13 . Le permite: • • • • Añadir un espacio en blanco a sus informes Evitar los datos redundantes de impresión Realizar el procesamiento condicional de variables que cambian Imprimir subtotales Por ejemplo. city. y luego agregarle la lógica de la ruptura. Cuando se produce una ruptura.

y el nombre (note la cláusula ORDER BY en el BEGINSELECT). Para hacer la agrupación más evidente. los registros se agrupan por el estado. Imprime “state” solamente una vez cuando su valor cambia. Tenga en cuenta que ON-BREAK funciona tanto con los comandos PRINT implícitos como con los explícitos como en el ejemplo siguiente. Esta línea se muestra en negrita. En el programa siguiente.sqr Cuando la salida está ordenada por estado. Utilizando ON-BREAK 1. la opción ON-BREAK del comando PRINT lleva a cabo dos tareas relacionadas Inicia un grupo nuevo cada vez que el valor de “state” cambia. 14 .sqr con la excepción de la línea de que imprime la columna de estado. ciudad. nombre y teléfono son implícitamente impresos como parte del párrafo SELECT.Salida del programa ex5a. 2. se puede agregar un salto. ciudad. donde el estado. El programa siguiente es idéntico al ex5a.

24) print ’Phone’ (1. la abreviatura del estado se ha impreso una sola vez para cada grupo.7) name (. con la línea modificada en negrita: 15 .1) print ’City’ (1. Aquí está el procedimiento list_customers de ex5b.7) print ’Name’ (1.55) end-heading begin-procedure list_customers begin-select state (.sqr begin-program do list_customers end-program begin-heading 2 print ’State’ (1. city. utiliza el calificador SKIPLINES con ON-BREAK.1) on-break city (.24) phone (.55) position (+1) !Advance to the next line from customers order by state. Para ello.Program ex5b.sqr Con el procesamiento de rupturas. name end-select end-procedure !list_customers Salida del programa ex5a.sqr. Saltar líneas entre grupos Usted puede mejorar aún más el efecto visual de procesamiento de rupturas mediante la inserción de una o más líneas entre los grupos.

Para asegurarse de que las rupturas estén debidamente anidadas. luego la ciudad.7) name (. es necesario organizarlos en una jerarquía. las rupturas son unidades geográficas. city.1) on-break skiplines=1 city (. usted también puede tener múltiples clientes dentro de una ciudad. Puede aplicar el mismo concepto de ruptura a la columna ciudad para que este grupo de clientes sea más evidente.55) position (+1) !Advance to the next line from customers order by state. Este tipo de sistema se denomina de anidación. name end-select La salida se muestra a continuación: La organización de múltiples columnas de ruptura Como se puede ver en el ejemplo anterior. Cuando usted tiene múltiples rupturas. En el programa de ejemplo. y las rupturas se dice que están anidadas. utilice la palabra clave LEVEL.24) phone (. por lo que es lógico para ponerlas en función del tamaño de cada una asi: estado primero.begin-select state (. Este argumento numera las ruptruas por nivel y especifica que las columnas sean impresas en orden 16 . Añada otro ON-BREAK en el programa para que la ciudad también se imprima sólo cuando cambie de valor.

55) position (+1) !Advance to the next line from customers order by state.55) end-heading begin-procedure list_customers begin-select state (.incremental del nivel de ruptura de izquierda a derecha. El siguiente ejemplo es idéntico al ex5a. Program ex5c.7) print ’Name’ (1.24) phone (. name end-select Salida del programa ex5c.sqr begin-program do list_customers end-program begin-heading 2 print ’State’ (1.1) print ’City’ (1.1) on-break level=1 city (.sqr 17 . Estas dos líneas se muestran en la negrita.24) print ’Phone’ (1.sqr con la excepción de dos líneas que imprimen el Estado y las columnas de la ciudad.7) on-break level=2 name (. city. El calificador LEVEL le permite controlar el orden en que usted llama los procedimientos de ruptura. Numere sus rupturas en el mismo orden en el que están ordenados los registros de acuerdo a la cláusula “ORDER BY”.

1) print #state_total () edit 999.1) ’Page ’ last-page () ’ of ’ end-footing begin-procedure state_tot print ’ Total Customers for State: ’ (+1.1) Edit ’DD-Mon-YYYY’ print ’State’ (3.1) !Leave 2 blank lines. El programa selecciona el nombre del cliente. es posible que desee mejorar su informe controlando los saltos de página o calculado contadores y totales para la columna del ON-BREAK.11) print ’-’ (4.sqr begin-program do list_customers end-program begin-heading 4 print ’Customers Listed by State’ (1) center print $current-date (1.1. dirección y número de teléfono de la base de datos. El procesamiento de ruptura se realiza sobre la columna de estado.1) print ’Customer Name.11. Aquí está el código: Program ex5d.999 position (+3. Cuando se utiliza la lógica de ruptura. let #cust_total = #cust_total + #state_total let #state_total = 0 end-procedure !state_tot 18 .9) fill print ’-’ (4.40) fill end-heading begin-footing 2 !print "Page n of m" page-number (1.Mejoras al procesamiento de rupturas. Address and Phone Number’ (. El siguiente ejemplo ilustra estas técnicas.

1) on-break print=change/top-page after=state_tot name (. name end-select if #cust_total > 0 print ’ Total Customers: ’ (+3.1) print #cust_total () edit 999. !Skip 1 line between listings.11) !continue on second line addr2 (+1.begin-procedure list_customers let #state_total = 0 let #cust_total = 0 begin-select !The ’state’ field will only be printed when it !changes.11) addr1 (+1.’ (1. state (.+2) edit (xxx)bxxx-xxxx !Edit for easy reading. we specify ’need=4’ to !prevent a customer’s data from being broken across two pages.999 !Total customers printed. else print ’No customers.11) !continue on fourth line phone (.11) !continue on third line city (+1.1) end-if end-procedure !list_customers 19 . The procedure ’state_tot’ will also be !executed only when the value of ’state’ changes. !Since each listing takes 4 lines. next-listing skiplines=1 need=4 let #state_total = #state_total + 1 from customers order by state.

Salida del programa ex5d.sqr 20 .

Echa un vistazo al código. La dirección del cliente y el teléfono están impresos en las siguientes tres líneas. Este argumento llama al procedimiento state_tot después de cada cambio en el valor de estado. El orden de procesamiento se explica en la sección "Configuración de Quiebre Procedimientos de antes y después ". 21 . La información se imprime utilizando un párrafo SELECT en el procedimiento list_customers. El estado y el nombre del cliente se imprimen en la primera línea. El programa también utiliza el argumento AFTER= STATE_TOT.

si hay menos de cuatro líneas al final de la página. vamos a imprimir la "Página n de m" como hicimos en ejemplos anteriores. Tenga en cuenta que el comando de impresión para el título del informe precede a la orden para la fecha actual $current-date . SQR proporciona una gran variedad de máscaras de formato para su uso en números. Es una buena manera de imprimir una línea. SQR proporciona variables predefinidas o reservadas para una variedad de usos. o formato. Para formatear los registros utilice el comando NEXT-LISTING. Para controlar la impresión del valor. 22 .1 de la cabecera. reenumera la línea actual como línea 1. el comando completo es PRINT $current-date (1. para la impresión de la fecha. de modo que el orden de estos comandos no importa siempre que utilice la posición correcta impresión. use PRINT = CHANGE / TOP-PAGE. En este caso. El argumento EDIT especifica una máscara de edición. el valor de la columna ON-BREAK se imprimirá cuando la columna cambie y después de cada salto de página. El argumento NEED = 4 impide que un LISTING quede dividido dos páginas. En la sección FOOTING. especificando el número mínimo de líneas necesarias para escribir un nuevo LISTING en la página actual. Impresión de la Fecha En la sección HEADING. SQR iniciará una nueva página. Los dos últimos comandos en la sección de encabezado de impresión de una serie de guiones bajo los encabezados de columna. Observe el uso de la opción de FILL del comando PRINT. puede que desee volver a imprimir los encabezados y el valor de la columna que ocasionó el salto en la parte superior de la nueva página.Manejo de saltos de página Si se produce un salto de página dentro de un grupo. Esta variable se inicializa con la fecha y la hora de la máquina cliente en el inicio de la ejecución del programa. sino que también cada vez que el inicie una nueva página. En este ejemplo. una para los subtotales y otro para los totales generales.sqr también imprime dos totales: un subtotal de los clientes en de cada estado y un gran total de todos los clientes.1) EDIT ‘DD / MM / AAAA’ Se imprime la fecha y la hora en la posición 1. Este comando sirve a dos propósitos. el valor de estado será impreso no sólo cuando cambie. aunque la fecha está a la izquierda y el título está a la derecha. En este ejemplo. SQR siempre arma la página en la memoria antes de imprimir. Con este parámetro. La obtención de los totales El programa ex5d. respectivamente. a continuación. fechas y cadenas. Estos cálculos se realizan con dos variables numéricas. Sus nombres son #state_total y #cust_total. la variable reservada $current-date se utiliza para imprimir la fecha y la hora. Esta opción le dice al SQR que rellene el ancho especificado con este patrón. El argumento SKIPLINES = 1 se salta una línea entre los registros.

las variables numéricas y de cadena no se declaran explícitamente. por lo que normalmente no es necesario inicializarlas. Observe el uso de la máscara de edición 999. Aquí. Los tipos más comunes son las variables numéricas y las variables de cadena. Este procedimiento también emplea el comando LET. mientras que los nombres de procedimiento y los nombres de las variables usan un subrayado. Usar subrayado en los nombres de procedimientos y los nombres de variable le ayudará a distinguirlos de los comandos SQR. la consulta ha regresado filas de datos. Un tipo adicional de variable es la variable de fecha. Esta inicialización es opcional y se hace para mayor claridad solamente. Si es mayor que cero. La condición comienza con IF es seguido por una expresión. los comandos posteriores se ejecutan. #state_total se pone a cero. Las variables de cadena son de longitud variable y pueden tener largas cadenas de caracteres. El procedimiento de list_customers contiene un ejemplo de la instrucción SQR if-then-else. LET se utiliza para agregar el valor de #state_total a #cust_total. usan un guión. #state_total y # cust_total se ponen a cero en el inicio del procedimiento. Los comandos IF siempre terminan con un END-IF.SQR tiene un pequeño conjunto de tipos de variables. el programa llama al procedimiento state_tot e imprime el valor de #state_total. pero le recomendamos que utilice un guión bajo.999. Los nombres de procedimiento y los nombres de variable pueden contener un guión o un subrayado. En SQR. De lo contrario. Si #cust_total es igual a cero. En ese caso. evitará la confusión 23 . su longitud se ajusta automáticamente. Guiones y subrayados (guiones bajos) Usted puede haber notado que muchos de los comandos SQR. el programa imprime la cadena "No Customers". Al final del procedimiento. Si la expresión se evalúa como verdadero o un número distinto de cero. Asimismo. y todas las variables de cadena comienzan como NULL. En el procedimiento list_customers. Todas las variables numéricas en SQR están precedidas por un signo de numeral (#) y todas las variables de cadena son precedidos con un signo de dólar ($). La variable #state_total se incrementa en 1 para cada fila seleccionada. En lugar de eso se definen implícitamente por su primer uso. hay una parte de ELSE. y le permite crear expresiones complejas. y el programa imprimirá la cadena "Total Customers:" y el valor de #cust_total. LET es el comando de asignación en SQR. Cuando un nuevo valor es asignado a una variable de cadena. la consulta no ha devuelto ningún dato. tales como BEGIN-PROGRAM y BEGINSELECT. así como cadenas cortas. Todas las variables numéricas inician con valor cero. En este caso. se examina el valor de #cust_total. Cuando el valor del estado cambia. que le da formato al número.

45) on-break level=3 after=zip_tot from customers order by state. Procedimientos de ruptura con BEFORE y AFTER. Cuando se produce una ruptura en un nivel. En el programa de ejemplo. por ejemplo.1) on-break level=1 after=state_tot skiplines=2 city (. donde los guiones podría confundirse con signo negativo. La siguiente instrucción SELECT se rompe en tres niveles: begin-select state (. antes de que la instrucción SELECT se haya procesado. En ex5c. Comprensión de la Orden de Eventos Se puede definir una jerarquía de las columnas de ruptura utilizando el calificativo LEVEL en el ONBREAK. Los calificadores BEFORE y AFTER le dan esta capacidad. zip end-select 24 . El valor puede ser impreso. Una ruptura en una variable puede desencadenar otros muchos acontecimientos. en otras palabras. Todos los procedimientos BEFORE se invocan automáticamente antes de cada ruptura. Por ejemplo: begin-select state (. una vez finalizada la instrucción SELECT. Es importante saber el orden de los acontecimientos. se pueden saltar líneas. una ruptura en el estado también significa una ruptura en la ciudad. Del mismo modo. el estado se define como LEVEL = 1 y la ciudad como LEVEL = 2. todos los procedimientos AFTER se invocan después de cada ruptura.sqr. el calificativo AFTER llama automáticamente al procedimiento de state_tot para imprimir totales después de cada grupo de registros. en particular cuando hay múltiples columnas con el calificador ON-BREAK.1) on-break before=state_heading after=state_tot El calificador BEFORE llama automáticamente al procedimiento state_heading para imprimir los encabezados de de impresión antes de cada grupo de registros de un mismo Estado. incluida la primera. usted puede llamar de forma automática los procedimientos BEFORE y AFTER de cada interrupción en una columna. Del mismo modo. city. incluidos los del último grupo. se fuerza la ruptura en las columnas con niveles más altos.7) on-break level=2 after=city_tot skiplines=1 zip (. en otras palabras.cuando se mezclan nombres de variables y los números en una expresión. llamar automáticamente los procedimientos o guardar el valor anterior. Al imprimir variables con ON-BREAK.

2.sqr begin-setup declare-Layout default end-declare end-setup begin-program do main end-program begin-procedure a print ’AFTER Procedure for state LEVEL 1’ (+1. Las tres columnas: estado.40) end-procedure begin-procedure b print ’AFTER Procedure city LEVEL 2’ (+1. se ejecuta el procedimiento zip _tot.  Tanto city como la zip se imprimen en el siguiente registro. los procedimientos zip_tot. Program ex5e.40) end-procedure begin-procedure aa print ’BEFORE Procedure state LEVEL 1’ (+1. en primer lugar se ejecuta el procedimiento de zip_tot . cada una con un argumento LEVEL y un procedimiento BEFORE y un AFTER. Cuando rompe zip. Los procedimientos BEFORE y AFTER imprimen cadenas para indicar el orden del procesamiento.40) end-procedure 25 . entonces el procedimiento city_tot es ejecutado.40) end-procedure begin-procedure c print ’AFTER Procedure zip LEVEL 3’ (+1. ciudad. y zip se imprimen en el siguiente registro. 3.Las roturas son tratadas como sigue: 1. Tiene tres columnas con ON-BREAK. city_tot y state_tot son procesados en ese orden. Cuando se rompe la ciudad. Cuando se rompe por el estado. y una línea se salta (SKIPLINES = 1). El siguiente programa (ex5e. Una línea se omite después que el procedimiento city_tot es ejecutado y dos líneas se omiten después que el procedimiento state_tot es ejecutado.40) end-procedure begin-procedure cc print ’BEFORE Procedure zip LEVEL 3’ (+1.sqr) demuestra el orden de los acontecimientos en el procesamiento de rupturas.40) end-procedure begin-procedure bb print ’BEFORE Procedure city LEVEL 2’ (+1.

10) On-Break Level=2 after=b before=bb zip (3.10) print ’ZIP’ (3.zip end-select end-procedure begin-heading 3 print $current-date (1.40) end-heading 26 .40) print #count (.60) ’Page ’ last-page () ’ of ’ print ’STATE’ (3.25) print ’Break Processing sequence’ (3.1) On-Break Level=1 after=a before=aa city (3.city.begin-procedure main local begin-select add 1 to #count print ’Retrieved row #’ (+1.1) edit ’DD-MM-YYYY’ page-number (1.+10)Edit 9999 position (+1) state (3.25) On-Break Level=3 after=c before=cc Edit xxxxx next-listing Need=10 from customers order by state.1) print ’CITY’ (3.

sqr 27 .Salida del programa ex5e.

28 .

Si SKIPLINES se ha especificado. 4. probablemente usted no querrá tener uno dentro de un registro. 5. 29 . Los procedimientos ANTES (BEFORE) se procesan en orden ascendente desde el nivel actual hasta el más alto. Los procedimientos DESPUES (AFTER) se procesan en orden descendente desde el mayor nivel hasta el nivel de la columna con el ON-BREAK actual. la posición actual de la línea se avanza. SI no se seleccionan datos. 3. 2. 4. Procesar la primera fila de datos La primera fila de datos es seleccionada Paso 3. Mientras que puede ser aceptable tener un salto de página dentro de un grupo. El procesamiento del SELECT continúa. Coloque las columnas ON-BREAK delante de las otras columnas en su instrucción SELECT Coloque las columnas con menor LEVEL en el ON-BREAK delante de las que tienen mayor LEVEL Use las mismas posiciones de línea para todas las columnas ON-BREAK Evite el uso de WRAP y ON-BREAK juntos en la misma columna. 2. Las variables SAVE se inicializan con el valor de la columna anterior al ON-BREAK. 3.Los siguientes pasos explican el orden de procesamiento en detalle: Paso 1. si se seleccionó alguna fila. los saltos de página deben planearse con cuidado. Controlar los saltos de página en columnas con múltiples columnas ON-BREAK Cuando hay múltiples columnas con ON-BREAK. Cuando ocurre una ruptura en cualquier columna también se disparan las rupturas en las columnas con el mismo o mayor nivel (LEVEL). Usted puede prevenir los saltos de página dentro de un registro siguiendo cuatro simples reglas: 1. El valor del nuevo grupo se imprime (a menos que se haya especificado PRINT=NEVER) Paso 4. Procesar los procedimientos DESPUES (AFTER) Después que el SELECT ha completado. Los eventos ocurren en el siguiente orden: 1. Seleccionar las siguientes filas de datos. los procedimientos ANTES (BEFORE) no se ejecutan. Paso 2. Procesar los procedimientos ANTES (BEFORE) Los procedimientos ANTES(BEFORE) se procesan en orden ascendente por LEVEL antes que la primera fila del select sea obtenida. entonces los procedimientos DESPUES (AFTER) se procesan en orden descendente de nivel (LEVEL).

ON-BREAK SKIPLINES inserta espacios entre grupos de registros. Si requiere ejecutar procesamiento de rupturas con una variable numérica. Por ejemplo: begin-select amount_received &amount move &amount to $amount $$9. Por ejemplo: usted podría querer imprimir el nombre del estado junto con los totales de cada estado.1) on-break after=state_tot save=$old_state Usted puede imprimir el valor de $old_state en el procedimiento state_tot. este procedimiento se ejecuta solamente después que el valor de la columna con el ON-BREAK ha cambiado. primero debe mover su valor a una variable de cadena y ponerle la instrucción ON-BREAK a esa variable.sqr. Los argumentos BEFORE y AFTER establecen procedimientos para las rupturas Los calificadores SET y LEVEL en conjunto con BEFORE y AFTER determinan el orden de los eventos El calificador SAVE guarda el valor del grupo anterior en una variable 30 .99 print $amount (+1. ON-BREAK LEVEL acomoda las rupturas jerárquicamente PRINT=CHANGE/TOP-PAGE imprime una columna después del salto de página o después del cambio del valor de una columna NEXT-LISTING mantiene un grupo de líneas en la misma página LET es el comando de asignación de SQR. Resumen          PRINT ON-BREAK realiza procesamiento especial cuando un valor cambia. Simplemente imprimir el valor de state no servirá porque su valor habrá cambiado para el momento en que el procedimiento AFTER sea llamado. usted podría desear imprimir en el procedimiento AFTER el valor previo de la columna antes del ON-BREAK.Guardar un valor cuando ocurre una ruptura En el programa ex5d.1) on-break from cash_receipts order by amount_received end-select Por defecto el número máximo de niveles ON-BREAK es 30. el procedimiento state_tot imprime el número total de clientes por estado. Restricciones y limitaciones de ON-BREAK ON-BREAK no puede utilizarse en SQR con variables numéricas. Debido a que se llama con el argumento AFTER. Algunas veces. Para hacer esto use el calificador SAVE de ON-BREAK.999. Por ejemplo: begin-select state (. La respuesta es guardar el valor previo a la ruptura en una variable de cadena.

Anexos Funciones Relacionadas con archivos delete rename exists Funciones numéricas abs acos asin atan ceil cos cosh deg e10 exp floor log log10 mod power rad round sign sin sinh sqrt tan tanh trunc range rpad rtrim strtodate substr to_char to_number translate upper Funciones misceláneas array getenv ascii instr chr isblank cond isnull dateadd length datediff lower datenow lpad datetostr ltrim edit nvl Variables reservadas #current-column $current-date #current-line #end-file #page-count #return-status #sql-count #sql-error #sql-status $sqr-database {sqr-database} $sqr-locale #sqr-pid $sqr-platform {sqr-platform} $sqr-program $sqr-report $sqr-ver $username 31 .

999.999.dinero en miles signo (-) #define FOR_DIN_MILES B99.990.99 !Formato de dinero por defecto #define FOR_EXT 999.999.999PS !Formato de dinero para miles #define FOR_MILES_SUP 999999999999999 !Formato miles archivo ASCII #define FOR_EXT_SUP 999999999999.999PS !Formato extranjer para miles #define FOR_EXT_MILESA B99.999.999.999.99 !Formato de dinero por defecto #define CHR_BLA 32 !Caracter en blanco 32 .99 !Formato de FECI #define FOR_SAL 999.999.999.999.999.99 !Formato cantidad grande #define FOR_CTA XXX-XXXXXX-X !Formato de la cuenta externa #define FOR_CARTA XX-XXX-XXX !Formato de carta de remesas #define FOR_CHQ 00000000000 !Formato de cheque #define FOR_OFI 99999 !Formato de oficial #define FOR_OFIN 99999 !Formato de oficina #define FOR_CED XXXXXXXXX-X !Formato de cedula #define NRO_ENTES 300000 !Numero maximo de entes #define NRO_FUNCIONARIOS 10000 !Numero maximo de funcionarios #define NRO_TELEFONOS 1000000 !Numero maximo de telefonos #define SERVIDOR BOLIVSRV !Nombre del servidor a conectarse #define FOR_TOTAL 99999999 !Formato de numero para totales #define SECUENCIA 999.99 !Formato de dinero #define FOR_INT 9.999.999.99MI !Formato de dinero con .999.para miles signo(-) #define FOR_EXTA B99.999.al final #define AREA_CONS 255 !Nivel del area consolidada #define OFI_CONS 255 !Nivel de la oficina consolidada #define OFI_SUC 3 !Nivel de oficinas tipo sucursales #define OF_ORIG 1002 !Nivel de oficinas tipo sucursales #define AREA_ORIG 300802 !Nivel de oficinas tipo sucursales #define DOLAR 1 !Moneda Dolar #define UVC 32 !Moneda UVC #define FOR_DIN_COR B999.999.999.99 !Frm.999.999.en cent.999.999.999.de dinero extr.999.imprime signo (-) #define FOR_DIN_MILESA B99.999.999.999 !Formato de numeros enteros #define FOR_MON 9.999.999.999.999.999.999PS !Formato extranj.99 !Formato de dinero por defecto #define FOR_DINA B99.999.99 !Formato de mesnualidad #define FOR_FECI 999.999.999.Definic.999.999.signo(-) #define FOR_DINN B999.999.99 ! Formato de valor de Cotizacion #define CUENTA XXXXXXXXXXXXXXXX !Numero de cuenta #define CUENTA1 XXXXXXXXXXXXXXXXXXXX !numero de cuenta 2 #define MONEDA_NACIONAL 0 !Moneda Nacional #define FOR_DINC 9.999.999 !Form.999.999.99 !Formato de dinero corto #define FOR_ENTEROS 999.99 !Formato de interes #define FOR_MENS 999.999.00mi !Formato de dinero con .999.al final #define FOR_DIN 999.999.sqr #define TRUE 1 !Valor verdadero #define FALSE 0 !Valor falso !XEROX #define COD_IMP_COND <27><15> !Codigos de impresion condensada !#define COD_IMP_COND <27>&l2A<27>&l1O<27>(19U<27>&l12D<27>(s20H #define COD_IMP_COND =UDK=&<10>&+x<10>=UDK=&<10>&+K6<10> #define COD_IMP_LAND =UDK=&<10>&+x<10>=UDK=&<10>&+K6<10> #define COD_IMP_COMP =UDK=&<10>&+x<10>=UDK=&<10>&+K9<10>&cA4<10> #define COD_IMP_NORM <18> !Codigo de impresion normal #define CHR_HOR 45 !codigo ASCII de la barra horizontal #define CHR_VER 179 !codigo ASCII de la barra vertical #define CHR_TAB 9 !codigo ASCII de TAB #define ANCHO_PAG 210 !Temporal para SUN IAPY30/May/98 #define LARGO_PAG 75 !Temporal para el SUN #define EXTRA_PAG 132 !Ancho de la pagina deafult #define FOR_FECHA YY/MM/DD !Formato de fecha por defecto #define FOR_HORA HH:MM:SS !Formato de fecha por defecto #define FOR_DINO 999.99 !Formato mon ext archivo ascci #define FOR_EXT_MILES B99.999.99 !Formato de dinero.999.999 !Formato para secuencia de prestamos #define FOR_COTIZ 99.

*! !************************************************************************! #define ANCHO_PAN 70 !Largo de la pantalla del terminal Begin-Procedure Inicializar_Programa !* Resume las llamadas iniciales de todo programa en uno solo *! create-array name=Parametros_Programa size=20 field=Valor:Char let $modo_debug = '' #debug let $modo_debug = 'S' !Se esta trabajando en modo debug if $modo_debug = 'S' !No genere las llamadas del log !Le permite al usuario ingresar 7 parametros de prueba show '(Ejecucion en modo debug)' input $parametro_debug1 'Parametro Prueba #1 ' if $parametro_debug1 <> '' input $parametro_debug2 'Parametro Prueba #2 ' if $parametro_debug2 <> '' input $parametro_debug3 'Parametro Prueba #3 ' if $parametro_debug3 <> '' input $parametro_debug4 'Parametro Prueba #4 ' if $parametro_debug4 <> '' input $parametro_debug5 'Parametro Prueba #5 ' if $parametro_debug5 <> '' input $parametro_debug6 'Parametro Prueba #6 ' if $parametro_debug6 <> '' input $parametro_debug7 'Parametro Prueba #7 ' if $parametro_debug7 <> '' input $parametro_debug8 'Parametro Prueba #8 ' end-if end-if end-if end-if end-if end-if end-if put $parametro_debug1 into Parametros_Programa (1) put $parametro_debug2 into Parametros_Programa (2) 33 . *! !************************************************************************! !* PROPOSITO *! !* Este programa posee procedimientos que manejan el log de procesos *! !************************************************************************! !* MODIFICACIONES *! !* FECHA AUTOR RAZON *! !* 01/Mar/1994 Rodrigo Garces S.sqr *! !* Base de datos: cob_conta *! !* Producto: Contabilidad *! !* Disenado por: Rodrigo Garces S.Log. *! !* Su uso no autorizado queda expresamente prohibido asi como *! !* cualquier alteracion o agregado hecho por alguno de sus *! !* usuarios sin el debido consentimiento por escrito de la *! !* Presidencia Ejecutiva de MACOSA o su representante. *! !* Fecha de escritura: 01/MArzo/1994 *! !************************************************************************! !* IMPORTANTE *! !* Este programa es parte de los paquetes bancarios propiedad de *! !* "MACOSA". representantes exclusivos para el Ecuador de la *! !* "NCR CORPORATION".sqr !************************************************************************! !* Archivo: log.

fc_fecha_cierre.ba_sarta where sa_sarta = #w_lote and sa_producto = fc_producto End-Select let $t1_fecha_proceso = &fecha_proceso_batch let $t11_fecha_proceso = &fecha_proceso_batch2 End-Procedure Begin-Procedure Validar_Dependencia !* Valida que la dependencia de ejecucion del programa se haya cumplido *! Begin-Select sb_repeticion from cobis.111) &fecha_proceso_batch2 from cobis.cobis...1) &fecha_hoy End-Select Begin-Select convert(char(10).ba_sarta_batch where sb_sarta = #w_lote and sb_secuencial = #w_secuencial End-Select if &sb_repeticion = 'N' do Analizar_Repeticion else if &sb_repeticion = 'U' do Analizar_Una_Repeticion end-if end-if if $w_dependencia = 'S' and #w_secuencial <> 1 34 .put $parametro_debug3 into Parametros_Programa (3) put $parametro_debug4 into Parametros_Programa (4) put $parametro_debug5 into Parametros_Programa (5) put $parametro_debug6 into Parametros_Programa (6) put $parametro_debug7 into Parametros_Programa (7) put $parametro_debug8 into Parametros_Programa (8) else let #return-status = 1 ! Para el sistema operativo input $w_lote 'Ingrese el codigo de lote input $w_programa 'Ingrese el codigo del programa input $w_secuencial 'Ingrese el secuencial input $w_corrida 'Ingrese la corrida input $w_dependencia 'Dependencia (S/N) input $w_parametros 'Parametros (A/C) input $w_usuario 'Usuario input $w_password 'Password let #w_lote = to_number ($w_lote) let #w_programa = to_number ($w_programa) let #w_secuencial = to_number ($w_secuencial) let #w_corrida = to_number ($w_corrida) do Fecha_Proceso_Hoy do Validar_Dependencia do Inicializar_Corrida do Obtener_Parametros end-if End-Procedure ' ' ' ' ' ' ' ' Begin-Procedure Fecha_Proceso_Hoy Begin-Select getdate () &fecha_inicio_log convert(char(8).fc_fecha_cierre.101) &fecha_proceso_batch convert(char(10)..ba_fecha_cierre.getdate().

.cobis...ba_sarta where lo_sarta = #w_lote and sa_sarta = #w_lote and sa_producto = fc_producto and lo_secuencial = &existe_dependencia and convert(char(10)..do Verificar_Tiene_Padre end-if End-Procedure Begin-Procedure Verificar_Tiene_Padre Begin-Select on-error=Abortar sb_dependencia &existe_dependencia from cobis.101) End-Select if &estatus_padre = 'E' show 'Este programa depende de: ' &nombre_padre show 'el cual se esta ejecutando desde la fecha ' &fecha_inicio_padre let $mensaje_error = 'El programa del cual se depende aun no ha terminado' do Abortar end-if if &estatus_padre = 'A' show 'Este programa depende de: ' &nombre_padre show 'el cual aborto en la fecha ' &fecha_final_padre let $mensaje_error = 'El programa del cual se depende aborto' do Abortar end-if if &estatus_padre = '' show 'Este programa depende de: ' &nombre_padre show 'el cual aun no se ha ejecutado' let $mensaje_error = 'El programa del cual se depende aun no se ha ejecutado' do Abortar end-if if &estatus_padre = 'F' show 'Este programa depende de: ' &nombre_padre show 'el cual finalizo correctamente en la fecha ' &fecha_final_padre end-if End-Procedure 35 ..ba_sarta_batch where sb_sarta = #w_lote and sb_batch = #w_programa and sb_secuencial = #w_secuencial End-Select let #existe_dependencia = &existe_dependencia Begin-Select on-error=Abortar ba_nombre &nombre_padre from cobis.cobis.ba_fecha_cierre.ba_log.lo_fecha_proceso..ba_sarta_batch where sb_sarta = #w_lote and sb_secuencial = #existe_dependencia and sb_batch = ba_batch End-Select if #existe_dependencia <> 0 do Validar_Estatus_Padre end-if End-Procedure Begin-Procedure Validar_Estatus_Padre Begin-Select on-error=Abortar lo_estatus &estatus_padre lo_fecha_inicio &fecha_inicio_padre lo_fecha_terminacion &fecha_final_padre from cobis.fc_fecha_cierre.ba_batch.101) = convert(char(10).cobis.

cobis.cobis.ba_log.1) || substr ($fecha.ba_log.3.cobis.fc_fecha_cierre..101) and lo_estatus = 'F' ! (F)inalizo correctamente End-Select if not isnull(&una_repeticion) show 'Este programa ya ha sido ejecutado exitosamente' show 'y solo se puede ejecutar con este resultado una vez en el dia' let $mensaje_error = 'Se trato de ejecutar el programa de nuevo en el mismo dia a pesar de haber terminado bien' do Abortar end-if End-Procedure Begin-Procedure Validar_Fecha ($fecha.lo_fecha_proceso.1) if $sep <> '--' and $sep <> '//' let #flag = 0 end-if !JJLAM EL LARGO DEL ANIO DEBE SER $ POR EL ANIO 2000 if #long_anio <> 4 let #flag = 0 end-if End-Procedure *! 36 .Begin-Procedure Analizar_Repeticion Begin-Select lo_estatus &repeticion_unica from cobis.6 let $sep = substr ($fecha.:#flag) !* Valida que el string $fecha sea una fecha de formato MM-DD-YY let #flag = 0 Begin-Select on-error=Error_Fecha dateadd(dd..ba_fecha_cierre.1.ba_sarta where lo_sarta = #w_lote and sa_sarta = #w_lote and sa_producto = fc_producto and lo_secuencial = #w_secuencial and lo_corrida <> #w_corrida and convert(char(10).cobis.ba_fecha_cierre.lo_fecha_proceso...ba_sarta where lo_sarta = #w_lote and sa_sarta = #w_lote and sa_producto = fc_producto and lo_secuencial = #w_secuencial and convert(char(10)..101) End-Select if not isnull(&repeticion_unica) show 'Este programa ya ha sido ejecutado ' show 'y solo se puede ejecutar una vez en el dia' let $mensaje_error = 'Se trato de ejecutar el programa de nuevo en el mismo dia' do Abortar end-if End-Procedure Begin-Procedure Analizar_Una_Repeticion Begin-Select lo_estatus &una_repeticion from cobis.6..101) = convert(char(10).fc_fecha_cierre.101) = convert(char(10).$fecha) let #flag=1 End-Select let #long_anio = length ($fecha) .

el secuencial asignado puede ! ! estar incorrecto ! do Centrar_Show ('Error.ba_batch where ba_batch = #w_programa End-Select Begin-Select count(*) &nro_est sum(lo_num_reg_proc) &ult_reg_proc from cobis.#w_programa.NULL.lo_secuencial.. lo_fecha_inicio.#w_corrida..lo_operador.ba_fecha_cierre where sa_sarta = #w_lote and sa_producto = fc_producto End-SQL End-Procedure 37 . es posible que el secuencial este mal asignado'.lo_fecha_proceso) select #w_lote.ba_log (lo_sarta. NULL..Begin-Procedure Error_Fecha ! Es um manejador de error. no ejecuta ninguna accion End-Procedure Begin-Procedure Inicializar_Corrida let #w_num_reg_proc = 0 let $mensaje_error = 'N' !El mensaje de error seria igual a $sql-error Begin-Select count(*) &existe_prog from cobis.'E'..ba_sarta_batch where sb_sarta = #w_lote and sb_batch = #w_programa and sb_secuencial = #w_secuencial End-Select let #existe_prog = &existe_prog if #existe_prog = 0 ! No existe entrada en el lote-programa.fc_fecha_cierre from cobis.cobis.100) &ba_frec_reg_proc ba_ente_procesado from cobis. &fecha_inicio_log. lo_estatus.lo_batch.$username.#w_secuencial.lo_num_reg_proc.ba_sarta.lo_razon.0) stop end-if Begin-Select ba_nombre ba_tipo_batch isnull(ba_frec_reg_proc.lo_fecha_terminacion..''..ba_log where lo_sarta = #w_lote and lo_batch = #w_programa and lo_secuencial = #w_secuencial and lo_estatus = 'F' !Finalizo correctamente End-Select if &nro_est <> 0 let #nro_reg_prom = &ult_reg_proc / &nro_est else let #nro_reg_prom = 0 end-if Begin-SQL on-error=Clave_Duplicada insert into cobis.lo_corrida.

.Begin-Procedure Clave_Duplicada do Centrar_Show (' Error.0) stop End-Procedure Begin-Procedure Obtener_Parametros !* Selecciona los parametros de este programa y los confirma de ser *! !* necesario *! let $parametros_cobis = '' let #indice_parametros = 0 Begin-Select pa_nombre pa_tipo pa_valor pa_parametro add 1 to #indice_parametros do Asignar_Parametros get $parametro_actual_cobis from Parametros_Programa (#indice_parametros) let $parametros_cobis = $parametros_cobis || $parametro_actual_cobis || '.1) cl !Limpia el area de informacion de corrida !show (20.1) cl !Limpia el area de informacion de corrida ! ACTUALIZACION DEL LOG PARA LOS PARAMETROS RGA 07/10/96 ! Begin-SQL on-error=Abortar update cobis.1) cl !Limpia el area de informacion de corrida !show (19.1) cl !Limpia el area de informacion de corrida !show (18.ba_parametro where pa_sarta = #w_lote and pa_batch = #w_programa and pa_ejecucion = #w_secuencial order by pa_parametro End-Select !show (17.' from cobis. es posible que el numero de corrida ya este registrado'..ba_log set lo_parametro = $parametros_cobis where lo_sarta = #w_lote and lo_batch = #w_programa and lo_secuencial = #w_secuencial and lo_corrida = #w_corrida End-SQL End-Procedure Begin-Procedure Asignar_Parametros !* Asigna los parametros leidos a las variables o permite *! !* que el usuario ingrese los valores *! let $confirmacion = 'Ingrese valor de ' || &pa_nombre || ' ( = ' || &pa_valor || ') ' evaluate &pa_tipo when = 'I' if $w_parametros = 'C' show $confirmacion input $valor_parametro 'Nuevo Valor' type = integer if $valor_parametro = '' let $valor_parametro = &pa_valor end-if put $valor_parametro into Parametros_Programa(#indice_parametros) else put &pa_valor into Parametros_Programa(#indice_parametros) end-if 38 .

4.2) || ! '/' || substr ($valor_parametro.1.ba_log set lo_fecha_terminacion= &fecha_final_log.#validacion_fecha) end-if end-while !let $valor_parametro = substr($valor_parametro.2) put $valor_parametro into Parametros_Programa(#indice_parametros) end-if when = 'C' if $w_parametros = 'C' show $confirmacion input $valor_parametro 'Nuevo Valor' type = char if $valor_parametro = '' let $valor_parametro = &pa_valor end-if put $valor_parametro into Parametros_Programa(#indice_parametros) else put &pa_valor into Parametros_Programa(#indice_parametros) end-if when = 'M' if $w_parametros = 'C' show $confirmacion input $valor_parametro 'Nuevo Valor' type = number if $valor_parametro = '' let $valor_parametro = &pa_valor end-if put $valor_parametro into Parametros_Programa(#indice_parametros) else put &pa_valor into Parametros_Programa(#indice_parametros) end-if end-evaluate End-Procedure Begin-Procedure Finalizar_Corrida Begin-Select on-error=Abortar getdate() &fecha_final_log End-Select Begin-SQL on-error=Abortar update cobis.2) || ! '/' || substr (&pa_valor. lo_estatus = 'F' where lo_sarta = #w_lote and lo_batch = #w_programa and lo_secuencial = #w_secuencial and lo_corrida = #w_corrida End-SQL 39 .2) || ! '/' || substr ($valor_parametro.7.4.2) put $valor_parametro into Parametros_Programa(#indice_parametros) else !let $valor_parametro = substr(&pa_valor. lo_num_reg_proc = #w_num_reg_proc.1.when = 'D' if $w_parametros = 'C' let #validacion_fecha = 0 while #validacion_fecha = 0 show $confirmacion input $valor_parametro 'Nuevo Valor' type = char if $valor_parametro = '' let $valor_parametro = &pa_valor let #validacion_fecha = 1 else do Validar_Fecha ($valor_parametro..2) || ! '/' || substr (&pa_valor.7.

20) '[ ]' ! let #primer_despliege = 1 ! end-if ! let #termometro = trunc(#porcentaje/100*30.0) 40 ..50) #w_num_reg_proc edit 99999 ! if #primer_despliege = 0 ! show (+1.let #fin_corrida = 1 ! Verdadero do Actualizar_Reg_Proc End-Procedure Begin-Procedure Abortar show beep show beep show beep show beep show beep if $modo_debug = 'S' !Modo debug no genera llamadas al log if $mensaje_error = 'N' show $sql-error else show $mensaje_error end-if stop end-if if $mensaje_error = 'N' let $mensaje_error = $sql-error end-if Begin-Select getdate() &fecha_final_log2 End-Select let $mensaje_error_show = ' Error : ' || $mensaje_error show $mensaje_error_show Begin-SQL update cobis.ba_log set lo_fecha_terminacion= &fecha_final_log2.&ba_frec_reg_proc) if #estado_reg_proc = 0 or #fin_corrida = 1 ! Verdadero do Ejecutar_Actualizacion !show (17. lo_razon = $mensaje_error where lo_sarta = #w_lote and lo_batch = #w_programa and lo_secuencial = #w_secuencial and lo_corrida = #w_corrida End-SQL let #return-status = 1 ! Para el sistema operativo stop End-Procedure Begin-Procedure Actualizar_Reg_Proc let #posicion = 10 let #ba_frec_reg_proc = &ba_frec_reg_proc if $modo_debug <> 'S' and #ba_frec_reg_proc <> 0 if #fin_corrida <> 1 !No se trata del final add 1 to #w_num_reg_proc end-if let #estado_reg_proc = mod (#w_num_reg_proc. lo_estatus = 'A'. lo_num_reg_proc = #w_num_reg_proc.20) '# ' &ba_ente_procesado ' EN PROCESO : ' if #nro_reg_prom <> 0 let #porcentaje = (#w_num_reg_proc / #nro_reg_prom) * 100 ! show (17.

$mensaje) end-if End-Procedure Begin-Procedure Verificar_Existencia ($tablas..$cond.$cond.#ind_ter_pos) '=' ! add 1 to #ind_ter ! end-while ! let #posicion = #posicion + 1 else show (17..$mensaje) end-if End-Procedure Begin-Procedure ParamS (#indice.:#variable.cl_filial : $tablas] where [$condicion] End-Select let #nro_reg = &nro_reg if #nro_reg = 0 let $_mensaje_error = $mensaje do Abortar 41 .$tabla.20) '# ' &ba_ente_procesado ' EN PROCESO : ' #w_num_reg_proc edit 99999 end-if end-if end-if End-Procedure Begin-Procedure Ejecutar_Actualizacion Begin-SQL on-error=Abortar update cobis.$cond.$condicion.ba_log set lo_num_reg_proc = #w_num_reg_proc where lo_sarta = #w_lote and lo_batch = #w_programa and lo_secuencial = #w_secuencial and lo_corrida = #w_corrida End-SQL End-Procedure Begin-Procedure ParamN (#indice.$mensaje) get $variable from Parametros_Programa (#indice) let #variable = to_number ($variable) if $tabla <> '' let $cond = $cond || $variable do Verificar_Existencia ($tabla.$cond.$mensaje) get $variable from Parametros_Programa (#indice) if $tabla <> '' let $cond = $cond || '"' || $variable || '"' do Verificar_Existencia ($tabla.!if #termometro > 30 !Se sobrepaso el 100% estadistico ! let #termometro = 30 ! end-if ! let #ind_ter = 1 ! while #ind_ter <= #termometro ! let #ind_ter_pos = #ind_ter + 20 ! show (+1.$tabla.:$variable.$mensaje) let #flag = 0 Begin-Select count(*) &nro_reg from [cobis.

19) else do Centrar_Show ('(No se genero niguna pagina)'. no generar llamdas al log do Finalizar_Corrida end-if if &ba_tipo_batch = 'R' !Se trata de un reporte if #page-count <> 1 or #current-column <> 1 or #w_num_reg_proc <> 0 let $nro_pag = to_char (#page-count) let $msg_show = '(Se generaron ' || $nro_pag || ' paginas)' do Centrar_Show ($msg_show.1.2) let $aux_f = substr ($fecha_f.28) '' End-Procedure Begin-Procedure Nombre_Programa_Fuente (:$nombre) Begin-Select on-error=Abortar ba_arch_fuente &ba_nombre_archivo from cobis.ba_batch 42 .2) || substr ($fecha_i.2) if $aux_i > $aux_f let #flag = 0 end-if End-Procedure Begin-Procedure Centrar_Show ($mensaje.4.0) let #ci = 1 let $espacio = '' while #ci <= #centro let $espacio = $espacio || ' ' add 1 to #ci end-while let $mensaje = $espacio || $mensaje if #fila > 0 show (#fila.4.:#flag) let #flag = 1 let $aux_i = substr ($fecha_i.#fila) !* Centra el $mensaje en la terminal *! let #centro = trunc (({ANCHO_PAN}-length($mensaje))/2.7.1.7.1) $mensaje else show (+1.2) || substr ($fecha_i.2) || substr ($fecha_f.$fecha_f.2) || substr ($fecha_f.1) $mensaje end-if End-Procedure Begin-Procedure Finalizar_Programa !* Finaliza la corrida del programa reinicializando la impresora *! !* de tratarse de un reporte *! let #return-status = 0 ! Para el sistema operativo if $modo_debug <> 'S' !Si modo debug..end-if End-Procedure Begin-Procedure Comparar_Fechas ($fecha_i.19) end-if end-if show (20.

getdate())) &dia_listado substring(convert(char(4).'.datepart(dd..1) .getdate())) &mes_listado convert(char(2)./listados/' || $archivo_fuente || '_' || $fecha_definitiva || '_of' || to_char(#oficina) || '.getdate())) &min_listado End-Select let #pos = instr($archivo_fuente.lis' open 'archivo./listados/' || $archivo_fuente || '_' || to_char(#producto) || '_' || $fecha_definitiva || '_of' || to_char(#oficina) || '..getdate())).2) &ani_listado convert(char(2).3.datepart(yy.#pos) move &mes_listado to $mes_listado '00' move &dia_listado to $dia_listado '00' move &hor_listado to $hor_listado '00' move &min_listado to $min_listado '00' let $fecha_definitiva = $mes_listado || $dia_listado || &ani_listado || '_' || $hor_listado || $min_listado let $nombre_listado = '.'.lis' as 28 for-append record=132:vary !LVC 19980115 write 28 from $nombre_listado !LVC 19980115 close 28 !LVC 19980115 43 .datepart(hh.datepart(yy.getdate())) &mes_listado convert(char(2).1) .getdate())).lis' open 'archivo.1.#producto) do Nombre_Programa_Fuente ($archivo_fuente) Begin-Select convert(char(2).getdate())) &hor_listado convert(char(2).'.where ba_batch = #_w_programa End-Select let $nombre = &ba_nombre_archivo End-Procedure Begin-Procedure Generar_Listado (#oficina) do Nombre_Programa_Fuente ($archivo_fuente) Begin-Select convert(char(2).datepart(hh.'.1 let $archivo_fuente = substr($archivo_fuente.1..ba_log set lo_parametro = lo_parametro + '&' + $nombre_listado where lo_sarta = #_w_lote and lo_batch = #_w_programa and lo_secuencial = #_w_secuencial and lo_corrida = #_w_corrida End-SQL End-Procedure Begin-Procedure Generar_Listado2 (#oficina.datepart(mi.datepart(mm.getdate())) &min_listado End-Select let #pos = instr($archivo_fuente.getdate())) &dia_listado substring(convert(char(4).datepart(mi.2) &ani_listado convert(char(2).getdate())) &hor_listado convert(char(2).datepart(mm.lis' as 28 for-append record=132:vary !LVC 19980115 write 28 from $nombre_listado !LVC 19980115 close 28 !LVC 19980115 new-report $nombre_listado Begin-SQL on-error=Abortar update cobis.1 let $archivo_fuente = substr($archivo_fuente.datepart(dd.3.#pos) move &mes_listado to $mes_listado '00' move &dia_listado to $dia_listado '00' move &hor_listado to $hor_listado '00' move &min_listado to $min_listado '00' let $fecha_definitiva = $mes_listado || $dia_listado || &ani_listado || '_' || $hor_listado || $min_listado let $nombre_listado = '.

.ba_log set lo_parametro = lo_parametro + '&' + $nombre_listado where lo_sarta = #_w_lote and lo_batch = #_w_programa and lo_secuencial = #_w_secuencial and lo_corrida = #_w_corrida End-SQL End-Procedure Begin-Procedure Before_Pagina if #quiebre_pagina_cobis = 1 new-page let #quiebre_pagina_cobis = 0 end-if End-Procedure Begin-Procedure After_Pagina let #quiebre_pagina_cobis = 1 End-Procedure 44 .new-report $nombre_listado Begin-SQL on-error=Abortar update cobis.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->