MANUAL DE REPORTEADOR contpaqi.com Aviso de derechos del propietario Este Manual es una Obra Literaria protegida en favor de Computación en Acción, S.A. de C.V.; Copyright © 20052006 Derechos Reservados © 2005-2006 Computación en Acción, S.A. de C.V., Pablo Villaseñor No. 435, Col. Ladrón de Guevara, Guadalajara, Jalisco, México. C.P. 44600. Los Derechos de este Manual se encuentran reconocidos por la Ley Federal del Derecho de Autor. Se prohíbe su producción, reproducción, publicación, edición o fijación material en copias o ejemplares, por cualquier medio, importación, almacenamiento, transporte, distribución, comercialización, venta o arrendamiento, así como su comunicación y transmisión pública por cualquier medio, su divulgación en cualquier modalidad, su traducción, adaptación, paráfrasis, arreglos, transformaciones u otras similares, sin previa autorización por escrito de su titular. La violación de esta prohibición constituyen un delito y una infracción administrativa que están sancionados conforme a los artículos 424 fracción III, 424 bis fracción I y 424 ter, del Código Penal Federal; así como los artículos 229 fracciones VII y XVI y 231 fracciones I, III, IV y X, de la Ley Federal del Derecho de Autor y demás normas aplicables vigentes. Las marcas COMPUTACIÓN EN ACCIÓN ®, EN ACCIÓN ®, PAQ ® y sus respectivos diseños; la marca y nombre comercial COMPAC ® y su diseño; las marcas ES TIEMPO DE PODER ®, LA CONEXIÓN DE TU NEGOCIO ®, TU NEGOCIO SIEMPRE EN MARCHA ®, SOÑAR. PODER. CRECER. ®; los avisos comerciales “Bien Pensado” ®, “Respuesta Oportuna” ®, y “La Forma más Amigable de Controlar tu Negocio” ®; así como la Imagen del Foquito ®© y del Diseño de la Portada ®©, son signos distintivos registrados y protegidos propiedad de Computación en Acción, S.A. de C.V. AdminPAQ ®©, MegaPAQ ®©, Exión ®©, ContPAQ ®©, CONTPAQ i ®©, CheqPAQ ®©, NomiPAQ ®©, WinPAQ ®©, Solución Contable PAQ ®©, ProduPAQ ®© y VentPAQ ®, también son marcas registradas y protegidas propiedad de Computación en Acción, S.A. de C.V., la que ostenta de igual forma los derechos patrimoniales de autor; con excepción del programa de cómputo que ostenta la marca VentPAQ, cuyos derechos patrimoniales pertenecen a Pacific Soft, Sistemas de Información, S.A. de C.V. Microsoft ®, MS-D.O.S. ®©, WINDOWS ®© y Excel ®©, son marcas y en su caso productos de Microsoft Corporation. Cualquier otra marca que se mencione dentro de este manual que pertenezca a terceras partes tiene solamente propósitos informativos y no constituye aprobación y/o recomendación. Computación en Acción, no se responsabiliza de la ejecución o uso de estos productos. CONTPAQ i® CONTABILIDAD 21220090119 CONTPAQ i® NÓMINAS 11020090119 CONTPAQ i® COMERCIAL 10020131007 Índice INTRODUCCIÓN AL CURSO DE REPORTEADOR DE CONTPAQ i® VISIÓN GENERAL PÁGINA 1 CAPÍTULO 1. INICIO DE UN REPORTE VISIÓN GENERAL PREPARACIÓN PARA LA CREACIÓN DE UN REPORTE EDITOR DE REPORTES DE CONTPAQ i® COMENTARIOS INSTRUCCIÓN COLUMNAS VARIABLES ASIGNACIÓN DE VALORES A UNA VARIABLE INICIALIZACIÓN DE UNA VARIABLE CONSTANTES ARREGLOS DE DATOS PÁGINA 1-1 1-2 1-5 1-8 1-9 1-10 1-11 1-12 1-13 1-14 CAPÍTULO 2. INSTRUCCIONES DE SALIDA VISIÓN GENERAL INSTRUCCIÓN LISTA INSTRUCCIONES TEXTO E IMPRIME INSTRUCCIÓN IMPRIME LABORATORIO 1 PÁGINA 2-1 2-2 2-4 2-6 2-7 CAPÍTULO 3. CICLOS Y CONDICIONES VISIÓN GENERAL INSTRUCCIÓN SI INSTRUCCIÓN CASO INSTRUCCIÓN MIENTRAS PÁGINA 3-1 3-2 3-4 3-5 CAPÍTULO 4. ACCESO A LAS BASES DE DATOS VISIÓN GENERAL CONEXIÓN A LA BASE DE DATOS CONSULTAS DE SQL LABORATORIO 2 PÁGINA 4-1 4-2 4-4 4-7 CAPÍTULO 5. INSTRUCCIONES DE ENTRADA VISIÓN GENERAL INSTRUCCIÓN PARAMETROS INSTRUCCIÓN CONTROL CONTROL CTRLCODIGO CONTROL CTRLCHECKBOX CONTROL CTRLCODIGONUMERO CONTROL CTRLFECHA CONTROL CTRLLISTA PÁGINA 5-1 5-2 5-4 5-5 5-7 5-9 5-11 5-13 Continúa en la siguiente página Índice, Continuación CAPÍTULO 5. INSTRUCCIONES DE ENTRADA CONTINÚA CONTROL CTRLRADIO CONTROL CTRLNUMERO CONTROL CTRLOPCION CONTROL CTRLREAL CONTROL CTRLVACIO CONTROL CTRLTEXTO PARÁMETRO DEPENDENCIA LABORATORIO 3 PÁGINA 5-15 5-17 5-19 5-21 5-23 5-25 5-27 5-30 CAPÍTULO 6. FUNCIONES VISIÓN GENERAL UTILIZACIÓN DE LAS FUNCIONES DEL REPORTEADOR CREACIÓN DE FUNCIONES INSTRUCCIÓN INCLUYE LABORATORIO 4 PÁGINA 6-1 6-2 6-3 6-5 6-6 CAPÍTULO 7. FORMATO VISIÓN GENERAL ALINEACIÓN DEL TEXTO FUNCIONES DE FORMATO LISTA DE FUNCIONES DE FORMATO INSTRUCCIÓN ENCAB LABORATORIO 5 PÁGINA 7-1 7-2 7-3 7-4 7-5 7-6 APÉNDICE A SENTENCIAS BÁSICAS EN SQL PARA REPORTES Tipos de sentencias en SQL Sentencias básicas PÁGINA A-2 A-3 APÉNDICE B ACTUALIZACIÓN DE REPORTES DE ADMINPAQ VISIÓN GENERAL CAMBIO DE INSTRUCCIONES EN CONTPAQ i® EJEMPLO. ACTUALIZACIÓN DE UN REPORTE PÁGINA B-1 B-2 B-4 APÉNDICE C CASOS ESPECIALES VISIÓN GENERAL REPORTES EN EXCEL® REPORTES SENSIBLES REPORTES EN CONTPAQ I® NÓMINAS PÁGINA C-1 C-2 C-7 C-12 Introducción al curso de Reporteador de CONTPAQ i® Visión General Introducción El Reporteador de CONTPAQ i® es un lenguaje de programación creado por CONTPAQ i® que fue desarrollado para la creación de nuevos reportes y modificación de los ya existentes en: • • • • Objetivos CONTPAQ i® CONTABILIDAD CONTPAQ i® BANCOS CONTPAQ i® NÓMINAS CONTPAQ i® COMERCIAL Los objetivos de este manual son que el participante: • • • Conozca el lenguaje de Reporteador de CONTPAQ i®. Tenga los conocimientos necesarios para la modificación de los reportes existentes dentro de CONTPAQ i® CONTABILIDAD, CONTPAQ i® BANCOS, CONTPAQ i® NÓMINAS y CONTPAQ i® COMERCIAL. Sea capaz de crear un reporte nuevo para extraer la información de CONTPAQ i® CONTABILIDAD, CONTPAQ i® BANCOS, CONTPAQ i® NÓMINAS y CONTPAQ i® COMERCIAL a la medida de sus necesidades. Perfil del asistente Los asistentes al curso de Reporteador deberán tener conocimientos básicos de programación, bases de datos y sentencias de SQL. Estructura del curso El curso de Reporteador está planeado de tal manera que conforme vaya avanzando en los capítulos se desarrollará un reporte paso a paso. Al término de algunos capítulos se realizará un laboratorio en el cual se irá construyendo un reporte. Cada laboratorio tiene relación con el anterior de tal forma que al finalizar el curso se tendrá un reporte terminado. Página 1 Computación en Acción, S.A. de C.V. Derechos Reservados® Capítulo 1 Inicio de un reporte Visión General Introducción En este capítulo se describen los pasos iniciales y las instrucciones principales necesarias para comenzar con el desarrollo de un reporte. Objetivos Al término de este capítulo el participante conocerá: • • • • • • • En este capítulo Algunos conceptos básicos previos al desarrollo de un reporte. Cómo abrir el Editor de reportes de CONTPAQ i®. Cómo abrir y guardar reportes. La forma de compilar y ejecutar reportes. Cómo agregar comentarios a un reporte. Cómo definir el número y tamaño de columnas para el reporte. El manejo de las variables en Reporteador. Este capítulo contiene los siguientes temas: Tema VISIÓN GENERAL PREPARACIÓN PARA LA CREACIÓN DE UN REPORTE EDITOR DE REPORTES DE CONTPAQ i® COMENTARIOS INSTRUCCIÓN COLUMNAS VARIABLES ASIGNACIÓN DE VALORES A UNA VARIABLE INICIALIZACIÓN DE UNA VARIABLE CONSTANTES ARREGLOS DE DATOS Inicio de un reporte Página 1-1 Página 1-1 1-2 1-5 1-8 1-9 1-10 1-11 1-12 1-13 1-14 Computación en Acción, S.A. de C.V. Derechos Reservados® Preparación para la creación de un reporte Puntos previos Antes de comenzar con el desarrollo de un reporte considera los siguientes puntos: • • • (1) Ten a la mano el documento “Estructura de la Base de Datos”. Ten instalado instalado el sistema en la computadora en la que se desarrollará el reporte. De preferencia una instalación Monousuario para poder utilizar la herramienta depuración.N Se sugiere contar con alguna herramienta que pueda abrir bases de datos de SQL (por ejemplo: Microsoft® SQL MANAGEMENT STUDIO) con el fin tener acceso a estas. Es gratuito y podrás descargarlo de: http://www.microsoft.com/downloads/details.aspx?familyid=C243A5AE-4BD1-4E3D-94B85A0F62BF7796&displaylang=es • • • • • • El lenguaje de Reporteador no hace distinción entre mayúsculas y minúsculas. Los nombres de los campos y las tablas no se acentúan. Describe las instrucciones utilizando comentarios. Usa tabuladores para identificar bloques (en ciclos, funciones, condiciones, etcétera.) Maneja nombres descriptivos en variables. Termina el reporte con una línea en blanco (Da un <Enter> después de la última instrucción). (1) Puedes acceder a este documento desde el grupo de programas del sistema, subgrupo Ayuda. Archivos RPT y RTW Cuando trabajes con Reporteador de CONTPAQ i® encontrarás dos tipos de archivos: unos son extensión .RPT y otros son extensión .RTW Archivo .RPT .RTW Descripción También conocidos como archivos fuente, son los que contienen las instrucciones creadas por el programador. Estos archivos son de tipo texto. Este archivo se crea al compilar el archivo fuente (RPT), y contiene el código máquina que será interpretado por el reporteador de CONTPAQ i® para mostrar el reporte. MiReporte.RPT Compila No Sí ¿Error de sintaxis? MiReporte.RTW Línea de error Continúa en la siguiente página Computación en Acción, S.A. de C.V. Derechos Reservados® Página 1-2 Inicio un reporte Preparación para la creación de un reporte, Continuación Ubicación de los reportes • Los reportes existentes (tanto los archivos fuentes .RPT como los ejecutables .RTW) se ubican en el servidor en las siguientes rutas: Sistema CONTPAQ i® CONTABILIDAD CONTPAQ i® BANCOS CONTPAQ i® NÓMINAS CONTPAQ i® COMERCIAL Ruta <C:\Compac\Empresas\Reportes\Contpaq> <C:\Compac\Empresas\Reportes\Bancos> <C:\Compac\Empresas\Reportes\Nominas> <C:\Compac\Empresas\Reportes\Comercial> • Los reportes propios se recomienda guardarlos en la carpeta Mis Reportes ubicada dentro de cada una de las carpetas anteriores. Al hacer esto los reportes aparecerán automáticamente en el menú Reportes, opción Mis Reportes. Nota: Si se generan subcarpetas dentro de la carpeta Mis Reportes las subcarpetas aparecerán como submenús. Respaldar reportes Importante: realiza un respaldo de los reportes que hayas desarrollado, copia los archivos .RPT y .RTW de tus reportes en un lugar seguro. Si deseas realizar una modificación a un reporte ya existente se sugiere realizar una copia del reporte original, modificar el reporte y hacer un respaldo del RPT y RTW modificado, ya que si reinstalas el sistema, se sobre-escribirá el reporte y perderás los cambios. Pasos para crear un reporte Para crear un reporte nuevo es necesario que siga los siguientes pasos: Paso Acción 1 Define los campos (columnas) que se requieren en el reporte. 2 Ubica en qué tablas dentro de la base de datos se encuentran los campos requeridos. Desarrolla la consulta de SQL en el Managment Studio. 3 5 Desarrolla el código fuente desde el Editor de reportes incluyendo la consulta de SQL. Guarda el archivo RPT en el servidor. 6 Compila el archivo RPT (Generar archivo RTW). 7 Prueba el reporte ejecutándolo desde el editor de reportes. 8 Una vez terminado el reporte lo podrás ejecutar desde el menú Reportes opción Mis Reportes. 4 Nota: Estos pasos se verán a detalle a lo largo del curso. Continúa en la siguiente página Inicio de un reporte Página 1-3 Computación en Acción, S.A. de C.V. Derechos Reservados® Preparación para la creación de un reporte, Continuación Reglas en el orden de las instrucciones Cada programador tiene su propia forma de estructurar el código para desarrollar el reporte, sin embargo hay ciertas reglas que se deben respetar en el orden en que aparecen las instrucciones en el código fuente. A continuación se listan dichas reglas: • • • Estructura de un reporte Define las columnas antes del inicio del cuerpo del reporte (ve el tema Instrucción columnas en la página 1-9). Declara una función antes del llamado de la misma (ve el capítulo Funciones página 6-1). Abre la empresa y las tablas antes de hacer llamados a las mismas. Pide parámetros antes de desplegar los datos del reporte. A continuación se lista un orden sugerido para la estructura de un reporte: 1. Descripción del reporte. Escribe en comentarios los datos generales del reporte como el nombre del reporte, fecha de elaboración, quién lo elaboró, etcétera. 2. Conexión a la BDD. Crea la conexión a la base de datos de la empresa. 3. Librerías. Define las librerías de funciones externas a utilizar dentro del reporte. 4. Parámetros. Crea la ventana de filtros del reporte. 4.1 Consulta de SQL para crear parámetros. En ocasiones es necesario crear una consulta de SQL para crear la ventana de filtros. 4.2 Crear parámetros. Define la ventana de filtros del reporte. 5. Funciones. Crea las definiciones de las funciones a utilizar en el reporte. 6. Cuerpo. Estructura principal del reporte. 6.1 Columnas. Define cuántas columnas tendrá el reporte y sus tamaños. 6.2 Título. Título del reporte, título de cada columna. 6.3 Crear Consulta principal en SQL. Declara la consulta principal en SQL para extraer la información del reporte. 6.4 Ejecutar la consulta principal de SQL. Se ejecuta la consulta creada en el punto 6.3. 7 Desplegar datos de la consulta. Despliega en pantalla la información de la consulta. Nota: Las instrucciones se verán a detalle conforme se avance en el curso. Computación en Acción, S.A. de C.V. Derechos Reservados® Página 1-4 Inicio un reporte Editor de reportes de CONTPAQ i® Introducción El Editor de Reportes es una herramienta que permite crear nuevos reportes o editar los ya existentes. Para abrir el Editor de reportes: • Funciones del Editor Menú En CONTPAQ i® CONTABILIDAD y CONTPAQ i® COMERCIAL ve al menú Reportes opción Editor de Reportes. A continuación se describen las funciones el Editor de Reportes: Archivo Nuevo Teclas rápidas <Ctrl+ N> Archivo Abrir <Ctrl+O> Abre un reporte existente. Archivo Guardar <Ctrl+S> Guarda el RPT que se tiene abierto. Archivo Archivo Guardar Como Imprimir Permite guardar el archivo RPT con un nombre diferente. Imprime el código fuente. Archivo Salir Sale del editor de reportes. Edición Edición Edición Deshacer Rehacer Cortar <Ctrl+Z> <Ctrl+Y> <Ctrl+X> Deshace el último cambio generado en el código. Rehace el último cambio generado en el código. Corta el texto previamente seleccionado. Edición Copiar <Ctrl+C> Copia el texto previamente seleccionado. Edición Pegar <Ctrl+V> Pega el texto previamente cortado o copiado. Edición Edición Edición Edición Generar Buscar Bookmark Next bookmark Ir a… Generar archivo RTW Ejecutar reporte <Ctrl+F> <Ctrl+B> <F2> <Ctrl+L> Buscar un texto dentro del código. Agrega una marca en la línea de código actual. Se desplaza a la siguiente marca dentro del código. Permite saltar a una línea de código específica. Compila el archivo RPT actual (genera el archivo RTW). Generar Ayuda Comando Acerca del Editor de Reportes Inicio de un reporte Botón Acción Crea un nuevo reporte. Ejecuta el reporte actual. Muestra información general del Editor de Reportes como la versión. Página 1-5 Computación en Acción, S.A. de C.V. Derechos Reservados® Comentarios Introducción Los comentarios permiten agregar un bloque de texto que será ignorado por el compilador. De esta manera se pueden describir las instrucciones del código fuente para facilitar la comprensión del mismo. Nota: Dentro del Editor de reportes los comentarios aparecen en color verde claro. Cómo insertar un comentario La forma de agregar comentarios en Reporteador es insertando dos diagonales // antes del bloque de texto que se requiere sea ignorado por el compilador. O también es posible comentar un bloque de instrucciones, comenzando con /* y terminando con */. Comentario Se puede agregar un comentario al inicio de una línea A la derecha de una línea de código Comentar todo un bloque de instrucciones Computación en Acción, S.A. de C.V. Derechos Reservados® Ejemplo // Reporte Catálogo Productos // Elaborado por: Marco Muñoz // Fecha: 23/Mayo/2013 Texto vTotales // Imprime los totales. Imprime /* Reporte Catálogo de productos Elaborado por: Marco Antonio Muñoz Fecha: 23/Mayo/2013 */ Página 1-6 Inicio un reporte Instrucción Columnas Introducción La instrucción columnas sirve para definir el número y tamaño de columnas que contendrá el reporte. Todo reporte deberá tener esta instrucción a fin de mostrar datos en pantalla; por lo tanto es recomendable que esta instrucción sea la primera en declararse dentro del cuerpo del reporte. Esta instrucción se puede utilizar varias veces dentro del reporte. Por lo que es posible redefinir el tamaño y número de columnas dentro de un mismo reporte. La instrucción aplicará de donde se define en adelante o hasta que se vuelva a definir otra instrucción columnas. Sintaxis COLUMNAS NumColumnas;Ancho1,Ancho2,…,AnchoN Parámetros A continuación se muestra la descripción de los parámetros: Parámetro Se refiere a Es el número de columnas del reporte Ancho de la columna 1 en centímetros Ancho de la columna 2 en centímetros Ancho de la columna N en centímetros NumColumnas Ancho1 Ancho2 AnchoN Ejemplo // Esta instrucción define 4 columnas, la 1ra de 10 cm, la 2da de 2.5 cm, la 3ra de 4 cm, y la //última de 1 cm. Columnas 4;10,2.5,4,1 ---------- 10 cm ---------- - 2.5 cm - ---- 4 cm -------- 1cm TAMAÑO DE LAS ÚLTIMAS COLUMNAS Si no especifica el tamaño de todas las columnas se tomará por omisión el tamaño de la última. Ejemplo: Columnas 5;2,3 // La primera columna será de 2 centímetros el resto será de 3 cms. TAMAÑO DE COLUMNAS CONTIGUAS En el caso de tener columnas contiguas del mismo tamaño se podrá utilizar la siguiente sintaxis Ejemplo: Columnas 5;4*2,3 // Las primeras 4 columnas serán de 2 centímetros, la última de 3 cms. Inicio de un reporte Página 1-7 Computación en Acción, S.A. de C.V. Derechos Reservados® Variables Introducción Una variable es un espacio en memoria que se designa para almacenar cualquier valor temporal. Aplicación de las variables Las variables permiten almacenar valores que posteriormente se podrán utilizar para hacer cálculos aritméticos, comparaciones, guardar parámetros de entrada del usuario, etcétera. Ejemplos A continuación se muestran algunos ejemplos de la utilización de variables: Aplicación Guardar datos Cálculos aritméticos Comparaciones Ejemplo vNombreCuenta = 'Activo' vTotal = vSubtotal + vIVA vPeriodoFinal > vPeriodoInicial NOMENCLATURA EN VARIABLES Las variables pueden llevar cualquier nombre pero se sugiere agregar un prefijo a las variables y a las tablas para su fácil ubicación dentro del código. A continuación se muestran algunas sugerencias. Dato Tabla Variables globales Parámetros Función Variables locales Argumentos Computación en Acción, S.A. de C.V. Derechos Reservados® Nomenclatura Anteponer una ‘t’ Anteponer una ‘g’ Anteponer una ‘p’ Anteponer una ‘f’ Anteponer una ‘l’ Anteponer una ‘a’ Página 1-8 Ejemplo tProductos gMoneda pIdioma fBuscaProductos lContador aCodigo Inicio un reporte Asignación de valores a una variable Introducción En Reporteador solo hay un tipo de variable en la que es posible almacenar tanto valores de texto como valores numéricos. Es importante hacer la distinción entre un valor de texto y un numérico, ya que al hacer la comparación ambos tendrán que ser del mismo tipo. En el capítulo Funciones se verán las funciones de conversión de texto a numérico y viceversa. Importante: Todos los valores de texto en Reporteador se anotan entre apóstrofes sencillos (‘). Sintaxis vNombreVariable = Dato Parámetros A continuación se muestra la descripción de los parámetros: Parámetro vNombreVariable Dato Ejemplos Se refiere a Nombre de la variable Dato a almacenar, puede ser un dato numérico, de texto u otra variable. A continuación se muestran algunos ejemplos en la asignación de variables: Tipo de dato Texto Descripción de la variable vNombreCuenta = 'Activo' Resultado: La variable vNombreCuenta tendrá almacenado el dato de texto ‘Activo’ Numérico vTotalPeriodo = 2300 Resultado: La variable vNombreCuenta tendrá almacenado el dato numérico 2300, con el cuál se podrán realizar operaciones aritméticas Booleano vImprimeDetalle = True vImprimeDetalle = False Resultado: La variable vImprimeDetalle recibe el valor True (verdadero). También puede asignarse False (falso) Igualar variables vPeriodoIni = vPeriodoFin Resultado: A la variable vPeriodoIni se le asigna el mismo valor de la variable vPeriodoFin Concatenar cadenas Para concatenar cadenas de texto se utiliza &. Ejemplo: vSaludo = 'Hola' vSaludo = vSaludo & 'Mundo' Inicio de un reporte Página 1-9 Computación en Acción, S.A. de C.V. Derechos Reservados® Inicialización de una variable Introducción En Reporteador no es necesario hacer la declaración de una variable, sin embargo se sugiere inicializarlas antes de utilizarlas; la inicialización se hace en vacío o en 0 dependiendo del uso que le vaya a dar a la misma. Descripción A continuación se describe la sintaxis para la inicialización de una variable: Sintaxis vNombreVariable = 0 vNombreVariable = ' ' Ejemplos Se refiere a Si es valor numérico Si es valor de texto (espacio entre apóstrofes) vNombreProducto = ' '// Se inicializa la variable en vacío ya //que almacenará un dato tipo texto. vTotalPeriodo = 0 // Se inicializa la variable en 0 ya que //almacenará un dato tipo numérico. Computación en Acción, S.A. de C.V. Derechos Reservados® Página 1-10 Inicio un reporte Constantes Introducción Las constantes se definen para hacer referencia con un nombre a un valor numérico, facilitando así la programación. Sintaxis CONSTANTE NombreConstante NumeroConstante Descripción A continuación se describe la sintaxis para la inicialización de una variable: Sintaxis NombreConstante Se refiere a Nombre con el que se identificará la constante. Valor que se asignará a la constante NumeroConstante Ejemplos Inicio de un reporte CONSTANTE PI 3.1416 CONSTANTE MESES 12 CONSTANTE DIAS 7 Página 1-11 Computación en Acción, S.A. de C.V. Derechos Reservados® Arreglos de datos Introducción En las variables se puede asignar un dato por variable (como se vio anteriormente), o se pueden almacenar varios datos en una misma variable. El número de datos a almacenar por variable dependerá del número de columnas que se hayan declarado. A esta modalidad se le conoce como arreglo de datos. Sintaxis vNombreVariable[índice] = Dato Parámetros A continuación se muestra la descripción de los parámetros: Parámetro vNombreVariable Índice Se refiere a Nombre de la variable Número del índice, los índices comienzan en 0 Dato a almacenar, puede ser un dato numérico, de texto o booleano. Dato Ejemplo // Ejemplo de arreglo de datos // Elaboró: Marco A. Muñoz Columnas 4;2,3,1,2 // Inicializa un reporte con 4 columnas por lo tanto las variables tendrán 4 //índices comenzando del índice 0 al 3. vMiVariable[0] = ‘Total’ // Asigna un valor de texto en la casilla 0 de la variable vMiVariable vMiVariable[1] = ‘Del’ // Asigna un valor de texto en la casilla 1 de la variable vMiVariable vMiVariable[2] = ‘Periodo’ // Asigna un valor de texto en la casilla 2 de la variable vMiVariable vMiVariable[3] = 12 // Asigna un valor numérico en la casilla 3 de la variable vMiVariable En memoria tendrá lo siguiente: vMiVariable 0 1 Total Del 2 Periodo 3 12 SINTAXIS ALTERNA Es posible utilizar la siguiente sintaxis alterna para la asignación de valores a variables: vMiVariable = ‘Total’[c0] // Asigna el texto ‘Total’ en la casilla 0 de la variable. Computación en Acción, S.A. de C.V. Derechos Reservados® Página 1-12 Inicio un reporte Capítulo 2 Instrucciones de Salida Visión General Introducción En este capítulo se describen las instrucciones de salida las cuales sirven para mostrar datos en pantalla. Objetivos Al término de este capítulo el participante conocerá: • • • Instrucciones de salida Las instrucciones de salida que se utilizan en Reporteador son: • • En este capítulo Cómo desplegar etiquetas y títulos. Cómo mostrar los valores almacenados en variables. Cómo desplegar el valor de los registros. Lista Texto e Imprime Este capítulo contiene los siguientes temas: Tema Visión General Instrucción Lista Instrucciones Texto e Imprime Instrucción Imprime Laboratorio 1 Instrucciones de Salida Página 2-1 Página 2-1 2-2 2-4 2-6 2-7 Computación en Acción, S.A. de C.V. Derechos Reservados® Instrucción Lista Introducción La instrucción Lista sirve para mostrar datos en pantalla; pueden ser valores de texto, numéricos o de registros almacenados en la base de datos. Esta función se aconseja utilizarla para mostrar datos extraídos de registros de la base de datos, para desplegar valores numéricos y valores de variables. Después de llamar a la función Lista automáticamente se da un salto a la siguiente línea en pantalla. Sintaxis A continuación se muestra la sintaxis de la instrucción: Sintaxis Lista ‘Dato1’,’Dato2’,’Dato3’ Lista vMiVariable Parámetros A continuación se muestra la descripción de los parámetros: Parámetro ‘Dato1,’Dato2’,’Dato3’ vMiVariable Ejemplo 1 Resultado Despliega datos de texto Despliega los datos almacenados en la variable vMiVariable Se refiere a El texto ‘Dato1’ aparecerá en la primera columna. ‘Dato2’ en la segunda columna. ‘Dato3’ en la tercera columna. La variable que contiene los datos a desplegar en pantalla // Ejemplo de instrucción Lista // Elaboró: Marco A. Muñoz Columnas 3;2,3,2 Lista 'Código','Nombre','Precio' 0 Código 1 Nombre 2 Precio Continúa en la siguiente página Computación en Acción, S.A. de C.V. Derechos Reservados® Página 2-2 Instrucciones de Salida Instrucción Lista, Continuación Ejemplo 2 // Ejemplo de instrucción Lista // Elaboró: Marco A. Muñoz Columnas 3;2,3,2 vMiVariable[0] = 'Código' vMiVariable[1] = 'Nombre' vMiVariable[2] = 'Precio' Lista vMiVariable 0 Código Instrucciones de Salida 1 Nombre Página 2-3 2 Precio Computación en Acción, S.A. de C.V. Derechos Reservados® Instrucciones Texto e Imprime Introducción La instrucción Texto sirve para desplegar un dato en una columna específica. Generalmente se utiliza para desplegar datos tipo texto, de ahí su nombre. Esta instrucción a diferencia de la instrucción Lista permite asignar los valores a desplegar de las columnas en desorden, por ejemplo: es posible asignar primeramente el valor a desplegar en la columna 3 y después en la 1. La instrucción Imprime muestra en pantalla los datos previamente asignados en cada una de las instrucciones Texto y da un salto a la siguiente línea en pantalla. Importante: Siempre se deberá utilizar la instrucción Imprime después de un grupo de instrucciones Texto, ya que esta instrucción es la que muestra la información en pantalla, si no se incluye esta instrucción no aparecerá nada en pantalla. Sintaxis 1 Texto C0;’Mensaje en la primera columna’ Texto C1;’Mensaje en la segunda columna’ … Texto CN; ’Mensaje en la N columna’ Imprime Parámetros A continuación se muestra la descripción de los parámetros: Parámetro C0 ‘Mensaje en la primera columna’ C1 ‘Mensaje en la segunda columna’ CN ‘Mensaje en la N columna’ Imprime Ejemplo 1 Se refiere a La primera columna El mensaje que se imprimirá en la primera columna La segunda columna El mensaje que se imprimirá en la segunda columna La columna N El mensaje que se imprimirá en la N columna Imprime los datos asignados en las instrucciones Texto // Ejemplo de instrucción Texto e Imprime // Elaboró: Marco A. Muñoz Texto C3;12 Texto C1;'Del' Texto C0;'Total' Texto C2;'Periodo' Imprime 0 Total 1 Del 2 Periodo 3 12 Continúa en la siguiente página Computación en Acción, S.A. de C.V. Derechos Reservados® Página 2-4 Instrucciones de Salida Instrucciones Texto e Imprime, Continuación Sintaxis 2 Texto <posicionCentímetros>;’Mensaje’ Imprime Parámetros A continuación se muestra la descripción de los parámetros: Parámetro <posicionCentímetros> Se refiere a Posición en centímetros dónde comenzará a desplegarse el Mensaje El mensaje que se imprimirá en pantalla Imprime el mensaje asignado en la instrucción Texto ‘Mensaje’ Imprime Ejemplo 2 // El siguiente ejemplo imprime el mensaje ‘Detalle” a partir del centímetro 10 además el texto abarcará la totalidad de las columnas de ser necesario. Texto 10;'Detalle' Imprime Sintaxis 3 Texto ’Mensaje’ Imprime Parámetros A continuación se muestra la descripción de los parámetros: Parámetro Se refiere a El mensaje que se imprimirá en pantalla, abarcará todas las columnas de ser necesario. Imprime el mensaje asignado en la instrucción Texto ‘Mensaje’ Imprime Ejemplo 3 //En caso de no especificar el parámetro de la columna se asumirá que el texto abarcará la //totalidad de las columnas de ese renglón. Esta modalidad generalmente se utiliza en los //títulos del reporte (nombre del reporte, nombre de la empresa, etcétera.) Texto 'Balance general a 12 periodos detallado' Imprime 0 1 2 3 Balance general a 12 periodos detallado Alinear texto En la siguiente tabla se muestra cómo alinear el texto: Sintaxis Texto C0;'Mensaje' Texto C0;'^Mensaje' Texto C0;'"Mensaje' Instrucciones de Salida Descripción Alinea el mensaje a la izquierda de la columna Centra el mensaje en la columna Alinea el mensaje a la derecha de la columna anteponiendo comillas dobles antes del texto. Página 2-5 Computación en Acción, S.A. de C.V. Derechos Reservados® Instrucción Imprime Introducción Es posible utilizar la instrucción Imprime para mostrar en pantalla los datos de una variable Sintaxis vVariable[0] = dato0 vVariable[1] = dato1 … vVariable[N] = datoN Imprime vVariable Ejemplo lRenglon[0] = ‘Código’ lRenglon[1] = ‘Nombre’ lRenglon[2] = ‘Precio’ Imprime lRenglon 0 Código Computación en Acción, S.A. de C.V. Derechos Reservados® 1 Nombre Página 2-6 2 Precio Instrucciones de Salida Laboratorio 1 Introducción En el siguiente laboratorio tomarás como base un reporte de Catálogo Clientes para crear un Catálogo Productos, adjuntarás un título al mismo así como el título de cada una de las columnas. Objetivos En el siguiente laboratorio pondrá en práctica: • • • El manejo del Editor de reportes. Compilación y ejecución de reportes. Manejo de las funciones de salida. A continuación se describen los pasos del laboratorio: Paso 1 Ejercicio 2 3 4 Ejercicio Ingresa al Editor de Reportes de CONTPAQ i® COMERCIAL. Para esto, ingresa al menú Reportes opción Editor de Reportes. Ve al menú Archivo opción Abrir y abre el archivo Base_Lab1. Guarda el archivo con el nombre Productos_Lab1. Modifica el reporte de la siguiente forma: • 5 Cambia la descripción del reporte indicando que será un reporte de Catálogo Productos. • Define 3 Columnas de 3, 9 y 3 cm respectivamente. • Pon el título del reporte “CATÁLOGO PRODUCTOS”. • Pon los títulos de las columnas: CÓDIGO, PRODUCTO, PRECIO”. Guarda, compila y ejecuta el reporte. GUARDAR REPORTES Recuerda que puedes guardar el reporte presionando el icono herramientas. de la barra de COMPILAR REPORTES Recuerda que puedes compilar el reporte presionando el icono herramientas. EJECUTAR REPORTES Recuerda que puedes ejecutar el reporte presionando el icono herramientas. de la barra de de la barra de AGREGAR REPORTES EN EL MENÚ DEL SISTEMA Recuerda que al guardar el reporte en la ruta: <C:\Compac\Empresas\Reportes\<sistema>\Mis Reportes> El reporte aparecerá en el menú Reportes opción Mis Reportes dentro del sistema. Continúa en la siguiente página Instrucciones de Salida Página 2-7 Computación en Acción, S.A. de C.V. Derechos Reservados® Laboratorio 1, Continuación Resultado El reporte deberá quedar como se muestra a continuación: Computación en Acción, S.A. de C.V. Derechos Reservados® Página 2-8 Instrucciones de Salida Capítulo 3 Ciclos y Condiciones Visión General Introducción En este capítulo verá como hacer ciclos y condicionar la ejecución de instrucciones. Objetivos Al término de este capítulo conocerá como: • • En este capítulo Repitan una serie de instrucciones dentro de un ciclo. Condicionar la ejecución de instrucciones. Este capítulo contiene los siguientes temas: Tema VISIÓN GENERAL INSTRUCCIÓN SI INSTRUCCIÓN CASO INSTRUCCIÓN MIENTRAS Ciclos y Condiciones Página 3-1 Página 3-1 3-2 3-4 3-5 Computación en Acción, S.A. de C.V. Derechos Reservados® Instrucción Si Instrucción Con esta instrucción podrá condicionar la ejecución de otras instrucciones, de tal manera, que si la primera condición no se cumple, podrá pasar a otra condición. Sintaxis Si <condición> // Instrucciones que se ejecutarán si la condición es verdadera Sino // Instrucciones que se ejecutarán si la condición es falsa FinSi Parámetros A continuación se muestra la descripción de los parámetros: Parámetro <condición> Comparadores Los posibles comparadores que es posible utilizar en las condiciones son los siguientes: Comparador = != ! > < >= <= Operadores lógicos Se refiere a El resultado de una comparación, los valores posibles son verdadero o falso. Si es verdadero se ejecutan las instrucciones dentro del bloque comprendido entre Si…Sino. Si la condición es falsa se ejecutarán las instrucciones comprendidas dentro del bloque entre Sino… FinSi Ejemplo a=b a != b !a a>b a<b a >= b a <= b Descripción Compara si “a” es igual que “b” Compara si “a” es diferente que “b” Compara si no es “a” Compara si “a” es mayor que “b” Compara si “a” es menor que “b” Compara si “a” es mayor o igual que “b” Compara si “a” es menor o igual que “b” Los posibles comparadores que es posible utilizar en las condiciones son los siguientes: Operador Y Ejemplo (a > b) Y (a < c) O (a > b) O (a < c) Descripción Compara si “a” es mayor que “b” Y si “a” es menor que “c” Compara si “a” es mayor que “b” O si “a” es menor que “c” Continúa en la siguiente página Computación en Acción, S.A. de C.V. Derechos Reservados® Página 3-2 Ciclos y Condiciones Instrucción Si, Continuación Ejemplo // Ejemplo 1 de una condición. Si vEdad >= 18 Lista ‘Mayor de edad’ SiNo Lista ‘Menor de edad’ FinSi // Ejemplo 2. Es posible prescindir del “Sino” y utilizar únicamente el bloque Si...FinSi Si vImprime = True // Imprime datos FinSi SOLO CONDICIÓN VERDADERA Es posible utilizar la instrucción Si...FinSi, excluyendo el bloque Sino. Ejemplo: // Si la condición se cumple se ejecutan las instrucciones de la condición, si no se cumplen no se ejecutan. Si vEdad >= 18 Lista ‘Mayor de Edad’ FinSi Ciclos y Condiciones Página 3-3 Computación en Acción, S.A. de C.V. Derechos Reservados® Instrucción Caso Instrucción Con esta instrucción podrá condicionar la ejecución de instrucciones dependiendo del valor de una variable. Sintaxis Escoge vOpcion Caso <Valor1> // Instrucciones que se ejecutarán si la variable vOpcion = <Valor1> FinCaso Caso <Valor2> // Instrucciones que se ejecutarán si la variable vOpcion = <Valor1> FinCaso Caso <ValorN> // Instrucciones que se ejecutarán si la variable vOpcion = <ValorN> FinCaso FinEscoge Parámetros A continuación se muestra la descripción de los parámetros: Parámetro Se refiere a La variable que se evaluará en los casos. Caso si la variable vOpcion = Valor1 Caso si la variable vOpcion = Valor2 Caso si la variable vOpcion = ValorN vOpcion <Valor1> <Valor2> <ValorN> Ejemplo // Ejemplo de caso. // Elaboró: Marco A. Muñoz Escoge vPais Caso ‘México’ VNacionalidad = ‘mexicano’ FinCaso Caso ‘Estados Unidos’ VNacionalidad = ‘estadounidense’ FinCaso Caso ‘Francia’ VNacionalidad = ‘francés’ FinCaso FinEscoge Computación en Acción, S.A. de C.V. Derechos Reservados® Página 3-4 Ciclos y Condiciones Instrucción Mientras Introducción Cuando necesite que algunas instrucciones sean ejecutadas hasta que encuentre el dato que cumpla con una condición dada, podrá utilizar la instrucción Mientras. En esta instrucción la condición se evalúa antes de ejecutarse el ciclo. Sintaxis Mientras <condición> // instrucciones a repetir mientras la condición sea verdadera FinMientras Parámetros A continuación se muestra la descripción de los parámetros: Parámetro <condición> Comparadores Los posibles comparadores que es posible utilizar en las condiciones son los siguientes: Comparador = != ! > < >= <= Operadores lógicos Ejemplo Se refiere a El resultado de una comparación, los valores posibles son verdadero o falso. Si es verdadero se ejecutan las instrucciones dentro del ciclo, cuando la condición es falsa sale del ciclo, y continúa con la ejecución de la siguiente instrucción. Ejemplo a=b a != b !a a>b a<b a >= b a <= b Descripción Compara si “a” es igual que “b” Compara si “a” es diferente que “b” Compara si no es igual a “a” Compara si “a” es mayor que “b” Compara si “a” es menor que “b” Compara si “a” es mayor o igual que “b” Compara si “a” es menor o igual que “b” Los posibles comparadores que es posible utilizar en las condiciones son los siguientes: Operador Y Ejemplo (a > b) Y (a < c) O (a > b) O (a < c) Descripción Compara si “a” es mayor que “b” Y si “a” es menor que “c” Compara si “a” es mayor que “b” O si “a” es menor que “c” // Ejemplo de un ciclo mientras. // Elaboró: Marco A. Muñoz // Este ejemplo mostrará en pantalla el valor de la variable vContador desde 1 hasta 5 vContador = 1 Mientras vContador <= 5 Lista vContador vContador = vContador + 1 FinMientras Continúa en la siguiente página Ciclos y Condiciones Página 3-5 Computación en Acción, S.A. de C.V. Derechos Reservados® Instrucción Mientras, Continuación Continua La instrucción Continua se utiliza dentro de un Mientras combinado con una Condición Si, si la condición se cumple ya no se ejecuta el resto de las instrucciones dentro del ciclo Mientras. Se puede utilizar para discriminar registros y ya no ejecutar el resto de las instrucciones del ciclo. Sintaxis Mientras <condición 1> // instrucciones a repetir mientras la condición 1 sea verdadera Si <condición 2> // instrucciones a ejecutar si se cumple la condición 2 Continua FinSi // instrucciones a repetir mientras la condición 2 sea falsa FinMientras Ejemplo En el siguiente ciclo se recorren todos los documentos y se verifica con una condición si el saldo de los documentos es menor a 0.01, si esta condición es cierta ya no se ejecuta el resto de instrucciones del ciclo y continua ejecutándose el ciclo desde el inicio. Mientras tDocumentos->Encontro // Se verifica para no imprimir documentos saldados. Si gSaldoDocto < 0.01 tDocumentos.Busca Siguiente Continua Finsi // Resto de instrucciones del ciclo FinMientras Computación en Acción, S.A. de C.V. Derechos Reservados® Página 3-6 Ciclos y Condiciones Capítulo 4 Acceso a las Bases de Datos Visión General Introducción En este capítulo se describe el proceso de conexión a la base de datos de la empresa con el fin de extraer información almacenada en el sistema. Objetivos Al término de este capítulo conocerá como: • • • En este capítulo Hacer la conexión a la empresa. Abrir una tabla de la base de datos de la empresa. Hacer búsquedas de registros en tablas. Este capítulo contiene los siguientes temas: Tema VISIÓN GENERAL CONEXIÓN A LA BASE DE DATOS CONSULTAS DE SQL LABORATORIO 2 Acceso a las Bases de Datos Página 4-1 Página 4-1 4-2 4-4 4-7 Computación en Acción, S.A. de C.V. Derechos Reservados® Conexión a la Base de Datos Introducción La conexión a las bases de datos se realiza de dos formas dependiendo el sistema que se utilizará. Sistema CONTPAQ i® CONTABILIDAD CONTPAQ i® BANCOS CONTPAQ i® NÓMINAS CONTPAQ i® COMERCIAL Instrucción UsaEmpresa UsaEmpresa Conexion Conexion Enseguida se muestran ejemplos de conexión en cada sistema: CONTPAQ i® CONTABILIDAD // La siguiente línea establece una conexión a la empresa //activa de CONTPAQ i® CONTABILIDAD: UsaEmpresa tEmpresa;'contpaqw1.00' CONTPAQ i® BANCOS // La siguiente línea establece una conexión a la empresa //activa de CONTPAQ i® BANCOS: UsaEmpresa tEmpresa;'contpaqw1.00' CONTPAQ i® NÓMINAS // Las siguientes líneas establecen una conexión a la empresa //activa de CONTPAQ i® NÓMINAS. Para este sistema se requieren //2 conexiones: la primera es a las tablas de la empresa y la //segunda a las tablas generales. // Se establece una conexión a las tablas de la empresa Conexion conexionNomipaq = Conexion.crear('jdbc:jtds:sqlserver://' & @parametroConsola('Servidor') & '/'& @parametroConsola('NombreEmpresa') &';instance='& @parametroConsola('Instancia'),@parametroConsola('NombreUsuari o'),@parametroConsola('Clave')) // Se establece una conexión a las tablas generales Conexion conexionNomipaq2 = Conexion.crear('jdbc:jtds:sqlserver://' & @parametroConsola('Servidor') & '/nomGenerales;instance='& @parametroConsola('Instancia'),@parametroConsola('NombreUsuari o'),@parametroConsola('Clave')) Continúa en la siguiente página Computación en Acción, S.A. de C.V. Derechos Reservados® Página 4-2 Acceso a las Bases de Datos Conexión a la Base de Datos, Continuación CONTPAQ i® COMERCIAL (Sistema) // El siguiente ejemplo establece una conexión a la base de //datos de una empresa de CONTPAQ i COMERCIAL. // Este código se utiliza con los reportes que ya se incluyen //en el sistema. gServidor gInstancia gUsuarioSQL gClaveSQL = = = = @parametroConsola('Servidor') @parametroConsola('Instancia') @parametroConsola('NombreUsuario') @parametroConsola('Clave') Conexion tEmpresa = Conexion.crear('jdbc:jtds:sqlserver:' & gServidor & ';instance=' & gInstancia,gUsuarioSQL,gClaveSQL) CONTPAQ i® COMERCIAL (Editor) // El siguiente ejemplo establece una conexión a la base de //datos de una empresa de CONTPAQ i COMERCIAL. // Este código se utiliza con los reportes que se están //probando en el Editor de reportes, se pasan los parámetros //de forma manual: Nombre del servidor, Instancia, Usuario de //SQL y Contraseña de SQL. gServidor gInstancia gUsuarioSQL gClaveSQL = = = = '//localhost/adROJA' 'COMPAC' 'sa' 'COMPAC' Conexion tEmpresa = Conexion.crear('jdbc:jtds:sqlserver:' & gServidor & ';instance=' & gInstancia,gUsuarioSQL,gClaveSQL) Acceso a las Bases de Datos Página 4-3 Computación en Acción, S.A. de C.V. Derechos Reservados® Consultas de SQL Introducción La instrucción consulta ejecuta una sentencia de SQL y regersa el valor en una tabla temporal. Sintaxis vConsulta = ‘ConsultaSQL’ Consulta tMiConsulta = tEmpresa[vConsulta] Mientras tMiConsulta->Encontro Lista tTabla(‘Campo’) tMiConsulta.Busca Siguiente FinMientras Parámetros A continuación se muestra la descripción de los parámetros: Parámetro vConsulta ‘ConsultaSQL’ tMiConsulta tEmpresa Mientras tMiConsulta>Encontro FinMientras tTabla(‘Campo’) tMiConsulta.Busca Siguiente Ejemplo Se refiere a Variable donde se guardará la sentencia SELECT de SQL. Sentencia SELECT de SQL. Variable tabla donde se almacenará el resultado de la consulta. Variable empresa utilizda en la instrucción Conexion. Este ciclo repite el grupo de instrucciones comprendidas entre “Mientras y FinMientras” por cada uno de los registros de la consulta. Imprime el campo del registro actual. Al realizar consultas de este tipo, los campos del resultado de la consulta se escribirán entre apóstrofes. Esta instrucción salta al siguiente registro de la consulta. // Se asigna la consulta de SQL en la variable qProductos qProductos = 'SELECT cCodigoProducto, cNombreProducto, cPrecio1 FROM admProductos' // Se ejecuta la consulta almacenada en la variable qProductos //el resultado se almacena en tMiConsulta Consulta tMiConsulta = tEmpresa[qProductos] // Se despliegan los datos de la consulta, nota que los //nombres de los campos van entre //apóstrofes Mientras tMiConsulta->Encontro // Se despliegan los campos del registro actual en //pantalla Lista tMiConsulta('cCodigoProducto'), tMiConsulta('cNombreProducto'), tMiConsulta('cPrecio1') // Se salta al siguiente registro tMiConsulta.Busca Siguiente FinMientras Continúa en la siguiente página Computación en Acción, S.A. de C.V. Derechos Reservados® Página 4-4 Acceso a las Bases de Datos Consultas de SQL, Continuación Crear la consulta en el SQL Se recomienda crear primero la consulta en el SQL Server Management Studio, probar que funcione correctamente aquí y después copiar la consulta al reporteador. Copiar consulta a reporteador Después de haber creado la consulta en SQL Server Management Studio para copiarla utiliza una variable en reporteador y ve concatenándole cada renglón teniendo en cuenta lo siguiente: • • • • • Ejemplo de copiado de consulta SQL Crea una variable donde se guardará la consulta. Concatena a esta variable cada renglón de la consulta. Cada renglón de la consulta deberá ir entre apóstrofes. Deja un espacio en blanco al final de cada renglón antes del apóstrofe. Si en la consulta de SQL existe un apóstrofe ‘, en reporteador se deberá escribir como \’. Ejemplo de código en SQL: SELECT cCodigoProducto, cNombreProducto, cPrecio1, cPrecio2, cPrecio3, cPrecio4, cPrecio5, cPrecio6, cPrecio7, cPrecio8, cPrecio9, cPrecio10 FROM admProductos Al copiar el código de SQL a Reporteador quedará así: qMiConsulta = ‘SELECT cCodigoProducto, cNombreProducto, ‘ qMiConsulta = qMiConsulta & ‘cPrecio1, cPrecio2, cPrecio3, cPrecio4, ‘ qMiConsulta = qMiConsulta & ‘cPrecio5, cPrecio6, cPrecio7, cPrecio8, ‘ qMiConsulta = qMiConsulta & ‘cPrecio9, cPrecio10 ‘ qMiConsulta = qMiConsulta & ‘FROM admProductos ‘ En la variable qMiConsulta se irá concatenando cada renglón de la consulta Copia cada renglón entre apóstrofes Deja un espacio en blanco antes de cerrar el apóstrofe Continúa en la siguiente página Acceso a las Bases de Datos Página 4-5 Computación en Acción, S.A. de C.V. Derechos Reservados® Consultas de SQL, Continuación Apóstrofe en consultas Si en la consulta de SQL existe un apóstrofe ‘, en reporteador se deberá escribir como \’. Ejemplo: En la siguiente consulta se muestran diferentes casos dependiendo el tipo de cliente: 1=Cliente, 2=Cliente-Proveedor, 3=Proveedor. Consulta en SQL: SELECT CRAZONSOCIAL, CASE WHEN CTIPOCLIENTE=1 THEN 'Cliente' WHEN CTIPOCLIENTE=2 THEN 'Cliente-Proveedor' WHEN CTIPOCLIENTE=3 THEN 'Proveedor' END AS TIPO FROM admClientes Consulta en Reporteador: qProductos qProductos qProductos qProductos qProductos qProductos qProductos qProductos Computación en Acción, S.A. de C.V. Derechos Reservados® = = = = = = = = 'SELECT CRAZONSOCIAL, CASE WHEN CTIPOCLIENTE=1 ' qProductos & 'THEN \'Cliente\' ' qProductos & 'WHEN CTIPOCLIENTE=2 ' qProductos & 'THEN \'Cliente-Proveedor\' ' qProductos & 'WHEN CTIPOCLIENTE=3 ' qProductos & 'THEN \'Proveedor\' ' qProductos & 'END AS TIPO ' qProductos & 'FROM admClientes ' Página 4-6 Acceso a las Bases de Datos Laboratorio 2 Introducción En el siguiente laboratorio se creará la conexión a la base de datos y una consulta a la tabla Productos. Objetivos En el siguiente laboratorio se pone en práctica como: • • • Hacer una conexión a una empresa de CONTPAQ i® COMERCIAL. Hacer una consulta de SQL. Desplegar cada uno de los registros de la consulta de SQL. A continuación se muestran los pasos para realizar el laboratorio: Ejercicio Paso 1 2 Ejercicio Abre el archivo Base_Lab2 y guardálo como Productos_Lab2. En la sección 2. Conexión a la BDD haz lo siguiente: • • 3 Quita los comentarios del código que hace la conexión a la BDD. Modifica los parámetros (servidor, instancia, usuario, clave) para que coincidan con los de tu pc. En la sección 6. Consulta SQL haz lo siguiente: • • 4 Quita los comentarios de la línea donde se crea la consulta. Modifica la consulta para que extraiga el Código, Nombre y Precio 1 de la tabla Productos. En la sección 7. Desplegar datos de la consulta haz lo siguiente: • • 5 Resultado Quita los comentarios del ciclo Mientras. Modifica el código para que despliegue los campos Código, Nombre y Precio 1 de la tabla Productos. Guarda, compila y ejecuta el reporte. El reporte deberá quedar como se muestra a continuación: Acceso a las Bases de Datos Página 4-7 Computación en Acción, S.A. de C.V. Derechos Reservados® Capítulo 5 Instrucciones de Entrada Visión General Introducción En este capítulo se describen las instrucciones que permiten pedir datos al usuario. Objetivos Al término de este capítulo conocerás: • • En este capítulo La forma de crear una ventana de filtros. Los diferentes controles que se pueden incluir en la ventana de filtros. Este capítulo contiene los siguientes temas: Tema VISIÓN GENERAL INSTRUCCIÓN PARAMETROS INSTRUCCIÓN CONTROL CONTROL CTRLCODIGO CONTROL CTRLCHECKBOX CONTROL CTRLCODIGONUMERO CONTROL CTRLFECHA CONTROL CTRLLISTA CONTROL CTRLRADIO CONTROL CTRLNUMERO CONTROL CTRLOPCION CONTROL CTRLREAL CONTROL CTRLVACIO CONTROL CTRLTEXTO PARÁMETRO DEPENDENCIA LABORATORIO 3 Instrucciones de Entrada Página 5-1 Página 5-1 5-2 5-4 5-5 5-7 5-9 5-11 5-13 5-15 5-17 5-19 5-21 5-23 5-25 5-27 5-30 Computación en Acción, S.A. de C.V. Derechos Reservados® Instrucción Parametros Introducción Esta instrucción permite configurar la ventana Filtros que aparecerá antes de ejecutar el reporte. Toma en cuenta que los filtros: • • • • • • Aparecerán en pares (de dos en dos). Pueden acomodarse por hojas que se visualizarán en la ventana como pestañas y cada pestaña puede tener su propio título. Para conservar un acomodo estético se puede utilizar un parámetro vacío cuando quiera que el filtro aparezca solo. Pueden tener mensajes de ayuda que retroalimenten al usuario del reporte. Pueden incluir código para validar que la información que captura o selecciona el usuario cumpla con alguna regla y darle retroalimentación al usuario con un mensaje de alerta. Por ejemplo, validar cierta información para habilitar, o no, otro filtro. En ocasiones se utilizan consultas de SQL para leer el primer y último registro de un catálogo y mostrarlos por omisión en los filtros. Sintaxis Parametros Titulo <Titulo de la ventana de parámetros> Pagina <Titulo de la pestaña de la página> Parametro pParametroReceptor = <valor por omisión> Captura Titulo <Título del parámetro> Ayuda <Mensaje de ayuda> Control <Nombre control> <Parámetros del control> FinCaptura FinPagina FinParametros Parámetros A continuación se muestra la descripción de los parámetros: Parámetro <Titulo de la ventana de parámetros> <Titulo de la pestaña de la página> PParametroReceptor <valor por omisión> <Título del parámetro> Se refiere a El título que aparecerá en la ventana de filtros. El título de la pestaña de filtros. Nombre de la variable que recibirá el parámetro seleccionado por el usuario. El valor que aparece por omisión en la ventana filtros. Nombre de la etiqueta que identifica al parámetro. Es posible agregar un acceso rápido si se antepone un & a una letra del título y accederlo presionando las teclas <ALT + la letra>. Ejemplo: &Diario Se tendrá acceso presionando <ALT + D> Mensaje que aparecerá al posicionarse en el campo del parámetro. Control a utilizar para el parámetro (vea instrucción control). Parámetros propios del control (vea instrucción control). <Mensaje de ayuda> <Nombre control> <Parámetros del control> Continúa en la siguiente página Computación en Acción, S.A. de C.V. Derechos Reservados® Página 5-2 Instrucciones de Entrada Instrucción Parametros, Continuación Ejemplo // Ejemplo del uso de la instrucción parámetros // Elaboró: Marco A. Muñoz Es posible ampliar el tamaño de la ventana Parámetros dejando espacios en el Título del primer control. Parametros Titulo 'Configuración de Tipos de Cambio ' Pagina 'Principal' Parametro pTipoCambio = 11 Captura Titulo 'Tipo de Cambio' Ayuda 'Seleccione el tipo de cambio' Control CtrlReal Decimales 4 FinCaptura FinPagina FinParametros Resultado Instrucciones de Entrada El resultado del ejemplo en pantalla será el siguiente: Página 5-3 Computación en Acción, S.A. de C.V. Derechos Reservados® Instrucción Control Introducción Esta instrucción permite definir un control para aceptar un dato de entrada, dentro de la función parámetros. Lista de controles A continuación se muestra la lista de controles: Nombre del control CtrlCheckbox CtrlCodigo CtrlCodigoNumero CtrlFecha CtrlLista CtrlNumero CtrlOpcion CtrlRadio CtrlReal CtrlVacio CtrlTexto Computación en Acción, S.A. de C.V. Derechos Reservados® Descripción del control Muestra una casilla que puede marcarse o desmarcarse, según convenga. Muestra campos de código, respetando la mascarilla de la cuenta, acompañados del botón <F3> que permite realizar búsquedas. Muestra campos de código con formato numérico, acompañados del botón <F3> que permite realizar búsquedas. Muestra campos con formato fecha, acompañados con un botón de despliegue de un calendario. Muestra una lista de selección con los valores específicos en ella. Muestra un campo numérico con un control que permite aumentar o disminuir la cantidad, o bien, capturarla directamente. Permite seleccionar uno o más elementos del apartado de la izquierda al enviarlos al apartado de la derecha. Muestra dos o más casillas de opción única. Permite la captura de un número real. Por omisión muestra 4 decimales. Deja en blanco el espacio destinado a uno de los filtros de la ventana para darle un mejor acomodo a los filtros. Muestra una caja de texto para permitir capturar una cadena de texto. Página 5-4 Instrucciones de Entrada Control CtrlCodigo Introducción Muestra campos de código, respetando la mascarilla de la cuenta, acompañados del botón <F3> que permite realizar búsquedas. Sintaxis Parametros Titulo <‘Titulo parametros’> Pagina <‘Titulo pagina’> Parametro pCodigo1 = ‘00000000000’ Captura Titulo <'Titulo de la etiqueta'> Ayuda <'Información de ayuda'> Control CtrlCodigo Mascarilla;’Tabla’;’CampoF3’ Valida <=;pCodigo2; <’Mensaje de error de validación’> FinCaptura FinPagina FinParametros Parámetros A continuación se muestra la descripción de los parámetros: Parámetro pCodigo1 ‘00000000000’ Valida PCodigo2 Mascarilla ‘Tabla’ ‘CampoF3’ Ejemplo Se refiere a Esta variable será la que recibirá el código 1 de la cuenta seleccionada por el usuario Valor por omisión Instrucción para validar la cuenta seleccionada por el usuario. Parámetro contra el que se comparará el parámetro pCodigo1 Mascarilla a mostrar. Nombre de la tabla de dónde se extraerá el código. Campo a desplegar en la ventana además del código. // Ejemplo de Control CtrlCodigo // Elaboró: Marco A. Muñoz Consulta tDelProducto = tEmpresa ['SELECT cCodigoProducto, cNombreProducto FROM admProductos WHERE cIdProducto <> 0 ORDER BY cCodigoProducto'] Consulta tAlProducto = tEmpresa ['SELECT cCodigoProducto, cNombreProducto FROM admProductos WHERE cIdProducto <> 0 ORDER BY cCodigoProducto'] Consulta tAlProductoFinal = tEmpresa ['SELECT TOP 1 cCodigoProducto FROM admProductos WHERE cIdProducto <> 0 ORDER BY cCodigoProducto DESC'] Continúa en la siguiente página Instrucciones de Entrada Página 5-5 Computación en Acción, S.A. de C.V. Derechos Reservados® Control CtrlCodigo, Continuación Ejemplo (Continúa) Parametros Titulo 'Listado de Productos, Paquetes, Servicios' Pagina '&1 Principal' Parametro pProductoInicial = tDelProducto('cCodigoProducto') Captura Titulo 'Artículo Inicial:' Ayuda 'Seleccione el Producto, Servicio o Paquete Inicial:' Control CtrlCodigo '30';'Código';'Nombre del Producto' Datos Origen tDelProducto('cNombreProducto');tDelProducto('cCodigoProducto') FinDatos Valida <=; pProductoFinal; 'El código del artículo inicial debe ser menor que el final' FinCaptura Parametro pProductoFinal = tAlProductoFinal('cCodigoProducto') Captura Titulo 'Artículo Final:' Ayuda 'Seleccione el Producto, Servicio o Paquete Final' Control CtrlCodigo '30';'Código';'Nombre del Producto' Datos Origen tAlProducto('cNombreProducto');tAlProducto('cCodigoProducto') FinDatos Valida >=; pProductoInicial; 'El código del artículo final debe ser mayor que el inicial' FinCaptura FinPagina FinParametros Resultado El resultado del ejemplo en pantalla será el siguiente: Computación en Acción, S.A. de C.V. Derechos Reservados® Página 5-6 Instrucciones de Entrada Control CtrlCheckbox Introducción Este control muestra una casilla que puede marcarse o desmarcarse según convenga. Sintaxis Parametros Titulo <‘Titulo parametros’> Pagina <‘Titulo pagina’> Parametro pParametroReceptor = <booleano> Captura Titulo <'Titulo de la etiqueta'> Ayuda <'Información de ayuda'> Control CtrlCheckBox FinCaptura FinPagina FinParametros Parámetros A continuación se lista la descripción de los parámetros: Parámetro pParametroReceptor Se refiere a Esta variable será la que recibirá el valor seleccionado por el usuario y puede ser cualquiera de los siguientes: Marca Casilla desmarcada Casilla marcada <booleano> Valor de la variable 0 1 Este dato puede tener los siguientes valores: Valores posibles True False Resultado Marca la casilla por omisión Desmarca la casilla por omisión Puede ser un valor booleano regresado por una función. Continúa en la siguiente página Instrucciones de Entrada Página 5-7 Computación en Acción, S.A. de C.V. Derechos Reservados® Control CtrlCheckbox, Continuación Ejemplo // Ejemplo del uso del control CtrlCheckBox // Elaboró: Marco A. Muñoz Columnas 4;2,3,1,3 Usaempresa tEmpresa;'Contpaq i' Parametros Titulo 'Filtro Parámetros' Pagina 'Principal' Parametro pDetalle = false Captura Titulo 'Imprimir detalle' Ayuda 'Selecciona si el reporte es detallado o no' Control CtrlCheckBox FinCaptura FinPagina FinParametros Resultado El resultado del ejemplo en pantalla será el siguiente: Computación en Acción, S.A. de C.V. Derechos Reservados® Página 5-8 Instrucciones de Entrada Control CtrlCodigoNumero Introducción Muestra campos de código, con formato numérico, acompañados del botón <F3> que permite realizar búsquedas. Sintaxis Parametros Titulo <‘Titulo parametros’> Pagina <‘Titulo pagina’> Parametro pNumero1 = <Numero> Captura Titulo <'Titulo de la etiqueta'> Ayuda <'Información de ayuda'> Control CtrlCodigoNumero <Mascarilla>;<Tabla>;<busca por> Valida <=;pNumero2; <’Mensaje de error de validación’> FinCaptura FinPagina FinParametros Parámetros A continuación se muestra la descripción de los parámetros: Parámetro pNumero1 <Numero> Valida PNumero2 <Mascarilla> <Tabla> <Busca por> Se refiere a Esta variable será la que recibirá el código 1 de la cuenta seleccionada por el usuario Valor por omisión Instrucción para validar la entrada seleccionada por el usuario. Parámetro contra el que se comparará el parámetro pNumero1 Mascarilla de la cadena. Nombre de la tabla a abrir Nombre del campo por medio del cual se realizará la búsqueda Continúa en la siguiente página Instrucciones de Entrada Página 5-9 Computación en Acción, S.A. de C.V. Derechos Reservados® Control CtrlCodigoNumero, Continuación Ejemplo // Ejemplo de Control CtrlCodigoNumero // Elaboró: Marco A. Muñoz Columnas 4;2,3,1,3 usaempresa tEmpresa;'Contpaq i' Parametros Titulo 'Titulo Parámetros' Pagina 'Principal' Parametro pDiarioDel = ' 1' Captura Titulo 'Diario &inicial' Ayuda 'Selecciona el diario inicial a imprimir' Control CtrlCodigoNumero '10';'DiariosEspeciales';'Nombre' Valida <=;pDiarioAl;'No puede ser mayor que el rango final' FinCaptura Parametro pDiarioAl = ' 10' Captura Titulo 'Diario &final' Ayuda 'Selecciona el diario final a imprimir' Control CtrlCodigoNumero '10';'DiariosEspeciales';'Nombre' Valida >=;pDiarioDel;'No puede ser menor que el rango inicial' FinCaptura FinPagina FinParametros Resultado El resultado del ejemplo en pantalla será el siguiente: Computación en Acción, S.A. de C.V. Derechos Reservados® Página 5-10 Instrucciones de Entrada Control CtrlFecha Introducción Muestra campos con formato fecha, acompañados con un botón de despliegue de un calendario. Mostrará el formato de la fecha conforme a lo establecido en la Redefinición de la Empresa. Sintaxis Parametros Titulo <‘Titulo parametros’> Pagina <‘Titulo pagina’> Parametro pFecha1 = ‘aaaammdd’ Captura Titulo <'Titulo de la etiqueta'> Ayuda <'Información de ayuda'> Control CtrlFecha Valida <=;pFecha2; <’Mensaje de error de validación’> FinCaptura FinPagina FinParametros Parámetros A continuación se muestra la descripción de los parámetros: Parámetro pFecha1 ‘aaaammdd’ Valida PFecha2 Se refiere a Esta variable será la que recibirá la fecha seleccionada por el usuario Fecha en formato aaaammdd Instrucción para validar la entrada seleccionada por el usuario. Fecha contra la que se compara el parámetro pFecha1 Continúa en la siguiente página Instrucciones de Entrada Página 5-11 Computación en Acción, S.A. de C.V. Derechos Reservados® Control CtrlFecha, Continuación Ejemplo // Ejemplo de control de fechas CtrlFecha // Elaboró: Marco A. Muñoz Columnas 4;2,3,1,3 usaempresa tEmpresa;'Contpaq i' Parametros Titulo 'Titulo Parámetros' Pagina 'Principal' Parametro pFechaIni = '20060101' Captura Titulo 'Fecha &inicial' Ayuda 'Selecciona la fecha inicial' Control CtrlFecha Valida <=;pFechaFin;'No puede ser mayor que la fecha final' FinCaptura Parametro pFechaFin = '20061231' Captura Titulo 'Fecha &final' Ayuda 'Selecciona la fecha final' Control CtrlFecha Valida >=;pFechaIni;'No puede ser menor que la fecha inicial' FinCaptura FinPagina FinParametros Resultado El resultado del ejemplo en pantalla será el siguiente: Computación en Acción, S.A. de C.V. Derechos Reservados® Página 5-12 Instrucciones de Entrada Control CtrlLista Introducción Muestra una lista de selección con los valores especificados en ella. Sintaxis Parametros Titulo <‘Titulo parametros’> Pagina <‘Titulo pagina’> Parametro pParametro = <Valor por omisión> Captura Titulo <'Titulo de la etiqueta'> Ayuda <'Información de ayuda'> Control CtrlLista Datos ‘Dato1’;<Valor1>;’Dato2’,<Valor2>;…,’DatoN’,<ValorN> FinDatos FinCaptura FinPagina FinParametros Parámetros A continuación se muestra la descripción de los parámetros: Parámetro pParametro Dato1 <Valor1> Dato2 <Valor2> DatoN <ValorN> Se refiere a Esta variable será la que recibirá el elemento de la lista seleccionado por el usuario. Texto del primer valor de la lista Valor que se asignará a pParametro si se selecciona la opción ‘Dato1’ de la lista Texto del segundo valor de la lista Valor que se asignará a pParametro si se selecciona la opción ‘Dato2’ de la lista Texto del N valor de la lista Valor que se asignará a pParametro si se selecciona la opción ‘DatoN’ de la lista Continúa en la siguiente página Instrucciones de Entrada Página 5-13 Computación en Acción, S.A. de C.V. Derechos Reservados® Control CtrlLista, Continuación Ejemplo // Ejemplo de control lista CtrlLista // Elaboró: Marco A. Muñoz UsaEmpresa tEmpresa;'Contpaq i' UsaTabla tEjercicios = tEmpresa['Ejercicios'] Parametros Titulo 'Titulo Parámetros' Pagina 'Principal' Parametro pIdEjercicio = 0 Captura Titulo 'Ejercicio' Ayuda 'Seleccione el ejercicio' Default tEmpresa->IdEjercicioActual Control CtrlLista Datos Origen tEjercicios(Ejercicio);tEjercicios(Id) FinDatos FinCaptura FinPagina FinParametros Resultado El resultado del ejemplo en pantalla será el siguiente: Computación en Acción, S.A. de C.V. Derechos Reservados® Página 5-14 Instrucciones de Entrada Control CtrlRadio Introducción Muestra dos o más casillas de opción única. Sintaxis Parametros Titulo <‘Titulo parametros’> Pagina <‘Titulo pagina’> Parametro pParametro = <Valor por omisión> Captura Titulo <'Titulo de la etiqueta'> Ayuda <'Información de ayuda'> Control CtrlRadio Datos ‘Dato1’;<Valor1>;’Dato2’,<Valor2>;…,’DatoN’,<ValorN> FinDatos FinCaptura FinPagina FinParametros Parámetros A continuación se muestra la descripción de los parámetros: Parámetro pParametro Dato1 <Valor1> Dato2 <Valor2> DatoN <ValorN> Se refiere a Variable donde se almacenará el valor del dato seleccionado. Texto del primer valor de la lista Valor que se asignará a pParametro si se selecciona la opción ‘Dato1’ de la lista Texto del segundo valor de la lista Valor que se asignará a pParametro si se selecciona la opción ‘Dato2’ de la lista Texto del N valor de la lista Valor que se asignará a pParametro si se selecciona la opción ‘DatoN’ de la lista Continúa en la siguiente página Instrucciones de Entrada Página 5-15 Computación en Acción, S.A. de C.V. Derechos Reservados® Control CtrlRadio, Continuación Ejemplo // Ejemplo de control de radio CtrlRadio // Elaboró: Marco A. Muñoz Columnas 4;2,3,1,3 usaempresa tEmpresa;'Contpaq i' Parametros Titulo 'Titulo Parámetros' Pagina 'Principal' Parametro pOrden = 0 Captura Titulo 'Ordenar por' Ayuda 'Selecciona el orden de impresión' Control CtrlRadio Datos 'Código de Cuenta';1;'Nombre de Cuenta';2 FinDatos FinCaptura FinPagina FinParametros Resultado El resultado del ejemplo en pantalla será el siguiente: Computación en Acción, S.A. de C.V. Derechos Reservados® Página 5-16 Instrucciones de Entrada Control CtrlNumero Introducción Muestra un campo numérico entero con un control que permite aumentar o disminuir la cantidad, o bien, capturarla directamente. Sintaxis Parametros Titulo <‘Titulo parametros’> Pagina <‘Titulo pagina’> Parametro pNumero1 = <Valor por omisión> Captura Titulo <'Titulo de la etiqueta'> Ayuda <'Información de ayuda'> Control CtrlNumero Valida <= ; pNumero2 ; <’Mensaje de error de validación’> FinCaptura FinPagina FinParametros Parámetros A continuación se muestra la descripción de los parámetros: Parámetro pNumero1 Se refiere a Esta variable será la que recibirá el número seleccionado por el usuario. Continúa en la siguiente página Instrucciones de Entrada Página 5-17 Computación en Acción, S.A. de C.V. Derechos Reservados® Control CtrlNumero, Continuación Ejemplo // Ejemplo de control número CtrlNumero // Elaboró: Marco A. Muñoz Columnas 4;2,3,1,3 usaempresa tEmpresa;'Contpaq i' Parametros Titulo 'Titulo Parámetros' Pagina 'Principal' Parametro pNivelDel = 1 Captura Titulo 'Nivel &del' Ayuda 'Selecciona el nivel inicial' Control CtrlNumero Rango 1,10 CambiaAlSalir pNivelAl = pNivelDel Valida <=;pNivelAl; 'No puede ser mayor que el rango final' FinCaptura Parametro pNivelAl = 1 Captura Titulo 'Nivel &al' Ayuda 'Selecciona el nivel final' Control CtrlNumero Rango 1,10 Valida >=;pNivelDel; 'No puede ser menor que el rango inicial' FinCaptura FinPagina FinParametros Resultado El resultado del ejemplo en pantalla será el siguiente: Computación en Acción, S.A. de C.V. Derechos Reservados® Página 5-18 Instrucciones de Entrada Control CtrlOpcion Introducción Permite seleccionar uno o más elementos del apartado de la izquierda al enviarlos al apartado de la derecha. Sintaxis Parametros Titulo <‘Titulo parametros’> Pagina <‘Titulo pagina’> Parametro pListaSeleccionada = <Valor por omisión> Captura Titulo <'Titulo de la etiqueta'> Ayuda <'Información de ayuda'> Control CtrlOpcion Datos ‘Dato1’;<Valor1>;’Dato2’,<Valor2>;…,’DatoN’,<ValorN> FinDatos FinCaptura FinPagina FinParametros Parámetros A continuación se muestra la descripción de los parámetros: Parámetro pListaSeleccionada Dato1 <Valor1> Dato2 <Valor2> DatoN <ValorN> Se refiere a Variable donde se almacenará la lista de opciones seleccionada. Texto del primer valor de la lista Valor que se asignará a pParametro si se selecciona la opción ‘Dato1’ de la lista Texto del segundo valor de la lista Valor que se asignará a pParametro si se selecciona la opción ‘Dato2’ de la lista Texto del N valor de la lista Valor que se asignará a pParametro si se selecciona la opción ‘DatoN’ de la lista Continúa en la siguiente página Instrucciones de Entrada Página 5-19 Computación en Acción, S.A. de C.V. Derechos Reservados® Control CtrlOpcion, Continuación Ejemplo // Ejemplo de control de opciones CtrlOpcion // Elaboró: Marco A. Muñoz Columnas 4;2,3,1,3 usaempresa tEmpresa;'Contpaq i' Parametros Titulo 'Titulo Parámetros' Pagina 'Principal' Parametro pTipoPolizas = 0 Captura Titulo 'Tipos de pólizas' Ayuda 'Selecciona los tipos de pólizas' Control CtrlOpcion Datos 'Diario';0;'Ingresos';1;'Egresos';2;'Orden';3 FinDatos FinCaptura FinPagina FinParametros Resultado El resultado del ejemplo en pantalla será el siguiente: Computación en Acción, S.A. de C.V. Derechos Reservados® Página 5-20 Instrucciones de Entrada Control CtrlReal Introducción Permite la captura de un número real. Sintaxis Parametros Titulo <‘Titulo parametros’> Pagina <‘Titulo pagina’> Parametro pParametro = <Valor por omisión> Captura Titulo <'Titulo de la etiqueta'> Ayuda <'Información de ayuda'> Control CtrlReal Decimales <Número de decimales> FinCaptura FinPagina FinParametros Parámetros A continuación se muestra la descripción de los parámetros: Parámetro pParametro <Número de decimales> Se refiere a Variable donde se almacenará el número real. Número de decimales que tendrá el parámetro Continúa en la siguiente página Instrucciones de Entrada Página 5-21 Computación en Acción, S.A. de C.V. Derechos Reservados® Control CtrlReal, Continuación Ejemplo // Ejemplo de control de reales ctrlReal // Elaboró: Marco A. Muñoz Columnas 1;4 UsaEmpresa tEmpresa;'Contpaq i' Parametros Titulo 'Configuración de Tipos de Cambio' Pagina 'Principal' Parametro pTipoCambio = 11 Captura Titulo 'Tipo de Cambio' Ayuda 'Seleccione el tipo de cambio' Control CtrlReal Decimales 4 FinCaptura FinPagina FinParametros Resultado El resultado del ejemplo en pantalla será el siguiente: Computación en Acción, S.A. de C.V. Derechos Reservados® Página 5-22 Instrucciones de Entrada Control CtrlVacio Introducción Deja en blanco el espacio destinado a uno de los filtros de la ventana para darle mejor acomodo a los filtros. Sintaxis Parametros Titulo <‘Titulo parametros’> Pagina <‘Titulo pagina’> Parametro vacio = 0 Captura Control CtrlVacio FinCaptura FinPagina FinParametros Continúa en la siguiente página Instrucciones de Entrada Página 5-23 Computación en Acción, S.A. de C.V. Derechos Reservados® Control CtrlVacio, Continuación Ejemplo // Ejemplo de control vacío ctrlVacio // Elaboró: Marco A. Muñoz Columnas 1;4 UsaEmpresa tEmpresa;'Contpaq i' Parametros Titulo 'Configuración de Tipos de Cambio' Pagina 'Principal' Parametro pTipoCambio = 11 Captura Titulo 'Tipo de Cambio' Ayuda 'Anote el tipo de cambio' Control CtrlReal Decimales 4 FinCaptura Parametro vacio = 0 Captura Control CtrlVacio FinCaptura Parametro pTasaInteres = 4 Captura Titulo 'Tasa de interés' Ayuda 'Anote la tasa de interés' Control CtrlReal Decimales 4 FinCaptura FinPagina FinParametros Resultado El resultado del ejemplo en pantalla será el siguiente: Este espacio aparece gracias al Control CtrlVacio Computación en Acción, S.A. de C.V. Derechos Reservados® Página 5-24 Instrucciones de Entrada Control CtrlTexto Introducción Este control muestra una casilla de texto el cual permite capturar una cadena. Sintaxis Parametros Titulo <‘Titulo parametros’> Pagina <‘Titulo pagina’> Parametro pParametro = <Valor por omisión> Captura Titulo <'Titulo de la etiqueta'> Ayuda <'Información de ayuda'> Control CtrlTexto FinCaptura FinPagina FinParametros Parámetros A continuación se muestra la descripción de los parámetros: Parámetro pParametro <Valor por omisión> Se refiere a Variable donde se almacenará el valor del dato seleccionado. Valor que se asignará a pParametro por omisión. Continúa en la siguiente página Instrucciones de Entrada Página 5-25 Computación en Acción, S.A. de C.V. Derechos Reservados® Control CtrlTexto, Continuación Ejemplo // Ejemplo de control de radio CtrlTexto // Elaboró: Marco A. Muñoz Columnas 4;2,3,1,3 usaempresa tEmpresa;'Contpaq i' Parametros Titulo 'Titulo Parámetros' Pagina 'Principal' Parametro pTexto = 0 Captura Titulo 'Diario' Ayuda 'Anote el nombre del diario’ Control CtrlTexto FinCaptura FinPagina FinParametros Resultado El resultado del ejemplo en pantalla será el siguiente: Computación en Acción, S.A. de C.V. Derechos Reservados® Página 5-26 Instrucciones de Entrada Parámetro Dependencia Introducción Este parámetro permite activar o desactivar un control basado en el resultado de la selección de otro control. Sintaxis Parametros Titulo <‘Titulo parametros’> Pagina <‘Titulo pagina’> Parametro pParametroPadre = <Valor por omisión> Captura Titulo <'Titulo de la etiqueta'> Ayuda <'Información de ayuda'> Control ControlPadre Dependencia <ValorFalso>;pControlHijo = False Dependencia <ValorVerdadero>;pControlHijo = True FinCaptura Parametro pParametroHijo = <Valor por omisión> Captura Titulo <'Titulo de la etiqueta'> Ayuda <'Información de ayuda'> Control ControlHijo FinCaptura FinPagina FinParametros Parámetros A continuación se muestra la descripción de los parámetros: Parámetro <ValorFalso> <ValorVerdadero> Se refiere a Si pParametroPadre es igual a este valor entonces el control hijo se desactivará. Si pParametroPadre es igual a este valor entonces el control hijo se activará. Continúa en la siguiente página Instrucciones de Entrada Página 5-27 Computación en Acción, S.A. de C.V. Derechos Reservados® Parámetro Dependencia, Continuación Ejemplo // Ejemplo de Parámetro dependencia // Elaboró: Marco A. Muñoz Columnas 4;2,3,1,3 usaempresa tEmpresa;'Contpaq i' Parametros Titulo 'Titulo Parámetros' Pagina 'Principal' Parametro pCuentas = 0 Captura Titulo 'Cuentas' Ayuda 'Selecciona las cuentas a desplegar' Control CtrlRadio Datos 'Todas';1;'Algunas';2 FinDatos Dependencia 1;pCodCta1 = False Dependencia 1;pCodCta2 = False Dependencia 2;pCodCta1 = True Dependencia 2;pCodCta2 = True FinCaptura Parametro vacio = 0 Captura Control CtrlVacio FinCaptura Parametro pCodCta1 = '000000000000' Captura Titulo 'Cuenta &inicial' Ayuda 'Selecciona la cuenta inicial a imprimir' Control CtrlCodigo tEmpresa->Estructura;'Cuentas';'Nombre' Valida <=;pCodCta2;'No puede ser mayor que la cuenta final' FinCaptura Parametro pCodCta2 = '000000000000' Captura Titulo 'Cuenta &final' Ayuda 'Selecciona la cuenta final a imprimir' Control CtrlCodigo tEmpresa->Estructura;'Cuentas';'Nombre' Valida >=;pCodCta1;'No puede ser menor que la cuenta inicial' FinCaptura FinPagina FinParametros Continúa en la siguiente página Computación en Acción, S.A. de C.V. Derechos Reservados® Página 5-28 Instrucciones de Entrada Parámetro Dependencia, Continuación Resultado Instrucciones de Entrada El resultado del ejemplo en pantalla será el siguiente: Página 5-29 Computación en Acción, S.A. de C.V. Derechos Reservados® Laboratorio 3 Introducción En el siguiente laboratorio generarás una ventana de filtros que permita escoger un rango de productos del catálogo. Objetivos En el siguiente laboratorio se pone en práctica: • • Como crear ventanas de parámetros Utilizar los controles para filtrar datos A continuación se muestra la descripción de los pasos a seguir en el laboratorio: Ejercicio Paso 1 2 Ejercicio Abre el reporte Base_Lab3 y guardálo como Productos_Lab3. En la sección 4. Parámetros haz lo siguiente: • • 3 Quita los comentarios del código de toda la sección 4. Parámetros. Modifica la sección 4.1 Consulta parámetros para que lean el producto inicial y final de la tabla productos. • Modifca la sección 4.2 Crea los parámetros para leer el código inicial y final del producto. En la sección 6.3 Consulta SQL haz lo siguiente: • • 4 Resultado Quita los comentarios del código de la sección 6.3 Consulta SQL. Modifica el código de esta consulta para leer el código, nombre y precio 1 del producto. Guarda, compila y ejecuta el reporte. La ventana de los filtros deberá verse como se muestra a continuación: Computación en Acción, S.A. de C.V. Derechos Reservados® Página 5-30 Instrucciones de Entrada Capítulo 6 Funciones Visión General Introducción En este capítulo conocerá como hacer llamados a funciones de Reporteador y aprenderá a crear funciones propias. Objetivos Al término de este capítulo conocerá como : • • • En este capítulo Hacer llamados a las funciones existentes en Reporteador. Crear sus propias funciones. Hacer llamados a librerías. Este capítulo contiene los siguientes temas: Tema VISIÓN GENERAL UTILIZACIÓN DE LAS FUNCIONES DEL REPORTEADOR CREACIÓN DE FUNCIONES INSTRUCCIÓN INCLUYE LABORATORIO 4 Funciones Página 6-1 Página 6-1 6-2 6-3 6-5 6-6 Computación en Acción, S.A. de C.V. Derechos Reservados® Utilización de las Funciones del Reporteador Instrucción Reporteador cuenta con una serie de funciones que permiten ejecutar un conjunto de instrucciones que al final darán un resultado. Sintaxis variableResultado = @Funcion(argumento1;argumento2;…;argumentoN) Parámetros A continuación se muestra la descripción de los parámetros: Parámetro variableResultado @Funcion Argumento1;argumento2;…argumentoN Ejemplo 1 Se refiere a La variable que almacena el resultado de la función. El nombre de la función. Cada uno de los argumentos que se envían a la función. // Ejemplo de llamado a una función. // El siguiente ejemplo muestra el llamado a la función raíz, el cuál obtendrá la raíz cuadrada // de 81 // Elaboró: Marco A. Muñoz vNumero = 81 vResultado = @Raiz(vNumero) Lista vResultado Ejemplo 2 // El siguiente ejemplo utiliza una función que extrae una subcadena de texto a partir de una cadena inicial. Sintaxis: @substr(texto, posición inicial, número de caracteres a extraer). argFechaSinFormato = ‘20130619’ vAnio = @substr(argFechaSinFormato;0;4) Nota: Para una lista de funciones de Reporteador consulta el documento “Instrucciones del Reporteador de CONTPAQ i®”. Computación en Acción, S.A. de C.V. Derechos Reservados® Página 6-2 Funciones Creación de Funciones Instrucción Además de las funciones ya incluidas en el Reporteador usted podrá crear nuevas funciones, en este tema se explica como podrá hacerlo. Sintaxis Deffunc NombreFuncion(argumento1;argumento2;…;argumentoN) FinFunc Parámetros A continuación se muestra la descripción de los parámetros: Parámetro NombreFuncion argumento1;argumento2;…argumentoN Ejemplo 1 Se refiere a Nombre de la función a crear Cada uno de los argumentos que se envían a la función. // Ejemplo de declaración de una función. // El siguiente ejemplo muestra la declaración de una función que calcula el cuadrado de un //número. // Elaboró: Marco A. Muñoz // Declaración de la función fCuadrado DefFunc fCuadrado(argBase) vCuadrado = argBase * argBase retorna vCuadrado FinFunc // Llamado a la función fCuadrado vNumero = 5 vResultado = fCuadrado(vNumero) Lista vResultado Ejemplo 2 // Función que da formato dd/mm/aaaa a una fecha. DefFunc fFormatoFecha(argFechaSinFormato) vAnio = @substr(argFechaSinFormato;0;4) vMes = @substr(argFechaSinFormato;4;2) vDia = @substr(argFechaSinFormato;6;2) vFechaConFormato = vDia & '/' & vMes & '/' & vAnio retorna vFechaConFormato FinFunc // Esta instrucción hace el llamado a la función pasando como parámetro la fecha sin formato fFormatoFecha(tCuentas(FechaRegistro)) Nota: Para una lista de funciones de Reporteador consulta el documento: “Instrucciones del Reporteador CONTPAQ i®”. Continúa en la siguiente página Funciones Página 6-3 Computación en Acción, S.A. de C.V. Derechos Reservados® Creación de Funciones, Continuación VARIABLES LOCALES Es posible declarar variables dentro de una función utilizando la instrucción Local. La variable solo estará en memoria mientras esté dentro de la función, al terminar la función la variable se destruye. Ejemplo: Deffunc fCuadrado() Local vCuadrado // Esta variable solo se usará dentro de la función. vCuadrado = argBase * argBase retorna vCuadrado FinFunc Computación en Acción, S.A. de C.V. Derechos Reservados® Página 6-4 Funciones Instrucción Incluye Introducción La instrucción incluye sirve para hacer llamados a librerías de funciones dentro de un reporte. Es común utilizar una serie de funciones en distintos reportes. Para esto es posible crear un archivo con extensión .RPT, con una serie de funciones (al cual llamaremos librería), este archivo podrá ser incluido en un reporte base, y el reporte base podrá ser uso de las funciones incluidas dentro de la librería. El archivo de la librería de funciones deberá estar en la misma carpeta que el archivo del reporte base. Sintaxis Incluye <NombreLibreria> Parámetros A continuación se muestra la descripción de los parámetros: Parámetro <NombreLibreria> Ejemplo Se refiere a Nombre del archivo .RPT que contiene las funciones que se desean incluir en nuestro reporte. // Ejemplo del uso de la función incluye // Archivo con Librería de funciones de saludos llamado Saluda.rpt // Función Hola Deffunc fHola() Texto C0;’Hola’ Imprime FinFunc // Función Adiós Deffunc fAdios() Texto C0;’Adiós’ Imprime FinFunc //***************************************************************************** // Reporte Base // Elaboró: Marco Antonio Muñoz columnas 1;4 incluye saluda.rpt fhola() Nota: Los sistemas de CONTPAQ i® cuentan con una serie de bibliotecas con funciones comunes a varios reportes, mismas que pueden utilizarse en reportes propios, solo es necesario anexarlos con la instrucción Incluye. Funciones Página 6-5 Computación en Acción, S.A. de C.V. Derechos Reservados® Laboratorio 4 Introducción En el siguiente laboratorio practicarás el manejo de funciones. Agregarás una columna nueva con la fecha de alta del producto y generarás una función que dé formato a las fechas. A continuación se muestran los pasos a seguir para realizar el laboratorio: Ejercicio Paso 1 2 3 4 5 6 7 8 9 Resultado Ejercicio Abre el reporte Base_Lab4 y guardálo como Productos_Lab4. En la sección 6.1 Definir columnas en la instrucción Columnas agrega una nueva columna al final del reporte de 2 cm. En la sección 6.2 Título del reporte agrega una nuevo título, ahora quedarán así: CÓDIGO, PRODUCTO, FECHA, PRECIO. En la sección 6.3. Consulta SQL agrega el campo CFECHAALTAPRODUCTO a la consulta para desplegar este campo. En la sección 7. Desplegar datos despliega el campo de la “Fecha del alta” del producto antes de desplegar el “Precio”. Guarda, compila y ejecuta el reporte. Observa que la fecha se muestra sin formato. Crea la función fFormatoFecha que dé formato a la fecha dd/mm/aaaa. Utiliza la función fFormatoFecha para mostrar el campo fecha que acabas de agregar con formato. Guarda, compila y ejecuta el reporte. El reporte deberá quedar como se muestra a continuación: Computación en Acción, S.A. de C.V. Derechos Reservados® Página 6-6 Funciones Capítulo 7 Formato Visión General Introducción En este capítulo se conocerán las instrucciones para dar formato al reporte. Objetivos Al término de este capítulo: • En este capítulo Identificará las funciones para cambiar el tipo de letra, alinear texto, aplicar negritas, generar encabezados, entre otras funciones de formato. Este capítulo contiene los siguientes temas: Tema VISIÓN GENERAL ALINEACIÓN DEL TEXTO FUNCIONES DE FORMATO LISTA DE FUNCIONES DE FORMATO INSTRUCCIÓN ENCAB LABORATORIO 5 Formato Página 7-1 Página 7-1 7-2 7-3 7-4 7-5 7-6 Computación en Acción, S.A. de C.V. Derechos Reservados® Alineación del Texto Instrucción La instrucción Texto permite alinear el texto a la izquierda, centrado y derecha, a enseguida se explica como. Sintaxis A continuación se muestra la descripción de la sintaxis de la instrucción: Sintaxis Texto C0;’Mensaje’ Descripción Alinea el mensaje a la izquierda de la columna Centra el mensaje en la columna Alinea el mensaje a la derecha de la columna anteponiendo comillas dobles antes del texto. Salta líneas hacia abajo. Texto C0;’^Mensaje’ Texto C0;’”Mensaje’ Saltalin <NumLineas> Ejemplo // Ejemplo de alineación con la función texto. // Elaboró: Marco A. Muñoz Texto C0;’Mensaje a la izquierda’ Imprime Saltalin 2 // Deja dos líneas en blanco Texto C0;’^Mensaje centrado’ Imprime Texto C0;’ “Mensaje a la derecha’ Imprime Computación en Acción, S.A. de C.V. Derechos Reservados® Página 7-2 Formato Funciones de formato Instrucción Estas funciones cambian el formato del texto. Sintaxis A continuación se muestra la descripción de la sintaxis de la instrucción: Sintaxis Función <Parámetro> [Ca..Cz].Función <Parámetro> [Ca,Cb,Cc].Función <Parámetro> Parámetros Descripción Aplica la función a todas las columnas Aplica desde la columna Ca hasta la columna Cz. Aplica a la columna Ca, la columna Cb y la columna Cc. A continuación se muestra la descripción de los parámetros: Parámetro Función [Ca..Cz] [Ca,Cb,Cc] <Parámetro> Se refiere a Nombre de la función. Vea Lista de funciones de formato. Rango de columnas donde se aplicará el formato de la función. Listado de columnas a la que se le aplicará la función formato. El parámetro de la función puede ser cualquiera de los siguientes: Parámetro Vacío Booleano Se refiere a Esta función no tendrá parámetros. Puede ser: True o False: Valor True False Texto Número Formato Página 7-3 Descripción Activa el formato. Desactiva el formato. Cualquier valor de texto encerrado entre ‘apóstrofes’. Cualquier valor numérico. Computación en Acción, S.A. de C.V. Derechos Reservados® Lista de funciones de formato Introducción A continuación se listan las funciones de formato. Función Absoluto Sintaxis [RangoCol].Absoluto Booleano Ejemplo [C0..C2].Absoluto true Altura [RangoCol].Altura Número Altura 12 Color [RangoCol].Color @RGB(R;G;B) [C0].Color @RGB(255;0;0) Coma [RangoCol].Coma [C3].Coma Decimales [RangoCol].Decimales Número [C1,C3].Decimales 4 Espacio [RangoCol].Espacio [C3].Espacio InvSig [RangoCol].InvSig Booleano [C1].InvSig true Italico [RangoCol].Italico Booleano Italico true Negritas [RangoCol].Negritas Booleano Negritas false SubrayaCol [RangoCol].Subrayacol Imprime subrayacol imprime Subrayado [RangoCol].Subrayado Booleano [C2..C4].subrayado true UsaLetra [RangoCol].UsaLetra ‘Tipo de letra’ UsaLetra 'Arial' Computación en Acción, S.A. de C.V. Derechos Reservados® Página 7-4 Descripción del Ejemplo Activa el valor absoluto de la columna C0 a C2 Ajusta el tamaño de la letra en 12 puntos en todas las columnas Muestra el texto de color rojo en la columna 0. Divide las cantidades numéricas con comas cada 3 dígitos en la columna 3. Las cantidades de las columnas 1 y 3 tendrán 4 decimales. Además redondea los decimales. Inserta un pequeño espacio cada 3 dígitos en las cantidades numéricas en la columna 3. Invierte el signo en las cantidades de la columna 1. Activa el uso de itálicas en todas las columnas. Desactiva el uso de las negritas en todas las columnas. Dibuja una raya horizontal en ese renglón a lo ancho de todas las columnas. Subraya los datos de la columna 2 a la 4 Aplica el tipo de letra Arial a todas las columnas. Formato Instrucción Encab Introducción La instrucción Encab sirve para definir un encabezado en el reporte. El encabezado es una parte fija que se repetirá al inicio de cada hoja del reporte. Sintaxis Encab //Cuerpo del encabezado FinEncab // Cuerpo del reporte SupEncab // De esta instrucción en adelante se suprime el encabezado. Ejemplo // Ejemplo para el uso de encabezados // Elaboró: Marco Antonio Muñoz Encab Texto “^Catálogo Clientes” Imprime Texto C0;’Código’ Texto C1;’Razón Social’ Imprime FinEncab Formato Página 7-5 Computación en Acción, S.A. de C.V. Derechos Reservados® Laboratorio 5 Introducción En el siguiente laboratorio se practicarán las funciones para dar formato al reporte. A continuación se muestran los pasos a seguir para realizar el laboratorio: Ejercicio Paso 1 2 3 Ejercicio Abre el reporte Base_Lab5 y guardálo como Productos_Lab5. Cambia el tipo de letra a ‘Arial’. En la sección 6.2 Título del reporte define los títulos del reporte dentro de una sección de encabezado (con las función Encab… FinEncab) e incluye lo siguiente: • • • • 4 5 6 Resultado Activa el uso de negritas para los títulos del reporte y de las columnas. Ajusta el tamaño de los títulos del reporte en 12 puntos. Centra el título del reporte. Deja un espacio en blanco entre el título del reporte y el título de las columnas. • Agrega una línea de división entre los títulos de las columnas y los datos. • Desactiva el uso de negritas para los títulos. En la sección 7. Desplegar datos de la consulta ajusta el tamaño a 10 puntos para desplegar los datos de la consulta. De ser necesario ajusta el tamaño de las columnas. Guarda, compila y ejecuta el reporte. El reporte deberá quedar como muestra a continuación: Computación en Acción, S.A. de C.V. Derechos Reservados® Página 7-6 Formato Apéndice A Sentencias básicas en SQL para reportes Introducción En este apéndice: • • En este apéndice Verás cómo realizar consultas en SQL para realizar reportes de los sistemas de CONTPAQ i®. Conocerás la sentencia SELECT con sus diferentes opciones. Este apéndice contiene los siguientes temas: Tema Tipos de sentencias en SQL Sentencias básicas Sentencias básicas en SQL para reportes Página A-1 Página A-2 A-3 Computación en Acción, S.A. de C.V. Derechos Reservados® Tipos de sentencias en SQL Tipos de sentencias Existen dos tipos de sentencias en SQL, las sentencias de acción y las sentencias de consulta. En este taller se verán las sentencias de consulta las cuales se utilizan para la generación de reportes. Sentencias de acción en SQL Las sentencias de acción más utilizadas en SQL para dar mantenimiento a las bases de datos son: • • • • • • Sentencias de consultas en SQL CREATE – Crea un objeto dentro de la base de datos. Este objeto puede ser una tabla, función, procedimiento, etcétera. ALTER – Permite modificar la estructura de un objeto. Se pueden agregar o quitar campos a una tabla, modificar el tipo de un campo, agregar o quitar índices a una tabla. DROP – Elimina un objeto de la base de datos. Este objeto puede ser una tabla, función, procedimiento, etcétera. INSERT – Agrega uno o más registros a una sola tabla en una base de datos relacional. UPDATE – Modifica los valores de un conjunto de registros existentes en una tabla. DELETE – Borra registros de una tabla. La consulta básica y más utilizada en SQL es la instrucción SELECT la cual, recupera filas o registros de la base de datos y habilita la selección de una o varias filas o columnas de una o más tablas. Esta instrucción puede utilizarse en varias sintaxis, dependiendo de la información que se necesita. Las más utilizadas son: • • • • • SELECT FROM WHERE GROUP BY HAVING HAVING vs WHERE Importante: Al final de la sentencia se recomienda agregar un <Enter> para que la misma pueda ejecutarse correctamente. Estas sentencias son palabras reservadas y se distinguen con el color azul, si no está bien capturada la sentencia, esta aparecerá en color negro. Computación en Acción, S.A. de C.V. Derechos Reservados® Página A-2 Sentencias básicas en SQL para reportes Sentencias básicas Comentarios En SQL los comentarios se agregan con un doble guion - - antes del texto. -- Comentarios en consulta O para comentar un bloque se utiliza /* */ /* Consulta de Documentos de Venta Agrupado por Cliente */ Declarar Variables En SQL se pueden definir variables con la instrucción DECLARE. Sintaxis: DECLARE @nombre_variable AS tipo; Ejemplos: -- Declara una variable de tipo entero DECLARE @lIdMoneda AS INT; -- Declara una variable de tipo fecha DECLARE @lFechaIni AS DATETIME; -- Declara una variable de tipo caracter de 30 caracteres DECLARE @lDelCliente AS CHAR(30); Asignar Variables Para asignar valores a las variables en SQL se utiliza la instrucción SET. Sintaxis: SET @nombre_variable = 'valor'; Ejemplos: SET @lIdMoneda SELECT * FROM = '1'; La instrucción SELECT FROM se utiliza para seleccionar uno o varios registros de una o más tablas. El resultado de esta selección se muestra en una tabla temporal, llamada result-set. Sintaxis: SELECT * FROM tabla1,tabla2 Al usar * se extraerán todos los campos de la tabla. Ejemplo: La siguiente consulta muestra todos los registros de la tabla Documentos con todos sus Campos. SELECT * FROM admDocumentos Continúa en la siguiente página Sentencias básicas en SQL para reportes Página A-3 Computación en Acción, S.A. de C.V. Derechos Reservados® Sentencias básicas, Continuación SELECT campo FROM La siguiente consulta extrae solo los campos especificados de las tablas. Sintaxis: SELECT campo1, campo2 FROM tabla1,tabla2 Ejemplo: El siguiente ejemplo solo selecciona los campos CFOLIO y CTOTAL de la tabla admDocumentos. SELECT CFOLIO, CTOTAL FROM admDocumentos WHERE Al utilizar el WHERE se podrán agregar condiciones para filtrar registros. Sintaxis: SELECT campo1 FROM tabla WHERE campo operador valor Operadores: Operador = <> > < >= <= BETWEEN LIKE IN AND OR Descripción Igual Diferente Mayor que Menor que Mayor o igual que Menor o igual que Entre un rango Busca un patrón Para especificar múltiples valores en un campo Operador lógico Y. Permite agregar más de una condición y todas de deberán cumplir para desplegar el registro. Operador lógico O. Permite agregar más de una condición y mientras una de estas se cumpla se desplegará el registro. Ejemplo: La siguiente consulta extrae solo los registros de la tabla Documentos cuyo Folio es mayor a 2. SELECT * FROM admDocumentos WHERE CFOLIO >2 AND La siguiente consulta extrae solo los registros de la tabla Documentos cuyo Folio es mayor a 1 Y es menor a 4. SELECT * FROM admDocumentos WHERE CFOLIO >1 AND CFOLIO <4 Continúa en la siguiente página Computación en Acción, S.A. de C.V. Derechos Reservados® Página A-4 Sentencias básicas en SQL para reportes Sentencias básicas, Continuación OR La siguiente consulta extrae solo los registros de la tabla Documentos cuyo Folio es 2 O es 4. SELECT * FROM admDocumentos WHERE CFOLIO = 2 OR CFOLIO = 4 IN La siguiente consulta extrae solo los registros de la tabla Documentos cuyo Folio es 1 y 2. SELECT * FROM admDocumentos WHERE CFOLIO IN (1,2) BETWEEN La siguiente consulta extrae los registros de la tabla Documentos cuyo Folio está entre 2 y 10. SELECT * FROM admDocumentos WHERE CFOLIO BETWEEN 2 AND 10 Alias La siguiente consulta crea el alias f del campo cFolio y d de la tabla llamada admDocumentos para reducir el tamaño de la sentencia y facilitar su lectura. SELECT cFolio AS f FROM admDocumentos AS d ORDER BY ASC La siguiente consulta ordena los registros por folio en forma ascendente. SELECT * FROM admDocumentos ORDER BY CFOLIO ASC ORDER BY DESC La siguiente consulta ordena los registros por folio en forma descendente. SELECT * FROM admDocumentos ORDER BY CFOLIO DESC SELECT TOP La instrucción SELECT TOP muestra el número de registros especificado. Sintaxis: SELECT top num_registros FROM tabla SELECT TOP 1 ASC La siguiente consulta extrae el primer registro de la tabla Documentos. Ejemplo: SELECT top 1 * FROM admDocumentos ORDER BY CFOLIO ASC SELECT TOP 1 DESC La siguiente consulta extrae el último registro de la tabla Documentos. Ejemplo: SELECT top 1 * FROM admDocumentos ORDER BY CFOLIO DESC Continúa en la siguiente página Sentencias básicas en SQL para reportes Página A-5 Computación en Acción, S.A. de C.V. Derechos Reservados® Sentencias básicas, Continuación Sentencias de cálculo Estas sentencias se utilizan para realizar cálculos sobre datos. Las más comunes son: • • • • • AVG() – Regresa el valor promedio COUNT() – Regresa el número de filas MAX() – Regresa el mayor valor MIN() – Regresa el menor valor SUM ()– Regresa la suma Estas sentencias obtienen un resultado matemático y se distinguen con el color rosa fuerte. Si no está bien capturada la sentencia, esta aparecerá en color negro. SUM() La siguiente consulta suma el campo CTOTAL de todos los registros de la tabla Documentos. SELECT SUM(CTOTAL) AS TotalDocumentos FROM admDocumentos GROUP BY Esta instrucción agrupa los registros que comparten una característica o un mismo valor de acuerdo a la selección indicada. Instrucción: SELECT (lista de atributos) FROM (lista de tablas) GROUP BY (orden en que se agruparan la lista de atributos) Esta sentencia por sí sola no tiene mucha utilidad, por lo que generalmente se utiliza con las sentencias de cálculo para que esta tenga mayor funcionalidad. GROUP BY SUM() La siguiente consulta agrupa la suma de todos los documentos de un mismo cliente de la tabla Documentos. Ejemplo: SELECT CIDCLIENTEPROVEEDOR, SUM(CTOTAL) AS VENTAS_X_CTE FROM admDocumentos GROUP BY CIDCLIENTEPROVEEDOR HAVING vs. WHERE Ambas instrucciones requieren de una condición y puede resultar confuso saber cuándo utilizar una instrucción u otra. La cláusula WHERE es utilizada para extraer solo aquellos registros que cumplan con un criterio específico. La sentencia HAVING se utiliza cuando la condición o criterio necesita realizarse sobre una agrupación de datos o campos; y tiene mayor utilidad cuando se maneja en conjunto con GROUP BY. Continúa en la siguiente página Computación en Acción, S.A. de C.V. Derechos Reservados® Página A-6 Sentencias básicas en SQL para reportes Sentencias básicas, Continuación HAVING Esta instrucción especifica una condición de búsqueda para un grupo o agregado y solo se puede utilizar junto con SELECT. Sintaxis: SELECT campo HAVING campo Normalmente, el HAVING se utiliza dentro de una cláusula GROUP BY. Cuando no se utiliza dentro de esta cláusula, el HAVING se comporta como una cláusula WHERE. La siguiente consulta agrupa la suma de todos los documentos de un mismo cliente de la tabla Documentos. Y solo muestra aquellos clientes cuya suma de TODOS sus documentos sea mayor a 2000. SELECT CIDCLIENTEPROVEEDOR, SUM(CTOTAL) FROM admDocumentos GROUP BY CIDCLIENTEPROVEEDOR HAVING SUM(CTOTAL)>2000 WHERE La siguiente consulta agrupa la suma de todos los documentos de un mismo cliente de la tabla Documentos. Y solo agrupa aquellos documentos cuyo Total sea mayor a 2000. SELECT CIDCLIENTEPROVEEDOR, SUM(CTOTAL) AS TotalDoc FROM admDocumentos WHERE CTOTAL>2000 GROUP BY CIDCLIENTEPROVEEDOR JOINS INNER JOIN Las sentencias JOIN permiten combinar registros de dos o más tablas. Existen varios tipos de JOIN, dentro de los más utilizados están: • INNER JOIN o JOIN. Selecciona todos los registros de ambas tablas siempre y cuando haya coincidencias en ambas tablas. • LEFT JOIN. Regresa todos los registros de la tabla de la izquierda que coincidan con los registros de la tabla derecha. El resultado es NULL del lado derecho cuando no haya coincidencia. La siguiente consulta muestra todos los documentos con sus movimientos a través de la unión de la tabla Documentos y Movimientos tomando el campo común CIDDOCUMENTO ubicado en ambas tablas. SELECT * FROM admDocumentos D INNER JOIN admMovimientos M ON D.CIDDOCUMENTO = M.CIDDOCUMENTO LEFT JOIN La siguiente consulta muestra todos los documentos aun si no tienen movimientos. SELECT * FROM admDocumentos D LEFT JOIN admMovimientos M ON D.CIDDOCUMENTO = M.CIDDOCUMENTO Continúa en la siguiente página Sentencias básicas en SQL para reportes Página A-7 Computación en Acción, S.A. de C.V. Derechos Reservados® Sentencias básicas, Continuación CAST La función CAST convierte un valor a un tipo de dato. La siguiente consulta muestra todos los documentos del mes de junio del 2013, utiliza la función CAST para convertir el valor '20130601' del tipo DATETIME. SELECT * FROM admDocumentos WHERE CFECHA >= CAST('20130601' AS DATETIME) AND CFECHA <= CAST('20130630' AS DATETIME) NULL La restricción IS NOT NULL obliga a que los valores a mostrar en esa columna no sean NULL. La siguiente consulta muestra todos los documentos cuyo campo cTextoExtra1 de la tabla Documentos no es nulo (es decir sí tienen información). SELECT * FROM admDocumentos WHERE CTEXTOEXTRA1 IS NOT NULL CASE WHEN La expresión CASE WHEN compara una expresión con un conjunto de expresiones para determinar su resultado. La siguiente consulta evalúa el valor del campo cTipoCliente e imprime el texto según su valor (1=Cliente, 2=Cliente-Proveedor, 3=Proveedor). SELECT CRAZONSOCIAL, CASE WHEN CTIPOCLIENTE=1 THEN 'Cliente' WHEN CTIPOCLIENTE=2 THEN 'Cliente-Proveedor' WHEN CTIPOCLIENTE=3 THEN 'Proveedor' END AS TIPO FROM admClientes Computación en Acción, S.A. de C.V. Derechos Reservados® Página A-8 Sentencias básicas en SQL para reportes Apéndice B Actualización de reportes de AdminPAQ Visión General Introducción En este apéndice se muestra la forma de actualizar reportes de AdminPAQ a CONTPAQ i® COMERCIAL. Objetivos Al término de este apéndice el participante conocerá: • • En este apéndice Las diferencias entre el Reporteador de AdminPAQ y el Reporteador de CONTPAQ i® COMERCIAL. Los conocimientos para actualizar reportes a CONTPAQ i® COMERCIAL. Este apéndice contiene los siguientes temas: Tema VISIÓN GENERAL CAMBIO DE INSTRUCCIONES EN CONTPAQ i® EJEMPLO. ACTUALIZACIÓN DE UN REPORTE Actualización de reportes de AdminPAQ Página B-1 Página B-1 B-2 B-4 Computación en Acción, S.A. de C.V. Derechos Reservados® Cambio de instrucciones en CONTPAQ i® Introducción Los reporteadores utilizados en AdminPAQ y CONTPAQ i® COMERCIAL cuentan con similitudes y diferencias. Los reportes que se incluyen en CONTPAQ i® COMERCIAL están desarrollados en el reporteador de CONTPAQ i® los cuales acceden a bases de datos de SQL. Los reportes que se hicieron a la medida en AdminPAQ deberán ser actualizados a este nuevo reporteador. Similitudes Las similitudes entre ambos reporteadores son las siguientes: • • • • • • • Diferencias Las diferencias entre los reporteadores son: • • • Instrucciones de entrada Definición de columnas Instrucciones de Formato Impresión de datos Ciclos Condiciones Funciones Variables Las instrucciones de entrada (para crear filtros). La forma de acceso a las tablas de la empresa. Las instrucciones de salida a Excel®. Para hacer filtros, en AdminPAQ se utilizaban las instrucciones PARÁMETRO y ACEPTA para recibir datos del usuario. Ahora se utilizan las instrucciones PARAMETROS, CONTROL, DEPENDENCIA, etcétera, por lo que deberás sustituir las anteriores por las nuevas, para más información consulta el Capítulo 5. Instrucciones de Entrada. • • Conexión a la BDD AdminPAQ PARAMETRO ACEPTA • • • CONTPAQ i® COMERCIAL PARAMETROS CONTROL DEPENDENCIA Las instrucciones para la conexión a la Base de Datos cambian y son las que se muestran en la siguiente tabla. Para más información consulta el Capítulo 4. Acceso a las Bases de Datos. • • Nombres de tablas y campos AdminPAQ UsaEmpresa UsaTabla • • CONTPAQ i® COMERCIAL CONEXION CONSULTA Los nombres de las tablas y los campos cambiaron, por lo que habrá que actualizarlos. Continúa en la siguiente página Computación en Acción, S.A. de C.V. Derechos Reservados® Página B-2 Actualización de reportes de AdminPAQ Cambio de instrucciones en CONTPAQ i®, Continuación Tabla comparativa Las principales ventajas del Reporteador de CONTPAQ i son que: • • • Está orientado a bases de datos Cliente/Servidor, es decir, los datos se procesan en el Servidor y son enviados al cliente (es un Servidor de datos, no de archivos). Los parámetros o filtros de los reportes son configurables. La salida de los reportes está abierta a otros formatos de archivo, como HTML, XLS y PDF; además de las salidas acostumbradas: pantalla, impresora o disco. Consulta la siguiente tabla comparativa: Características Modelo de tres capas Filtros configurables Manejo de funciones Salida a TXT Salida a HTML Salida a PDF Salida a Excel Salida a impresora Salida a disco Salida a pantalla Instrucciones OLE DB Bases de datos local Bases de datos Cliente/Servidor Editor de reportes Depurador Configuración de la hoja Manejo de queries de SQL Actualización de reportes de AdminPAQ Reporteador programable • • • • • • • • Reporteador CONTPAQ i • • • • • • • • • • • • • • • • Página B-3 Computación en Acción, S.A. de C.V. Derechos Reservados® Ejemplo. Actualización de un reporte Introducción A continuación se muestra un ejemplo de actualización de un reporte de AdminPAQ a CONTPAQ i® COMERCIAL. Primero se muestra el reporte en AdminPAQ y después se muestra el mismo reporte actualizado a CONTPAQ i® COMERCIAL. AdminPAQ // Descripción: Reporte de ventas por fecha // Elaboró: Marco Muñoz // Fecha: 25/06/2013 La conexión a la BDD SÍ cambia por la instrucción Conexion // Conexión a la Base de Datos UsaEmpresa tEmpresa;'AdminPAQw' // Filtros Acepta 'Ventas';'Captura la fecha inicial'; pFechaInicial Acepta 'Ventas';' Captura la fecha final'; pFechaFinal // Definición de columnas del reporte Columnas 2;3,3 // Títulos del reporte Texto '^VENTAS POR FECHA' Imprime En la definición de filtros las instrucciones Acepta se cambiarán por Parametros La definición de columnas NO cambia Los definición de títulos del reporte NO cambia Texto C0;'^FOLIO' Texto C1;'^TOTAL' Imprime La Búsqueda cambia por una consulta de SQL // Se crea la consulta UsaTabla tDoc=tEmpresa['MGW10008'] tDoc.usaindice['IDOCUMEN01'] Mientras [tDoc.Busca['4'];tDoc ->encontro;tDoc.Busca Siguiente[1]] Si tDoc(cFecha)>=pFechaInicial Y tDoc(cFecha)<=pFechaFinal Lista tDoc(cFolio), tDoc(cTotal) FinSi FinMientras Continúa en la siguiente página Computación en Acción, S.A. de C.V. Derechos Reservados® Página B-4 Actualización de reportes de AdminPAQ Ejemplo. Actualización de un reporte, Continuación Reporte en CONTPAQ i® COMERCIAL La conexión a la BDD SÍ cambia por la instrucción Conexion // Descripción: Reporte de ventas por fecha // Elaboró: Marco Muñoz // Fecha: 25/06/2013 // Conexión a la Base de Datos gServidor = '//localhost/adROJA' gInstancia = 'COMPAC' gUsuarioSQL = 'sa' gClaveSQL = 'Compac2008' Conexion tEmpresa = Conexion.crear('jdbc:jtds:sqlserver:' & gServidor & ';instance=' & gInstancia,gUsuarioSQL,gClaveSQL) // Filtros Parametros Titulo 'Ventas' Pagina '&1 Principal' En la definición de filtros las instrucciones Acepta se cambiarán por Parametros Parametro pFechaInicial = '20000101' Captura Titulo 'Fec&ha inicial' Ayuda 'Selecciona la fecha inicial de los documentos' Control CtrlFecha CambiaAlSalir pFechaFinal = pFechaInicial FinCaptura Parametro pFechaFinal = '20200101' Captura Titulo 'Fecha fi&nal' Ayuda 'Selecciona la fecha final de los documentos' Control CtrlFecha Valida >=; pFechaInicial; 'La fecha final no puede ser menor a la inicial' FinCaptura FinPagina FinParametros // Definición de columnas del reporte Columnas 2;3,3 La definición de columnas NO cambia Continúa en la siguiente página Actualización de reportes de AdminPAQ Página B-5 Computación en Acción, S.A. de C.V. Derechos Reservados® Ejemplo. Actualización de un reporte, Continuación Reporte en CONTPAQ i® COMERCIAL (Continúa) // Título del reporte Texto '^VENTAS POR FECHA' Imprime Los títulos del reporte NO cambian Texto C0;'^FOLIO' Texto C1;'^TOTAL' Imprime La Búsqueda cambia por una consulta de SQL // Se crea la consulta gStrQuery = 'Declare @FechaIni as datetime; ' gStrQuery = gStrQuery & 'Declare @FechaFin as datetime; ' gStrQuery = gStrQuery & 'set @FechaIni = \'' & pFechaInicial & '\'; ' gStrQuery = gStrQuery & 'set @FechaFin = \'' & pFechaFinal & '\'; ' gStrQuery = gStrQuery & 'SELECT CFOLIO,CTOTAL FROM admDocumentos d WHERE CIDDOCUMENTODE=4' gStrQuery = gStrQuery & 'AND d.cFecha >= @FechaIni AND d.cFecha <= @FechaFin' // Se ejecuta la consulta Consulta tMiConsulta = tEmpresa[gStrQuery] // Se despliegan los datos de la consulta, nota que los //nombres de los campos van entre //apóstrofes Mientras tMiConsulta->Encontro // Se despliegan los campos del registro actual en //pantalla Lista tMiConsulta('CFOLIO'), tMiConsulta('CTOTAL') // Se salta al siguiente registro tMiConsulta.Busca Siguiente FinMientras Computación en Acción, S.A. de C.V. Derechos Reservados® Página B-6 Actualización de reportes de AdminPAQ Apéndice C Casos especiales Visión General Introducción En este apéndice se muestran instrucciones extras a la programación común de un reporte. Casos como la programación de reportes con Excel®, creación de consultas con SQL y generación de reportes sensibles al contexto. Objetivos Al término de este apéndice el participante conocerá cómo crear: • • • • • En este apéndice Un reporte con salida directa a Excel® utilizando VBA Reportes sensibles al contexto Consultas utilizando sentencias de SQL Un reporte en CONTPAQ i® NÓMINAS Conexiones entre tablas de la base de datos Este apéndice contiene los siguientes temas: Tema VISIÓN GENERAL REPORTES EN EXCEL® REPORTES SENSIBLES REPORTES EN CONTPAQ I® NÓMINAS Casos especiales Página C-1 Página C-1 C-2 C-7 C-12 Computación en Acción, S.A. de C.V. Derechos Reservados® Reportes en Excel® Reportes en Excel Es posible crear reportes con salida directa a Excel® utilizando VBA (Visual Basic for Applications). De esta forma podrá: • • • Dar formato a celdas (tamaño, color, tipo de letra, etcétera) de Excel® directamente desde el Reporteador. Crear Macros en VBA en un libro de Excel® y mandarlas ejecutar desde código del Reporteador. Hacer uso de las funciones de Excel® como tablas dinámicas, gráficos, ordenamiento de datos, entre otros, todo directamente con código desde el Reporteador. Instrucciones OLE Para crear un reporte en Excel, es necesario utilizar una serie de instrucciones básicas para crear un libro de Excel. Para el resto de las instrucciones es necesario conocer VBA. Crear un objeto OLE Para crear un objeto OLE se utiliza la instrucción ObjetoOLE y se puede hacer de dos formas. //Ejemplo 1: ObjetoOLE excel = ObjetoOLE.crear('Excel.Application') Ejemplo 2: ObjetoOLE excel excel = ObjetoOLE.crear('Excel.Application') Métodos y propiedades Una vez creado el objeto se podrán utilizar sus métodos y asignarle valores a sus propiedades: // Ejemplos excel.visible=true ws.Range('A1').Value='Hola mundo' Constantes especiales Existen 3 constantes especiales para el llamado de métodos OLE: Constante ObjetoOLE.nulo ObjetoOLE.vacio ObjetoOLE.ausente Descripción Representa un valor nulo Representa un valor vacío Representa un valor ausente. Útil cuando el objeto OLE destino usa valores por defecto Continúa en la siguiente página Computación en Acción, S.A. de C.V. Derechos Reservados® Página C-2 Casos especiales Reportes en Excel®, Continuación Crear un libro nuevo El siguiente código crea un libro de Excel y manda el mensaje ‘Hola mundo’ en la celda A1. Columnas 1;1 ObjetoOLE Excel = ObjetoOLE.crear('Excel.Application') ObjetoOLE wb=Excel.Workbooks.add(-4167) ObjetoOLE ws=wb.Sheets('Hoja1') Excel.Visible=true ws.Range('A1').Value='Hola Mundo' Abrir un libro existente El siguiente código abre un libro de Excel existente. Columnas 1;1 ObjetoOLE Excel = ObjetoOLE.crear('Excel.Application') ObjetoOLE wb=Excel.Workbooks.Open('C:/MiLibro.xls') ObjetoOLE ws=wb.Sheets('Hoja1') Excel.Visible=true ws.Range('A1').Value='Hola Mundo’ Ordenación en Excel El siguiente código muestra cómo se ordenan datos en Excel, además se hace uso de la constante ObjetoOLE.ausente. // Ejemplo: // Declaración de constantes de Excel constante xlAscending 1 // Inicializar variables ObjetoOLE excel = ObjetoOLE.crear('Excel.Application') ObjetoOLE wb=excel.Workbooks.open('c:/testOle.xls') ObjetoOLE ws=wb.Sheets('Hoja1') //Muestra Excel excel.Visible=true // Ordenar de B3 a D16 ws.Range('B3:D16').Select excel.Selection.Sort(ws.Range('B3');xlAscending;ws.Range('C3');ObjetoOLE.ausente;xlAscen ding;ws.Range('D3');xlAscending) Ejecutar una macro El siguiente código ejecuta una macro llamada AplicarFormatoColumnas. // Inicializar objetos ObjetoOLE excel = ObjetoOLE.crear('Excel.Application') ObjetoOLE wb=excel.Workbooks.open('c:/testOle.xls') // Hacer visible Excel excel.Visible=true // Ejecutar Macro excel.Run('AplicarFormatoColumnas') Continúa en la siguiente página Casos espeicales Página C-3 Computación en Acción, S.A. de C.V. Derechos Reservados® Reportes en Excel®, Continuación Crear un gráfico en Excel El siguiente código crea un gráfico en Excel // Inicializar objetos ObjetoOLE excel = ObjetoOLE.crear('Excel.Application') ObjetoOLE wb=excel.Workbooks.open('c:/testOle.xls') wb.Charts.Add wb.ActiveChart.ChartType = 4 wb.ActiveChart.SetSourceData(wb.Sheets('Hoja2').Range('C4:C13');2) wb.ActiveChart.Location(2;'Hoja2') wb.ActiveChart.HasTitle = False wb.ActiveChart.Axes(1;1).HasTitle = False wb.ActiveChart.Axes(2;1).HasTitle = False // Mostrar Excel excel.Visible=true Creación del encabezado El siguiente código crea el encabezado de un reporte, con formato: // Constantes de Excel constante xlCentrarEnSeleccion 7 constante xlAutomatico -4105 constante xlManual -4135 constante xlInferior -4107 constante xlSubrayadoDoble -4119 constante xlIzquierda -4131 constante xlMediano -4138 constante xlNinguno -4142 constante xlDerecha -4152 constante xlSuperior -4160 constante xlHojaCalculo -4167 constante xlLineaSimple 1 constante xlBordeSuperior 8 constante xlBordeInferior 9 constante xlBordeIzquierda 7 constante xlBordeDerecha 10 constante xlCentro -4108 // Abrir excel ObjetoOLE Excel = ObjetoOLE.crear('Excel.Application') // Crear un libro ObjetoOLE wb=Excel.Workbooks.add(xlHojaCalculo) // Crear una hoja ObjetoOLE ws=wb.WorkSheets(1) Continúa en la siguiente página Computación en Acción, S.A. de C.V. Derechos Reservados® Página C-4 Casos especiales Reportes en Excel®, Continuación Creación del encabezado Continúa // Establecer ancho de columnas ws.Columns(1).ColumnWidth = 10 ws.Columns(2).ColumnWidth = 24 ws.Columns(3).ColumnWidth = 10 ws.Columns(4).ColumnWidth = 14 ws.Columns(5).ColumnWidth = 14 ws.Columns(6).ColumnWidth = 20 // Mostrar Excel excel.visible=-1 vReng=1 // Ultima Columna argColFinal='I' // Pone el nombre del sistema ws.Range('A' & vReng).Font.Color = @RGB(255;0;0) ws.Range('A' & vReng).Font.Size = 10 ws.Range('A' & vReng).Value = 'CONTPAQ i CONTABILIDAD' vReng=vReng+1 // Pone el nombre de la empresa ws.Range('A' & vReng).Font.Size = 14 ws.Range('A' & vReng).Font.FontStyle = 'Negrita' // Lo centra en las columnas B a la R ws.Range('A' & vReng & ':' & argColFinal & vReng).HorizontalAlignment = xlCentrarEnSeleccion ws.Range('A' & vReng ).Value = 'Gran Empresa' vReng=vReng+1 // Pone el titulo del reporte en EXCEL ws.Range('A' & vReng).Font.Size = 12 ws.Range('A' & vReng).Font.FontStyle = 'Negrita' ws.Range('A' & vReng ).Value = 'Listado de Pólizas' // Lo centra en las columnas A a la S ws.Range('A' & vReng & ':' & argColFinal & vReng).HorizontalAlignment = xlCentrarEnSeleccion vReng=vReng+1 ws.Range('A' & vReng).Font.Size = 12 ws.Range('A' & vReng).Font.FontStyle = 'Negrita' // Lo centra en las columnas A a la S ws.Range('A' & vReng & ':' & argColFinal & vReng).HorizontalAlignment = xlCentrarEnSeleccion Continúa en la siguiente página Casos espeicales Página C-5 Computación en Acción, S.A. de C.V. Derechos Reservados® Reportes en Excel®, Continuación Creación del encabezado // Avanza de renglon vReng = vReng + 4 Continúa // Pone el titulo de cada columna en EXCEL ws.Range('A' & vReng & ':' & argColFinal & vReng).Borders(xlInferior).LineStyle = xlLineaSimple ws.Range('A' & vReng & ':' & argColFinal & vReng).Borders(xlSuperior).LineStyle = xlLineaSimple ws.Range('A' & vReng & ':' & argColFinal & vReng).Borders(xlIzquierda).LineStyle = xlLineaSimple ws.Range('A' & vReng & ':' & argColFinal & vReng).Borders(xlDerecha).LineStyle = xlLineaSimple ws.Range('A' & vReng & ':' & argColFinal & vReng).Interior.ColorIndex = 55 ws.Range('A' & vReng & ':' & argColFinal & vReng).Font.FontStyle = 'Negrita' ws.Range('A' & vReng & ':' & argColFinal & vReng).Font.Color = @RGB(255;255;255) ws.Range('A' & vReng).Value='Cuenta' ws.Range('B' & vReng).Value='Nombre' ws.Range('C' & vReng).Value='Tipo' ws.Range('D' & vReng).Value='Periodo' ws.Range('E' & vReng).Value='Ejercicio' ws.Range('F' & vReng).Value='Concepto' ws.Range('G' & vReng).Value='Fecha' ws.Range('H' & vReng).Value='Cargos' ws.Range('I' & vReng).Value='Abonos' vReng=vReng+1 // Agregar Autofiltro ws.rows(8).AutoFilter Computación en Acción, S.A. de C.V. Derechos Reservados® Página C-6 Casos especiales Reportes sensibles Introducción El Reporteador tiene la capacidad de crear reportes sensibles al contexto, al hacer clic en un área del reporte se ejecutará un segundo reporte basado en la información del primero. Sintaxis DefFunc fFuncionSensible(aColumna; aArgumentos) Ejecuta 'REPORTE_DESTINO.RTW'; parametro1, parametroN; aParametros FinFunc DefRegion fFuncionSensible [CN].RegionInfo vStringParametros Parámetros A continuación se muestra la descripción de los parámetros: Parámetro fFuncionSensible aColumna aParametros parametro1,…, parametroN aParametros CN vStringParametros Se refiere a Nombre de la función que se ejecutará. Número de columna sensible. String con los argumentos de la función. Parámetros a enviar al reporte destino. Importante: Los parámetros deben ser exactamente los mismos que se reciben en el reporte destino. String fijo requerido por la función. Define la columna sensible al contexto. String con los parámetros a enviar a la función. Ejemplo El siguiente ejemplo muestra el reporte fuente Sensibles_Polizas.RTW que despliega un listado de pólizas, y el reporte destino Sensibles_Movimientos.RTW que despliega los movimientos de las pólizas. Columna sensible En el reporte fuente, se define la columna del “Folio” como area sensible al contexto, quiere decir que al hacer clic sobre el folio se ejecutará el reporte destino mostrando los movimientos de póliza de ese folio. Parámetros Se enviarán 4 campos como parámetros: "Ejercicio", "Periodo", "Tipo" y "Folio". Importante: Los parámetros que se envían desde el reporte fuente deben ser exactamente los mismos que se reciben en el reporte destino. Continúa en la siguiente página Casos espeicales Página C-7 Computación en Acción, S.A. de C.V. Derechos Reservados® Reportes sensibles, Continuación Ejemplo reporte fuente // Reporte Listado de pólizas "Sensibles_Polizas" // incluye un área sensible que ejecuta los movimientos de póliza // se mandan como parametros: Ejercicio, Periodo, TipoPol y Folio // Elaboró: Marco A. Muñoz // Fecha: 18 / Dic / 2008 // Se definen las columnas del reporte Columnas 7;3 // ******************** // fEjecutaMovimientos // Se define la función que ejecutará el reporte de movimientos de póliza // // Argumento - aColumna: Número de columna // Argumento - aMovimientos: String que contiene los campos "Ejercicio", "Periodo", "Tipo" y //"Folio" que se enviarán como parámetro //al reporte "Sensibles_Movimientos.RTW" // ******************** DefFunc fEjecutaMovimientos(aColumna; aMovimientos) Ejecuta 'SENSIBLES_MOVIMIENTOS2.RTW'; @Escoge(aMovimientos;0),@Escoge(aMovimientos;1),@Escoge(aMovimientos;2),@Escoge( aMovimientos;3); aMovimientos FinFunc // Se abre la empresa usaempresa tEmpresa;'Contpaq i' // Se abre la tabla Pólizas usatabla tPolizas = tEmpresa['Polizas'] // Se despliega el título del reporte Texto '^L I S T A D O D E P O L I Z A S' Imprime // Se despliegan los títulos de las columnas Lista 'EJERCICIO','PERIODO','TIPO','FOLIO','CARGOS','ABONOS','ID' Continúa en la siguiente página Computación en Acción, S.A. de C.V. Derechos Reservados® Página C-8 Casos especiales Reportes sensibles, Continuación Ejemplo reporte fuente // Se define la región sensible al contexto y la función que se ejecutará // al hacer doble clic sobre un registro DefRegion fEjecutaMovimientos // Se agregan los campos del query tPolizas.Agregacolumna ['Ejercicio'] tPolizas.Agregacolumna ['Periodo'] tPolizas.Agregacolumna ['TipoPol'] tPolizas.Agregacolumna ['Folio'] tPolizas.Agregacolumna ['Cargos'] tPolizas.Agregacolumna ['Abonos'] tPolizas.Agregacolumna ['Fecha'] tPolizas.Agregacolumna ['Id'] // Se procesa el query tPolizas.Procesa // Se recorre toda la tabla Pólizas Mientras tPolizas->Encontro // Se define la columna C3 que se marcará como área sensible al contexto, al hacer // doble clic sobre el registro de esta columna // se mandarán los campos "Ejercicio", "Periodo", "TipoPol" y "Folio" como //parámetros a la función fEjecutaMovimientos [C3].RegionInfo tPolizas(Ejercicio) & ',' & tPolizas(Periodo) & ',' & tPolizas(TipoPol) & ',' & tPolizas(Folio) // Se despliegan los campos del registro actual en pantalla Lista tPolizas(Ejercicio),tPolizas(Periodo),tPolizas(TipoPol),tPolizas(Folio),tPolizas(Cargos),tPolizas (Abonos),tPolizas(Id) // Se salta al siguiente registro tPolizas.Busca Siguiente FinMientras Continúa en la siguiente página Casos espeicales Página C-9 Computación en Acción, S.A. de C.V. Derechos Reservados® Reportes sensibles, Continuación Ejemplo reporte destino // Reporte de movimientos de póliza // Elaboró: Marco A. Muñoz // Fecha: 18 / Dic / 2008 // Se definen las columnas del reporte Columnas 6;3 // Se abre la empresa usaempresa tEmpresa;'Contpaq i' // Se abre la tabla de Movimientos usatabla tMovimientos = tEmpresa['MovimientosPoliza'] // Se despliega el título del reporte Texto '^L I S T A D O D E M O V I M I E N T O S' Imprime // Se despliegan los títulos de las columnas Lista 'EJERCICIO','PERIODO','TIPO','FOLIO','CARGOS','ABONOS'//,'ID' // Se definen los filtros del reporte Parametros Titulo 'Filtros del reporte' Pagina 'Principal' Parametro pEjercicio = 2008 Captura Titulo 'Ejercicio' Ayuda 'Capture el Ejercicio' Control CtrlNumero FinCaptura Parametro pPeriodo = 1 Captura Titulo 'Periodo' Ayuda 'Capture el Periodo' Control CtrlNumero FinCaptura Parametro pTipoPol = 1 Captura Titulo 'Tipo Póliza' Ayuda 'Capture el Tipo de Póliza' Control CtrlNumero FinCaptura Parametro pFolio = 1 Captura Titulo 'Folio' Ayuda 'Capture el Folio' Control CtrlNumero FinCaptura FinPagina FinParametros Continúa en la siguiente página Computación en Acción, S.A. de C.V. Derechos Reservados® Página C-10 Casos especiales Reportes sensibles, Continuación Ejemplo reporte destino // Se define la búsqueda en la tabla Movimientos tMovimientos.Agregacolumna ['Ejercicio'] tMovimientos.Agregacolumna ['Periodo'] tMovimientos.Agregacolumna ['TipoPol'] tMovimientos.Agregacolumna ['Folio'] tMovimientos.Agregacolumna ['TipoMovto'] tMovimientos.Agregacolumna ['Importe'] tMovimientos.Agregacolumna ['Fecha'] tMovimientos.Agregacondicion [tMovimientos(Ejercicio) = pEjercicio] tMovimientos.Agregacondicion [tMovimientos(Periodo) = pPeriodo] tMovimientos.Agregacondicion [tMovimientos(TipoPol) = pTipoPol] tMovimientos.Agregacondicion [tMovimientos(Folio) = pFolio] tMovimientos.Procesa Mientras tMovimientos->Encontro // Se despliegan los campos del registro actual en pantalla Texto C0;tMovimientos(Ejercicio) Texto C1;tMovimientos(Periodo) Texto C2;tMovimientos(TipoPol) Texto C3;tMovimientos(Folio) Si tMovimientos(TipoMovto)=false Texto C4;tMovimientos(Importe) Sino Texto C5;tMovimientos(Importe) FinSi Imprime // Se salta al siguiente registro tMovimientos.Busca Siguiente FinMientras Casos espeicales Página C-11 Computación en Acción, S.A. de C.V. Derechos Reservados® Reportes en CONTPAQ i® NÓMINAS Introducción Los reportes en CONTPAQ i® NÓMINAS con conexión a SQL son prácticamente igual a los reportes de CONTPAQ i® COMERCIAL, solo cambian las instrucciones de conexión que se explican a continuación. Instrucción Conexion La instrucción Conexion establece una liga a las bases de datos. Para el caso de CONTPAQ i® NÓMINAS se establecen dos conexiones: • A las tablas generales. • Y a las tablas dentro de la empresa. Conexión a las tablas de la empresa La siguiente instrucción establece una conexión a las tablas de la empresa: Conexion conexionNomipaq = Conexion.crear('jdbc:jtds:sqlserver://' & @parametroConsola('Servidor') & '/'& @parametroConsola('NombreEmpresa') &';instance='& @parametroConsola('Instancia'),@parametroConsola('NombreUsuario'),@parametroConsola( 'Clave')) Nota: La instrucción @parametroConsola envía los parámetros necesarios para el String de conexión. Conexión a las tablas generales La siguiente instrucción establece una conexión a las tablas generales: Conexion conexionNomipaq2 = Conexion.crear('jdbc:jtds:sqlserver://' & @parametroConsola('Servidor') & '/nomGenerales;instance='& @parametroConsola('Instancia'),@parametroConsola('NombreUsuario'),@parametroConsola( 'Clave')) Consultas Para extraer información de las tablas se utiliza la instrucción Consulta. // El siguiente código extrae información de la empresa a partir de las tablas generales. idemp= @parametroConsola('IdEmpresa') Consulta ConsultaE=conexionNomipaq2['SELECT e.NombreEmpresa,e.RFC,e.RegistroIMSS,e.FechaConstitucion,e.Homoclave, e.mascarillacodigo FROM nom10000 e WHERE e.IdEmpresa = \''& idemp &'\'' ] Nota: Observe que el apóstrofe es caracter reservado tanto en SQL como en reporteador. A fin de que el apostrofe se tome como caracter literal, se deberá anteponer una diagonal inversa. Ejemplo \’. Referencia: Para más información sobre reportes de CONTPAQ i® NÓMINAS, consulte el reporte AltaIMSS.RPT ubicado en <C:\Compac\Empresas\Reportes\NOMINAS> Editor de reportes Para ejecutar el Editor de reportes de CONTPAQ i® NÓMINAS haga doble clic sobre el archivo run editor.bat ubicado en la siguiente ruta: <C:\Archivos de programa\Compac\Nominas\reporteador i> Computación en Acción, S.A. de C.V. Derechos Reservados® Página C-12 Casos especiales