Plaza Nicanor Piole, 1 - Esc. Izq. - 1 dcha. 33205 Gijn (Asturias) Tels.: 985 35 64 60 - 985 35 34 64 Fax 985 35 44 09 Correo electrnico: comercial@velazquezvisual.com Web: www.velazquezvisual.com No est permitida la reproduccin total o parcial de este libro, ni su tratamiento informtico, ni la transmisin de ninguna forma o por cualquier medio, ya sea electrnico, mecnico, por fotocopia, por registro u otros mtodos, sin el permiso previo y por escrito de los titulares. Agradecemos la inestimable colaboracin de los compaeros de tica Software, de los equipos de programacin y soporte, en especial el gran esfuerzo realizado por Rafael Cueto-Felgueroso Sols, y a los equipos de comercial y administracin por su contribucin a que llegara a buen puerto este manual. ndice 01. INTRODUCCIN ............................................................................................................... 15 1.1. NACIMIENTO Y EVOLUCIN DE VELZQUEZ VISUAL............................................................ 17 1.2. MODELO REAL ............................................................................................................ 19 02. INSTALACIN DE VELZQUEZ VISUAL......................................................................... 21 2.1. OBTENER VELZQUEZ VISUAL........................................................................................ 23 2.2. REQUISITOS MNIMOS.................................................................................................... 23 2.3. INSTALACIN DE VELZQUEZ VISUAL............................................................................... 23 2.4. EJECUTABLES DE VELZQUEZ VISUAL ............................................................................. 23 2.5. MODOS DE GUARDAR UN PROYECTO. ARCHIVOS GENERADOS POR VELZQUEZ VISUAL.......... 24 03. INTERFAZ DEL EDITOR DE PROYECTOS...................................................................... 27 3.1. VENTANA PRINCIPAL DEL EDITOR DE PROYECTOs............................................................. 29 3.1.1. Barra de Mens .......................................................................................... 30 3.1.2. Barra de Herramientas................................................................................ 32 3.1.3. Mens de Contexto .................................................................................... 34 3.2. VENTANA ESQUEMA DE TABLAS...................................................................................... 35 3.2.1. Barra de Mens .......................................................................................... 39 3.2.2. Barra de herramientas y opciones.............................................................. 39 3.2.3. Mens de Contexto .................................................................................... 41 3.3. PERSONALIZACIN DEL ENTORNO DE TRABAJO ................................................................. 42 3.3.1. Personalizacin de Barras de Herramientas............................................... 43 3.3.2. Personalizacin del Entorno ....................................................................... 44 3.3.3. Personalizacin del Proyecto ..................................................................... 45 3.3.4. Personalizacin del Esquema de Tablas..................................................... 47 04. DESARROLLO BSICO DE UNA APLICACIN.............................................................. 49 4.1. EXPLICACIN BSICA Y GENERAL.................................................................................... 51 4.1.1. Anlisis de la informacin........................................................................... 51 4.1.2. Principales elementos que componen una aplicacin............................... 51 4.2. INICIANDO EL PROYECTO ............................................................................................... 53 4.2.1. Editor de Proyectos.................................................................................... 53 4.2.2. Fuentes por defecto ................................................................................... 54 4.2.3. Propiedades del Proyecto .......................................................................... 55 4.2.4. Tareas pendientes....................................................................................... 60 4.3. ESQUEMA DE TABLAS.................................................................................................... 61 4.3.1. Tablas de datos........................................................................................... 61 4.3.2. Tablas de datos: maestras.......................................................................... 61 4.3.3. Enlace a tabla de datos maestra (enlace singular y plural)......................... 96 4.4. OBJETOS VISUALES...................................................................................................... 108 4.4.1. Galera de objetos....................................................................................... 108 4.4.2. Rejilla visor de tablas .................................................................................. 110 4.4.3. Formulario de Edicin Fichas ..................................................................... 134 4.4.4. Bsquedas.................................................................................................. 190 4.4.5. Mens ......................................................................................................... 208 4.4.6. Localizador.................................................................................................. 272 4.5. EJECUCIN (VRUNNER) ................................................................................................ 277 4.5.1. Interfaz del Ejecutor (VRunner) ................................................................... 277 4.5.2. Navegacin en el ejecutor .......................................................................... 287 Indice 10 11 VELAZQUEZ VISUAL 4.5.3. Transacciones ............................................................................................. 290 4.6. AGENDA DE TAREAS ..................................................................................................... 292 4.6.1. Exposicin del problema ............................................................................ 292 4.6.2. Esquema de Tablas..................................................................................... 294 4.6.3. Objetos Visuales ......................................................................................... 320 05. INSPECTORES .................................................................................................................. 391 5.1. DE TABLAS Y CAMPOS (F10) ................................................................................ 393 5.2. DNDE SE USA EL OBJETO (F9)................................................................................ 394 5.3. QU OBJETOS USA ................................................................................................ 397 5.4. OBJETOS NO USADOS ............................................................................................. 398 5.5. POR TIPO DE OBJETO (Ctrl + F9)............................................................................. 399 5.6. OBJETOS DE UN COLOR (F3) ................................................................................... 400 5.7. CONTENIDO DE FRMULAS ....................................................................................... 401 5.8. ERRORES DEL PROYECTO ......................................................................................... 402 06. ASISTENTES...................................................................................................................... 405 6.1. ASISTENTE PARA EDICIN DE FRMULAS.......................................................................... 407 6.1.1. Sintaxis de las frmulas. Operadores y funciones ..................................... 408 6.1.2. Operaciones avanzadas.............................................................................. 413 6.2. USO DE LAS CADENAS DE FORMATO................................................................................ 421 6.2.1. Sintaxis de las cadenas de formato............................................................ 421 6.2.2. El asistente para la edicin de cadenas de formato .................................. 422 6.2.3. Subcadenas de formato ............................................................................. 423 6.2.4. Conversin automtica de datos y secuencias de escape en cadenas de caracteres .............................................................................................. 427 07. VARIABLES........................................................................................................................ 429 7.1. VARIABLES GLOBALES ................................................................................................... 431 7.1.1. Definicin.................................................................................................... 431 7.1.2. Tipos de Variables Globales (en memoria y en disco)................................ 433 7.2. VARIABLES DE SISTEMA................................................................................................. 434 7.2.1. Definicin y propiedades............................................................................ 434 7.2.2. Variables de sistema de Velzquez Visual .................................................. 435 7.3. VARIABLES LOCALES..................................................................................................... 437 TOMO II 08. DESARROLLO COMPLETO DE UNA APLICACIN....................................................... 15 8.1. TIPOS DE TABLA........................................................................................................... 17 8.1.1. Tabla Submaestra ....................................................................................... 17 8.1.2. Tabla Arbolada............................................................................................ 20 8.1.3. Tablas histricas ......................................................................................... 24 8.1.4. Maestro de segundo nivel con clave numrica.......................................... 32 8.1.5. Histrico doble ........................................................................................... 37 8.1.6. Creacin de una tabla igual a una base de datos externa......................... 39 8.2. TIPOS DE ENLACE......................................................................................................... 40 8.2.1. Asistentes para la creacin de enlaces ...................................................... 40 8.2.2. Enlace a hermano contiguo........................................................................ 41 8.2.3. Singular de plural por posicin................................................................... 45 8.2.4. Singular de plural por ndice....................................................................... 46 8.2.5. Enlace a tabla de datos indirecta real y virtual .......................................... 49 8.2.6. Las actualizaciones..................................................................................... 54 8.2.7. Componente de actualizacin a un hermano contiguo.............................. 58 8.2.8. Enlace a maestro de una tabla contra s misma......................................... 62 8.3. ANLISIS DE LA INFORMACIN: EJEMPLOS....................................................................... 64 8.3.1. Un centro de enseanza............................................................................. 64 8.3.2. Empresa de instalacin de cristalera para vehculos................................. 65 8.3.3. Aplicacin de anlisis para obras literarias................................................. 67 8.3.4. Una galera de arte ..................................................................................... 68 8.3.5. Gestin de un colegio................................................................................. 69 8.3.6. Gestin de una librera................................................................................ 71 8.3.7. Aplicacin para turismo rural ...................................................................... 73 8.3.8. Gestin de un Quiosco............................................................................... 78 8.3.9. Pedidos de compras................................................................................... 86 8.3.10. Aplicacin para control de existencias en almacenes (caso de compras) .. 91 8.3.11. Tienda de discos......................................................................................... 96 8.3.12. Hotel ........................................................................................................... 98 8.3.13. Base de datos de cine................................................................................ 104 8.3.14. Gestin comercial ....................................................................................... 113 8.4. EL ALMACN DE OBJETOS ............................................................................................ 127 8.5. MS OBJETOS VISUALES ............................................................................................... 136 8.5.1. La Lupa ................................................................................................. 136 8.5.2. Encarpetado de Histrico ..................................................................... 141 8.5.3. Cesta de la compra ............................................................................... 149 8.5.4. Hoja de Clculo ..................................................................................... 155 8.5.5. Base de datos externa ODBC-DAO ...................................................... 159 8.5.6. Dibujo .................................................................................................... 164 8.5.7. Multi-Iconos ........................................................................................ 169 8.5.8. Imagen Gif ............................................................................................. 170 8.5.9. Barras de Herramientas ...................................................................... 170 8.5.10. Impresora Lgica .................................................................................. 183 8.5.11. Comunicacin Serie .............................................................................. 184 8.5.12. rbol Visor de Tablas .......................................................................... 186 Indice 12 13 VELAZQUEZ VISUAL 8.5.13. Casillero ................................................................................................ 189 8.5.14. Agendizador .......................................................................................... 205 8.5.15. Informe .................................................................................................. 207 8.5.16. Pgina Html ........................................................................................... 253 8.5.17. Componente Html ................................................................................ 256 8.5.18. Editor de Pginas Html ............................................................................... 258 8.5.19. Procesos ............................................................................................... 279 8.5.20. Demonios .............................................................................................. 287 8.5.21. Funcin ............................................................................................... 288 8.5.22. Funciones de Procesos .............................................................................. 289 8.5.23. Ejecucin de procesos en primer, segundo y tercer plano en la arquitectura VRunner y la arquitectura cliente-servidor de Velzquez Visual ................. 404 8.5.24. Tubos .......................................................................................................... 406 8.5.25. Librera de Funciones DLL ................................................................... 419 8.5.26. Directorio de Tablas ............................................................................ 424 09. EJECUTAR UNA APLICACIN......................................................................................... 431 9.1. CMO EJECUTAR UN PROYECTO..................................................................................... 433 9.2. INICIO DE UNA APLICACIN, CLAVE Y NOMBRE DE USUARIO ................................................ 433 9.3. EL MEN DEL USUARIO Y SUS OPCIONES......................................................................... 435 9.4. QU OPCIONES NOS DAN LA REJILLA, EL FORMULARIO Y LOS VISORES DE TABLAS ARBOLADAS.... 436 9.4.1. Formas de llamar a una rejilla..................................................................... 437 9.4.2. Formas de llamar a un formulario............................................................... 437 9.4.3. Eliminacin temporal de un elemento en una rejilla................................... 439 9.4.4. Invertir el orden de una lista dentro de una rejilla ...................................... 439 9.4.5. Seleccin mltiple de registros en una rejilla (Multiseleccin) ................... 440 9.4.6. Edicin directa de rejillas............................................................................ 442 9.4.7. Exportacin Ascii ........................................................................................ 443 9.4.8. La Cesta de la Compra............................................................................... 444 9.4.9. Guardar y recuperar listas virtuales en disco ............................................. 448 9.4.10. Imprimir desde una rejilla o un formulario.................................................. 448 9.4.11. Cmo introducir los datos .......................................................................... 449 9.4.12. Fundir una ficha con otra............................................................................ 452 9.4.13. Cambiar aspecto de la rejilla ...................................................................... 453 9.4.14. Cambio de visualizacin de las hojas de clculo ....................................... 454 9.4.15. Imgenes dinmicas ................................................................................... 454 9.4.16. Rejillas encarpetadas en formularios (encarpetados de histrico) ............. 459 9.4.17. Usos avanzados de una rejilla .................................................................... 462 9.4.18. Utilidades.................................................................................................... 471 9.4.19. Ejecucin de procesos desde una rejilla.................................................... 473 9.4.20. Conmutador de herencia de histricos para arbolados............................. 476 9.4.21. Altas desde un Localizador Arbolado......................................................... 478 9.5. EXPLORADOR WEB....................................................................................................... 479 9.6. CORREO ELECTRNICO ................................................................................................. 480 9.7. INCORPORACIN DE UN MANUAL DE AYUDA PROPIO PARA UNA APLICACIN........................... 480 10. INSTALACIN DE APLICACIONES ................................................................................. 483 10.1. VERSIN DE VELZQUEZ VISUAL BASADA EN SERVIDOR DE DISCO (MONOPUESTO) ................ 485 10.2. VERSIN CLIENTE-SERVIDOR DE VELZQUEZ VISUAL ......................................................... 486 10.3. CREACIN DE APLICACIONES PARA EJECUTAR DESDE CD-ROM......................................... 487 11. SERVIDOR DE APLICACIONES....................................................................................... 489 11.1. INSTALACIN DEL SERVIDOR .......................................................................................... 492 11.2. INTERFAZ DEL SERVIDOR ............................................................................................... 493 11.3. BARRA DE MENS ........................................................................................................ 495 11.3.1. Aplicaciones................................................................................................ 495 11.3.2. Editar........................................................................................................... 496 11.3.3. Servicios ..................................................................................................... 497 11.3.4. Utilidades.................................................................................................... 497 11.3.5. Ver............................................................................................................... 498 11.3.6. Ventana ....................................................................................................... 499 11.3.7. Ayuda.......................................................................................................... 500 11.4. BARRA DE HERRAMIENTAS ............................................................................................. 500 11.5. CONFIGURACIN DEL SERVIDOR..................................................................................... 502 11.5.1. Pestaa Estilos............................................................................................ 503 11.5.2. Pestaa VATP ............................................................................................. 504 11.5.3. Pestaa HTTP............................................................................................. 505 11.5.4. Pestaa iRunner.......................................................................................... 506 11.5.5. Pestaa Licencia......................................................................................... 507 11.5.6. Configuracin bsica.................................................................................. 507 11.6. REA DE CONFIGURACIONES.......................................................................................... 508 11.6.1. Pestaa Aplicaciones.................................................................................. 508 11.6.2. Pestaa Usuarios........................................................................................ 510 11.6.3. Pestaa Enganches .................................................................................... 513 11.6.4. Pestaa Transacciones ............................................................................... 514 11.6.5. Pestaa Archivos ........................................................................................ 516 11.7. CONFIGURACIN DE USUARIOS...................................................................................... 519 11.8. CONFIGURACIN DE GRUPOS DE USUARIOS..................................................................... 527 11.9. CONFIGURACIN DE GRUPOS DE MENSAJERA.................................................................. 532 11.10. CONFIGURACIN DE TAREAS.......................................................................................... 534 11.10.1. Pestaa Tareas programadas............................................................... 534 11.10.2. Pestaa Tareas ejecucin .................................................................... 536 11.11. HISTORIAL DEL SERVIDOR .............................................................................................. 537 11.11.1. Opciones de men .................................................................................... 538 11.11.2. Configuracin bsica del Historial del servidor ......................................... 543 11.12. CONFIGURACIN DE LOS DOMINIOS WEB ......................................................................... 544 11.13. NAVEGADOR VELZQUEZ VISUAL.................................................................................... 547 11.13.1. Instalacin del Navegador ......................................................................... 547 11.13.2. Interfaz del Navegador .............................................................................. 548 11.13.3. Barra de mens ......................................................................................... 549 11.13.4. Barra de herramientas ............................................................................... 560 11.14. OPTIMIZACIN DE APLICACIONES EN CLIENTE-SERVIDOR ................................................... 563 11.14.1. Sockets TCP: retardos y optimizacin ...................................................... 563 11.14.2. Optimizar el tamao del mapa .................................................................. 564 11.14.3. Elementos que retardan una aplicacin.................................................... 564 11.14.4. Transacciones............................................................................................ 566 11.14.5. Optimizaciones para el rendimiento ptimo en ejecucin........................ 567 Indice 14 15 VELAZQUEZ VISUAL 11.14.6. Efectos negativos no deseados ................................................................ 572 11.15. INCORPORACIN DE UN MANUAL DE AYUDA PROPIO PARA UNA APLICACIN........................... 575 12. EDITOR DE PERSONALIZACIONES............................................................................... 577 12.1. INTRODUCCIN.............................................................................................................. 579 12.2. INTERFAZ DEL EDITOR..................................................................................................... 580 12.2.1. Partes de la ventana del editor .................................................................... 580 12.2.2. Barra de Mens ........................................................................................... 581 12.2.3. Barra de Herramientas................................................................................. 583 12.2.4. Personalizacin del entorno de trabajo ....................................................... 584 12.3. CREACIN DE PERSONALIZACIONES................................................................................. 586 12.3.1. Designacin de objetos como personalizables (Editor de Proyectos) ........ 586 12.3.2. Nueva personalizacin (Editor de Personalizaciones).................................. 587 12.4. PERSONALIZAR OBJETOS DE UN MAPA DE VELZQUEZ VISUAL ............................................ 589 12.4.1. Personalizar un informe ............................................................................... 589 12.4.2. Personalizar un dibujo.................................................................................. 591 12.4.3. Crear informes y dibujos.............................................................................. 592 12.5. CARGAR LAS PERSONALIZACIONES EN LA APLICACIN........................................................ 593 13. IMPORTADOR XBASE ...................................................................................................... 609 13.1. INICIO DEL IMPORTADOR XBASE...................................................................................... 611 13.2. IMPORTAR UNA BASE DE DATOS ASCII ............................................................................ 612 13.3. IMPORTAR UNA BASE DE DATOS DE DBASE....................................................................... 615 ANEXO I: FORMATEADORES DE VELZQUEZ VISUAL....................................................... 617 ALFABTICOS ......................................................................................................................... 619 NUMRICOS ........................................................................................................................... 619 DE FECHAS ............................................................................................................................ 619 DE HORAS ............................................................................................................................. 620 ANEXO II: FUNCIONES DEL ASISTENTE DE EDICIN DE FRMULAS ANEXO II: DE VELZQUEZ VISUAL ....................................................................................... 623 ANEXO III: PALETA DE COLORES.......................................................................................... 641 08 Desarrollo completo de una aplicacin 8.1 Tipos de tabla Ya hemos visto cmo las tablas son los objetos que usamos para almace- nar la informacin de manera organizada. Tambin hemos introducido las tablas de tipo maestro de clave numrica y las de tipo esttico. A continua- cin vamos a ver el resto de tipos de tablas de datos con los que cuenta Velzquez Visual. 8.1.1. Tabla Submaestra Son tablas que necesitan de una tabla padre para completarse, estando su cdigo constituido por la unin del cdigo del padre, o padres (no hay lmi- te en el nmero de niveles) ms el suyo propio. De esta forma la tabla sub- maestra tendr un subcdigo propio por cada cdigo padre. Pueden exis- tir dos fichas con el mismo subcdigo mientras la ficha de la tabla padre sea diferente. Ejemplos de tablas submaestras pueden ser: PROVINCIA, siendo su padre PAIS. POBLACIN, siendo su padre PROVINCIA, etc. Para crear una tabla submaestra debemos pulsar el botn Nueva tabla sub- maestra , en la barra de herramientas situada a la derecha en la ventana Esquema de tablas del Editor. Aparecer la ventana correspondiente a las propiedades de la tabla submaestra. 08 Desarrollo completo de una aplicacin Nueva tabla submaestra 18 19 VELAZQUEZ VISUAL Como podemos ver, las propiedades son similares a las vistas para la tabla maestra, con el aadido de que debe indicarse cul va a ser la tabla de da- tos padre de la tabla submaestra. La Longitud-rango que especificamos no es el nmero mximo de registros de la tabla, sino de registros por cada maestro de la tabla padre. Ejemplo: creacin de una tabla submaestra En este ejemplo vamos a crear una tabla maestra y a continuacin otra tabla, submaestra de la anterior. Para ello debemos seguir los siguientes pasos: Entramos en el Editor de proyectos y creamos un nuevo proyecto. Creamos una tabla maestra (desde el Editor de Esquemas pulsamos sobre el botn Nueva tabla maestra ) con las siguientes propiedades: nombre plural: Pases. Nombre singular: Pas. Pulsamos el botn Aceptar. A continuacin pulsamos el botn Nueva tabla submaestra y creamos una tabla submaestra con las siguientes propiedades: Tabla de datos padre: PAISES. Nombre plural: Provincias. Nombre singular: Provincia. Pulsamos el botn Aceptar. VENTANA CREACIN DE MAESTRO e Nueva tabla maestra Nueva tabla submaestra Si observamos el Editor de Esquemas podremos ver cmo hay dos tablas: PAISES y PROVINCIAS. Tambin se puede apreciar cmo Velzquez Visual ha enlazado directamente las tablas PAISES y PROVINCIAS. Esto siempre lo hace al crear una tabla submaestra, crendose automticamente dicho enlace porque la relacin que existe entre una tabla submaestra y su tabla padre es muy fuerte (recuerde que el cdigo de la tabla submaestra est compuesto por el cdigo de la tabla padre ms el suyo propio). 08 Desarrollo completo de una aplicacin CREACIN DE SUBMAESTRO e 20 21 VELAZQUEZ VISUAL Se pueden crear tantos niveles de tablas submaestras como se quiera, es de- cir, en nuestro caso se podra crear otra tabla submaestra que tenga como ta- bla padre a PROVINCIAS (por ejemplo una tabla CIUDADES), y a su vez la ta- bla submaestra creada ahora sera la tabla padre de otra submaestra y as in- definidamente. El ndice CODIGO de cada una estara formada como se pue- de suponer, por el campo CODIGO de la tabla padre ms el campo CODIGO de la propia tabla. Por lo general, a la hora de realizar un desarrollo con Velz- quez Visual, no suelen realizarse ms de dos niveles de tablas submaestras, no por limitacin tcnica ni de rendimiento, sino por simplificar la programacin. 8.1.2. Tabla Arbolada Las tablas arboladas son en realidad tablas maestras que se visualizan con una estructura arbolada (al estilo de un rbol de directorios), de modo que su campo CODIGO se abre en nuevas ramas por cada carcter o grupo de ca- NDICE CDIGO DE LA TABLA SUBMAESTRA e Cuestiones 1. Crear dos tablas: una de tipo maestro y otra submaestra de la ante- rior. Ver cmo el ndice cdigo de la tabla submaestra est com- puesto por el cdigo propio y el de su tabla padre. 2. Crear una tabla de tipo maestro: PAISES, otra submaestra de PAI- SES: COMUNIDADES, y otra submaestra de COMUNIDADES: PRO- VINCIAS. Comprobar cmo Velzquez Visual no slo enlaza PAISES con COMUNIDADES y COMUNIDADES con PROVINCIAS, sino que tambin enlaza PAISES con PROVINCIAS. Comprobar tambin c- mo el ndice cdigo de PROVINCIAS est compuesto por el cdigo propio ms el de COMUNIDADES y PAISES. racteres que aadimos. Es el campo CODIGO el que determina la ramificacin, representando cada carcter o grupo de caracteres un piso o nivel del rbol. Vemoslo con un ejemplo de Astronoma: en el Universo encontramos muchos tipos de objetos, por ejemplo galaxias. Pero las galaxias a su vez se clasifican en espirales, barradas, irregulares... y cada uno de estos grupos presenta ms subdivisiones an, y esto ocurre para casi todos los tipos de objeto del Uni- verso, sean galaxias, estrellas, nebulosas... Claramente, si queremos organizar los tipos de objeto del Universo en una tabla, sta ha de ser de tipo arbolado. Para introducir un registro en la tabla arbolada hemos de especificar su c- digo y su nombre, lo que se hace en ejecucin mediante un formulario. Por ejemplo, para el registro galaxia especificamos G, y ya tenemos un tipo de objeto: un registro de la tabla. Metamos ahora otro registro, por ejemplo, galaxia espiral. Las galaxias es- pirales son un subgrupo de las galaxias y esto queremos que se refleje en la estructura de la tabla. Para ello asignamos el cdigo GS al tipo gala- xia espiral: ya tenemos dos registros, este ltimo colgando del anterior, de modo que las galaxias espirales heredan todas las caractersticas de las ga- laxias. De igual modo, al registro galaxia irregular podramos asignarle el cdigo GI, reflejando as que las irregulares son un subgrupo de las gala- xias. Ya tenemos tres registros, colgando los dos ltimos del primero. El rbol puede seguir creciendo (el lmite est en la longitud del cdigo de la tabla), por ejemplo, asociamos el cdigo GSA a las galaxias espirales de tipo A (y ya tendramos cuatro registros en la tabla). 08 Desarrollo completo de una aplicacin ASPECTO QUE PODRA TENER EL RBOL DE TIPOS DE OBJETOS DEL UNIVERSO 22 23 VELAZQUEZ VISUAL Hasta ahora hemos construido cada nivel con un solo carcter del campo cdigo, pero tambin puede hacerse con ms de uno, por ejemplo asig- nando GAL a las galaxias, ES a las espirales, A a las de tipo A... Al igual que el resto de tablas, cada registro de una tabla arbolada est or- ganizado en campos. Por seguir con este ejemplo, los tipos de objeto del Universo podran tener los campos Ao de descubrimiento, Investigado ? (booleano), Naturaleza del objeto, etc. Gracias a las tablas arboladas podemos definir el tipo al que pertenecen los registros de otra tabla, histrica de la arbolada. Por ejemplo, supongamos la tabla LIBROS, en la que cada registro se refiere a un volumen en particu- lar. En una tabla arbolada que llamaremos MATERIAS cada registro har re- ferencia a una materia en particular (historia, historia del siglo XX, historia del siglo XIX, historia militar del siglo XX, historia de la monarqua del siglo XX... es decir, una estructura claramente arbolada). Estableciendo que LI- BROS sea histrica de MATERIAS, podemos capturar desde LIBROS la ma- teria a la que pertenece el libro (la materia no es ms que un registro de la arbolada MATERIAS). Cuando presentamos los histricos de una tabla arbolada, podemos hacer que, dado un tipo o nivel de la arbolada, nos presente todos los histricos de todas las ramas contenidas en l. A esto se le denomina herencia arbo- lada y se consigue activando el botn . Si desactivamos la herencia ar- bolada y pedimos que nos muestre los histricos a un nivel determinado, slo nos mostrar los registros definidos con el tipo correspondiente a ese nivel (y no todos los contenidos en niveles inferiores). Cuando introducimos un nuevo registro en una tabla arbolada hemos de te- ner cuidado a la hora de meter el cdigo. Si un registro tiene por cdigo A, y otro tiene AB, el de cdigo AB se ver incluido en la rama iniciada por el de cdigo A. Ahora bien, si usamos nmeros tengamos cuidado, ya que to- dos los registros cuyo cdigo empiece por 1 (10, 119, 1031...) se vern in- cluidos dentro de la rama iniciada por el de cdigo 1, todos aquellos cuyo cdigo comience por 2 se incluirn en la rama iniciada por el de cdigo 2 y as sucesivamente. Lo ms usual es definir el campo cdigo como alfanu- mrico. Se recomienda utilizar un Alfa40 para el campo cdigo, con el fin de ahorrar espacio en disco. TRUCO Herencia arbolada Las propiedades de la tabla arbolada son las mismas que las de la tabla maestra. Especial mencin merece el apartado Longitud-Rango: se refiere al nmero de niveles que va a tener la tabla arbolada. Por ejemplo, si una tabla arbolada tiene de longitud 2 bytes, el rbol tendr 3 niveles, si tiene 4 bytes tendr 6 niveles, etc. Ejemplo: creacin de una tabla arbolada Vamos a crear una tabla arbolada a la que llamaremos FAMILIAS. ste es un ejemplo clsico, ya que una familia est compuesta de subfamilias, que a su vez pueden presentar ms subniveles. Dentro del Editor de Esquemas, pulsamos el botn Nueva tabla arbolada . Aparecer la ventana creacin de maestro con clave arbolada, en la que es- cribimos Nombre plural: Familias. Nombre singular: Familia. Segn el nmero de pisos que vaya a tener el rbol seleccionamos la LON- GITUD-RANGO. En este caso marcamos el radio botn 8 bytes, lo que nos permite alcanzar hasta 12 subniveles. Pulsamos el botn Aceptar. En el Editor de Esquemas aparecer el icono de la tabla arbolada FAMILIAS. 08 Desarrollo completo de una aplicacin CREACIN DE MAESTRO CON CLAVE ARBOLADA e Nueva tabla arbolada 24 25 VELAZQUEZ VISUAL 8.1.3. Tablas histricas La caracterstica principal de una tabla histrica es que no tiene campo CO- DIGO que permita apuntar a un registro concreto, pero s puede tener otros ndices de clave nica. Se utilizan para almacenar las lneas de una tabla maestra. Las tablas histricas suelen tener un campo enlazado a una tabla maestra y un ndice que ser usado para declarar el enlace histrico de la tabla maestra. Sus propiedades son fundamentalmente las vistas hasta ahora para el resto de tablas. Incorpora adems la posibilidad de que Velzquez Visual cree automticamente un campo llamado FECHA y su correspondiente n- dice. Tambin es posible indicar cul o cules van a ser sus tablas maes- tras (lo normal es no enlazar la tabla a sus maestros desde esta ventana de propiedades). El rbol, adems del cdigo, siempre presenta (y slo presenta) el campo Nombre. Para incluir ms datos definimos el campo Nombre como frmula alfabtica, o con un contenido inicial en funcin de otros campos, y as podremos mostrar lo que queramos. TRUCO Cuestiones 1. Encontrar distintos casos que presenten una estructura arbolada (clasificaciones biolgicas, materias de libros, habitaciones de un hotel, estructura de los captulos de un libro...). 2. Crear una tabla arbolada y construir el rbol de las galaxias espirales. 3. Crear una tabla histrica de la arbolada que hemos creado en la cuestin 2. Dar de alta una serie de registros con distintos tipos de- finidos en la tabla arbolada. Una vez hecho esto comprobar cmo funciona la herencia arbolada. Ejemplo: creacin de una tabla tipo histrico Vamos a crear dos tablas: una maestra y otra de tipo histrico, y vamos a establecer un enlace entre ambas. En el Editor de Proyectos creamos una nueva tabla maestra con las siguientes propiedades: Nombre plural: Albaranes. Nombre singular: Al- barn. Dentro del Editor de Esquemas, pulsamos el botn Nueva tabla hist- rica . Aparecer la ventana Propiedades de la tabla histrica en la que aadi- mos las siguientes propiedades: Nombre plural: Lneas de Albaranes. Nombre singular: Lnea de Albarn. Pulsamos el botn Aceptar. 08 Desarrollo completo de una aplicacin e Nueva tabla maestra Nueva tabla histrica 26 27 VELAZQUEZ VISUAL Ya tenemos la tabla ALBARANES, que almacenar los datos correspon- dientes a la cabecera del Albarn (nmero de albarn, fecha, cdigo de cliente, etc.) y la tabla LNEAS DE ALBARN que contendr las lneas de un albarn (artculo, cantidad, precio, etc.). Hemos de enlazar ambas ta- blas mediante un enlace singular-plural. Con el ratn pinchamos sobre el enlazador (botn superior izquierdo) del maestro (ALBARANES) y arras- tramos hasta LNEAS DE ALBARAN. Consideremos ahora la situacin siguiente: queremos una aplicacin con la que llevar el registro de los artculos que tenemos en varios almacenes, de modo que para un almacn sepamos todos los artculos que se guardan en l, mientras que para un artculo sepamos todos los almacenes en los que se guarda. Est claro que en nuestro diseo vamos a contar con dos tablas: ARTCULOS y ALMACENES. Ahora bien, cmo las enlazamos? Ya sabe- mos que hemos de enunciar dos frases que nos ayuden, stas son: En un almacn podemos tener muchos artculos y un artculo podemos tenerlo en muchos almacenes. Vemos que este caso difiere de los que nos haba- mos encontrado hasta el momento, ahora tenemos un plural en los dos sen- tidos o plural mltiple. Para resolver estos casos hacemos uso de una tabla de tipo histrico que haga de intermediaria. Vemoslo con un ejemplo. Ejemplo: resolucin de un doble plural El planteamiento es el siguiente: tenemos dos tablas, ALMACENES y ARTCU- LOS, que como ya hemos visto estn relacionadas mediante un doble plural. Dado un almacn queremos saber todos los artculos que se guardan en l, y dado un artculo queremos saber todos los almacenes en los que est. Comenzamos el diseo de la aplicacin creando dos tablas de tipo maes- tro normal con clave numrica: ALMACENES y ARTCULOS. Nos es sufi- e e ciente con los campos CODIGO y NOMBRE que Velzquez crea por defec- to en ellas. En ARTCULOS llevaremos recuento de todos los artculos que tenemos, mientras que ALMACENES har recuento de nuestros almacenes. A continuacin vamos a crear una tabla de tipo histrico que resuelva el do- ble plural. Para ello pulsamos el botn Nueva tabla histrica , aparecien- do la ventana Creacin de Histrico. En Plural escribimos Existencias, mientras que en Singular escribimos Existen- cia. Tambin quitamos el check Campo fecha y pulsamos el botn Aceptar. Ahora que ya tenemos creada la tabla de tipo histrico el siguiente paso es crear un enlace a histrico desde las dos tablas maestras creadas anterior- mente. Para ello pulsamos con el ratn sobre el enlazador en la tabla AL- MACENES y arrastramos hasta la tabla histrica. Repetimos el proceso con la tabla ARTCULOS. Al establecer estos enlaces contra la tabla EXISTENCIAS, Velzquez ha creado en ella los campos Almacenes y Artculos, junto con sus correspon- dientes ndices, es decir, los registros de la tabla histrica constan de dos campos: Almacenes y Artculos. 08 Desarrollo completo de una aplicacin e Nueva tabla histrica 28 29 VELAZQUEZ VISUAL Hacemos ahora doble clic sobre uno de los dos ndices de la tabla EXIS- TENCIAS, hagmoslo sobre el ndice Almacenes, por ejemplo. Le aadimos el componente Artculos y le damos el tipo Clave nica. As conseguimos que en esta tabla no se repitan registros (es decir, nunca se repite una mis- ma pareja almacn - artculo). e Este diseo ya nos resuelve el doble plural. Para verlo hemos dado de alta los siguientes registros de la tabla ARTCULOS: Tambin hemos dado de alta los siguientes registros de la tabla ALMACENES: En EXISTENCIAS cada registro que damos de alta liga un binomio almacn- artculo, de modo que se registran, para cada almacn, todos los artculos que contiene (o visto de otro modo, para cada artculo, todos los almace- nes en los que ste se encuentra). En nuestro ejemplo hemos creado un formulario para dar de alta los regis- tros de la tabla ALMACENES-ARTCULOS. Supongamos entonces que en la tabla ARTCULOS elegimos un artculo determinado, por ejemplo camisetas. Podemos navegar hacia histrico con la opcin Navegante/Histricos del men del ejecutor. 08 Desarrollo completo de una aplicacin e 30 31 VELAZQUEZ VISUAL Al pulsar sobre la opcin del men Navegante/Histricos, Velzquez mues- tra la ventana Navegante: Seleccin de Histrico. En ella hemos de especifi- car hacia qu histrico de la tabla ARTCULOS nos vamos a mover. En este caso slo aparece EXISTENCIAS por ser su nico histrico. A la derecha hemos de seleccionar la rejilla en la que vamos a ver los registros histricos. Le damos al botn Aceptar y aparecern en la rejilla todos los registros de la tabla EXISTENCIAS que son histricos del artculo. Una vez obtengamos estos registros de histrico, podemos navegar hacia el maestro ALMACENES, obteniendo todos los almacenes en los que se en- cuentra el artculo. Para ello hemos de seleccionar la opcin Navegante/Maes- tros, apareciendo la ventana Navegante: Seleccin de Maestro, en la que he- mos de indicar hacia qu maestro nos movemos, en este caso Almacn. e Al aceptar obtendremos una lista de todos los almacenes en los que se en- cuentra el artculo. Ya tenemos uno de los sentidos del plural: los almace- nes del artculo. Con el otro sentido del plural el proceso es idntico: partimos ahora de un registro de la tabla ALMACENES, un almacn en concreto, y navegamos hacia histrico obteniendo todos los registros de la tabla EXISTENCIAS en los que aparece el almacn. Si navegamos hacia el maestro ARTCULOS obtendremos todos los artculos que se guardan en el almacn (ste es el otro sentido del plural, los artculos del almacn). 08 Desarrollo completo de una aplicacin e Cuestiones 1. Sugerir distintos ejemplos en los que aparezca el doble plural (AUTO- RES-LIBROS, ALUMNOS-PROFESORES, LADRONES-ROBOS). 2. Siguiendo el ejemplo anterior resolver el doble plural AUTORES-LI- BROS (caso particular de que un libro tenga ms de un autor). Dar de alta registros en las tablas AUTORES, LIBROS y LIBROS-AUTO- RES. Movindose por las tablas encontrar todos los libros de un au- tor y todos los autores de un libro. 32 33 VELAZQUEZ VISUAL 8.1.4. Maestro de segundo nivel con clave numrica Supongamos una aplicacin en la que tenemos dos tablas: POBLACIONES y CLIENTES, ambas de tipo maestro normal con clave numrica, siendo CLIENTES histrica de POBLACIONES. A la tabla CLIENTES, que se en- cuentra jerrquicamente por debajo de la tabla POBLACIONES, se la deno- mina maestro de segundo nivel con clave numrica. Podemos relacionar ambas tablas como es habitual: creando POBLACIO- NES y CLIENTES y enlazndolas a continuacin, pulsando sobre el enlaza- dor de la maestra y llevando el puntero del ratn hasta la histrica. Pero Ve- lzquez nos ofrece otra posibilidad: si ya tenemos creada la tabla POBLA- CIONES y queremos crear CLIENTES, podemos usar el asistente para la creacin de maestros de segundo nivel con clave numrica, para lo cual en la Galera de objetos seleccionamos tabla de datos, apareciendo la ventana Asistente: Creacin de una tabla de datos. Seleccionamos Maestro 2 nivel con clave numrica y aparecer la ventana de creacin de maestro 2 nivel con clave numrica. Declaramos las pro- piedades de la tabla CLIENTES, as como las tablas maestras a las que apunta. Pulsamos el botn Aceptar, crendose automticamente la tabla CLIEN- TES, enlazada a su maestro POBLACIONES. En CLIENTES se ha creado un campo de enlace por cada una de las tablas maestras apuntadas, con su ndice correspondiente (Poblaciones). 08 Desarrollo completo de una aplicacin 34 35 VELAZQUEZ VISUAL Si alguna de las tablas maestras enlazadas es submaestra de otra, Velz- quez Visual genera un nuevo campo de enlace para completar el cdigo de enlace. De hecho, generar tantos campos de enlace como sean necesa- rios, hasta llegar al padre de una relacin Maestro - Submaestro multinivel. Vemoslo con un ejemplo: Ejemplo: creacin de un maestro de 2 nivel, histrico de una tabla submaestra Supongamos una estructura en la que la tabla POBLACIONES es sub- maestra de PROVINCIAS y sta, a su vez, es submaestra de PAISES. Si ahora aadimos la tabla CLIENTES, seleccionando como maestro de la misma POBLACIONES, en CLIENTES se crear automticamente un campo enlazado a la tabla de PAISES, otro a la de PROVINCIAS y otro a la de POBLACIONES. Asimismo, se crea un ndice de POBLACIONES, que estar compuesto por el cdigo del pas, el de la provincia y el de la poblacin. e CREACIN DE MAESTRO DE 2 NIVEL 08 Desarrollo completo de una aplicacin e 36 37 VELAZQUEZ VISUAL Tambin quedan establecidos los enlaces histricos que relacionan cada una de las tablas maestras con el Maestro de 2 nivel recin creado. Si ahora redefinimos la tabla CLIENTES como submaestra de POBLA- CIONES, se modificar su ndice Cdigo, aadiendo la clave de POBLA- CIONES. Tambin hemos de tener en cuenta la longitud del campo cdigo de la ta- bla. Por ejemplo, si cambiamos el tipo de una tabla maestra por submaes- tra, ya que la longitud del cdigo de las submaestras suele ser menor que el de las maestras. Cuando cambiamos una tabla de un tipo a otro hemos de ser cuidadosos con las propiedades del campo cdigo. Por ejemplo, al cambiar del tipo maestro arbolado (que tiene un cdigo de tipo alfanumrico) a cualquier otro tipo de tabla (con cdigo numrico), Velzquez no cambia automticamente el tipo, sino que hemos de cambiarlo nosotros. ADVERTENCIA PROPIEDADES DEL NDICE POBLACIONES e 8.1.5. Histrico doble A la hora de disear una aplicacin es habitual encontrarse con la estructu- ra cabecera-lneas. La llamamos as ya que un ejemplo representativo se da en aplicaciones de gestin, en las que las facturas se detallan en dos tablas: CABECERAS (de las facturas) y LINEAS (de una factura), LINEAS es hist- rica de CABECERAS. Cada registro de CABECERAS guarda datos genera- les acerca de una factura, siendo histrica de CLIENTES, mientras que en cada registro de LNEAS se hace referencia a un artculo, luego LINEAS es histrica de ARTICULOS. 08 Desarrollo completo de una aplicacin El asistente para la creacin de maestros de 2 nivel slo aparece cuando seleccionamos tabla de datos en la Galera de objetos. ADVERTENCIA e 38 39 VELAZQUEZ VISUAL Velzquez Visual cuenta con un asistente gracias al que podemos crear di- rectamente estructuras del tipo cabecera-lneas. Para acceder a l selec- cionamos tabla de datos en la Galera de objetos, apareciendo la ventana Asistente: Creacin de una tabla de datos. En ella seleccionamos Histrico doble-> Cabeceras y Lneas. Aparecer entonces la ventana Creacin de histrico con cabeceras y l- neas, en la que hemos de declarar el nombre de la tabla que hace las ve- ces de cabecera, en este caso FACTURAS. Tambin hemos de seleccio- nar la tabla que hace las veces de maestro de la cabecera, en este caso CLIENTES, as como el maestro de las lneas de la cabecera, en este ca- so ARTCULOS. El asistente para la creacin de histrico con cabeceras y lneas slo aparece cuando seleccionamos tabla de datos en la Galera de objetos. ADVERTENCIA Aceptamos y Velzquez nos crea el esquema que hemos presentado antes. El asistente ha creado automticamente los campos de enlace entre las ta- blas FACTURAS y LINEAS DE FACTURA, as como los ndices correspon- dientes. Tambin genera los campos de enlace con los maestros. 8.1.6. Creacin de una tabla igual a una base 8.1.6. de datos externa En un proyecto de Velzquez Visual es posible declarar Bases de datos externas, a las que podemos hacer referencia tanto para importar como para exportar informacin. Adems, podemos crear tablas de datos de Velzquez Visual con la misma estructura de campos y tipos de campos que esas bases de datos externas que hayamos declarado en el pro- yecto. Posteriormente, con ayuda de otro objeto, el Tubo de lista, po- dremos importar y exportar datos entre nuestra aplicacin y la base de datos externa. Como todava no hemos visto las bases de datos externas ni los tubos, de- jaremos para ms adelante la creacin de tablas iguales a bases de datos externas. Resumen Las tablas submaestras necesitan de una tabla padre para completarse, es- tando su cdigo constituido por la unin del cdigo del padre ms el suyo propio. Las tablas arboladas se usan para guardar registros que presentan una es- tructura arbolada, como en las distintas materias de los libros en una bi- blioteca. Gracias a ellas podemos definir el tipo al que pertenecen los re- gistros de una tabla histrica de la arbolada. Las tablas de tipo histrico no necesitan campo CODIGO, utilizndose pa- ra almacenar los registros histricos de una tabla maestra. Al analizar un problema es frecuente encontrarse con tablas relaciona- das por un doble plural. Para resolverlo hacemos uso de tablas de tipo histrico. Velzquez Visual cuenta con asistentes para la creacin de tablas maestras de 2 nivel (tablas maestras que son histricas de otras tablas), y para la creacin de histricos dobles (estructuras del tipo cabecera-lneas). En Velzquez Visual podemos declarar una tabla de datos igual a una base de datos externa que hayamos definido en el proyecto. 08 Desarrollo completo de una aplicacin Para esquemas de facturas con lneas, albaranes con lneas, etc., se suele usar tambin la estructura Maestro-Submaestro, ya que posibilita la cuenta y ordenacin de las lneas pertenecientes a una cabecera (Maestro). ADVERTENCIA 40 41 VELAZQUEZ VISUAL 8.2 Tipos de enlace Hasta ahora hemos visto los enlaces ms sencillos: el enlace a tabla de da- tos maestra (singular y plural) y el enlace a tabla de datos esttica. En este captulo vamos a centrarnos en el resto de enlaces que podemos estable- cer en Velzquez Visual, y que son un poco ms complejos que los vistos hasta ahora. 8.2.1. Asistentes para la creacin de enlaces Para facilitar la creacin de enlaces el editor incorpora una serie de asis- tentes que podemos ejecutar desde el men de contexto que se presenta al hacer clic con el ratn sobre el panel de estructura de datos de la Venta- na principal del editor de proyectos. En este caso la tabla que tomemos como referencia ser sobre la que ha- yamos obtenido el men de contexto. Tambin estar disponible en la Ventana de esquemas en el men de con- texto que se presenta al pulsar el botn derecho del ratn sobre una tabla. Otra posibilidad es seleccionar una tabla en el esquema y pulsar el botn Crear punteros. 8.2.2. Enlace a hermano contiguo Permite crear un enlace a un registro de la misma tabla de datos, de modo que podemos obtener los valores de sus campos o movernos por los re- gistros a travs de un ndice determinado. En ese ndice no slo podemos indicar los campos por los que queremos establecer el orden de movimien- to, sino que tambin podemos forzar a que slo nos podamos mover por registros que contengan un valor determinado en un campo. Desde un re- gistro podemos obtener los valores de los campos del anterior o del si- guiente, lo que podemos usar para inicializar campos, clculos a partir del valor del registro anterior, etc. Se trata de un puntero virtual, que no ocupa espacio en disco. Veamos con un ejemplo cmo funciona este enlace: 08 Desarrollo completo de una aplicacin Crear punteros 42 43 VELAZQUEZ VISUAL Ejemplo: Creacin de un enlace a hermano contiguo Supongamos una tabla en la que guardamos registros de personas, tenien- do cada registro los campos nombre, primer apellido y edad. Queremos que nuestra aplicacin nos d la posibilidad de fijar una edad y recorrer aque- llos registros cuyo campo edad coincida con el que nosotros hayamos fija- do. Adems queremos que la ordenacin se realice por apellido y nombre. Para ello seguimos los siguientes pasos: Creamos otros dos campos en nuestra tabla de datos: anterior y siguiente, y creamos un ndice en el que aadimos los campos edad, apellido y nom- bre en el cuadro Frmula partes. El ndice podemos definirlo de tipo acep- ta repetidas, por si hay ms de una persona en la que coincidan los tres campos. Al ndice lo hemos llamado Hermano. Pinchamos en el campo siguiente y seleccionamos el enlace dentro del apartado Enlazado? en la ventana de Propiedades de campo. En este ca- so seleccionaremos el enlace Hermano contiguo. e Veremos cmo al seleccionar el enlace Hermano contiguo se activa el bo- tn Resolucin. Esto se debe a que hemos de indicarle a Velzquez Visual una serie de parmetros que necesita conocer para que pueda utilizar di- cho enlace. Si pulsamos el botn Resolucin nos aparecer una ventana correspon- diente a la Resolucin de puntero a hermano: Las propiedades que apare- cen en dicha ventana son las siguientes: ndice por el cual va a realizar el enlace. En nuestro caso es el ndice que hemos llamado Hermano. N de partes comunes del ndice que tienen los registros a enlazar. Ser el campo o los campos que tendrn en comn los registros por los que nos queremos mover. En nuestro caso nos movemos por registros que tienen una edad fija, luego el nmero de partes comunes es uno (si quisiramos fi- jar edad y nombre, entonces sera dos). Si quisiramos movernos por los re- gistros sin fijar una edad, sino segn el orden de edad, el nmero de partes comunes sera cero. Direccin: Anterior/Siguiente: Marcaremos una de las dos opciones, sirve para indicar si se enlazar con el registro anterior o con el siguiente. En nuestro caso esta opcin determina si los registros por los que nos move- mos se ordenan por orden alfabtico de apellidos y nombre hacia la Z o ha- cia la A. Este proceso que hemos hecho con el campo siguiente, hemos de repetir- lo con el campo anterior, con la diferencia de que la direccin es Anterior. Llegados a este punto, el enlace ya est hecho. Ahora nos vamos a un for- mulario y creamos dos botones, llammoslos por ejemplo Anterior Persona 08 Desarrollo completo de una aplicacin e 44 45 VELAZQUEZ VISUAL y Siguiente Persona. Para el botn Siguiente Persona, en las propiedades del botn le especificamos que el comando asociado al pulsar el botn sea moverse a hermano contiguo, y le decimos que el campo es siguiente. Re- petimos la operacin con el botn Anterior Persona, siendo en este caso el campo anterior. De este modo, una vez que estemos viendo un registro de- terminado en el formulario, podremos movernos a los registros siguiente y anterior que coincidan en edad con la de la ficha que estemos viendo. Podemos agilizar el proceso de creacin de enlace a hermano usando el asistente Creacin de campo puntero: Hermano, presentndose el siguien- te cuadro de dilogo: En el asistente encontramos la opcin Direccin: Ambas, que nos crea los dos enlaces, anterior y siguiente, de una sola vez. e Cuestiones 1. Rehacer el diseo del ejemplo anterior. Para el ndice hermano indi- car que el nmero de partes comunes sea cero: cmo nos move- mos por los registros? 2. Siguiendo con el ejemplo anterior. Rehacer el ndice hermano, de modo que se componga de las partes Nombre, Apellidos y Edad (por este orden). 8.2.3. Singular de plural por posicin Permite crear un enlace singular a una tabla histrica de la tabla actual (es decir, elegimos un solo registro entre varios, de ah singular de plural: uno entre muchos). Tendremos que elegir entre los distintos enlaces histricos definidos en la tabla maestra y se resolver la posicin fija del histrico con el que establecemos el enlace (de ah por posicin). En el esquema, el enlace aparecer dibujado como una flecha verde . Por ejemplo, supongamos una aplicacin en la que tenemos la tabla ma- estra TRABAJOS y la tabla TRABAJADORES, histrica de la anterior. En la tabla maestra podemos aadir un campo llamado ltimo trabajador enla- zado a la tabla TRABAJADORES mediante un enlace singular de plural por posicin. Para realizar este enlace basta con seleccionar el enlace Singular de plural por posicin y en el campo Identificador elegir el histrico al que queremos 08 Desarrollo completo de una aplicacin Indicar que el nmero de partes comunes sea uno. De qu modo nos movemos por los registros? 3. Tenemos una aplicacin para la gestin de presupuestos, con una tabla de las distintas cuentas presupuestadas (PGC) y otra de presupuestos anua- les (PRESUPUESTOS). Cmo haramos para que al crear una ficha nue- va, al elegir la cuenta presupuestada nos inicialice el campo del importe con el valor que tuvo el presupuesto de esa misma cuenta el ao anterior? Cmo haramos para que, a partir de los presupuestos del ao anterior y con un proceso, el valor del importe sea el del ao anterior de esa misma cuenta incrementado en un tanto por ciento escogido por nosotros? 46 47 VELAZQUEZ VISUAL apuntar. Como contenido de Frmula escribimos n, que es el identificador que Velzquez Visual da a la variable de sistema nmero de elementos de la lista. De este modo, desde el campo ltimo trabajador de la tabla TRA- BAJOS podremos atrapar el registro que se encuentra en la posicin n de la tabla histrica TRABAJADORES, es decir, el ltimo trabajador de la lista. Tambin podemos construir un enlace a hermano usando el asistente, el cual nos presenta el siguiente cuadro de dilogo en el que definir las pro- piedades del enlace: 8.2.4. Singular de plural por ndice Permite crear un enlace singular a una tabla histrica de la tabla actual, usando para su resolucin el ndice utilizado en el enlace histrico. El pro- gramador nicamente tendr que resolver aquellas partes del ndice utiliza- do en enlace histrico que no sean el campo enlazado a la tabla actual. Ve- moslo con un ejemplo: Ejemplo: singular de plural por ndice Supongamos una aplicacin de gestin en la que llevamos registro de las facturas de nuestros clientes. Queremos saber cul es la ltima factura de un cliente determinado. Para resolver este problema necesitamos dos tablas, una maestra que lla- maremos CLIENTES, y otra histrica de la anterior que llamaremos FACTU- RAS. Al enlazar ambas tablas con un enlace a tabla maestra, en la tabla e Cuestiones 1. Disear una aplicacin que lleve el registro de los ganadores de ca- da etapa del Tour de Francia. CLIENTES se crear el histrico facturas, mientras que en la tabla FACTU- RAS se crea un campo llamado cliente, as como el ndice cliente. En la tabla FACTURAS vamos a aadir el campo fecha, que nos indicar cul es la fecha correspondiente a cada registro. Queremos saber cul ha sido la ltima factura que le hemos hecho a un cliente determinado. Para ello aadimos el campo fecha al ndice cliente de la tabla FACTURAS. Una vez hecho esto, en la tabla CLIENTES aadimos un campo llamado l- tima factura. A este campo le asociamos un enlace singular de plural por n- dice, escogemos el histrico que vamos a usar (facturas-clientes) y pincha- mos en el botn Resolucin para resolver el enlace. 08 Desarrollo completo de una aplicacin e 48 49 VELAZQUEZ VISUAL Al pinchar en el botn Resolucin se muestra el enlace histrico seleccio- nado; en el apartado Resolucin partes se muestran aquellas partes del n- dice utilizado en el enlace histrico que el programador debe resolver. Pa- ra ello basta con hacer doble clic sobre cada una y, a travs del Asistente para la edicin de frmulas, establecer la frmula de su resolucin. En nuestro caso, el ndice que usa es cliente creado por Velzquez en la tabla FACTURAS cuando hicimos el enlace a tabla de datos maestra. A ese n- dice le aadimos el campo Fecha de la factura, siendo esa fecha la parte que hemos de resolver, cosa que hacemos con el Asistente para edicin de frmulas, especificando que el contenido debe rellenarse con la funcin fHoy(). Por ltimo, hemos de especificar el modo de bsqueda del registro histri- co (modo buscar), que podr ser: Igual, Igual o mayor, Igual o menor, Mayor, Menor, Primero y ltimo. En nuestro caso, como nos interesa saber la lti- ma factura, el modo de buscar ser igual o menor, ya que la fecha de la l- tima factura puede ser hoy o algn da ya pasado. De este modo, en el campo ltima factura de la tabla CLIENTES podemos capturar la ltima factura que le hemos hecho a un cliente determinado. Como en los casos anteriores, tambin podemos crear este enlace me- diante el asistente, presentndose el siguiente cuadro de dilogo: Cuando entre dos tablas existe un enlace singular de plural, ste se visua- liza en el esquema de tablas como una flecha de color verde . e Cuestiones 1. Trabajando sobre el esquema del ejemplo anterior, obtener la factura de un cliente cuyo importe sea igual o inmediatamente superior a una cantidad determinada. 8.2.5. Enlace a tabla de datos indirecta real y virtual Los punteros indirectos se utilizan para relacionar la tabla de datos en cur- so con otra tabla que no es maestra de la actual. Habitualmente se trata de tablas que carecen de campo CODIGO y que por tanto no pueden ser de- finidas como maestras de otras tablas. Existen dos tipos de enlaces a tabla datos indirecta: el enlace indirecto real y el enlace indirecto virtual . La diferencia entre el enlace real y virtual radica en que el primero ocupa espacio en disco y el segundo no, es decir, el real tiene persistencia en disco y el virtual en me- moria. Adems, si es virtual no permite actualizar la tabla apuntada, ha de ser un enlace indirecto real para ello. Veamos mediante un ejemplo cmo crear un enlace a tabla de datos indirecta. Ejemplo: creacin de un enlace a tabla de datos indirecta Con el siguiente ejemplo de gestin veremos cmo se establecen los enla- ces a tablas de datos indirectas en Velzquez Visual. Para entender este ejemplo, sepamos que al realizar una venta o una compra, la operacin se detalla en un albarn. ste consta de una cabeza en la que se indica el cliente o el proveedor, fecha, nmero del documento, importe total, etc., y de una serie de lneas de albarn, en cada una de las cuales indicamos el artculo y la cantidad, precio, descuento, importe, etc., de ste. En ARTCULOS cada registro hace referencia a un artculo en particular mientras que ALMACENES lleva recuento de cada uno de nuestros alma- cenes. Ambas tablas estn enlazadas por un doble plural (los artculos del almacn, los almacenes del artculo) que resolvemos mediante una tabla de 08 Desarrollo completo de una aplicacin e 50 51 VELAZQUEZ VISUAL tipo histrico, EXISTENCIAS, en la que incluiremos un campo que llevar las existencias de un artculo en cada almacn. Cada vez que hacemos una venta en un almacn, sta se ver reflejada en un albarn, luego en la tabla ALBARANES llevamos recuento de todas las cabezas de albarn de un almacn en particular. Por lo tanto, ALBARANES es histrica de ALMACENES. Cada albarn constar de una serie de lneas en cada una de las cuales in- dicamos el nmero de artculos vendidos de cada tipo. Estas lneas se guardan en la tabla LNEAS DE ALBARANES, que lgicamente es histrica de ALBARANES (las lneas del albarn). Por otro lado, LNEAS DE ALBARANES tambin es histrica de ARTCU- LOS, ya que un mismo artculo puede repetirse en varias lneas. Ahora bien: nuestro objetivo es crear en LINEAS DE ALBARANES un pun- tero enlazado a la tabla EXISTENCIAS. En nuestra aplicacin hemos creado una rejilla para cada tabla, formula- rios de altas, bajas y modificaciones, bsquedas completas para cada ta- bla y un men, llamado AUTOEXEC, que es el que se presenta al ejecutar el mapa. Adems, se han incluido botones para acceder a campos enlazados desde los formularios de altas y modificaciones de las tablas: EXISTENCIAS, AL- BARANES y LINEAS DE ALBARAN, as como rejillas de histrico en formu- larios de modificaciones maestros. e La tabla EXISTENCIAS recoger las existencias de cada artculo en cada al- macn, por ello hemos aadido el campo Stock de tipo numrico, mientras que al ndice Artculos de la tabla EXISTENCIAS hemos aadido el compo- nente almacenes y hemos definido como de clave nica. Esto ser necesa- rio para la resolucin del puntero indirecto desde la tabla LINEAS DE AL- BARANES. A la tabla de datos LINEAS DE ALBARANES hemos aadido el campo Can- tidad (numrico) para anotar las cantidades vendidas de cada artculo. Lo que se quiere es que, cada vez que se d de alta una nueva lnea de al- barn, se acumule en negativo el campo Stock de la tabla EXISTENCIAS, con la Cantidad de unidades anotadas en la tabla LINEAS DE ALBARANES (es decir, si en una lnea se indica la venta de dos camisetas, las existencias de camisetas deben reducirse en dos unidades). Como podemos observar en el esquema de tablas, EXISTENCIAS es una tabla histrica y no est relacionada con la tabla LINEAS DE ALBARANES, tenemos que crear un puntero indirecto que enlace las dos tablas. Para ello 08 Desarrollo completo de una aplicacin e 52 53 VELAZQUEZ VISUAL aadimos un campo a la tabla LINEAS DE ALBARAN que llamaremos Pu- nexist (puntero a EXISTENCIAS). Editamos el cuadro de propiedades del campo y especificamos que ste debe estar enlazado a tabla de datos in- directa, siendo EXISTENCIAS el identificador de la tabla enlazada. Nos aparecer el siguiente mensaje: Los punteros indirectos a tablas de datos deben ser resueltos. Para resolver el puntero, en el cuadro de pro- piedades de campo pulsamos el botn Resolucin. Como ndice de la tabla EXISTENCIAS seleccionamos ARTICULOS (el ndice al que antes aadimos el artculo del almacn). Tras seleccionar el ndice aparecern los campos a resolver de la tabla EXISTENCIAS. Esta resolucin la haremos desde la tabla LINEAS DE AL- BARANES. Seleccionamos el primero de los campos a resolver (Artculo), y de la lista de campos que aparece bajo el epgrafe Resolucin desde origen actual (lneas de albarn) pinchamos en el campo ARTICULO. Con esto le estamos diciendo que el artculo es el que aparece en el campo Artculo de la tabla LINEAS DE ALBARANES. Seleccionamos el segundo campo a resolver (Almacn), y de la lista de campos de EXISTENCIAS pinchamos en el campo Albarn. Tendremos ac- ceso de este modo a los campos de la tabla ALBARANES y elegimos el campo Almacn (hemos seleccionado el almacn del albarn de la lnea). e Por ltimo, en el cuadro de propiedades del campo activamos la opcin Dar alta si no existe, as, si damos de alta un albarn de un almacn que con- tenga un artculo en las lneas que no estuviese dado de alta en la tabla EXISTENCIAS, lo crear automticamente. Ahora ya tenemos creado el enlace con la tabla EXISTENCIAS. ste se vi- sualiza en el esquema de tablas como una flecha ondulada que une ambas tablas. Para crear un puntero indirecto podemos hacer uso del asistente de crea- cin de campo puntero. Para ello hacemos clic con el botn derecho es- tando seleccionada la tabla en la que queremos crear el campo. Se pre- sentar la siguiente ventana con las propiedades del puntero. 08 Desarrollo completo de una aplicacin e 54 55 VELAZQUEZ VISUAL Ya hemos comentado cmo la opcin Dar de alta si no existe permite que, si el registro con el que se ha de enlazar el registro actual no existe en la tabla indirecta, sea dado de alta. Si queremos que sea el propio usuario el que confirme o no el alta del registro en la tabla indirecta, seleccionamos un formulario de altas en el parmetro Formulario para dar alta. Esta op- cin no estar disponible para los enlaces virtuales, y no funcionar si al- guno de los campos a resolver en el ndice tiene valor 0 (por ejemplo, un campo booleano cuyos valores posibles son 0 o 1); el motivo radica en que si el campo tiene valor 0, se toma como campo vaco y, por tanto, no es resuelto. Si el proyecto va a ser ejecutado con la versin cliente-servidor, no es posible la especificacin del formulario de altas, el motivo es que este ti- po de operaciones son realizadas en el Servidor, no en el Cliente, y, si se tuviese que mostrar el formulario, ste aparecera en el Servidor. Por es- te motivo, si en un enlace de este tipo se hubiese especificado la peti- cin de formulario, en tiempo de ejecucin, esta peticin sera obviada por el Servidor. 8.2.6. Las actualizaciones Se encargan de modificar el contenido de los campos de un registro de una tabla enlazada, cada vez que se produce un alta, una baja o una modifica- cin en la tabla de origen, donde estn definidas. Por ejemplo, desde una tabla de LINEAS DE ALBARAN (histrico) podemos actualizar el contenido del campo STOCK de su maestro ARTICULOS. Se crean pulsando el botn Nueva actualizacin de la barra de he- rramientas. Al pulsarlo se muestra la ventana Actualizacin desde. En la lista desplegable Campo enlazado seleccionaremos un campo enlazado a la tabla de datos donde se quiere actualizar. Una vez seleccionado, en el control Tabla a actualizar se mostrar el nombre de la tabla de datos que va a ser actualizada. Si el campo enlazado seleccionado fuese un campo enlazado a un hermano contiguo, en el control Campo hermano contrario se mostrar el campo enlace a hermano contrario al seleccio- nado. Nueva actualizacin Los distintos componentes de actualizacin que se vayan creando se mos- trarn en el control situado bajo la barra de botones de la actualizacin. Las funciones de estos botones son: Crear un nuevo componente de actualizacin. Eliminar el componente de actualizacin seleccionado. Mover una posicin hacia arriba el componente de actualizacin selec- cionado. Mover una posicin hacia abajo el componente de actualizacin selec- cionado. Editar el componente de actualizacin seleccionado. Asimismo, se incluyen botones para cortar, copiar y pegar componentes de actualizacin. En el cuadro de dilogo Componente de actualizacin define qu campo de la tabla de destino ha de ser actualizado, en funcin o no de una con- dicin, y cmo va a ser actualizado. Simplemente se definir lo que debe hacerse en caso de alta, ya que el programa automticamente sabe lo que se debe hacer en una baja o en una modificacin de ficha. El cuadro aparece cuando pinchamos en el botn insertar de la ventana Actualizar desde. 08 Desarrollo completo de una aplicacin Crear un nuevo componente Eliminar el componente Mover una posicin hacia arriba Mover una posicin hacia abajo Editar el componente 56 57 VELAZQUEZ VISUAL Cada componente de actualizacin consta de los parmetros siguientes, excepto para los enlaces a Hermanos contiguos: Comentarios: comentario para el diseador. Frmula condicin para modificar: expresin frmula condicional que debe cumplirse para realizar la actualizacin. Disponemos del asistente de frmulas para simplificar el uso de stas. Campo: campo de la tabla de datos a modificar. Frmula: expresin frmula de donde se obtiene el contenido a actualizar. Modo de modificar: se refiere a cmo vamos a actuar sobre el campo a modificar. Puede ser de uno de los dos modos siguientes: Acumular: acumula en el campo destino el contenido del cuadro de edi- cin Frmula, siempre que se cumpla la condicin dada en el cuadro de edicin Frmula condicin para modificar. Absoluto: sustituye en el campo destino el contenido del cuadro de edi- cin Frmula, siempre que se cumpla la condicin dada en el cuadro de edicin Frmula condicin para modificar. Las actualizaciones son disparadas cuando se crean, modifican o eliminan registros. En el caso de modificar o de eliminar registros, Velzquez Visual deduce el tipo de modificacin que ha de realizar la actualizacin. Por ejem- plo, se puede declarar una actualizacin en la tabla de lneas de albarn de venta para que, al crear una lnea de albarn de venta, se descuenten las unidades vendidas de las existencias del artculo. Al borrar una lnea del al- barn se actualizar, automticamente, las unidades de la lnea borrada a las existencias del artculo. Tambin podemos borrar un registro sin desactualizar (p. e. lneas de alba- rn con ms de 5 aos), para ello hemos de usar la funcin de Procesos Re- correr lista eliminando fichas sin desactualizar. Ejemplo: Creacin de una actualizacin Continuaremos con el ejemplo anterior, de modo que vamos a actualizar las existencias de un artculo (campo Stock de EXISTENCIAS) con el conteni- do del campo Cantidad de las lneas de venta de la tabla LINEAS DE AL- BARANES. Es decir, si en una lnea de venta se indica que la cantidad ven- dida de un artculo es de cinco unidades, el stock de ese artculo debe dis- minuir en cinco unidades. Para ello aprovechamos el puntero que hemos creado en la tabla LINEAS DE ALBARANES. Nos situamos en la carpeta Actualizaciones de la tabla LINEAS DE ALBA- RANES. Con la tecla Insertar nos aparecer la ventana de propiedades de la actualizacin, en la que seleccionaremos como Campo enlazado el cam- po Punexist (el campo enlazado a la tabla EXISTENCIAS). Pulsamos el botn Aadir para crear el componente de actualizacin, mos- trndose la ventana Componente de actualizacin. En ella especificamos: Comentarios: Acumula el stock de las existencias, es una explicacin de la actualizacin. Frmula condicin para modificar: condicin para que se produzca actuali- 08 Desarrollo completo de una aplicacin Tengamos en cuenta la siguiente nota para la versin cliente - servidor: no hemos de incluir en componentes de actualizacin nada que implique la intervencin del usuario, por ejemplo, visualizar un mensaje, mostrar un formulario, una pregunta, peticin de un dato, etc. El motivo es que este tipo de operaciones se llevan a cabo en el Servidor, por lo que el mensaje o el formulario no seran presentados en el Cliente, sino en el propio Servidor. Para evitar esto, el mensaje, formulario, etc. a presentar, ser obviado por el Servidor. ADVERTENCIA e 58 59 VELAZQUEZ VISUAL zacin. En este caso no habr que especificar condicin para que acumule el stock, pues ste debe acumularse siempre que entre nueva mercanca. Campo: Stock (campo de EXISTENCIAS que vamos a modificar). Modo de modificar: acumular (pues ha de acumular las existencias de cada artculo en cada almacn en tantas unidades como se especifica en el cam- po Cantidad de los albaranes). Frmula: aqu se ha de utilizar el campo de la tabla LINEAS DE ALBARAN que va a acumular el campo Stock en la tabla EXISTENCIAS. Es el campo Cantidad. 8.2.7. Componente de actualizacin a un hermano contiguo Las actualizaciones a hermano contiguo nos permiten ir recorriendo los re- gistros de una tabla que estn relacionados por un enlace de hermano con- e Cuestiones 1. En el ejemplo anterior, qu diferencia hay entre el modo de modifi- car Acumular y Valor Absoluto? 2. Siguiendo con el ejemplo anterior, cmo haremos para que la ac- tualizacin del campo Stock tenga lugar slo cuando la cantidad de la lnea sea superior a cinco unidades? 3. Cmo haramos para pasar de un albarn a otro del mismo distri- buidor? tiguo, de modo que podemos obtener un acumulado final con el valor de un determinado campo de cada registro. Al crear la actualizacin a un enlace a Hermano contiguo, se activar el combo box de Campo hermano contrario. En el mismo slo aparecern campos que haya definido en esta tabla de datos que sean contrarios al campo enlazado. Por ejemplo, si en una tabla de facturas hemos creado los campos FACTURA-ANTERIOR y FACTURA-SIGUIENTE, enlazados a hermano anterior y siguiente, respectivamente, seleccionando como cam- po enlazado FACTURA-ANTERIOR, slo aparecer en la lista de campos a actualizar el campo FACTURA-SIGUIENTE. Cuando aadimos un compo- nente a una actualizacin de este tipo, se presentar el siguiente cuadro de dilogo: Los parmetros del cuadro Componente de Actualizacin son: Campo valor acumulable: campo numrico que contendr el valor a acu- mular de cada registro (por ejemplo, el importe total de cada una de las facturas). Campo a modificar (acumulador): campo en el que se va a acumular el valor del campo especificado en el parmetro anterior (aqu se ira acu- mulando el total de cada una de las facturas). Contenido inicial del acumulador: es un control de solo lectura y muestra la frmula resultante de la especificacin de los dos campos anteriores. Comentarios: texto explicativo acerca de lo que realiza la actualizacin. En el contenido inicial del campo a modificar se crear automticamente la frmula a ejecutar para llevar a cabo la actualizacin. 08 Desarrollo completo de una aplicacin 60 61 VELAZQUEZ VISUAL Este tipo de enlaces, con sus correspondientes actualizaciones, son muy tiles en programas de contabilidad para llevar en un campo determinado el arrastrado de los movimientos de una cuenta. Ejemplo: Actualizacin a hermano contiguo Tenemos una aplicacin de gestin con dos tablas: CLIENTES y FACTU- RAS. Buscamos el acumulado total de los importes de las facturas. En la tabla FACTURAS tenemos los campos Factura-Anterior y Factura-Si- guiente, que estn enlazados a hermano contiguo y que son los que usare- mos para realizar la actualizacin. El campo Total guarda el importe de ca- da factura, mientras que en el campo Total-Ventas acumularemos el total de cada factura. Pinchamos en el botn Nueva Actualizacin , apareciendo la ventana Ac- tualizacin desde: FACTURAS. En ella especificamos que el campo enlaza- do es Factura-Siguiente y automticamente Velzquez Visual toma Factura- Anterior como campo hermano contrario. A continuacin pinchamos en el botn insertar , apareciendo la ventana Componente de Actualizacin. Como Campo valor acumulable elegimos Total (es el importe de cada factura), el Campo a modificar (modificador) es Total-Ventas. e Nueva Actualizacin Insertar Pulsamos el botn Aceptar y en la ventana Actualizacin desde: FACTURAS aparecer Total-Ventas como campo a modificar. Pulsamos Aceptar de nue- vo y ya tenemos terminada la actualizacin a hermano contiguo. sta apa- recer dentro de la carpeta Actualizaciones de la tabla FACTURAS. 08 Desarrollo completo de una aplicacin e 62 63 VELAZQUEZ VISUAL 8.2.8 Enlace a maestro de una tabla contra s misma En todas las ocasiones en las que hemos hablado del enlace singular-plu- ral, lo hemos establecido entre dos tablas: una histrica y otra maestra. Ahora bien, es posible que una misma tabla sea maestra e histrica de s misma. Vemoslo con un ejemplo: Supongamos una tabla que se encarga de llevar el registro de socios de una agrupacin, de modo que para ingresar es necesario que un socio avale al solicitante. Cuando se acepta al nuevo socio, su ficha llevar el campo So- cio principal, que apunta al registro del socio que lo avala. De este modo un registro de la tabla puede ser maestro de una serie de so- cios a los que ha avalado (sus histricos). ste sera el enlace a histrico. Por otro lado, cada registro de la tabla apuntar a un nico registro de la misma tabla (el que lo avala), que ser su maestro. ste es el enlace a maestro. Ejemplo: Enlace de una tabla contra s misma A continuacin veremos los pasos a seguir para enlazar la tabla SOCIOS contra s misma mediante un enlace a maestro. En la tabla SOCIOS, que ser en la que guardemos el registro de socios, creamos el campo Socio Principal, declarndolo en sus propiedades como enlazado a tabla de datos maestra, siendo SOCIOS la tabla enlazada. Este campo ser el que apunte al registro correspondiente al socio que avala. e A continuacin creamos el ndice correspondiente al campo, para ello si- tuamos el foco sobre el campo Socio Principal y pulsamos el botn Nuevo ndice del campo . Ahora nos falta declarar el enlace a histrico en la tabla SOCIOS. Para ello pulsamos el botn Nuevo enlace histrico , apareciendo la ventana En- lace a histrico desde SOCIOS. En ella especificamos que la tabla enlaza- da es SOCIOS, mientras que el ndice es Socio Principal. Con esto ya tendramos enlazada la tabla SOCIOS contra s misma. 08 Desarrollo completo de una aplicacin e Nuevo ndice del campo Nuevo enlace histrico 64 65 VELAZQUEZ VISUAL Resumen El enlace a hermano contiguo permite acceder a los valores de los registros anterior y siguiente de una tabla o movernos a esos registros, de modo que podemos recorrer los registros a travs de un ndice determinado. No slo podemos indicar los campos por los que queremos establecer el orden de movimiento, sino que tambin podemos forzar a movernos por registros que contengan un valor determinado en esos campos. Mediante el enlace singular de plural por posicin podemos crear un enla- ce una tabla histrica de la tabla actual y elegir uno de los registros del his- trico resolvindolo por su posicin. El enlace singular de plural por ndice permite crear un enlace singular a una tabla histrica de la actual, capturando uno de los registros del histrico. Para su resolucin se usa el ndice utilizado en el enlace histrico y slo de- ben resolverse aquellas partes del ndice que no sean el campo enlazado a la tabla actual. Mediante los punteros indirectos podemos enlazar la tabla de datos en cur- so con otra tabla que no guarda una relacin directa. Existen dos tipos: el enlace indirecto real (con persistencia en disco) y el virtual (con persistencia en memoria). Las actualizaciones modifican el contenido de los campos de un registro de una tabla enlazada, cada vez que se produce un alta, una baja o una modi- ficacin en la tabla de origen, donde estn definidas. Con las actualizaciones a hermano contiguo recorremos los registros de una tabla que estn relacionados por un enlace de hermano contiguo, obte- niendo un acumulado final con el valor de un determinado campo de cada registro hermano. 8.3 Anlisis de la informacin: ejemplos 8.3.1. Un centro de enseanza Conceptos a tratar Enlace singular y plural. Descripcin Buscamos una aplicacin para un centro de enseanza que se encargue de gestionar sus alumnos y los cursos que realizan, con la condicin de que cada alumno slo puede estar matriculado en un curso. Esquema de la aplicacin Este ejemplo se resuelve de forma sencilla creando dos tablas: ALUMNOS y CURSOS, ambas de tipo maestro normal con clave numrica. Ahora bien: Cmo las enlazamos? Para verlo hemos de enunciar las siguientes frases: Varios alumnos pueden pertenecer a un curso, Un alumno pertenece a un nico curso. Est claro que ALUMNOS (plural) va a ser un histrico de CURSOS (singular), de modo que enlazaremos ambas tablas mediante un enlace singular - plural. Al establecer el enlace, Velzquez crea automticamente el campo Cursos y el ndice Cursos en la tabla ALUMNOS, mientras que en la tabla CURSOS crea el histrico Alumnos. 8.3.2. Empresa de instalacin de cristalera 8.3.2. para vehculos Conceptos a tratar Doble plural Tablas submaestras Tablas histricas Descripcin Necesitamos una aplicacin de gestin para una empresa que se dedica a instalar cristales en automviles. Hemos de tener en cuenta los siguientes puntos: Un vehculo se identifica por una marca, una serie y un modelo. Por ejemplo: marca Opel, serie Corsa, modelo 2000. La empresa dispone de diversos tipos de cristales que son suministra- dos por distintos fabricantes. Un determinado tipo de cristal puede ser suministrado por ms de un fa- bricante. Un tipo concreto de modelo puede tener varios tipos de cristales. 08 Desarrollo completo de una aplicacin 66 67 VELAZQUEZ VISUAL Esquema de la aplicacin Empezaremos por crear las tablas MARCAS, SERIES y MODELOS, ya que stas identifican inequvocamente a un vehculo. Est claro que una serie no puede existir sin una marca, de igual modo que un modelo no puede exis- tir sin una serie. Es por esto que definimos la tabla MARCAS como maes- tro normal con clave numrica, SERIES ser submaestra de MARCAS y MODELOS ser submaestra de SERIES. Al crear las tablas, Velzquez Visual crea directamente los enlaces entre ellas por haber definido SERIES y MODELOS como submaestras: SERIES ser histrica de MARCAS, mientras que MODELOS ser histrica tanto de SERIES como de MARCAS. Por otro lado, la empresa dispone de diversos tipos de cristales que son su- ministrados por diversos fabricantes. Esto justifica la creacin de las tablas ARTCULOS y FABRICANTES. Ahora bien, cmo las enlazamos? Volva- mos a enunciar las frases: los artculos del fabricante, los fabricantes del artculo. En este caso nos encontramos con un plural en los dos sentidos, lo que nos impide enlazar directamente ambas tablas mediante un enlace singular - plural. Para resolver un doble plural creamos una tabla en medio de las otras dos. En este caso crearemos una tabla de tipo histrico que llamaremos ARTIFAB. Cada uno de los registros de la tabla ARTIFAB consistir en una pareja Ar- tculo - Fabricante, de modo que en ella guardamos todos los artculos de cada fabricante (o de otro modo, todos los fabricantes de cada artculo). En- tonces, dado un fabricante podemos navegar hacia sus histricos, que son todos los registros de la tabla ARTIFAB, y una vez cargados stos, obtener todos sus maestros de la tabla ARTCULOS. De este modo obtenemos to- dos los artculos del fabricante de partida. De igual modo procederamos para obtener todos los fabricantes de un artculo. An nos queda por integrar en el diseo un detalle: en un modelo pueden instalarse distintos artculos (cristales), y un cristal puede instalarse en dis- tintos modelos. Nos encontramos de nuevo con doble plural, luego hemos de enlazar las tablas ARTCULOS y MODELOS mediante una tabla inter- mediaria de tipo histrico a la que llamaremos ARTIMODEL. 8.3.3. Aplicacin de anlisis para obras literarias Conceptos a tratar Doble plural Descripcin Supongamos un estudiante que, haciendo un estudio acerca de Lope de Vega, necesita saber todas las obras en las que aparece un determinado personaje y todos los personajes que aparecen en una obra determinada. Este problema es de resolucin inmediata en Velzquez Visual. Esquema de la aplicacin Declararemos dos tablas principales: PERSONAJES y OBRAS. Tanto las obras como los personajes necesitan estar identificados uno a uno de forma inconfundible, por lo que deben tener una clave de acceso nica, es decir, deben declararse como tablas de tipo maestro normal con clave numrica. Ahora bien: cmo las enlazamos? Volvemos a enunciar las dos frases: En una obra aparecen varios personajes, y en el caso ms general, la segun- da frase es: Un personaje puede aparecer en varias obras. Es decir, nos encontramos con un plural en los dos sentidos que resolvemos con una ta- bla histrica que haga de intermediaria: REPARTOS. 08 Desarrollo completo de una aplicacin 68 69 VELAZQUEZ VISUAL Los registros de la tabla REPARTOS consisten en parejas Obra-Personaje, de manera que asociamos todas las obras con cada uno de sus persona- jes (o visto de otro modo, todos los personajes con cada una de las obras en las que aparece). Entonces, si nos situamos en la tabla OBRAS (por ejemplo), movindonos hacia histrico obtendremos todos los registros Obra-Personaje en los que la obra es la seleccionada de la tabla OBRAS. Una vez cargadas todos esas parejas, nos movemos hacia maestro en la di- reccin de PERSONAJES, de modo que cargamos todos los personajes que aparecen en la obra. El mismo procedimiento seguiremos para, dado un personaje, obtener todas las obras en las que aparece. 8.3.4. Una galera de arte Conceptos a tratar Enlace singular y plural Doble plural Descripcin El siguiente esquema de tablas gestionar una galera de arte bajo los si- guientes supuestos: Un artista de la galera puede tratar distintos temas, mientras que un te- ma en particular puede ser tratado por distintos artistas. Adems, una obra de un artista puede ser expuesta en distintas exposiciones, mientras que varias obras del artista pueden exponerse en la misma exposicin. Cada artista tiene un representante (contacto), mientras que un repre- sentante puede trabajar para distintos artistas. Esquema de la aplicacin Comenzaremos creando las tablas ARTISTAS, TEMAS y OBRAS y enlazn- dolas. Tal y como se expuso el problema, entre TEMAS y ARTISTAS existe un do- ble plural. Para resolverlo introducimos una tabla intermedia: OBRAS. De este modo no slo resolvemos el doble plural, sino que aprovechamos pa- ra guardar en la tabla intermedia las obras de cada artista (claro, una obra pertenecer a un artista y tratar un tema en particular). En la tabla OBRAS aadimos los campos Foto, Precio, Ttulo, etc. Las tres tablas se han definido con el tipo maestro normal con clave num- rica. En este caso OBRAS tambin ha sido definida as (y no de tipo hist- rico) ya que nos interesa que cada obra tenga una clave nica e irrepetible. Creamos ahora la tabla EXPOSICIONES, en la que incluimos los campos Fecha inicio, Fecha fin, Motivo, etc. Nos encontramos con otro plural en los dos sentidos entre esta tabla y OBRAS, de modo que hemos de crear otra tabla intermedia que lo solucione: OBRAS EXPUESTAS. Por ltimo, aadimos la tabla CONTACTOS, en la que guardaremos los da- tos de los representantes. Esta tabla es maestra de ARTCULOS. 8.3.5. Gestin de un colegio Conceptos a tratar Enlace singular-plural. Tablas arboladas. Tablas estticas. Descripcin Supongamos que nos piden el diseo de una aplicacin que gestione la or- ganizacin de un colegio. Dicha aplicacin debe relacionar los aspectos fundamentales de un colegio: alumnos, profesores, materias, asignaturas, cursos, secciones, aulas, das lectivos y horarios. 08 Desarrollo completo de una aplicacin 70 71 VELAZQUEZ VISUAL Esta aplicacin debe responder, entre otras muchas, a consultas como: cul es el cuadro semanal de clases de un alumno?, y el de un profe- sor?, cules son los alumnos de un profesor?, y los profesores de un alumno?, etc. Esquema de la aplicacin Hemos de crear las tablas siguientes: ALUMNOS, PROFESORES, MATE- RIAS, ASIGNATURAS, CURSOS, SECCIONES y AULAS. Los registros de las tablas CURSOS, ALUMNOS, MATERIAS, PROFESO- RES, AULAS y ASIGNATURAS necesitan identificarse uno a uno de for- ma inconfundible, de modo que las tablas han de definirse como maes- tras de tipo normal con clave numrica, con la salvedad de la tabla MA- TERIAS. MATERIAS podra recoger, por ejemplo, el ciclo educativo, la materia en s y el curso de imparticin de una asignatura. Para este fin son ideales las ta- blas arboladas, en las que el campo cdigo se comporta del siguiente mo- do: el primer dgito del cdigo acta como dgito raz. Cada uno de los va- lores que recibe el primer dgito abre nuevas ramas del rbol. De igual mo- do, los nuevos dgitos que aadimos al cdigo abren nuevas subramas del rbol (por ejemplo, el cdigo PL2 podra indicar: ciclo primario, materia li- teratura, 2 curso del ciclo). Puesto que una seccin no puede existir si no es perteneciendo a un cur- so, declararemos la tabla SECCIONES como submaestra de CURSOS. An nos falta por introducir en el anlisis los das lectivos y los horarios. Para ello haremos uso de dos tablas estticas, una en la que guardaremos los das de la semana (tabla DIAS) y otra en la que cada registro indicar el horario del colegio (tabla HORARIO) con un formato del tipo 8:15 a 9:00, 9:15 a 10:00, etc. Una vez introducidas las tablas estticas crearemos dos campos en la tabla ASIGNATURAS, uno llamado Da, enlazado a la tabla esttica DIAS, y otro al que llamaremos Hora, enlazado a la tabla esttica HORAS. 8.3.6. Gestin de una librera Conceptos a tratar Plural finito ndice de mltiples claves Descripcin Vamos a establecer el esquema de tablas de una aplicacin que gestione los libros de una librera. Para ello hemos de tener en cuenta los siguientes puntos: Un libro puede tener ms de un autor (vamos a poner un lmite de cua- tro autores). La bsqueda de libros por autor mostrar todos los libros pertenecientes a un autor independientemente del orden en el que ste aparezca (es de- cir, si es el primer autor, el segundo, el tercero o el cuarto). Esquema de la aplicacin En primer lugar est claro que hemos de crear dos tablas: AUTORES y LI- BROS, ambas de tipo maestro normal con clave numrica. Ahora bien: Cmo las enlazamos? Vamos a enunciar las dos frases habituales: Un au- tor puede escribir varios libros y un libro puede ser escrito por varios au- tores. Nos encontramos de nuevo con un doble plural. Este problema podra ser resuelto creando una tabla histrica intermediaria entre AUTORES y LIBROS, pero como sabemos que un libro va a tener un mximo de cuatro autores vamos a usar otra tcnica: el plural finito. Para ello unimos las dos tablas mediante un enlace singular-plural, de igual mo- do que haramos si un libro fuera escrito por un solo autor. Al establecer este enlace Velzquez Visual crea el campo Autores y el ndi- ce Autores en la tabla LIBROS, mientras que en la tabla AUTORES crea el histrico Libros. 08 Desarrollo completo de una aplicacin 72 73 VELAZQUEZ VISUAL Ahora creamos en la tabla LIBROS tres enlaces ms a la tabla AUTORES, para lo cual podemos copiar en LIBROS tres veces el campo Autores, mo- dificando posteriormente sus identificadores y descripciones. Acabamos de crear un plural finito. Plural ya que la tabla LIBROS est en- lazada varias veces a la tabla AUTORES, y finito ya que el nmero de enla- ces est limitado a cuatro. A continuacin editamos las propiedades del ndice Autores, y en la frmu- la de partes le aadimos los campos Autor 1, Autor 2, Autor 3, Autor 4, ade- ms del campo NOMBRE (que en este caso sera el Ttulo del libro). Le po- nemos al ndice el tipo Mltiples claves y como nmero de claves ponemos cuatro. Al poner como cuatro el nmero de claves, solamente buscar por las cua- tro primeras partes del ndice, es decir, los cuatro autores de cada libro, y ordenando por la otra parte que queda, el ttulo del libro. De este modo podemos realizar bsquedas de todos los libros de un de- terminado autor, independientemente del campo en el que se encuentre, ahorrndonos el tener que realizar una bsqueda por cada campo autor que hemos creado. Adems, los ndices de mltiples claves evitan que un autor sea dado de alta ms de una vez, lo que ocurrira si un mismo autor fuera dado de alta en un libro como Autor 1 y en otro como Autor 2 y no estuvi- ramos usando un ndice de mltiples claves. 8.3.7. Aplicacin para turismo rural Conceptos a tratar Enlace singular de plural por posicin. Enlace singular de plural por ndice. Descripcin Expondremos un diseo con el que gestionar las actividades de turismo ru- ral en una regin. Para ello vamos a trabajar al nivel de municipios, reflejn- dose cmo cada municipio cuenta con una serie de poblaciones. Cada poblacin nos ofrece una serie de servicios (que sern de distintos ti- pos), pero cada servicio puede ofrecerse en distintas poblaciones. Adems, cada servicio puede ser ofertado por distintas entidades, y cada entidad puede ofertar distintos servicios. 08 Desarrollo completo de una aplicacin 74 75 VELAZQUEZ VISUAL Esquema de la aplicacin Comenzaremos creando dos tablas: MUNICIPIOS y POBLACIONES. Como una poblacin pertenece siempre a un municipio, es decir, no puede haber una poblacin que no pertenezca a un municipio, definiremos POBLACIO- NES como de tipo submaestro, siendo su maestro MUNICIPIOS, que ser de tipo maestro normal con clave numrica. El siguiente paso es crear dos nuevas tablas. La primera es TIPOS DE SERVICIO, arbolada, y cuyos registros podran ser: 1) Turismo activo, descenso de caones, 2) Turismo activo, escalada, 3) Gastronoma, res- taurantes, 4) Gastronoma, tradicional, etc. La segunda tabla ser ENTI- DADES, y en ella guardaremos las empresas o comerciantes que ofer- tan los distintos tipos de servicio. Por ejemplo: Restaurante Puente Ro- mano, Casa de Aldea Miravalles, Casa Rural Incs, Turismo Activo Urrie- llu, etc. Ahora bien, una entidad puede trabajar en varias poblaciones (un restau- rante con varios locales, por ejemplo), mientras que en una misma pobla- cin pueden trabajar distintas entidades (doble plural). Por otro lado, una entidad puede ofertar distintos tipos de servicios, mientras que un tipo de servicio puede ser ofertado por distintas entidades (otro doble plural). Ade- ms una poblacin puede contar con distintos tipos de servicio, mientras que un tipo de servicio se ofrecer en distintas poblaciones (tercer doble plural). Qu hacemos para romper estos tres plurales dobles?: la solucin pa- sa por crear una tabla histrica intermediaria, a la que llamaremos SER- VICIOS. A continuacin vamos a crear un enlace singular de plural por posicin des- de la tabla MUNICIPIOS contra POBLACIONES con el que podamos atra- par la ltima poblacin (por cdigo) del municipio. Para ello, en MUNICI- PIOS creamos el campo Ult-pob. Editamos sus propiedades: Ahora vamos a crear un enlace singular de plural por ndice desde MUNICI- PIOS contra POBLACIONES que nos permitir obtener la primera poblacin del municipio cuyo nmero de habitantes sea menor o igual a 20.000. An- tes de nada, creamos el campo Habitantes en la tabla POBLACIONES. 08 Desarrollo completo de una aplicacin 76 77 VELAZQUEZ VISUAL Creamos un nuevo ndice en POBLACIONES: Municipios, en el que inclui- mos el campo enlazado a tabla de datos maestra, Municipios, y el campo Habitantes. Le asignamos el tipo Clave nica ya que al final este ndice va a apuntar a un solo registro de la tabla, lo que es necesario para el enlace sin- gular de plural, pero para asegurarnos que sea as incluimos el Cdigo, ya que puede darse la posibilidad de que haya dos registros con el mismo nombre e igual nmero de habitantes. Ahora, en la tabla MUNICIPIOS creamos un nuevo histrico contra la tabla POBLACIONES con el ndice recin creado. Una vez hecho esto, creamos un campo en la tabla MUNICIPIOS: Pob-lim, enlazado con enlace singular de plural por ndice. Le asignamos el histri- co recin creado y resolvemos el enlace. Hecho esto ya tenemos montado el diseo por el cual Velzquez nos da la pri- mera poblacin con nmero de habitantes menor o igual a 20.000. Hemos te- nido que resolver tambin el Cdigo, pero en realidad con nmero muy alto (suponemos que un municipio no va a tener casi cien millones de poblaciones). 08 Desarrollo completo de una aplicacin 78 79 VELAZQUEZ VISUAL 8.3.8. Gestin de un quiosco Conceptos a tratar Actualizaciones. Descripcin En nuestro quiosco vendemos una serie de artculos, de modo que cada ar- tculo pertenece a una sola marca, mientras que a cada marca pertenecen distintos artculos. Adems, cada artculo nos lo surte un solo proveedor, mientras que cada proveedor nos surte de ms de un artculo. Por otro la- do, cada marca es surtida por varios proveedores, mientras que cada pro- veedor nos surte varias marcas. Para cada artculo especificaremos cul es su IVA entre dos valores posi- bles que hay para este impuesto y qu cantidad tenemos de cada artculo. Tambin queremos llevar recuento de los tickets de venta, cada uno con sus correspondientes lneas de venta, de modo que en cada lnea del ticket indicaremos el artculo al que se refiere, la cantidad de artculos vendidos, el importe total con IVA y el importe total sin IVA. Queremos que el stock (existencia) de un artculo se actualice con la canti- dad vendida, que aparece en la lnea. Es decir, si una lnea refleja la venta de tres artculos, el stock del artculo debe disminuir en tres unidades. Tambin queremos el valor acumulado de los importes sin IVA de las lneas con IVA 1 de un ticket, as como el valor acumulado de los importes sin IVA de las lneas con IVA 2 del mismo ticket (IVA 1 e IVA 2 son los dos posibles valores para el IVA). Otra cosa que nos interesa es saber el nmero total de lneas que hay en un ticket. Tambin necesitamos obtener la suma de los importes con IVA de to- das las lneas de un ticket. Esquema de la aplicacin Para resolver la primera parte de la aplicacin vamos a crear las tablas ARTCULOS, PROVEEDORES y MARCAS, las tres de tipo maestro normal con clave numrica. Ahora bien: cmo las enlazamos? Sabemos que ca- da artculo pertenece a una sola marca, mientras que a cada marca perte- necen distintos artculos, luego ARTCULOS es histrico de MARCAS. De igual modo, cada artculo nos lo surte un solo proveedor, mientras que ca- da proveedor nos surte de varios artculos, luego ARTCULOS tambin es histrico de PROVEEDORES. Por otro lado, un proveedor nos surte de distintas marcas y una marca es surtida por distintos proveedores, de modo que hay un doble plural entre MARCAS y PROVEEDORES, que resolveremos mediante una tabla de tipo histrico que haga de intermediaria: DISTRIBUCIONES. Esta primera parte del diseo quedar del siguiente modo: En la tabla ARTCULOS hemos de aadir el campo Stock para llevar las existencias de cada artculo. Tambin incluimos el campo IVA, cuyo conte- nido se lo pasamos a travs de una variable que alimentamos al dar de al- ta cada artculo. Otros dos campos ms a incluir son PVSI (precio de venta sin IVA) y PVP (precio de venta al pblico, con IVA). El campo PVSI se cal- cula a partir de PVP y de IVA. Aadiremos a continuacin las tablas que faltan, referidas a los tickets y a sus lneas. stas van a ser dos: TICKETS, que viene a ser la cabecera del ticket y que contiene datos generales como la fecha o el total, y LNEAS DE TICKET, en la que cada registro hace referencia a una lnea de venta de un ticket. Cada ticket contiene varias lneas, mientras que cada lnea pertene- ce a un solo ticket, de modo que LNEAS DE TICKET es histrico de TIC- KETS. Por otro lado, en cada lnea de ticket aparece un solo artculo, mien- tras que cada artculo puede aparecer en muchas lneas de ticket, luego LI- NEAS DE TICKET es histrico de ARTICULOS. 08 Desarrollo completo de una aplicacin 80 81 VELAZQUEZ VISUAL Adems, como cada lnea de ticket pertenece exclusivamente a un ticket, creamos la tabla LNEAS DE TICKET de tipo submaestro, siendo su padre TICKETS, la cual es maestro normal con clave numrica. En la tabla LINEAS DE TICKETS incluimos los siguientes campos: El campo IVA tiene como contenido inicial el valor del IVA del artculo que aparece en la lnea: %ARTICULO.IVA%, lo mismo para el campo PVP con el valor del PVP del artculo. El campo PVSI se calcula para cada lnea a par- tir de los valores de los campos IVA y PVP de la lnea. Los campos Importe con IVA e Importe sin IVA se calculan multiplicando PVP*Cantidad y PVSI*Cantidad, respectivamente, donde Cantidad guarda el nmero total de artculos vendidos que aparece en la lnea. Veamos ahora los campos que hemos incluido en la tabla TICKETS: IVA1 es un campo al que pasamos como valor inicial el contenido de la va- riable $IVA1$ (recordar que los artculos admiten dos posibles valores para el IVA, de modo que al dar de alta un artculo elegiremos entre uno u otro. Si elegimos el primer valor, ste se guarda en la variable $IVA1$, si selec- cionamos el segundo se guarda en $IVA2$), lo mismo ocurre para IVA2 e $IVA2$. BASE1 es un campo cuya finalidad es la de acumular el Importe sin IVA de todas las lneas de un ticket cuyo artculo tenga IVA1, mientras que en BASE2 acumularemos el Importe sin IVA de todas las lneas de un ticket cuyo IVA sea IVA2. En el campo Total sumaremos el valor del campo Importe con IVA de todas las lneas de un ticket, mientras que en el campo Lneas guardaremos el n- mero total de lneas que componen un ticket. Estas modificaciones en los campos de las tablas ARTCULOS y TICKETS 08 Desarrollo completo de una aplicacin 82 83 VELAZQUEZ VISUAL que han de hacerse en funcin del contenido de los campos de la tabla LI- NEAS DE TICKETS las realizaremos mediante actualizaciones. La primera actualizacin es la del campo Stock de la tabla ARTICULOS. Pa- ra ello abrimos la carpeta Actualizaciones de la tabla LINEAS DE TICKETS y aadimos una actualizacin. El campo enlazado es Artculos, el campo a modificar es el Stock de la tabla ARTCULOS. Modificamos acumulando, y la frmula es -%CANTIDAD%. De este modo restamos al contenido del campo Stock el valor del campo Cantidad de la lnea, es decir, restamos el nmero de artculos vendidos. Nos quedan cuatro actualizaciones. Como las cuatro van contra la tabla TICKETS, el campo enlazado es Tickets. En la primera acumulamos el valor del campo Importe sin IVA de la tabla LINEAS DE TICKETS en el campo Ba- se1 de la tabla TICKETS, con la condicin de que el IVA del artculo de la l- nea sea igual al contenido del campo IVA1 de la tabla TICKETS. La segunda actualizacin a TICKETS: 08 Desarrollo completo de una aplicacin 84 85 VELAZQUEZ VISUAL La tercera actualizacin a TICKETS consiste en acumular el contenido del campo Importe con IVA de todas las lneas de la tabla LINEAS DE TICKETS en el campo Total de la tabla TICKETS. La ltima actualizacin consiste en acumular el valor 1 en el campo Lneas de la tabla TICKETS, de modo que por cada lnea de la tabla LINEAS DE TICKETS se ir sumando una unidad, resultando al final el nmero total de lneas que hay en un ticket. 08 Desarrollo completo de una aplicacin 86 87 VELAZQUEZ VISUAL Con esto terminamos el diseo de la aplicacin para gestin de un quiosco. 8.3.9. Pedidos de compras Conceptos a tratar Punteros indirectos. Actualizaciones. Descripcin Supongamos que un comerciante necesita una aplicacin para gestionar sus pedidos a determinados proveedores bajo los siguientes supuestos: Cada artculo que compra va a pertenecer a una sola marca y a una mar- ca pertenecern distintos artculos. Adems cada proveedor va a surtir al comerciante de distintos artculos, mientras que un mismo artculo lo pueden surtir distintos proveedores. Los pedidos que realiza el comerciante se reflejan en las lneas de pedi- dos, de modo que en cada lnea va a aparecer un solo artculo, pero los artculos pueden repetirse en distintas lneas. Una lnea de pedido va a pertenecer inequvocamente a una cabecera de pedidos. El punto fuerte es el siguiente: si el comerciante compra a un proveedor un artculo que no le ha pedido antes, Velzquez crear directamente la pare- ja artculo-proveedor junto con el descuento correspondiente que el pro- veedor hace al comerciante para ese artculo. Posteriormente, si en una l- nea de pedido indicamos la misma pareja artculo-proveedor pero con dis- tinto descuento, Velzquez cambiar en los posteriores pedidos en los que se repita la pareja el valor del descuento por el indicado la ltima vez. Esquema de la aplicacin En principio necesitamos el siguiente esquema: En la tabla DISTRIBUCIONES aadimos el campo Descuento, encargado de guardar el descuento que un proveedor hace al comerciante para un ar- tculo determinado. En ARTCULOS aadimos el campo Precio del artculo, mientras que en LI- NEAS DE PEDIDOS aadimos los campos Descuento, Cantidad e Importe, este ltimo es un campo frmula que se calcula aplicando la expresin: (%CANTIDAD%*%ARTICULOS.PRECIO%)-fPorcentaje(%ARTICULOS.PRE- CIO%*%CANTIDAD%, %DESCUENTO% ). Esta frmula podemos simplificarla usando la funcin fNeto(), quedando de la siguiente manera: fNeto( %CANTIDAD% * %ARTICULOS.PRECIO% , %DESCUENTO%) 08 Desarrollo completo de una aplicacin 88 89 VELAZQUEZ VISUAL Otro campo a aadir en LINEAS DE PEDIDOS es el campo Pun-dist (pun- tero a distribuciones), enlazado a tabla de datos indirecta a la tabla DISTRI- BUCIONES. Lo resolvemos como se indica: Para resolver el puntero hemos aadido al ndice Marcas de la tabla DIS- TRIBUCIONES el campo Proveedores. Hecho esto aparecer el puntero que enlaza la tabla LINEAS DE PEDIDOS con DISTRIBUCIONES. Ahora bien, una vez creado el puntero hemos de ponerle como contenido inicial al campo Descuento de la tabla LINEAS DE PEDIDOS el valor del Descuento de la tabla DISTRIBUCIONES (es decir, %PUN-DIST.DESCUENTO%). Ahora vamos a realizar la actualizacin desde LINEAS DE PEDIDOS contra DISTRIBUCIONES: 08 Desarrollo completo de una aplicacin 90 91 VELAZQUEZ VISUAL Toda esta estructura que hemos diseado funciona del siguiente modo: su- pongamos que en una lnea de pedido aparece una pareja artculo-provee- dor nueva (en ella el comerciante tambin indica el valor del descuento que le hace el proveedor para ese artculo). En las propiedades del puntero he- mos marcado la casilla de verificacin Dar alta si no existe, por lo cual se dar de alta la nueva pareja artculo-proveedor en la tabla DISTRIBUCIO- NES. Adems, en la lnea de pedido el comerciante introduce un valor para el descuento. Fijmonos en la condicin para que se produzca la actualiza- cin: el valor del descuento de la lnea debe ser distinto al del descuento de la tabla DISTRIBUCIONES. Como el campo descuento de la tabla DISTRI- BUCIONES est vaco ya que se est creando la pareja, la condicin se cumple, lo que provoca la actualizacin. Es decir, Velzquez asigna al cam- po Descuento de la tabla DISTRIBUCIONES el valor del descuento que se ha puesto en la lnea. En posteriores pedidos del mismo artculo que el comerciante haga al pro- veedor, Velzquez tomar por defecto el descuento que haya indicado por primera vez, a no ser que indique otro descuento distinto. Esto es as ya que el contenido inicial del campo Descuento de la tabla LINEAS DE PEDIDOS es el valor del Descuento de la tabla DISTRIBUCIONES. Si posteriormente el comerciante vuelve a pedir el mismo artculo al mismo proveedor pero indicando un descuento distinto, la condicin se vuelve a cumplir, volviendo Velzquez a actualizar el contenido del campo Descuen- to de la tabla DISTRIBUCIONES con el valor que el comerciante ha indica- do en la lnea. Ojo, esto es peligroso ya que pudiera ser que el proveedor hiciera este descuento distinto slo en este pedido (por la razn que fuera) y que para pedidos posteriores el descuento fuera el que haba antes. Para solucionar esto podramos avisar de que el descuento va a ser actualizado, teniendo que aceptar el comerciante para que se modifique el descuento de la tabla DISTRIBUCIONES. El diseo para un mdulo de ventas es idntico al de un mdulo de com- pras, slo hemos de renombrar las tablas PROVEEDORES por CLIENTES y DISTRIBUCIONES por DESCUENTOS. En este caso LNEAS DE PEDIDOS se refiere a pedidos que un cliente nos hace a nosotros, mientras que en DESCUENTOS guardamos el descuento que aplicamos a un cliente cuan- do nos compra un artculo determinado. El esquema del mdulo de ventas: 8.3.10. Aplicacin para control de existencias 8.3.10. en almacenes (caso de compras) Conceptos a tratar Punteros indirectos. Actualizaciones. Enlace a hermano contiguo. Descripcin El diseo que se presenta a continuacin gestiona las existencias de artcu- los que un comerciante tiene en sus almacenes, de modo que las existen- cias se actualizarn segn el comerciante realiza pedidos a sus proveedores. Supondremos que el comerciante tiene varios almacenes, de modo que en cada almacn se guardan distintos artculos, a la vez, un mismo (tipo de) ar- tculo puede encontrarse en distintos almacenes. Cada albarn de compra del comerciante consta de una cabeza y una se- rie de lneas, adems cada albarn se refiere a un solo almacn, pero a un mismo almacn se referirn muchos albaranes. Como en los casos anteriores, en cada lnea de albarn aparece un solo ar- tculo, pero cada artculo puede aparecer en muchas lneas. Adems, cada albarn se refiere a un solo proveedor, mientras que a cada proveedor pueden hacer referencia muchos albaranes. Esquema de la aplicacin Siguiendo los puntos expuestos, un diseo vlido es: 08 Desarrollo completo de una aplicacin 92 93 VELAZQUEZ VISUAL La tabla EXISTENCIAS se encarga de resolver el doble plural entre ARTCU- LOS y ALMACENES. En EXISTENCIAS aadimos el campo Stock, que se- r el que guarde las existencias que el comerciante tiene de un artculo en un almacn. ALBARANES es histrica tanto de ALMACENES como de PROVEEDORES, mientras que LINEAS DE ALBARAN es histrica de ALBARANES y de AR- TICULOS. En la tabla LINEAS DE ALBARN hemos de aadir dos campos: el primero es Cantidad, que guardar cuntos artculos se piden en cada lnea. El otro campo es Punexist, puntero a la tabla EXISTENCIAS con el que actualiza- remos el campo Stock. Para resolver el puntero hemos aadido al ndice Artculos de la tabla EXIS- TENCIAS el campo Almacn. 08 Desarrollo completo de una aplicacin 94 95 VELAZQUEZ VISUAL Ahora tenemos que realizar la actualizacin desde LINEAS DE ALBARANES contra la tabla EXISTENCIAS, de modo que el contenido del campo Stock de la tabla EXISTENCIAS cambie segn el contenido del campo Cantidad de las lneas de albarn (por ejemplo, si en una lnea de albarn de un al- macn se indica la compra de tres camisetas, el stock de camisetas en ese almacn debe aumentar en tres unidades). La actualizacin: En la actualizacin el campo enlazado es el que apunta a la tabla EXIS- TENCIAS: Punexist. El campo a modificar es Stock, en el que acumulare- mos el campo Cantidad de la tabla LINEAS DE ALBARANES. Vamos a darle al diseo una funcionalidad ms: el comerciante ser capaz de recorrer todos los albaranes de un proveedor determinado, ordenados por fecha. Para ello vamos a crear un ndice en la tabla ALBARANES al que llamaremos Hermano. Editamos sus propiedades: Al ndice le hemos metido los campos Proveedores y Fecha, y lo hemos declarado del tipo Acepta repetidas para contemplar la posibilidad de que existan varios albaranes correspondientes al mismo proveedor con igual fecha. Ahora creamos dos campos en la tabla ALBARANES: Anterior y Siguiente. Editamos las propiedades del campo Anterior. 08 Desarrollo completo de una aplicacin 96 97 VELAZQUEZ VISUAL Al campo Anterior lo hemos declarado como enlazado a Hermano contiguo, para su resolucin le decimos que el ndice por el que se tiene que mover es Hermano, el N de partes comunes es 1, es decir, al pasar de un albarn a otro debe fijar el proveedor. La Direccin es Anterior. Para el campo Siguiente hacemos lo mismo, con la salvedad de que la Di- reccin es Siguiente. Ahora el diseo cuenta con todo lo necesario para que el comerciante pue- da moverse por los albaranes de un proveedor determinado. 8.3.11. Tienda de discos Conceptos a tratar Enlace singular y plural. Tablas arboladas. Tablas submaestras. Descripcin Vamos a desarrollar un esquema de tablas que pueda organizar el material de una tienda de discos. Para ello establecemos las siguientes bases: Un disco va a tener un nico autor (sea solista, banda, orquesta...), mien- tras que un autor podr serlo de varios discos. De igual modo, un disco habr sido editado por una sola discogrfica, mientras que una disco- grfica editar varios discos. Por otro lado, un disco se incluir en un solo gnero musical, mientras que en un mismo gnero podrn incluirse varios discos. Por ltimo, un disco contendr varias canciones, mientras que una can- cin pertenecer a un disco en exclusiva. Esquema de la aplicacin Comenzaremos creando la tabla DISCOS, de tipo maestro normal con cla- ve numrica. En ella incluimos los campos Ao, Descripcin, Portada, etc. Ahora bien, en base a lo expuesto anteriormente, necesitamos las tablas si- guientes: CANTANTES, DISCOGRFICAS, GNEROS y CANCIONES. Nos conviene definir la tabla GNEROS de tipo arbolado debido a la es- tructura de sus registros (solistas espaoles de los 80, solistas espaoles de los 90, solistas franceses de los 80, solistas franceses de los 90, etc.), mientras que las tablas CANTANTES y DISCOGRFICAS sern maestras normales con clave numrica. CANTANTES, DISCOGRFICAS y GNEROS son maestros de DISCOS. Por ltimo, como una cancin pertenece exclusivamente a un disco, es conveniente declarar la tabla CANCIONES de tipo submaestro, siendo DIS- COS su padre. 08 Desarrollo completo de una aplicacin 98 99 VELAZQUEZ VISUAL 8.3.12. Hotel Conceptos a tratar Creacin de punteros indirectos. Enlace singular de plural por posicin. Descripcin A continuacin expondremos un diseo que podra gestionar el funciona- miento de un hotel bajo los siguientes supuestos: Cada vez que un cliente va a un hotel realiza una reserva, de modo que un cliente puede realizar varias reservas pero cada reserva es de un solo cliente. En la reserva se apunta una sola habitacin: la que va a usar el cliente, pero una misma habitacin puede aparecer en diferentes reservas. Por otro lado, en la reserva tambin se apuntan los tipos de servicio que solicita el cliente, de modo que en una reserva se pueden apuntar dis- tintos tipos de servicio, mientras que un mismo tipo de servicio puede aparecer en distintas reservas. Al cliente se le pueden presentar varias facturas, pero cada factura per- tenecer a un solo cliente. Por su parte, cada factura contendr una se- rie de lneas, perteneciendo cada lnea a una sola factura. En cada lnea aparecer un solo tipo de servicio, mientras que un mismo tipo de servicio podr aparecer en distintas lneas. Esquema de la aplicacin Comenzaremos creando la tabla RESERVAS, de tipo maestro normal con clave numrica. En ella creamos los campos Fecha de entrada, Fecha de salida, etc. Creamos ahora dos tablas: CLIENTES, tambin maestra normal con clave numrica, y HABITACIONES, de tipo arbolado. La declaramos arbolada por la forma habitual de referirse a las habitaciones en un hotel (habitacin 441, 442, 451, 452...). Tanto CLIENTES como HABITACIONES son maestras de RESERVAS. Creamos a continuacin la tabla TIPOS DE SERVICIOS, la cual mantiene un doble plural con RESERVAS, de modo que hemos de crear una tabla de ti- po histrico, SERVICIOS, que haga de intermediaria. En la tabla SERVICIOS incluimos los campos Fecha, Hora, Duracin, etc., todos ellos refirindose al servicio prestado. Ahora creamos las tablas FACTURAS, de tipo maestro normal con clave nu- mrica, histrica de RESERVAS y de CLIENTES, y LINEAS, de tipo sub- maestro con padre FACTURAS (ya que cada lnea pertenece exclusivamen- te a una FACTURA). LINEAS es histrica de FACTURAS y de TIPOS DE 08 Desarrollo completo de una aplicacin 100 101 VELAZQUEZ VISUAL SERVICIOS, de modo que el primer enlace lo crea Velzquez por defecto, pero el segundo hemos de crearlo nosotros. En la tabla LINEAS incluimos el campo Importe. Ahora vamos a crear el campo Pun-serv en la tabla LINEAS, que ser un puntero a la tabla SERVICIOS. La idea es la siguiente: cada vez que se rea- liza un servicio, su duracin se refleja en el campo Duracin de la tabla SER- VICIOS, de modo que mediante el puntero vamos a atrapar el contenido de ese campo, usndolo para calcular el campo Importe de cada lnea (ser un campo frmula). Para resolver el puntero hemos aadido el campo Tipos de servicios al ndice Reservas de la tabla SERVICIOS, declarando el ndice co- mo de clave nica. La creacin del puntero: Ahora crearemos en la tabla HABITACIONES el campo Ult-res, que enlaza- remos con un plural de singular por posicin contra la tabla RESERVAS, de modo que en l se guardar la ficha correspondiente a la ltima reserva de la habitacin. 08 Desarrollo completo de una aplicacin 102 103 VELAZQUEZ VISUAL Ahora vamos a aadir al ndice Habitaciones de la tabla RESERVAS el cam- po Fecha de entrada. Una vez hecho esto, creamos el campo Sig-Res en la tabla RESERVAS. Lo declaramos enlazado a hermano contiguo, de modo que lo resolvemos con el ndice Habitacin, indicando partes comunes 1 y Direccin Siguiente. De este modo, al movernos por el campo Sig-res, mantenemos fijo el con- tenido del campo Habitacin, movindonos por la Fecha de entrada. Igualmente podemos crear otro campo, Ant-res, por el que movernos a la anterior reserva de una habitacin. 08 Desarrollo completo de una aplicacin 104 105 VELAZQUEZ VISUAL 8.3.13. Base de datos de cine Conceptos a tratar Plural finito. Enlace singular de plural por posicin. Actualizaciones. Creacin de histricos. Descripcin Con esta aplicacin vamos a gestionar una base de datos de cine. Para su diseo hemos establecido los puntos siguientes: Una persona puede participar en muchas pelculas, mientras que en una pelcula, una persona slo participar una vez ejerciendo la misma fun- cin (sea actor, director, guionista, etc.). Lo anterior no excluye que en una misma pelcula una persona realice dos trabajos distintos (por ejem- plo, guionista y actor). Adems, en una pelcula puede haber varios di- rectores, varios guionistas, varios actores, etc. Una persona puede recibir varios premios por haber participado en una pelcula, mientras que un mismo premio puede otorgarse a distintas per- sonas. Anlogamente, una pelcula puede recibir distintos premios, mientras que un mismo premio puede otorgarse a distintas pelculas. Una pelcula puede incluirse en varios gneros, mientras que a un mis- mo gnero pertenecen distintas pelculas. Lo mismo ocurre con las pro- ductoras: una pelcula puede ser una colaboracin entre distintas pro- ductoras, mientras que a una productora pertenecen distintas pelculas. Una pelcula puede ser estrenada en varios pases, mientras que en un pas pueden estrenarse muchas pelculas. Esquema de la aplicacin Comenzaremos creando la tabla central de la aplicacin: PELICULAS, que declararemos de tipo maestro normal con clave numrica. En ella incluimos los campos Ttulo original, Duracin, Ao, Sntesis, Foto, scars, etc. A continuacin crearemos la tabla PERSONAS, de tipo maestro normal con clave numrica. En ella incluiremos los campos Nombre real, Sexo, Foto, scars, etc. En cada registro de la tabla PELICULAS vamos a guardar los actores de la misma. Como stos son un nmero limitado, usaremos la tcnica del plural finito. Para ello en PELICULAS creamos el campo Actor1, declarndolo en- lazado a la tabla de datos maestra PERSONAS. Copiamos y pegamos este campo tantas veces como actores queramos incluir. Despus creamos el ndice Actores, lo declaramos de mltiples claves y lo componemos con to- dos los campos Actor que acabamos de crear, aadiendo el campo Ao pa- ra que cuando busquemos todas las pelculas de un actor Velzquez nos las ordene por el ao de la pelcula. Ahora nos vamos a la tabla PERSONAS, en la que declaramos un histrico contra PELICULAS usando el ndice Actores. 08 Desarrollo completo de una aplicacin 106 107 VELAZQUEZ VISUAL De igual modo que con los actores, una pelcula puede tener ms de un di- rector y ms de un guionista. Para solucionar este problema repetimos la tcnica del plural finito, creando varios campos Director y varios campos Guionista en la tabla PELICULAS, incluyndolos en su correspondiente n- dice de clave mltiple y declarando los histricos correspondientes en la ta- bla PERSONAS. Hasta el momento, nuestra aplicacin tiene el siguiente esquema: Hasta el momento hemos declarado tres histricos en PERSONAS contra PELICULAS, en virtud de los cuales obtenemos todas las pelculas en las que una persona ha trabajado como director, todas en las que su trabajo fue de actor y todas en las que fue guionista. Pero nos interesara conocer to- das las pelculas en las que una persona trabaj, independientemente de lo que hiciera. Para ello declaramos, en la tabla PELICULAS, el ndice Perso- na-Ao, declarndolo de mltiples claves y componindolo por todos los campos Actor, Director y Guionista, adems del Ao. A continuacin de- claramos en PERSONAS un histrico contra PELICULAS mediante el ndi- ce Persona-Ao. Ahora creamos dos campos en PERSONAS: Pelcula-primera y Pelcula-l- tima, los dos enlazados mediante plural de singular por posicin usando el histrico recin creado (Pelculas/Persona-Ao). Para el primero introduci- mos como frmula 1, para el segundo n. Mediante estos campos podremos atrapar las pelculas primera y ltima en las que haya participado la perso- na, independientemente de su trabajo. Vamos a ir un poco ms lejos. Para ello aadimos en la tabla PERSONAS los campos Pelis-actor, Pelis-guionista y Pelis-director. Sern de tipo nu- mrico y su cometido va a ser el de guardar el nmero de pelculas en las que una persona ha participado como director, actor o guionista. Se alimentarn gracias a actualizaciones declaradas en PELICULAS, de modo que creamos una actualizacin para cada campo Actor, Director y Guionista de PELICULAS. El funcionamiento es el siguiente: cada vez que una persona aparece en algunos de los campos Actor, Director o Guionista de una pelcula, la actualizacin correspondiente sumar una unidad al campo Pelis-actor, Pelis-guionista o Pelis-director, segn corresponda (o a ms de uno, si la persona realiza ms de un trabajo). Por ejemplo, la actualizacin correspondiente al campo Actor 1 sera: 08 Desarrollo completo de una aplicacin 108 109 VELAZQUEZ VISUAL Para agilizar las bsquedas y reflejar los trabajos que ha desarrollado una persona creamos los campos Director, Guionista y Actor, los tres de tipo booleano, y los ndices por nombre correspondientes asociados al boolea- no. Es decir, creamos un ndice para cada uno por nombre y en el Campo condicin para indexar usamos Director, Actor o Guionista, respectivamen- te, y marcamos Estado del campo para indexar, para que indexe aquellos cuyo booleano respectivo est a uno. Esto nos servir para cargar listas o realizar bsquedas de directores, actores o guionistas. Para que estos cam- pos se pongan a uno, por ejemplo el campo Actor, usamos los campos que acabamos de crear, Pelis-Actor, por ejemplo. Cuando este campo sea ma- yor que 0, entonces el booleano se pondr a uno, condicin que ponemos como contenido inicial del booleano: %PELIS-ACTOR%>0. Vamos a aadir otras dos tablas al diseo: MATERIAS, que declararemos de tipo arbolado (los gneros de las pelculas se adaptan a una estructura ar- bolada) y PRODUCTORAS, de tipo maestro normal con clave numrica. Vamos a contemplar el caso de que una pelcula pueda pertenecer a ms de un gnero y a ms de una productora. De nuevo aparece un plural en los dos sentidos que resolveremos con la tcnica del plural finito. Enlazamos las tablas PRODUCTORAS y PELICULAS mediante un enlace singular-plu- ral (PELICULAS haciendo de histrico). Hecho esto copiamos y pegamos el campo Productora de la tabla PELICULAS, apareciendo Productora2, y componemos con estos dos campos el ndice Productoras, declarndolo de mltiples claves (hemos contemplado el caso de que hubiera slo dos productoras). Con la tabla PELICULAS actuaremos de modo idntico. 08 Desarrollo completo de una aplicacin 110 111 VELAZQUEZ VISUAL Creamos ahora la tabla PAISES, que declararemos maestro normal con cla- ve numrica. Cmo la encajamos en el esquema? Veamos: una pelcula puede estrenarse en mucho pases, mientras que en un pas se estrenan muchas pelculas. Este doble plural lo resolvemos intercalando una tabla de tipo histrico que llamaremos TITULOS, pues aprovecharemos para guar- dar en ella el ttulo de cada pelcula en el idioma de cada pas. Tambin aprovecharemos la tabla PAISES para capturar desde PELICU- LAS los pases participantes en la cinta. Aqu surge de nuevo un plural en los dos sentidos que solucionaremos mediante la tcnica del plural finito, ya que el nmero de pases coproductores no va a ser grande. Para ello enlazamos las tablas PAISES y PELICULAS con un enlace singular-plural, a continuacin copiamos y pegamos el campo Pas que se ha creado en PELICULAS al enlazar, apareciendo Pas2, y aadimos estos dos campos y el campo Ao en el ndice Pases de PELICULAS, que declararemos de mltiples claves. Slo nos queda por aadir una tabla: PREMIOS. La manera usual de es- tructurar los premios justifica que la definamos de tipo arbolado (Goya al mejor actor, Goya a la mejor actriz, Goya al mejor actor secundario, Goya a la mejor actriz secundaria, etc.). En base a lo expuesto en el apartado Descripcin, PREMIOS mantiene una relacin de doble plural con PELICULAS y PERSONAS, lo que justifica la in- troduccin de una tabla intermedia de tipo histrico, PREMIADAS, que re- suelva el problema. En PREMIADAS creamos el campo Ao. Desde PREMIADAS vamos a actualizar el contenido de los campos scars de las tablas PERSONAS y PELICULAS. La actualizacin para PELICULAS es: Con esta actualizacin sumamos una unidad al campo scars de PELICU- LAS, siempre que el premio otorgado a la pelcula sea un scar. Esto se comprueba en la Frmula condicin para modificar, en la que se verifica que la primera parte del cdigo del premio sea 1, que precisamente es el co- 08 Desarrollo completo de una aplicacin 112 113 VELAZQUEZ VISUAL rrespondiente a los scars (si la condicin no se cumple, no se realiza la ac- tualizacin). Por ltimo, vamos a actualizar el contenido del campo scars de PER- SONAS. En el caso ms general, dos personas podran recibir el mismo premio, por la misma pelcula, por el mismo trabajo y el mismo ao: se- ra el caso de una pelcula con dos directores, ganadora del scar al me- jor director. Se nos plantea entonces un doble plural (las personas del premio, los premios de la persona), que resolvemos por la tcnica del plural finito. En la tabla PREMIOS copiamos y pegamos el campo Persona, apareciendo Persona2, que tambin estar enlazado a tabla de datos maestra. Ahora componemos el ndice Personas con los dos campos anteriores, le aadi- mos el campo Ao y el campo Premio y lo declaramos de clave mltiple, con lo que ya est resuelto el doble plural. Ahora declaramos la primera actualizacin (la que usa el campo Persona) del contenido del campo scars de PERSONAS del siguiente modo: Ahora nos faltara otra actualizacin, idntica a la anterior, pero que usara el campo Persona2. 8.3.14. Gestin comercial Conceptos a tratar Creacin de punteros indirectos (reales y virtual). Enlaces singular de plural por ndice. Actualizaciones. Triggers (procesos de tabla). Descripcin El ejemplo siguiente muestra el diseo del mdulo de ventas de una gestin comercial. Se van a tener en cuenta las siguientes consideraciones: Crearemos unos contadores, tanto de albaranes como de facturas, para que se vayan incrementando a medida que se crean nuevos albaranes y facturas. Cada cliente tendr un descuento particular para cada familia de artculos. Cada artculo tiene una tarifa concreta. Si cambiamos la fecha de un albarn, sta deber modificarse en todas las lneas de ese albarn. La aplicacin ser multialmacn, es decir, existirn diversos almacenes que generarn sus propios albaranes y existencias de artculos. Esquema de la aplicacin En este caso, al ser un diseo con muchas tablas, iremos creando diferen- tes sub-esquemas o mdulos del esquema de tablas general de la apli- cacin. Es decir, en vez de tener todas las tablas del proyecto y sus res- pectivos enlaces en un nico esquema de tablas como se vena haciendo hasta ahora, iremos creando ms esquemas de tablas dentro del proyecto para as poder trabajar ms cmodamente. Comenzamos por la creacin del esquema correspondiente a los contado- res para los albaranes, las facturas y las series de facturacin. Dentro del rea correspondiente al esquema de tablas creamos las siguientes tablas: AOS, SERIES DE FACTURACIN, CONTADORES, CLIENTES, ALBARA- NES y FACTURAS, todas de tipo maestro normal con clave numrica, ex- cepto CONTADORES, que ser de tipo histrico. Cmo las relacionamos? Comencemos con la tabla SERIES DE FACTU- RACIN. Sus registros constan de un cdigo y una letra y se usan para cla- sificar las facturas. Por otro lado, en la tabla FACTURAS guardaremos los datos generales de cada factura. Una factura estar compuesta por albaranes, mientras que cada albarn estar compuesto por lneas, es decir, la tabla ALBARANES 08 Desarrollo completo de una aplicacin 114 115 VELAZQUEZ VISUAL ser histrica de FACTURAS, mientras que LNEAS ser histrica de AL- BARANES (LINEAS la crearemos ms adelante). En CLIENTES guardamos informacin acerca de cada cliente, siendo CLIENTES maestra de ALBARANES. Por otro lado, haciendo SERIES DE FACTURACIN maestra de CLIENTES podremos obtener todos los clientes con los que hemos trabajado un ao determinado. Entre las tablas AOS y SERIES DE FACTURACIN tenemos un doble plu- ral (los aos de la serie de facturacin, la serie de facturacin del ao), que resolvemos gracias a una tabla histrica intermedia: CONTADORES. FACTURAS y ALBARANES tambin sern histricas de AOS y de SERIES DE FACTURACIN. Seleccionamos la opcin de men Esquema > Cambiar nombre (o pulsamos la tecla F2) y en el cuadro de dilogo que se muestra, llamado Esquema, sus- tituimos en la propiedad Descripcin la denominacin Esquema de tablas por Esquema contadores. En dicho cuadro de dilogo podemos incluir den- tro de la propiedad Observaciones una serie de comentarios que permitan al programador interpretar ms fcilmente el esquema en sucesivas ocasiones: En la tabla CONTADORES creamos dos campos numricos de longitud 3: CONTADOR-ALB y CONTADOR-FAC, que sern los que almacenen los va- lores de los contadores de albaranes y facturas, respectivamente. En la tabla FACTURAS creamos el campo NUM-FAC (Nmero de factura, numrico de longitud 3) que almacenar el nmero de factura. En la tabla ALBARANES aadimos el campo BASE (Base total, numrico de longitud 3, con 2 decimales y con signo) que almacenar el importe total del albarn, y el campo NUM-ALB (N Albarn, numrico de longitud 3) que al- macenar el nmero de albarn. En la tabla CLIENTES creamos el campo ACUM-VENTAS (Acumulado de ventas, numrico de longitud 5, con 2 decimales y con signo) que ser el encargado de guardar el total de ventas del cliente. Con este esquema de tablas es posible crear dos punteros indirectos. Di- chos enlaces se crean en esquemas que contienen tablas unidas por bra- zos de pulpo. Por ejemplo, si observamos las tablas FACTURAS y CON- TADORES podremos ver dos brazos (uno sera FACTURAS/AOS/CONTA- DORES, y otro FACTURAS/SERIES DE FACTURACIN/CONTADORES). Por tanto es posible crear un enlace a tabla de datos indirecta desde FAC- TURAS a CONTADORES. Como en otras ocasiones, debemos modificar un ndice de la tabla CONTADORES, de modo que abrimos el ndice Ao y le aadimos el campo Seriesdefact. Tambin podemos abrir el ndice Seriesdefact y aadirle el campo Ao. 08 Desarrollo completo de una aplicacin 116 117 VELAZQUEZ VISUAL A continuacin creamos el campo PUNT-CONTADORES en la tabla FAC- TURAS, que tiene las siguientes propiedades: Pulsando el botn Resolucin se resuelve uno de los ndices para crear el enlace, hagmoslo con el ndice Ao. La parte Ao del ndice se resuelve con el Ao de la factura, mientras que la parte Series de facturacin se re- suelve con la Serie de facturacin de dicha factura. De la misma manera, entre la tabla ALBARANES y la tabla CONTADORES se puede establecer otro enlace indirecto, ya que estn unidas por los bra- zos CLIENTES/FACTURAS/AOS/CONTADORES y CLIENTES/SERIES DE FACTURACIN/CONTADORES, respectivamente. En este caso, como ya hemos modificado los ndices de la tabla CONTA- DORES, slo queda crear en la tabla ALBARANES un nuevo campo, llama- do PUNT-CONTADORES, que ser el del enlace indirecto y tendr las mis- mas propiedades que el campo de igual nombre declarado en la tabla FAC- TURAS. Pulsamos el botn Resolucin, resolviendo el Ao con el Ao del albarn y la Serie de facturacin con la Serie de facturacin del albarn. Con esto tenemos creado el segundo puntero indirecto, quedando comple- to el Esquema contadores definido anteriormente: 08 Desarrollo completo de una aplicacin 118 119 VELAZQUEZ VISUAL Para acumular el valor de los contadores de albaranes y facturas creamos dos triggers (procesos de tabla) dentro de la tabla FACTURAS. Para ello se- leccionamos, dentro de la tabla FACTURAS, la subcarpeta Procesos y pul- samos el botn Insert. Aparecer el cuadro de dilogo Nuevo manejador de evento de: Facturas, en el que seleccionamos la opcin Anterior a un alta de ficha: Al pulsar el botn Aceptar se crea en la subcarpeta Procesos el trigger in- dicado. Si hacemos doble clic sobre el trigger recin creado aparecer el cuadro de dilogo Proceso: Facturas->Anterior a un alta de ficha. En l escribiremos el proceso a realizar cuando se cree una nueva factura. El funcionamiento del proceso es el siguiente: si no existe un valor en el campo NUM-FACT, modificamos la ficha de maestro a travs del puntero indirecto a la tabla CONTADORES, para incrementar en uno el campo CON- TADOR-FAC (el contador de facturas) y a continuacin almacenar dicho va- lor del contador en la variable local Contador, que es la que dar su valor almacenado al campo NUM-FAC de la tabla FACTURAS. De igual manera, pulsamos de nuevo la tecla insert en la subcarpeta Pro- cesos de la tabla FACTURAS. Aparecer otra vez el cuadro de dilogo Nuevo manejador de evento de: Facturas y seleccionamos la opcin An- terior a una modificacin de ficha. Al hacer doble clic sobre el trigger crea- do aparece el cuadro de dilogo Proceso: Facturas-> Anterior a una mo- dificacin de ficha, en el que escribimos un proceso igual al creado en el trigger anterior al alta de ficha. De esta manera los contadores podrn ser modificados tanto en el alta como en la modificacin de una ficha de FAC- TURAS. Ahora crearemos una actualizacin en ALBARANES, de modo que sobre la subcarpeta Actualizaciones de la tabla ALBARANES pulsamos la tecla In- sert, apareciendo el cuadro de dilogo Actualizacin desde Albaranes. Co- mo Campo enlazado seleccionamos el campo CLIENTES de la tabla: Pulsamos el botn Aadir y aparecer el cuadro de dilogo Componen- te de Actualizacin. En l declaramos las siguientes propiedades: 08 Desarrollo completo de una aplicacin Aadir 120 121 VELAZQUEZ VISUAL Este componente de actualizacin incrementa el valor del acumulado de ventas de un cliente (campo ACUM-VENTAS de la tabla CLIENTES) con el valor del importe de la base del albarn (campo BASE-TOT) de la tabla AL- BARANES. Las actualizaciones presentan una gran ventaja frente a los triggers: slo in- dicamos qu hacer en el alta. La propia actualizacin se encarga de resol- ver lo que tiene que hacer en la modificacin y en la baja. En la misma tabla de ALBARANES crearemos tres triggers: Anterior a un al- ta de ficha, Anterior a una modificacin de ficha y Posterior a una modifica- cin de ficha. Los dos primeros triggers, que son iguales, tienen una es- tructura parecida a la de los triggers correspondientes a la tabla FACTU- RAS, con la salvedad de que en este caso trabajamos con el contador de albaranes: El tercer trigger (Posterior a una modificacin de ficha) es un proceso que modifica la fecha de las lneas del albarn con la fecha correspondiente al campo FECHA del albarn: Desde la tabla ALBARANES realizamos la facturacin, para lo cual hacemos uso de procesos y de tubos. Ahora crearemos un nuevo subesquema de tablas, que llamaremos Es- quema ventas. 08 Desarrollo completo de una aplicacin 122 123 VELAZQUEZ VISUAL Dentro del Esquema ventas, crearemos las siguientes tablas: DESCUEN- TOS, FAMILIAS, ARTCULOS y LINEAS. A estas tablas aadimos las tablas ALBARANES y CLIENTES, creadas anteriormente. Para ello hacemos doble clic con el botn izquierdo del ratn sobre los iconos que aparecen en el rea Tablas no usadas, situada en la parte inferior izquierda ( ). Dicho panel muestra las tablas del proyecto que no estn siendo utilizadas en el Esquema de tablas actual. Al hacer doble clic aparecern las tablas ALBARANES y CLIENTES en el esquema de tablas Esquema ventas, sien- do su diseo el siguiente: En la tabla FAMILIAS guardaremos los distintos tipos o familias de artculos (stos presentan una estructura arbolada, por ejemplo: tornillos de hierro de mtrica 6, tornillos de hierro de mtrica 10, tornillos de aluminio de mtrica 6, tornillos de aluminio de mtrica 10, etc.). Para cada pareja cliente - artculo aplicaremos un descuento distinto, de modo que entre FAMILIAS y CLIENTES hay un doble plural que resolvemos mediante la tabla histrica DESCUENTOS. CLIENTES ser maestro de ALBARANES, mientras que FAMILIAS lo ser de ARTCULOS. Entre ALBARANES y ARTICULOS tenemos un doble plural que resolvemos aprovechando la tabla histrica LINEAS. Ahora aadiremos un puntero indirecto que enlace LINEAS y DESCUEN- TOS, tablas que se relacionan por los brazos LNEAS/ALBARANES/CLIEN- TES/DESCUENTOS y LNEAS/ARTCULOS/FAMILIAS/DESCUENTOS. Creamos el campo PUNT-DTOS en la tabla LINEAS, enlazado a tabla de da- tos indirecta y lo resolvemos. Seguidamente aadimos el campo PORC- DTO en la tabla DESCUENTOS (numrico de longitud 2, con 2 decimales) y en la tabla LINEAS el campo PORC-DTO (Porcentaje de descuento, num- rico de longitud 2, con 2 decimales y con signo, y que tiene como conteni- do inicial el campo PORC-DTO de la tabla DESCUENTOS obtenido a travs del enlace indirecto). Tambin creamos una actualizacin desde LINEAS a la tabla DESCUENTOS que, utilizando el campo enlazado PUNT-DTOS de la tabla LINEAS, pasa el valor del campo PORC-DTO de la lnea al PORC-DTO del descuento. Ahora crearemos otro sub - esquema: Esquema Almacenes, en el que de- claramos las tablas ALMACENES y EXISTENCIAS y aadimos las tablas AL- BARANES, LNEAS y ARTCULOS (que ya existan). Tambin hemos de es- tablecer un enlace indirecto desde la tabla LINEAS a la tabla EXISTENCIAS. 08 Desarrollo completo de una aplicacin 124 125 VELAZQUEZ VISUAL Ahora creamos el Esquema Tarifas, en el que mantenemos las tablas del Esquema ventas, incluimos la tabla CLIENTES y aadimos las tablas TARI- FAS y TARIFAS DE VENTA: Entre las tablas TARIFAS y ARTICULOS hay un doble plural, que resolvemos mediante la tabla TARIFAS DE VENTA, adems CLIENTES ser histrica de TARIFAS. Creamos tambin un enlace indirecto entre LINEAS y TARIFAS DE VENTA, para lo cual en TARIFAS DE VENTA modificamos uno de sus ndices (TARI- FAS o ARTICULOS), declarndolo de clave nica y aadindole el campo contrario: Ahora, en la tabla LINEAS, creamos el campo PUNT-TARIFAS-VTA que tie- ne las siguientes propiedades: Resolvemos el enlace: 08 Desarrollo completo de una aplicacin 126 127 VELAZQUEZ VISUAL De esta manera tenemos definido en enlace indirecto. Al ser virtual Velz- quez lo representa con un color gris oscuro. Lo hemos definido virtual ya que no es necesario permanentemente (es una lectura puntual). El aspecto final que tiene el esquema de tablas es el siguiente: 8.4 El almacn de objetos Esta utilidad nos ahorrar mucho tiempo en la creacin de nuestros pro- yectos, en tareas tales como la creacin de rejillas, formularios, mens, etc., e incluso tablas de datos y variables globales. El almacn es una carpeta que se encuentra en el directorio del progra- ma de Velzquez Visual y que contiene una serie de proyectos que se po- drn utilizar en cualquier aplicacin que nosotros creemos, y donde po- dremos guardar los nuestros para volver a usarlos. El almacn se en- cuentra situado en c:\Archivos de Programa\Atica\Velazquez\program\Al- macen, donde podemos aadir nuestros mapas o crear nuevas carpetas para ellos. Si cambiamos la ubicacin del almacn o al abrirlo da un mensaje de aviso de que no se encuentra, ejecutaremos la opcin Ver/Personalizar y en la pestaa Entorno indicaremos la senda donde est ubicada la carpeta. Para acceder a un mapa del Almacn, pulsaremos el botn Almacn de Objetos (F8). 08 Desarrollo completo de una aplicacin Almacn de Objetos 128 129 VELAZQUEZ VISUAL Una vez pulsado el botn, se abrir un cuadro de dilogo donde se pre- sentar la lista de mapas disponibles en el almacn. Seleccionaremos el que queramos incluir y pulsaremos el botn Importar. Si el mapa seleccio- nado del almacn no tiene objetos asociados a tablas (por ejemplo un ma- pa que nicamente contiene dibujos) los objetos sern importados en el mapa abierto en el editor. En caso contrario se presentar un cuadro de di- logo en cuyo panel izquierdo se mostrarn las tablas de datos del almacn y en el derecho las tablas de datos del proyecto actual. Podremos realizar las siguientes operaciones: Importar: importaremos tablas del proyecto seleccionado del almacn al proyecto actual, con sus correspondientes objetos visuales (rejillas, formu- larios, mens, informes, etc.). Para ello seleccionaremos la tabla de datos a importar del panel izquierdo y pulsaremos el botn Importar, de modo que la tabla, junto con sus objetos visuales, se incorporar a nuestro proyecto. Asignar: asignaremos una tabla de datos del proyecto seleccionado del al- macn a una tabla de datos del proyecto actual. De este modo, se crearn en el proyecto actual todos los objetos visuales definidos para la tabla del almacn, realizndose una metamorfosis al vuelo. Con la metamorfosis se reasocian los objetos a la tabla de datos que se ha asignado del proyecto actual. Para ello seleccionaremos la tabla del almacn en el panel izquier- do, seleccionamos la tabla a la que la asignaremos en el panel derecho, y pulsaremos el botn Asignar. Si queremos desactivar una asignacin, la marcamos y pulsamos el botn Liberar. Si el nombre de una tabla de las del proyecto seleccionado del almacn coincide con el nombre de una tabla del proyecto actual, sta es asignada automticamente por el programa. Lo mismo suceder con los campos que coincidan en ambas. Campos: podremos asignar e importar campos de una tabla del Almacn a la tabla de destino. Para ello, seleccionamos la tabla del proyecto del al- macn del panel izquierdo y la de destino del panel derecho, pulsamos el botn Campose importamos a la tabla de destino y asignamos los cam- pos que deseemos de la de origen. Tendremos en el cuadro de dilogo informacin de cada una de las tablas. En la parte izquierda se mostrarn todas las tablas del proyecto del alma- cn, el modo de incorporacin al proyecto (asignacin o importacin), y las tablas a las que se ha asignado cada tabla del proyecto del almacn. En el panel derecho se mostrarn todas las tablas del proyecto actual que no se hayan asignado a ninguna del proyecto del almacn. Una vez asignadas las tablas o marcadas para importar, pulsaremos el botn Finalizar para que se incorporen al proyecto tanto las tablas impor- tadas como los objetos visuales, tanto de las asignadas como de las im- portadas. Si el proyecto tuviese variables globales definidas, stas tambin sern im- portadas en el proyecto actual. La verdadera utilidad del almacn es que nos permite crear nuestros propios proyectos para incluirlos en l, por ejemplo, si desarrollamos el mdulo de ventas en una gestin comercial y lo incorporamos al alma- cn, para generar el mdulo de compras, que en muchos casos es prcticamente igual, bastar con pulsar el botn de Almacn o la tecla F8 y asignar a las tablas de ventas su correspondencia en compras (Clientes -> Proveedores, Pedidos de venta -> Pedidos de compra, etc.). De este modo tendremos generado en pocos segundos el mdu- lo de compras. Todos los objetos de una tabla del proyecto del almacn asignada a una ta- bla del proyecto actual se metamorfosearn, es decir, aparte de crearse to- dos los objetos asignados a la tabla de destino, incluso sus identificadores y nombres donde apareca el nombre de la tabla del almacn sern modifi- cados por los de la tabla asignada. 08 Desarrollo completo de una aplicacin 130 131 VELAZQUEZ VISUAL Si queremos incluir nuevos proyectos en el almacn de objetos para adap- tarlos a nuestras necesidades tendremos que crear un proyecto de datos con el editor de Velzquez y guardarlo en la carpeta almacn, que se en- cuentra dentro de la carpeta del programa. Los proyectos se crean como cualquier otro proyecto de Velzquez Visual en el Editor de Proyectos. En ellos incluiremos las tablas de datos y los ob- jetos visuales que creamos necesarios. Si queremos incluir algunos objetos visuales (como por ejemplo los dibujos de los botones de alta, ver y localizar) o variables globales que puedan ser comunes a otros proyectos, los incluiremos en una carpeta cuyo nombre comience por el signo $, por ejemplo: $Comunes, de esta forma, si inclui- mos alguno de los proyectos del almacn en un proyecto que estemos creando, Velzquez Visual comprobar si los objetos o variables globales de dicha carpeta ya los contiene nuestra aplicacin; si es as, no los incluir, en el caso de no contenerlos, los importar. Ejemplo: uso del Almacn de Objetos Primero expongamos qu es lo que queremos hacer en este ejemplo: Diseamos una aplicacin en Velzquez que nos permita llevar el registro de nuestros clientes. sta va a contar slo con una tabla (CLIENTES) y algunos objetos (rejillas, formularios, bsquedas, etc.). Guardamos el proyecto en el almacn de objetos. En este punto queremos disear una aplicacin para llevar el registro de nues- tros distribuidores. Cuando slo hemos creado una tabla (DISTRIBUIDORES) nos damos cuenta de que esta aplicacin es idntica a la de clientes, slo que donde antes deca clientes, ahora tiene que decir distribuidores. En el almacn, aprovecharemos el mapa correspondiente a la aplicacin de clientes y asignaremos la tabla CLIENTES a DISTRIBUIDORES. De este mo- do podemos aprovechar todos los objetos que ya tenamos creados. El almacn de objetos es una utilidad que nos ahorrar mucho tiempo en el desarrollo de aplicaciones. Por lo tanto, un almacn bien estructurado es dar un valor aadido a la herramienta. El almacn es una carpeta que se encuentra en el directorio del programa de Velzquez (C:\Archivos de programa\Atica\Velzquez\Program) y que contiene una serie de proyectos con todos los objetos incluidos en los mis- mos, que se podrn utilizar en cualquier aplicacin que creemos. Para ello, slo tendremos que pulsar el botn . Con Velzquez ya vienen incluidos unos cuantos proyectos en el almacn, pero podremos crear los que que- ramos e incluirlos. Adems, podremos especificar un directorio diferente para ubicar el almacn. En caso de cambiarse o si al pulsar el botn co- rrespondiente da un mensaje de aviso de que no se encuentra, hemos de Debemos de tener cuidado con los nombres e identificadores que ponemos a las tablas y objetos visuales, ya que sern los que permitan la metamorfosis al vuelo. As, si tenemos una tabla que llamamos MARCAS, a la que asignamos una tabla del almacn FAMILIAS, all donde aparezca familias o el singular familia, tanto en el nombre como en el identificador, ser sustituido por marcas o marca, respectivamente, con lo que los nuevos objetos y tablas quedarn asignados correctamente. ADVERTENCIA e Almacn de objetos ejecutar la opcin Ver/Personalizar y en la pestaa Entorno indicamos la senda (path) donde est ubicada esta carpeta. Como ya hemos indicado, lo primero es disear el mapa correspondiente a la aplicacin de clientes. ste va a contar con una sola tabla, CLIENTES, de tipo maestro normal con clave numrica y que constar de los campos Nombre, Telfono, Fax, Email y Observaciones. Tambin hemos de crear los siguientes objetos visuales: una rejilla con los campos CDIGO y NOMBRE del cliente, formulario de altas, modificacio- nes y bajas, una bsqueda ordenada alfabticamente (por el ndice NOM- BRE) de toda la tabla, una bsqueda por palabras, una bsqueda por tro- zos de palabras y un localizador de CLIENTES. 08 Desarrollo completo de una aplicacin e 132 133 VELAZQUEZ VISUAL Por ltimo, para especificar las propiedades del proyecto ejecutamos la op- cin Edicin/Propiedades proyecto, o pulsamos el botn de la barra de herramientas y en el parmetro Nombre del Proyecto escribimos el nombre, por ejemplo Clientes (nombre descriptivo por el que reconoceremos el mapa creado cuando utilicemos el almacn de objetos en cualquiera de nuestras aplicaciones). Llegados a este punto, guardamos ya el proyecto en disco, para lo cual ejecutamos la opcin Archivo/Guardar. Seleccionamos en la ventana Guardar la carpeta Almacn que, como ya hemos dicho antes, se en- cuentra en el directorio del programa Velzquez y como nombre especifi- camos Clientes. Llegados a este punto decidimos disear la aplicacin que lleve el registro de los distribuidores. Vamos a crear un nuevo proyecto con una nica tabla: DISTRIBUIDORES (maestra con clave numrica). Pulsamos el botn y dentro del almacn encontraremos el mapa del proyecto Clientes que habamos guardado con anterioridad. Pinchando en el mapa del proyecto Clientes nos saldr la ventana Asig- nacion de tablas. En el panel izquierdo de la ventana aparecen las tablas co- rrespondientes al proyecto que acabamos de abrir, mientras que en el de- recho estn las tablas del proyecto actual. e Propiedades del proyecto Almacn de objetos Con el almacn podemos importar la tabla Clientes, lo que ocasiona traer directamente a nuestro proyecto la tabla y todos sus objetos visuales. Para ello seleccionamos la tabla CLIENTES en la ventana izquierda del cuadro de dilogo del almacn y pinchamos en el botn Importar. Posteriormente pin- chamos en Finalizar y veremos cmo Velzquez ha trado a nuestro mapa la tabla CLIENTES y todos sus objetos visuales. Si el nombre de una tabla de las del proyecto seleccionado del almacn coincide con el nombre de una tabla del proyecto actual, sta es asignada automticamente por el programa. Lo mismo suceder con los campos que coincidan en ambas. De hecho, ahora que ya hemos importado la tabla CLIENTES a nuestro proyecto, si volvemos a pulsar el botn de almacn de objetos , la tabla CLIENTES del mismo y la de nuestro proyecto, apare- cern asignadas automticamente. 08 Desarrollo completo de una aplicacin e 134 135 VELAZQUEZ VISUAL Pero volvamos a nuestro proyecto original en el que slo tenamos la tabla DISTRIBUIDORES. Queremos asignar la tabla CLIENTES a nuestra tabla DISTRIBUIDORES, para ello pinchamos en el botn , seleccionamos la tabla CLIENTES en la ventana izquierda, a continuacin seleccionamos la tabla DISTRIBUIDORES en la ventana derecha y pinchamos en el botn Asignar. Ahora pulsamos el botn Campos y podremos importar los campos de la tabla CLIENTES que queremos en nuestra tabla DISTRIBUIDORES. Hemos de notar cmo los campos CODIGO y NOMBRE son asignados automti- camente, puesto que ambos ya existen en los dos proyectos. e Almacn de objetos En todo momento, tendremos informacin en el cuadro de dilogo acerca de cada una de las tablas del proyecto del almacn, el modo de incorpora- cin al proyecto (asignacin o importacin), y la tabla a la que se ha asig- nado cada tabla del proyecto del almacn. En el panel derecho se mostra- rn todas las tablas del proyecto actual que no se han asignado a ninguna del proyecto del almacn. Si queremos deshacer la asignacin, la marcamos y pulsamos el botn Li- berar (la tabla DISTRIBUIDORES aparecer de nuevo en el panel derecho). Una vez asignadas las tablas y sus campos, pulsamos el botn Salir y a continuacin el de Finalizar, para que los campos seleccionados y todos los objetos visuales de la tabla CLIENTES del almacn se incorporen a la tabla DISTRIBUIDORES de nuestro proyecto. Observemos adems cmo todos los identificadores y nombres de los ob- jetos visuales han sido metamorfoseados; es decir, donde antes apareca el nombre de la tabla del almacn (CLIENTES), ahora aparece el de la tabla a la que han sido asignados (DISTRIBUIDORES). Por ejemplo: la rejilla CLIENTES ahora ha pasado a llamarse DISTRIBUIDORES; la bsqueda CLIENTES-ALFA se llama ahora DISTRIBUIDORES-ALFA, y as sucesiva- mente con cada uno de ellos. 08 Desarrollo completo de una aplicacin e 136 137 VELAZQUEZ VISUAL Otro detalle: si el proyecto tiene variables globales definidas, stas tambin sern importadas en el proyecto actual. Resumen En el almacn guardamos proyectos de Velzquez Visual que podremos aprovechar en aplicaciones posteriores. Esta utilidad nos ahorrar mucho tiempo en la creacin de rejillas, formularios, mens, etc., e incluso tablas de datos y variables globales. Podemos importar o asignar los objetos. En el primer caso incorporamos a nuestro proyecto las tablas, junto con sus objetos visuales, del proyecto se- leccionado en el almacn. En el segundo caso se produce una metamorfo- sis en vuelo: se crean en el proyecto actual los objetos visuales definidos para la tabla del almacn, adaptndose al nuevo proyecto. 8.5 Ms objetos visuales 8.5.1. La lupa Con la lupa creamos, en el Editor de Proyectos, condiciones de filtrado de listas para que puedan ser ejecutadas directamente por el usuario final. Al seleccionar este objeto de la Galera de objetos se abrir el cuadro de propiedades de la lupa: Sus parmetros son: Nombre: nombre de la opcin de filtrado. ste ser el que el programa uti- lice para visualizarla como opcin en el men de contexto de listas. e Lupa Privada: si activamos esta casilla de verificacin, la lupa de filtrado no apa- recer en el men de contexto de listas, sino que tendr que ser llamada especficamente por un proceso, un botn de la barra de herramientas, etc., pero no aparecer por defecto. Tabla de datos: identificador de la tabla de datos sobre la que va a actuar la lupa. Formulario: si queremos que sea el usuario el que pueda establecer los pa- rmetros del listado, debemos especificar aqu cul ser el formulario para introducir los parmetros de la lupa, teniendo en cuenta que el tipo de for- mulario ha de ser especial para bsquedas. Si no queremos que utilice un formulario seleccione la opcin No pedir formulario. Frmula Filtro: expresin frmula del filtrado. Para su composicin, pode- mos ayudarnos del Asistente para la edicin de frmulas, pulsando el botn correspondiente. Las lupas pueden ser ejecutadas o bien desde un botn de una barra de he- rramientas que hayamos creado, o bien, desde el men de contexto de lis- tas que aparece pulsando el botn derecho del ratn sobre una lista. En di- cho men aparecern todas aquellas lupas que no hayamos definido como privadas para la tabla de datos de la lista. Ejemplo: Lupa Supongamos una aplicacin de gestin para un videoclub en la que nece- sitamos filtrar las pelculas por el tipo de vdeo (VHS, DVD) para ello va- mos a usar una lupa. Asociamos lupa con filtrado de datos, por lo tanto, si queremos filtrar datos tendremos que tener una bsqueda previa para esos datos. Nosotros vamos a crear una lupa, que se encargar de filtrar los datos segn tipo de vdeo (VHS, DVD, etc.); para ello lo primero que vamos a hacer es una bsqueda por cdigo con la que obtener todos los registros que tenemos en la tabla VIDEOS. La llamaremos VIDEOS-TODOS. Pre- viamente hemos creado una rejilla, TODOS-VIDEOS, con todos los cam- pos, para mostrar todos esos registros. La asociaremos a la bsqueda VIDEOS-TODOS. 08 Desarrollo completo de una aplicacin e 138 139 VELAZQUEZ VISUAL Una vez creadas la bsqueda y su rejilla correspondiente, crearemos la lu- pa, pero nuestra lupa tendr asociado un formulario de bsqueda para in- dicarle el tipo por el que debe filtrar. e Dicho formulario slo llevar un campo, el cual estar asociado a una va- riable global en memoria, que llamaremos Formato, del mismo tipo que el campo Tipo (de vdeo) de la tabla VIDEOS (un Alfa 40). A continuacin creamos el formulario asociado a la lupa, que llamaremos FILTRA-VIDEOS. 08 Desarrollo completo de una aplicacin e 140 141 VELAZQUEZ VISUAL Hemos de asociar el control de edicin del formulario a la variable Formato que hemos creado. Por ltimo creamos la lupa, a la que llamamos TIPO-DE-VIDEOS, asocin- dole el formulario de bsqueda FILTRA-VIDEOS. Si activamos la casilla de verificacin Privada, slo ser utilizada para bsquedas de la tabla VIDEOS. e En Frmula Filtro de la ventana de propiedades de la lupa especificamos que busque aquellos registros cuyo campo Tipo (de vdeo) coincida con el con- tenido de la variable FORMATO, la cual tomar valor en el formulario de bs- queda. Para ello podemos hacer uso del Asistente de edicin de frmulas. Ahora slo nos quedar hacer la llamada desde un MENU, usando la pisto- la BUSQUEDA y asocindole la bsqueda que hemos creado. Si como frmula filtro usamos el atributo :0 (dos puntos, cero) para comparar un campo, podremos filtrar por ese campo usando un formulario asociado a esa tabla, y no tendremos la necesidad de usar variables, permitindonos ade- ms aprovechar las caractersticas del objeto formulario (localizadores, etc.). %IDENTIFICADOR-CAMPO%=:0%IDENTIFICADOR-CAMPO% Ejemplo: Filtrar por un maestro Tenemos una tabla de ALBARANES histrica de CLIENTES. Queremos una lupa que filtre albaranes por el campo CLIENTE que escojamos en un for- mulario. En este formulario usamos dos campos edit con estilos Botones Arriba/abajo y Autocompletar y botn que nos lance un localizador, y lo aso- ciamos a la lupa, a la que adems damos un nombre y lo asociamos a la ta- bla de datos ALBARANES. Como frmula filtro ponemos lo siguiente: %CLIENTE% =:0%CLIENTE% Al filtrar, dejar en la rejilla aquellos albaranes que tengan como cliente el que hayamos elegido en el formulario. 8.5.2. Encarpetado de histrico Los encarpetados de histricos se utilizan en los formularios para ver la in- formacin de forma clasificada dentro de una rejilla de histrico segn los va- lores de un determinado campo de la tabla de datos (campo subclasificador). Es necesario que el campo subclasificador sea la segunda parte (o compo- nente) del ndice por el que se accede a los registros de la tabla histrica. En el cuadro de dilogo Propiedades del encarpetado se establecen las si- guientes propiedades: Descripcin: ser la que aparezca al usarlo. Tabla de datos maestra: la tabla de datos maestra del histrico. Histrico: es el histrico a encarpetar, pudiendo elegir de entre los que po- damos tener creados, segn el ndice. 08 Desarrollo completo de una aplicacin e e Encarpetado de histrico 142 143 VELAZQUEZ VISUAL Si se trata de un encarpetado automtico es Velzquez Visual quien lo crea, tomando los valores del campo subclasificador. Quedar ms claro con un ejemplo: supongamos que queremos ver los libros encarpetados por mate- rias en una ficha de editoriales. El usuario vera una rejilla con una Lista des- plegable en la parte superior donde estaran todas las materias de todos los libros de la editorial. Para crear este encarpetado habra que aadirle al n- dice EDITORIALES de la tabla LIBROS el campo MATERIAS. Al crear el ob- jeto, en su definicin, especificaremos como maestro EDITORIALES y co- mo histrico Libros -> Editoriales. Automticamente, se mostrar como campo subclasificador MATERIAS. Activamos la casilla Encarpetado auto- mtico. En el formulario de edicin de EDITORIALES creamos un control de rejilla de histrico, activamos la casilla Encarpetado y seleccionamos el en- carpetado que hemos creado. En caso de no ser automtico, o sea, encarpetado manual, el encarpetado ser creado por el usuario de la aplicacin y ser guardado en el disco pa- ra su posterior uso. Por ejemplo, se quieren ver las facturas de venta en- carpetadas por fechas en la ficha de artculos. El usuario vera una rejilla con una Lista desplegable en la parte superior y un botn titulado Carpetas don- de podra establecer los perodos adecuados para encarpetar las facturas. Para crear este encarpetado habr que aadirle al ndice ARTICULOS de la tabla FACTURAS el campo FECHA. Al crear el encarpetado, en su defini- cin, especificamos como maestro ARTICULOS y como histrico Facturas -> Artculos. En el formulario de ARTICULOS crearemos un control de reji- lla de histrico, activamos la casilla Encarpetado y seleccionamos el encar- petado de facturas por fecha. En tiempo de ejecucin, Velzquez Visual nos lanza un formulario en el que establecemos los lmites del perodo de tiem- po para el encarpetado. Como norma general, si el campo subclasificador apunta a un maestro, lo normal es utilizar encarpetado automtico. Velzquez Visual se encarga de averiguar la lista de posibles valores del campo y de realizar el encarpeta- do. Si el campo subclasificador no apunta a maestro alguno, lo normal es utilizar encarpetado manual y dejar que el usuario establezca los valores de encarpetado. Por ejemplo, si tenemos una tabla de Tareas enlazada a maestro a dos ta- blas, una de Clientes y otra de Tipos de Tareas, y queremos presentar en un formulario las Tareas de un Cliente (es decir, los histricos de una ficha), po- demos con un encarpetado histrico elegir de qu Tipo de Tarea sern las Tareas que mostremos. Tipos de Tareas sera el campo subclasificador, y el encarpetado sera automtico, pudiendo elegir de qu tipo ser la tarea de una lista que se genera en ejecucin de forma automtica. Si queremos, sin embargo, mostrar las Tareas segn otro campo que no es- t enlazado como por ejemplo la Fecha de la Tarea, no declararemos el en- carpetado como automtico y dejaremos que sta sea elegida por el usua- rio en ejecucin, pudiendo incluso buscar entre lmites. Ejemplo: Encarpetado de Histrico Automtico Mediante este ejemplo veremos cmo utilizar los encarpetados de histrico de Velzquez Visual. Los encarpetados de histricos se utilizan en los formularios para ver la in- formacin de forma clasificada dentro de una rejilla. La clasificacin se rea- liza encarpetando los registros segn los valores de un determinado cam- po de la tabla de datos al que llamamos campo subclasificador. Para que pueda encarpetarse la lista de registros, el campo subclasificador debe ser el segundo componente del ndice por el que se accede a los registros de la tabla histrica. Como norma general, si el campo subclasificador apunta a un maestro, lo normal es utilizar encarpetado automtico. Velzquez Visual se encarga de averiguar la lista de posibles valores del campo y de realizar el encarpeta- do. Si el campo subclasificador no apunta a maestro alguno, lo normal es utilizar encarpetado manual y dejar que el usuario establezca los valores de encarpetado. Para este ejemplo se ha creado un mapa de datos con la siguiente es- tructura: 08 Desarrollo completo de una aplicacin e 144 145 VELAZQUEZ VISUAL Ahora vamos a crear los encarpetados: pretendemos incluir en el formula- rio de modificacin de MARCAS una rejilla de histrico de ARTICULOS, en la que se pueda visualizar los registros de la misma segn la familia a la que pertenezcan, de modo que el campo subclasificador ser Familias. Este campo est enlazado a una tabla de datos maestra, as que en este caso el encarpetado ser automtico. Para realizar el encarpetado automtico seguimos los siguientes pasos: Modificamos el ndice MARCAS de la tabla ARTICULOS para aadir el cam- po subclasificador, que ser FAMILIAS, como segundo componente. Seleccionamos el objeto Encarpetado de Histrico de la Galera. Sus pro- piedades son: Maestro: MARCAS Histrico: ARTICULOS -> MARCA e Campo subclasificador: Familias (lo detecta el programa automticamente). Encarpetado automtico: Activado A este encarpetado lo hemos llamado ARTICULOS-MARCA-FAMILIA. En el formulario de modificacin de MARCAS incluiremos un control de Re- jilla de histrico. Sus propiedades son: Encarpetado: Activado Histrico/Carpetas: ARTICULOS-MARCA-FAMILIA Rejilla: ARTICULOS 08 Desarrollo completo de una aplicacin e 146 147 VELAZQUEZ VISUAL En tiempo de ejecucin, al editar un registro de la tabla MARCAS, se ver en la rejilla de ARTICULOS todos los artculos que se hayan dado de alta de dicha marca. Al abrir el combo box que se encuentra encima de la rejilla, se mostrar una lista que contendr todas las familias de los artculos dados de alta de dicha marca, as como una opcin para ver la lista completa de los artculos de la marca. Cada vez que se seleccione una familia de dicho combo box, en la rejilla slo se visualizarn aquellos artculos de la marca que pertenezcan a dicha familia. Ejemplo: Encarpetado de Histrico Manual Mediante este ejemplo veremos cmo utilizar los encarpetados de histrico de Velzquez Visual del tipo encarpetado manual. En este caso vamos a encarpetar los albaranes de un cliente por el campo Fecha del albarn; y para ello, el ndice Cliente de la tabla ALBARANES de- ber tener como segunda parte el campo Fecha. Se ha creado un mapa con la siguiente estructura: Ahora vamos a crear el Encarpetado de Histrico Manual: Incluimos, en el formulario de modificaciones de CLIENTES, una rejilla de histrico de ALBARANES DE VENTAS que permita visualizar los registros e e de la misma, clasificados segn la fecha de emisin. De esto se deduce que el campo subclasificador ser la FECHA del albarn. Modificamos el ndice Clientes de la tabla ALBARANES DE VENTAS para aadir el campo subclasificador, que ser Fecha. Este ndice es el que se utiliza para generar el enlace histrico de CLIENTES a ALBARANES. Creamos el objeto Encarpetado de Histrico de la Galera de Objetos. Sus propiedades son: Maestro: CLIENTES Histrico: VALBARANES -> CLIENTES (como ya hemos dicho, aqu es don- de se utiliza el ndice Fecha para resolver el enlace histrico y que es el compuesto por cliente + fecha). Campo subclasificador: Fecha (lo detecta el programa automticamente). Encarpetado automtico: Desactivado. 08 Desarrollo completo de una aplicacin e 148 149 VELAZQUEZ VISUAL A este encarpetado lo hemos llamado ENCARPETADO-VALBARANES. En el formulario de modificacin de CLIENTES incluiremos un control de Rejilla de histrico. Sus propiedades son: Encarpetado: Activado Histrico: ENCARPETADO-VALBARANES Rejilla: VALBARANES-SIN-CLIENTE En tiempo de ejecucin, al editar un registro de la tabla CLIENTES, se ver en la rejilla ALBARANES VENTAS el listado completo de todos los albara- nes del cliente editado. Junto al combo box que aparece encima de la reji- lla se incluye un botn, llamado Carpetas, que ser el que permita crear y modificar las carpetas al usuario. e Para crear una carpeta tendremos que, en ejecucin, pulsar el botn men- cionado anteriormente, pasando a la ventana de creacin de carpetas. Por ejemplo: queremos crear una con todos los albaranes de todos los meses del 2000. Tendramos que pulsar el botn Aadir y rellenar los siguien- tes controles: Ttulo: Enero 2000 Lmites: Fecha Inicial: 01-Ene-2000 Final: 31-Ene-2000 Tras aceptar esta entrada, en el combo box ya tendr Lista Completa de Al- baranes de Ventas y Enero 2000. Tendremos que repetir la operacin con el resto de los meses. De esta ma- nera podremos ver, de un Cliente, aquellos albaranes que se incluyan en las fechas dadas, o la lista completa. Con los botones podemos Aadir, Insertar, Eliminar, Orde- nar arriba y abajo y Editar los distintos encarpetados, y si queremos modi- ficar una carpeta, simplemente habr que seleccionarla en el combo box y pulsar el botn Propiedades. 8.5.3. Cesta de la compra ste es uno de los objetos ms potentes y sin embargo muy sencillo de crear. Se utiliza, en tiempo de ejecucin, para guardar una serie de registros de una tabla de datos para su posterior uso en otras partes de la aplicacin. El contenido de las cestas se almacena en memoria y, por tanto, se borra- r una vez finalice la ejecucin del mismo. 08 Desarrollo completo de una aplicacin e Aadir Propiedades Eliminar Subir Bajar 150 151 VELAZQUEZ VISUAL Para crear una cesta habr que seleccionar el icono de la Galera de Ob- jetos, tras lo cual se presentar el cuadro de propiedades. En la ventana he- mos de especificar la tabla de datos a la que se va a asociar, la rejilla con que presentaremos su contenido (los registros que vamos guardando) y si queremos que sea privada o no. Podemos crear tantas cestas como deseemos para una misma tabla. Por ejemplo, en una gestin de libreras podemos crear una para incluir libros pendientes, otra para los ms vendidos, etc. Si una cesta est definida como privada, el usuario no tendr acceso a ella. Se utilizan cestas privadas, por ejemplo, en procesos. Por ejemplo, podemos crear una cesta para una tabla de datos de Artcu- los, de modo que el usuario pueda introducir en ella los artculos que vaya a vender. Posteriormente, en un formulario de altas de Tickets de venta creamos un botn que dispare una instruccin de proceso para Localizar en cesta de la compra, con lo cual, en ejecucin, el usuario obtendr una reji- lla que contenga slo los artculos metidos en la cesta, de los que quere- mos los tickets de venta. Ejemplo: Cesta de la compra Tenemos una aplicacin de compra de libros. El esquema de tablas est compuesto por LIBROS, cuyo maestro es AUTORES, que compondrn el artculo a vender, y tres tablas ms: LINEAS con su maestra ALBARANES, que a su vez es histrica de CLIENTES. e Cesta de la compra Adems de rejillas, formularios, etc., creamos una cesta de la compra para libros. Para ello vamos a la Galera de Objetos pulsando el botn y es- cogemos Cesta de la Compra. En el cuadro de dilogo que nos apare- ce, los datos que debemos cumplimentar son muy pocos, simplemente el nombre que le daremos a la cesta (Cesta de Libros), la tabla de datos a la que est asignada (LIBROS) y la rejilla que usaremos para presentar los da- tos, que de nuevo ser la de LIBROS. Aceptamos y ponemos como identi- ficador LIBROS. Ahora, en ejecucin, podemos ir haciendo bsquedas de libros, e ir ano- tando en la Cesta de Libros aquellos que nos interesen: 08 Desarrollo completo de una aplicacin e Galera de objetos Cesta de la Compra 152 153 VELAZQUEZ VISUAL Por ejemplo, buscamos por trozos de palabras del nombre un autor, y ano- tamos en la cesta los que nos interesen. Para ello pulsamos con el botn de la derecha del ratn sobre la rejilla, mostrndonos el men de contexto. Ah tenemos la opcin de Anotar en cesta: elemento seleccionado F2, Ano- tar en cesta: Todos (Shft+F2), y con Abrir la cesta (Ctrl+F2) podemos ir vien- do qu libros hemos incluido. Elegimos, por ejemplo, Anotar en cesta: elemento seleccionado F2, salimos y realizamos otra bsqueda, esta vez por Trozos de palabras del ttulo. e Anotamos en la Cesta de Libros aquellos que queramos, o todos, o los se- leccionados. En este caso nos sale uno solo, y lo anotamos en la cesta. Si ahora miramos lo que hay en la cesta... 08 Desarrollo completo de una aplicacin e 154 155 VELAZQUEZ VISUAL ... veremos que estn los dos libros que hasta ahora hemos introducido. Po- demos llevar los registros que tenemos en la cesta a la lista de la rejilla en que result la bsqueda. Para hacer esto tenemos dos maneras: o bien Mover todos los elementos de la lista o el seleccionado borrndolos de la cesta, o bien con los botones Selec. permaneciendo en sta. Con el botn de la derecha podemos llamar tambin al men de contexto y Traer la cesta completa. De esta manera podemos imprimir todos los registros usando un Informe. Si queremos generar un albarn, podemos tener una opcin de men que lance un proceso que nos lo cree. Para ello creamos un formulario de AL- BARANES, en el que aparezca una rejilla de histrico de LNEAS, y en el que un proceso que nos dio de alta un nuevo albarn haya incluido en sus lneas los libros que incorporamos a la cesta. e Mover todos Mover Seleccionar todos Seleccionar 8.5.4. Hoja de clculo Mediante las hojas de clculo generamos una rejilla de valores, de modo que las filas se crean automticamente cuando, en tiempo de ejecucin, se ana- liza la informacin. A una hoja de clculo se le asocia un nombre Descrip- cin, un Identificador, una Tabla de datos y un Campo generador de filas. Las hojas de clculo trabajan de dos formas: Columnas automticas: las columnas se crean en tiempo de ejecucin de- pendiendo de los diferentes valores que tenga un campo. En este modo he- mos de definir el campo generador de columnas en la Lista desplegable Co- lumnas y la Frmula acumulable para el acumulado de la columna. Columnas no automticas: en este modo la hoja de clculo trabaja con unas columnas fijas definidas por el diseador. Las columnas se definen en el Cuadro de lista Columnas, donde se crean y se borran con los botones Nue- va y Eliminar. Al pulsar el botn Nueva se establece una Etiqueta para la co- lumna, una Frmula condicional donde se introducir una expresin de tipo frmula, que tiene que cumplir el registro en curso para ser utilizado por la hoja, y la Frmula acumulable donde se define la frmula para el acumula- do de la columna. 08 Desarrollo completo de una aplicacin e Hoja de clculo 156 157 VELAZQUEZ VISUAL Las hojas de clculo pueden ser visualizadas en diversos modos grficos: Lneas, Barras verticales, Barras Horizontales, Barras 3Dverticales, 3D Ho- rizontales, Gant vertical, Gant horizontal, Tartas y Rejilla de valores. Para ello el usuario debe pulsar, en ejecucin, el botn derecho del ratn sobre el grfico y obtendr la lista de opciones de visualizacin. Este objeto podemos usarlo en un Formulario de edicin de fichas o un In- forme disponiendo de un control especializado en la visualizacin de hojas de clculo, o como Segunda bala de una opcin de men. Ejemplo: Hoja de clculo con columnas automticas Supongamos un proyecto en el que existen dos tablas maestras, ARTICU- LOS y ALMACENES, y un histrico de ambas que recoge las existencias de artculos en cada almacn al que hemos llamado EXISTENCIAS. Queremos crear una hoja de clculo que presente las existencias que se tiene de ca- da artculo en cada almacn. Al campo de la tabla Existencias que recoge el stock de un artculo en un almacn le damos el identificador STOCK. Puesto que una hoja de clculo se plantea como una serie de filas y co- lumnas, stas seran: Almacn 1 Almacn 2 Almacn 3 Almacn 4 Artculo 1 Artculo 2 Artculo 3
Desde la tabla de Existencias se conoce tanto el Artculo como el Almacn
de un registro, por lo que las columnas de la hoja de clculo sern autom- ticas. Para crear la hoja de clculo seleccionamos en la galera de objetos e el objeto Hoja de Clculo , abrindose la ventana de propiedades, en la que especificamos los parmetros siguientes: Descripcin: Stock de artculos por almacn. Tabla de datos: EXISTENCIAS. Campo generador de filas: ARTCULO. Activamos la propiedad Columnas automticas. En Columnas seleccionamos el campo ALMACENES. Habr que especificar qu campo se ha de acumular en cada columna, s- te ser el Stock, por lo que la frmula a acumular en cada columna ser el campo %STOCK%. Esta hoja de clculo puede ser utilizada como segunda bala de una bs- queda en la tabla de Existencias disparada desde un men. Ejemplo: Hoja de clculo manual Supongamos un proyecto en el que existe una tabla de FACTURAS en la que se incluye el campo Total, encargado de recoger el total de la factura y el campo Fecha de la factura. Esta tabla es histrica de la tabla CLIENTES. Crearemos una hoja de clculo para presentar el total mensual facturado a cada Cliente. En la tabla de facturas se conoce el Cliente de cada factura y la fecha de la fac- tura, pero no se incluye ningn campo que recoja el mes de la misma, por lo que las columnas tendr que crearlas el programador en tiempo de edicin, es decir, las columnas sern manuales. Para crear esta hoja de clculo habr que seleccionar en la galera de objetos el objeto Hoja de Clculo y especificar: Descripcin: Ventas mensuales por cliente. Tabla de datos: FACTURAS. 08 Desarrollo completo de una aplicacin e e Hoja de Clculo 158 159 VELAZQUEZ VISUAL Campo generador de filas: Clientes. Columnas: puesto que las columnas han de ser manuales no activaremos la casilla de columnas automticas. Crearemos una columna para cada mes del ao, obteniendo de la fecha de la factura en qu mes se acumulan los totales. Comenzaremos por la columna correspondiente al mes de enero, para lo cual pulsamos el botn Nueva y especificamos las siguientes pro- piedades: Etiqueta: Enero Frmula condicional: en este parmetro se ha de especificar la frmula que se ha de cumplir para que se acumule el total de la factura en dicha colum- na, es decir, que el mes de la factura sea enero. Para ello la frmula sera: FMes (%FECHA%) = 1 Se utiliza la funcin del asistente de frmulas fMes(fecha), que devuelve el mes de la fecha pasada como parmetro. Frmula acumulable: en este parmetro se ha de especificar el campo que se acumular en esa columna; en este ejemplo, el campo TOTAL. Aceptamos la columna de hoja de clculo que acabamos de crear. A continuacin hemos de crear la columna correspondiente al mes de fe- brero. El proceso ser igual al de creacin de la columna anterior (enero), e variando nicamente la etiqueta de la columna y la frmula condicional. La etiqueta ser Febrero y la frmula ser: FMes (%FECHA%) = 2. Seguimos de esta manera con el resto de columnas para todos los meses del ao. Esta hoja de clculo podemos utilizarla como segunda bala de una opcin de men que dispare como primera bala una bsqueda en la tabla de FAC- TURAS. Para ver una grfica de las ventas hechas en el ao actual, basta con disparar una bsqueda en la tabla de FACTURAS que solamente pre- sente las realizadas el ao en curso. 8.5.5. Base de datos externa ODBC-DAO Velzquez Visual permite que el diseador declare, dentro del proyecto, ba- ses de datos externas a las que puede hacer referencia, tanto para impor- tar como para exportar informacin. Para que Velzquez Visual pueda acceder a la informacin contenida en las bases de datos externas, debe existir un motor de bsqueda que contenga las tablas y consultas. Velzquez Visual ataca la informacin del motor de bsqueda por medio de los dispositivos ODBC (Open DataBase Connecti- vity) y DAO (Data Access Objects). Velzquez Visual es capaz de interpretar la informacin descriptora de ta- blas y consultas del motor de bsqueda, y puede importar datos usando un Tubo de importacin, desde una opcin de men. Tambin es capaz de dar de alta nuevas fichas en las tablas externas me- diante un Tubo de exportacin, desde un proceso. 08 Desarrollo completo de una aplicacin e Base de datos externa ODBC- DAO 160 161 VELAZQUEZ VISUAL Al sealar el icono Base de datos externa ODBC-DAO , Velzquez Visual muestra un cuadro de dilogo para que sealemos el archivo .MDB que la contiene. Al sealarla, Velzquez Visual lee e interpreta toda la informacin guardada en el motor de bsqueda. A partir de ese instante, el diseador puede acceder a las tablas externas para exportar datos y a las consultas para importarlos. Creacin de una tabla de datos igual a una base de datos externa La opcin Objeto/Crear tabla igual a externa permite crear una tabla de da- tos de Velzquez igual una base de datos externa incorporada al proyecto. Para ello hemos de seguir los siguientes pasos: Posicionamos el cursor sobre la base de datos externa a copiar. Ejecutamos la opcin Objeto/Crear tabla igual a externa. Se abrir la ventana Crear nueva tabla interna desde una externa en la que tenemos las siguientes opciones: Nombre plural: especificaremos el nombre plural de la tabla. Nombre singular: el nombre singular de la tabla. No es posible importar datos directamente de una tabla externa, han de importarse de una consulta. ADVERTENCIA Base de datos externa ODBC- DAO Maestro: si activamos esta opcin la tabla que vamos a generar va a ser de tipo maestro normal con clave numrica, si no la activamos la tabla ser de tipo histrico. Campo cdigo: especificaremos, de la lista de campos de la tabla de ori- gen, cul ser el correspondiente al campo Cdigo de la tabla de nuestro proyecto. Esta opcin estar inactiva si no hemos activado la casilla Maestro. Tiene nombre: activaremos esta opcin si la tabla de datos de origen tiene un campo Nombre. Campo nombre: aqu se especifica, de la lista de los campos de la tabla ex- terna, cul es el correspondiente al campo Nombre de la tabla de nuestro proyecto. Estar desactivada si no se ha activado la opcin anterior. ndice alfabtico: para crear el ndice alfabtico del campo Nombre en la nueva tabla. ndice palabras: para crear el ndice por palabras del campo Nombre en la nueva tabla. Una vez aceptado el formulario ya tendremos creada una tabla interna de Velzquez a partir de la base de datos externa seleccionada. Si ahora qui- siramos importar los datos de la base de datos externa a la tabla recin creada, tendramos que hacer uso de los tubos de importacin, que vere- mos ms adelante. Ejemplo: creacin de una tabla de datos igual a una base de datos externa Supongamos un proyecto de Velzquez en el que hemos declarado una ba- se de datos externa, en la que tenemos dos tablas: CLIENTES Y PEDIDOS. 08 Desarrollo completo de una aplicacin Aunque Velzquez Visual nos permite importar el cdigo desde una tabla externa, muchas veces no podemos conocer la integridad de los datos que importamos (cdigos repetidos, falta de cdigos, no congruente con el tipo de cdigo, etc.). Es mejor que el campo cdigo de nuestra tabla sea generado automticamente por Velzquez Visual y que guardemos el cdigo que importamos en otro campo, que podemos usar para buscar los enlaces que tienen los registros. ADVERTENCIA e 162 163 VELAZQUEZ VISUAL Queremos crear una tabla en nuestro proyecto que tenga la misma estruc- tura de campos y tipos de campos que la tabla CLIENTES de la base de da- tos externa (supongamos que hacemos esto para, posteriormente, importar los datos de la tabla CLIENTES de la base de datos externa a la tabla que vamos a crear). Para ello seleccionamos la tabla CLIENTES de la base de datos externa y ejecutamos la opcin de men objetos/crear tabla igual a externa, apare- ciendo la ventana Crear nueva tabla interna desde una externa. Rellenamos las propiedades, indicamos que su nombre ser CLIENTES, que va a ser de tipo maestro (en caso contrario nos creara una tabla de ti- po histrico), que el campo Cdigo de la tabla de nuestro proyecto se co- rresponder con el campo Cdigo de la tabla origen, que la tabla de origen tiene campo Nombre, correspondindose el campo Nombre de la tabla de nuestro proyecto con el campo Nombre de la tabla origen. Tambin le de- cimos que nos cree los ndices alfabtico y por palabras. Si le dijramos que el campo Cdigo de la tabla de nuestro proyecto se co- rresponde con el campo Nombre de la tabla origen, Velzquez creara en la tabla CLIENTES de nuestro proyecto un campo Cdigo con las propieda- des del campo Nombre de la tabla origen (de tipo alfabtico). Aceptamos la ventana anterior y vemos cmo Velzquez ha creado en nuestro proyecto la tabla CLIENTES. e La tabla CLIENTES tiene los mismos campos que la tabla de origen, longi- tud, tipo, etc., as como el ndice por el campo cdigo, por el nombre y por palabras del nombre. 08 Desarrollo completo de una aplicacin e Cuestiones 1. Supongamos que el esquema siguiente es parte de una aplicacin para una agencia de viajes: En la tabla COMPAIAS AEREAS guardamos informacin acerca de la compaa que oferta el vuelo, en VUELOS tenemos informacin acer- ca de los vuelos que oferta la compaa (hora de salida, hora de llega- da, precio, etc.), mientras que en PAISES DE DESTINO se indica el pas al que pertenece la ciudad de destino. Incluir, en un formulario de 164 165 VELAZQUEZ VISUAL Resumen Velzquez Visual cuenta con una serie de objetos gracias a los que podemos trabajar con los datos. stos son: la lupa, el encarpetado de histrico, la ces- ta de la compra, la hoja de clculo y bases de datos externas ODBC-DAO. La lupa : Objeto con el que se pueden establecer condiciones de filtrado en listas. Encarpetado histrico : los encarpetados de histricos se utilizan en los formularios para ver la informacin de forma clasificada dentro de una reji- lla de histrico. Esta clasificacin se realiza encarpetando los registros se- gn los valores de un determinado campo de la tabla de datos al que lla- mamos campo subclasificador. Cesta de la compra : este objeto se utiliza, en tiempo de ejecucin, para guardar una serie de registros de una tabla de datos para su posterior utili- zacin en otras partes del programa. Hoja de clculo : las hojas de clculo generan una rejilla de valores, cren- dose las filas automticamente cuando, en tiempo de ejecucin, se analiza la informacin. Bases de datos externas ODBC-DAO : nos permiten acceder a ficheros de otras bases a travs del enlazador de bases de datos ODBC-DAO. 8.5.6. Dibujo Son objetos que contienen un dibujo. Tales dibujos podrn ser incluidos en distintas partes de un proyecto como son los formularios, los mens de ti- po formulario, mens arbolados e informes. El dibujo no puede ser modificado por el usuario final. ste es el motivo por el que a veces se les denomine dibujos estticos. Los dibujos dinmicos son los dibujos que el usuario incorpora a la aplicacin en tiempo de eje- cucin formando parte de sus datos. Lupa Encarpetado histrico Cesta de la compra Hoja de clculo Base de datos externas ODBC-DAO Dibujo modificacin de COMPAIAS AEREAS, una rejilla de histrico en la que podamos ver los vuelos de la compaa segn el pas de desti- no del vuelo. 2. Crear una cesta de la compra para la tabla VUELOS (de la cuestin anterior), que nos sirva para ir seleccionando todos los vuelos que nos interesen de entre los que oferte la compaa area. 3. Tenemos una aplicacin de cine con unas bsquedas en la que se presentan las pelculas de un cierto director, actor, realizador, etc. Una vez presentada la rejilla con el resultado de la bsqueda, quere- mos ser capaces de discriminar entre pelculas en color, en blanco y negro y mudas. Resolver el problema mediante una lupa. Una vez que se selecciona un objeto de este tipo en la Galera de Objetos, aparece la pantalla de edicin. Debemos obtener entonces el dibujo, para lo que tenemos cuatro maneras: bien crearlo directamente va OLE, bien a travs del portapapeles, bien importar un fichero o bien va Twain (Escner). Importacin de dibujos A travs de OLE: debemos hacer doble clic sobre el rea del editor de di- bujos, abrindose el programa asociado a Mapa de bits (Bitmap, .BMP) pu- diendo realizarlo en l. Una vez terminado salimos del programa (sin nece- sidad de guardar el resultado en un archivo) quedando incrustado en el ob- jeto. Salimos y este dibujo ya puede ser utilizado en la aplicacin. Portapapeles: en el caso del portapapeles, usando la opcin del men Edi- cin/Pegar, tambin podemos importar la imagen. Claro est que el dibujo debe ser previamente copiado desde otra aplicacin. 08 Desarrollo completo de una aplicacin 166 167 VELAZQUEZ VISUAL Una vez ejecutada la opcin se muestra un cuadro de dilogo en el que se ha de seleccionar la forma en que la imagen va a ser guardada en el pro- yecto. Tiene las opciones N de bit de color por pxel: 1 (monocromo), 4 (16 colores), 8 (256 colores), 24 (16,7 millones de colores) y Comprimido. Cuanto mayor sea el nmero de bits de color por pxel, mayor ser la ocupacin de la imagen en disco, por ello es aconsejable que, si inclui- mos dibujos en el proyecto, tratarlos previamente con algn programa de tratamiento de imgenes para guardarlos con una paleta de, al me- nos, 256 colores antes de incorporarlos al proyecto de Velzquez; la di- ferencia de calidad es inapreciable, pero el tamao del proyecto dismi- nuir considerablemente. Adems, si activamos la casilla Comprimido cuando la imagen tenga una paleta de 8 bits (256 colores) o menos, ha- remos que el dibujo ocupe menos espacio en disco sin prdida percep- tible de calidad. Importacin desde archivo: la tercera opcin se ejecuta desde la opcin del men Edicin/Pegar desde. La imagen es importada leyendo el fichero se- leccionado en el cuadro de dilogo Abrir, el cual muestra el contenido de las unidades de disco del sistema o de la red. Los formatos de archivo po- sibles son: Mapa de bits (*.bmp, *.dib), Jpeg (*.jpg, *.jpeg), *.pcx y Targa (*.tga). Va twain: el cuarto mtodo que hay es va twain, de manera que podremos obtener imgenes de un escner, una cmara fotogrfica digital y de cier- tas cmaras de vdeo (para capturar un fotograma). Si tenemos instalados varios, ejecutamos la opcin Archivo/Seleccionar escner para especificar el que vamos a utilizar. Para obtener la imagen ejecutamos la opcin Archi- vo/Digitalizar, y se ejecutar el programa de obtencin de imgenes que tengamos asignado al dispositivo seleccionado. Propiedades del dibujo Una vez obtenida la imagen, si pulsamos la tecla Intro o hacemos doble clic, editaremos el cuadro de propiedades del dibujo, en el que podremos darle una descripcin, activarle o desactivarle la Transparencia, asignar el color de transparencia en el caso de que est activada, y los atributos de la ima- gen: alto, ancho y bits por pxel. 08 Desarrollo completo de una aplicacin Una vez que incluimos un dibujo como objeto de Velzquez a partir de un fichero, ste puede ser borrado del disco, pues ya queda almacenado dentro del proyecto. TRUCO Si queremos que un usuario final de una aplicacin de Velzquez pueda obtener imgenes va twain hemos de ejecutar la opcin Edicin/Seleccionar fuente twain para especificar el dispositivo que va a utilizar; y para obtener la imagen ejecutar la opcin Edicin/Obtener imagen va twain. Adems para controles de campos tipo dibujo de un formulario, el formulario no puede estar definido en modo cuadro de dilogo, slo pueden obtenerse desde formularios en modo vista (a pantalla completa). ADVERTENCIA 168 169 VELAZQUEZ VISUAL Velzquez permite visualizar los dibujos con fondo transparente y para ello habr que utilizar como color de fondo del dibujo uno que no se haya utili- zado en el mismo. Una vez importado a Velzquez, si activamos la casilla Transparencia, a continuacin se ha de especificar el color de fondo de transparencia, apareciendo una ventana con la paleta de colores del siste- ma. As, cuando se utilice dicho dibujo en un formulario no se ver el fondo del mismo. La casilla de Precarga est pensada para la ejecucin de aplicaciones con el Servidor de Aplicaciones de Velzquez Visual, para que los dibujos sean cargados o no en el momento de servir la aplicacin a un Cliente. Si no tie- nen activada la casilla de precarga no sern enviados en el mapa, hacien- do que pese menos y sea ms rpida su ejecucin, siendo enviados los di- bujos restantes en tercer plano, sin ralentizar la transferencia de datos. En el Inspector de objetos por tipo podremos ver la lista de objetos dibujo y si tienen activada la casilla de Precarga o no. Si hacemos doble clic con el botn izquierdo del ratn o seleccionamos la opcin Edicin/Objeto OLE, dicha imagen ser cargada en el programa de edicin de imgenes que tenga el sistema por defecto. Identificadores especiales para dibujos Dibujo ONPASSWORD: si le damos este identificador a un dibujo, Velz- quez lo utilizar para sustituir al que presenta el Ejecutor por defecto en el formulario de peticin de Nombre de Usuario y Palabra Clave. As podemos utilizar nuestro propio logotipo o el de la empresa para la que se desarrolle una aplicacin final. Para una ptima visualizacin del mismo es aconsejable utilizar un dibujo de 48x48 pxeles. Otra forma de convertir un dibujo en ONPASSWORD es seleccionndolo en el panel derecho y ejecutando la opcin Comunes/Convertir en/Icono usua- rios. Si deseamos localizar el dibujo creado con este identificador ejecuta- mos la opcin Comunes/Localizar/Icono usuarios. Es aconsejable utilizar el magenta como color de fondo, pues es un color que raras veces se utiliza. TRUCO Dibujo ONPASSWORD Dibujo SPLASH: si se da este identificador a un dibujo, Velzquez lo pre- sentar al ejecutar la aplicacin tras aceptar la ventana de peticin de usua- rio, antes de presentar el men principal de la misma, mientras se estn ini- cializando las tablas del proyecto. Otra forma de convertir un dibujo en SPLASH es seleccionando el objeto en el panel derecho del editor y ejecutando la opcin Comunes/Convertir en splash. Para localizar un dibujo que hayamos definido como splash en la aplicacin ejecutamos la opcin Comunes/Localizar splash. 8.5.7. Multi-Iconos Es un objeto de tipo dibujo, pero permite editar iconos individuales, aadir o insertar nuevos iconos, para su posterior utilizacin en objetos tales co- mo barras de herramientas, rboles visores de tablas arboladas o tablas es- tticas. Cada dibujo que componga el objeto podr ser tratado de modo in- dividual, es decir, al hacer doble clic sobre un icono se editar solamente un icono y no todos los que contengan el dibujo. Una vez seleccionado el objeto de la Galera de Objetos se pasar autom- ticamente al Editor de Imgenes, en el que podremos crear los distintos ico- nos que contendr. Para ello seleccionamos la opcin del editor Iconos/Aadir y utilizamos alguno de los mtodos para importar un objeto tipo Dibujo. Cada icono estar numerado, y haciendo doble clic sobre l se ejecutar el programa de edicin de imgenes que, por defecto, tengamos definido en nuestro ordenador. Los dibujos que importemos, dependiendo del objeto para el que se usen, deben tener 4 u 8 bits por pxel y un color que usaremos como transparencia. Velzquez Visual cambiar la profundi- dad de color de la imagen y buscar un color de transparencia automtica- mente, pero si damos Intro sobre el icono veremos las propiedades del ico- no y podremos modificar ese color. Tenemos que usar 4 bits por pxel para los mens arbolados y visores de ta- blas arboladas, separadores de pestaas e imgenes de tablas estticas, pudiendo importarlas tal y como hacamos con los dibujos. Sin embargo, para barras de herramientas podemos usar 8 bits por pxel, por lo que no podremos usar el portapapeles para importarlos, ya que ste nos los con- vierte automticamente a 4 bits. 08 Desarrollo completo de una aplicacin Multi-Iconos 170 171 VELAZQUEZ VISUAL Para cambiar el tamao de los iconos ejecutamos la opcin Iconos/Tama- o. Hemos de especificar tanto el ancho como el alto del dibujo. Si ya te- nemos iconos creados, se redimensionar el espacio que ocupan, ya que todos tienen el mismo ancho y alto. Con la tcnica de arrastrar y soltar (drag and drop) podremos mover o du- plicar un icono dentro del editor de dibujos. Arrastrando con el ratn se mo- ver la imagen y pulsando la tecla Ctrl mientras se arrastra haremos una co- pia. Para borrar un icono ejecutamos la opcin Iconos/Eliminar. Tambin podemos usar los botones cortar, copiar y pegar, para duplicar o eliminar iconos. Este objeto podremos usarlo en mens arbolados, visores de tablas arbo- ladas, barras de herramientas, etc. Si queremos convertir un objeto de tipo dibujo en un objeto multi-icono, en el editor de dibujos ejecutamos la opcin Convertir/A multi-iconos. Pode- mos convertir un objeto multi-icono en un objeto dibujo si ejecutamos la op- cin Convertir/En dibujo normal. 8.5.8. Imagen Gif Es un objeto de tipo Dibujo especfico para archivos con formato gif. Para importar una imagen tenemos que ejecutar la opcin Pegar desde del men Edicin y buscar en el disco el archivo. La razn de que se pueda guardar una imagen Gif en un tipo objeto distinto es que permite las imgenes Gif animadas, pudiendo usar este tipo de objetos en mens o en formularios. Si importamos una imagen Gif que no sea animada, puede que nos interese ms hacerlo como objeto dibujo, ya que este tipo de objeto no permite con- vertir en multi-iconos ni editar las propiedades de transparencia y dems. 8.5.9. Barras de herramientas Este objeto se utiliza para crear un barra de herramientas personalizada. Es- tas barras de herramientas se utilizarn en Mens de tipo formulario con controles de tipo bsqueda rejilla y de rbol. En las bsquedas, sustituyen- do a la barra de herramientas del ejecutor al presentar la rejilla de resultado. Y en los procesos, en la funcin Aadir retorno (Lista). En stos asociamos una barra de herramientas que aparecer en la rejilla que llevan asociada. No se puede incluir un objeto de este tipo en un men que tenga como identificador AUTOEXEC (es decir, si es el men que se autoejecuta al arrancar una aplicacin de Velzquez Visual) ADVERTENCIA Cortar, copiar y pegar Imagen Gif Barras de herramientas Propiedades de la barra de herramientas Cuando se edita un objeto de este tipo aparece un cuadro de propiedades, en el que especificamos: Ttulo: el ttulo que tendr la barra de herramientas. Dibujo botones: muestra el identificador del dibujo multi-iconos que contie- ne los diferentes iconos para cada botn de la barra de herramientas. Para cambiarlo tenemos que pulsar el botn , lo que permitir seleccionar el dibujo multi-iconos que contenga las imgenes de cada uno de los botones de la barra de herramientas. El color de fondo de dichas imgenes debe ser gris, como el de todos los botones en Windows. Comandos: en esta ventana se mostrarn todos los comandos que hayan sido aadidos a la barra de herramientas. A travs de la barra de botones de este cuadro de dilogo podremos aadir, borrar, mover (ordenar arriba y abajo), modificar, cortar, copiar y pegar, y ha- cer y deshacer comandos. El botn Propiedades sirve para editar el cuadro de propiedades del co- mando seleccionado. Cuando se crea un nuevo comando, se abrir el cua- dro de Propiedades Comando. Propiedades del comando En l especificaremos las siguientes opciones: 08 Desarrollo completo de una aplicacin Examinar Propiedades 172 173 VELAZQUEZ VISUAL Texto Tool Tip: permite al programador personalizar el texto que se ver en ejecucin al pasar el puntero del ratn encima del botn. Funcin: podremos seleccionar una de las incluidas en la lista. stas son: Nula (Separador): incluye un separador en el lugar que se haya especifi- cado de la lista de comandos. Formulario Alta: para dar de alta un nuevo registro. Formulario Baja: para eliminar un registro. Formulario Modificacin: para editar un registro. Navegante Maestros: para acceder a los maestros de los registros de la rejilla actual. Navegante Histricos de uno: para acceder a los histricos de un regis- tro determinado de la rejilla actual. Navegante Histricos de todos: para acceder a los histricos de todos los registros de la rejilla actual. Cambiar rejilla: para poder visualizar los registros de la rejilla actual en cualquier otra rejilla, de la misma tabla de datos, que se haya definido como pblica. Proceso: para ejecutar un proceso contra todos los registros de la rejilla. Proceso sobre multiseleccin: para rejillas con multiseleccin. Ejecuta un proceso que slo actuar sobre los registros que el usuario final ha- ya seleccionado en la rejilla. Activando una opcin podemos hacer que se quiten de la rejilla los registros seleccionados una vez ejecutado el proceso (los quita de la lista, pero no los borra, a no ser, claro est, que el proceso dispare una funcin de borrado de los registros selecciona- dos) o que sean desmarcados. Tubo de ficha: para ejecutar un tubo de ficha desde la rejilla actual. Tubo de lista: para ejecutar un tubo de lista desde la rejilla actual. Lupa: permite ejecutar una lupa que hayamos creado en el proyecto (mapa). Men desplegable: mediante esta opcin podemos disparar otra barra de herramientas desde un botn. Todos los comandos de la barra in- cluida sern visualizados en forma de men desplegable. Comando estndar: permite disparar desde un botn cualquier coman- do estndar del ejecutor de aplicaciones. Los comandos se mostrarn ordenados por categoras (archivo, listas, etc.). Objeto: es el objeto visual que vamos a lanzar. Esta opcin slo estar ac- tivada en el caso de que la funcin seleccionada sea un proceso, un tubo de ficha, un tubo de lista, una lupa, un men desplegable o un comando es- tndar. En ella se especificar el nombre del objeto que usaremos en el co- mando. Necesita un Elemento Seleccionado para estar Activo: esta opcin sola- mente estar activada cuando la funcin seleccionada sea un proceso. Si se trata de un proceso cuyo origen sea de lista, habr que marcar esta ca- silla de verificacin para que, en tiempo de ejecucin, el botn est desac- tivado hasta que el usuario seleccione un registro de la rejilla. Los botones correspondientes al resto de las funciones sern activados o desactivados automticamente por Velzquez. Condicin Activo: este comando permite establecer una condicin para que el botn que estemos editando se encuentre activo. Para ello, debemos especi- ficar una frmula pudiendo utilizar el asistente para la edicin de frmulas. Acelerador de Teclado: permite especificar un acelerador de teclado pa- ra simular la pulsacin de cada botn. Podremos seleccionar cualquiera de las siguientes teclas: Ninguna, retroceso, tabulador, return (intro), escape y espacio. Todos los nmeros del 0 al 9. Todas las letras de la A a la Z, excepto la . 08 Desarrollo completo de una aplicacin 174 175 VELAZQUEZ VISUAL Todas las teclas de funcin desde F1 a F12. Shift pulsado: el acelerador ser la tecla Shift ms la tecla seleccionada. Control pulsado: el acelerador ser la tecla Control ms la tecla seleccio- nada. Los aceleradores de teclado que se incluyan en los comandos de la barra de herramientas prevalecern sobre los del men y sobre los propios de Windows. Ejemplo: Barra de Herramientas Tenemos una base de datos para libros, en la que podemos elegir un autor y un editor para cada libro. Por tanto, tenemos tres tablas, LIBROS que se- r histrica tanto de AUTORES como de EDITORES. Para cada tabla creamos todos los objetos necesarios: rejillas, formularios de edicin, bsquedas, mens, etc. Vamos a centrarnos ahora en las Barras de herramientas. Para que las ba- rras de herramientas que creemos aparezcan a la hora de visualizar las re- jillas, tienen que ser asignadas en las bsquedas que realicemos. En las Propiedades de la bsqueda, en Barra de herramientas, elegiremos Perso- nal, pudiendo escoger una entre las que hayamos creado. Adems, pode- mos especificar dnde queremos aparcar sta, pudiendo aparecer en eje- cucin, arriba o abajo, a la izquierda o a la derecha. e Vamos a crear una barra de herramientas para esta bsqueda. La barra de herramientas consta de varios elementos que se componen de: un icono que ser el que vea el usuario junto con un texto, y una funcin a disparar. Estas funciones a disparar se realizarn sobre los elementos de la lista, bien sobre todos ellos o sobre uno seleccionado. Estas funciones pueden ser tambin nuevas barras de herramientas, pero stas ya no se mostrarn como dibujos, sino como textos, como un men contextual del botn. Vamos a crear una barra de herramientas que denominaremos BASICA y que tendr cuatro botones con un icono cada uno. A su vez, cada uno de ellos mostrar, al ser pulsado, un men desde el que podremos lanzar las funciones, esta vez visualizando los ttulos de stas y no los iconos. Tendremos un botn para las funciones de ficha, con las que podremos dar de alta, modificar o eliminar stas. Tendremos otro botn para las de lista, en la que podremos cambiar la rejilla con que la vemos, filtrar por cualquier campo, rebuscar entre los registros de la tabla y multipartir una lista por un campo. En otra tendremos las funciones de navegacin, pudiendo ir al maestro de los elementos, a los histricos de stos o a los del selecciona- do. Por ltimo, podremos con otro botn, imprimir la rejilla en que est in- crustada la barra. Creamos primero las cuatro barras que irn en la principal. Se llamarn FI- CHA, LISTA, NAVEGAR e IMPRIMIR, respectivamente. 08 Desarrollo completo de una aplicacin e 176 177 VELAZQUEZ VISUAL En primer lugar seleccionamos en la Galera de Objetos la Barra de he- rramientas , aparecindonos un cuadro de dilogo en el que podremos dar un Ttulo a la barra, por ejemplo Opciones de Ficha. A continuacin vamos aadiendo las funciones que se dispararn desde es- te men. Para ello pulsamos el botn Aadir con lo que nos aparecern la ventana Propiedades Comando. Por ttulo ponemos Alta (Insert), como Funcin escogemos Formulario Alta y el resto de opciones las dejamos co- mo estn. No hace falta especificar un acelerador de teclado puesto que por defecto ya tiene uno que es la tecla Insert (por eso hemos aadido al t- tulo Insert). e Galera de Objetos Barra de herramientas Aadir Aceptamos la ventana y ya tenemos aadido el primer comando. Ahora vol- vemos a pulsar el botn Aadir e introducimos los otros dos comandos de ficha que necesitamos: Formulario Modificacin, Formulario Baja. Tam- poco necesitamos designar una tecla aceleradora ya que tienen por defec- to una: Espacio o intro, y Suprimir, respectivamente, que aadiremos al t- tulo del men. Estas funciones Formulario lo que hacen es llamar al formu- lario que est asignado a la rejilla en sus propiedades, para altas, bajas y modificaciones. 08 Desarrollo completo de una aplicacin e Aadir 178 179 VELAZQUEZ VISUAL Ya tenemos, por tanto, la barra FICHA. Vamos ahora con la barra LISTA. A esta barra aadiremos como funciones la de Cambiar de Rejilla usando co- mo tecla aceleradora Ctrl+R. Como vamos a aadir tres comandos ms de naturaleza distinta, aadimos un separador que se incrusta en la barra al elegir Nula (Separador) como funcin. Algunos comandos necesitan especificar un objeto a usar como los que vamos a utilizar a continuacin. Aadimos a la lista dos comandos estn- dar: Lista: Filtrar y Lista: Rebuscar a los que ponemos como nombres Fil- trar por cualquier campo (Ctrl+F) y Buscar en los registros de la lista (Ctrl+B), respectivamente, y como teclas aceleradoras las que indicamos en el nombre. e Introducimos otro separador y por ltimo aadimos otro Comando estn- dar: Lista: Multi-partir, con lo que completamos la barra de herramientas LISTA. 08 Desarrollo completo de una aplicacin e 180 181 VELAZQUEZ VISUAL En la barra de herramientas NAVEGANTE incluiremos las funciones: Nave- gante Maestros, Navegante histricos de todos, Navegante histricos de uno. En la barra de herramientas IMPRIMIR incluiremos las funciones: Comando estndar: Archivo: Especificar informe, Comando estndar: Archivo: Prepa- rar pgina, Comando estndar: Archivo: Presentar Informe. Ahora, vamos a crear la barra BSICA. Aqu hemos de escoger un multi- icono, ya que cada funcin coger un icono de ste para mostrarlo en el bo- tn de la barra. Podemos crear el multi-icono o traerlo del Almacn. A con- tinuacin hemos de especificar las funciones que lanzar cada uno de los botones. Pulsamos el botn Dibujo botones para cargar un multi-icono que ha- yamos creado. De este multi-icono podemos usar uno, varios o todos los dibujos que vie- nen. Nosotros usaremos los cuatro primeros. Asignaremos estos iconos a los botones de las barras de FICHA, LISTA, NAVEGAR e IMPRIMIR que tenemos. Con el botn Aadir, incluimos la primera barra que ser FICHA, se- leccionando como Funcin: Men desplegable y escogiendo como obje- to FICHA. e Dibujo botones Aadir Al aceptar, vemos que nos coge el primer dibujo para esta opcin. Velz- quez Visual se encarga de dar un dibujo a cada opcin en orden, de acuer- do a como fue creado el multi-icono. De esta misma manera aadimos las otras tres barras de herramientas. 08 Desarrollo completo de una aplicacin e 182 183 VELAZQUEZ VISUAL Ahora ya podemos asignarla a una bsqueda, a un retorno, etc. Por ejem- plo, la utilizaremos en todas las bsquedas de LIBROS de nuestro mapa. Pa- ra ello, en el apartado Barra de herramientas escogemos la opcin Personal y como Barra personal: BASICA que ser la que llame a las otras cuatro. En la rejilla en que se muestra el resultado de la bsqueda podremos hacer uso de la barra de herramientas que hemos creado. Pulsando cada uno de los iconos nos mostrar el men desplegable correspondiente. En la barra de herramientas podemos llamar a funciones directamente o bien, como en este ejemplo, a otras barras de herramientas. Estas funcio- nes, adems de las estndar, podemos ampliarlas llamando a procesos, lo que hace de stas una herramienta muy potente. e Resumen Velzquez Visual cuenta con una serie de objetos visuales que nos permiten acceder a elementos o recursos que usaremos a lo largo de la aplicacin. s- tos son: el dibujo, los Multi-iconos, la imagen gif y la barra de herramientas. Dibujo : son objetos que contienen un dibujo. Tales dibujos podrn ser incluidos en distintas partes de un proyecto, como son los formularios, los mens de tipo formulario, mens arbolados e informes. Multi-Iconos : es un objeto de tipo dibujo pero que permite editar ico- nos individuales, aadir o insertar nuevos iconos para su posterior utiliza- cin en barras de herramientas, rboles visores de tablas arboladas o tablas estticas. Imagen Gif : es un objeto de tipo dibujo especfico para archivos con for- mato gif. Son objetos estticos, es decir, no modificables por el usuario, pe- ro permiten que la imagen no lo sea ya que admiten gif animados. Barras de herramientas : este objeto se utiliza para crear un barra de herramientas personalizada que permita acceder a las opciones por defec- to o a nuevas funcionalidades. 8.5.10. Impresora lgica Las impresoras lgicas son objetos que usamos en edicin para imprimir in- formes y que asociamos a impresoras fsicas en tiempo de ejecucin. Al pulsar el icono Impresora lgica de la Galera de Objetos, aparece el cua- dro de dilogo de propiedades de las impresoras lgicas, donde se asigna un nombre descriptivo a la misma. En las propiedades de un informe se puede declarar el uso de una impre- sora lgica. Al hacerlo, se consigue que el informe se imprima siempre, de forma automtica, a travs de la impresora lgica seleccionada. Las impresoras lgicas tienen que ser asignadas a una impresora fsica en tiempo de ejecucin. En ese momento se declara tambin el resto de las ca- ractersticas asociadas, es decir, la calidad de impresin, el tamao o la orientacin del papel, el nmero de copias, etc. Estas conexiones son al- macenadas en un archivo con extensin .VPU. 08 Desarrollo completo de una aplicacin Dibujo Multi-Iconos Imagen Gif Barras de herramientas Impresora lgica 184 185 VELAZQUEZ VISUAL Tendremos dos opciones, o bien tener impresoras conectadas, es decir, im- presoras fsicas asignadas a la impresora lgica, con lo que cada vez que imprimamos un documento que est asociado a esa impresora lgica, au- tomticamente ser impreso en la impresora conectada; o bien estar des- conectada, con lo que cada vez que imprimamos el documento nos pre- guntar por la impresora fsica por la que debe imprimir el documento. En la ejecucin con VRunner los archivos .VPU son almacenados en el di- rectorio de la aplicacin; en el entorno cliente-servidor son almacenados en las carpetas de cach local de cada cliente. 8.5.11. Comunicacin Serie Este objeto permite establecer comunicaciones va puerto serie a una apli- cacin de Velzquez Visual. Sus propiedades son: Nombre: nombre que deseemos dar al puerto. Modo Entrada/Salida: podemos elegir entre uno de los tres modos siguien- te: Sncrono, Asncrono y Asncrono Ex; este ltimo no est soportado por Windows 95. Comunicacin Serie Puerto: nmero del puerto. Baudios: seleccionamos el nmero que queramos de la lista desplegable. Bits: nmero de bits a transmitir. Stop Bits: bits de parada 1; 1,5 o 2). Paridad: tenemos las opciones Ninguna, Impar, Par, Marca o Espacio. Apretn de manos (handshake): 0 - No 1 - Xon/Xoff 2 - RTS/CTS (Request-To-Send/Clear-To-Send). 3 - RTS, Xon/Xoff Estilo Hardware: podremos activar las siguientes opciones: Destacar bytes nulos RTS permitido DTR permitido Tamao Buffer: tendremos que definir tanto el tamao del buffer de entrada como de salida. Sustituir Bytes errneos: si activamos esta opcin podremos especificar a continuacin el carcter con el que vamos a sustituirlos. Eventos: si deseamos manejar eventos activamos la opcin Manejar even- tos, por defecto el Carcter de seal es K. El manejo de este objeto debemos realizarlo a travs de un proceso, con ayuda de las funciones que tenemos disponibles en el asistente de creacin de frmulas. De esta manera podremos abrir y cerrar un puerto, saber cun- tos bytes hay para leer en el buffer, y leer y escribir en el puerto. Resumen Los objetos visuales Impresora lgica y Comunicacin serie de Velzquez Visual nos permiten comunicarnos con dispositivos perifricos. Impresora lgica : las impresoras lgicas son objetos que asociamos a informes para posteriormente indicar qu impresora fsica queremos utilizar para cada documento. En las propiedades de un informe podemos decla- rar el uso de una impresora lgica, con el fin de que el informe se imprima siempre, de forma automtica, a travs de la impresora lgica selecciona- da y por lo tanto por la impresora fsica a la que est conectada. 08 Desarrollo completo de una aplicacin Impresora lgica 186 187 VELAZQUEZ VISUAL Comunicacin Serie : este objeto permite a la aplicacin establecer co- municaciones va puerto de serie usando instrucciones de proceso. 8.5.12. rbol Visor de Tablas Los rboles visores de tablas arboladas se emplean para presentar, en dis- tintos niveles, la informacin de una tabla de datos Maestra con clave ar- bolada. Gracias a los rboles vemos la informacin contenida en este tipo de tablas de una forma grfica (se incluyen lneas, imgenes...), visualizan- do de forma clara los niveles en los que se encuentra estructurada la infor- macin. A este tipo de objetos tambin podemos asignarles formularios para reali- zar altas, modificaciones y bajas en la tabla de datos con la que se en- cuentran asociados. Son utilizados en los siguientes objetos: Formulario: en el control Rama de rbol y en la funcin de botn Localizar maestro arbolado. Men: como control rbol y como primera bala en la pistola rbol de tabla de datos. Propiedades del rbol Visor de Tablas Para crear un rbol visor, seleccionamos la tabla de datos arbolada y pul- samos el botn Nuevo objeto. De la Galera de Objetos seleccionamos rbol visor de tablas arboladas y aparecer el cuadro de dilogo de Propie- dades del rbol: Comunicacin Serie rbol Visor de Tablas Sus propiedades son: Nombre, identificador y tabla de datos: asignamos el nombre y la tabla de datos asociada al nuevo objeto rbol. Velzquez Visual genera un identifi- cador por defecto, que aparece en la barra de ttulos del cuadro de dilogo y en el panel derecho del editor de proyectos junto a su icono correspon- diente. Estilo: en el grupo de estilos se definen, mediante unas casillas de verifica- cin, los tipos de visualizacin para el rbol. Son los siguientes: Ver lneas: si est activado se visualiza la lnea de puntos que une las ramas del rbol. Ver lneas en la raz: si est activado se visualiza la lnea de puntos en el no- do raz. Ver botones: si est activado se visualizan los botones + y - que permiten abrir y cerrar las ramas. Ver imgenes: si est activado se visualiza en cada nivel los iconos del di- bujo multi-iconos asignado al rbol. Ver campo cdigo: si est activado se visualiza el contenido del campo CO- DIGO del registro en curso. Eventos: marcando la casilla La seleccin ha cambiado lanzamos un proce- so (evento) cada vez que pasamos de un registro del rbol a otro. Activan- do esta opcin habr que especificar un proceso mediante el cual se asig- ne el valor del campo cdigo de la tabla a una variable en memoria. Esto es til para la sincronizacin de Controles en mens de tipo formulario. Imagi- nemos, por ejemplo, una aplicacin en la que tenemos un rbol asociado a la tabla arbolada MARCAS (de coches), de modo que al seleccionar un ele- mento del rbol nos aparezca un casillero (sincronizado) con imgenes de todos los modelos de la marca. Formularios e Informe: Formulario alta: formulario asociado para dar altas en la tabla de datos (a la que est asociada el rbol). En el ejecutor esta opcin se dispara con la te- cla + (con el foco en la rejilla) o con la tecla Insert. Formulario modificacin: formulario asociado para modificar un registro en la tabla de datos. En el ejecutor esta opcin se dispara pulsando la tecla In- tro sobre la lnea seleccionada. Formulario bajas: formulario asociado para dar la baja a un registro de la ta- bla de datos. En el ejecutor esta opcin se dispara pulsando la tecla Supr sobre la lnea seleccionada. Informe: informe por defecto que imprime la lista. 08 Desarrollo completo de una aplicacin 188 189 VELAZQUEZ VISUAL Cambiar imgenes: al pulsar esta opcin, aparece el cuadro de dilogo Pro- piedades de una lista de imgenes. A un rbol se le puede asignar un dibujo multi-iconos, eligindolo de entre los incluidos en el proyecto que aparecen en la lista desplegable Dibujo. Ca- da icono que compone el dibujo se visualizar en el nivel respectivo del r- bol. Si hay ms niveles que iconos se repite el ltimo en cada uno de los ni- veles que carecen de icono propio. Uso del rbol Visor de Tablas Los rboles se disparan desde las opciones de men con la pistola rbol tabla de datos, o como objeto en un men de tipo formulario. Al ir aadien- do elementos al rbol, stos se irn colocando segn la clave asignada en la rama que le corresponde. Si no hay un elemento en el nivel superior si- gue mostrndose en el nivel que le toca. Los multi-iconos tienen que estar formados por imgenes de 4 bits por pxel. ADVERTENCIA 8.5.13. Casillero Es un objeto que sirve para ver listas de registros de las tablas de datos. En tiempo de ejecucin cada registro es presentado en una celda (casilla), siendo cada casilla un botn que permite disparar un proceso al hacer clic sobre l. Adems, podemos asignar otros procesos que sern disparados, en tiempo de ejecucin, a travs de un men contextual al pulsar con el bo- tn de la derecha del ratn. Cuando un objeto de este tipo es incluido como control en un men, en un formulario o como pistola de men, se solicitar un proceso en el que determinaremos los registros que se van a presentar. As, por ejemplo, si lo vamos a utilizar como control o como pistola en un men, el pro- ceso tendr su origen como NINGUNO. Si lo utilizamos como control de formulario, el origen del mismo ha de ser una FICHA de la tabla del for- mulario. Propiedades Cuando creamos un casillero se presenta el cuadro de dilogo Propiedades casillero con las siguientes opciones: 08 Desarrollo completo de una aplicacin Casillero 190 191 VELAZQUEZ VISUAL Nombre: nombre del casillero. Tabla: identificador de la tabla del casillero. Fuentes: con la barra de botones de fuentes (en orden de izquierda a dere- cha) podremos: Aadir una nueva. Sustituir la fuente seleccionada por otra. Eliminar la fuente seleccionada (si la fuente seleccionada est siendo uti- lizada por algn control del casillero no podremos eliminarla). Suprimir las fuentes no utilizadas en el casillero. Desplazar una posicin hacia arriba la fuente seleccionada. Desplazar una posicin hacia abajo la fuente seleccionada. Si en Edicin/Fuentes por defecto hemos se- leccionado algunas para los casilleros, stas estarn disponibles al crear uno nuevo. Estilos: Horizontal: por defecto, en ejecucin, se crean las casillas por columnas. Si activamos esta propiedad, las casillas sern creadas por filas. Automtico: si activamos esta propiedad, en tiempo de ejecucin, Velz- quez distribuir automticamente las casillas en filas y columnas. Si esta propiedad no es activada, en el proceso que se ha de seleccionar al in- cluir un casillero como control de men o de formulario, o como pistola de men, se tendr que establecer un criterio para determinar el nmero de filas (estilo Horizontal activado) o columnas (estilo Horizontal desactivado). Pintar lneas: si activamos esta opcin, se pintar una lnea negra para delimitar los lmites de cada casilla. Pintar estilo botn: si activamos esta propiedad, cada casilla ser pinta- da como un botn, si no se mostrar de forma plana. Color de fondo: en esta propiedad se selecciona el color de fondo que tendrn las casillas. Proceso al hacer clic en una celdilla: en esta propiedad seleccionamos el pro- ceso que ser disparado, en tiempo de ejecucin, cuando un usuario haga clic en una celdilla. El proceso podr tener su origen tanto en una ficha como en una lista de la tabla de datos del casillero. Si el proceso tiene su origen en una FICHA ser alimentado por la ficha de la celda sobre la que se hace clic y si tiene su origen en una LISTA estar alimentado por toda la lista presen- tada en el casillero. Para seleccionar o cambiar un proceso hacemos clic so- bre el botn Seleccionar proceso del cuadro de propiedades del casillero. 08 Desarrollo completo de una aplicacin 192 193 VELAZQUEZ VISUAL Men de contexto: adems del proceso a ejecutar al hacer clic en una cel- dilla, podemos seleccionar otros procesos. stos, en ejecucin, sern pre- sentados en un men de contexto que se desplegar al hacer clic con el bo- tn derecho del ratn sobre una celdilla. Para disparar uno bastar con se- leccionarlo en dicho men contextual. El texto que se presente en el men de contexto ser la descripcin que hayamos escrito en el mismo. Al igual que el proceso al hacer clic en una celdilla, stos podrn tener su origen tanto en una ficha como en una lista de la tabla del casillero. Los procesos sern presentados en el men de contexto en el orden en que se encuen- tren en la lista de procesos seleccionados. Para la seleccin de procesos se incluye la barra de herramientas , en la que podemos: Aadir: permite aadir un proceso o un separador a la lista. Para aadir un separador bastar con seleccionar la opcin del mismo nombre que aparece en primer lugar en la lista de procesos seleccionables. Suprimir: suprime el proceso o separador seleccionado de la lista de procesos. Subir: desplaza una posicin hacia arriba el proceso o separador seleccionado. Bajar: desplaza una posicin hacia abajo el proceso o separador seleccionado. Cambiar proceso: permite cambiar el proceso seleccionado por otro. Frmula condicin: aqu establecemos la frmula que se ha de cumplir para que este proceso pueda ser disparado desde el men contextual. Un proceso podr ser editado directamente desde la ventana de edicin de procesos que se abre cuando lo aadimos o sustituimos en un proceso de la lista. Para ello basta con seleccionar uno y pulsar el botn Editar. Para editar las propiedades de un casillero hay que seleccionarlo en el pa- nel derecho y pulsar la combinacin de las teclas Alt+Intro o pulsar el bo- tn Propiedades de la barra de herramientas del Editor de Proyectos. Tambin podremos editar dichas propiedades desde el Editor de Casilleros, haciendo doble clic o pulsando Intro sobre cualquier parte del rea del Edi- tor de Casilleros. Editor de casilleros Una vez creado el casillero, modificamos el identificador y hacemos doble clic sobre el mismo para entrar en el Editor de casilleros. Es similar al Edi- tor de Formularios: consta de una barra de herramientas para la creacin de controles, una barra de maquetacin y el rea de edicin del casillero. Lo que hemos de crear es una casilla. El rea de la casilla se muestra con el color de fondo definido en el cuadro de propiedades del casillero. Para modificar sus dimensiones basta con hacer clic sobre cualquier punto de la misma donde no se encuentre ningn control, y arrastrando los manejado- res o con Shift y las teclas de movimiento del cursor, al igual que con los formularios. Propiedades Controles Los distintos controles que encontramos en un casillero son: Modo de edicin: restaura el puntero del ratn para cancelar la selec- cin de un control. Este modo se usa para mover los controles o cambiar sus tamaos. Dibujo esttico: sirve para insertar un dibujo en la casilla. En sus Pro- piedades slo habr que seleccionar el dibujo que queramos de la lista de dibujos incluidos en el proyecto. El dibujo podr presentarse con o sin bor- de, pudiendo escoger, adems, el efecto hundido o a nivel. Para redimen- sionar el dibujo a su tamao original pulsamos la tecla F7. Tambin pode- mos asignarle una Condicin visible. Si activamos esta opcin se abrir el asistente para la edicin de frmulas, donde escribiremos la frmula que se ha de cumplir para que el control sea visible. Texto esttico: sirve para insertar un texto en la casilla. Sus propiedades son: Texto: texto que se incluir en la casilla. Fuente: fuente, de las seleccionadas en las propiedades del casillero, con la que se presentar el texto. Color texto: color con el que se presentar el texto. Color fondo: color de fondo del control del texto esttico. Si activamos el estilo Fondo transparente, esta opcin estar desactivada. 08 Desarrollo completo de una aplicacin Modo de edicin Dibujo esttico Texto esttico 194 195 VELAZQUEZ VISUAL Alineamiento del texto: el texto podr estar alineado, con respecto a los mrgenes del control, a la Izquierda, Centrado, a la Derecha o Justificado. Tamao: ste podr ser Fijo (invariable), de Ancho variable (el ancho variar en funcin del tamao de la casilla), de Altura Variable (el alto del control va- riar en funcin de la altura de la casilla) o con Ambos variables. Estilos: al control podremos activarle las siguientes propiedades: Borde: en tiempo de ejecucin se pintar un borde alrededor del control. Hundido: si activamos esta propiedad se presentar el control con un efec- to de hundido. Fondo transparente: no se pintar el color de fondo del control. Condicin visible: si activamos esta opcin se abrir el asistente para la edi- cin de frmulas, en ella tendremos que escribir la frmula que se ha de cumplir para que el control sea visible. Campo: visualiza el contenido de un campo en la casilla. Sus propieda- des son: Campo: aqu seleccionamos el campo a visualizar en el control, para lo que pulsamos el botn Cambiar: dependiendo del campo seleccionado, pode- mos formatear su salida utilizando el asistente para la creacin de subca- denas de formato. Fuente: fuente, de las seleccionadas en las propiedades del casillero, con la que se presentar el texto. Color texto: color con el que se presentar el texto. Color fondo: color de fondo del control. Si activamos el estilo Fondo trans- parente, esta opcin estar desactivada. Alineamiento del texto: el contenido del campo podr estar alineado, con respecto a los mrgenes del control, a la Izquierda, Centrado, a la Derecha o Justificado. Tamao: ste podr ser Fijo, de Ancho variable, de Altura Variable o con Ambos variables. Estilos: al control podremos activarle las siguientes propiedades: Borde: en tiempo de ejecucin se pintar un borde alrededor del control. Hundido: si activamos esta propiedad se presentar el control con un efec- to de hundido. Fondo transparente: no se pintar el color de fondo del control. Campo Condicin visible: si activamos esta opcin se abrir el asistente para la edi- cin de frmulas, en ella tendremos que escribir la frmula que se ha de cumplir para que el control sea visible. Variable global: sirve para visualizar el contenido de una variable global. Sus propiedades son: Variable: aqu seleccionamos la variable global a visualizar en el control. Pa- ra seleccionar la variable pulsamos el botn Cambiar. Fuente: fuente, de las seleccionadas en las propiedades del casillero, con la que se presentar el texto. Color texto: color con el que se presentar el texto. Color fondo: color de fondo del control. Si activamos el estilo Fondo trans- parente, esta opcin estar desactivada. Alineamiento del texto: el contenido de la variable podr estar alineado, con respecto a los mrgenes del control, a la Izquierda, Centrado, a la Derecha o Justificado. Tamao: ste podr ser Fijo, de Ancho variable, de Altura Variable o con Ambos variables. Estilos: al control podremos activarle las siguientes propiedades: Borde: en tiempo de ejecucin se pintar un borde alrededor del control. Hundido: si activamos esta propiedad se presentar el control con un efec- to de hundido. Fondo transparente: no se pintar el color de fondo del control. Condicin visible: si activamos esta opcin se abrir el asistente para la edi- cin de frmulas, en ella tendremos que escribir la frmula que se ha de cumplir para que el control sea visible. Objeto Dibujo: este control visualiza el contenido de un campo de tipo objeto Dibujo. Sus propiedades son: Campo: aqu seleccionamos el campo de tipo objeto dibujo a visualizar en el control. Para seleccionar el campo pulsamos el botn Cambiar. Sola- mente se presentarn aquellos que sean de tipo dibujo. Tamao: ste podr ser Fijo (invariable), de Ancho variable (el ancho va- riar en funcin del tamao de la casilla), de Altura Variable (el alto del control variar en funcin de la altura de la casilla) o con Ambos varia- bles. Estilos: al control podremos activarle las siguientes propiedades: 08 Desarrollo completo de una aplicacin Variable global Objeto Dibujo 196 197 VELAZQUEZ VISUAL Borde: en tiempo de ejecucin se pintar un borde alrededor del control. Hundido: si activamos esta propiedad se presentar el control con un efec- to de hundido. Condicin visible: si activamos esta opcin se abrir el asistente para la edi- cin de frmulas, en ella tendremos que escribir la frmula que se ha de cumplir para que el control sea visible. Icono: sirve para visualizar el icono de un campo enlazado a una tabla es- ttica a la que se le haya asignado un dibujo Multi-iconos. Sus propiedades son: Campo: aqu seleccionamos el campo enlazado con una tabla esttica pul- sando el botn Cambiar. Solamente se presentarn aquellos que estn en- lazados con una tabla esttica a la que se le haya asignado un dibujo mul- ti-iconos en sus propiedades. Estilos: al control podremos activarle las siguientes propiedades: Borde: en tiempo de ejecucin se pintar un borde alrededor del control. Hundido: si activamos esta propiedad se presentar el control con un efec- to de hundido. Condicin visible: si activamos esta opcin se abrir el asistente para la edi- cin de frmulas, donde escribimos la frmula que se ha de cumplir para que el control sea visible. Maquetacin de controles Para maquetar los controles de un casillero hay que tener seleccionados, dependiendo de los casos, uno, dos o ms controles. En la parte superior de la pantalla se encuentra la barra de maquetacin de controles, cuyo funcionamiento es igual que con los formularios: Los cuatro primeros botones alinean los controles seleccionados por los bordes izquierdo, derecho, superior e inferior, respectivamente, del control seleccionado en ltimo lugar. Los dos siguientes centran los controles horizontal y verticalmente, respectivamente, dentro del men. Los dos siguientes espacian tres o ms controles a la misma distan- cia horizontal y vertical entre ellos, respectivamente. Estos dos alinean los botones seleccionados horizontal o vertical- mente con respecto al que haya sido seleccionado en ltimo lugar. Los tres ltimos dan a varios controles el mismo ancho, el mismo alto y el mismo ancho y alto, respectivamente, del control seleccionado en ltimo lugar. Icono Alinear Centrar Espaciar Adjuntar Dimensionar Adems de estas formas de maquetacin, existen dos opciones en men Maquetar/Alinear, que son: Vertical: centra verticalmente todos los controles seleccionados con res- pecto a la posicin del ltimo. Horizontal: centra horizontalmente todos los controles seleccionados con respecto a la posicin del ltimo. Por ltimo, Tamao del contenido F7 nos redimensionar el control al ta- mao de lo que contiene. Adems, la posicin y las dimensiones de un con- trol se mostrarn en la barra de estado. Ejemplo: Casilleros En proyecto tenemos una tabla ARTICULOS cuyos registros queremos mostrar en un casillero. Vamos a ver dos formas de hacerlo: lanzarlo a tra- vs de un men arbolado y en un formulario de su maestro FAMILIAS. En los dos casos usaremos Casilleros alimentados por un proceso. El proceso es el que ser distinto ya que, en el segundo caso, dependiendo de la Fa- milia los registros que presentar sern distintos. En el primer caso partimos de un men arbolado. En l incluiremos una op- cin que llamaremos Casillero alimentado por proceso. El proceso es el que describimos a continuacin y que llamaremos ARTICULOS-CASILLERO: El origen ser nulo, como obliga el hecho de lanzarlo desde un men. Car- gamos la lista de ARTICULOS por FAMILIAS y a continuacin, mediante una funcin Aadir Retorno, devolvemos los resultados al casillero final- mente. As tendremos un casillero en el que se vern ordenados por Fami- lia (su maestra) los Artculos. 08 Desarrollo completo de una aplicacin e 198 199 VELAZQUEZ VISUAL Ahora vamos a disear el Casillero: seleccionamos el objeto de la Gale- ra de Objetos , entrando entonces en la ventana Propiedades Casilleros. Daremos un nombre al casillero (Artculos) y lo asignaremos a su tabla (AR- TICULOS). Si tenemos unos tipos de letra elegidos por defecto para los ca- silleros, podremos escogerlos al editarlo, si no, debemos aadir los tipos que necesitemos. Aqu tambin debemos seleccionar los procesos asocia- dos al casillero. Podemos asociar un proceso a una pulsacin con el botn izquierdo del ratn, o bien una serie de procesos al men contextual que se despliega al pulsar con el botn derecho. En este ejemplo haremos que al pulsar con el botn izquierdo del ratn nos aparezca un formulario de edicin del artculo. Pero de momento vamos a editar el casillero, luego volveremos con el proceso. Aceptamos y nos en- contramos con un editor parecido al del formulario. e Casillero Galera de Objetos En la celda que tenemos que disear insertamos un control para mostrar el nombre del artculo, otro para mostrar una foto de ste y por ltimo uno con el precio. Podemos incluir los que queramos, pero debemos tener en cuenta que ser una celda de un cierto tamao, y que su contenido debe ser legible. Salimos para crear el proceso que asociaremos al botn izquierdo del ratn sobre una celda, que es bien sencillo. Entramos en la Galera de Objetos y seleccionamos un proceso. Ponemos como descripcin Editar celda de casillero de artculos, el origen del proceso ser Ficha (el Artculo que pul- samos) y la tabla asociada Artculos. Como lnea de proceso nicamente incluimos: Pedir formulario. Como Iden- tificador formulario de edicin de Artculos escogeremos uno que hayamos 08 Desarrollo completo de una aplicacin e Proceso 200 201 VELAZQUEZ VISUAL creado y que sea de solo lectura, pues tal y como lo estamos haciendo no vamos a editar la ficha. No necesitamos cumplimentar el otro parmetro ya que no vamos a realizar nada ms en el proceso. Salimos del proceso, y ponemos un identificador a ste, por ejemplo, AR- TICULOS-CAS-EDIT. Volvemos al casillero y asociamos el proceso a ste pulsando el botn Seleccionar proceso. e Al pulsar el botn nos aparece una ventana en la que seleccionamos el pro- ceso que acabamos de crear. Ahora ya tenemos el proceso que alimenta el casillero, el casillero y un pro- ceso que se dispara al pulsar un casillero. No necesitamos nada ms. Vamos al men arbolado de Artculos que tengamos creado (tambin po- dramos hacerlo en un men tipo formulario), editamos la Carpeta subgru- po y pulsamos Aadir. 08 Desarrollo completo de una aplicacin e Aadir 202 203 VELAZQUEZ VISUAL En esta nueva Opcin de men tendremos que poner un Ttulo (Casillero), usar la Pistola Casillero que ser la que nos lance el objeto, como Bala usaremos el proceso que hemos creado para alimentar el casillero (ARTICULOS-CASILLE- RO) y por ltimo especificamos la 2 Bala que ser el Casillero que hemos hecho. e No necesitamos modificar ninguna propiedad ms. Ahora, aceptamos, y en la ventana Carpetas subgrupos de men escogemos el icono que usaremos para esta opcin usando los botones Icono anterior, Icono siguiente. Aceptamos todas las ventanas y probamos la aplicacin. En ejecucin, en el men arbolado tendremos, bajo el ttulo de Artculos, las diferentes opciones, entre ellas Casillero. Pulsamos dos veces sobre la op- cin para que sta se despliegue. El casillero aparecer ocupando toda la ventana del ejecutor, siendo Velz- quez Visual el que se encargue de dimensionar las celdas y el nmero de ellas para que encajen en ella. 08 Desarrollo completo de una aplicacin e Icono anterior, Icono siguiente 204 205 VELAZQUEZ VISUAL Vamos ahora con el segundo caso: lanzar el casillero desde un formulario. Para usar un casillero en un formulario de Familias que es maestro de Art- culos, el proceso que alimenta el casillero debe tener como origen la ficha de Familias. En el proceso cargamos el histrico de la ficha de Familias (Cargar histri- co -> ARTICULOS, FAMILIAS) y devolvemos la informacin por medio de la funcin de proceso: Aadir Retorno > ARTICULOS,.Ninguna,. Lo llamare- mos FAMILIAS-CASILLERO. En el formulario de Familias podemos aadir un separador de pestaas que incluya un subformulario con un Casillero alimentado por proceso. ste ten- dr como parmetros en la pestaa General: Procesos: FAMILIAS-CASI- LLERO (el proceso que acabamos de crear), Tablas: ARTICULOS (la tabla e de la que mostrar registros el casillero) y por ltimo Casilleros: ARTICULOS (el casillero que vamos a mostrar). En la pestaa Estilos podemos elegir las opciones de Ancho y alto variables para que se adapten al tamao del formulario y ya lo tenemos listo. En ejecucin, el casillero mostrar los artculos de la familia en el subfor- mulario de la pestaa, adaptando el tamao de las celdas y el nmero de stas en funcin de su tamao. 8.5.14. Agendizador Este objeto permite agendizar una tabla de datos de Velzquez Visual, esto es, en tiempo de ejecucin se presentar un calendario y una rejilla, de mo- 08 Desarrollo completo de una aplicacin e Agendizador 206 207 VELAZQUEZ VISUAL do que cuando el usuario seleccione una fecha en el calendario se presen- tarn en la rejilla los registros encontrados que tengan dicha fecha. Lgica- mente, la tabla de datos de Velzquez deber tener al menos un campo de tipo FECHA. Si, por el contrario, los registros tienen dos campos tipo Fecha que repre- sentan un intervalo de tiempo, el Agendizador puede presentar todos aque- llos registros en cuyo intervalo de fechas dado est incluida la fecha que se- leccionamos en el calendario. Sus propiedades son: Nombre: nombre que damos al agendizador. Tabla de datos: tabla de datos a agendizar (debe tener al menos un campo de tipo fecha). Modo: los diferentes modos ya estn predefinidos en Velzquez. stos son: Fecha nica: para localizar los registros que contengan la fecha seleccionada. Intervalo de fechas (ambos inclusive): para localizar los registros entre lmi- tes de fechas. Para ello la tabla necesitar, al menos, dos campos de tipo fecha, uno que contenga la fecha inicial y otro que contenga la fecha final. Por ejemplo una tabla de Reservas de hoteles; si un cliente reserva una ha- bitacin del 1 al 3 de enero de 1999, al consultar la agenda el usuario final, dicha reserva aparecer cuando, en el calendario, seleccione el 1, el 2 o el 3 de enero de 1999. Campo fecha inicial: sea cual sea el modo seleccionado siempre habr que especificarlo. Presenta todos los campos de tipo fecha de la tabla de datos del agendizador. Hemos de seleccionar uno. Campo fecha final: esta opcin solamente estar activada cuando hayamos seleccionado el modo Intervalo de fechas (ambas inclusive). Presenta todos los campos de tipo fecha de la tabla de datos del agendizador. Selecciona- mos uno de ellos, obviamente, tendr que ser diferente del seleccionado en el parmetro anterior. Rejilla: presenta todas las rejillas de la tabla de datos del agendizador. Se- leccionamos la necesaria. Variable Fecha Seleccionada: en este parmetro elegimos la Variable Global de tipo fecha que hemos creado para mover a ella la fecha seleccionada en el calendario. Fuente del calendario: esta opcin permite especificar la fuente a utilizar pa- ra presentar el calendario. Color Texto / Color fondo: aqu especificamos el color del texto y del fondo del calendario. 8.5.15. Informe Los informes se utilizan para presentar en papel una lista de registros de una tabla de datos. Los registros a imprimir son los que forman parte de la lista en curso, los cuales pueden haber sido obtenidos como resultado de una bsqueda simple o de una compleja combinacin de consultas, filtra- dos, reordenaciones, etc. En el Ejecutor, en la opcin Archivo/Especificar informe, disponemos de to- dos los informes asociados a la tabla de datos en curso, de modo que po- demos utilizarlos para imprimir la lista de la rejilla actual o bien podemos asignar un informe por defecto para cada rejilla, que se lanzara automti- camente al mandar imprimir la rejilla. Tambin podemos lanzar informes desde un Proceso, pudiendo encadenar unos con los siguientes sin que el usuario lo note. Iniciando el Asistente para informes Para la creacin de informes empezaremos usando el asistente. Para ello pulsamos el botn Nuevo objeto y de la Galera de Objetos elegimos Infor- 08 Desarrollo completo de una aplicacin Informe 208 209 VELAZQUEZ VISUAL me para impresora. Aparecer un cuadro de dilogo en el que tendremos tres opciones: Ninguno: se ejecutar directamente el Editor de informes. Asistente para informes: para crear de forma rpida y sencilla un informe. Incluye diferentes plantillas. Asistente para etiquetas: para crear de forma rpida y sencilla un informe de etiquetas. Asimismo, hemos de seleccionar la tabla para la que queremos generar el informe, y especificar el nombre que tendr. Elegimos Asistente para informes, apareciendo la primera ventana del asistente. La forma de crear uno es muy sencilla, basta con seguir los pa- sos que el propio asistente va indicando. Seleccin de campos En este primer paso hemos de seleccionar los campos que vamos a incluir en el informe. Para aadir campos al informe hacemos doble clic sobre los mismos en la lista de Campos disponibles, o bien pulsamos el botn de la barra de botones. Cuando hacemos esto Velzquez Visual nos lleva al siguiente campo. Para borrar un campo de la lista de Campos seleccionados usare- mos el botn y para ordenar un campo de cara al informe usaremos los botones . Debemos recordar que cuando escogemos un campo en- lazado, lo que presentamos es el cdigo en la tabla enlazada, pero pode- mos presentar datos de ese campo enlazado abriendo el rbol. Una vez hayamos terminado pulsamos el botn Siguiente , apare- ciendo la segunda ventana del asistente. 08 Desarrollo completo de una aplicacin Aadir Suprimir Subir, bajar 210 211 VELAZQUEZ VISUAL Agrupar y Ordenar Supongamos que hace falta un informe para presentar los registros de la ta- bla LINEAS DE ALBARAN del siguiente esquema de tablas: Entramos en el asistente de creacin de informes y en la primera ventana seleccionamos los campos de la tabla LINEAS DE ALBARAN que van a aparecer en el informe (esto se correspondera con el punto anterior). Pul- samos el botn siguiente, y en la segunda ventana seleccionamos el cam- po Cliente. De este modo podemos generar cambios de seccin en el in- forme cada vez que Velzquez se encuentre con un cambio en el conteni- do del campo, es decir, lneas de distintos clientes. Se dice que estamos agrupando las lneas por el campo Clientes (esto no quiere decir que se pro- duzca un salto de pgina). Al agrupar por el campo podemos forzar a que en la siguiente seccin, en la que aparecen las lneas del siguiente cliente, se creen nuevos encabezados o pies con el nombre del nuevo cliente. Si queremos que adems se produzca un salto de pgina, hemos de selec- cionar ste en un pie de grupo. Por otro lado, tambin establecemos el orden de aparicin de los clientes en el informe. En este caso, irn apareciendo los clientes ordenados por el campo Cdigo. Si queremos que, para cada cliente, las lneas aparezcan ordenadas por el cdigo de la lnea, agruparamos tambin el campo cdi- go de la lnea, indicando el orden que queramos (puede ser el campo cdi- go, importe, cantidad...). Para aadir un agrupamiento pulsaremos el botn , para editarlo pulsa- remos el botn , para borrarlo pulsaremos el botn y para desplazar un agrupamiento usaremos los botones . Una vez hayamos terminado pulsar el botn Siguiente. Distribucin y Orientacin En este paso debemos especificar la distribucin de los campos en el in- forme y la orientacin del papel. Las distribuciones pueden ser: 08 Desarrollo completo de una aplicacin Aadir Propiedades Suprimir Subir, bajar 212 213 VELAZQUEZ VISUAL En columnas: presentar los registros como si fuera una rejilla, en la que las filas sern los registros y las columnas los campos. Ficha: los datos se presentarn como un formulario, por medio de fichas en las que en cada una irn todos los campos de un cierto registro. La orientacin del papel puede ser vertical u horizontal, segn deseemos. Una vez especificados ambos, pulsamos el botn Siguiente. Estilos El asistente presenta una serie de estilos, cada uno aplica diferentes fuen- tes a ttulos, detalle y pies del informe. Tenemos los estilos Compacto, Corporativo, Formal, Gris, Informal, Negrita, Tebeo, que usan fuentes que suelen venir por defecto. Finalizacin del asistente Tras la seleccin del estilo pulsamos el botn Finalizar para terminar con el Asistente de Informes. En el panel derecho del Editor de proyectos apare- cer el informe que acabamos de crear. Para cambiar su identificador, pul- samos la tecla F2. Para editarlo pulsamos Intro o hacemos doble clic con el botn izquierdo del ratn, apareciendo la pantalla de edicin de informes. Para borrar un informe basta con seleccionarlo y pulsar la tecla Supr o pul- sar el botn de la barra de herramientas. Ms adelante veremos cmo funciona el Editor de Informes. Asistente para la creacin de etiquetas La forma de crear el informe es muy sencilla, basta con seguir los pasos que el propio asistente va indicando. En primer lugar hemos de seleccionar el formato del papel de etiquetas a utilizar. 08 Desarrollo completo de una aplicacin En un informe se pueden incluir datos de la tabla seleccionada y de sus tablas maestras, pero no de sus tablas histricas. Por ejemplo, para imprimir un encabezado de factura y sus lneas, el encabezado es maestra de lneas, por lo que la tabla del informe ha de ser la de lneas de factura. O si estamos listando los libros de un autor, la tabla del informe ha de ser la de los libros, siendo el encabezado, el autor, maestro de libros. ADVERTENCIA Suprimir objeto 214 215 VELAZQUEZ VISUAL Se presenta una lista con diferentes tipos de papel de etiquetas, donde se indica la marca y nmero de referencia, el alto y ancho de una etiqueta y el nmero de columnas por fila. Si no encontramos el tamao de etiqueta adecuado, seleccionaremos en la lista de etiquetas Personalizar y definiremos el alto y ancho de la misma. Si queremos guardar nuestras etiquetas personalizadas, iremos al archivo metrica.ave que se encuentra en el directorio donde tenemos instalado Ve- lzquez Visual: Atica\program y donde podemos aadirlas. El archivo es de tipo texto, y podemos editarlo con cualquier herramienta simple de texto. Debemos escribir entre comillas, y separados por una coma, el nombre de la etiqueta, el ancho en milmetros, el alto en milmetros y el nmero de co- lumnas. Por ejemplo, tenemos una etiqueta que llamaremos Personalizada 1, con ancho de 50.5 mm, alto 30 mm y 4 columnas de etiquetas. Escribiremos en una lnea del archivo: Personalizada 1, 50.5, 30, 3. De esta manera, cuando abramos de nuevo el Asistente para creacin de etiquetas nos mos- trar la nuestra. Seleccionamos la que vamos a usar y pulsamos Siguiente. Seleccin de la fuente y el color En este paso hemos de seleccionar una fuente, su tamao y el color con el que va a ser impresa. Se incluye una muestra en pantalla de la fuente se- leccionada con el tamao y color seleccionados. Al presentarnos las fuentes, nos muestra todas las que tenemos nosotros en nuestro sistema, pero debemos tener en cuenta que no tienen por qu 08 Desarrollo completo de una aplicacin 216 217 VELAZQUEZ VISUAL ser las que tenga el usuario final. Por eso tenemos que escoger un tipo de letra que sea estndar o proveer al usuario de las fuentes que usemos al instalar la aplicacin final. Seleccin de campos En este paso hemos de seleccionar los campos que vamos a incluir en la etiqueta al igual que hacamos con el Asistente para informes. A la derecha de la ventana se muestra una simulacin de una etiqueta, en la que, con las teclas del cursor arriba y abajo, podremos seleccionar la fila donde quere- mos incluir cada campo. En una misma fila podremos incluir ms de un campo o un texto. Para aadir un campo basta con hacer doble clic sobre el mismo en la lis- ta de Campos disponibles, o seleccionarlo y pulsar el botn de la barra de botones. ste ser incluido en la fila seleccionada en la etiqueta. Para eliminar una fila ya creada pulsamos el botn . Para desplazar un campo lo seleccionamos en la lista de Campos seleccio- nados y pulsamos los botones para desplazarlo una posicin arriba o abajo. Si queremos incluir un texto en la etiqueta, seleccionamos en la etiqueta la posicin donde queremos aadir y pulsamos el botn . Se abrir un pe- queo cuadro de dilogo, en el que hemos de escribir el texto. Una vez hayamos terminado pulsamos el botn Siguiente. Agrupar y Ordenar De nuevo podemos agrupar y ordenar las etiquetas segn alguno de los campos que tengamos en la tabla asignada. Al igual que antes, los agrupa- mientos fuerzan rupturas en el informe por el cambio del contenido de un campo. Estas rupturas pueden provocar nuevos encabezados o pies. Aadir Suprimir Subir, bajar Aadir texto Para aadir un agrupamiento pulsaremos el botn , para editarlo pulsa- remos el botn , para borrarlo pulsaremos el botn y para desplazar un agrupamiento usaremos los botones . Finalizacin del asistente Una vez creados los agrupamientos pulsamos el botn Finalizar para termi- nar con el Asistente de Etiquetas. En el panel de objetos aadidos apare- cer el informe que acabamos de crear. Para cambiar su identificador, pul- samos la tecla F2. Para editarlo pulsamos Intro o hacemos doble clic con el botn izquierdo del ratn, apareciendo la ventana de edicin. Veremos ms adelante cmo editar. Propiedades del Informe Una vez tenemos creado un informe o unas etiquetas, ejecutando la opcin de men Objetos/Propiedades, o las teclas Alt+Intro o el botn correspon- diente de la barra de herramientas, se presenta un cuadro de dilogo con las propiedades del informe. 08 Desarrollo completo de una aplicacin Aadir Propiedades Suprimir Subir, bajar 218 219 VELAZQUEZ VISUAL Velzquez Visual genera un identificador por defecto, que aparece en la ba- rra de ttulos del cuadro de dilogo y en el panel derecho del editor de pro- yectos. Este identificador puede ser modificado por el diseador. Las propiedades del informe se presentan a continuacin: Nombre: nombre que queremos dar al informe. Ser el que aparezca a la hora de elegirlo en las rejillas. Columnas de detalle: especificamos el nmero de columnas que tiene la seccin de detalles. Tabla: tabla de datos asociada al informe. Impresora lgica: permite seleccionar una de las impresoras lgicas defini- das en el proyecto para que el informe siempre sea lanzado a la impresora fsica que el usuario final conecte a la misma en tiempo de ejecucin. Privado: si activamos esta opcin, en tiempo de ejecucin el informe no estar visible en la lista de la opcin Especificar informe del men Ar- chivo. Diluir resto pgina: cuando se imprime un informe, si una seccin o los con- troles a imprimir son demasiado altos y no caben en el espacio disponible en la pgina, pasan a ser impresos en la pgina siguiente, lo que puede pro- vocar que en la pgina anterior quede un gran espacio en blanco desde la ltima lnea impresa hasta el final de la misma. Si activamos esta opcin se espaciar verticalmente lo que se va a imprimir en la pgina anterior con el fin de evitarlo. Papel apaisado: si activamos esta propiedad, cuando el informe sea lanza- do ser impreso de forma apaisada. Si no activamos, el informe ser im- preso en formato de papel vertical. Encolumnar vertical: para imprimir informes con varias columnas de detalle (etiquetas, por ejemplo). En vez de imprimir los registros por filas los impri- me por columnas. Mrgenes: Por defecto: al informe que le hayamos aplicado esta propiedad se le aplicarn los mrgenes que el usuario haya definido por defecto en el ejecutor. Ninguno: en este caso slo se le aplicarn los mrgenes mnimos de la im- presora. Estos mrgenes son invariables y el usuario final no podr modifi- carlos en el Ejecutor de proyectos. Fijos: de este modo se aplicarn los mrgenes que hayamos definido en la creacin del informe. Son invariables y el usuario final no podr modificar- los en el Ejecutor. En la parte inferior de la ventana de propiedades figuran las fuentes que uti- lizaremos en el informe. Disponemos de botones para aadir, sustituir o eli- minar fuentes. Editor de Informes Las partes fundamentales de un informe son: uno o varios Encabezados, la seccin de Detalle (que obligatoriamente ha de aparecer, aunque no se use) y uno o varios Pies. Podemos establecer una condicin para que una seccin determinada se imprima. Para ello seleccionamos el informe, entrando en el editor de infor- mes. Ahora seguimos los siguientes pasos: Marcamos la seccin del informe en la que queremos incluir la condicin. Seleccionamos la opcin Seccin de la barra de men. Seleccionamos la subopcin Condicin. Se abrir la ventana del Asistente de Frmulas, en la que escribiremos la frmula de condicin. Tambin podemos asociar un proceso a una seccin. ste ser disparado cada vez que la seccin sea impresa. El proceso ha de tener su origen en una ficha de la tabla de datos asociada al informe. Encabezados Hay tres tipos de Encabezados: Encabezado del informe, Encabezado de pgina y Encabezado de Agrupamiento. 08 Desarrollo completo de una aplicacin La presentacin preliminar de un informe es tambin una impresin, por lo tanto, los procesos asignados a las secciones tambin sern ejecutados en el momento de presentar el informe en pantalla. ADVERTENCIA 220 221 VELAZQUEZ VISUAL Para declarar cualquiera de estas cabeceras, la seleccionamos en la opcin Secciones del men principal. El Encabezado del informe se imprime, si existe, al inicio del informe. En l detallaremos los datos que queramos imprimir en el encabezado de la pri- mera hoja del informe. Podemos forzar un salto de pgina tras la salida del encabezado del informe, haciendo doble clic sobre el punto que aparece a la izquierda del texto indicador Encabezado del informe. El punto es susti- tuido por una letra P. El Encabezado de pgina se imprime al comienzo de cada una de las pginas. El Encabezamiento de agrupamiento se imprime cuando cambia el conteni- do del campo por el que hayamos declarado el agrupamiento. Lneas de Detalle En la seccin Detalle se especifica la manera de presentar la informacin de un registro de la tabla de datos de origen. Se imprimirn tantas lneas como registros tenga la lista. Si el total de las lneas de detalle a imprimir es ma- yor que el tamao del papel, se forzar un salto de pgina continuando en la hoja siguiente. En esta seccin es posible forzar un salto de pgina en cada lnea de deta- lle, haciendo igual que en el Encabezado de informe: pulsamos en el cua- dro que est a la izquierda del ttulo de seccin. Pies Hay tres tipos de pies: Pie de informe, Pie de pgina y Pie de agrupamien- to. Para declarar cualquiera de estos pies, lo seleccionamos en la opcin Secciones del men principal. El Pie de informe se imprime, siempre que est declarado, al final del infor- me. En l detallaremos los datos que queramos imprimir en el pie de la l- tima hoja del informe. El Pie de pgina se imprime al final de cada una de las pginas. El Pie de agrupamiento aparece al imprimir la ltima lnea de detalle de un agrupamiento. Aqu podemos forzar para que se produzca un salto de p- gina haciendo doble clic en el cuadro a la izquierda del ttulo del Pie de Agrupamiento, momento en el que aparecer una P. Regla 08 Desarrollo completo de una aplicacin 222 223 VELAZQUEZ VISUAL La Regla se encuentra en la parte superior de la pantalla, bajo la barra de controles. Por defecto se presenta en pulgadas, pero podemos visualizarla en centmetros seleccionando la opcin Ver/Regla en centmetros. Para vi- sualizar de nuevo la regla en pulgadas, ejecutamos la misma opcin. Podemos ayudarnos con ella para establecer la anchura del informe. Para ello hacemos clic sobre la lnea que representa el margen derecho de la p- gina y, sin soltar el botn del ratn, la arrastramos hacia la posicin que de- seemos. A travs de la marca de alineacin de la regla , y con ayuda de los boto- nes de maquetacin que veremos ms adelante, podremos alinear entre s controles de distintas secciones. Propiedades comunes de los controles En el Editor de informes, si hacemos doble clic sobre cualquier control del mismo se abrir el cuadro de Propiedades control de informe. Alineacin de la regla Este cuadro tiene tres pestaas que son comunes a todos los controles: Es- tilos, Aspecto y Fuentes informe, en las que encontraremos una serie de op- ciones que podrn ser activadas segn el tipo de control de que se trate. Ade- ms, contiene una o dos pestaas adicionales especficas de cada control. Veamos las pestaas comunes: Estilos: existen las opciones siguientes: 08 Desarrollo completo de una aplicacin 224 225 VELAZQUEZ VISUAL Altura variable: activada esta opcin no tendremos que controlar la altu- ra del control para que se impriman todas las lneas, sino que el nmero de lneas se calcular automticamente al imprimir el informe. Puede partirse: activada esta propiedad, si el contenido del control a im- primir no va a caber entero en una pgina, ser partido, es decir, se im- primir parte en la pgina actual y parte en la pgina siguiente. til para controles de tipo objeto texto, objeto dibujo y texto o rejilla de histrico. Actualmente es una opcin no operativa. Condicin visible: si activamos esta opcin se abrir el asistente para la edicin de frmulas, donde escribiremos la frmula que se ha de cum- plir para que el control sea visible. Cadena de formato de la fecha: podremos determinar el formato de la fe- cha por medio de etiquetas que iremos aadiendo con el botn Aadir formato. Tenemos todas las opciones que explicamos en el Asistente pa- ra la creacin de cadenas de formato. Aspecto: esta pestaa contiene las opciones: Fuente: elegimos el tipo y tamao de letra de entre los que hayamos es- pecificado en las propiedades del informe. Alineamiento: tenemos Horizontal y Vertical del control con respecto a su marco. En el primero podemos alinear el contenido a la Izquierda, a la Derecha, al Centro o Justificado. En el segundo podemos ajustar el tex- to a la parte Superior, Inferior, en la Lnea base, Multilneas (obligatorio si queremos que se presenten varias lneas, ajustando entonces a la parte superior) y centrado Vertical. Separador de miles: si se trata de un campo numrico activaremos esta opcin si queremos que sea impreso con separador de miles. N decimales: si se trata de un campo numrico, nos permitir especifi- car el nmero de decimales que deseemos imprimir. Borde: nos permite establecer bordes superior, inferior, izquierdo y/o de- recho a un control, con el grosor de lnea que se especifique. Colores: tanto para el fondo como para el texto del control. Fondo transparente: el control que tenga esta propiedad activada ser impreso con fondo transparente; es decir, los controles que se encuen- tren bajo el fondo del control sern visibles. As podremos, por ejemplo, superponer texto sobre dibujos. Fuentes de informe: en esta pestaa podremos modificar las fuentes que son accesibles para los controles del informe. Con los botones de la barra podremos: Aadir una nueva fuente. Sustituir la fuente seleccionada. Suprimir la fuente seleccionada. Suprimir las fuentes que no estn siendo utilizadas en el informe. Subir y Bajar la fuente una posicin. Controles Los controles se encuentran situados bajo la barra de herramientas. Para si- tuar un control en un informe hacemos clic sobre el botn correspondiente, arrastramos el ratn hasta la posicin del informe donde queremos situarlo y pulsamos el botn izquierdo del ratn para soltarlo. Haciendo doble clic sobre un control podremos especificar sus propiedades. Disponemos de los siguientes controles: Modo de edicin: restaura el puntero del ratn para cancelar la selec- cin de un control. Este modo se usa para mover controles o cambiar sus tamaos. Dibujo esttico: sirve para insertar un objeto dibujo en el informe. En la pestaa Dibujo tendremos que seleccionar el dibujo que queramos de la lista de identificadores de dibujos incluidos en el proyecto, pudiendo previsualizarlo en la parte derecha de la ventana. Para redimensionar el di- bujo una vez incrustado en el informe a su tamao original pulsamos la te- cla F7. 08 Desarrollo completo de una aplicacin Aadir Sustituir Suprimir Suprimir Subir y Bajar Modo de edicin Dibujo esttico 226 227 VELAZQUEZ VISUAL Figura: sirve para insertar figuras, lneas, curvas, etc., en el informe. En la pestaa Figura, especfica de este control, podremos seleccionar: Tipo de figura: las figuras predeterminadas son: lnea vertical, lnea horizon- tal, rectngulo, rectngulo redondeado y crculo. Grosor de lnea: especificaremos un nmero que indicar el grosor (en pun- tos) de la lnea. Colores de Lnea: color que tendr la lnea de la figura. Por defecto es el negro. Figura Relleno?: activaremos la opcin de que el control tenga un color de relleno. Color de Relleno: por defecto el color de relleno de la figura es blanco (nin- guno), para cambiarlo activamos esta opcin y seleccionamos un color pa- ra el relleno. Texto esttico: sirve para aadir texto esttico al informe. En las propie- dades generales slo hemos de escribir el texto que queremos presentar. Hemos de escribir directamente, sin utilizar comillas ni operadores para concatenar, pues se trata de una cadena de formato. Pgina-Fecha: permite concatenar textos y variables para mostrarlas en el informe. Incluye formateadores de fechas, horas, nmero de pginas, n- mero de elementos, etc. Las propiedades que podemos escoger son: Texto: podremos escribir un texto y aadir las variables de sistema que que- ramos. Para obtenerlas, elegimos en el combo la que queremos poner y pulsamos el botn Aadir. Se trata de una cadena de formato, as que no tendremos que escribir el texto entrecomillado ni utilizar el signo + para concatenarlo a los formateadores. 08 Desarrollo completo de una aplicacin Texto esttico Pgina-Fecha 228 229 VELAZQUEZ VISUAL Ejemplo Si queremos que en el pie de pgina aparezca Pgina 1 de 8, en este con- trol tendramos que escribir: Pgina %P de %T. Cada vez que necesitemos aadir una nueva variable, la seleccionamos de la lista desplegable y pul- samos el botn Aadir, de modo que si necesitamos que aparezca la hora (por ejemplo), pulsamos la variable del combo Hora (0-23), apareciendo en el texto %H. Campo: este control imprime el contenido de un campo del registro en curso. Una vez que situamos el control en el informe, slo tendremos que especificar el Campo a imprimir de la lista de campos que se presenta. Una vez seleccionado pulsamos el botn Aceptar. e Campo Objeto texto: este control imprime el contenido de un campo tipo Obje- to Texto del registro en curso. Una vez que situamos el control en el informe, se abrir un cuadro de di- logo en el que se mostrar la lista de los campos de este tipo de la tabla de datos a la que est asociada el informe y de sus tablas enlazadas. Selec- cionamos el que queramos incluir y pulsamos el botn Aceptar. Una vez he- cho esto, podemos volver a editar las propiedades del control y cambiar el que hemos elegido por otro. 08 Desarrollo completo de una aplicacin Objeto Texto 230 231 VELAZQUEZ VISUAL En la pestaa Aspecto, puesto que este control ha de imprimirse en varias lneas, tendr que ser definido como Multilneas en Alineamiento del texto: Vertical. Activando la opcin Altura variable en la pestaa Estilos no tendremos que controlar la altura del control para que se impriman todas las lneas, sino que el nmero de lneas se calcular automticamente al imprimir el informe. Objeto Dibujo: este control imprime el contenido de un campo tipo Ob- jeto Dibujo del registro en curso. Una vez situado el control en el informe, se abrir un cuadro de dilogo en el que se mostrarn todos los campos de este tipo de la tabla de datos a la que est asociada el informe. Seleccio- namos el campo que queramos y pulsamos el botn Aceptar. Un Objeto Dibujo tiene dos pestaas en el cuadro de dilogo de propieda- des, una para cambiar el objeto al que est referido y otra que nos permite activar las siguientes opciones: 08 Desarrollo completo de una aplicacin Objeto Dibujo 232 233 VELAZQUEZ VISUAL Modo de visualizacin: podemos elegir entre Encoger/Estirar rea comple- ta (ocupa todo el rea que asignemos al objeto), Tamao original, Tamao original centrado, Encoger/Estirar proporcionado (asigna todo el rea que pueda pero sin distorsionar la imagen) o Mosaico. % Zoom: tanto por ciento de zoom. Alineamiento del dibujo: puede ser Horizontal (Izquierda, Centrado, Dere- cha) y Vertical (Superior, Centrado, Inferior). Cuando diseamos un informe en el que incluiremos campos de tipo Obje- to Texto y campos de tipo Objeto Dibujo con la propiedad Altura variable ac- tiva, Velzquez Visual actuar de forma inteligente en su composicin, en funcin de la altura que vaya a tener cada uno de los controles. Objetos Dibujo y Texto: este control permite agrupar un control de tipo Objeto Dibujo y otro de tipo Texto. Es decir, crea un control nico con am- bos objetos, lo que permitir una ptima presentacin de los mismos en el informe. Al crearlo nos pide seleccionar el campo tipo Objeto Dibujo que queremos imprimir. Una vez situado el control sobre el informe, al editar sus propie- dades, aparecer el cuadro de Propiedades de controles de informes en el que podremos elegir el Objeto Texto queremos incluir. 08 Desarrollo completo de una aplicacin Objetos Dibujo y Texto 234 235 VELAZQUEZ VISUAL Para seleccionar el campo de tipo Objeto Texto tenemos que pulsar el bo- tn Cambiar, que se encuentra bajo el control que muestra el identificador del campo de tipo objeto texto. De la lista de campos de tipo objeto texto que aparece escogeremos el que necesitemos. En funcin de la anchura del control y del propio dibujo cambiar la forma en que se vayan a presentar ambos controles en el informe: Si hay anchura suficiente para imprimir el dibujo y el texto, se imprimir el texto a la izquierda y el dibujo a la derecha. Si no hay anchura suficiente para imprimir el dibujo y el texto, el dibujo se presentar centrado y el texto debajo. Clculo: este control permite imprimir el resultado de un clculo defini- do en el informe. Seleccionaremos uno de la lista de clculos que se mues- tra al crear un control de este tipo. Variable global: este control permite imprimir el contenido de una varia- ble global definida en el proyecto. Una vez situado el control sobre el infor- me tendremos que seleccionar qu variable global queremos imprimir de las de la lista que se muestra en pantalla. El resto de las propiedades no estn disponibles en la versin actual. Velzquez Visual compone automticamente la forma en que ambos controles van a ser impresos (el texto a la izquierda y el dibujo a la derecha). Por tanto, aunque se muestra la pestaa Objeto Dibujo, no estn activas sus opciones. ADVERTENCIA Clculo Variable global Una vez posicionado el control, pulsando con el botn de la derecha del ra- tn podemos editar las propiedades. Frmula: este control permite incluir una frmula en la seccin en la que la utilicemos. Por ejemplo, en el detalle podemos realizar operaciones en- tre campos, siendo stas realizadas por cada lnea de detalle. Podemos 08 Desarrollo completo de una aplicacin Frmula 236 237 VELAZQUEZ VISUAL utilizar el Asistente para la edicin de frmulas pulsando el botn Asisten- te frmula. En el parmetro Tipo resultado especificaremos cul va a ser el resultado de la operacin; podr ser un nmero, una fecha o una cadena (alfabtico). Cdigo de barras: este control permite imprimir el contenido de un campo o de una frmula utilizando uno de los tipos permitidos de cdigo de barras. Sus propiedades son: Cdigo de barras Tipo de cdigo: seleccionaremos uno de los soportados por Velzquez Vi- sual. stos son: Ean 13, Ean 8, UPC, Code 39, Code 39 Extend, Interleaved 2 of 5, Code 128 (Cdigo normalizado por los bancos y cajas de ahorros pa- ra documentos financieros), Code 11, Codabar. Color de barras: el color con el que queremos imprimir las barras (por de- fecto es el negro). Zoom: si queremos imprimir el cdigo de barras al 100% de su tamao o a un tamao menor. Para editar la frmula que calcula el cdigo de barras tenemos la pestaa Frmula en las propiedades, desde la que podemos llamar al Asistente de Edicin de frmulas. Rejilla de histrico: esta funcin nos permite ver una rejilla de una ta- bla histrica de la tabla asociada al informe. La primera pestaa del cua- dro de propiedades del control es Histrico, que tiene las siguientes pro- piedades: Histrico: en este control seleccionamos la tabla de datos histrica de la asociada al informe que queremos imprimir. Seleccin: seleccin de los registros histricos a imprimir, pueden ser todos o slo los que se encuentren entre los lmites que especifiquemos. Todos: activada esta opcin se imprimirn todos los histricos del registro en curso. 08 Desarrollo completo de una aplicacin Rejilla de histrico 238 239 VELAZQUEZ VISUAL Para poder determinar los registros que aparecern, el ndice que enlaza las dos tablas (y que se encuentra en la tabla histrica) debe tener un compo- nente ms, que ser por el que discriminemos los registros. Tendremos que establecer tanto el Lmite inicial como el Lmite final, pudiendo usar para ello el Asistente para la edicin de frmulas. Ejemplo Tenemos una tabla de Clientes y una tabla de Tareas. Un Cliente tiene mu- chas Tareas, y una Tarea tiene un Cliente. Clientes es Maestra y Tareas es su histrica: la relacin singular-plural va de Clientes a Tareas. Por tanto, Ta- reas tiene un ndice llamado CLIENTES que es el que enlaza la tabla con su maestra. Aadimos al ndice un componente que puede ser, por ejemplo, el campo Fecha de la Tarea. Ahora, al crear un informe asignado a la tabla de Clientes, podemos presentar las tareas de un cliente, pero discriminadas segn la fecha. Por ejemplo, podemos imprimir las tareas a realizar para el cliente en la fecha de hoy, usando como Lmite Inicial y Lmite Final la fecha del da, con ayuda de la funcin fHoy(). La segunda pestaa del cuadro de propiedades se denomina Rejilla y pre- senta la propiedad Rejilla, control en el que seleccionamos la rejilla con la que imprimiremos los registros de la tabla histrica seleccionada. e En el informe se imprime la rejilla seleccionada, por lo que se utilizarn los colores de cabeceras de fondo y texto de cabeceras, cuerpo y pie, as co- mo las fuentes definidas en la rejilla. Grfico: este control permite que imprimamos una hoja de clculo de una tabla de datos histrica de la tabla de datos asociada al informe. El contenido del mismo cambiar en funcin de la seccin en la que est si- tuado. Las propiedades de la pestaa Histrico son: Histrico: tabla de datos histrica de la tabla de datos a la que hemos aso- ciado el informe, para la que hemos definido con anterioridad un objeto Ho- ja de clculo. 08 Desarrollo completo de una aplicacin En el caso de que posicionemos este control en el Detalle, nos mostrar los histricos de la tabla a la que est asignada el informe. Sin embargo, si lo llevamos al Encabezado o el Pie de Pgina nos mostrar una lista de registros del maestro, por lo que nos pedir una rejilla de ste para mostrar los datos. ADVERTENCIA Para una correcta presentacin del informe daremos al control una altura mnima y le activaremos la opcin Altura variable. Esto permite que el control ocupe solamente la altura que necesite. TRUCO Grfico 240 241 VELAZQUEZ VISUAL Seleccin: podemos elegir Todo (todo el histrico del registro maestro que se imprima), y si no un Lmite inicial (lmite a partir del cual se comenzar a tomar en cuenta los datos del histrico para la generacin de la hoja de cl- culo), y un Lmite final (lmite hasta el que se comenzar a tomar en cuenta los datos del histrico para la generacin de la hoja de clculo). En la pestaa Grfico tendremos que elegir la hoja de clculo que queremos usar de las asignadas a la tabla histrica. Las propiedades de la pestaa son: Hojas de clculo: identificador de la hoja de clculo de la tabla histrica. Tipo de grfico: que vamos a imprimir (lneas, gant, barras, etc.). Fuente: la que vamos a usar de entre las especificadas en las propiedades del informe. Ver ttulos filas: si queremos que se impriman los ttulos de las filas. Ver ttulos columnas: si queremos que se impriman los ttulos de las columnas. Ejemplo: Grfico Tenemos de nuevo una tabla de Clientes y una tabla de Tareas. Tareas es histrica de Clientes y tenemos una Hoja de Clculo que nos dice cuntas tareas fueron realizadas por cliente por mes. En un informe de clientes, in- troducimos un control Grfico en el Detalle al que le asignamos como his- trico TAREAS por el ndice CLIENTE. Decimos que los lmites sean dos va- riables a las que daremos un valor en un proceso. En la pestaa Grfico es- cogemos la hoja de clculo que habamos creado y elegimos el tipo de gr- fico a presentar y si queremos ver los ttulos. Ahora tenemos un informe para un cliente, en el que vemos en un grfico las tareas por mes realizadas para ste, entre dos fechas escogidas a tra- vs de un proceso. Secuencias de escape: este control nos permite enviar secuencias de escape directamente a la impresora, tales como, por ejemplo, apertura de cajn. Como nico parmetro se solicita la secuencia de bytes. Segn la impresora de que se trate, los bytes correspondientes a cada cdigo varia- rn. Podremos especificar tantos bytes como necesitemos y para separar los bytes podremos utilizar: coma (,), punto (.), dos puntos (:), punto y coma (;) y la barra de divisin (/). Estos cdigos deben ser introducidos en base 10 (decimal). 08 Desarrollo completo de una aplicacin La situacin de un control de este tipo en un informe no determina el orden de envo de datos a la impresora. Windows manda primero los cdigos de escape y luego el informe, con lo que no podemos contar con que se lance dependiendo del lugar en el informe que lo pongamos. Para situaciones en las que necesitamos un corte de papel, un cierto comando de la impresora en cierta parte del documento, etc., debemos usar las propiedades del driver de la impresora. ADVERTENCIA e Secuencias de escape 242 243 VELAZQUEZ VISUAL Para utilizar fuentes de impresora debemos ejecutar la opcin Archivo/Es- pecificar impresora y seleccionar la impresora sobre la que vayamos a dis- parar el informe. No todas las impresoras admiten fuentes de impresora. Sin embargo, el uso de este tipo de fuentes es necesario, por ejemplo, para in- formes lanzados en impresoras de ticket. Aunque no tengamos la impreso- ra instalamos el controlador y con ste ya tenemos los datos necesarios pa- ra usar sus tipos de letra. Una vez seleccionada la impresora, podremos aadir al informe fuentes pro- pias de dicha impresora. Se distinguirn por tener delante el smbolo . Ejemplo: Secuencias de escape Un informe, para una TPV marca BPM GIGANT, que abra el cajn e impri- ma el informe. En el encabezado del informe situamos, en primer lugar, una secuencia de escape para la apertura del cajn. A continuacin podemos situar los dems controles del encabezado. Para la impresora de este ejemplo los cdigos sern: 27, 80, 0. Para el resto de los controles (textos estticos, campos, etc.) utilizaremos un tipo de fuente estndar de la impresora. Clculos Se encuentran situados en el men Edicin/Clculos. Aqu podemos definir todos los clculos que forman parte del informe. Tambin se dar el caso de necesitar nuevos Agrupamientos, que podremos crear en el men Edi- cin/Agrupamientos. En el caso de trabajar con un TPV (terminal punto de venta: una expendedora de tickets), el visor (pantalla de la TPV) debe estar conectado al mismo puerto que la impresora. ADVERTENCIA El hecho de trabajar con las fuentes propias de una impresora de texto se justifica en que la impresin ser ms rpida. Pero con stas tambin surge un problema, que es el de la tabulacin. El orden que han de seguir los controles en un informe, para que no d problemas la impresora, tiene que ser el orden de tabulacin propio de la impresora, es decir, de izquierda a derecha y de arriba abajo. Para asegurarnos de que sea as tenemos que ir cortando y pegando de nuevo cada uno de los controles en orden. ADVERTENCIA e Fuentes propias de la impresora Los clculos se guardan en variables locales al informe y se realizan en tiem- po de ejecucin empleando las expresiones frmula definidas. En estas ex- presiones podemos incluir campos de la tabla de datos origen o de cual- quiera de las enlazadas con sta. Suelen utilizarse para clculos en pies to- talizadores. Al aadir o modificar un clculo se presenta la ventana Definicin clculo de informe, donde les asignaremos un nombre y un identificador al igual que el resto de los objetos de Velzquez Visual. En la opcin Inicializar en especificaremos dnde se debe inicializar el cl- culo en tiempo de ejecucin. Podemos inicializarlo al principio del informe (el clculo se pondr a 0 solamente al principio del informe) o, si hemos de- finido agrupamientos, al principio de un agrupamiento, siendo aconsejable 08 Desarrollo completo de una aplicacin 244 245 VELAZQUEZ VISUAL en este caso incluir en el informe la seccin de Pie del Agrupamiento, aun- que no se imprima ningn dato en ella. En Frmula introducimos cualquier expresin algebraica o booleana. Para ms comodidad disponemos del Asistente para la edicin de frmulas. El estilo puede ser Absoluto o no. Si es Absoluto, el clculo tomar el resultado de la frmula para cada registro, si no lo es, el clculo se har acumulando los resultados de todos los re- gistros. Para utilizar un clculo en el informe seleccionamos el control Clculo si- tuado en la barra de controles, lo pegamos en la posicin deseada, hacien- do doble clic sobre l para obtener sus propiedades y elegimos, en la lista desplegable Clculo, el identificador correspondiente al clculo que quere- mos incluir. Un clculo puede ser utilizado en distintas secciones e incluso varias ve- ces en la misma seccin. Cuando utilizamos los clculos en el pie de un informe o de una seccin para totalizar una columna, el programa crea au- tomticamente una nueva variable local, llamada igual que el clculo pe- ro precedida de los caracteres T$. Estas variables locales podemos utili- zarlas en las lneas de detalle del informe para realizar diversos clculos estadsticos. Ejemplo: creacin de un informe con clculos Tenemos un proyecto para VENTAS de CLIENTES (CLIENTES es maestro de VENTAS, y queremos presentar un informe como el que sigue: VENTAS A CLIENTES Fernando Fernndez Fernndez 1/1/97 100.000 2/5/97 50.000 Total: 150.000 Gonzalo Gonzlez Gonzlez 2/2/97 25.000 5/2/97 5.000 Total: 30.000 e Enrique Enrquez Enrquez 22/10/97 200.000 26/12/97 250.000 Total: 250.000 1/1/97 100.000 2/5/97 50.000 Total: 150.000 TOTAL VENTAS: 430.000 Seleccionamos el objeto Informe para impresora de la Galera de objetos y lo asociamos a la tabla de VENTAS. Necesitaremos Encabezado de informe (para situar el ttulo del mismo) y un Pie de informe (para incluir el total general de ventas) y un Encabezado de agrupamiento. Ejecutamos la opcin Secciones/Cabecera de informe para crear la seccin de Encabezado de Informe. Ejecutamos la opcin Seccio- nes/Pie informe para crear la seccin de Pie de Informe. 08 Desarrollo completo de una aplicacin e 246 247 VELAZQUEZ VISUAL Puesto que queremos agrupar las ventas por cliente, tendremos que crear un agrupamiento. Ejecutamos la opcin Edicin/Agrupamientos. Se abrir la ventana Ordenar y Agrupar. En ella pulsamos el botn Aadir y seleccionamos, de la lista de campos, el campo NOMBRE del cliente (%CLIENTES.NOMBRE%) y seleccionamos Orden ascendente (as se im- primirn los clientes ordenados alfabticamente por su nombre). Puesto que queremos imprimir por cada cliente su total de ventas correspondien- te, activamos las opciones Encabezado y Pie. e Veamos ahora cmo hemos de crear los clculos: Clculo del total general de ventas: ejecutamos la opcin Edicin/Clculos y pulsamos el botn Aadir en la ventana Clculos de un informe. Como Nombre escribimos Total ventas y como Identificador TOTAL VENTAS. Lo iniciaremos en el principio del informe y como frmula especificamos sim- plemente el campo %TOTAL% de la tabla. Dejaremos sin activar la opcin Absoluto, con lo que acumular todas las cantidades de todas las ventas de la lista. Si la activramos el resultado del clculo sera el contenido del campo %TOTAL% de la ltima lnea del informe. 08 Desarrollo completo de una aplicacin e 248 249 VELAZQUEZ VISUAL Clculo del total de ventas por cliente: ejecutamos la opcin Edicin/Cl- culos y pulsamos el botn Aadir en la ventana Clculos de un informe. Co- mo Nombre escribimos Ventas Cliente y como Identificador VENTAS CLIENTE. Lo inicializamos en la seccin CLIENTES -> NOMBRE (porque as el clculo se pondr a 0 cuando empiece a imprimirse un nuevo cliente) y no activamos la opcin Absoluto (si la activsemos el resultado del clculo sera el contenido del campo %TOTAL% de la ltima venta del ltimo clien- te del informe). Como frmula especificamos simplemente el campo %TO- TAL%. De esta forma acumular todos los totales de las ventas de cada cliente. e Veamos ahora las secciones: Encabezado del informe: situamos en el mismo un control de Texto estti- co, y como texto escribimos: Listado de ventas a clientes, asignndole las propiedades que veamos convenientes. Encabezado de Cliente -> Nombre: situamos en esta seccin un control de Campo y seleccionamos el campo NOMBRE de la tabla de CLIENTES (%CLIENTES.NOMBRE%) y le asignamos las propiedades que veamos. Detalle: situamos dos controles de Campo, uno con el campo %FECHA%y otro con el campo %TOTAL%. Pie de Cliente -> Nombre: situamos un control de Texto esttico con el tex- to Total ventas cliente: y junto a ste el clculo VENTAS CLIENTE. Pie del informe: situamos un control de Texto esttico con el texto Total ven- tas: y junto a ste el clculo TOTAL VENTAS. 08 Desarrollo completo de una aplicacin e 250 251 VELAZQUEZ VISUAL Asociamos este informe a una rejilla de la tabla VENTAS y ya estar listo pa- ra ser ejecutado. Ejemplo: Creacin de un informe Vamos a crear un informe que presente los datos del modo siguiente: ARTICULO PRECIO CANTIDAD TOTAL %VENTAS Tuercas 7,5 10 75 75.00% Tornillos 2,5 10 25 25.00% TOTAL: 100 Las columnas ARTICULO, PRECIO, CANTIDAD y TOTAL corresponden a los campos de la tabla de ventas. El total del pie es un clculo totalizador (que acu- mula los totales de cada artculo) que hemos llamado TOT-VENTAS y en la co- lumna %VENTAS se recoger otro clculo, que hemos llamado PORC-VENTAS. e e Una vez que creamos el clculo totalizador del Pie del informe (TOT-VEN- TAS), el programa generar automticamente una nueva variable local, que llamar T$TOT-VENTAS. Para la creacin del clculo del porcentaje creamos un nuevo clculo, que llamaremos PORC-VENTAS, en el cual escribiremos la frmula siguiente: 100 * %CANTIDAD% / (T$TOT-VENTAS | 1) La cantidad la dividimos por la variable o por 1 para evitar un error de divisin por cero en el caso de que no se haya vendido ninguna unidad de un artculo. 08 Desarrollo completo de una aplicacin e 252 253 VELAZQUEZ VISUAL Podemos, o bien agrupar por artculo y entonces inicializar en cada artcu- lo, o bien usar el estilo Absoluto, para que el valor sea el de cada artculo. En unos casos nos interesar ordenar las lneas, as que podremos usar ese campo para cambiar de seccin, en otro no podremos y tendremos que usar el estilo Absoluto (por ejemplo, si mostramos las ventas de artculos por fecha, donde hay varios artculos, varias fechas y no podemos agrupar). A este tipo de clculos conviene ponerles decimales, porque en muchas ocasiones se da el caso de que el valor resultante es un nmero compren- dido entre 0 y 1, de modo que si no hemos especificado el clculo con de- cimales saldra simplemente 0. Maquetacin Al igual que en formularios y mens, tenemos una serie de herramientas pa- ra maquetar los controles de un formulario. Los cuatro primeros botones alinean los controles seleccionados por los bordes izquierdo, derecho, superior e inferior, respectivamente, del control seleccionado en ltimo lugar. Los dos siguientes centran los controles horizontal y verticalmente, respectivamente, dentro del men. Los dos siguientes espacian tres o ms controles a la misma distan- cia horizontal y vertical entre ellos, respectivamente. Estos dos alinean los botones seleccionados horizontal o vertical- mente con respecto al que haya sido seleccionado en ltimo lugar. Estos tres dan a varios controles el mismo ancho, el mismo alto y el mismo ancho y alto, respectivamente, del control seleccionado en ltimo lugar. Los dos ltimos botones Alinea izquierda con la marca y Alinea de- recha con la marca hacen referencia a la marca de alineacin situada en la regla. Podemos alinear controles de distintas secciones a travs de la mar- ca de alineacin de la regla. Para ello situamos la marca en la posicin de la regla que queramos, seleccionamos un control y lo alineamos a la derecha o a la izquierda de la marca. Seleccionamos el control de otra seccin que deseemos alinear con el anterior y de nuevo lo alineamos con la marca. e Alinear Centrar Repartir Adjuntar Dimensionar Alinea izquierda con la marca Alinea derecha con la marca Adems de estas formas de maquetacin existen dos opciones en men Maquetar/Alinear, que son: Vertical: centra verticalmente todos los controles seleccionados con res- pecto a la posicin del ltimo. Horizontal: centra horizontalmente todos los controles seleccionados con respecto a la posicin del ltimo. Por ltimo, Tamao del contenido F7 nos redimensionar el control al ta- mao de lo que contiene. La posicin y las dimensiones de un control se mostrarn en la barra de estado. Adems tenemos otros dos controles que nos permiten alinear controles entre distintas partes del informe. Resumen Los objetos visuales rbol visor de tablas, casillero, agendizador e informe permiten presentar en pantalla o imprimir los registros de las tablas. rbol Visor de Tablas : presentan en distintos niveles y de forma grfi- ca la informacin de una Tabla de datos Maestra con clave arbolada. Casillero : presenta cada registro en una casilla, siendo cada casilla un botn que permite disparar un proceso al hacer clic sobre ella. Agendizador : es un calendario sincronizado con una rejilla, de modo que al seleccionar una fecha en el calendario, se presentan en la rejilla los re- gistros que tengan dicha fecha. Informes : se utilizan para presentar en papel una lista de registros de una tabla de datos. Su estructura bsica consiste en Encabezado, Detalle y Pie, pudiendo agrupar y ordenar por campos los datos contenidos en el informe. Velzquez Visual cuenta con asistentes para la creacin de informes y etique- tas, as como un editor de informes, en el que podemos seleccionar distintos controles a incluir en el informe (dibujos, textos, campos, grficos, secuencias de escape, rejillas de histricos, etc.), definir clculos, maquetar, etc. 8.5.16. Pgina Html Este objeto nos permite generar una pgina HTML, que podr ser servida a cualquier navegador de Internet (IExplorer, Netscape, etc.) con el Servidor Http del Servidor de Aplicaciones de Velzquez Visual. Cuando selecciona- mos este objeto de la Galera de Objetos, deberemos especificar las pro- piedades siguientes: 08 Desarrollo completo de una aplicacin rbol Visor de Tablas Casillero Agendizador Informe Pgina Html 254 255 VELAZQUEZ VISUAL Descripcin: nombre de la pgina Html. Tabla de datos: tabla de datos a la que vamos a asociar la pgina Html. Generador Html: Permite especificar ciertos parmetros para la pgina Html que crearemos: Ttulo: ttulo de la pgina. Imagen de fondo: si queremos incluir alguna imagen de fondo en la pgina hemos de especificarlo en este parmetro. Colores: permite especificar los colores de fondo y de texto de los enlaces: estado normal, cuando ya han sido ejecutados y cuando son pulsados. To- dos los colores pueden ser marcados como por defecto o no en la pgina. Una vez especificadas las propiedades del Generador Html, al entrar en el Editor de Pginas Html, ya estarn creadas las secciones de cabecera y de cuerpo de la pgina con los atributos especificados. Podemos asociar una pgina Html a una Bsqueda, lo que permitir pre- sentar el resultado de sta en una pgina web. Para obtener de nuevo el cuadro de propiedades de una pgina Html, bas- tar con seleccionarla en el panel derecho del Editor y pulsar la combina- cin de las teclas Ctrl+Intro. Para abrir el Editor de Pginas Html, nos situaremos sobre el control y pul- saremos la tecla Intro o haremos doble clic sobre l con el botn izquierdo del ratn. Una vez creada la Pgina Html, si consultamos sus propiedades podremos modificar su Nombre y la tabla de datos asociada. Para una aplicacin, la pgina que se presenta por defecto ser aquella que tenga como identificador INDEX. Para ello, o bien la renombramos noso- tros, o bien usamos la opcin del men Comunes/Convertir en/Pgina Html principal. 08 Desarrollo completo de una aplicacin Es aconsejable crear un archivo HTML que incluya enlaces a las diferentes pginas Html generadas en las aplicaciones de Velzquez Visual que vayan a ser servidas, y guardarlo en la misma mquina en la que se encuentre el Servidor de Aplicaciones de Velzquez Visual. En dicho Servidor habr que especificar que ese ser el archivo Html por defecto. Una vez hecho esto, para acceder a la pgina Html desde cualquier navegador de Internet simplemente bastar con escribir HTTP:// seguido de la IP o el nombre de Servidor. ADVERTENCIA 256 257 VELAZQUEZ VISUAL Crear una Pgina Html a partir de una rejilla Si seleccionamos una rejilla de nuestro mapa, pulsando en la opcin de me- n Objetos/Crear pgina html del objeto nos generar un objeto Pgina Html con una tabla de las mismas caractersticas que la que hemos seleccionado: mismos campos, justificacin de los mismos, colores de las columnas, etc. A continuacin de crearlo podremos editarlo igual que otra Pgina Html cualquiera. 8.5.17. Componente Html Este objeto nos permite crear trozos de cdigo html o pginas completas que posteriormente podrn ser utilizados para generar pginas desde pro- cesos a travs de la instruccin Html: Ejecutar componente. Sus propiedades son las siguientes: Componente Html Nombre: nombre que tendr el componente. Tabla de datos: en la lista desplegable seleccionaremos la tabla de datos de origen del mismo; si no va a estar asociado a ninguna tabla seleccionare- mos .Ninguna. Parmetros: este objeto permite definir parmetros que podremos usar den- tro del cdigo Html que escribamos. Dichos parmetros sern resueltos en un proceso a travs de la instruccin Html: Ejecutar componente. Los par- metros han de ir separados por comas (,). Ejemplo:param1param2,param3. Una vez aceptado este cuadro de dilogo, podremos pasar al editor de c- digo Html; para ello pulsaremos la tecla Intro o haremos doble clic con la te- cla izquierda del ratn sobre el componente que hemos creado en el panel de objetos visuales. El editor de cdigo html es el mismo que el de las p- ginas html. Crear un Componente Html a partir de una rejilla Si seleccionamos una rejilla de nuestro mapa, pulsando en la opcin de me- n Objetos/Crear componente html del objeto nos generar un objeto Pgi- na Html con una tabla de las mismas caractersticas que la que hemos se- leccionado: mismos campos, justificacin de los mismos, colores de las co- lumnas, etc. A continuacin de crearlo podremos editarlo igual que otro Componente Html cualquiera. Resumen Existen dos objetos especficos para el uso Web de Velzquez Visual: Pgina HTML : permite generar una pgina HTML, que podr ser servi- da a cualquier navegador de Internet (IExplorer, Netscape, etc.) si se ha ad- quirido el Servidor Http del Servidor de Aplicaciones de Velzquez Visual. 08 Desarrollo completo de una aplicacin Pgina HTML 258 259 VELAZQUEZ VISUAL Componente HTML : este objeto permite crear trozos de cdigo html o pginas completas que posteriormente podrn ser utilizados para gene- rar pginas desde procesos a travs de una instruccin de proceso. 8.5.18. Editor de Pginas Html El Editor de Proyectos de Velzquez Visual incluye un Editor de Pginas Html. Para abrirlo basta con situarse sobre un objeto Pgina Html o Com- ponente Html en el panel derecho del Editor de Proyectos y pulsar la tecla Intro o hacer doble clic con el botn derecho del ratn sobre l. En este editor podemos, por un lado, editar cdigo Html puro para la pre- sentacin de pginas web estticas, pero, adems, podemos usar coman- dos de Velzquez Visual, denominados AVP en el editor, lo que nos permi- tir presentar pginas web dinmicas. Controles y propiedades El editor incluye una barra de botones, cuyas funciones son: Pegar desde: para importar un fichero Html. Se abrir la ventana de se- leccin de fichero en la que tendremos que seleccionar el archivo Html a im- portar. Una vez seleccionado, aparecer el cdigo fuente de la pgina en el Editor Html. Insertar color: aparecer la ventana para la seleccin de colores, basta- r con que seleccionemos el que queremos usar y el cdigo hexadecimal del mismo ser insertado en el punto del texto donde estuviese situado el cursor. #006400 Componente HTML Pegar desde Insertar color Insertar archivo: Insertar fuente: al pulsar este botn se presentar el cuadro de dilogo de seleccin de fuentes e insertar el cdigo fuente del tipo de fuente y atri- butos seleccionados. Por ejemplo: <FONT face=Times New Roman size=3 color=#000000></FONT> 08 Desarrollo completo de una aplicacin Insertar archivo Insertar fuente 260 261 VELAZQUEZ VISUAL Insertar dibujo: incluye el cdigo Html para la insercin de una imagen en la pgina web. Cuando ejecutamos esta opcin se presenta un cuadro de dilogo en el que podemos seleccionar tanto una imagen Desde Archivo, almacenada en un archivo externo al proyecto, como Desde Campo Dibujo, una imagen con- tenida en un campo de tipo Objeto dibujo de la tabla de datos asociada a la p- gina Html o de cualquiera de sus tablas maestras. En funcin del tipo, elegire- mos un control u otro para rellenar, y pulsamos el botn Examinar. Asimismo, permite seleccionar: Alineacin: nos da a elegir entre Inferior, Medio, Superior, Inferior absoluto, Medio absoluto, Texto Superior, Lnea de base, Izquierda y Derecha. Grosor del Borde: tamao en pxeles de ste. Espaciado Horizontal: distancia al borde lateral de la imagen en pxeles. Espaciado Vertical: distancia al borde superior e inferior de la imagen en pxeles. Un ejemplo del cdigo generado tras la seleccin de un archivo de imagen: <IMG src=D:\Pruebas\Ver40\GALARTE\Galarte.jpg align=absbottom> Otro ejemplo en el que el cdigo generado proviene de seleccionar un cam- po dibujo: <IMG src=#AVP%DIBUJO%> Insertar dibujo Examinar Para trabajar con imgenes que serviremos en pginas web, Velzquez Vi- sual tiene una serie de funciones muy interesantes de cara al programador. Como ya vimos en el captulo dedicado a los campos, podemos crear unos campos que llamaremos CX y CY, en los que almacenaremos las dimen- siones de cada dibujo (Velzquez Visual se encarga de hacerlo de manera automtica), que tambin se tendrn en cuenta a la hora de crear el cdigo Html, haciendo ms veloz la presentacin. <IMG src=#AVP%DIBUJO% width=#AVP%DIBUJO-CX% height=#AVP%DIBU- JO-CY%> Insertar tabla html: genera en la pgina Html el cdigo correspondiente a una tabla con el nmero de filas, columnas y tamao del borde que espe- cifiquemos. Por ejemplo, para una tabla de dos filas, dos columnas y ancho de borde 1 generara el cdigo siguiente: <table border=1> <tr> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> </tr> </table> Inicio y fin de repeticin: insertan un comando especfico de Velz- quez (comandos AVP); lo que se encuentre entre esta marca y la marca de fin de trozo a repetir ser repetido por cada registro resultante de la bs- queda a la que hayamos asociado la pgina web, por ejemplo, presentar campos, variables, etc. 08 Desarrollo completo de una aplicacin Insertar tabla html Inicio y fin de repeti- cin 262 263 VELAZQUEZ VISUAL <HTML> <HEAD> <TITLE>Informe de Ventas</TITLE> </HEAD> <BODY bgcolor=#006400> <!Color> <FONT face=Times New Roman size=3 color=#000000> <!Insertar Fuente> <IMG src=#AVP%DIBUJO% width=#AVP%DIBUJO-CX% height=#AVP%DIBU- JO-CY%> <!Insertar Dibujo> <AVPR> <!Marca de inicio> <table border=1> <!Tabla de dos columnas y dos filas> <tr> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> </tr> </table> </AVPR> <!Marca de fin> </FONT> </BODY> </HTML> Paginador: es un comando especfico de Velzquez (comandos AVP) que pegar en la pgina, en el caso de que el resultado de una bsque- da ocupe ms de una, un paginador para facilitar al usuario el moverse entre las pginas. Por defecto, el nmero de tem que se presentar por pgina es de 20, pero podremos cambiarlo. Cuando se ejecuta esta op- cin se presenta el cuadro de dilogo para establecer las propiedades del paginador: Paginador En l podemos modificar los atributos que tiene por defecto el paginador. El resultado final del mismo se presenta en la parte inferior de este cuadro de dilogo. Podremos modificar su Ttulo por defecto, el smbolo para es- tablecer el enlace con la pgina anterior, con la pgina siguiente, con las 20 pginas anteriores y con las 20 pginas siguientes. <HTML> <HEAD> <TITLE>Informe de Ventas</TITLE> </HEAD> <BODY bgcolor=#006400> <!Color> <FONT face=Times New Roman size=3 color=#000000> <!Insertar Fuente> <IMG src=#AVP%DIBUJO% width=#AVP%DIBUJO-CX% height=#AVP%DIBU- JO-CY%> <!Insertar Dibujo> <AVPR> <!Marca de inicio> <table border=1> <!Tabla de dos columnas y dos filas> <tr> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> </tr> </table> 08 Desarrollo completo de una aplicacin 264 265 VELAZQUEZ VISUAL </AVPR> <!Marca de fin> <AVPG pag=Informes: ant=Anterior [-] sig=[+] Siguiente ant20=20 Anteriores sig20=Siguientes 20> <!Paginador> </FONT> </BODY> </HTML> Campo: comando especfico de Velzquez (comandos AVP). Nos per- mite insertar un campo en la pgina Html. Cuando insertamos un campo en una pgina html, ste es insertado de la forma siguiente: #AVP%NOM- BRE%, donde la cadena inicial #AVP nos indica que se trata de un coman- do propio de Velzquez Visual. <HTML> <HEAD> <TITLE>Informe de Ventas</TITLE> </HEAD> <BODY bgcolor=#006400> <!Color> Campo <FONT face=Times New Roman size=3 color=#000000> <!Fuente> <IMG src=#AVP%DIBUJO% width=#AVP%DIBUJO-CX% height=#AVP%DIBU- JO-CY%> <AVPR> <!Marca de inicio> <table border=1> <!Tabla de dos columnas y dos filas> <tr> <td>Fecha</td> <td>Total</td> </tr> <tr> <td>#AVP%FECHA%</td> <!Campo Fecha> <td>#AVP%TOTAL%</td> <!Campo Total> </tr> </table> </AVPR> <!Marca de fin> <AVPG pag=Informes: ant=Anterior [-] sig=[+] Siguiente ant20=20 Anteriores sig20=Siguientes 20> <!Paginador> </FONT> </BODY> </HTML> Variable global: comando especfico de Velzquez (comandos AVP). Nos permite insertar una variable global en la pgina Html. Cuando insertamos una variable global en una pgina html, se hace de la forma siguiente: #AVP$PALABRAS$. la cadena inicial #AVP indica que se trata de un co- mando propio de Velzquez. 08 Desarrollo completo de una aplicacin Variable global 266 267 VELAZQUEZ VISUAL () #AVP$EMPRESA-NOMBRE$ <!Variable Global> <AVPR> <!Marca de inicio> <table border=1> <!Tabla de dos columnas y dos filas> <tr> <td>Fecha</td> <td>Total</td> </tr> <tr> <td>#AVP%FECHA%</td> <!Campo Fecha> <td>#AVP%TOTAL%</td> <!Campo Total> </tr> </table> () Variable local: solamente estar activo cuando el objeto editado sea un Componente Html en el que hayamos definido parmetros. Para insertar un parmetro concreto en las propiedades del componente, simplemente pul- Variable local saremos este botn y seleccionaremos el que corresponda, con lo que s- te ser situado en el punto del editor donde est el cursor. En el editor se- r presentado como #AVPa. #AVPa Insertar especial: nos permite insertar en el cdigo HTML otros comandos especficos de Velzquez (comandos AVP) que insertan las siguientes variables: 08 Desarrollo completo de una aplicacin Insertar especial 268 269 VELAZQUEZ VISUAL Senda completa de la aplicacin: inserta una variable que en tiempo de eje- cucin ser sustituida por la senda de la aplicacin que se est ejecutando. Al insertar esta variable, el cdigo que Velzquez Visual inserta es: #AVP!SERVER!/cgi-vel/#AVP!APP!/, a lo que deber preceder el texto Http://; es decir: HTTP://#AVP!SERVER!/cgi-vel/#AVP!APP!/ Aplicacin: inserta una variable que en tiempo de ejecucin devolver el nombre de la aplicacin que se est ejecutando. Al insertar esta variable, el cdigo que Velzquez Visual inserta es: #AVP!APP! (este comando AVP tambin debera ir precedido de la cadena HTTP://). Server: inserta una variable que en tiempo de ejecucin ser sustituida por la IP del servidor donde est ejecutndose la aplicacin. Al insertar esta va- riable, el cdigo que Velzquez inserta es: #AVP!SERVER! (este comando AVP tambin debera ir precedido de la cadena HTTP://). Insertar bsqueda: inserta en el cdigo Html el identificador de una bs- queda. Para que podamos seleccionar una bsqueda, sta debe tener aso- ciada en sus propiedades una Pgina Html que ser en la que se presenten los datos. sta puede ser la misma desde la que se llama. Al seleccionar la bsqueda, sta ser escrita en el editor de la forma siguiente: IDENTIFICA- DOR-BUSQUEDA.BUS. La extensin .BUS es la extensin identificativa de una bsqueda. Lo que haremos entonces es usar una etiqueta <a href=IDENTIFICADOR- BUSQUEDA.BUS>Texto</a>, que nos permitir lanzar la bsqueda, que ser devuelta con la pgina asociada a sta. (...) #AVP$EMPRESA-NOMBRE$ <!Variable Global> <a href=VENTAS-ARTICULO.bus>Ventas por artculo de la empresa #AVP$EMPRESA-NOMBRE$</a> <!Bsqueda por artculo> (...) Insertar proceso: inserta en el cdigo Html el identificador de un proce- so. Para usar un proceso en una pgina web, debe tener como origen nin- guno y activado el estilo accesible web. Al seleccionar el proceso ste apa- recer escrito en las fuentes de la forma siguiente: ID_PROCESO.PRO. La extensin .PRO es la extensin identificativa de los procesos. Insertar bsqueda Insertar proceso Al igual que ocurre con las bsquedas, el identificador del proceso acta como enlace ste, que acabar devolviendo una Pgina Html. #AVP$EMPRESA-NOMBRE$ <!Variable Global> <a href=VENTAS-ARTICULO.bus>Ventas por artculo de la empresa #AVP$EMPRESA-NOMBRE$</a> <!Bsqueda por artculo> <a href=VENTAS1.pro>Seleccin de empresa</a> <!Proceso para cambiar la seleccin de empresa> Buscar: para buscar una cadena de texto en el cdigo Html de la pgi- na. Tenemos la opcin de que coincidan palabras enteras, coincidan ma- ysculas y minsculas. 08 Desarrollo completo de una aplicacin Buscar 270 271 VELAZQUEZ VISUAL Sustituir: para buscar y reemplazar una cadena de texto por otra en el cdigo Html de la pgina. De nuevo tendremos opciones para que nos coincidan palabras enteras y teniendo en cuenta maysculas y minsculas. Con los botones Buscar si- guiente y Sustituir podemos ir buscando y reemplazando palabras, o reem- plazar todas con Sustituir todos. En el caso de que tengamos hecha una seleccin, nos da la posibilidad de reemplazar todas las incluidas en sta. Buscar siguiente, Buscar anterior: repiten la ltima bsqueda que ha- yamos ejecutado en el Editor Html, hacia delante o hacia detrs. Toggle Bookmark: adems de marcar cuando realizamos una bsqueda en el texto, podemos nosotros insertar una marca en la lnea de cdigo Html en la que se encuentre situado el cursor . Nos es muy til para editar p- ginas en las que tenemos muchas lneas de cdigo, para marcar aquellas que nos interese localizar con facilidad. Hemos de tener en cuenta, sin em- bargo, que si cerramos el editor de Html todas las marcas sern eliminadas. Con el mismo botn podemos quitar la marca, o bien pulsando con el bo- tn derecho del ratn sobre ella. Sustituir Buscar siguiente, Buscar anterior Toggle Bookmark Bookmark Clear Bookmark: para borrar todas las marcas del cdigo. Next Bookmark: con estos botones podremos situar el cursor sobre la lnea siguiente o anterior ms prxima, con respecto a la posicin actual del cursor, que tenga marca. Opciones: podemos personalizar el entorno de trabajo del Editor Html con ayuda de este botn. Podremos configurar lo siguiente: Caracteres por tab: configuramos aqu el nmero de caracteres que ocupa- r cada tabulacin. Auto indentacin: cada nueva lnea comenzar con el mismo sangrado que la lnea anterior, facilitndonos la edicin del texto. Colorear sintaxis: con esta opcin activada podremos especificar un color diferente para presentar las distintas partes del cdigo. Podemos definir un color para la fuente por defecto, para los comandos propios de Velzquez Visual: AVP, las etiquetas (tags), el color de la fuente de los atributos, las ca- denas de texto, los nmeros y las constantes, adems de especificar el co- lor de los comentarios. 08 Desarrollo completo de una aplicacin Clear Bookmark Next Bookmark Opciones 272 273 VELAZQUEZ VISUAL Fuente: para cambiar la fuente del Editor Html. Ejemplo <html> <head> <title>LISTADO DE ARTICULOS</title> </head> <body> <p><font face=Arial><strong>Listado de Artculos</strong></font></p> <hr> <AVPR> <p><img src=#AVP%FOTO% width=#AVP%FOTO-CX% height=#AVP%FOTO- CY%> #AVP%NOMBRE%</p> </AVPR> <hr> </body> </html> ste es el cdigo Html de una pgina web de Velzquez para presentar un lista- do de Artculos. Lo que interesa es lo que se encuentra entre los cdigos de ini- cio y cierre de trozo de repeticin propios de Velzquez (<AVPR> y </AVPR>). Observemos lo que se va a repetir por cada artculo encontrado en la bsqueda: Campos de la tabla de artculos: #AVP%FOTO%: campo de tipo objeto dibujo de la tabla. #AVP%FOTO-CX%: campo generado a travs de la opcin del editor Cam- pos/Crear campos dimensiones dibujo del Editor de proyectos (contiene la anchura de la imagen). #AVP%FOTO-CY%: campo generado a travs de la opcin del editor Cam- pos/Crear campos dimensiones dibujo del Editor de proyectos (contiene la altura de la imagen). #AVP%NOMBRE%: campo %NOMBRE% del artculo. Estos campos los hemos insertado con el botn Campo de la barra de he- rramientas del Editor Html (observemos cmo automticamente se aade la etiqueta #AVP antes del identificador del campo). Si alguien accede a tra- e vs de un explorador de Internet a esta pgina web y edita el cdigo fuen- te, los controles de campo sern sustituidos por su contenido (una imagen en el primero, dimensiones de la imagen en el segundo y en el tercero, y un el texto del nombre del artculo en el cuarto). Partiendo de la base de que en el proyecto se ha definido una bsqueda de artculos, por el ndice palabras, en la que se resuelve el contenido inicial de las palabras a buscar con la variable global en memoria $PALABRAS$, va- mos a crear una pgina que contenga el texto Buscar artculos por palabras y que dispare esta bsqueda: <html> <head> <title>Formulario para la bsqueda de artculos por palabras</title> <meta http-equiv=Content-Type content=text/html; charset=iso-8859-1> </head> <body> <p align=center><font face=Arial Rounded MT Bold size=6 co- lor=#008000>Bsqueda de artculos por palabras</font></p> <div align=center><center> <table BORDER=4 WIDTH=800 BGCOLOR=A2COFF BORDERCOLOR=BLACK> <tr> <td> <form ACTION=ARTICULOS-PAL.BUS MET- HOD=GET> <div align=center><center> <p><font color=#800000 face=Arial Black>Palabra(s) a buscar:</font> <in- put type=TEXT NAME=PALABRAS si- ze=49></p> </center></div><div align=center><center><p><in- put type=submit value=Enviar> <input type=reset value=Restablecer></p> </center></div> </form> </td> </tr> </table> </center></div> </body> </html> 08 Desarrollo completo de una aplicacin e 274 275 VELAZQUEZ VISUAL Observemos las lneas de cdigo que estn marcadas. En la primera, la que indica la accin del formulario, se especifica que se dispare la bsqueda ARTICULOS-PAL.BUS. Como podemos observar, no hace falta indicar ni la IP del servidor, ni la pasarela cgi-vel, ni la aplicacin, pues esta bsqueda pertenece a la misma aplicacin. En la segunda, en la que se resuelven las palabras a buscar, se indica el nombre de la variable global de Velzquez PALABRAS. Pasarela CGI Si queremos ejecutar una bsqueda, un proceso o una pgina Html de Ve- lzquez desde una pgina web, la sintaxis de la pasarela CGI debe ser: DOMINIO/CGI-VEL/ID_PROYECTO/ID_OBJETO.EXT Donde: DOMINIO: del servidor donde se encuentre instalado el Servidor de Aplica- ciones de Velzquez Visual. CGI-VEL: directorio virtual donde se buscarn las pginas, bsquedas y procesos ubicados en el proyecto de Velzquez Visual. No es necesario que exista, pues al indicarse el nombre del proyecto de Velzquez Visual, el Ser- vidor de Aplicaciones ya sabe dnde buscar los objetos. ID_PROYECTO: nombre del proyecto de Velzquez Visual (nombre del fi- chero .MAP) o alias que le hayamos asignado al mismo en el Servidor de Aplicaciones. ID_OBJETO.EXT: identificador del objeto a ejecutar o del fichero a descargar. La pasarela CGI est preparada para servir objetos de Velzquez Visual (Bsqueda, Proceso o Pgina Html), que hemos de ubicar en el proyecto de la aplicacin. En este caso, en funcin del objeto a disparar, hemos de es- pecificar su identificador seguido de una extensin identificativa del tipo de objeto que se trate: Bsqueda: ID_BUSQUEDA.BUS Proceso: ID_PROCESO.PRO Pgina Html: ID_PAGINA.PAG Adems de objetos propios de la aplicacin, podemos llamar a objetos ex- ternos: dibujos, pginas Html estticas externas, etc. Si debemos resolver ms variables globales, la sintaxis de la pasarela CGI sera: Dominio/cgi-vel/Id_Aplicacion/Id_Busqueda.bus/?Id_Variable1=dato1&Id_Va- riable2=dato2 e Ejemplo En un proyecto llamado Libros.Map tenemos la bsqueda LIBROS-PAL, en la que se realiza una bsqueda por palabras de libros. En dicha bsqueda resolvemos las palabras a buscar con el contenido de la variable global PA- LABRAS-TITULO. Creamos una pgina web en la que incluimos un control para que el usuario escriba la palabra o palabras a buscar. Con la instruc- cin <FORM ACTION> de HTML especificaremos como parmetro la pasa- rela CGI para la ejecucin de la bsqueda. El dominio del servidor donde se encuentra el proyecto de Velzquez se llama velazquezvisual.com. El for- mato ser el siguiente: <FORM ACTION=http://VELAZQUEZVISUAL.COM/CGI-VEL/LIBROS/LIBROS-PAL.BUS METHOD=GET> <INPUT TYPE=TEXT NAME=PALABRAS-TITULO> Automticamente, Velzquez compondr la pasarela CGI correspondiente. Asimismo, es posible ejecutar objetos externos a las aplicaciones de Velz- quez. Conviene indicar que, de este mismo modo, tambin nos es posible ejecutar pginas web externas a las aplicaciones de Velzquez. Ejemplo En el directorio donde se encuentra el proyecto Libros.map, que menciona- mos en el ejemplo anterior, se ha incluido el fichero Logo.gif; para poder abrirlo, el formato sera: <img src=http://VELAZQUEZVISUAL.COM/CGI-VEL/LIBROS/LOGO.GIF> Tambin podemos generar Enlaces dinmicos, es decir, ejecutar una bs- queda o un proceso en la que se incluyan enlaces por cada registro encon- trado que disparen otra bsqueda y otro proceso. Ejemplo En una base de datos de Libros, en la que se tiene una tabla de Autores y su histrico Libros, para poder presentar el resultado de una bsqueda de Autores en una pgina web en la que cada autor sea un enlace para dispa- rar una bsqueda de sus libros habramos de seguir los siguientes pasos: Una bsqueda de Autores (el ndice es irrelevante). Una variable global, a la que llamaremos AUTOR, del mismo tipo y longitud que el campo CODIGO de la tabla AUTORES. Una bsqueda de LIBROS por el ndice AUTORES, por la Parte izquierda de la clave, resolviendo el AUTOR con la variable global $AUTOR$. A dicha bsqueda la llamaremos LIBROS-AUTOR. Y dicha bsqueda tendr aso- ciada una pgina Html para presentar los datos. 08 Desarrollo completo de una aplicacin e e e 276 277 VELAZQUEZ VISUAL En la pgina web asociada a la bsqueda de Autores, dentro de las marcas de repeticin, incluiremos el comando html href para hacer que el nombre del autor ejecute la bsqueda de libros de dicho autor: <a href=#DOMINIO/CGI-VEL/LIBROS/LIBROS-AUTOR.BUS?AUTOR=#AVP%CODI- GO%> #AVP%NOMBRE% </a> Observemos cmo se especifica la pasarela CGI (tras la especificacin del dominio, el cgi-vel y la aplicacin) la bsqueda a ejecutar seguida de la ex- tensin identificativa de bsqueda (LIBROS-AUTOR.BUS), seguido de una interrogacin (?) y el identificador de la variable global por la que se resuel- ve la bsqueda (AUTOR), asignando como contenido de la misma el cam- po CODIGO del autor (#AVP%CODIGO%). Hemos de tener en cuenta que, aunque los nombres de las variables en Velzquez Visual se incluyan entre smbolos de dlar ($), en una pasarela CGI no es necesario. El incluir en esta instruccin href el campo nombre del autor (#AVP%NOM- BRE%) es para que ste sea el texto que aparezca destacado para dispa- rar el enlace. Tenemos, adems, unos comandos que nos permiten aadir funcionalida- des de cara a la presentacin de las pginas web: _e: si al disparar una bsqueda desde una pgina Html queremos modificar el nmero de tem a presentar por pgina, utilizaremos esta variable asig- nndole el nmero de elementos a presentar por pgina. Por ejemplo: <form ACTION=ARTICULOS-PAL.BUS?_e=10 METHOD=GET> _p: nos permite especificar una pgina concreta para posicionarse tras pre- sentar el resultado de la bsqueda. De igual forma que el anterior, habr que asignarle un nmero. Si el nmero asignado es mayor que el nmero total de pginas, se presentar automticamente la ltima pgina. Por ejemplo: <form ACTION=ARTICULOS-PAL.BUS?_p=5 METHOD=GET> _visd_: dice al Servidor de Aplicaciones que lo que servir a continuacin es una imagen, y como tal ha de tratarla. <img border=0 src=_visd_#AVPfoto.jpg> Ejemplo En un proyecto, entre otras, tenemos una tabla de Autores y otra de Libros (con un enlace maestro a Autores), queremos realizar una bsqueda de auto- res va web en la que se presente una pgina con el nombre de cada autor, el ttulo y la portada de sus libros. Para ello crearemos cuatro componentes: Uno para generar la cabecera de la pgina html. Otro para la parte del cuerpo correspondiente a la informacin sobre el autor. e e Otro para la parte correspondiente a los libros del autor. Otro para la parte correspondiente al pie de la pgina. Componente para generar la cabecera de la pgina html: Aadir un nuevo componente, al que llamaremos CABECERA. No ir aso- ciado a ninguna tabla de datos. Contendr el cdigo html siguiente: <html> <head> <p><b><font size=6>LISTADO DE AUTORES</font></b></p> <title>Listado de autores</title> </head> <body> Observemos cmo la ltima lnea de cdigo es la marca de inicio del cuer- po <body>. Componente para generar la parte del cuerpo correspondiente a la infor- macin del autor: Aadir un nuevo componente, al que llamaremos AUTOR, asociado con la tabla de Autores. Contendr el siguiente cdigo: <hr size=8> <p><b><font size=5>#AVP%NOMBRE%</font></b></p> En l, entre otras cosas, hemos insertado el campo NOMBRE del autor (#AVP%NOMBRE%). Componente para generar la parte del cuerpo correspondiente a la infor- macin sobre el libro: Aadimos un nuevo componente, al que llamaremos LIBRO. Estar asocia- do a la tabla de Libros. Contendr el cdigo siguiente: <p><b>TTULO:</b>#AVP%NOMBRE%</p> <p> <img border=0 src=#AVP%FOTO%></p> Entre otros, hemos insertado dos campos, el ttulo del libro (#AVP%NOM- BRE%) y el campo objeto dibujo que contiene la portada (#AVP%FO- TO%). Componente para generar la parte del pie de la pgina: 08 Desarrollo completo de una aplicacin e 278 279 VELAZQUEZ VISUAL Aadimos un nuevo componente, al que llamaremos PIE. No estar asocia- do a ninguna tabla de datos. Contendr el cdigo siguiente: </body> </html> Por ltimo habr que crear el proceso que ejecute todos los componentes para presentar una pgina con los autores y sus libros. ste tendr origen ninguno y activada la propiedad accesible va web. Sus lneas sern: Set -> cuerpo, Html: ejecutar componente -> cabecera, CABECERA Cargar lista -> AUTORES, NOMBRE Recorrer lista solo lectura Html: ejecutar componente -> autor, AUTOR Set -> cuerpo, cuerpo + autor Cargar histrico -> LIBROS, AUTORES Recorrer lista solo lectura Html: ejecutar componente, libro, LIBRO Set -> cuerpo, cuerpo + libro Html: ejecutar componente -> pie, PIE Aadir retorno texto -> cabecera + cuerpo + pie Se inicializa una variable local donde se ir generando el cuerpo de la pgi- na (autor + libros). Lo hemos llamado cuerpo. Se ejecuta el primer componente (CABECERA) y el resultado del mismo es almacenado en la variable local cabecera. Se carga la lista de autores y se recorre en modo de solo lectura, por cada autor se ejecuta el componente AUTOR y el resultado retorna a la variable local autor. Se concatena a la variable local cuerpo el retorno (autor). Se cargan los libros de cada autor y se recorre la lista en modo de solo lec- tura, por cada libro se ejecuta el componente correspondiente (LIBRO) y el resultado se retorna en la variable local libro. Se concatena a la variable local cuerpo el retorno (libro). Se ejecuta el ltimo componente, PIE, y el retorno se almacena en la varia- ble local pie. e Finalmente, se utiliza la instruccin que permite lanzar una pgina html des- de un proceso: Aadir retorno Texto, concatenando las variables locales ca- becera, cuerpo y pie. Ejemplo Partiremos del mismo ejemplo anterior, pero vamos a hacer una variacin, el componente correspondiente al LIBRO lo vamos a generar con parmetros. Centraremos la explicacin nicamente en ste, pues el resto no variara. Componente para generar la parte del cuerpo correspondiente a la infor- macin sobre el libro: Aadimos un nuevo componente, al que llamaremos LIBRO. No es necesa- rio que est asociado a ninguna tabla. En este caso s habra que definir pa- rmetros, stos sern el ttulo y la portada (campo objeto dibujo), as que los introduciremos de la forma siguiente: titulo,portada Contendr el cdigo siguiente: <p><b>TTULO:</b>#AVPtitulo</p> <p> <img border=0 src=_visd_#AVPfoto.jpg></p> Entre otras cosas hemos incluido las dos variables locales (los parmetros definidos en las propiedades del componente). Destacar tambin cmo se compone la parte correspondiente a la portada, _visd_#AVPfoto.jpg _visd_ es el prefijo que indica a Velzquez que lo que le sigue ser un dibu- jo, a continuacin se aade la variable local correspondiente (_#AVPfoto) y finalmente la extensin que tendr la imagen (.jpg). En el proceso, la instruccin Html: Ejecutar componente, se resolvera de la forma siguiente: Html: ejecutar componente -> libro, LIBRO, %NOMBRE%,%FOTO% Los parmetros han de resolverse en el mismo orden que en el que fueron definidos en el componente, por lo que primero habr que pasar el libro y a continuacin la portada: %NOMBRE%,%FOTO%. 8.5.19. Procesos Son objetos que sirven para la realizacin de tareas diversas, definidas por el diseador del proyecto. Se utilizan para llevar a cabo operaciones espe- ciales que Velzquez Visual no hace de forma automtica. 08 Desarrollo completo de una aplicacin e e Procesos 280 281 VELAZQUEZ VISUAL Al crear un proceso hay que especificar su origen, que puede ser ninguno, una ficha o una lista de registros proveniente de una tabla de datos del pro- yecto. A continuacin, se le aaden, de forma visual, las lneas de instruc- ciones, que son funciones predefinidas por Velzquez Visual. Durante la creacin del proceso, el diseador est conectado, en todo mo- mento, con las tablas de datos y los tipos de funciones adecuadas, de for- ma guiada y asistida por Velzquez Visual. Adems, desde un proceso se pueden utilizar otros objetos del proyecto como las rejillas, los formularios y los informes. Podemos ejecutar procesos desde formularios, rejillas u otro proceso, de- pendiendo de su origen (ficha o lista, y tabla de datos de origen). Por ejem- plo, si el origen del proceso es una ficha de una tabla de datos, podremos pegar un botn que lo dispare en cualquier formulario de la tabla. Tambin pueden ejecutarse desde una rejilla en la que se haya seleccionado una fi- la concreta de la lista. Los procesos en los que se utilizan operaciones de escritura en disco ge- neran transacciones. Para saber si un proceso genera transacciones basta con editarlo y mirar si est activo el flag Escribe en disco. Crear un proceso Para crear un proceso, en el caso de que tenga origen, seleccionamos la ta- bla de datos asociada y a continuacin pulsamos el botn Nuevo objeto de la Galera de Objetos y elegimos Proceso. Aparecer el Editor de procesos en el que editaremos las siguientes propiedades: Descripcin e identificador: en la parte superior izquierda de la ventana del proceso existe un cuadro de edicin titulado Descripcin en el que resumi- EDITOR DE PROCESOS remos el propsito del proceso. El identificador del proceso aparece en la barra de ttulos del cuadro de dilogo y en el panel derecho del editor de proyectos, donde podremos modificarlo al salir. Origen del proceso: los procesos tienen tres posibles orgenes; dependien- do de su origen pueden ser disparados desde uno u otro punto. Origen Lista: el proceso tiene su origen en una lista de registros, por ejem- plo, un proceso disparado desde una rejilla. Origen Ficha: el proceso tiene su origen en un registro de una tabla de da- tos, por ejemplo, un proceso disparado desde un formulario. Origen Ninguno: el proceso no tiene origen en ninguna lista o ficha de nin- guna tabla de datos. Por ejemplo, un proceso para modificar variables glo- bales. Cuando ciertas variables globales se han de modificar desde distin- tos puntos (fichas o listas de varias tablas) en vez de crear el mismo proce- so para cada tabla y origen en el que se necesite disparar, lo creamos una sola vez con origen nulo. Tabla de datos: tabla a la que est asociado el proceso cuando ste tiene origen ficha u origen lista. Para todo proceso que est asociado a una tabla de datos, sta ser la misma desde la que se disparar. Por ejemplo, si va- mos a disparar un proceso desde el formulario Alta de Albarn, el proceso ser de origen ficha y la tabla de datos origen ser la misma del formulario, es decir, ALBARANES. Estilos: En multitarea (procesos en 2 plano): la ejecucin en multitarea permite no paralizar al usuario mientras se realiza el proceso. Esta opcin tiene senti- do en casos donde la tarea a realizar requiere perodos de tiempo largos y el usuario debe continuar con su rutina de trabajo. Para ello activaremos la casilla de verificacin En multitarea. Escribe en disco: si en el proceso utilizamos alguna funcin que modifique la informacin en el disco, esta casilla de verificacin ser activada auto- mticamente, ya que no es seleccionable por nosotros. Es abortable: podemos hacer que un proceso ejecutado en multitarea pue- da ser abortado por el usuario final. Esta casilla de verificacin se activar automticamente si utilizamos en el proceso la funcin Punto donde se puede abortar. Privado: permite ocultar el proceso al usuario final, es decir, el proceso slo podr ser disparado desde los puntos que establezca el progra- mador. Accesible web: por cuestiones de seguridad se activar solamente en aque- llos procesos (con origen Ninguno) que queramos sean accesibles va web, es decir, que puedan ser ejecutados desde una pgina web a travs de la pasarela CGI. 08 Desarrollo completo de una aplicacin Los procesos en multitarea no procesan retornos (como Imprimir informe, por ejemplo). En este tipo de procesos tampoco es conveniente el uso de funciones que requieran la intervencin del usuario, como pedir formulario o pedir dato. Esto es as ya que no tiene sentido que un proceso lanzado en 2 plano requiera la intervencin del usuario, adems el formulario o mensaje lanzado por el proceso podra no ser visualizado por el usuario, con lo que el proceso se paralizara. ADVERTENCIA 282 283 VELAZQUEZ VISUAL Lneas de proceso El rea de proceso est situada en la zona central de la ventana de edicin de procesos y se destina a la presentacin de las lneas que forman parte del mismo. Cada lnea de proceso ejecuta una funcin de la capa alta de funciones de Velzquez Visual dependiendo de los parmetros que le pa- semos. Hay tres grupos bsicos de funciones: las funciones cuyo origen es una lis- ta de registros, las que tienen como origen una ficha de una tabla y la que pueden tener como origen una ficha, una lista o ninguno. Al hacer doble clic sobre una lnea de proceso aparecer un cuadro donde podremos editarla. En el apartado Parmetros se presentarn el o los parmetros que necesi- ta la funcin seleccionada. Para seleccionar una funcin tenemos tres opciones: Escritura directa sobre el combo box: Velzquez ir presentando la funcin que comience por la cadena que escribamos en dicho control. Por ejemplo, si escribimos Me aparecer la funcin Mensaje. Abrir el combo box: se presentar una lista con todas las funciones dispo- nibles, segn el origen de la lnea (ficha, lista o ninguno), ordenadas alfab- ticamente. Pulsando el botn se abrir un asistente que contiene todas las funcio- nes de procesos clasificadas dentro de las carpetas correspondientes. CUADRO DE EDICIN LNEA DE PROCESO Asistente de funciones de proceso En las carpetas se muestran todas las funciones, independientemente del origen de la lnea donde se va a incluir la funcin. Aquellas que por su ori- gen puedan ser incluidas en la lnea se mostrarn destacadas en negrita. Una vez seleccionada podremos ver cmo funciona pulsando el botn de ayuda . Algunas funciones generan subprocesos de lista o subprocesos de ficha dependiendo del tipo de operacin que realizan y de los datos que gene- ran. Para que quede clara la existencia del subproceso, Velzquez Visual crea una rama que cuelga de la funcin que lo origina. Edicin de lneas de proceso Sobre el rea de procesos se muestran los siguientes botones: Aade una nueva lnea al final del proceso actual a la misma altura que la lnea seleccionada. Inserta una nueva lnea de proceso en la posicin seleccionada. Borra la lnea seleccionada. Si la lnea a borrar contiene un subproceso ser eliminada la rama completa. Edita la lnea seleccionada para su modificacin. Desactiva/Activa una lnea: esto implica que cuando se ejecute el pro- ceso la instruccin de dicha lnea no ser ejecutada. Si esa instruccin genera un subproceso, todas las instrucciones del mismo sern desacti- vadas tambin. Para desactivar una lnea nos situaremos sobre ella y pul- saremos este botn o la tecla F6. Para desmarcarla, repetiremos la mis- ma operacin. Son los botones Cortar, Copiar y Pegar lneas de proceso. Deshacer/rehacer. Estos botones, por orden de izquierda a derecha, sirven para: abrir todas las ramas del proceso, cerrar todas las ramas del proceso, abrir una rama del proceso y cerrar una rama del proceso. Acepta y cierra el cuadro de dilogo del proceso. Desde el teclado es posible realizar las siguientes operaciones: Cortar lneas: pulsando la combinacin de las teclas Ctrl+X. Copiar lneas: pulsando la combinacin de las teclas Ctrl+C. 08 Desarrollo completo de una aplicacin SUBPROCESO DE LISTA La primera vez que entramos en un proceso, si salimos pulsando Escape o el aspa de Cerrar Ventana perderemos todo lo escrito y no se crear el proceso. Para guardarlo tendremos que pulsar el botn Aceptar , con lo que saldremos, pero manteniendo lo escrito. Cuando entremos de nuevo a editar el proceso, al salir, pulsemos uno u otro, las lneas sern guardadas. ADVERTENCIA Ayuda Aade una nueva lnea Inserta una nueva lnea Borra la lnea seleccionada Edita la lnea seleccionada Desactiva/Activa una lnea Cortar Copiar Pegar Deshacer/rehacer Abrir/cerrar ramas de proceso Acepta 284 285 VELAZQUEZ VISUAL Pegar lneas: pulsando la combinacin de las teclas Ctrl+V. Borrar lneas: pulsando la tecla Supr. Insertar lneas: pulsando la tecla Insert. Abrir rama: tecla + del teclado numrico o cursor derecha. Cerrar rama: tecla del teclado numrico o cursor izquierda. Aadir lnea: pulsando la tecla * (no podemos utilizar la tecla + porque sta tiene la funcin de abrir ramas del rbol de las lneas del proceso) o F5. Editar lnea: pulsando la tecla Intro. Proceso de inicio de una aplicacin Es posible crear un proceso para que sea ejecutado al arrancar la aplica- cin. Para que el sistema reconozca un proceso como tal ha de tener el identificador ONINIT-MAP-SERVER; para ello habra que darle este identifi- cador al proceso deseado, o bien manualmente, o bien a travs de la op- cin Convertir en/Proceso de inicio del men Comunes del editor de pro- yectos. Para que un proceso pueda ser convertido en proceso de inicio de la apli- cacin es necesario que el origen del mismo sea Ninguno. En la versin cliente-servidor este proceso ser ejecutado al arrancar el ma- pa en el servidor. Ejecutando con VRunner el proceso ser lanzado cada vez que un usuario ejecute la aplicacin. Mediante procesos aadimos aquellas funcionalidades que Velzquez Vi- sual no da automticamente. Para ello tenemos la opcin de lanzar proce- sos desde objetos visuales: en los formularios tenemos procesos previos a la formacin del formulario, y posteriores; a sus botones podemos asig- narles procesos; tambin tenemos procesos asignados a eventos en una rejilla, a una pgina web, etc.; desde un men podemos lanzar un proceso que nos permita realizar diferentes opciones, tanto automticamente al abrirse el men, como desde controles del men que permiten lanzar pro- cesos. Procesos de Tabla (Triggers) Adems de las Actualizaciones (que veamos antes), Velzquez cuenta con una serie de procesos de tabla que usaremos para solucionar problemas no resueltos por stas. Los Eventos de tablas son procesos que definimos para que se ejecuten au- tomticamente al producirse el evento al que hacen referencia. stos pue- den ser: Anterior o Posterior a un alta, Anterior o Posterior a una baja, Anterior o Pos- terior a una modificacin de ficha. Interno a un alta, Interno a una baja o Interno a una modificacin de ficha. Estos ltimos son llamados despus del alta, baja o modificacin de una fi- cha, respectivamente, y antes de disparar actualizaciones. Los Eventos de tablas se crean pulsando el botn Nuevo evento de ta- bla en la barra de herramientas del cuadro de propiedades de una tabla. Al pulsarlo se muestra la ventana Nuevo manejador de evento de: Nombre de la tabla. Elegimos el tipo de evento que vamos a editar y ste se incorpora a la lista de procesos de la tabla. Una vez que lo hemos creado, pulsamos Intro o ha- cemos doble clic sobre el proceso y entramos en la ventana de edicin de procesos, que llevar por ttulo Proceso:Nombre de la tabla -> Tipo de evento. La ventana es igual que la de un objeto Proceso, excepto por que el origen ya est fijado (debe ser una ficha de la tabla que estamos editando) y el Es- tilo Privado no es definible. El orden que llevan los distintos eventos junto con las actualizaciones es el siguiente: Proceso Anterior 08 Desarrollo completo de una aplicacin PROPIEDADES DE UNA TABLA Y EVENTOS DE TABLA Nuevo evento de tabla 286 287 VELAZQUEZ VISUAL Alta, Modificacin o Baja de la ficha Proceso Interno Actualizacin Proceso Posterior En primer lugar, se produce el Proceso Anterior, en el que podemos com- probar los campos para evitar el alta, modificacin o baja segn las condi- ciones que pongamos, en caso de que no estn cumplimentados los cam- pos que requerimos, etc. Despus del alta, baja o modificacin se lanza el Proceso interno, que nor- malmente usaremos para calcular y verificar las condiciones que luego de- terminarn la actuacin de las actualizaciones. En este punto ya podremos leer datos como el cdigo, campos calculados, etc., pero aqu ya no po- dremos realizar modificaciones en los campos del registro. Por lo tanto, si necesitamos modificar el contenido de un campo del registro actual, debe- mos hacerlo en uno de los procesos asociados a los eventos anteriores a Altas, Bajas o Modificaciones. Esto es as, porque en los procesos internos ya se ha realizado el evento, luego no cabe modificacin alguna. Sin em- bargo, en los procesos s tendremos disponibles funciones que provoquen escritura en disco, pero para ello tendremos que cargar el registro que que- ramos modificar antes de realizar la operacin. Se produce entonces la Actualizacin, que realizar las modificaciones de- finidas por el subobjeto en otras tablas enlazadas. Por ltimo se produce el Proceso posterior. Cuando programamos debe- mos tener en cuenta que en los procesos posteriores al evento no es posi- ble modificar los datos del registro en curso, tal y como ocurre con el Pro- ceso interno. La diferencia entre el Proceso posterior al evento y el interno es que ya tenemos en cuenta las actualizaciones que se han producido en otras tablas. Ejemplo de procesos de tabla Tenemos una tabla de CLIENTES y un contador de clientes. En la tabla te- nemos clientes subsidiarios, es decir, clientes pertenecientes a una misma compaa a la que consideramos como cliente nica en el contador. Ade- ms, a los clientes no los damos de baja en el caso de que dejen de com- prarnos, sino que permanecen en la base de datos para recibir informacin y publicidad de la empresa, pero a efectos de contador y nuestras estads- ticas dejan de ser clientes. Por otro lado, cada vez que se produzca una modificacin en sus datos, queremos recoger en un campo la fecha en que se produce, y que se le en- ve al cliente un correo electrnico en el que se le informe de la modifica- cin de sus datos y la fecha en que se realiza tal modificacin. En arquitectura cliente- servidor no debemos incluir en este tipo de procesos nada que implique la intervencin del usuario, por ejemplo mostrar un formulario, una pregunta, peticin de un dato, etc. El motivo, como en otros casos, es que este tipo de operaciones se llevan a cabo en el Servidor, por lo que el mensaje o el formulario no seran presentados en el Cliente, sino en el propio Servidor. Si en un evento de tabla incluysemos algo que implicase la intervencin del usuario, sera obviado por el Servidor (hay una excepcin: los mensajes, que aparecen en la barra de salida de mensajes del Servidor). ADVERTENCIA e Veremos cmo podemos hacerlo para el caso de una Modificacin, con ayuda de los distintos tipos de eventos y con actualizaciones: Nos aparece el formulario, modificamos o rellenamos los distintos campos, y lo activamos o desactivamos como cliente. Aceptamos y comienzan los procesos: Proceso anterior a la modificacin: comprobamos que el formulario del cliente que modificamos tenga cubiertos los campos necesarios y no haya- mos eliminado los que consideramos imprescindibles (para que una ficha sea correcta debe tener cumplimentados algunos datos, por ejemplo: el nombre, razn social, C.I.F., etc.). En el caso de que falten datos, aqu po- dramos bloquear la modificacin y obligar a realizarla de nuevo, aunque normalmente esa comprobacin se hara con un proceso asignado al botn Aceptar, para que mantuviera el formulario abierto. Sin embargo, si estamos en el caso de altas directas o modificaciones por procesos ejecutados en el servidor, en los que no interviene el usuario, es til bloquear el alta, baja o modificacin en este punto. En este proceso modificamos el campo en que recogemos la fecha de actualizacin de los datos del cliente con la fecha de hoy, para que conste en su ficha. Modificacin: se guarda la modificacin. Proceso interno a la modificacin: aqu lanzamos un proceso en el que de- tectamos si el cliente es subsidiario o no, y guardamos la informacin en un campo. Se produce despus de haberse hecho la modificacin, pero antes de que salte la actualizacin, que va tener en cuenta este dato. Actualizacin: ahora lanzamos una actualizacin (sumando un cliente) con dos condiciones, la primera si es subsidiario o no y la segunda que est o no marcado como cliente. Deber darse al tiempo que no sea subsidiario y que est marcado como cliente para que sume uno al contador. Posterior a la modificacin: enviamos un correo electrnico al cliente con los nuevos datos y en el que especificamos la fecha de actualizacin. Otros ejemplos de eventos de tablas podran ser: Un proceso que realice una actualizacin imposible de definir con una Ac- tualizacin. Un proceso anterior a una baja de ficha que cargue y borre todos sus his- tricos. 8.5.20. Demonios Se trata de procesos nicamente vlidos para la versin cliente-servidor. Se lanzan de forma continua, cada x milisegundos, mientras la aplicacin est siendo ejecutada en el servidor de aplicaciones. Cada demonio genera en el servidor un hilo de baja prioridad, que har que no interfiera en el traba- 08 Desarrollo completo de una aplicacin e Demonios 288 289 VELAZQUEZ VISUAL jo de los usuarios y su uso nos interesar cuando necesitemos la ejecucin de un proceso continuo en la aplicacin. El editor de demonios es muy similar al editor de procesos, aunque con fun- cionalidad diferente: Al tratarse de un proceso que va a ser ejecutado desde el servidor de aplicacio- nes su origen no podr ser modificado; el origen del proceso ser NINGUNO. El proceso ser siempre en multitarea (recordemos que no es posible aa- dir retornos desde procesos en multitarea). En sus propiedades debe especificarse cada cuntos milisegundos debe ejecutarse. La ejecucin del proceso de forma continua no se solapar, es decir, si hemos establecido que el proceso debe ser ejecutado cada 15.000 milisegundos, se ejecutar el proceso y una vez haya finalizado volver a ser ejecutado despus de 15.000 milisegundos, y as sucesivamente. 8.5.21. Funcin Este objeto permite definir funciones que podrn ser ejecutadas en diferen- tes puntos de la aplicacin. Se trata de procesos ejecutables slo en primer plano (en sus propiedades no se permite activar Multitarea) y a los que po- demos pasar parmetros. El origen de estos procesos siempre es Ninguno. El editor es muy similar al de procesos pero incorpora algo distinto: la po- sibilidad de especificar parmetros; stos sern escritos en el control co- rrespondiente separados por comas (Ejemplo: Parametro1, Parametro2, Parametro3). En el proceso los parmetros definidos aparecern en la lista de variables locales. Dadas las caractersticas del objeto, en los demonios no debemos utilizar funciones de procesos en las que se requiera la intervencin del usuario. ADVERTENCIA EDITOR DE DEMONIOS Funcin Ejemplo: funcin para controlar el NIF Vamos a ver una funcin que ser usada en altas y modificaciones de las tablas CLIENTES y PROVEEDORES para comprobar si es correcto el NIF que introduzca el usuario. En este caso el proceso, que se presenta a continuacin, tendr un nico parmetro a declarar en la lista de parmetros: nif. A lo largo del proceso se usa en distintas lneas la variable local nif, que no es otra cosa que el parmetro definido en la funcin. La ltima instruccin de la funcin, Set retorno funcin, es la que permite establecer qu es lo que va a retornar la funcin cuando sea llamada. En este ejemplo retornar o bien nada (querr decir que el NIF es correcto), o bien el mensaje informativo de lo que est incorrecto en el nif. 8.5.22. Funciones de Procesos Las funciones son las instrucciones con las que se construyen los proce- sos. Pueden tener ninguno, uno o varios parmetros, dependiendo de cada una. stas pueden ser funciones propias de lista, funciones propias de ficha o funciones comunes de ficha y de lista (estas ltimas funciones son las que pueden usarse en lneas con origen ninguno). Dependiendo del origen que tenga el proceso podremos usarlas o no. Adems, algunas funciones pro- 08 Desarrollo completo de una aplicacin FUNCIN CONTROL-NIF e 290 291 VELAZQUEZ VISUAL pias de lista generan subprocesos de ficha, de los que podremos colgar funciones propias de ficha. Al pulsar el botn Editar del cuadro de dilogo Proceso, o hacer doble clic sobre las lneas del rea de proceso, aparece la ventana Lnea de Pro- ceso, donde se informa del origen del subproceso actual y de las funciones disponibles, las cuales dependen de que el origen sea ficha o lista. Tambin hay funciones especficas segn sea Proceso, Demonio o Funcin. Desde estas funciones podremos acceder al Asistente para la creacin de frmulas. Podremos usar variables locales (sin necesidad de declararlas en primer lugar), hacer uso de parmetros, elegir otros objetos visuales de Ve- lzquez Visual como rejillas, formularios, otros procesos, etc. Algunas funciones devuelven valores que podremos guardar en variables locales, por ejemplo, si el proceso se ha realizado, el resultado, etc. Otras, como los retornos, nos devuelven objetos. Funciones Bsicas En este apartado veremos las funciones bsicas que hay, en general, co- munes a otros lenguajes informticos de alto nivel. stas son: EDITOR DE PROCESOS Y VENTANA LNEA DE PROCESO Editar If Esta funcin crea un subproceso de lista o de ficha en funcin del origen. El subproceso se ejecuta si se cumple la expresin condicional. Es una Fun- cin comn de lista y de ficha. Hemos de pasarle el parmetro Frmula condicional, expresin algebraica o booleana (lgica binaria). Para crear la frmula condicional podemos usar el asistente. Ejemplo En este ejemplo se ejecutar el subproceso de lista o de ficha si se cumple que el campo IVA del artculo es igual a la variable local iva, y (&) el cam- po MARCA es igual a 2. La condicin sera: (%IVA% = iva) & (%MARCA% = 2) Si se tratara de un campo booleano, por ejemplo CASADO, la condicin se- ra: if -> %CASADO%. De este modo comprobamos que el campo CASA- DO sea igual a 1. 08 Desarrollo completo de una aplicacin FUNCIONES BSICAS e 292 293 VELAZQUEZ VISUAL Else If Esta funcin, que siempre tiene que ir precedida de una funcin if, crea un subproceso de lista o de ficha, en funcin del origen de la lnea. El subpro- ceso se ejecuta si se cumple la expresin condicional. Es una Funcin co- mn de lista y de ficha. Le pasamos el parmetro Frmula condicional, expresin algebraica o boo- leana (lgica binaria). Ejemplo if -> %CAMPO% = 1 Ejecutar proceso -> PROCESO1 else if -> %CAMPO% = 2 Ejecutar proceso -> PROCESO2 else if -> %CAMPO% = 3 Ejecutar proceso -> PROCESO3 Else Funcin que ejecuta las instrucciones que tenga en su rama, siempre y cuando no se cumpla el condicional previo (funcin If). La funcin Else tie- ne que ir precedida de una funcin If a su misma altura. Es una Funcin co- mn de lista y de ficha y no tiene parmetros. Ejemplo Si se dan las dos condiciones ejecutar el primer subproceso, en caso con- trario ejecutar el segundo. For Repite las lneas contenidas en el bucle mientras se cumpla la condicin declarada. La variable del bucle (especificada en el primer parmetro) es de tipo local, de modo que para acceder a ella se utilizarn apstrofes, co- mo en el resto de las variables locales. Es una Funcin comn de lista y de ficha. Los parmetros de la funcin son: e e e Id variable: identificador de la variable local (obligatorio). Frmula valor inicial: expresin que se asignar a la variable local al iniciar el bucle (obligatorio). Frmula condicin: expresin que se deber cumplir para continuar con las iteraciones del bucle (obligatorio). Frmula valor a incrementar: expresin que incrementa la variable del bucle en cada iteracin (obligatorio). Ejemplo Demos los siguientes valores a los parmetros de la funcin: Id variable: VarLoc Fr. Inicial: 47 Fr. Cond.: VarLoc < 73 Fr. Inc.: 2 Este ejemplo ejecuta las funciones (instrucciones) que cuelgan en el sub- proceso del bucle inicindose la variable local VarLoc con el valor 47 y fi- nalizando en el 73. La variable ser incrementada en pasos de dos en dos. Ntese que en la frmula condicional la variable del bucle est entre aps- trofes, indicando que es una variable local al bucle. El bucle ser ejecutado para valores entre 47, 49, 51, 69 y 71. Rem Esta funcin permite incluir comentarios en los procesos, as nos resultar mucho ms fcil su revisin. Es una Funcin comn de lista y de ficha. Hemos de pasarle el parmetro Comentario, texto descriptivo de lo que se va a realizar en las lneas posteriores del proceso. El comentario no tiene que estar entrecomillado. Ejemplo Las lneas en las que se encuentra esta funcin se muestran destacadas en 08 Desarrollo completo de una aplicacin e e 294 295 VELAZQUEZ VISUAL negrita y con un icono de informacin al principio de las mismas, con lo que nos ser ms fcil su localizacin. Set Con esta funcin declaramos una variable local del proceso y le asignamos valores, almacenando en ella el dato calculado por la expresin frmula. Si la variable local no existe se crea automticamente. Como la variable es lo- cal slo es posible usarla en este proceso, siendo creada cuando aparezca esta instruccin y destruida cuando finalice el proceso. Es una Funcin co- mn de lista y de ficha. Hemos de pasarle los siguientes parmetros: Identificador: el de la variable local donde se almacena el resultado de la frmula (obligatorio). No debemos usar en el identificador de una variable local caracteres tales como % (se usa para identificar campos), $ (se usa para identificar variables globales), , etc. Frmula: expresin a evaluar (obligatorio). Ejemplo En este ejemplo guardamos en la variable local MARCAARTI el cdigo de la marca del artculo. El origen de la lnea del proceso donde se incluye es- ta funcin ser una Ficha de la tabla de Artculos. Los parmetros son: Identificador: MARCAARTI Frmula: %MARCA% Modificar variable global Modifica el contenido de una variable global declarada en el proyecto. Es una Funcin comn de lista y de ficha a la que pasamos los siguientes pa- rmetros: Identificador: el de la variable global a modificar (obligatorio). Frmula: expresin para calcular el nuevo contenido (obligatorio). Id variable local resultado: el de la variable local donde se almacenar el re- sultado. Ser el contenido de la variable global en el momento de ser guardada en disco (opcional). Ejemplo Modificar variable global -> ULT-PEDIDO-C,%ULT-PEDIDO-C%+1, NuevoPedido e e e Pedir dato Pide un dato al usuario y lo guarda en la variable local con el identificador dado. Para usar esta variable local en las expresiones frmula, al igual que todas las variables locales, su identificador debe ir entre apstrofes (). Es una Funcin comn de lista y de ficha. Hemos de pasarle los parmetros siguientes: Descripcin: texto a presentar al usuario (opcional). Identificador: identificador de la variable local donde se almacena el dato in- troducido por el usuario (obligatorio). Tipo: tipo de dato a guardar. Hay tres tipos: Numrico, Texto y Fecha (obli- gatorio). Identificador de la variable local que retorna SI/NO: variable que recoger si el usuario ha pulsado aceptar o cancelar (opcional). Ejemplo Este ejemplo visualizar una ventana con el texto Escriba la fecha lmite y un control de edicin para introducir dicha fecha, la cual ser guardada en la variable local FECHAMAX. Los parmetros son: Descripcin: Escriba la fecha lmite. Identificador: FECHAMAX Tipo: Fecha Mensaje Muestra en una ventana el contenido evaluado de una frmula junto con el icono seleccionado. Es una Funcin comn de lista y de ficha a la que he- mos de pasar los siguientes parmetros: Mensaje: expresin frmula con el mensaje que aparecer en pantalla (opcional). Icono: el que se mostrar junto con el mensaje (opcional). Hay tres: excla- macin , stop e informacin . Segundos Timeout: segundos transcurridos los cuales la ventana con el mensaje ser cerrada automticamente. Si este parmetro es 0, la ventana permanecer abierta hasta que intervenga el usuario. Muy til la utilizacin de time out para evitar que, si se presenta el mensaje y no est presente el usuario, no se paralice la ejecucin del proceso hasta que ste intervenga. Ttulo: ttulo de la ventana en la que se presenta el mensaje (opcional). 08 Desarrollo completo de una aplicacin e Exclamacin Stop Informacin 296 297 VELAZQUEZ VISUAL Si presentamos un mensaje en un evento pierde foco de un formulario, pa- ra que el foco no se pierda y vuelva al control en el que se encontraba he- mos de aadir la funcin Set retorno proceso =no tras la funcin Mensaje. Por ejemplo, supongamos que en la prdida de foco de un control de edi- cin de un formulario asociamos un proceso que comprueba si el valor in- troducido es vlido. Si no lo es se presenta un mensaje, pero el foco se per- der si no aadimos Set retorno proceso=no. Si lo aadimos, el foco volve- r al control de edicin y podremos introducir un valor de nuevo. Ejemplo Visualizaremos una ventana con el texto del mensaje personalizado para el usuario que intenta ver un formulario para el que no tiene el nivel de privilegio requerido. El texto est entre comillas puesto que se trata de una expresin tipo frmula. La variable de sistema u devuelve el nombre del usuario actual. Mensaje: Lo siento, + u + . No est Ud. autorizado a ver estos datos. Ejemplo Ahora presentaremos una ventana con el texto del mensaje personalizado, en el que se muestra el nombre del Cliente. Mensaje: El cliente + %NOMBRE% + no tiene albaranes para facturar. Ejecutar proceso Ejecuta el proceso dado en el primer parmetro y retorna cuando finaliza. Es una Funcin comn de lista y de ficha a la que pasamos los parmetros siguientes: Identificador proceso: identificador del proceso hijo a ejecutar (obligatorio). Variable retorno OK subproceso (S/No): inicializacin de una variable local del proceso donde se recoger si el proceso ejecutado ha retornado co- rrectamente o no. Modo Cliente-Servidor: este parmetro es exclusivo para aplicaciones que vayan a ser ejecutadas con la arquitectura cliente-servidor de Velzquez Vi- sual (Servidor de Aplicaciones de Velzquez Visual). Existen dos modos po- sibles de ejecutar los subprocesos: Local ->: el subproceso ser ejecutado en el Cliente. Servidor ->: el subproceso ser ejecutado en el Servidor (a estos procesos los llamamos procesos en tercer plano). Cuando desde un proceso principal ejecutamos un subproceso mediante esta instruccin, la ejecucin del proceso principal no continuar hasta que no termine el subproceso. e e Ejemplo En este ejemplo, la variable local bOK es inicializada a cero antes de eje- cutar el subproceso MAILINGS-BAJA. Si el subproceso retorna con un valor distinto de cero se ejecutarn las instrucciones que cuelgan de la funcin. En este caso, la funcin set establece el valor 1 para la variable local bOK. Por ltimo, se comprueba el valor de la variable bOK. Si la variable contiene el valor cero (!bOK), hacemos que el proceso principal retorne con un NO. Ejecutar proceso sin origen Ejecuta el proceso con origen ninguno dado en el parmetro y retorna cuan- do finaliza. Es una Funcin comn de lista y ficha. Hemos de especificar los parmetros siguientes: Identificador del proceso: identificador del proceso con origen ninguno a ejecutar (obligatorio). Variable retorno OK subproceso (opcional): devolver 0 en el caso de que el subproceso sin origen se haya ejecutado una instruccin Set retorno pro- ceso = NO, o en el caso de que no se haya ejecutado correctamente. En ca- so contrario devolver 1. Modo Cliente-Servidor: este parmetro es exclusivo para aplicaciones que vayan a ser ejecutadas con la arquitectura cliente-servidor de Velzquez Vi- sual (Servidor de Aplicaciones de Velzquez Visual). Existen dos modos po- sibles de ejecutar los subprocesos: Local ->: el subproceso ser ejecutado en el Cliente. Servidor ->: el subproceso ser ejecutado en el Servidor (a estos procesos los llamamos procesos en tercer plano). Deshacer transaccin Deshace la transaccin en curso. Es una Funcin comn de lista y ficha a la que no hemos de pasar parmetros. Slo es vlida para aplicaciones eje- cutadas con la versin cliente-servidor, en aplicaciones ejecutadas con VRunner no funcionar. Finalizar proceso Esta funcin nos permite finalizar la ejecucin del proceso en un punto de- terminado. Es una Funcin comn de lista y de ficha y no tiene parmetros. 08 Desarrollo completo de una aplicacin e 298 299 VELAZQUEZ VISUAL Punto donde se puede abortar Esta funcin permite al usuario final interrumpir un proceso que se est eje- cutando en segundo plano (en multitarea). Con esta funcin lo que se pre- tende es minimizar los problemas que pueda generar una interrupcin del proceso, hacindolo de una manera controlada. Para ello, en el Ejecutor tendremos que acceder al cuadro de procesos en segundo plano y pulsar el botn correspondiente. Es una Funcin comn de lista y de ficha. Hemos de especificar la Frmula mensaje al abortar, expresin frmula que se presentar en tiempo de ejecucin cuando el usuario haya abortado el proceso. En el ejecutor se puede abortar un proceso desde la ventana Procesos en ejecucin, si tenemos alguna instruccin Punto donde abortar. Si pulsamos el botn abortar, lanzamos al proceso seleccionado el mensaje abortar. Cuando el proceso pase por una instruccin Punto donde abortar, lanzar un mensaje si tenemos cubierto el parmetro mensaje, y abortar el proce- so. Si hay fichas bloqueadas las desbloquear pero no realizar modifica- cin alguna a partir de este punto. Ejemplo Imaginemos un proceso que realiza facturas y recibos. El lugar ideal para poner un Punto donde abortar sera al finalizar una factura y sus recibos, de modo que tenemos un modo de abortar limpio, con el que podremos deci- dir dnde se detendr un proceso independientemente de donde est eje- cutndose cuando el usuario decida abortar. Funciones de Arrays Un array es una matriz o vector, un grupo de variables que se denominan con un mismo nombre y un nmero de posicin. No almacena un nico va- lor, sino una lista ordenada de ellos. En Velzquez Visual estos valores pue- den ser cadenas de texto, nmeros, fechas y horas, no siendo necesario definir el tipo de dato que se almacenar a la hora de crear un array. Es ms, podemos incluir datos de diferente tipo en un mismo array. Para trabajar con arrays usaremos las siguientes funciones: e Array: Crear Esta instruccin crea un array en un proceso. Es una Funcin comn de lis- ta y de ficha a la que hemos de pasar el parmetro Identificador array: el identificador que se dar al array en el proceso. Array: Tamao Con esta funcin obtenemos el nmero de tem de un array definido en el proceso. Es una Funcin comn de lista y de ficha en la que especificamos los parmetros siguientes: Identificador array: en el men desplegable seleccionamos el array definido en el proceso del que queremos conocer su tamao. Variable retorno tamao: variable local donde se almacenar el tamao del array seleccionado en el primer parmetro. Array: Get tem Con esta instruccin obtenemos un elemento de un array declarado en el proceso. Es una Funcin comn de lista y de ficha. Los parmetros que he- mos de especificar son: Identificador array: en el men desplegable seleccionamos el array definido en el proceso del que queremos obtener un tem. 08 Desarrollo completo de una aplicacin FUNCIONES DE ARRAYS 300 301 VELAZQUEZ VISUAL Posicin: posicin del array en la que se encuentra el tem a obtener. En es- te parmetro podremos especificar tanto una constante como una expre- sin frmula. Ojo: la primera posicin es la nmero 0. Variable retorno dato: variable local donde se guardar el tem obtenido. Array: Set tem Esta instruccin establece el valor de un tem de un array declarado en el proceso. Es una Funcin comn de lista y de ficha. Los parmetros que he- mos de pasarle son: Identificador array: en el men desplegable seleccionaremos el array defini- do en el proceso en el que queremos establecer el valor de un tem. Posicin: es la posicin del array donde est el tem. En este parmetro po- dremos especificar tanto una constante como una expresin frmula. La primera posicin es la nmero 0. Frmula dato: expresin frmula del valor a establecer en el tem. Array: Aadir tem Con esta instruccin aadimos un tem al final de un array declarado en el proceso. Es una Funcin comn de lista y de ficha. Los parmetros que necesita son: Identificador array: en el men desplegable seleccionaremos el array defini- do en el proceso en el que queremos aadir un tem. Frmula dato: expresin frmula del valor del tem a aadir en el array. Array: Insertar tem Con esta instruccin insertamos un tem dentro de un array declarado en el proceso. Es una Funcin comn de lista y de ficha. Necesita los siguientes parmetros: Identificador array: en el men desplegable seleccionaremos el array defini- do en el proceso en el que queremos insertar un tem. Posicin: posicin del array donde insertar el tem. En este parmetro po- dremos especificar tanto una constante como una expresin frmula. La primera posicin es la nmero 0. Frmula dato: expresin frmula del valor del tem a insertar en el array. Array: Suprimir tem Con esta funcin eliminamos un tem de un array declarado en el proce- so. Es una Funcin comn de lista y de ficha en la que hemos de espe- cificar: Identificador array: en el men desplegable seleccionaremos el array defini- do en el proceso del que queremos suprimir un tem. Posicin: posicin del tem a suprimir. En este parmetro podremos especi- ficar tanto una constante como una expresin frmula. La primera posicin es la nmero 0. Array: Suprimir todos Mediante esta instruccin eliminamos todos los tems de un array declarado en el proceso. Es una Funcin comn de lista y de ficha en la que hemos de es- pecificar el parmetro Identificador array: en el men desplegable selecciona- mos el array definido en el proceso del que queremos eliminar todos los tems. Array: Ordenar alfabtico Esta instruccin ordena alfabticamente los tems de un array definido en el proceso. Es una Funcin comn de lista y de ficha en la que especificamos: Identificador array: en el men desplegable seleccionaremos el array defini- do en el proceso cuyos tems se han de ordenar alfabticamente. Orden: podremos optar entre dos modos, Ascendente o Descendente. Array: Ordenar numrico Esta instruccin ordena numricamente los tems de un array definido en el proceso. Es una Funcin comn de lista y de ficha a la que pasamos los pa- rmetros: Identificador array: en el men desplegable seleccionamos el array definido en el proceso cuyos tems se han de ordenar numricamente. Orden: optamos entre dos modos, Ascendente o Descendente. Array: Ordenar fechas Esta instruccin ordena por fecha los tems de un array definido en el proceso. Es una Funcin comn de lista y de ficha. Los parmetros que necesita son: Identificador array: en el men desplegable seleccionaremos el array defini- do en el proceso cuyos tems se han de ordenar por fecha. Orden: de nuevo optamos entre modo Ascendente y Descendente. Array: Ordenar horas Esta instruccin ordena por hora los tems de un array definido en el proce- so. Es una Funcin comn de lista y de ficha. Los parmetros que necesita son: Identificador array: en el men desplegable seleccionamos el array definido en el proceso cuyos tems se han de ordenar por hora. Orden: optamos entre dos modos, Ascendente o Descendente. 08 Desarrollo completo de una aplicacin 302 303 VELAZQUEZ VISUAL Retornos Los Retornos son funciones que nos devuelven un objeto: un texto, una p- gina web, un proceso. Estas funciones no se realizarn hasta que no se ha- ya terminado la ejecucin del proceso. Esto es debido a que los retornos no permiten devolver el control al proceso: los retornos que se lancen durante la ejecucin de un proceso se van almacenando en memoria para que, cuando termine la ejecucin del mismo, se disparen. Esto implica que si despus de aparecer una funcin retorno en un proce- so, a continuacin eliminamos registros o modificamos alguno de los cam- pos, variables, etc., como lo que sta devuelve se evala en el momento que se ejecuta, es decir, al final, los valores sern distintos de los que pudi- mos tener en cuenta a la hora de enviar el retorno. En la figura hemos aadido un retorno que nos presenta una rejilla con una lista de registros. Sin embargo, a continuacin viene una funcin que reco- rre la lista eliminando todas las fichas. Aunque cuando fue lanzado el retor- no haba datos, como se evala al final del proceso, se encuentra con que no hay registros y nos devuelve la rejilla vaca. Lo mismo ocurre si hemos modificado algn campo, una variable global que est presente en un in- forme, etc. Los retornos no funcionan en procesos multitarea, por lo que en aquellos en los que se incluya alguna de estas funciones tienen que ser lanzados en pri- mer plano siempre. Si un proceso multitarea tiene retornos, stos sern ob- viados y no se presentarn al usuario final. Los retornos que podemos usar son: Aadir retorno Funcin comn de lista y de ficha que guarda el recurso declarado en los parmetros para presentarlo al finalizar el proceso. Utilizaremos esta funcin para presentar con un objeto visual los resultados de un proceso. Por ejemplo, el filtrado de una lista presentado en una reji- lla, el resultado de un tubo de ficha y de un tubo de lista, creando una ca- becera y unas lneas de una factura, presentado en un formulario etc. Podemos aadir conjuntamente retornos de ficha y de lista. Todos los retornos son presentados en el orden en que fueron aadidos. Los parmetros que hemos de pasarle a la funcin son: Identificador del recurso: identificador del objeto visual de Velzquez Visual. En el caso de que el origen sea una lista, el objeto ser una rejilla, y si el ori- gen es una ficha, el objeto ser un formulario (obligatorio). Identificador Toolbar: esta opcin slo estar disponible cuando el retorno se efecte sobre una lista. Permite especificar la barra de herramientas con la que se presentar la rejilla seleccionada en el parmetro anterior. sta po- dr ser la estndar de Velzquez Visual, una barra de herramientas perso- nalizada, o ninguna. 08 Desarrollo completo de una aplicacin FUNCIONES DE RETORNO 304 305 VELAZQUEZ VISUAL Frmula ttulo: slo estar disponible cuando el retorno se efecte sobre una lis- ta. Mediante una expresin frmula podremos establecer el ttulo de la ventana. Ejemplo Vamos a lanzar un proceso desde una lista de PROVEEDORES, de modo que primero cargamos el histrico de ALBARANES de los proveedores de la lista. A continuacin filtramos la lista de ALBARANES por su campo FAC- TURADO (campo de tipo booleano). Como filtro hemos puesto !%FACTU- RADO%, de modo que se cargarn todos los albaranes sin facturar de los clientes de la lista. El origen de la siguiente lnea es una lista de albaranes, luego la funcin Aadir Retorno en su parmetro pedir una rejilla de ALBARANES, as que visualizaremos una rejilla con todos los albaranes no facturados de los clientes de la lista original. Aadir retorno proceso Esta funcin guarda el proceso declarado en los parmetros para ejecutar- lo al finalizar el proceso desde el que se ha llamado. Es una Funcin comn de lista y de ficha. Podemos aadir conjuntamente procesos de ficha y de lista, siendo ejecu- tados los procesos en el orden en que fueron aadidos como retorno. Esta funcin se diferencia de la funcin Ejecutar proceso en que el proceso que se ha aadido como retorno se ejecutar cuando finalice el proceso llamador, independientemente del punto en el que se haya incluido la ins- truccin. Por el contrario, la funcin Ejecutar proceso disparar el proceso en el punto donde se haya incluido esta funcin. Es necesario especificar el parmetro Identificador del proceso: identifica- dor del proceso a ejecutar. En el caso de que el origen sea una lista, el pro- ceso ser uno que tenga origen lista, y si el origen es una ficha, el proceso ser uno que tenga origen ficha. Aadir retorno texto Guarda el recurso declarado en los parmetros para presentarlo al finalizar el proceso. Es una Funcin comn de lista y de ficha pensada para la pre- sentacin de Pginas Html; por tanto, el texto que se presente deber ser cdigo Html. El proceso deber ser ejecutado por el servidor HTTP de Ve- lzquez, que devolver al explorador web cliente la pgina creada. Hemos de especificar el parmetro Frmula de texto a retornar, de modo que el texto de la frmula deber ser cdigo Html o una variable local del proceso que haya sido creada con la funcin Html: Ejecutar componente. e Ejemplo En una aplicacin se tiene la tabla ARTISTAS y un histrico de las OBRAS de dichos artistas. Desde un proceso se pretende generar una pgina web en la que se presente el nombre de todos los artistas de la tabla y, tras ca- da artista, todas sus obras (la fotografa y su ttulo). El proceso tendra ori- gen ninguno y sera: Rem -> Composicin de la cabecera de la pgina html Set -> header, <html> <head> <title>Listado de Artistas</title> </head> <body> <p align=\ccenter\c><font face=\cArial Rounded MT Bold\c si- ze=\c6\c color=\c#800000\c>ARTISTAS</font></p><hr> Set -> body, Cargar lista -> ARTISTAS, NOMBRE 0Recorrer lista solo lectura 00Rem -> Composicin del cuerto del mensaje, en l se concatena el nom- bre del artista y un salto de lnea 000Set -> artista, %NOMBRE% + <br> 000Set -> body, body + artista 000Cargar histrico -> OBRAS, ARTISTAS 0000Recorrer lista solo lectura 0000Rem -> Composicin de la parte del cuerpo del mensaje en la que se incluir la fotografa y el nombre de la obra 0000Set -> obra, <p align=\ccenter\c><font face=\cAvantGarde Md BT\c size=\c3\c color=\c#000080\c><strong> +%NOMBRE%+ </strong></font></p> <p align=\ccenter\c><img src=\c_visd_+ %FOTO% + .jpg\c width=\c + %FO- TO-CX% + \c height=\c + %FOTO-CY% + \c alt=\c+%FOTO%+\c></p> 0000Set -> body, body + obra 0000Rem -> Presentacin de la pgina Html, componiendo el texto con el contenido de las variables locales header, body y el cdigo Html de fin de cuerpo y de pgina 0000Aadir retorno texto -> header+body+</body></html> A tener en cuenta en el proceso: para la especificacin de parmetros en Html stos van entrecomillados (). Puesto en las frmulas la comilla est reservada para inicio y fin de una frmula de texto, se utiliza la secuencia de escape \c, que inserta una comilla. Para la especificacin de los campos no se utiliza un comando AVP (los propios de Velzquez), pues stos solamente pueden ser 08 Desarrollo completo de una aplicacin e 306 307 VELAZQUEZ VISUAL utilizados en los objetos Pgina Html y Componente Html. En este caso se es- pecifica directamente el identificador del campo (por ejemplo %NOMBRE%). Cuando presentamos una imagen externa conviene insertar el comando _visd_ (propio de Velzquez Visual) detrs del atributo src. As informamos al Servidor de Aplicaciones que lo que servir a continuacin es una ima- gen, y como tal ha de tratarla. Aadir retorno URL Guarda una direccin URL para abrirla al finalizar el proceso con el Explo- rador Web que incorporan tanto el Ejecutor de Proyectos (ejecutable VRun- ner) como el Navegador de Velzquez Visual (ejecutable Irunner). Es una Funcin comn de lista y de ficha en la que especificaremos la URL a dis- parar en el parmetro Frmula URL. Ejemplo En una tabla CLIENTES se tiene un campo de tipo alfabtico, WEB, en el que almacenamos la direccin web del cliente. Podemos disparar un pro- ceso desde una ficha de CLIENTES que abra la pgina web del cliente edi- tado en la misma. Para ello incluiramos la lnea: Aadir retorno URL -> %WEB% Ejemplo El ejemplo que explicamos a continuacin es especfico para aplicaciones ejecutadas en la versin cliente-servidor de Velzquez Visual, es decir, apli- caciones abiertas en un Servidor de Aplicaciones de Velzquez Visual y ata- cadas con el Navegador de Velzquez Visual. No es vlido para aplicacio- nes ejecutadas con el ejecutor VRunner. Se trata de atacar desde el Navegador de Velzquez Visual la aplicacin que estamos ejecutando, pero va web. En el proyecto habremos creado pginas html; una con el identificador INDEX, que ser la que se presente por defecto. Dispararemos un proceso como el que sigue: If -> fEsClienteServidor() Aadir retorno URL -> fGetWebAplicacion() Antes de lanzar la aplicacin se interroga al Servidor de Aplicaciones si tie- ne arrancado el Servidor HTTP. Para ello se utiliza la funcin de frmulas fEs- ClienteServidor(), que devuelve 1 si est arrancado el servidor Web y 0 si no. Si el servidor web est arrancado, se dispara la pgina principal de la apli- cacin que est siendo ejecutada en ese momento. sta la devuelve la fun- cin de frmulas fGetWebAplicacion(). Esta funcin ya devuelve la pasarela El ejemplo que acabamos de desarrollar resulta mucho ms sencillo trabajando con componentes HTML. ADVERTENCIA e e e cgi completa, de modo que si el Servidor tiene la IP: 212.155.155.155 y la aplicacin se llama HOMERO, lo que devolver la funcin de frmulas fGetWebAplicacion() ser: Http://212.155.155.155/cgi-vel/HOMERO/ En tiempo de ejecucin, al disparar este proceso, se lanzar el explorador web que incorpora el Navegador de Velzquez Visual, con la pgina princi- pal de la aplicacin. La funcin Aadir retorno URL nos permite tener un potente generador de informes en una aplicacin, slo que en vez de usar objetos Informe lo que se crearan seran Pginas HTML con la informacin a presentar. Set retorno proceso = NO Con esta funcin cambiamos el valor de retorno de un proceso que por de- fecto es SI. Cuando se ejecuta esta funcin el proceso llamador recibe un NO, con lo que se inhibe su finalizacin. Es una Funcin comn de lista y de ficha a la que no hemos de pasarle parmetros. Ejemplo En un formulario se ha declarado un proceso asociado al evento Pierde Fo- co de un campo. Al recibir el mensaje de que va a perder el foco, se ejecu- ta dicho proceso, entre cuyas instrucciones se encuentra Set retorno pro- ceso = NO. Al finalizar el proceso y retornar NO, se cancela la prdida de foco del control, permaneciendo el foco en l. Ejemplo En un formulario de CLIENTES se ha declarado un proceso previo al Alta de una ficha en el que se evala si el campo nombre est vaco, en cuyo caso no se dar el alta. Al recibir Velzquez Visual el mensaje de que se va a pro- ducir un alta, ejecuta el proceso previo y, si se cumple la condicin, recibe un Set retorno proceso = NO. La consecuencia es que Velzquez Visual no realiza el Alta. Las lneas de cdigo seran: if -> fCampoVacio( %NOMBRE% ) Mensaje -> Ha de escribir el nombre del cliente, 0 Set retorno proceso = No El proceso evala si est vaco el campo NOMBRE del cliente, en cuyo ca- so lanza un mensaje advirtindolo y cancela el alta. Imprimir informe Imprime el informe que especifiquemos con los registros de la lista actual. Es una Funcin propia de lista a la que hemos de pasar los parmetros: Identificador informe: identificador del informe a imprimir (obligatorio). Impresora lgica: puede ser la asignada al informe o cualquiera de las que tenemos definidas en el proyecto. 08 Desarrollo completo de una aplicacin e e e 308 309 VELAZQUEZ VISUAL Esta funcin de informes ha de ser disparada desde una lnea cuyo origen sea una Lista de una tabla de datos. Por tanto, si queremos imprimir una fi- cha determinada, la lista que alimente esta funcin deber contener nica- mente el registro a imprimir. Ejemplo Al dar de alta un proveedor queremos imprimir un informe con los datos del mismo. Segn esto vemos que el origen del proceso ha de ser una ficha de la tabla PROVEEDORES. Este proceso carga la lista de Proveedores por su ndice CODIGO, utilizan- do como resolucin 1 el cdigo de la ficha del formulario. El resultado se- r una lista de Proveedores con un nico registro: el que ha sido dado de alta en el formulario. Por ltimo, tendramos que asociar este proceso como Posterior a la pulsa- cin del botn Aceptar. No puede ser Anterior porque este evento es dis- parado antes de que la ficha sea guardada en el disco y, por tanto, si la fi- cha no existe, no puede ser impresa. Set retorno funcin Permite establecer un retorno de un objeto visual funcin ( ) de Velz- quez Visual. Es una Funcin especfica para el objeto visual funcin y hemos de pasarle el parmetro Frmula dato de retorno, expresin frmula con el dato a retornar. Ejemplo Tenemos una funcin, a la que llamaremos FUNCION, que contiene la ins- truccin siguiente: Set retorno funcin -> Esto es el retorno de la funcin Si un proceso introducimos la lnea: Set -> RetornoFuncion, FUNCION() Entonces la variable local RetornoFuncin devolver la cadena Esto es el retorno de la funcin. Ficha y campos Las funciones pertenecientes a este grupo trabajan con fichas (registros), y algunas concretamente con campos. El origen de todas ellas ha de ser, por tanto, una ficha. e e Funcin Modificar campo Esta funcin modifica el contenido de un campo que especifiquemos con el resultado de una frmula. Es una Funcin propia de ficha a la que hemos de pasar los parmetros: Identificador campo: identificador del campo a modificar (obligatorio). Frmula nuevo dato: expresin tipo frmula para calcular el nuevo conteni- do del campo (obligatorio). Ejemplo Supongamos que queremos modificar el valor del campo PVM (Precio Ven- ta al por Mayor) subindolo un 10%. Para ello introduciramos la siguiente lnea de cdigo: Modificar campo -> PVM, %PVM% * 1.1 Get campo Devuelve el contenido de un campo sin que se evale la frmula que lo con- tenga. Por ejemplo, para obtener la frmula escrita por un usuario en un campo de tipo frmula dinmica o para obtener la etiqueta de un campo objeto. Es una Funcin propia de ficha. Hemos de especificar los siguientes parmetros: 08 Desarrollo completo de una aplicacin FUNCIONES DE FICHA Y CAMPOS e 310 311 VELAZQUEZ VISUAL Identificador campo: el identificador del campo del que queremos obtener su contenido. Variable donde retorna contenido campo: especificacin de la variable local donde queremos almacenar el contenido del campo (no es necesario que la declaremos primero). Check frmula dinmica Comprueba si una frmula dinmica escrita por un usuario es correcta o no. Es una Funcin propia de ficha que necesita los parmetros: Identificador campo: identificador del campo frmula dinmica a evaluar. Variable retorno OK: variable local del proceso que recoger si la frmula escrita por el usuario es correcta (1) o no (0). Variable retorno mensaje: variable local del proceso que recoger, en caso de ser incorrecta la frmula, un texto con el error generado. Un proceso con esta instruccin podra ejecutarlo en un formulario, como evento de prdida de foco de un control de edicin de un campo tipo frmu- la dinmica, con lo que si el usuario ha introducido una frmula incorrecta, no dejar continuar hasta corregir el error, devolvindonos al control de edicin. Limpiar campo objeto Esta funcin limpia el contenido de un campo de tipo objeto, es decir, lo de- ja vaco. Es una Funcin propia de ficha en la que hemos de especificar el Identificador Campo: el identificador del campo objeto cuyo contenido que- remos limpiar. Importar texto Con esta funcin importamos el contenido de un fichero de texto en un campo de tipo alfabtico (alfabtico, alfa128, alfa64 y alfa40) u objeto tex- to. Es una Funcin propia de ficha en la que especificamos: Identificador Campo: identificador del campo en el que queramos importar el contenido del archivo de texto. Senda fichero origen: senda completa del fichero que deseamos importar. Variable local que retorna S/No Import: aqu declaramos una variable lo- cal para recoger si se import el fichero (1) o no (0). Este proceso, que tiene origen en una ficha, lanza la ventana de seleccin del fichero para que el usuario pueda seleccionar el fichero a importar. Im- porta el contenido del fichero de texto a un campo de tipo objeto texto de la tabla, de modo que si no lo importa lanza un mensaje de aviso. Exportar texto Con exportar texto generamos un fichero de texto a partir del contenido de un campo alfabtico (alfabtico, alfa128, alfa64 y alfa40), objeto texto o fr- mula alfabtica. Es una Funcin propia de ficha en la que debemos especi- ficar los parmetros: Identificador campo: identificador del campo alfabtico, objeto texto o fr- mula alfabtica que deseamos exportar. Senda fichero de destino: senda en la que se va a exportar el fichero de texto. Identificador variable de retorno S/No export: en este parmetro podre- mos declarar una variable local del proceso que recoger si se ha exporta- do (1) o no (0) el texto. Este proceso, que tiene su origen en una lista de Proveedores, guarda la sen- da en la que se van a generar los archivos de texto en una variable local (path). A continuacin recorre la lista de proveedores en modo de solo lectura. En la variable local fichero concatena la variable local que contena la sen- da, el nombre del proveedor y le aade un punto y la extensin TXT. En la siguiente lnea crea el fichero de texto con el nombre del proveedor con el contenido de un campo de tipo objeto texto de la tabla. Si no pudo expor- tar nos avisa con un mensaje. Importar dibujo Esta funcin importa un archivo de imagen a un campo de tipo Objeto di- bujo. Es una Funcin propia de ficha que necesita la especificacin de los parmetros siguientes: Identificador campo: nombre del campo de tipo objeto dibujo que va a re- cibir la importacin de la imagen (obligatorio). Senda fichero origen: especificacin de la va de acceso al fichero de don- de se va a importar (obligatorio). Aqu podemos utilizar las variables del sis- tema c y d (directorio actual y de la aplicacin, respectivamente) y/o varia- bles locales (o globales, o constantes) que contengan la senda del archivo a importar. Identificador variable de Retorno S/No import: variable en la que se va a guardar si se import (1) o no (0) el dibujo (opcional). 08 Desarrollo completo de una aplicacin 312 313 VELAZQUEZ VISUAL Ejemplo Para importar un dibujo que se llame DIBUJO.BMP y que se encuentre en el directorio de la aplicacin introduciramos la siguiente lnea: Importar dibujo -> FOTO, d + \\Foto.bmp, bOK Esta funcin importar el contenido del archivo Foto.bmp (para incluir en una cadena la barra de directorio hay que escribirla dos veces: \\), en el campo FOTO de la ficha actual. En la variable local bOK guardar el valor de si import (1) o no (0). Exportar dibujo Crea un archivo con la imagen contenida en un campo de tipo objeto dibu- jo. Es una Funcin propia de ficha en la que hemos de especificar: Identificador campo: nombre del campo de tipo objeto que va a producir la exportacin de la imagen (obligatorio). Senda fichero destino: especificacin de la va de acceso al fichero donde se va a exportar (obligatorio). Aqu podemos utilizar las variables del sistema c y d y/o variables locales que contengan la senda del archivo a exportar. Identificador variable de Retorno SI/NO export: variable en la que se va a guardar si se export (1) o no (0) el dibujo (opcional). Ejemplo En la tabla EMPLEADOS tenemos un campo, FOTO, que es de tipo Objeto Di- bujo. Queremos crear un proceso asociado al formulario de modificaciones de EMPLEADOS que exporte la fotografa del empleado editado a un archivo BMP. El proceso debe tener su origen, por tanto, en una ficha de EMPLEADOS. Sera: Mediante la funcin Set creamos una variable local del proceso, a la que he- mos llamado archivo, y le asignamos como contenido el campo %NOM- BRE%del empleado ms la extensin .bmp. As, al archivo de imagen crea- do se identificar con el nombre del empleado. Con la funcin Pedir dato pedimos al usuario que introduzca la senda com- pleta del directorio donde queremos guardar el archivo a exportar. En una e e variable local del proceso, que hemos llamado bOK, se guardar si el usua- rio ha aceptado el formulario (1) o no (0). En otra variable local de tipo tex- to, path, guardamos la ruta escrita por el usuario. A continuacin se evala (if) si la variable local bOK contiene un 1. En caso afirmativo continuar con el proceso, en caso negativo se parar la ejecu- cin del mismo. Se vuelve a asignar el valor 0 a la variable local bOK, pues la utilizaremos de nuevo para realizar otra evaluacin. La siguiente funcin es Exportar dibujo. Como primer parmetro especificamos el nombre del campo de tipo Objeto Dibujo del cual se va a copiar la imagen (FOTO). El siguiente parmetro es la ruta y el nombre del archivo donde se co- piar: path + \\ + archivo , que se especificar a travs del Asistente para la creacin de frmulas. Puesto que la ruta la tenemos en una variable local, la primera parte de la frmula ser dicha variable local (path). A esta variable hay que aadirle la barra de directorios (\), por lo que le concatenaremos los sm- bolos \\ (en un texto para poder utilizar la barra \ como texto y no como modi- ficador hemos de escribirla dos veces). Finalmente aadimos el nombre del fi- chero, que se encuentra en la variable local archivo. El ltimo parmetro ser la variable local en la que guardamos si se ha exportado o no el dibujo (bOK). Se evala si el fichero ha sido o no exportado, con la funcin if. Si bOK = 1 (el fichero ha sido exportado) entonces se presenta el siguiente mensaje: Mensaje: El fichero ha sido copiado en + path + \\ + archivo. Se tra- ta de una frmula en la que incluimos una cadena de texto (El fichero ha sido copiado en ), a la que concatenamos la variable local que contiene la ruta del directorio (path), la barra de directorios (\\) y la variable local que contiene el nombre del fichero (archivo). Si no ha sido exportado (Else), entonces se presentar el mensaje siguien- te: Compruebe si la ruta que ha escrito es correcta. Refrescar dimensiones dibujo Refresca los valores de los campos que almacenan las dimensiones de una imagen. Es una Funcin propia de ficha. Cuando una tabla tiene un campo de tipo Objeto Dibujo, Velzquez, a tra- vs de la opcin del men del Editor Campos/Crear campos dimensiones dibujo, nos da la opcin de crear dos campos para almacenar sus dimen- siones. El valor de estos campos es actualizado automticamente cuando se da de alta o modifica un dibujo en una ficha. Si modificamos la estructura de una aplicacin que ya tiene datos y aadi- mos los campos para guardar las dimensiones del dibujo, al ejecutar la apli- cacin todos los registros que ya existan antes de la modificacin del pro- yecto y que contuviesen dibujos tendrn ambos campos a 0. Para estos ca- sos tendremos que ejecutar un proceso con esta funcin para darles el va- lor que les corresponda. 08 Desarrollo completo de una aplicacin e 314 315 VELAZQUEZ VISUAL De cara a la ejecucin de una aplicacin con el Servidor Web de Velzquez Visual, si en una tabla que tiene un campo de tipo Objeto Dibujo se inclu- yen los campos para guardar las dimensiones del mismo, las imgenes se presentarn con mayor rapidez. Hemos de especificar el parmetro Identificador Campo objeto dibujo: iden- tificador del campo objeto dibujo del que se tomarn las dimensiones para almacenar en los campos correspondientes. Ejemplo En un proyecto existe una tabla de Artculos que contiene un campo de ti- po Objeto Dibujo llamado FOTO. Realizamos una modificacin en el pro- yecto para aadir los campos de dimensiones del objeto, por lo que tras ejecutar la opcin correspondiente, en la tabla aparecern los campos FO- TO-CX y FOTO-CY. Con el fin de dar valor a estos campos en los registros que ya existan antes de modificar el proyecto hemos de ejecutar un proce- so con origen en una lista de artculos. ste ser: Recorrer lista lectura / escritura Refrescar dimensiones dibujo -> FOTO Ha cambiado el campo? Esta funcin devuelve, en una variable local al proceso, el resultado de comprobar si el campo identificado ha sido modificado. Devuelve 1 si ha si- do modificado y 0 en caso contrario. Es una Funcin propia de ficha. Podemos utilizarla, por ejemplo, asociada a la prdida de foco de un cam- po de un formulario de modificaciones. As, si el campo ha cambiado se eje- cutar un proceso, si no, no se ejecutar. Ojo: esta funcin ha de ser usa- da antes de grabar en disco, pues compara el valor actual del campo con el valor almacenado en disco. Especificaremos los parmetros: Identificador campo: identificador del campo consultado (obligatorio). Identificador variable de retorno S/No: identificador de la variable local donde devuelve el valor S/No que indica si el campo ha sido modificado (opcional). Ejemplo Hemos creado un proceso que realiza una serie de clculos en funcin del contenido del campo PRECIO de una tabla de ARTICULOS. A este proceso lo hemos llamado CAMBIO-PRECIO. Para que no se ejecute el proceso siem- pre que en un formulario de modificaciones de ARTICULOS pierda el foco el campo PRECIO, crearemos un proceso y lo asociaremos a la prdida de fo- co de dicho campo. El origen del mismo ha de ser una Ficha de ARTICULOS: e e Ha cambiado el campo, PRECIO, bOK if bOK Ejecutar proceso -> CAMBIO-PRECIO Este proceso comprueba si ha cambiado el valor del campo PRECIO, en cuyo caso ejecuta el proceso CAMBIO-PRECIO. Ha cambiado la ficha? Esta funcin devuelve, en una variable local al proceso, el resultado de comprobar si se ha modificado algn campo de la ficha. Devolver 1 si ha cambiado la ficha y 0 en caso contrario. Es una Funcin propia de ficha. Podemos usarla, por ejemplo, como proceso anterior a una modificacin de ficha. As, si se ha modificado algn campo de la misma, se ejecutar un proceso, si no, no se ejecutar. Del mismo modo que la funcin Ha cam- biado el campo?, ha de usarse antes de grabar en disco, ya que tambin comprueba el valor actual del campo con el almacenado en disco. Hemos de especificar el parmetro Identificador variable de retorno S/No: identificador de la variable local donde devuelve si el campo ha sido modi- ficado o no (opcional). Ya existe en el ndice? Esta funcin devuelve, en una variable local al proceso, el resultado de comprobar si en el ndice identificado, de clave nica, ya existe la clave ac- tual. La funcin compone la clave adecuada al ndice en el que se realiza la consulta tomndolo de la ficha origen de la funcin, por lo que nosotros no tendremos que hacer nada. Es una Funcin propia de ficha. Cuando damos de alta un registro a travs de formulario, Velzquez com- prueba en todos los ndices de clave nica que no haya registros duplica- dos, pero cuando damos de alta a travs de tubos o procesos (por ejemplo) slo se comprueba que no est duplicado el ndice CODIGO. Entonces es interesante crear triggers anteriores al alta en los que la funcin Ya existe en el ndice? compruebe que no existan duplicidades en los dems ndices de clave nica de la tabla. En el caso de existir el ndice, usaremos la funcin Set retorno proceso = NO para cancelar el alta. Los parmetros que hemos de especificar son: Identificador ndice: identificador del ndice consultado (obligatorio). Identificador variable de retorno S/No: identificador de la variable local don- de devuelve el valor S/No que indica si la clave ya existe en ese ndice de clave nica (opcional). Ejemplo 08 Desarrollo completo de una aplicacin e e 316 317 VELAZQUEZ VISUAL El proceso anterior tiene su origen en una ficha y comprueba si el registro ya est indexado por ese cliente. Se utilizar la variable local de retorno S/No para evaluar el resultado y actuar en consecuencia. Ya existe en alguno de sus ndices de clave nica? Esta funcin comprueba todos los ndices de clave nica y devuelve, en una variable local al proceso, el mensaje que nos indica por qu ndices de cla- ve nica ya existe el registro actual (si es que ya existe por alguno). La fun- cin compone la clave adecuada al ndice en el que se realiza cada una de las consultas; nosotros no tenemos que ocuparnos de ello. Es una Funcin propia de ficha. Hemos de especificar los parmetros: Identificador variable de retorno S/No: identificador de la variable local donde devuelve el valor S/No que indica si la clave ya existe en ese ndice (opcional). Identificador variable de retorno mensaje: identificador de la variable donde se guardar el mensaje. Ejemplo Este proceso, lanzado antes de dar de alta un Proveedor, comprueba si el registro ya existe por alguno de sus ndices de clave nica, en la variable lo- cal bok almacenar si ya existe, y en la variable local mensaje se guarda- r el ndice o ndices de clave nica duplicado. Si se cumple la condicin, devuelve un mensaje indicando por qu clave nica ya existe y cancela el alta (Set retorno proceso = NO). Pedir Formulario Visualiza el formulario indicado, parndose el proceso hasta que el usuario cierre el formulario. Es una Funcin propia de ficha. El formulario se rellena con el contenido de la ficha en curso, pudiendo el usuario modificar los datos antes de aceptar. No podemos utilizar esta fun- cin para dar altas, sino para realizar modificaciones. Cuando modificamos una ficha de esta manera, Velzquez Visual nicamen- te controla la clave primaria CODIGO, el resto de claves nicas deben ser controladas por nosotros en triggers, mediante las funciones Ya existe en el ndice? o Ya existe en alguno de sus ndices? Esto es as ya que Pedir for- mulario se usa sobre todo para obtener datos en variables o campos para bsquedas que no tengan formulario asignado, u otros casos parecidos. Hemos de especificar los parmetros siguientes: e e Identificador formulario: identificador del formulario a presentar (obligatorio). Identificador de la variable local que retorna SI/NO: variable local en la que se recoger si el usuario ha pulsado Aceptar o Cancelar (opcional). Ejemplo En la siguiente lnea pedimos el formulario de precios de un artculo. Pedir Formulario -> ARTICULO-PRECIOS Ventana dibujo tamao original Presenta en una ventana el contenido del campo de tipo objeto dibujo se- leccionado en su tamao original, o proporcionado si ste es mayor que el tamao de la pantalla. Es una Funcin propia de ficha a la que hemos de pasar los parmetros: Campo objeto dibujo: identificador del campo tipo objeto dibujo a presen- tar (obligatorio). Ttulo ventana (opcional): frmula para la composicin del ttulo de la venta- na que se presente. Si no especificamos ninguna frmula el ttulo ser 0. Ejemplo En un casillero de una tabla ARTICULOS queremos que, al hacer clic sobre una casilla, se presente la foto del artculo con su tamao original. El pro- ceso tendr su origen en una ficha de artculos y ser: Ventana dibujo tamao original -> FOTO, %NOMBRE% En el segundo parmetro se ha seleccionado el campo %NOMBRE% para que se visualice el nombre del artculo como ttulo de la ventana. Formulario Alta de Maestro Esta funcin crea un nuevo registro en la tabla de datos maestra apuntada por el campo enlazado, utilizando el formulario declarado en el otro par- metro, y generando un subproceso de ficha con los datos del registro crea- do. El proceso queda paralizado hasta que el usuario cierre el formulario. Es una Funcin propia de ficha. Necesita los siguientes parmetros: Identificador campo: identificador del campo enlazado (obligatorio). Identificador formulario: identificador del formulario a visualizar (obligatorio). Ejemplo En un proceso cuyo origen es una ficha de ARTICULOS queremos dar de dar de alta la marca (maestro) del artculo. 08 Desarrollo completo de una aplicacin e e e 318 319 VELAZQUEZ VISUAL El proceso anterior pide el formulario MARCA-ALTA para dar de alta una nueva Marca de Artculos. Leer ficha de maestro Lee la ficha del maestro del campo enlazado y crea un subproceso de ficha con los datos del registro ledo. Esta ficha es de solo lectura, por lo tanto, ningn cambio ser guardado en la base de datos. El subproceso que ge- nera esta funcin tendr su origen en la ficha del maestro editado. Es una Funcin propia de ficha en la que especificamos el parmetro Identificador campo: identificador del campo enlazado (obligatorio). Ejemplo Desde una ficha de ARTICULOS permitiremos la lectura de los datos de su maestro MARCAS. El proceso anterior lee la ficha de la marca del artculo actual, pero no po- demos modificarla en el subproceso generado. La lnea de subproceso creada por esta funcin tendr como origen una ficha de MARCAS. Modificar ficha de maestro Lee la ficha del campo enlazado y crea un subproceso de ficha con los datos del registro ledo. Podemos modificar esta ficha en el subproceso, de modo que cual- quier cambio ser guardado en la tabla de datos. Es una Funcin propia de ficha. Hemos de especificar el parmetro Identificador campo: identificador del campo enlazado (obligatorio). Ejemplo Leeremos la ficha de la marca del artculo actual y podremos modificar al- gn campo de la misma en el subproceso generado. API de Velzquez La A.P.I. de Velzquez Visual (Aplication Program Interface o Interfaz de Apli- cacin del Programa: conjunto de rutinas del sistema que se pueden usar en un programa para la gestin de entrada/salida, gestin de ficheros, etc.) nos permiten trabajar con campos y consta de las siguientes funciones: e e e APIVEL Nmero de campos Esta funcin devuelve el nmero de campos que tiene una tabla determina- da. Es una Funcin comn de lista y de ficha. Hemos de especificar los parmetros: Identificador tabla: de la lista de tablas de datos del proyecto indicamos aquella de la que queremos obtener el nmero de campos. Variable retorno dato: variable local del proceso que recoger el nmero de campos de la tabla. APIVEL Campo Get nombre por nmero Esta funcin devuelve el nombre de un campo segn el nmero que le pa- semos. Es una Funcin comn de lista y de ficha en la que hemos de indi- car los siguientes parmetros: Identificador tabla: de la lista de tablas de datos del proyecto selecciona- mos aquella de la que queremos obtener el nombre del campo. Nmero de campo: expresin tipo frmula con el nmero de campo del que queremos obtener el nombre. El orden que se sigue es 0 para el primer campo de la tabla, 1 para el segundo y as sucesivamente. 08 Desarrollo completo de una aplicacin FUNCIONES API DE VELZQUEZ VISUAL 320 321 VELAZQUEZ VISUAL Variable retorno dato: variable local del proceso que recoger el nombre del campo. Ejemplo Tenemos una tabla de artculos con los siguientes campos: Si ejecutamos las instrucciones: APIVEL Campo Get nombre por nmero -> , 0, retorno La variable local retorno devolver: Cdigo. APIVEL Campo Get nombre por nmero -> , 4, retorno La variable local retorno devolver: Artculo suscripcin. APIVEL Campo Get nombre por identificador Esta funcin devuelve el nombre o descripcin de un campo segn el identi- ficador de campo que le pasemos. Es una Funcin comn de lista y de ficha. Hemos de pasarle los parmetros: Identificador tabla: de la lista de tablas de datos del proyecto selecciona- mos aquella de la que queremos obtener el nmero de campos. Identificador de campo: de la lista de campos de la tabla seleccionamos el que deseemos. Variable retorno dato: variable local del proceso que recoger el nombre del campo. e Ejemplo Tenemos una tabla de artculos con los campos siguientes: Si ejecutamos la instruccin: APIVEL Campo Get nombre por identificador -> , CODIGO, retorno La variable local retorno devolver: Cdigo. APIVEL Campo Get nombre por identificador -> , ARTI-SUSCRIP, retorno La variable local retorno devolver: Artculo suscripcin. APIVEL Campo Get nmero por identificador Esta funcin devuelve el nmero de orden de un campo segn el identifica- dor de campo que le pasemos. Es una Funcin comn de lista y de ficha. Hemos de pasarle los parmetros: Identificador tabla: de la lista de tablas de datos del proyecto selecciona- mos aquella de la que queremos obtener el nmero de campos. Identificador de campo: de la lista de campos de la tabla seleccionamos el que deseemos. Variable retorno dato: variable local del proceso que recoger el nmero del campo. Comienza a numerar por 0. Ejemplo Tenemos la tabla de artculos anterior: 08 Desarrollo completo de una aplicacin e e 322 323 VELAZQUEZ VISUAL Si ejecutamos la instruccin: APIVEL Campo Get nmero por identificador -> , CODIGO, retorno La variable local retorno devolver: 0. APIVEL Campo Get nmero por identificador -> , ARTI-SUSCRIP, retorno La variable local retorno devolver: 4. APIVEL Modificar campo por nmero Esta funcin modifica el contenido de un campo que especifiquemos con el resultado de una frmula, escogindolo usando el nmero de campo en vez del identificador. Es una Funcin propia de ficha a la que hemos de pasar los parmetros: Frmula nmero del campo: expresin tipo frmula para calcular el nmero del campo (obligatorio). Frmula nuevo dato: expresin tipo frmula para calcular el nuevo conteni- do del campo (obligatorio). APIVEL Get campo por nmero Esta funcin obtiene el contenido de un campo que especifiquemos con el resultado de una frmula. Es una Funcin propia de ficha a la que hemos de pasar los parmetros: Frmula nmero del campo: expresin tipo frmula para calcular el nmero del campo (obligatorio). Variable donde retorna contenido dato: variable local en la que guardaremos el contenido del campo (obligatorio). Internet Con las siguientes instrucciones de Internet de Velzquez y el Servidor de Aplicaciones WEB podremos presentar pginas web dinmicas: e Html: ejecutar componente Esta funcin ejecuta un Componente Html. El resultado es almacenado en una variable local que en otro punto del proceso llamaremos en la funcin Aadir retorno texto para lanzar una pgina web. El proceso, por tanto, de- ber ejecutarse por el servidor HTTP de Velzquez Visual. Es una Funcin comn de lista y de ficha. Hemos de pasarle los parmetros: Variable retorno Html: especificar el nombre de la variable local del proce- so que va a recoger el cdigo html del componente ejecutado. Identificador componente: de la lista desplegable seleccionaremos el com- ponente html a ejecutar. Frmula parmetros: si en el componente html se hubiesen definido par- metros, se resolveran aqu, separados entre comas y en el mismo orden en el que fueron definidos en el componente. Ejemplo Tenemos tres parmetros en el Componente Html para poder pasarle el nombre, direccin y telfono del usuario y presentarlo en una pgina web. 08 Desarrollo completo de una aplicacin FUNCIONES DE INTERNET DE VELZQUEZ e 324 325 VELAZQUEZ VISUAL En la casilla de parmetros los resolvemos separando cada uno con una co- ma: %NOMBRE%,%DIRECCION%,%TELEFONO%. La variable local reco- ger el componente Html con los parmetros ya sustituidos por sus valo- res, con lo que al final del proceso, con una funcin retorno, mostraramos la pgina web completa. Aprovechamos para recordar que si en una frmula vamos a incluir una constante decimal, hemos de usar el punto ( . ), no la coma ( , ). Internet: Conectar Esta funcin establece conexin con un servidor de Internet, un servidor Proxy o una LAN desde una aplicacin de Velzquez. Si existen varias cone- xiones, se presentar en primer lugar la que tengamos por defecto. Es una Funcin comn de lista y de ficha en la que especificaremos el parmetro- Variable retorno OK conexin: identificador de la variable local que retorna- r si se ha realizado la conexin (1) o no (0). Internet: Get estado conexin Esta funcin devuelve el estado de la conexin a Internet y a travs de qu se est realizando. Es una Funcin comn de lista y de ficha en la que es- pecificamos los siguientes parmetros: Variable retorno OK: identificador de la variable local que retornar el esta- do de la conexin. Variable retorno s/no Mdem: identificador de la variable local que devol- ver si se est realizando una conexin va modem (1) o no (0). Variable retorno s/no Lan: identificador de la variable local que devolver si se est realizando una conexin LAN (1) o no (0). Variable retorno sno Proxy: identificador de la variable local que devolver si se est realizando una conexin a travs de un servidor Proxy (1) o no (0). Internet: Desconectar Esta funcin desconecta la conexin a Internet realizada desde un proceso de Velzquez Visual. Es una Funcin comn de lista y de ficha en la que in- dicamos el parmetroVariable retorno de desconexin: identificador de la variable local que retornar si se ha realizado la desconexin (1) o no (0). Get fichero de URL Guarda en disco un fichero de una URL (una pgina html, un jpeg, etc.). Es una Funcin comn de lista y de ficha a la que hemos de pasar los parmetros: URL: expresin frmula con la URL de la que queremos obtener un objeto. Fichero de destino: expresin frmula. Se especificar la senda, nombre y extensin del fichero de destino. Variable retorno OK: variable local que devolver si la instruccin se ha eje- cutado satisfactoriamente (1) o no (0). e Ejemplo Imaginemos que en la aplicacin permitimos la exploracin web y quere- mos ejecutar un proceso que almacene en disco la ltima URL visitada; el proceso sera: En la instruccin Get fichero de URL los parmetros utilizados han sido: URL: fGetLastWebURL(), funcin de frmulas que devuelve la URL de la l- tima pgina web visitada. Fichero destino: d+\\Webs + fGetLastWebTitle(), la senda donde guardar el fichero de la URL ser en la carpeta Webs que se encuentra dentro del direc- torio de la aplicacin (variable del sistema d). Como nombre de archivo se uti- liza la funcin de frmulas fGetLastWebTitle(), que devuelve el ttulo de la l- tima pgina visitada y se ha aadido a la cadena la extensin, el literal .htm. E-mail Para manejar correo electrnico desde un proceso contamos con una serie de funciones de proceso que nos facilitan la tarea. stas se presentan en la siguiente figura: 08 Desarrollo completo de una aplicacin FUNCIONES DE E-MAIL e 326 327 VELAZQUEZ VISUAL E-mail: Get Fecha/Hora Esta funcin obtiene la fecha y la hora de un campo tipo objeto e-mail. Es una funcin Funcin propia de ficha en la que seleccionamos los parme- tros siguientes: Identificador campo e-mail: identificador del campo e-mail del que quere- mos obtener la fecha y la hora. Fecha (variable donde retorna): identificador de la variable local del proce- so donde se almacenar la fecha del e-mail. Hora (variable donde retorna): identificador de la variable local del proceso donde se almacenar la hora del e-mail. E-mail: Set Fecha/Hora Esta funcin establece la fecha y la hora en un campo tipo objeto e-mail. Es una Funcin propia de ficha. Hemos de pasarle los parmetros siguientes: Identificador campo e-mail: identificador del campo e-mail en el que quere- mos establecer la fecha y la hora. Fecha: frmula con la especificacin de la fecha. Hora: expresin frmula con la especificacin de la hora. E-mail: Get Destinatario Esta funcin obtiene el destinatario de un campo tipo objeto e-mail. Es una Funcin propia de ficha en la que hemos de especificar: Identificador campo e-mail: identificador del campo e-mail del que preten- demos obtener el destinatario. Destinatario (variable donde retorna): identificador de la variable local del proceso donde queremos almacenar el destinatario. E-mail: Set Destinatario Esta funcin asigna un destinatario a un campo tipo objeto e-mail. Es una Funcin propia de ficha en la que indicamos los parmetros: Identificador campo e-mail: identificador del campo e-mail al que asigna- mos el destinatario. Destinatario: expresin frmula con la especificacin del destinatario. E-mail: Get Cc Esta funcin obtiene el destinatario de la carbon copy de un campo e-mail. Es una Funcin propia de ficha en la que indicamos los parmetros: Identificador campo e-mail: identificador del campo e-mail del que quere- mos obtener el destinatario de la carbon copy. Cc (Variable donde retorna): declaracin de una variable local del proceso donde se recoger el destinatario de la carbon copy. E-mail: Set Cc Esta funcin asigna el destinatario de una carbon copy de un campo tipo objeto e-mail. Es una Funcin propia de ficha. Los parmetros a especificar son: Identificador campo e-mail: identificador del campo e-mail en el que esta- bleceremos el destinatario de la carbon copy. Cc: expresin frmula con la especificacin del destinatario de la carbon copy del e-mail. E-mail: Get Bcc Esta funcin obtiene el destinatario oculto de un campo tipo objeto e-mail. Es una Funcin propia de ficha. Indicaremos los parmetros siguientes: Identificador campo e-mail: identificador del campo e-mail del que quere- mos obtener el destinatario oculto del mensaje. Bcc (Variable donde retorna): variable local del proceso donde se recoger el destinatario oculto del mensaje. E-mail: Set Bcc Esta funcin especifica el destinatario oculto de un e-mail. Es una Funcin propia de ficha y hemos de indicarle los siguientes parmetros: Identificador campo e-mail: identificador del campo e-mail en el que espe- cificamos el destinatario oculto del mensaje. Bcc: expresin frmula con la especificacin del destinatario oculto del mensaje. E-mail: Get Remitente Esta funcin obtiene el remitente de un e-mail. Es una Funcin propia de fi- cha en la que especificamos los parmetros siguientes: Identificador campo e-mail: identificador del campo e-mail del que quere- mos obtener el remitente. Remitente (Variable donde retorna): variable local del proceso donde se re- coger el remitente del mensaje. E-mail: Get nmero de ficheros adjuntos Esta funcin obtiene el nmero de ficheros adjuntos en un e-mail. Es una Funcin de ficha que necesita los siguientes parmetros: Identificador campo e-mail: identificador del campo e-mail del que quere- mos conocer el nmero de ficheros adjuntos. 08 Desarrollo completo de una aplicacin 328 329 VELAZQUEZ VISUAL Variable donde retorna el nmero: variable local del proceso que recoger el nmero de ficheros adjuntos. E-mail: Salvar fichero adjunto Esta funcin guarda en disco un documento adjunto en un e-mail. Es una Funcin de ficha que necesita los parmetros: Identificador campo email: identificador del campo e-mail del que queremos extraer el archivo adjunto. Frmula nmero de adjunto (del 1 al ): expresin frmula que resuelva el n- mero del documento adjunto. Cuando visualizamos los archivos adjuntos en un control de tipo e-mail, el primero comenzando por la izquierda ser el 1. Variable donde retorna el nombre del fichero: variable local del proceso donde se guardar el nombre del fichero adjunto. Frmula senda para salvar: expresin frmula con la senda del archivo a guardar. Ejemplo Queremos ejecutar un proceso desde un formulario de una tabla que tiene un campo tipo objeto e-mail, de modo que guarde en disco todos los do- cumentos adjuntos dentro de la carpeta Adjuntos que cuelga del directorio de la aplicacin. El proceso sera: Primero comprueba el nmero de ficheros adjuntos del mensaje y ejecuta un bucle for tantas veces como ficheros adjuntos tenga. Dentro del bucle ejecutar la instruccin para salvar el fichero adjunto, los pa- rmetros son: Identificador campo e-mail: EMAIL. Frmula nmero de adjun- to: se resuelve con la variable local x, que es la que se incrementa en el bu- cle for. Variable donde retorna el nombre del fichero: hemos inicializado una variable local llamada NomFichero. Frmula senda para salvar: hemos com- puesto la siguiente frmula: d + \\Adjuntos\\ + NomFichero, siendo d la variable del sistema que devuelve el directorio de la aplicacin, \\Adjuntos\\ es la carpeta, dentro del directorio de la aplicacin, donde guardamos el fi- chero y NomFichero es la variable local que contiene el nombre del fichero. E-mail: Set Remitente Esta funcin establece el remitente de un e-mail. Es una Funcin propia de ficha en la que hemos de especificar los parmetros siguientes: Identificador campo e-mail: identificador del campo e-mail en el que quere- mos establecer el remitente. Remitente: expresin frmula con la especificacin del remitente. e E-mail: Get Asunto Esta funcin obtiene el asunto de un e-mail. Es una funcin Funcin propia de ficha que necesita los parmetros: Identificador campo e-mail: identificador del campo e-mail del que quere- mos obtener el asunto. Asunto (Variable donde retorna): variable local del proceso donde se alma- cenar el asunto del mensaje. E-mail: Set Asunto Esta funcin especifica el asunto de un e-mail. Es una Funcin propia de ficha. Los parmetros necesarios son: Identificador campo e-mail: identificador del campo e-mail del que estable- cemos el asunto. Asunto: expresin frmula con el asunto del mensaje. E-mail: Get cuerpo mensaje Esta funcin obtiene el cuerpo del mensaje de un e-mail. Es una Funcin propia de ficha con los parmetros: Identificador campo e-mail: identificador del campo e-mail del que quere- mos obtener el cuerpo del mensaje. Mensaje (Variable donde retorna): variable local del proceso donde se al- macenar el cuerpo del mensaje. E-mail: Set cuerpo mensaje Esta funcin establece el cuerpo del mensaje de un e-mail. Es una Funcin propia de ficha que necesita los parmetros siguientes: Identificador campo e-mail: identificador del campo e-mail del que estable- cemos el cuerpo del mensaje. Mensaje: expresin frmula con la especificacin del cuerpo del mensaje. Ejemplo A continuacin expondremos un ejemplo de cmo componer un e-mail pa- ra la realizacin de un pedido. El esquema de tablas sobre el que trabaja- mos es el siguiente: 08 Desarrollo completo de una aplicacin e 330 331 VELAZQUEZ VISUAL La tabla PROVEEDORES contiene un campo alfabtico (E-MAIL) donde se almacena la direccin de correo electrnico del proveedor. En la variable global $REMITENTE$ se almacena la direccin de correo electrnico de nuestra empresa. El campo de tipo objeto e-mail de la tabla PEDIDOS se llama MENSAJE. El proceso, con origen en una ficha de la tabla PEDIDOS, ser: E-mail: Set fecha/hora -> MENSAJE, fHoy(), fAhora() E-mail: Set destinatario -> MENSAJE, %PROVEEDORES.NOMBRE% + < + %PROVEEDORES.E-MAIL% + > E-mail: Set remitente -> MENSAJE, $REMITENTE$ E-mail: Set asunto -> MENSAJE, Pedido nmero: + %CODIGO% E-mail: Set cuerpo -> Pedido nmero: + %CODIGO%+ \r\n + \r\n + \r\n+ fJustificarLeft( CODIGO, 10 ) + fJustificarLeft( NOMBRE, 40 ) + fJustificarRight( CANTIDAD ) + \r\n + fRepiteCadena( _, 60 ) + \r\n Cargar histrico -> LINEASDEPEDI, CODIGO Recorrer lista solo lectura Set -> cuerpo, cuerpo + fJustificarRight( %ARTICULOS%, 10, 0 ) + + fJustificarLeft( %ARTICULOS.NOMBRE%, 40 ) + +fJustificarRight( %CANTIDAD#S%,5 ) + \r\n E-mail: Set cuerpo mensaje -> MENSAJE, cuerpo Este proceso en primer lugar establece fecha y hora del mensaje, el desti- natario, el remitente y el asunto. Inicializa la variable local cuerpo con una frmula que crea una cadena en la que se incluye el nmero del pedido, y el encabezado de las lneas del pedido. Carga las lneas del pedido y concatena a la variable local cuerpo cada l- nea de pedido. Finalmente, genera el cuerpo del campo MENSAJE con el contenido de la variable local cuerpo. El resultado final del cuerpo del mensaje sera: e Pedido nmero: 1 CODIGO NOMBRE CANTIDAD 0000000001 Tuercas 250 0000000002 Tornillos 5.200 0000000003 Clavos 25 E-mail: Adjuntar fichero Esta funcin adjunta un archivo en un e-mail. Es una Funcin propia de fi- cha en la que hemos de especificar los parmetros siguientes: Identificador campo e-mail: identificador del campo e-mail al que vamos a adjuntar el fichero. Frmula senda: en este parmetro se especificar una frmula con la sen- da del fichero a adjuntar. Ejemplo En un formulario que contiene un control de edicin de un campo objeto e- mail, queremos incluir un botn a travs del cual el usuario pueda seleccio- nar documentos para adjuntar en el correo electrnico. Utilizaremos bsica- mente tres instrucciones de procesos: Ventana seleccin de fichero, para presentar la ventana de seleccin de fichero de Windows en la que selec- cionar los archivos a adjuntar, For, instruccin que incluiremos en un bucle for para que el usuario pueda estar seleccionando archivos a adjuntar hasta que cancele la ventana de seleccin de fichero y E-mail: Adjuntar fichero. El proceso ser: El proceso inicializa la variable local bOK a 1; sta ser utilizada tanto en la condicin de salida del bucle for como para determinar si el usuario ha seleccionado algn fichero en la ventana de seleccin de fichero. Repetir el bucle for mientras la variable bOK sea distinta de 0. Mostrar la ventana de seleccin de fichero. El fichero seleccionado por el usuario ser almacenado en la variable local fichero, y retornar si el usua- rio ha aceptado o cancelado la ventana de seleccin de fichero en la varia- ble local bOK. Si la variable bOK es igual a 1, adjuntar el fichero seleccionado por el usuario al campo e-mail; sino, no se har nada y finalizar la ejecucin del bucle for y del proceso. 08 Desarrollo completo de una aplicacin e e 332 333 VELAZQUEZ VISUAL E-mail: Eliminar fichero adjunto Esta funcin elimina un fichero adjunto de un e-mail. Es una Funcin de fi- cha en la que indicamos los parmetros: Identificador campo email: identificador del campo e-mail del que elimina- remos un fichero adjunto. Frmula nmero de adjunto (del 1 al ): expresin frmula que resuelva el nmero del documento adjunto a eliminar. El primero por la izquierda ser el 1. Ejemplo En un formulario donde estamos editando un objeto e-mail queremos incluir un botn para eliminar un documento adjunto; el proceso podra ser: E-mail: Iniciar conexin para enviar Esta funcin inicia la conexin para el posterior envo de mensajes. Es una Funcin comn de lista y de ficha en la que hemos de indicar el parmetro Nombre del servidor, expresin frmula con la especificacin del servidor utilizado. E-mail: Enviar Es una Funcin comn de lista y de ficha con la que enviamos e-mails. An- tes habremos establecido conexin con Internet mediante la funcin Inter- net: Conectar y con el servidor de correo, con la funcin Iniciar conexin pa- ra enviar. Hemos de especificar los parmetros: Identificador campo e-mail: campo e-mail a enviar. Variable retorno Ok enviado: variable local del proceso que recoger si el e- mail ha sido enviado (1) o no (0). Ejemplo Veamos un ejemplo de una aplicacin que contemple funciones de correo electrnico. La aplicacin tiene tres tablas: e e CLIENTES: contiene los datos del cliente, incluida su direccin de correo electrnico (campo E-MAIL). CARTAS TIPO: contiene un campo descripcin donde se especificar el te- ma de la carta (campo NOMBRE) y un campo de tipo objeto texto que re- coger el cuerpo de la carta (campo CARTA). MENSAJES: tabla histrica de CLIENTES donde se irn almacenando los mensajes de correo electrnico enviados a cada cliente. Contiene un cam- po booleano que recoger si el mensaje est enviado o no, y un ndice que utilizar este campo como campo condicin para indexar (para que slo in- dexe los que tengan el campo booleano a 0). Esta tabla tiene un campo FE- CHA que recoger la fecha de envo del mensaje, adems del campo tipo objeto email (EMAIL) que contendr el correo. Asimismo se han creado dos variables globales de tipo alfabtico; una en la que se almacenar el Servidor por el que se va a establecer la conexin (SERVIDOR) y otra que recoger el nombre de la empresa duea del pro- grama. Vamos a crear dos procesos: uno que en base a una carta tipo selecciona- da genere los e-mails correspondientes en la tabla MENSAJES, y otro que los enve. El proceso para la creacin de e-mails tendr su origen en una ficha de la tabla CARTAS, y ser: El proceso comienza inicializando dos variables locales para almacenar el contenido de los campos NOMBRE y CARTA de la tabla CARTASTIPO. s- tas son asunto y cuerpo, respectivamente. 08 Desarrollo completo de una aplicacin e 334 335 VELAZQUEZ VISUAL Carga la lista de clientes, la recorre y comprueba si el cliente actual tiene especificada una direccin de correo electrnico. En caso de que dicho campo no est vaco, el proceso almacenar en las variables locales cliente y e-mail el cdigo y el contenido del campo e-mail del cliente en curso. Por cada cliente dar de alta un registro en la tabla MENSAJES, al que se le asignar como cliente el almacenado en la variable local cliente. Se utilizan las funciones de e-mail para establecer el destinatario (almace- nado en la variable local e-mail), el remitente (almacenado en la variable glo- bal EMPRESA), el asunto (almacenado en la variable local asunto) y el cuer- po del mensaje. Fijmonos cmo la frmula del cuerpo del mensaje conca- tena a la cadena Estimado el nombre del cliente, dos retornos de carro y la carta (almacenada en la variable local cuerpo). El resto de los parmetros del e-mail (fecha, hora, etc.) sern asignados cuando se ejecute el proceso de envo de los e-mails. Este proceso tendr su origen en una lista de la tabla MENSAJES y ser: El proceso comienza conectndose a Internet, y si se ha logrado la cone- xin, inicia la conexin con el servidor almacenado en la variable global $SERVIDOR$ para enviar los mensajes. Recorre la lista de mensajes y, si el mensaje no est enviado, modifica el campo FECHA por la fecha actual (funcin fHoy() ), establece la fecha y ho- ra de envo del mensaje y enva el mensaje. Si el mensaje ha sido enviado, modificar el campo booleano ENVIADO de la tabla MENSAJES. Una vez enviados todos los mensajes se desconecta (si no se ha podido desconectar el proceso lo advierte a travs de un mensaje). Si no se ha podido establecer la conexin de Internet, se emitir un mensaje infor- mativo. e E-mail: Iniciar conexin para recibir Esta funcin inicia la conexin para la posterior recepcin de mensajes. Es una Funcin comn de lista y de ficha en la que hemos de especificar los parmetros siguientes: Nombre del servidor: expresin frmula con la especificacin del servidor de correo entrante utilizado. Usuario: expresin frmula con el nombre de la cuenta de correo que se va- ya a utilizar. Password: contrasea de la cuenta de correo. N de emails en servidor (variable donde retorna): inicializacin de una va- riable local del proceso que devolver el nmero de mensajes recibidos en esa cuenta en el servidor de correo entrante. E-mail: Recibir uno Esta funcin nos permite recibir un e-mail. Para recibir correo, al igual que para enviarlo, primero debemos conectarnos a Internet con la funcin In- ternet: Conectar, y luego al servidor de correo con la funcin Iniciar cone- xin para recibir. Es una Funcin comn de lista y de ficha en la que espe- cificamos los siguientes parmetros: Nmero (1 -> N de emails): expresin frmula con la especificacin del n- mero de e-mail a recibir (el nmero total de e-mails en el servidor de correo entrante lo devuelve la funcin E-mail: Iniciar conexin para recibir). Mensaje (variable donde retorna): inicializa una variable local del proceso en la que se almacenar el mensaje recibido. Variable retorno ok recibido: inicializa una variable local que recoger si el mensaje ha sido recibido (1) o no (0). Ejemplo Veamos un proceso para recepcin de correo electrnico. Los mensajes re- cibidos sern dados de alta en una tabla llamada MENSAJES. Este proceso realiza la conexin a Internet, inicia la conexin para recibir es- pecificando como parmetros el nombre del servidor de correo entrante, el 08 Desarrollo completo de una aplicacin e 336 337 VELAZQUEZ VISUAL nombre de usuario y la contrasea de la cuenta de correo y una variable lo- cal para fijar el nmero de mensajes a recibir. Mediante un bucle for vamos recibiendo uno a uno los mensajes y dndo- los de alta en la tabla correspondiente. Listas Conjunto de instrucciones que nos permiten trabajar con listas de tablas para leer registros, escribir, eliminar, etc. Recorrer lista solo lectura Es una Funcin propia de lista que recorre la lista y ejecuta, con cada re- gistro de la misma, las instrucciones que cuelgan en el subproceso. El subproceso que cuelga es de ficha, pero al de solo lectura, los registros no pueden ser alterados con funciones tales como Modificar campo (aun- que s podemos leerlos). No tiene parmetros. Recorrer lista lectura / escritura Esta funcin recorre la lista y ejecuta, con cada registro de la misma, las ins- trucciones que cuelgan en un subproceso (de ficha). En este caso, los re- gistros de la lista pueden ser modificados por funciones como Modificar campo. No tiene parmetros. FUNCIONES DE LISTA e Ejemplo Veamos un proceso que recorra una lista de ARTICULOS y suba un 10% el precio de los mismos. El origen de la lnea de esta funcin tendr que ser una Lista de ARTICULOS: La funcin Modificar campo requiere que se le indique el campo a modifi- car y el nuevo valor que va a tomar dicho campo. Recorrer lista eliminando fichas Recorre la lista borrando los registros de la misma. Antes de eliminar cada re- gistro ejecuta las instrucciones que cuelgan en el subproceso de ficha. Eje- cutar las actualizaciones declaradas en la tabla de datos asociada a la lista. Es una Funcin propia de lista a la que no hemos de pasar parmetros. Esta funcin es muy til para realizar un superborrado. Cuando se intenta eliminar una ficha de maestro que tiene datos en tablas histricas, el pro- grama no lo permite por tener datos en histricos. Para poder borrar dicha ficha el usuario tendra que ir borrando uno a uno todos los registros hist- ricos de dicho maestro. El peligro del superborrado est en que si se borra el registro de maestro equivocado, ya no nos podemos volver atrs, por eso es ms que aconsejable que pidamos confirmacin del borrado. Ejemplo Tenemos una tabla maestra AUTORES y su histrica LIBROS. Para permitir que un usuario pueda borrar un autor y todos sus libros crearamos un pro- ceso asociado al botn Eliminar del formulario de bajas de autores, con ori- gen en una ficha de AUTORES y del tipo: fPregunta() es una funcin que muestra un cuadro de dilogo con el literal escrito entre parntesis, con los botones aceptar y cancelar. Si el usuario pulsa aceptar, devolver 1, si no, 0. Al utilizar esta funcin con el mandato IF, ste evaluar si la condicin es verdadera. La funcin Set retorno proceso = No anula la pulsacin del botn Eliminar. Recorrer lista eliminando fichas sin desactualizar Esta funcin recorre la lista borrando cada uno de los registros que la com- 08 Desarrollo completo de una aplicacin e e 338 339 VELAZQUEZ VISUAL ponen y ejecutando un subproceso de ficha por cada uno de los registros borrados. Es una Funcin propia de lista que no tiene parmetros. Con cada ficha borrada no se realizan las actualizaciones declaradas en la tabla de datos asociada a la lista. Ejemplo Esta funcin permite borrar las lneas de detalle de un albarn de compras. Si la tabla tiene declaradas actualizaciones a una tabla de EXISTENCIAS, dichas actualizaciones no sern anuladas. Esto tiene sentido si previamen- te las lneas han sido copiadas con un tubo de lista y dadas de alta como lneas de detalle de una factura. Filtrado de lista Quita de la lista los elementos que no cumplan la condicin de la frmula, de modo que los elementos filtrados no son borrados en la tabla de datos, slo son eliminados de la lista. Esta funcin no crea un subproceso, es sim- plemente un paso que altera el contenido de la lista en curso. La siguiente funcin del proceso obtendr la lista filtrada. Es una Funcin propia de lista en la que especificamos el parmetro Fr- mula condicional, frmula que establece la condicin del filtro (obligatorio). Ejemplo En un proceso con origen una lista de ARTICULOS queremos quitar de la lista aquellos cuyo stock actual sea 0. Para ello incluimos la siguiente lnea de cdigo: Filtrado de lista -> %STOCKTOTAL% ! 0 Filtramos la lista de ARTICULOS eliminando aquellos cuyo stock actual sea 0. De la tabla de datos no se borran, pero la lista con la que se trabaja en el proceso no los incluir a partir de esta instruccin. Ordenar lista Funcin propia de lista que ordena la lista actual por los campos dados. Pri- mero ordena por el campo del primer parmetro, si hay valores iguales en el campo, vuelve a ordenar por el campo del segundo parmetro y si hay coincidencias en el segundo campo, vuelve a ordenar por el campo del ter- cer parmetro y as sucesivamente. La ordenacin no est limitada a los campos de la tabla de datos en curso: podemos ordenar por cualquier cam- po de una tabla de datos enlazada. Esta funcin no crea ningn subproceso, es un simple paso. Hemos de pa- sarle los parmetros siguientes: Identificador campo 1: identificador del campo para ordenar el nivel 1 (obli- gatorio). Los filtrados ralentizan la ejecucin por tratarse de operaciones secuenciales. Slo hemos de usarlos cuando sea imprescindible, sustituyndolos por bsquedas siempre que nos sea posible. ADVERTENCIA e e Identificador campo 2: identificador del campo para ordenar el nivel 2 (op- cional). Identificador campo 3: identificador del campo para ordenar el nivel 3 (op- cional). Identificador campo 4: identificador del campo para ordenar el nivel 4 (op- cional). Identificador campo 5: identificador del campo para ordenar el nivel 5 (opcional). Identificador campo 6: identificador del campo para ordenar el nivel 6 (opcional). Ejemplo Supongamos que la tabla de datos de origen es ARTICULOS y los parme- tros son los siguientes: Identificador campo 1: %FAMILIA.NOMBRE% Identificador campo 2: %MARCA.NOMBRE% Identificador campo 3: %NOMBRE% En este ejemplo se ordena por el Nombre de la familia, y dentro del nom- bre, por el Nombre de su marca, y dentro del nombre de la marca, por el nombre del artculo. Invertir lista Invierte el orden de la lista actual. La funcin Ordenar lista ordena de forma ascendente, de modo que si queremos ordenar de manera descendente, or- denaremos previamente la lista y despus utilizaremos la funcin Invertir lista. Es una Funcin propia de lista a la que no hemos de pasar parmetros y que no crea subproceso. Ejemplo Para ordenar una lista por nombre y de forma descendente usaramos el proceso siguiente: Cortar lista Recorta el nmero de elementos de la lista al tamao dado en el parmetro y desde la posicin especificada. El resto de los elementos no son borra- 08 Desarrollo completo de una aplicacin e e 340 341 VELAZQUEZ VISUAL dos de la tabla de datos, pero la lista con la que trabajaremos en el proce- so desde esa instruccin no incluir los elementos eliminados. Es una Funcin propia de lista que no crea ningn subproceso y a la que pasamos los siguientes parmetros: Nuevo tamao: frmula en la que indicamos el nmero de elementos para la nueva lista (obligatorio). Posicin inicial: posicin a partir de la cual queremos que se corte la lista. La primera posicin de la lista ser la 0 (obligatorio). Ejemplo La siguiente lnea de proceso establece que la lista actual ha de tener un mximo de 10 elementos, siendo el nmero dos el primero de la nueva lista. Cortar lista -> 10, 2 Quitar ficha de la lista Quita de la lista el elemento que especifiquemos, pero sin borrarlo de la ta- bla de datos. Es una Funcin propia de lista en la que hemos de indicar el parmetro Posicin: expresin frmula en la que indicamos la posicin del registro que queremos quitar de la lista (obligatorio). Multi Partir Lista Parte la lista actual por cada ficha encontrada en la que el valor del campo de particin sea diferente al anterior. Debe ir precedida de la funcin Orde- nar lista por el campo que posteriormente queramos realizar la particin. Cuando se parte una lista, Velzquez Visual recorre los registros de la lista en curso y compara el contenido del campo de cada uno de los registros con su anterior. Si no son iguales, crea una nueva lista y sigue con la prxi- ma comparacin hasta finalizar. Es una Funcin propia de lista que origina un subproceso de lista a ejecu- tar por cada lista generada y a la que hemos de especificar el parmetro Identificador campo: identificador del campo por el que partimos la lista (obligatorio). Ejemplo Desde una lista de ALBARANES queremos agrupar los albaranes de cada cliente para generar una factura nica. Para ello creamos el proceso si- guiente: e e El proceso tiene su origen en una lista de ALBARANES, haciendo lo si- guiente: ordena la lista de albaranes por el campo CLIENTE y multiparte la lista por ese mismo campo. Como resultado obtendremos tantas listas de albaranes como clientes hubiese en la lista de origen, de modo que ya ten- dremos en cada lista todos los albaranes de cada cliente. Recordamos que el subproceso que esta funcin genera ser ejecutado por cada lista, por lo que simplemente queda ya generar la cabecera de la factura y sus lneas. Para crear la cabecera se lee el primer albarn, se ejecuta un tubo de ficha y se guarda en la variable local nFactura la factura generada, luego se car- gan las lneas de todos los albaranes del Cliente y se generan las lneas de la factura a travs de un tubo de lista con induccin, es decir, inducindole como maestro (Cabecera de factura) la ficha guardada en la variable local nFactura. Listas: Ficha seleccionada Gracias a las instrucciones de Listas: Ficha seleccionada, podremos traba- jar con los registros de una tabla, leyndolos, modificndolos o eliminndo- los una vez seleccionados. 08 Desarrollo completo de una aplicacin e 342 343 VELAZQUEZ VISUAL Seleccionar ficha por posicin Selecciona en la lista actual el elemento de la posicin indicada en el par- metro. Podemos leer el registro seleccionado con las funciones Leer ficha seleccionada o Modificar ficha seleccionada. Es una Funcin propia de lista en la que indicamos el parmetro Posicin: nmero de elemento a seleccio- nar dentro de la lista (obligatorio). El primer elemento de la lista es el nme- ro 1. Puede tratarse tanto de un nmero como de una variable numrica. Ejemplo Seleccionaremos la primera ficha de la lista actual. Para ello introducimos la siguiente lnea de cdigo: Seleccionar ficha por posicin -> 1 La variable del sistema n contiene el nmero de elementos de una lista, as que para seleccionar la ltima ficha de una lista podramos introducir: Seleccionar ficha por posicin, n Seleccionar ficha mediante Localizador Presenta el Localizador que especifiquemos para que el usuario seleccione el registro que le interese. El localizador se presentar sin el combo para la seleccin de ndices ni el control de edicin para escribir la cadena a bus- car. Esto es as ya que el localizador del proceso puede no estar alimenta- e do por la tabla completa, y si estuvieran activados ambos controles busca- ra en toda la tabla y no solamente en la lista obtenida en el proceso. Esta funcin genera un subproceso que ser ejecutado si el usuario pulsa el botn Atrapar del localizador, pudiendo, por ejemplo, leer o modificar la ficha seleccionada. Es una Funcin propia de lista a la que hemos de pasar como parmetro el Iden- tificador Localizador: identificador del localizador que usaremos (obligatorio). Ejemplo Con el siguiente proceso, de una lista de personas escogemos una y modi- ficamos su ficha. El proceso carga la tabla PERSONAS, presenta un localizador para que el usuario seleccione una ficha, y si selecciona alguna, se presentar la ficha en el formulario de modificaciones especificado. Modificar ficha seleccionada con formulario Modifica el registro seleccionado directamente desde un formulario. Es una Funcin propia de lista a la que hemos de pasar los siguientes parmetros: Identificador Formulario: identificador del formulario que utilizaremos para editar la ficha seleccionada. Identificador variable local que retorna S/No modificaron: esta variable lo- cal devolver 1 si se ha modificado la ficha y 0 si no se ha modificado. Existe una funcin de procesos similar llamada Modificar ficha selecciona- da, pero sta no presenta formulario. Leer ficha seleccionada Lee la ficha seleccionada en la rejilla en curso, creando un subproceso de ficha con dicho registro. El subproceso, que slo se ejecutar si tenemos seleccionada una ficha, ser de solo lectura, es decir, los cambios que pre- tenda hacer sern ignorados. Es til, por ejemplo, para copiar el contenido de un campo en una variable local del proceso. Es una Funcin propia de lista a la que no hemos de pasar parmetros. Se ha de utilizar despus de las funciones Seleccionar ficha por posicin o Se- leccionar ficha mediante localizador. Ejemplo El siguiente proceso asigna todos los artculos incluidos en una lista a un mismo distribuidor, seleccionado por el usuario (en la estructura de tablas 08 Desarrollo completo de una aplicacin e e 344 345 VELAZQUEZ VISUAL DISTRIBUIDORES es maestro de ARTICULOS). El proceso tendr su origen en una lista de la tabla ARTICULOS: El proceso carga primero la tabla DISTRIBUIDORES y lanza un localizador para que el usuario seleccione el distribuidor que deseemos asignar a los artculos de la lista. Una vez seleccionado, se lee la ficha del Distribuidor y se crea la variable local cdigo para almacenar su cdigo (la funcin Set permite la creacin de variables locales de un proceso y asignar valores a las mismas). Finalmente, recorre la lista de artculos, asignndole a cada uno el distribuidor seleccionado por el usuario. Modificar ficha seleccionada Abre la ficha seleccionada en la lista en curso en modo lectura/escritura. Crea un subproceso de ficha y lectura/escritura con la ficha seleccionada, por lo tanto, cualquier cambio realizado en la ficha ser salvado en disco. El subproceso no ser ejecutado si no hay ficha seleccionada. Es una Funcin propia de lista a la que no hemos de pasar parmetros y que debe utilizarse despus de las funciones Seleccionar ficha por posicin o Seleccionar ficha mediante localizador. Es similar a la funcin Modificar fi- cha seleccionada con formulario, vista anteriormente, slo que Modificar fi- cha seleccionada no presenta formulario. Ejemplo Modificar ficha seleccionada Pedir formulario -> ARTICULO-MOD, bOK Ejemplo Modificar ficha seleccionada con formulario -> ARTICULO-MOD, bOK Aparentemente ambos procesos hacen lo mismo: presentar un formulario para modificar la ficha seleccionada. La diferencia estriba en que en el pri- mero de ellos la verificacin de claves duplicadas es menos exhaustiva, es el proceso el que controla la modificacin. El segundo equivale a hacer do- ble clic en una rejilla para modificar una ficha, por lo que es el propio for- mulario el que controla la modificacin. Por tanto, cuando en un proceso queremos modificar una ficha presentando un formulario debemos utilizar la funcin Modificar ficha seleccionada con formulario. e e e Eliminar ficha seleccionada Elimina la ficha seleccionada en la lista en curso. Si la tabla tiene declara- da alguna actualizacin sta ser ejecutada. Crea un subproceso de ficha con la ficha seleccionada, que se ejecutar despus de haber sido borra- da la ficha. Si no hay ninguna ficha seleccionada, el subproceso no ser ejecutado. Esta funcin se utilizar despus de las funciones Seleccionar ficha por po- sicin o Seleccionar ficha mediante localizador, es una Funcin propia de lista y no tiene parmetros. Ejemplo El siguiente proceso lanza un localizador para que el usuario seleccione una ficha. La ficha que haya seleccionado ser borrada. Eliminar ficha seleccionada sin desactualizar Elimina la ficha que est seleccionada en la lista en curso. Al contrario que la funcin anterior, al eliminar la ficha no se realizan las actualizaciones. Crea un subproceso de ficha con la ficha seleccionada, de modo que si no hay ninguna ficha seleccionada el subproceso no ser ejecutado. Debe uti- lizarse despus de las funciones Seleccionar ficha por posicin o Seleccio- nar ficha mediante localizador. Es una Funcin propia de lista en la que no hemos de especificar par- metros. Cestas Dentro de los procesos podemos trabajar con Cestas de la compra, as co- mo con cestas locales (estas cestas locales y los registros que contengan permanecern nicamente dentro del proceso que las cre). Tienen las mis- mas funciones que una cesta, solo que no se presentan al usuario, sino que se usan para que el proceso trabaje con distintas listas. 08 Desarrollo completo de una aplicacin e 346 347 VELAZQUEZ VISUAL Cesta: Crear cesta local Con esta funcin crearemos una Cesta de la compra local (debe ser la pri- mera del proceso para que funcione). Es una Funcin comn de lista y de ficha en la que especificaremos: Identificador tabla: nombre de la tabla para la que creamos la cesta. Identificador cesta: identificador que vayamos a dar a la cesta que se utili- zar a nivel local en el proceso. Cesta: Limpiar Esta funcin permite limpiar (vaciar) la cesta de la compra especificada en el parmetro. Puede especificarse o bien un objeto Cesta de la compra creado en el panel derecho del editor de proyectos o una cesta local del proceso. Es una Funcin comn de lista y de ficha en la que especificamos el parmetro Identificador cesta: identificador de la cesta de la que quere- mos borrar su contenido. Cesta: Procesar Esta funcin genera un subproceso, de modo que todas las funciones que se incluyan dentro de dicho subproceso se ejecutarn sobre la lista de re- gistros contenidos en la cesta. El origen del subproceso ser una lista de la tabla de datos de la cesta. Es una Funcin comn de lista y de ficha en la que especificamos el parmetro Identificador cesta: identificador de la ces- ta sobre la que trabajaremos. FUNCIONES DE CESTAS Cesta: Agregar ficha cesta Esta funcin guarda la ficha procesada en la cesta de la compra especifi- cada en su parmetro. Puede especificarse o bien un objeto Cesta de la compra creado en el panel derecho del editor de proyectos, o una cesta lo- cal del proceso. Es una Funcin propia de ficha en la que especificamos el parmetro Identificador Cesta: identificador de una cesta de la compra. Cesta: Quitar la ficha Esta funcin quita la ficha actual de la cesta especificada en sus parme- tros. Puede especificarse o bien un objeto Cesta de la compra creado en el panel derecho del editor de proyectos o una cesta local del proceso. Es una Funcin propia de ficha en la que especificamos el parmetro Identificador Cesta: identificador de una cesta de la compra. Ejemplo Supongamos una cesta de clientes con identificador MAILING, que utiliza- mos para la impresin de etiquetas. Vamos a recorrerla y quitar de ella aquellos registros que no tengan la direccin y a los que no podremos aso- ciar etiquetas vlidas. Cesta: Procesar -> MAILING Recorrer lista If -> fCampoVacio ( %DIRECCION% ) Cesta: quitar ficha -> MAILING Cesta: Tienes la ficha Esta funcin devuelve la posicin de la ficha actual dentro de la cesta de la compra especificada como parmetro. Puede especificarse o bien un obje- to Cesta de la compra creado en el panel derecho del editor de proyectos o una cesta local del proceso. Es una Funcin propia de ficha en la que in- dicaremos los parmetros: Identificador Cesta: identificador de una cesta de la compra. Variable retorno posicin: aqu se declara una variable que retornar la po- sicin de la ficha actual dentro de la cesta. Si no lo contuviese devolvera 0. Cesta: Agregar lista Esta funcin aade la lista actual a la cesta de la compra definida en el par- metro. Puede tratarse tanto de una cesta local del proceso como de cualquier objeto cesta creado en el panel derecho del editor de proyectos. Es una Fun- cin propia de lista en la que indicamos el parmetro Identificador Cesta: iden- tificador de un objeto Cesta de la compra o de una cesta local del proceso. Cesta: Quitar lista Quita de la cesta especificada como parmetro los registros que contenga la lista actual. Puede tratarse de una cesta local del proceso o de cualquier 08 Desarrollo completo de una aplicacin e 348 349 VELAZQUEZ VISUAL objeto cesta creado en el panel derecho del editor. Funcin propia de lista en la que especificamos el parmetro Identificador Cesta: identificador de un objeto Cesta de la compra o de una cesta local del proceso. Ejemplo Queremos ejecutar un proceso que quite de la cesta de la compra aquellos registros que se hayan encontrado despus de la ejecucin de una bs- queda. El proceso tendra su origen en una lista de la tabla de datos aso- ciada a la cesta, y tendra como nica lnea: Cesta: Quitar lista -> IDENTIFICADOR_CESTA Cesta: Cruzar lista Esta funcin Cruza la lista actual con los registros contenidos en una cesta, conservando en la cesta los registros que coincidan en ambas listas. Puede especificarse o bien un objeto Cesta de la compra creado en el panel dere- cho del editor de proyectos o una cesta local del proceso. Es una Funcin propia de lista en la que especificamos el parmetro Identificador Cesta: iden- tificador de un objeto Cesta de la compra o de una cesta local del proceso. Navegante y bsquedas Al igual que el usuario final puede usar el navegante o realizar las bsque- das que incorpore la aplicacin, nosotros tambin podemos echar mano de estas funciones a lo largo de un proceso: FUNCIONES DE NAVEGANTE Y BSQUEDAS e Cargar histrico Si el origen es ficha, lee los histricos del registro actual de la tabla de datos en curso. Si es lista, lee los histricos de todos los registros la lista. Crea un subproceso de lista alimentado por todos los registros histricos cargados. Es una Funcin comn de lista y de ficha en la que especificaremos el pa- rmetro Identificador tabla de datos: identificador de la tabla de datos y del enlace histrico a usar (obligatorio). Ejemplo En este ejemplo cargamos la lista de albaranes del cliente de la ficha en curso. Cargar histrico -> VALBARANES, CLIENTES A continuacin podramos recorrer la lista (Ver Recorrer lista lectura/escritu- ra) y modificar los campos (Ver Modificar campo) de los albaranes de este cliente. Cargar maestros Carga cada una de las fichas del archivo maestro que estn siendo apunta- das por las fichas de la lista en curso a travs del campo enlazado. De es- ta forma, se obtiene una lista, sin repeticiones, con las fichas maestras apuntadas. Es una Funcin propia de lista en la que indicamos el parme- tro Identificador Campo: identificador del campo enlazado (obligatorio). Ejemplo En un proceso en el que trabajamos sobre una lista de CLIENTES queremos cargar todas las poblaciones a las que pertenecen dichos clientes. Para ello habr que escribir: Cargar maestros ->POBLACIONES Devuelve una lista con todas las poblaciones a las que pertenecen los clien- tes de la lista de origen del proceso. Esta funcin genera un subproceso, cuyo origen ser la lista obtenida. En este caso el origen del subproceso sera una Lista de POBLACIONES. Bsqueda Esta funcin ejecuta cualquiera de las bsquedas que tengamos declara- das en el proyecto, generando un subproceso cuyo origen ser la lista re- sultante de la ejecucin de la bsqueda. Es una Funcin comn de lista y de ficha en la que especificamos el parmetro Identificador bsqueda: iden- tificador de la bsqueda que queramos ejecutar. Ejemplo En este proceso en primer lugar se ejecuta una bsqueda de Albaranes en- tre fechas (en la bsqueda definimos un formulario para la especificacin de 08 Desarrollo completo de una aplicacin La bsqueda siempre ser realizada sobre todos los registros de la tabla de datos y no sobre una parte de ella. ADVERTENCIA e e e 350 351 VELAZQUEZ VISUAL la fecha). A continuacin filtramos, quedndonos con los albaranes que no estn facturados, y luego lanzamos el proceso Facturar-albaranes, encar- gado de realizar su facturacin. Cargar lista Carga una lista de registros de la tabla de datos dada por un ndice. Si no se resuelve ninguna de las partes del ndice, se carga la tabla de da- tos completa. Si se resuelve la primera parte del ndice en los ndices com- puestos son ledas todas las fichas que tengan esa parte en su clave, des- preciando el resto de partes del ndice. Podemos afinar ms el resultado re- solviendo, por el orden dispuesto, el resto de las partes del ndice. Esta funcin es Funcin comn de lista y de ficha y crea un subproceso de lista con los registros encontrados. Hemos de pasarle los parmetros si- guientes: Identificador tabla: identificador de la tabla de datos a cargar (obligatorio). Identificador ndice: identificador del ndice por el que se va a buscar (obligatorio). Resolucin 1: frmula para resolver la primera parte de la clave del ndice (opcional). Resolucin 2: frmula para resolver la segunda parte de la clave del ndice (opcional). Resolucin 3: frmula para resolver la tercera parte de la clave del ndice (opcional). Resolucin 4: frmula para resolver la cuarta parte de la clave del ndice (opcional). Ejemplo Cargaremos la tabla de datos ALBARANES DE VENTAS por el ndice CLIENTES con una resolucin. Por lo tanto, sern cargados los registros de la tabla de albaranes cuyo campo CLIENTE sea igual a la variable local cliente (los apstrofes indican variable local al proceso). Cargar lista -> VALBARANES , CLIENTES , cliente , Los parmetros especificados son los siguientes: Debemos resolver: ninguna parte; la primera; la primera y la segunda; la primera, la segunda y la tercera; la primera, la segunda, la tercera y la cuarta. Si no lo hacemos as, y dejamos sin resolver una por el medio (por ejemplo, resolvemos la primera y la tercera, dejando la segunda parte del ndice sin resolver), toma estas partes como nulas, y cargar aquellos registros que tengan asignado valor nulo a ese campo. ADVERTENCIA e e Tabla de datos: VALBARANES Identificador ndice: CLIENTES Resolucin 1: cliente Resolucin 2: (Vaco) Ejemplo Para saber si una lista contiene registros podemos utilizar la variable de sis- tema n: Cargar lista -> VALBARANES, CLIENTES, cliente, if n =0 Mensaje -> Este albarn no tiene ninguna lnea, 0 Tubos Otros dos de los objetos visuales con los que podemos trabajar desde un proceso son el Tubo de ficha y el Tubo de lista. Con los procesos realiza- mos gestiones de listas que luego exportaremos o llevaremos de una tabla a otra. Las funciones que usaremos para ello son: 08 Desarrollo completo de una aplicacin FUNCIONES DE TUBOS e e 352 353 VELAZQUEZ VISUAL Tubo de ficha Lanza el tubo de ficha declarado en el parmetro, y antes de realizar el alta de la ficha, pide validacin por parte del usuario mediante el formulario que hayamos declarado en el tubo. Esta funcin deber usarse cuando se re- quiera la peticin del formulario declarado en el tubo. Es una Funcin pro- pia de ficha en la que indicaremos el parmetro Identificador Tubo: identifi- cador del objeto tubo de ficha (obligatorio). La funcin tubo de ficha crea dos subprocesos de ficha: Pre: subproceso que se ejecuta antes de presentar el formulario de la ficha de destino en la pantalla. Es de lectura/escritura, por lo tanto, todas las mo- dificaciones realizadas en la ficha de destino sern grabadas en el disco. Post: subproceso que se ejecuta despus de aceptar el formulario de la fi- cha de destino. Si se pulsa el botn Cancelar, el subproceso Post no ser ejecutado. Es de solo lectura, por lo tanto, ningn cambio realizado en la fi- cha de destino ser guardado en el disco despus de grabarse la ficha. Tubo de ficha sin pedir formulario Lanza el tubo de ficha declarado en el parmetro sin pedir validacin por par- te del usuario mediante formulario alguno. Es una Funcin propia de ficha que crea dos subprocesos de ficha: Pre y Post. Hemos de especificar el pa- rmetro Identificador Tubo: identificador del objeto tubo de ficha (obligatorio). Tubo de lista Es una Funcin propia de lista que lanza el tubo de lista especificado. Crea un subproceso de lista con los registros dados de alta en la tabla de desti- no. Hemos de pasarle el parmetro Identificador Tubo: identificador del ob- jeto tubo de lista (obligatorio). Ejemplo En un proyecto de gestin tenemos las tablas CLIENTES y CONTACTOS. Si queremos convertir un cierto nmero de contactos en clientes, entonces creamos un proceso con origen lista de CONTACTOS y ejecutamos el tubo CONTACTOS A CLIENTES. Tubo de lista -> CONTACTOS-A-CLIENTES Mediante este tubo aadimos a la lista de CLIENTES todos los CONTAC- TOS que se encontraban en la lista. Tubo de lista con induccin Lanza el tubo de lista declarado y le induce la ficha guardada de una tabla maestra a cada elemento de la lista a crear. La induccin consiste en que a cada una de las fichas de la lista de destino se les introduce el cdigo de su ficha de maestro. Crea un subproceso de lista con los registros creados por el tubo y es una Funcin propia de lista en la que especificamos los si- guientes parmetros: Para ejecutar la funcin Tubo de ficha, necesariamente tenemos que haber declarado un formulario en el tubo a lanzar. Sin embargo, con Tubo de ficha sin pedir formulario podemos lanzar un tubo de ficha con o sin formulario especificado. ADVERTENCIA e Identificador Tubo: identificador del objeto tubo de lista (obligatorio). Identificador ficha maestro: identificador de una ficha guardada (obligatorio). La ficha inductora ha tenido que ser guardada previamente con la funcin Guardar ficha. Ejemplo Veamos un ejemplo tipo de facturacin de un albarn: Es un proceso con origen una ficha de ALBARANES. En primer lugar gene- ra la cabecera de la factura con la funcin Tubo de ficha, en el proceso Post del tubo guardamos en la variable nFactura la ficha de la factura dada de al- ta, para posteriormente asignrsela a las lneas de la factura. A continuacin carga todas las lneas del albarn y ejecuta un tubo de lista con induccin para generar las lneas de la factura, en l se utiliza la varia- ble nFactura para inducir como maestro de cada lnea de factura la cabe- cera de factura anteriormente declarada. Tubo de exportacin Lanza el tubo de exportacin que indiquemos. Es una Funcin propia de lis- ta en la que especificamos el parmetro Identificador Tubo: identificador del objeto tubo de exportacin (obligatorio). Ejemplo Con un proceso exportaremos todos los artculos que se encuentren en una re- jilla de ARTICULOS a una base de datos externa declarada en el proyecto. El ori- gen de la lnea que ejecute esta funcin tendr que ser una Lista de ARTICULOS. Tubo de exportacin -> EXPOR-ARTICULOS Este proceso copiar en la base de datos externa los registros que se en- contraban en la lista de origen. Los tubos de importacin no forman parte de las funciones de procesos. Se ejecutan directamente desde una opcin de men. 08 Desarrollo completo de una aplicacin No es posible utilizar un tubo de exportacin si el estilo del proceso es en multitarea. ADVERTENCIA e e 354 355 VELAZQUEZ VISUAL Procesos: funciones de ficheros y directorios Con estas funciones podemos crear, copiar y eliminar ficheros y directorios, buscarlos y escribir en ficheros: Existe fichero Esta funcin comprueba si existe el fichero especificado en sus parmetros. Es una Funcin comn de lista y de ficha en la que especificamos los par- metros siguientes: Senda: senda completa y nombre del fichero del que comprobar su exis- tencia. Podemos utilizar el Asistente de edicin de frmulas para componer dicha senda. OK (S / NO) variable donde retorna: variable local donde se guardar si el fichero existe (1) o no (0). Tamao (variable donde retorna): variable local del proceso donde se guar- dar el tamao en bytes del archivo. Ejemplo El siguiente proceso comprueba si existe un fichero llamado recibos.dat en el directorio de la aplicacin. Si no existe, se avisa con un mensaje. e GetAtributosFile Obtendremos con esta funcin los atributos del fichero que indiquemos. Es una Funcin comn de lista y de ficha en la que especificamos: Senda: senda completa y nombre del fichero del que queremos obtener sus atributos. Fecha (variable donde retorna): variable local donde se guarda la fecha de la ltima modificacin del archivo. Hora (variable donde retorna): variable local donde se guardar la hora de la ltima modificacin del archivo. Tamao (variable donde retorna): variable local donde se guardar el tama- o en bytes del archivo. Ejemplo Con el siguiente proceso obtendremos los atributos del fichero bolsa.map, situado en el directorio de la aplicacin. Si la ltima modificacin ha sido realizada hoy, se lanza un mensaje. Copiar fichero Esta funcin nos permite copiar un fichero de una unidad de disco. Funcin comn de lista y de ficha. Los parmetros que debemos especificar son los siguientes: Senda Origen: especificacin de la senda completa ms el nombre y ex- tensin del fichero a copiar. Es de tipo frmula. Senda Destino: especificacin de la senda completa ms el nombre y ex- tensin del fichero destino de la copia. Puede especificar un nombre de ar- chivo distinto al nombre del archivo de origen. Para la especificacin de la va podremos utilizar constantes, variables, campos, etc., ya que, al igual que en el caso anterior, es de tipo frmula. Identificador de variable de retorno S/No copi: recoge en una variable lo- cal del proceso si se ha copiado o no el fichero. 08 Desarrollo completo de una aplicacin e e 356 357 VELAZQUEZ VISUAL Ejemplo Queremos copiar un fichero llamado Conta.ma_ en un directorio, que de- penda del directorio de la aplicacin, llamado Empresa1. Queremos que el nombre del archivo copiado sea Conta.map. El proceso sera: Copiar fichero -> d + \\Conta.ma_, d + \\Empresa1\\Conta.map Si el directorio Empresa1 no existe, el programa lo crear automticamen- te. Como la senda es de tipo frmula, usamos la variable de sistema d que nos da la senda de la aplicacin. Eliminar fichero de disco Borraremos un fichero de una unidad de disco. Funcin comn de lista y de ficha. Debemos completar los siguientes parmetros: Senda fichero: especificacin de la senda ms el nombre y la extensin del fichero (obligatorio). Identificador variable de Retorno SI/NO elimin: variable en la que se guar- dar el valor de si se acept (1) o no (0) (opcional). Ejemplo Este proceso elimina el fichero Foto.bmp que se encuentra en el directorio de la aplicacin. Crear directorio Con esta funcin crearemos un directorio desde un programa de Velzquez. Funcin comn de lista y de ficha. Los parmetros que debemos cumplimentar son los siguientes: Senda: especificacin de la senda y del nombre del directorio a crear. Para ello podremos utilizar una frmula que incluya las variables del sistema (d y c), constantes, variables globales o locales del proceso, campos, etc. Identificador de variable de retorno S/No cre: recoge en una variable local del proceso si se ha creado o no el directorio. Ejemplo Imaginemos que estamos creando una aplicacin multiempresa y queremos que, cuando se d de alta una empresa en el proyecto de empresas, se dis- pare un proceso que genere un directorio llamado Empresa seguido del c- digo de la empresa que se acaba de dar de alta. En este directorio copiar un proyecto de contabilidad guardado en el directorio de la aplicacin y lla- mado Conta.ma_, adems de los ficheros de datos correspondientes (Pgc.da_ y Pgc.id_). El proceso sera posterior a un alta de ficha y sera: e e e set Directorio, d + \\Empresa+ %CODIGO% Crear directorio -> Directorio, bOK If bOK Copiar fichero -> d + \\Conta.ma_ , Path + \\Conta.map, Copi Eliminar directorio Esta funcin borra un directorio desde un programa de Velzquez Visual. Para que el directorio pueda ser borrado es condicin indispensable que ste est vaco. Funcin comn de lista y de ficha. Los parmetros son: Senda: especificacin de la senda del directorio a borrar. Para su especifi- cacin podremos usar tanto cadenas de texto como variables, ya que es de tipo frmula. Identificador de variable de retorno Si/No borr: recoge en una variable lo- cal del proceso si se ha eliminado o no el directorio. Ejemplo En este ejemplo se borra el directorio llamado Nuevo que se encuentra den- tro del directorio de la aplicacin. DirSearch Permite recorrer el directorio actual. Esta funcin genera un subproceso que ser ejecutado por cada archivo o directorio encontrado segn el filtro es- pecificado en el primer parmetro. En la variable especificada en el segun- do parmetro se almacenar el nombre del archivo o directorio en curso. Funcin comn de lista y de ficha. Los parmetros son: Filtro de archivos: filtro de archivos a tener en cuenta. Por ejemplo: *.*, *.TXT, *.dat. Es de tipo frmula. Senda en curso (Variable donde retorna): variable donde se retorna el nom- bre del archivo o directorio en curso. Es directorio? (Variable donde retorna): variable donde se retorna si lo ob- tenido en la senda en curso es un directorio (1) o no (0). Es de solo lectura? (Variable donde retorna): variable donde se retorna si el archivo o directorio en curso es de solo lectura (1) o no (0). Ejemplo Este proceso copia todos los ficheros del directorio de la aplicacin en la carpeta C:\Copias. Utilizamos la variable local que retorna la senda en 08 Desarrollo completo de una aplicacin e e e 358 359 VELAZQUEZ VISUAL curso como especificacin del nombre del fichero de destino que se va a crear. Cambiar directorio por defecto Esta funcin establece un nuevo directorio de trabajo durante la ejecucin de un proceso. Por defecto, el directorio de trabajo es el de la aplicacin (donde se encuentra el proyecto). Funcin comn de lista y de ficha. Los parmetros que debemos especificar son los siguientes: Senda: especificacin de la senda del nuevo directorio por defecto. Para su es- pecificacin podremos usar tanto cadenas de texto como variables. Se trata de una expresin frmula y, por tanto, si la senda la va a escribir como una cons- tante, sta tendr que ir entrecomillada. Puede utilizar las variables del sistema d (directorio de la aplicacin) y c (directorio actual) para componer la senda. Identificador variable de retorno SI / NO cambi: aqu crear una variable lo- cal que recoger si se ha cambiado el directorio por defecto (1) o no (2). Ejemplo En el directorio de la aplicacin hemos creado una carpeta que se utilizar para que el usuario pueda abrir una serie de archivos a lo largo de un pro- ceso. A este directorio lo hemos llamado Auxiliar. Podemos utilizarlo en combinacin con la funcin de procesos Ventana seleccin de fichero. En este proceso cambiamos el directorio por defecto por el directorio Auxi- liar que se encuentra en el directorio de la aplicacin. Comprobamos si se ha cambiado a dicho directorio: si es as, abre la ventana de seleccin de fichero, en la que el filtro de archivos son los ficheros Bitmap de Windows y, como nombre de archivo inicial, se propone el archivo Foto1.bmp. Si no ha cambiado el directorio, se muestra un mensaje advirtindolo. Ventana seleccin de fichero Muestra el cuadro de dilogo de seleccin de fichero de Windows. Funcin comn de lista y de ficha. Los parmetros son: Identificador de la Variable local que retorna Nombre fichero: nombre de la variable que va a recoger el nombre de fichero que se abra (obligatorio). e e Identificador de la Variable que retorna SI/NO aceptaron: nombre de la va- riable que va a recoger el valor de si han aceptado (1) o no (0) (opcional). Filtro de archivos: para mostrar en el cuadro de dilogo qu tipo de archi- vos queremos que sean abiertos, por ejemplo, si son imgenes seran JPG, BMP (opcional). SINTAXIS Exp1 | [ Exp 2 [ | Exp N ] ] || Los parmetros que van entre corchetes son opcionales. Exp1, Exp2 ExpN: distintas expresiones de filtro de archivos. Las expre- siones se separan por el smbolo | (AltGr + 1). Los parmetros entre cor- chetes son opcionales. Una vez escritas todas las expresiones deseadas se finalizar la lnea con dos smbolos |. Cmo se construye una expresin: Descripcin | *.ext1 [ ; *.ext2 [ ; *.extN) ] ] Los parmetros que van entre corchetes son opcionales. Descripcin: aqu se describir al usuario el tipo o tipos de archivo a abrir, por ejemplo: Mapa de bits de Windows (*.bmp, *.dib, *.rle). *.ext1 ( ; *.ext2 ; *.extN): las extensiones de los tipos de archivo mencio- nados en la especificacin. Siguiendo con el ejemplo anterior sera: *.bmp; *.dib; *.rle. stas sern las que indiquen al programa qu tipo de archivos tendr que visualizar cuando se seleccione la opcin en el list box. Si en una misma especificacin queremos incluir varias extensiones, ten- drn que ir separadas por ; y sin espacios entre ellas. No podemos utili- zar tampoco espacios en blanco antes y despus de escribir la extensin. Fichero inicial: expresin frmula que recoger el nombre del fichero inicial. Ejemplo Queremos lanzar desde un proceso esta funcin y que como opcin de ti- pos de ficheros a abrir en el list box correspondiente del cuadro de dilogo se visualice: Archivos de texto (*.txt) Bitmap de Windows (*.bmp, *.dib, *.rle) Todos los archivos (*.*) Habra que escribir: 08 Desarrollo completo de una aplicacin e 360 361 VELAZQUEZ VISUAL Archivos de texto (*.txt)|*.txt|Bitmap de Windows (*.bmp, *.dib; *.rle)|*.bmp; *.dib; *.rle|Todos los archivos (*.*)|*.*|| Como podemos comprobar cada tipo de especificacin de archivos va se- parada por el smbolo |. Si queremos que en el control de edicin correspondiente al Nombre del ar- chivo aparezca un nombre de fichero determinado, especifquelo en el pa- rmetro Fichero inicial. Se trata de una frmula, as que si utilizamos una constante tendremos que escribir el nombre del fichero entrecomillado. Tambin podemos utilizar una variable local del proceso que lo contenga. Ejemplo Si queremos que como nombre de archivo aparezca Dibujo.bmp, en el pa- rmetro Fichero inicial escriba Dibujo.bmp. Tambin podemos utilizar esta funcin cuando queremos que el usuario es- pecifique un directorio. Una vez ejecutada la instruccin, podremos aplicar la funcin fSendaSinNombreExt() sobre la variable local para obtener sola- mente la senda del directorio seleccionado. Fichero: Abrir Crea un fichero de texto o abre uno ya existente, para posteriormente leer o escribir en l. Funcin comn de lista y de ficha. Los parmetros son: Manejador de fichero: nombre interno que daremos al fichero para identifi- carlo a lo largo del proceso. Frmula senda: senda, nombre y extensin del fichero de texto. Modo apertura: los modos de apertura posible son: Solo lectura: el fichero abierto podr ser ledo, pero no podremos escribir en l. Lectura/escritura: el fichero ser abierto de forma que podremos tanto leer, como escribir en l. Lectura/escritura crea o limpia: si no existe el fichero ser creado automti- camente; si existe, ser borrado su contenido. Lectura/escritura crea o agrega: si el fichero no existe ser creado, si exis- te podremos aadir lneas al mismo. Fichero: Leer lnea Aadir una lnea a un fichero de texto abierto en modo lectura/escritura. Funcin comn de lista y de ficha. e e Los parmetros que debemos completar son: Manejador de fichero: nombre interno que se dar al fichero para identifi- carlo a lo largo del proceso. Esta instruccin ha de estar precedida de la ins- truccin Fichero: Abrir y el manejador deber ser el mismo que el especifi- cado en la misma. Variable retorno info leda: variable local del proceso en la que se guardar la lnea leda del fichero de texto. Variable retorno OK: variable local del proceso donde se devolver si se ha ledo una lnea (1) o no (0). Ejemplo En el directorio de la aplicacin existe el fichero Clientes.txt, fichero con re- gistros de longitud fija, que en las tres primeras posiciones contiene el c- digo y en las 40 siguientes el nombre del cliente. Se pretende leer dicho fi- chero y si el registro ledo no existe en la tabla de clientes de Velzquez, darlo de alta; el proceso sera: Rem -> Apertura del fichero en modo solo lectura; damos fichero como nombre de manejador Fichero: abrir -> fichero, d + \\Clientes.txt, 0 Rem -> Se inicializa una variable local que se utilizar como condi- cin de salida en un bucle for que se utilizar para recorrer el fiche- ro de texto Set -> bOK, 1 For -> x, 1, bOK, 1 Fichero: Leer lnea -> fichero, lnea, bOK If -> bOK Rem -> Si se ha ledo algo, se carga la tabla de clientes por su ndice cdigo, resolvindolo con los tres primeros carac- teres de la lnea de texto leda, si no se encuentran registros, ser dado de alta Cargar lista -> CLIENTES, CODIGO, fLeft( lnea, 3 ) If -> ! n Alta directa -> CLIENTES Pre Modificar campo -> CODIGO, fLeft(l- nea, 3 ) Modificar campo -> NOMBRE, fMid(l- nea, 2, 40 ) Post Libre 08 Desarrollo completo de una aplicacin e 362 363 VELAZQUEZ VISUAL Fichero: Grabar lnea Aade una lnea a un fichero de texto abierto en modo lectura/escritura. Funcin comn de lista y de ficha. Los parmetros son: Manejador de fichero: nombre interno que se dar al fichero para identifi- carlo a lo largo del proceso. Esta instruccin ha de estar precedida de la ins- truccin Fichero: Abrir, el manejador deber ser el mismo que el especifi- cado en la misma. Frmula dato: frmula con la composicin la lnea a grabar en el fichero, al final no hay que aadir un retorno de carro, ya lo hace automticamente es- ta instruccin. Variable retorno OK: variable local del proceso donde se devolver si se ha grabado la lnea (1) o no (0). Ejemplo Queremos volcar en un fichero de texto el contenido de una lista de Clien- tes. Si el fichero ya existe, sobreescribiremos los datos ya existentes. Cada registro en el fichero de texto ha de tener una longitud fija; el cdigo 3 po- siciones, rellenado con ceros por la izquierda y el nombre 40. El proceso tendra su origen en una lista de clientes, y sera: Fichero: Abrir -> manejador, d + \\Clientes.txt, 2 Recorrer lista solo lectura Fichero: Grabar lnea -> fJustificarRight( %CODIGO%, 3, 0 ) + fJustificarLeft( %NOMBRE%, 40 ), bOK If -> ! bOK Mensaje -> No se ha podido escri- bir el registro correspondiente al cliente nmero + %CODIGO% Servicios disco Velzquez Para usar estas funciones debemos estar trabajando en arquitectura Clien- te-Servidor. Nos permite trabajar con ficheros a travs del Servidor de Apli- caciones de Velzquez. Los usuarios de la aplicacin podrn importar, ex- portar y eliminar ficheros, que accedern a sta a travs del Navegador de Velzquez Visual. e SDV: Importar fichero Esta funcin importa un fichero de un servidor de disco de Velzquez Visual. Funcin comn de lista y de ficha. Los parmetros son: VRL Origen: senda del fichero a importar y servidor de Velzquez Visual al que conectarse. La senda comenzar por la carpeta compartida especifi- cada en el servidor y ser relativa a sta. Podremos usar el asistente para definirla, teniendo la posibilidad de usar campos, variables, etc. Fichero destino: senda y nombre de fichero de destino. La senda puede re- ferirse a la de una unidad de disco local o en red. Es un parmetro de tipo frmula, por lo que, al igual que en el caso anterior, podremos usar campos, variables, etc. Variable de retorno OK: variable local del proceso donde se retornar si el fichero ha sido importado (1) o no (0). Sintaxis para la especificacin de la VRL de origen: Senda\Fichero.ext@ser- vidor/usuario/contrasea 08 Desarrollo completo de una aplicacin FUNCIONES DE SERVICIOS DE DISCO DE VELZQUEZ VISUAL 364 365 VELAZQUEZ VISUAL Ejemplo Importar el fichero Texto.txt de la carpeta Carpeta\Otros, del servidor velaz- quezvisual.com, el nombre del usuario de la aplicacin es carlos y su con- trasea 123. La carpeta especificada en el servidor es Carpeta, siendo Otros relativa a esta carpeta virtual y, por tanto, relativa a c:\Mis Documen- tos. La especificacin de la VRL sera: Carpeta\Otros\Texto.txt@velazquezvisual.com/carlos/123 SDV: Actualizar fichero Esta funcin compara el fichero de origen y el de destino y, en el caso de que ste haya cambiado, lo actualiza. Funcin comn de lista y de ficha. Los parmetros que debemos cumplimentar son: VRL Origen: senda del fichero a importar y servidor de Velzquez Visual al que conectarse. La senda ha de comenzar por la carpeta que hemos espe- cificado como compartida en el servidor. Fichero destino: senda y nombre de fichero de destino. La senda puede re- ferirse a la de una unidad de disco local o en red. Variable de retorno OK: variable local del proceso donde se retornar si la instruccin ha sido ejecutada correctamente (1) o no (0). CARPETA COMPARTIDA EN UN SERVIDOR DE APLICACIONES DE VELZQUEZ VISUAL e Variable de retorno si ha importado: variable local del proceso donde se re- tornar si el fichero ha sido actualizado (1) o no (0). Si devuelve 0 querr de- cir que el fichero no ha cambiado. Sintaxis para la especificacin de la VRL de origen: Senda\Fichero.ext@ser- vidor/usuario/contrasea SDV: Exportar fichero Exporta un fichero a un servidor de disco de Velzquez Visual. Funcin co- mn de lista y de ficha. Los parmetros son: Fichero origen: senda y nombre del fichero a exportar. VRL Destino: VRL con senda y nombre del fichero a exportar. Variable de retorno OK: variable local del proceso donde se retornar si el fichero ha sido exportado (1) o no (0). Sintaxis para la especificacin de la VRL de destino: Senda\Fichero.ext@ser- vidor/usuario/contrasea Ejemplo Exportar el fichero Texto.txt de la carpeta c:\Mis documentos a la carpeta Ini- cio\Documentos, del servidor velazquezvisual.com, el nombre del usuario de la aplicacin es carlos y su contrasea 123; la especificacin de la VRL sera: Inicio\Documentos\Texto.txt@velazquezvisual.com/carlos/123 La especificacin del fichero de origen sera: c:\\Mis documentos\\Texto.txt SDV: Eliminar fichero Con esta funcin podremos eliminar un fichero de un servidor de disco de Velzquez Visual. Funcin comn de lista y de ficha. Sus parmetros son: VRL Destino: VRL con senda y nombre del fichero a eliminar, como en los casos anteriores. Sintaxis para la especificacin de la VRL de destino: Senda\Fichero.ext@ser- vidor/usuario/contrasea Variable de retorno OK: variable local del proceso donde se retornar si el fichero ha sido eliminado (1) o no (0). Ejemplo Eliminar el fichero Texto.txt de la carpeta Inicio\Documentos, del servidor velazquezvisual.com, el nombre del usuario de la aplicacin es carlos y su 08 Desarrollo completo de una aplicacin e e 366 367 VELAZQUEZ VISUAL contrasea 123; la especificacin de la VRL sera: Inicio\Documentos\Tex- to.txt@velazquezvisual.com/carlos/123 SDV: Renombrar fichero Esta funcin renombra un fichero de un servidor de disco de Velzquez Vi- sual. Funcin comn de lista y de ficha. Los parmetros de este proceso son: VRL Destino: VRL con senda y nombre del fichero a renombrar, como en ca- sos anteriores. Sintaxis para la especificacin de la VRL de destino: Senda\Fichero.ext@ser- vidor/usuario/contrasea Nuevo nombre: expresin frmula del nuevo nombre. Variable de retorno OK: variable local del proceso donde se retornar si el fichero ha sido renombrado (1) o no (0). Ejemplo Renombrar el fichero Texto.txt de la carpeta Inicio\Documentos, del servidor velazquezvisual.com, el nombre del usuario de la aplicacin es carlos y su contrasea 123; como NOMBREUSUARIO.txt. La especificacin de la VRL sera: Inicio\Documentos\Texto.txt@velazquezvisual.com/carlos/123 En el parmetro nuevo nombre especificaramos la frmula: u + .txt (u es la variable del sistema que devuelve el nombre de un usuario). Registro de Windows Con ayuda de estas funciones podremos modificar el Registro de Windows desde nuestra aplicacin. Debemos tener cuidado, ya que puede resultar peligroso escribir en el Registro de Windows. e e Registro de Windows: Leer nmero entero Nos permite guardar en una variable local del proceso el nmero entero contenido en la entrada del registro de Windows especificada en los par- metros de la funcin. Funcin comn de lista y de ficha. Los parmetros que debemos especificar son: Clave raz: el nombre de la clave raz de donde queremos leer el nmero. No ten- dremos que escribirla, sino que la seleccionaremos de entre las que se presen- tan cuando despliega el combo box. Las claves son: HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LOCAL_MACHI- NE, HKEY_USERS. Senda seccin: senda, dentro de la clave raz especificada, donde se en- cuentra la seccin de donde queremos leer el nmero. Entrada: nombre de la entrada de la seccin de donde queremos leer el n- mero (en el panel derecho del editor del registro REGEDIT, en la columna Nombre). Identificador variable local del resultado: nombre de la variable local donde queremos almacenar el nmero de la entrada especificada. 08 Desarrollo completo de una aplicacin FUNCIONES DE REGISTRO DE WINDOWS 368 369 VELAZQUEZ VISUAL Registro de Windows: Escribir nmero entero Esta funcin escribe un nmero entero en el registro de Windows. Debemos tener en cuenta que escribir en el Registro de Windows puede resultar pe- ligroso. Funcin comn de lista y de ficha. Los parmetros son: Clave raz: el nombre de la clave raz donde queremos escribir el nmero ente- ro. No tendremos que escribirla, sino que la seleccionaremos de entre las que se presentan cuando despliega el combo box. Las claves son: HKEY_CLAS- SES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LO- CAL_MACHINE, HKEY_USERS. Senda seccin: senda, dentro de la clave raz especificada, donde se en- cuentra la seccin donde queremos escribir el nmero entero. Entrada: nombre de la entrada de la seccin donde queremos escribir el nmero entero (en el panel derecho del editor del registro en la columna Nombre). Frmula valor: expresin frmula con el nmero entero que escribiremos. Puede ser una constante o una variable. Registro de Windows: Leer cadena de texto Esta funcin nos permite guardar en una variable local del proceso el texto contenido en la entrada especificada en los parmetros del Registro de Windows. Funcin comn de lista y de ficha. Los parmetros son: Clave raz: el nombre de la clave raz de donde queremos leer la cadena de tex- to. No tendremos que escribirla, sino que la seleccionaremos de entre las que se presentan cuando despliega el combo box. Las claves son: HKEY_CLAS- SES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LO- CAL_MACHINE, HKEY_USERS. Senda seccin: senda, dentro de la clave raz especificada, donde se en- cuentra la seccin de donde queremos leer la cadena. Entrada: nombre de la entrada de la seccin de donde queremos leer la ca- dena (en el panel derecho del editor del registro REGEDIT, en la columna Nombre). Identificador variable local del resultado: nombre de la variable local donde queremos almacenar la cadena de texto de la entrada especificada. Registro de Windows: Escribir cadena de texto Esta funcin escribe una cadena de texto en el registro de Windows. Fun- cin comn de lista y de ficha. Los parmetros son: Clave raz: el nombre de la clave raz donde queremos escribir la cadena de tex- to. No tendremos que escribirla, sino que la seleccionaremos de entre las que se presentan cuando despliega el combo box. Las claves son: HKEY_CLAS- SES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LO- CAL_MACHINE, HKEY_USERS. Senda seccin: senda, dentro de la clave raz especificada, donde se en- cuentra la seccin donde queremos escribir la cadena. Entrada: nombre de la entrada de la seccin donde queremos escribir la ca- dena (en el panel derecho del editor del registro en la columna Nombre). Frmula de texto: expresin frmula con la cadena de texto a escribir. Si se trata de una constante debemos escribirla entrecomillada. Tambin podre- mos utilizar variables que contengan dicha cadena. Registro de Windows: Eliminar entrada Elimina una entrada en el Registro de Windows. Funcin comn de lista y de ficha. Los parmetros que debemos completar son: Clave raz: el nombre de la clave raz de donde queremos eliminar la entrada. No tendremos que escribirla, sino que la seleccionaremos de entre las que se presentan cuando despliega el combo box. Las claves son: HKEY_CLAS- SES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LO- CAL_MACHINE, HKEY_USERS. Senda seccin: senda, dentro de la clave raz especificada, donde se en- cuentra la seccin donde se encuentra la entrada a eliminar. Entrada: nombre de la entrada a eliminar. Sistema Con esta serie de funciones realizaremos ciertos comandos del sistema operativo que pueden ser tiles a la hora de trabajar en una aplicacin: 08 Desarrollo completo de una aplicacin 370 371 VELAZQUEZ VISUAL Ejecutar comando DOS Ejecuta cualquier comando o aplicacin de MS-DOS. Funcin comn de lis- ta y de ficha. Los parmetros que debemos definir son los siguientes: Comando: especificacin del comando DOS a ejecutar (obligatorio). No es frmula. Identificador variable donde dejar el valor de retorno del comando: variable en la cual se va a dejar el valor que retorne el comando ejecutado (opcional). Ejemplo Este ejemplo restaura la copia de seguridad hecha en un disquete del fiche- ro CONTACTOS.DAT, que se encuentra dentro del directorio C:\GESTION. RESTORE A: C:\GESTION\CONTACTOS.DAT Lanzar aplicacin Con esta funcin podemos ejecutar la aplicacin de Windows que especi- fiquemos en sus parmetros. Funcin comn de lista y de ficha. FUNCIONES DE SISTEMA e Los parmetros son: Modo: (obligatorio). Hay dos parmetros posibles: En espera: se ejecutar la aplicacin especificada y el usuario no podr vol- ver al programa de Velzquez hasta que no la haya cerrado. No esperes: el usuario podr trabajar con su aplicacin de Velzquez y con la aplicacin lanzada al mismo tiempo. Comando: aqu se especificar la senda completa de la aplicacin que lan- zaremos (obligatorio). Puede utilizar el asistente para su especificacin, ya que se trata de una frmula. Parmetros: se especificar la senda completa y el nombre de un archivo que queramos abrir con el programa (opcional). Podr utilizar el asistente para su especificacin, ya que tambin es tipo frmula. Variable que retorna s/no: variable interna del proceso en la que queremos que se guarde si el usuario ha pulsado aceptar o no (opcional). Ejemplo En este ejemplo se lanza el MSPAINT, en modo No esperes, y abriendo el dibujo Foto.bmp que se encuentra en el directorio de la aplicacin. Ejecutar documento Esta funcin ejecuta un documento en concreto en la aplicacin que se ten- ga asociada a l en Windows. Funcin comn de lista y de ficha. Los parmetros que hemos de definir son: Senda documento: especificacin de la senda completa de acceso del do- cumento a ejecutar (obligatorio). Es de tipo frmula. Identificador de variable de retorno S/No ejecut: variable en la que se guardar si el documento se ejecut (1) o si no se lleg a ejecutar (0) (op- cional). Ejemplo Este ejemplo ejecuta el documento Foto.bmp, que se encuentra en el di- rectorio de la aplicacin. Cambiar fecha/hora del sistema Esta funcin nos permite cambiar la fecha y la hora del sistema desde una aplicacin de Velzquez Visual. Funcin comn de lista y de ficha. 08 Desarrollo completo de una aplicacin e e 372 373 VELAZQUEZ VISUAL Los parmetros son: Fecha: frmula con la especificacin de la nueva fecha del sistema. Hora: frmula con la especificacin de la nueva hora del sistema. Get estado memoria fsica Esta funcin nos permite conocer el estado de la memoria fsica del orde- nador donde sea ejecutado el proceso. Funcin comn de lista y de ficha. Los parmetros son: Variable de retorno del porcentaje ocupado: declaracin de una variable local donde retornar qu porcentaje de la memoria fsica est siendo utilizado. Variable de retorno del nmero total de bytes: declaracin de una variable local donde retornar el nmero total de bytes de la memoria fsica. Variable de retorno del nmero total de bytes libres: declaracin de una varia- ble local donde retornar el nmero total de bytes libres de la memoria fsica. Puerto serie Para trabajar con puertos de serie tenemos este grupo de funciones, aun- que debemos recordar que necesitamos el objeto visual Comunicacin Se- rie para usarlas. FUNCIONES DE PUERTO SERIE Abrir puerto Con esta funcin abrimos un puerto de serie. Si el puerto ya se encuentra abierto esta instruccin no se ejecuta. Funcin comn de lista y de ficha. Los parmetros que definimos son: Identificador puerto: objeto de tipo Puerto serie creado en la aplicacin. Variable de retorno S/No abri: en este parmetro se definir una variable lo- cal del proceso para poder evaluar posteriormente si el puerto est abierto. Cerrar puerto Esta funcin nos permite cerrar un puerto de serie. Si en una aplicacin de Velzquez Visual hemos abierto un puerto, pero no se ha cerrado por no ha- ber incluido esta funcin en ningn proceso, cuando cerremos el ejecutor de aplicaciones, ste cerrar automticamente los puertos abiertos. Fun- cin comn de lista y de ficha. Los parmetros son: Identificador puerto: objeto de tipo Puerto serie creado en la aplicacin. Nmero de bytes para leer en el puerto Esta funcin devuelve el nmero de bytes que hay en el buffer de entrada de un puerto serie. Funcin comn de lista y de ficha. Los parmetros que debemos definir son: Identificador puerto: objeto de tipo Puerto serie creado en la aplicacin. Variable donde retorna dato: variable local del proceso donde se recoger el nmero de bytes de la cadena que hay en el buffer de entrada del puerto. Leer del puerto Con esta funcin podremos leer de un puerto de serie. Funcin comn de lista y de ficha. Los parmetros son: Identificador puerto: objeto de tipo Puerto serie creado en la aplicacin. Variable donde retorna datos: en este parmetro definimos una variable lo- cal del proceso donde almacenar la lectura obtenida del puerto. Variable de retorno OK (S/No): en este parmetro definimos una variable lo- cal del proceso en donde se almacenar si se ha llevado a cabo o no la lec- tura del puerto. Milisegundos de Time Out: tiempo que espera para leer. Por defecto, si no lo cumplimentamos esperar durante 5.000 milisegundos, es decir, cinco segundos. 08 Desarrollo completo de una aplicacin 374 375 VELAZQUEZ VISUAL Escribir en el puerto Esta funcin nos permite escribir en el puerto serie. Funcin comn de lis- ta y de ficha. Parmetros: Identificador puerto: objeto de tipo Puerto serie creado en la aplicacin don- de queremos escribir. Frmula a escribir: frmula con lo que queremos escribir en el puerto. Variable de retorno OK (S/No): en este parmetro se define una variable lo- cal del proceso en donde se almacenar si se ha llevado a cabo o no la es- critura del puerto. Ejemplo Ejemplo de un proceso de comunicacin con un puerto serie (marcado de telfono): Como podemos observar, tras la especificacin de la cadena a escribir en el puerto se introduce una secuencia de escape \r\n, que aade un retorno de carro para que se lleve a cabo la escritura en el puerto. Varios En este apartado entran una serie de funciones bastante especficas pero que no pertenecen a ninguno de los otros: Hay que tener en cuenta que si se trata de una conexin asncrona, al ejecutar esta instruccin si se evala a continuacin si ha escrito o no, debido a la asincrona, puede devolver 0 (que no ha escrito), as que para asegurarlo tendra que: Escribir en el puerto, leer y comprobar si lo ledo es lo enviado. En Velzquez Visual si definimos el puerto de serie como sncrono aunque sea asncrono, normalmente funcionar mejor. TRUCO e Emitir sonido Emite un sonido del sistema. Funcin comn de lista y de ficha. Los parmetros son: Sonido: uno de los sonidos predeterminados por el sistema (obligatorio). Puede ser uno de los siguientes: Pitido con altavoz del sistema Informacin Exclamacin Stop crtico Pregunta Predeterminado Reproducir sonido Esta funcin reproduce ficheros con extensin WAV. Funcin comn de lis- ta y de ficha. Los parmetros que debemos definir son: Nombre de fichero Wav: especificacin de la senda ms el nombre y extensin del fichero de sonido que queremos ejecutar. Se trata de un campo frmula. 08 Desarrollo completo de una aplicacin FUNCIONES VARIAS 376 377 VELAZQUEZ VISUAL Si dicho fichero se encuentra en el mismo directorio que la aplicacin, po- dremos utilizar la variable del sistema d (directorio actual). Por ejemplo, pa- ra ejecutar el fichero Velazquez.wav, que se encuentra en el directorio de la aplicacin, tendremos que especificar en la frmula: d + \\Velazquez.wav Reproducir sonido -> d + \\Velazquez.wav Si se encuentra en otro directorio distinto el archivo WAV, tendremos que especificar la senda completa para llegar al mismo, entre comillas. Esperar Esta funcin realiza una pausa en el proceso. Funcin comn de lista y de ficha. Los parmetros son: Milisegundos: el tiempo, en milsimas de segundo, que ha de durar la es- pera. Marcar telfono Esta funcin realiza una marcacin de telfono sin que el usuario tenga que escribir el nmero a marcar. Funcin comn de lista y de ficha. Los parmetros son: Frmula n telfono: especificaremos, mediante una expresin frmula, el nmero de telfono a marcar. Podr ser un campo, una variable o una fr- mula compuesta por nosotros. Variable de retorno SI/NO marc: especificaremos el nombre de una varia- ble local del proceso que recoger si se marc (1) o no (0) el telfono. Ejemplo Cmo hacer para llamar por telfono al cliente editado en una ficha. En la tabla CLIENTES existe el campo TELEFONO (de tipo ALFA40). En primer lu- gar crearemos un proceso asociado a la tabla de CLIENTES, cuyo Origen sea una ficha de CLIENTES. En la primera lnea del mismo utilizaremos la funcin Marcar telfono. Como frmula escribiremos el campo %TELEFO- NO% (podremos obtenerlo de la lista de campos que aparece al pulsar el botn Campos del Asistente para la edicin de frmulas). A este proceso lo llamaremos MARCAR TELEFONO. En el formulario de edicin de fichas de CLIENTES aadiremos un control de tipo botn, cuya funcin a disparar ha de ser Ejecutar proceso -> ficha actual. Como proceso seleccionaremos MARCAR TELEFONO. Cuando el usuario final ejecute el proyecto, al editar la ficha de un cliente, podr llamarlo por telfono desde el programa simplemente pulsando un botn. e Redirigir database externa DAO-ODBC Con esta funcin podremos redirigir la senda donde se encuentra una base de datos DAO-ODBC incluida en el proyecto de Velzquez. Funcin comn de lista y de ficha. Los parmetros son: Identificador database: nombre de la base de datos externa que va a ser re- dirigida. Frmula nueva senda: expresin frmula para especificar la nueva senda donde se va a redirigir dicha base de datos externa. Cuando incorporamos en un proyecto de Velzquez Visual una base de da- tos externa DAO-ODBC, en tiempo de ejecucin el programa ir a buscar dicha base de datos externa en la unidad y el directorio donde estaba si- tuada dicha base de datos externa al incorporarla en el Editor. Al instalar la aplicacin a un usuario final puede ser que queramos guardar la base de datos externa en otra unidad o directorio distinto de donde lo te- namos a la hora de disear la aplicacin, por lo que esta funcin nos per- mitir especificar dnde tendr que ir a buscar el programa dicha base de datos externa cuando el usuario vaya a trabajar sobre ella. Si queremos redirigirla de forma permanente, podremos utilizar una variable global. Ejemplo Vamos a disear una aplicacin en la que el usuario final pueda redirigir la si- tuacin de una base de datos externa de forma permanente. Para ello son ne- cesarios dos procesos, uno en el que se obtenga la nueva senda y la guarde en una variable global en disco, y otro que redirija la base de datos externa. Crearemos una variable global en disco, de tipo Alfabtico de 255 caracte- res. Tiene que ser de tipo alfabtico porque la barra de directorios (\) no es soportada por la tabla de caracteres de los Alfa128, Alfa64 y Alfa40. Proceso para la seleccin de la senda: Se declarar como origen Ninguno, para ejecutar desde un men y el pro- ceso ser: En primer lugar utilizamos la funcin Ventana seleccin de fichero, estable- ciendo como filtro de archivos los de extensin MDB (extensin de las ba- ses de datos externas de Velzquez Visual). Entre los parmetros, se crea la 08 Desarrollo completo de una aplicacin e 378 379 VELAZQUEZ VISUAL variable local senda en la que se retorna el nombre del fichero selecciona- do y su senda. Si se ha seleccionado algn archivo, entonces se mover la senda del ar- chivo seleccionado a la variable global. Puesto que en la variable local sen- da se ha guardado tanto la senda como el nombre del archivo, hay que uti- lizar la funcin de frmulas fSendaSinNombreExt(), que devuelve una senda sin el nombre del fichero y la extensin. Proceso para redirigir la base de datos externa: Una vez ejecutado el proceso anterior, la variable global en disco ya con- tendr la senda de la base de datos externa. Se especificar en el proceso el origen Ninguno. Ser: Este proceso simplemente redirige la base de datos especificada en el pri- mer parmetro a la senda guardada en la variable global $SENDA$. Se uti- liza la funcin fQuitarEspacios() para eliminar todos los espacios en blanco que la cadena pueda contener al principio o al final y que aparecen al usar una variable alfabtica. Cambiar ttulo de la transaccin Esta funcin nos crea un texto sustitutorio del texto descriptor del proceso. Lo utilizaremos en los informes de incidencias que se presentan al detectar transacciones no finalizadas, en los archivos .LOG (historial del servidor), y en el cuadro de dilogo de tareas en segundo plano. Funcin comn de lis- ta y de ficha. Esta funcin tiene que estar situada antes que las funciones que realicen operaciones de lectura/escritura si queremos que el cambio del ttulo se vea reflejado en el momento de producirse en el servidor de aplicaciones o en el ttulo del cuadro de dilogo de tareas en segundo plano, aunque ser efectivo en el archivo .LOG que ste crea. Los parmetros son: Frmula del texto: expresin frmula que va a ser evaluada como texto (obligatorio). Cambiar porcentaje realizado del proceso Nos permite pasar el dato del porcentaje de registros procesados a las ba- rras de progreso del cuadro de dilogo de tareas en segundo plano del eje- cutor, si no ste no se actualiza. Funcin comn de lista y de ficha. Los parmetros son: Frmula: expresin frmula que calcula el porcentaje de registros procesa- dos por el subproceso actual (obligatorio). El valor que hemos de conseguir ha de ser un nmero del 0 al 100, que ser el que represente el porcentaje. e Ejemplo En el ejemplo que se muestra a continuacin hemos utilizado esta funcin en un proceso de subida de precios de LIBROS de una EDITORIAL para que se muestre, en la consulta de procesos en segundo plano en tiempo de ejecucin, una barra de nivel con el porcentaje realizado del proceso. En la estructura del proyecto, EDITORIALES es maestra de LIBROS. En el proce- so tambin hemos utilizado la funcin Cambiar ttulo de la transaccin, pa- ra determinar el proceso en que se realizan las transacciones. ste tendr como origen una Lista de LIBROS. Pedir dato -> Porcentaje de subida, Porce, 0 Seleccionar ficha por posicin -> 1 Leer ficha seleccionada Set -> editor, %EDITORIALES NOMBRE% Cambiar ttulo de la transaccin -> Subida de precios + Porcen + % + editor Set -> nLibrosTotal, n Set -> nLibrosProces, 0 Recorrer lista lectura/escritura Modificar campo -> PVP, %PVP% * ( 100 + Porcen ) / 100 Set -> nLibrosProces, nLibrosProces + 1 Cambiar porcentaje realizado del proceso -> fRedondear ( 100 * nLibrosProces / nLibrosTotal ) En primer lugar se pide al usuario que introduzca el dato del porcentaje a subir de precio los libros de la lista, con la funcin Pedir dato. El nmero se- r guardado en la variable local Porcen. A continuacin se va a determinar a qu editorial pertenecen los libros de la lista. Para ello se va a mirar la primera ficha de la lista (Seleccionar ficha por posicin), a continuacin ser leda (Leer ficha seleccionada) para poder ob- tener el nombre de la editorial y almacenarlo en la variable local editor (Set). El siguiente paso ser cambiar el ttulo de la transaccin por el ttulo si- guiente: Subida de precios + Porcen + % + editor. Esta frmula con- catena a la cadena Subida de precios el tanto por ciento realizado del pro- ceso (en la variable local Porcen), seguido del smbolo % y el nombre de la editorial (almacenado en la variable local editor). Para poder calcular el porcentaje realizado del proceso se necesita saber cul es el total de libros de la lista y cul es el nmero de libros procesados, por tanto se crean dos variables locales nLibrosTotal (a la que se le asigna la variable de sistema n, que devuelve el nmero total de elementos de una lista), y nLibrosProces, que se inicializa a 0 y funcionar como acumulador durante el proceso. 08 Desarrollo completo de una aplicacin e 380 381 VELAZQUEZ VISUAL El siguiente paso es recorrer la lista de libros y modificar el campo PVP. En primer lugar se utiliza la funcin Recorrer lista lectura/escritura para ir editando uno a uno los registros y cambiar el PVP. Las lneas que se inclu- yan en el subproceso que esta funcin genera sern ejecutadas por cada uno de los registros de la lista. A continuacin se modifica el campo PVP, con la funcin Modificar campo. El nuevo valor del campo PVP ha de ser el precio anterior ms el porcenta- je de subida especificado por el usuario, por lo que la frmula ser: %PVP% * (100 + Porcen) / 100. En la siguiente lnea se acumula un 1 a la variable local que guardar el n- mero de libros procesados (nLibrosProces). Para ello a esta variable se le suma un 1 a su valor anterior: nLibrosProces + 1 A continuacin modificaremos el Porcentaje realizado del proceso. La fr- mula ser: fRedondear( 100 * nLibrosProces / nLibrosTotal ). Devolver el resultado redondeado de multiplicar 100 al nmero de libros procesados di- vidido entre el nmero total de libros. Cuando el proceso finalice se emitir un sonido para avisar al usuario. Guardar ficha Guarda la ficha, temporalmente, durante la ejecucin del proceso. Esta fi- cha podemos, posteriormente, inducirla a un tubo de lista (ver funcin Tubo de lista con induccin). Funcin propia de ficha. Los parmetros son: Identificador: identificador local para la ficha (obligatorio). Ejemplo En este ejemplo de facturacin de un albarn al generar la cabecera de la factura se guarda la ficha en la variable NUEVA-FICHA. Al generar las l- neas de la factura se utiliza dicha variable para inducir como maestro de las lneas de factura la factura creada al principio del proceso. Recuerde que podemos acceder a un campo de una ficha guardada de la for- ma siguiente: :ID_FICHA%CAMPO%. Por ejemplo, en un proceso hemos guar- dado una ficha con el identificador FICHA. Si posteriormente queremos obtener el campo NOMBRE de la ficha guardada, la frmula ser: :FICHA%NOMBRE% Tubo de ficha sin pedir formulario -> ALBARAN-A-FACTURA Pre Libre Post e e Guardar ficha -> NUEVA-FACTURA Cargar histrico -> LINEAS-ALBARAN, ALBARANES Tubo de lista con induccin -> LIN-ALBARAN-A-LIN-FACTURA Formulario con subproceso Esta funcin nos permite presentar al usuario un formulario con un mensa- je, una animacin o lo que queramos, para entretener o informar al usuario mientras se ejecuta el subproceso. Funcin comn de lista y de ficha. Los parmetros son: Identificador formulario: especificacin del nombre del formulario a visuali- zar. Se visualizar dicho formulario mientras se ejecuta el subproceso que genera esta funcin. Ejemplo En este ejemplo se dispara un proceso desde una lista de Proveedores pa- ra facturar sus albaranes. Para entretener al usuario, se ha creado un for- mulario en el que se ir mostrando el nombre del proveedor cuyos albara- nes estn siendo facturados. En el formulario solamente se ha incluido el texto esttico Facturando albaranes de y un control de edicin (solo lec- tura) del campo NOMBRE de la tabla de Proveedores. Cerrar ejecutor de aplicaciones Esta funcin cierra el Ejecutor de Proyectos de Velzquez Visual. Funcin comn de lista y de ficha. No tiene parmetros. Cerrar aplicacin Esta funcin cierra la aplicacin actual; si hay otras aplicaciones abiertas en la misma ventana, permanecern abiertas. Funcin comn de lista y de ficha. No tiene parmetros. Cerrar ventana Esta funcin cierra la ventana actual. Funcin comn de lista y de ficha. No tiene parmetros. Eliminar todas las fichas de la tabla Esta funcin elimina todos los registros de la tabla que se indique en sus parmetros. Es muy til en aquellos casos en los que el cliente final debe 08 Desarrollo completo de una aplicacin Para esta funcin no debemos utilizar nunca un formulario que tenga controles editables ni botones. ADVERTENCIA e e 382 383 VELAZQUEZ VISUAL importar gran cantidad de datos diariamente de una base de datos externa utilizando un tubo de importacin con la opcin No indexar y hacer Regen al final. Durante la ejecucin de esta funcin el programa bloquear la tabla objeto del borrado para que no se pueda trabajar con ella. Funcin comn de lista y de ficha. Parmetros: Identificador tabla: nombre de la tabla de la que queremos borrar sus datos. Identificador variable de retorno s/no: identificador de la variable local del pro- ceso en la que se guardar el valor de si se han borrado los registros (1) o no (0). Advertencia para la versin Cliente-Servidor: Esta funcin de procesos no genera transaccin. Si en un proceso de un proyecto que va a ser ejecutado en la versin cliente-servidor queremos eli- minar las fichas de una tabla, generando una transaccin, deber incluir an- tes de esta instruccin cualquier otra que implique escritura en disco (otra instruccin que genere transaccin), o sustituirla por lo siguiente: Cargar lista -> TABLA_DE_DATOS Recorrer lista eliminando fichas Ejemplo Hemos creado una aplicacin para una empresa que debe importar y expor- tar gran cantidad de datos diariamente. En vista de esto, hemos decidido uti- lizar un tubo de importacin con la opcin No indexar y hacer Regen al final ac- tivada. Esto supone un ahorro enorme en el tiempo de duracin de la impor- tacin de datos desde la base de datos externa. Debido a que esta opcin no comprueba la clave y no regenera los ndices hasta el final de la importacin, es preceptivo que la tabla de datos de destino (la interna de Velzquez Visual) no tenga ningn registro. Para ello, antes de ejecutar la importacin podemos crear un proceso que dispare esta funcin. Imaginemos que todos los das se han de realizar importaciones de una tabla externa a una tabla interna de CLIENTES. Entonces crearamos un proceso que incluya esta funcin: Eliminar todas las fichas de la tabla -> CLIENTES, bOK Podemos crear en un men una opcin que sea Importar datos de clientes, en esta opcin llamaremos a otro men que incluir los siguientes contro- les autodisparables: Uno que ejecute el proceso de borrado de datos de la tabla. Otro que ejecute el tubo de importacin de datos de la tabla externa con la opcin No indexar y hacer Regen al final activada. Otro que cierre dicho men. e Los controles que disparen estas tres opciones deben seguir el orden de ta- bulacin en el que los hemos explicado (borrar, importar y cerrar la ventana del men). Regenerar ndices Esta funcin regenera todos los ndices de la tabla que indiquemos como parmetro. Funcin comn de lista y de ficha. Los parmetros que debemos especificar son los siguientes: Identificador tabla: nombre de la tabla de la que queremos regenerar sus ndices. Identificador variable de retorno S/No: identificador de la variable local del proceso en la que se guardar el valor de si se han regenerado los ndices (1) o no (0). Regenerar ndices de todas las tablas Esta funcin regenera todos los ndices de todas las tablas de datos de la aplicacin. Funcin comn de lista y de ficha. Los parmetros son: Identificador variable de retorno S/No: identificador de la variable local del proceso en la que se guardar el valor de si se han regenerado los ndices de las tablas (1) o no (0). Alta directa Con esta funcin realizamos un alta de un registro de la tabla de datos es- pecificada en sus parmetros desde cualquier punto de un proceso. El ori- gen de la lnea donde usemos esta funcin puede tener su origen en cual- quier ficha o lista de cualquier tabla de datos de la aplicacin, o bien no te- ner origen ninguno. Funcin comn de lista y de ficha. Los parmetros son: Identificador Tabla: identificador de la tabla de datos en la que queremos dar un alta. Esta funcin crea dos subprocesos de ficha: Pre: este subproceso se ejecuta antes de guardar la ficha creada. Este sub- proceso es de lectura/escritura, por lo tanto, todas las modificaciones rea- lizadas en la ficha de destino sern grabadas en el disco. Ejemplo En l podemos incluir la funcin Pedir formulario, para mostrar el formulario de altas de la ficha. Si queremos que la ficha sea generada o no en funcin de una condicin, utilizaremos una funcin if para evaluar la condicin y si no se cumple, aadiremos una instruccin Else en la que se dispare un Set retorno proceso = NO. 08 Desarrollo completo de una aplicacin e e 384 385 VELAZQUEZ VISUAL If -> CONDICION Rem -> Proceso a ejecutar si se cumple la condicin Else Set retorno proceso = NO Post: este subproceso se ejecuta despus de guardar la ficha de destino. Este subproceso es de solo lectura, por lo tanto, ningn cambio realizado en la ficha de destino ser guardado en el disco. Ejemplo En el proceso PRE se podra, por ejemplo, dar valor a los campos de la ficha que se est dando de alta. Para ello habr que utilizar la funcin Modificar campo. Y en el proceso POST recoger el valor que se le asign como cdigo. Recorrer buffer Esta funcin recorre una cadena, generando un subproceso que ser eje- cutado por cada carcter que la cadena contenga. Funcin comn de lista y de ficha. Los parmetros que especificaremos son: Cadena a recorrer: cadena que recorreremos con esta funcin. Carcter en curso (variable donde retorna): variable local del proceso don- de se retorna el carcter de la cadena que est siendo procesado. Ejemplo Este proceso obtiene las iniciales de un campo alfabtico, evitando que in- cluya espacios en blanco. As, si el contenido del campo nombre es Luis Enrquez Fernndez, la variable local del proceso iniciales devolver LEF. e e e Controlar Licencia Esta funcin nos permitir conectar con nuestro Servidor de Licencias de Velzquez Visual y conocer si la licencia es vlida o no. Funcin comn de lista y de ficha. Los parmetros que definiremos son: Dominio o IP del servidor: especificacin del nombre o IP del servidor don- de est alojado nuestro Servidor de Licencias de Velzquez Visual. Clave aplicacin: clave que hayamos dado a la aplicacin en nuestro Servi- dor de Licencias de Velzquez Visual. Clave licencia: clave que hayamos asignado a esa licencia concreta de esa aplicacin en nuestro Servidor de Licencias de Velzquez Visual. Variable de retorno OK licencia: variable que devolver si la licencia es vli- da (1) o no (0). Array retorno parmetros: identificador de un array donde retornar parmetros. Este array tendremos que haberlo creado con anterioridad en el proceso (fun- cin Array: Crear). En el array guarda la informacin de la forma siguiente: Posicin Retorno 0 Primer nmero del nmero de serie de la licencia. 1 Segundo nmero del nmero de serie de la licencia. 2 Tercer nmero del nmero de serie de la licencia. 3 Cuarto nmero del nmero de serie de la licencia. 4 Nmero de puestos de la licencia. De la 5 en adelante presentar por este orden: Datos numricos. Datos de fechas. Datos alfabticos. Datos booleanos. Todos estos parmetros retornados en el array los habremos definido en la aplicacin del Servidor de Licencias de Velzquez Visual. Esta instruccin nos ser de utilidad para proteger mapas de Velzquez que comercialicemos a travs de un Servidor de Licencias de Velzquez Visual, evitando as el uso de mochilas de proteccin hardware. Oracle Velzquez Visual nos permite, a travs de procesos y usando esta serie de funciones, el acceso a bases de datos Oracle, tanto para lectura como pa- ra escritura de registros. 08 Desarrollo completo de una aplicacin 386 387 VELAZQUEZ VISUAL Oracle: Logon Esta funcin establece conexin con una base de datos de Oracle. La funcin genera un subproceso, y una vez ejecutadas las funciones incluidas en el mis- mo, el logoff ser ejecutado automticamente. Funcin comn de lista y de ficha. Los parmetros son: Usuario: especificacin del nombre del usuario. Contrasea: especificacin de la contrasea del usuario. Ambos parmetros pueden ser especificados directamente en el primero, debiendo seguir para su especificacin la propia sintaxis de Oracle. Ejemplo Un usuario que se llame Kike, con contrasea 1234, escribira lo siguiente: Oracle: Logon ->, KIKE, 1234 Si ha definido una conexin a una base de datos Oracle en SQL*NET 2, se especificar, en el parmetro correspondiente al usuario, lo siguiente: Usuario@INSTANCIA FUNCIONES DE ORACLE e Donde: Usuario: Usuario de Oracle INSTANCIA: Nombre de la conexin definida en SQL*NET 2 Oracle: SQL Esta funcin nos permite establecer la sentencia SQL a ejecutar. Funcin comn de lista y de ficha. Los parmetros son: Comando SQL: expresin frmula con la especificacin de la sentencia SQL a ejecutar. Podr ser una constante, una variable, etc. Esta funcin genera dos subprocesos, uno Pre y otro Post. En el Pre la sen- tencia select ya ha sido interpretada; en l se establecern todos los par- metros de entrada, si los hubiera. En el Post, si se ejecuta una query, habr que obtener los datos. Si se tra- ta de un Update, Delete o Insert, no habr que especificar nada. Ejemplo En este proceso, la funcin ejecuta una select del campo ENAME de la ba- se de datos de Oracle EMP, buscando aquellos cuya edad (campo EAGE) sea mayor que la contenida en una variable global de Velzquez Visual, lla- mada $EDAD$. Como podemos observar, en la sentencia SQL se ha esta- blecido un parmetro (:EDAD): el valor de ste es resuelto en el subproceso Pre de la instruccin, con la funcin Oracle: Set parmetro, donde se indica que el parmetro se ha de resolver con el valor de la variable global $EDAD$. Oracle: SQL -> SELECT ENAME FROM EMP WHERE EAGE > :EDAD Pre Oracle: Set parmetro -> 1, $EDAD$ Oracle: Set parmetro Esta funcin establece los parmetros de entrada de la sentencia SQL. Se utilizar en el subproceso Pre generado por la funcin Oracle: SQL. Funcin comn de lista y de ficha. Los parmetros son: Nmero: nmero del parmetro en la sentencia SQL. El primero ser la 1. Si el nmero introducido es menor que 1 o mayor que el nmero total de co- lumnas, no se tendr en cuenta el valor del parmetro. El nmero de co- lumna no es el nmero del campo en la tabla de datos, sino que depende- r de la sentencia select efectuada. Frmula dato: valor del parmetro que queremos pasar. Puede tratarse tan- to de una constante como de una variable. 08 Desarrollo completo de una aplicacin Cada sentencia SQL se ha de ejecutar de forma independiente, no es posible ejecutar una sentencia SQL dentro del subproceso generado por la instruccin Oracle: SQL. ADVERTENCIA e e 388 389 VELAZQUEZ VISUAL Ejemplo De una tabla de Oracle, llamada EMP, queremos obtener el nombre (ENA- ME) de aquellos registros cuya fecha de nacimiento (EDATE) se encuentre entre las fechas establecidas en las variables globales $FECHA-INI$ y $FE- CHA-FIN$ Oracle: SQL -> SELECT ENAME FROM EMP WHERE EDATE > :INICIO AND EDATE < :FIN Pre Oracle: Set parmetro -> 1, $FECHA-INI$ Oracle: Set parmetro -> 2, $FECHA-FIN$ Como podemos observar, en la sentencia SQL se identifica cada parme- tro por el smbolo : delante (sintaxis de Oracle), y un identificador cualquie- ra detrs. En el subproceso Pre de esta funcin se indica (con la funcin Set parmetro) el valor por el que se ha de sustituir cada parmetro. Oracle: Recorrer lista Cuando se ha ejecutado una query en una base de datos de Oracle, se utili- zar esta instruccin en el subproceso Post generado por la instruccin Ora- cle: SQL, para recorrer la lista resultante. Funcin comn de lista y de ficha. No tiene parmetros. Oracle: Get dato Esta instruccin nos permite obtener datos de una tabla de datos de Ora- cle. Se utilizar en el subproceso generado por la instruccin Oracle: Reco- rrer lista. Funcin comn de lista y de ficha. Los parmetros que debemos definir son: N columna: nmero de la columna de la que se va a obtener el dato. La pri- mera columna ser la nmero 1. Si el nmero introducido es menor que 1 o mayor que el nmero total de columnas, no har nada. El nmero de co- lumna no es el nmero del campo en la tabla de datos de Oracle, sino que depender de la sentencia select efectuada. Variable donde retorna: variable local del proceso donde se guardar el re- sultado. Ejemplo De una base de datos de Oracle (EMP) queremos obtener el nombre (ENA- ME) de aquellos cuya edad (campo AGE en la tabla de Oracle) supere la in- troducida por el usuario en la variable local edad: Pedir dato -> Edad, edad, 0, bok If bok e e Oracle: Logon -> usuario/password@dbcone, Oracle: SQL -> SELECT ENAME FROM EMP WHERE AGE > :EDAD Pre Oracle: Set parmetro -> 1, edad Post Oracle: Recorrer lista Oracle: Get dato -> 1, dato En el subproceso Pre de la instruccin Oracle: SQL la sentencia select ya ha sido interpretada, por lo que en l habr que alimentar el parmetro de entrada. En el subproceso Post se obtendrn los resultados si se trata de una sentencia query; si se trata de un Update, Delete o Insert no habr que hacer nada en el mismo. En el subproceso Post de la instruccin Oracle: SQL de este ejemplo, se re- corre la base de datos de Oracle para obtener los datos. El Logoff close se ejecuta automticamente una vez haya finalizado el sub- proceso que cuelga de la funcin Oracle: Logon. Ejemplo de Procesos En una aplicacin trabajamos con un campo donde guardaremos el N.I.F. de los clientes. A la hora de rellenar los datos de un cliente en el formulario, este proceso comprueba si el usuario ha escrito correctamente este campo NIF. Comprueba la letra de ste y si el usuario ha escrito un guin para se- pararla del nmero. El mensaje de aviso del NIF errneo se generar en fun- cin de lo que se haya hecho mal (o haber escrito mal la letra, o no haber 08 Desarrollo completo de una aplicacin e e 390 391 VELAZQUEZ VISUAL utilizado un guin para separarla de los nmeros o ambas a la vez). Este proceso lo asignaremos a la prdida de foco de los formularios de alta y modificacin de CLIENTES. Seleccionamos el objeto Proceso de la Galera de Objetos, y espe- cificamos el origen que, como partimos de un formulario de clientes, ha de ser Ficha de Clientes, y ponemos una descripcin: Control del NIF de un cliente. El desarrollo del proceso es el siguiente: Set -> nLenNif, fLen(%NIF%) La funcin Set se utiliza para asignar, al tiempo que la creamos, un valor a una variable local del proceso. Los parmetros son: Identificador: el nombre que tendr la variable local. La hemos llamado: nLenNif. Frmula: aqu especificamos el valor que va a tomar esta variable. Creamos entonces la siguiente frmula a travs del Asistente: fLen(%NIF%). fLen() es una funcin de frmulas de Velzquez Visual que devuelve la lon- gitud de una cadena. Se puede escribir directamente o bien seleccionn- dola de la lista que aparece cuando pulsamos el botn Funcin. PARMETROS DE LA FUNCIN SET e Proceso Galera de Objetos Funcin %NIF% es el nombre del campo que recoge el NIF de la tabla de CLIEN- TES. Podemos, o bien escribirlo directamente, o bien obtenerlo de la lista de campos que se muestra al pulsar el botn Campo del Asistente pa- ra la edicin de frmulas. Como hemos explicado, los nombres de campo en el asistente para la creacin de frmulas siempre van incluidos entre dos smbolos %. Con esta lnea de proceso hemos calculado el nmero de caracteres que contiene el campo NIF y se los hemos asignado a la variable nLenNIF. La siguiente lnea de proceso es: If -> nLenNif > 0 Utilizamos esta funcin para determinar si el usuario ha introducido o no el NIF. Si no lo ha introducido, finalizar la ejecucin del proceso. El nico parmetro que tiene esta funcin es la Frmula condicional, que se crear a travs del asistente de frmulas. nLenNif es la variable local que habamos creado en la lnea anterior. NLenNif es una variable local del proceso, as que hemos de escribirla en- tre apstrofes. Si no queremos escribirla directamente, pulsaremos el botn Variable local del Asistente para la edicin de frmulas, escogindola en- tre la lista de variables locales creadas. El operador > (mayor que) podemos escribirlo directamente o seleccionarlo de la lista de operadores que se muestra al pulsar el botn Operador del Asistente. 08 Desarrollo completo de una aplicacin LISTA DE FUNCIONES CUANDO PULSAMOS EL BOTN FUNCIN e Campo del Asistente Variable local Operador del Asistente 392 393 VELAZQUEZ VISUAL Finalmente se ha escrito el nmero 0 para determinar la condicin. Si se cumple, es decir, hemos cumplimentado el nmero del NIF, se genera un subproceso del que colgaremos el resto de funciones. A continuacin vie- ne la siguiente lnea de cdigo: Set -> cadena, TRWAGMYFPDXBNJZSQVHLCKE Creamos la variable local cadena y le asignamos el contenido TR- WAGMYFPDXBNJZSQVHLCKE. Puesto que se trata de una frmula he- mos de entrecomillar la cadena. sta es la cadena de letras para la com- probacin del NIF. Esta funcin y las que vienen a continuacin, puesto que tienen que ejecu- tarse si se cumple la anterior condicin, las incluimos dentro del subproce- so generado por el if de la funcin anterior. Set -> nLetra, %NIF% r 23 Creamos la variable local nLetra y le asignamos el resto que se obtiene de dividir el NIF entre 23. Set -> bOK, 1 Creamos una variable local llamada bOK y le asignamos el valor 1. Esta va- riable la usaremos para establecer un conmutador en el que almacenemos si es correcto el NIF. Lo utilizaremos ms adelante en el proceso para eje- cutar ciertas funciones cuando su valor sea 0. Set -> szMensaje1, VENTANA DE OPERADORES e Creamos una variable local llamada szMensaje1 y le asignamos una cade- na de caracteres vaca (). La usaremos para asignarle un mensaje en pos- teriores lneas del programa. Set -> szMensaje2, Creamos otra variable local llamada szMensaje2 y le asignamos una cade- na de caracteres vaca (). Al igual que la anterior, la utilizaremos para asig- narle un mensaje. If (fMid (cadena, nLetra, 1) ! fRight(%NIF%, 1)) En esta lnea comprobamos si la letra que corresponde en la cadena de ca- racteres del NIF, es distinta de la letra introducida por el usuario al teclear el NIF. La funcin fMid(cadena, posicin, nmero) extrae de una cadena, a partir de una determinada posicin, X caracteres. En este caso, obtiene una letra de la cadena TRWAGMYFPDXBNJZSQVHLCKE, a partir de la posicin alma- cenada en la variable local nLetra (la que guardaba el resto de la divisin del NIF entre 23). Podemos escribir esta funcin directamente, u obtenerla a travs del botn Funcin del Asistente para la edicin de frmulas. El operador ! (exclamacin) es Distinto de. Podemos teclearlo directamente o seleccionarlo de la lista de operadores que se abre al pulsar el botn Operador del Asistente. La funcin fRight(parmetro, longitud) extracta de la parte derecha del pri- mer parmetro tantos caracteres como determinemos en el segundo par- metro. Aqu la utilizamos para obtener la letra del campo NIF que ha te- cleado el usuario. Por tanto, en esta lnea comprobamos si la letra de la cadena no se corres- ponde con la escrita por el usuario al teclear el NIF. En ese caso, esta fun- cin genera un subproceso y en l incluiremos las dos lneas siguientes, en las que compondremos parte del mensaje de error que se enviar al usuario. Set -> bOK, 0 Asignamos el valor 0 a la variable local bOK que usbamos como conmu- tador en caso de error. Set szMensaje1, no pasa el chequeo Asignamos el texto no pasa el chequeo a la variable local szMensaje, pa- ra mostrarlo despus al usuario. If fMid (%NIF%, nLenNif- 2, ,1) ! - En esta lnea evaluamos si el penltimo carcter no es un guin (-), para de- terminar si tambin hay ese fallo. 08 Desarrollo completo de una aplicacin e Funcin del Asistente Operador del Asistente 394 395 VELAZQUEZ VISUAL fMid() es la funcin que extrae X caracteres, a partir de una determinada po- sicin. En este caso extrae del campo NIF, en la ltima posicin (nLenNif) menos 2 (la ltima es la letra y la penltima debe ser el guin), 1 carcter y comprueba si es distinto del guin (-). Esta funcin genera un subproceso, que es donde tendr que ir la lnea si- guiente. If -> bOK = 0 Comprueba si la variable local bOK es igual a 0, es decir, que se comprob que el NIF era errneo. De esta manera podremos aadir un nexo al men- saje para unir ambos mensajes de error. Esta funcin genera un subproceso, en el que incluiremos la siguiente lnea. Set -> szMensaje1, szMensaje1 + y En esta lnea asignamos a la variable local szMensaje1 el contenido que te- na anteriormente, ms la conjuncin y. De esta manera componemos el mensaje: como era incorrecto el NIF y adems hemos comprobado que fal- ta el guin, uniremos ambos enunciados. Set -> bOK, 0 Asignamos un 0 a la variable local bOK, ya que, en caso de que no hubiera error en la introduccin de los nmeros del NIF, hemos detectado que falta el guin. Esta lnea debe colgar de aquella en la que se comparaba si el penltimo carcter era o no un guin: if fMid (%NIF%, nLenNif- 2, ,1) ! -. Para ello nos posicionamos sobre la lnea If -> bOK = 0, que es la lnea que se en- cuentra en ese subproceso, y pulsamos el botn Aadir lnea (F5). Se generar una lnea libre en la que incluiremos esta nueva (Set -> bOK, 0). Set -> szMensaje2, falta guin antes de la letra Esta lnea tendremos que crearla al mismo nivel que la anterior, para ello nos posicionamos sobre ella y pulsamos el botn Aadir. Le asignamos el texto falta guin antes de la letra a la variable local szMen- saje2, para completar el mensaje. If -> bOK = 0 Esta lnea ha de ir al nivel de la funcin If fMid (%NIF%, nLenNif- 2, ,1) ! -, as que nos posicionamos sobre ella y pulsamos el botn Aadir. Comprobamos de nuevo si el valor de la variable local bOK es igual a 0, ya que en ese caso es que hay error y compondremos ahora el mensaje final para el usuario. Por tanto las lneas que van a continuacin las incluimos en el subproceso que genera esta funcin. e Aadir lnea Aadir Mensaje -> NIF errneo: + szMensaje1 + szMensaje2 Esta funcin muestra un mensaje, que estar compuesto por el texto NIF errneo, ms el mensaje que habamos incluido en la variable local szMen- saje1, ms el mensaje incluido en la variable local szMensaje2. Set retorno proceso = NO El haber aceptado un campo implica el paso del foco al siguiente. Esta fun- cin, en este caso, deja el foco en el control de edicin del campo NIF. Con esto hemos terminado el proceso. Ahora lo asignaremos a la prdida de foco del formulario de altas y modificaciones de CLIENTES. En la pestaa Estilos de las propiedades del control para la edicin del cam- po NIF, tenemos la opcin de activar la casilla Pierde foco y asignar un pro- ceso a este evento. 08 Desarrollo completo de una aplicacin FORMULARIO DE ALTAS / MODIFICACIONES Y VENTANA DE PROPIEDADES DEL CONTROL DE EDICIN DEL NIF e 396 397 VELAZQUEZ VISUAL Seleccionamos de la lista de procesos que nos aparece el que hemos crea- do y que hemos llamado CONTROLANIF. En ejecucin, al editar el campo y avanzar control, o al aceptar el formulario, nos lanza el proceso. En caso de error en la letra del NIF nos muestra el men- saje NIF errneo: no pasa el chequeo. Si falta el guin nos muestra el mensaje NIF errneo: falta guin antes de la letra y en caso de que haya ambos errores nos mostrar NIF errneo: no pasa el chequeo y falta guin antes de la letra. A este ejemplo podramos aadirle o cambiarle las condiciones de error para ayudar al usuario a localizar mejor el error cuando escribe el NIF. Podramos aadir una lnea que comprobara cuntas cifras tiene el nmero del NIF y que sumara al mensaje esa informacin en caso de error. Tambin podemos cam- biar la situacin de la letra del NIF o aadir una funcin que mire si no est al final del nmero, al principio de ste, para el caso en el que el NIF puede ser de una empresa o un particular, etc. Tambin podemos cambiarlo si no que- remos escribir un guin para separar la letra del nmero eliminando esa com- probacin o hacindola contraria a la que hemos usado en este ejemplo, o usar dos campos para guardar el NIF, uno con las cifras y otro con la letra. Ejemplo: proceso y funcin Siguiendo con el ejemplo anterior, vamos ahora a ver un ejemplo de cmo se usan las funciones. Acabamos de hacer un proceso que nos comprueba ASIGNACIN DEL PROCESO CONTROLANIF A LA PRDIDA DE FOCO e e la correccin del campo NIF, ahora ser una funcin que tendr como pa- rmetro el NIF que le pasaremos a travs de un proceso. De esta manera podremos usar la funcin no slo en el formulario de clientes, sino en todas las tablas donde sea necesario, incluso en otros mapas. Interesa hacernos con una librera de funciones que podamos aprovechar cuando diseemos otras aplicaciones; nos ahorrar mucho trabajo. Vamos a crear una funcin que compruebe la correccin del NIF y un pro- ceso que la llame. Seleccionamos el objeto Funcin de la Galera de objetos. Pone- mos como descripcin, por ejemplo, Control del NIF, y como parmetro nif. Este parmetro aparecer a lo largo del proceso como una variable local que contendr el valor que le pasemos como parmetro. La funcin es igual que el proceso creado antes, slo que en lugar de tra- bajar con el campo NIF, trabajaremos con la variable local que es el par- metro que hemos definido. Adems, en caso de encontrar error, retorna el mensaje al proceso que la llama. Para ello, almacena el mensaje en una va- riable llamada bRetorno, que retorna con la funcin: Set retorno funcin -> bRetorno Salimos pulsando el botn Aceptar (Intro) y escribimos el identificador de la funcin: CONTROL-NIF. El NIF deber ser verificado cuando el usuario escriba ste en el formulario de alta y modificacin del cliente, por lo que crearemos un proceso encar- gado de llamar a la funcin. 08 Desarrollo completo de una aplicacin FUNCIN CONTROL DEL NIF e Funcin Galera de objetos Aceptar 398 399 VELAZQUEZ VISUAL Seleccionamos el objeto Proceso de la Galera de Objetos y pone- mos como Descripcin, por ejemplo: Verificar NIF. El Origen ha de ser ficha, pues lo lanzaremos al editar el registro de un cliente a travs de un formu- lario, y la tabla ser CLIENTES. Como Estilo marcaremos Privado, para lan- zarlo nicamente donde queramos, y que el usuario final no acceda a l. El proceso es el siguiente: Set Retorno -> CONTROL-NIF( %NIF% ) Inicializamos la variable local Retorno con la funcin. Para establecer la frmula pulsamos el botn Asistente y a continuacin, dentro del editor, sobre el botn Funciones, seleccionando de la lista la funcin que hemos creado. Estamos alimentando el parmetro nif de la funcin con el contenido del campo NIF. if -> fCampoVacio( Retorno ) = 0 Segn habamos desarrollado la funcin, sabemos que si la variable local no contiene nada querr decir que el nif es correcto, si devuelve una cade- na, no lo es. Mensaje-> Retorno, Stop Presenta el mensaje de error retornado por la funcin. Set retorno proceso = NO Cancela el avance de campo en el formulario. Este proceso se asignar a la prdida de foco del formulario de alta y mo- dificacin de CLIENTES. Para ello editamos el cuadro de propiedades del formulario, y activamos la casilla de verificacin Pierde foco, seleccionando entonces este proceso. Si en el mapa existiese tambin una tabla PROVEEDORES podramos ha- cer un proceso igual al anterior (con origen ficha de la tabla PROVEEDO- RES) para controlar el NIF de stos, usando nuevamente la funcin CON- TROL-NIF( nif ). Ejemplo Formulario con subproceso e e Proceso Galera de Objetos Funciones En este ejemplo mostraremos cmo se utiliza la funcin de procesos For- mulario con subproceso. Este tipo de formularios se utilizan para entretener al usuario cuando se va a realizar un proceso largo. El que vamos a crear tambin incluye una animacin. Creamos un mapa con la siguiente estructura de tablas: Tabla Tipo Tabla de datos padre CLIENTES Maestro normal con clave numrica ALBARANES Maestro de segundo nivel CLIENTES En la tabla ALBARANES aadimos los dos campos siguientes: Al campo FECHA de la tabla ALBARANES le ponemos por Contenido inicial la funcin fHoy(). De este modo, al dar de alta un albarn, el control de edi- cin de la fecha contendr por defecto la fecha actual (la del sistema). Creamos una rejilla para cada tabla, formularios de altas, bajas y modifica- ciones y bsquedas por orden alfabtico de todos los clientes y por orden de fecha de todos los albaranes. Aadimos botones para acceder a campos enlazados desde los formularios de altas y modificaciones de ALBARANES. En el formulario de modificaciones de CLIENTES incluimos una rejilla de histrico de ALBARANES. Finalmente, creamos un men, con identificador AUTOEXEC, que es el que se presentar al ejecutar el mapa. Aunque en este proyecto vamos a utilizar slo dos tablas simularemos un proceso de facturacin de albaranes para ver cmo funciona esta funcin de proceso. Creacin del formulario: Queremos realizar un proceso que, partiendo de una lista de albaranes, los facture todos. Puesto que para este proceso se ha de recorrer la lista de ALBARANES, se crea- r un formulario asociado a esta tabla. Para ello seguiremos los pasos siguientes: De la Galera de objetos seleccionamos el objeto Formulario de edi- cin de fichas y en su cuadro de propiedades ponemos un nombre (por 08 Desarrollo completo de una aplicacin Campo Tipo Longitud (bytes) Contenido inicial FECHA Fecha - fHoy() CANTIDAD Numrico 3 - e Galera de objetos Formulario de edicin de fichas 400 401 VELAZQUEZ VISUAL ejemplo Facturacin de albaranes) y los asociamos a la tabla de datos AL- BARANES. Ahora que ya hemos creado el formulario vamos a editarlo. Este formulario no tiene que llevar los botones de Aceptar y Cancelar, as que debemos suprimir los que nos aparecen por defecto al crear uno nuevo. Aadimos un control Texto esttico, editamos el cuadro de propiedades y escribimos Facturando los albaranes de:. Queremos que en el formulario se presente el nombre del cliente del que se est facturando el albarn, as que aadimos un control de Edicin de campo y seleccionamos el campo NOMBRE del Cliente (Cliente -> Nom- bre). A este control, en el cuadro de propiedades, le suprimimos los bordes, le ponemos como color de fondo el mismo que el del formulario y lo situa- mos bajo el control creado anteriormente. PROPIEDADES DEL FORMULARIO e Texto esttico Edicin de campo Aadimos un control de tipo Animacin, lo situamos en el formulario y editamos su cuadro de propiedades. En Origen especificamos Interno, para seleccionar una de las animaciones que vienen incluidas en Velzquez Visual. stas se encuentran desplegan- do el combo box bajo el epgrafe Animaciones en stock, de entre las dispo- nibles hemos escogido Mover. En cuanto al Estilo de la animacin suprimimos el Borde, seleccionamos la opcin A nivel y activamos las opciones Centrado y Transparente. Cerramos entonces el cuadro de propiedades de la animacin. Redimensionamos el tamao del control, situndolo a continuacin bajo el que creamos anteriormente y lo centramos horizontalmente en el formula- rio a travs del botn Centrado horizontal de la barra de maquetacin de la parte izquierda de la pantalla. 08 Desarrollo completo de una aplicacin SELECCIN DEL CAMPO NOMBRE PARA EL CONTROL DE EDICIN e Animacin Centrado horizontal 402 403 VELAZQUEZ VISUAL Aadimos otro control Texto esttico, editamos su cuadro de propiedades y como texto escribimos Espere, por favor. Lo situamos bajo la animacin. Creacin del proceso: Una vez seleccionado el objeto Proceso de la Galera de objetos, se abrir la ventana de edicin de procesos. En el parmetro Descripcin es- cribimos un texto explicativo de lo que realizar el proceso, por ejemplo: Facturacin de albaranes. El proceso tiene que recorrer la lista de albaranes. El proceso es el siguiente: Puesto que este proceso se va a ejecutar desde una lista de ALBARANES, tendremos que especificar en la parte superior de la ventana de procesos que el Origen del mismo ser Lista y la Tabla de datos de origen ser AL- BARANES. En el apartado Origen de la lnea seleccionada se muestra el origen que ten- ga la lnea que hayamos seleccionado. En un proceso real de facturacin de albaranes hay que recorrer la lista de albaranes: as, por cada albarn de la lista, se ejecuta un Tubo de ficha pa- ra crear las cabeceras de las facturas, se carga el histrico de las lneas de albarn y se ejecuta un Tubo de lista para la creacin de las lneas de cada factura. Para simular este proceso de creacin de facturas y lneas de fac- turas se ha utilizado la funcin Esperar. Como podemos ver, la primera funcin del proceso es Recorrer lista solo lectura, esta opcin no lleva parmetros, porque hemos definido el origen del proceso en una lista de ALBARANES, as que ste es el origen de esta primera lnea. Esta funcin genera un subproceso y es en esa lnea de sub- VENTANA DE PROCESO e Texto esttico Proceso Galera de objetos proceso donde incluimos la funcin Esperar. Esta funcin requiere un par- metro: el nmero de milisegundos durante los que se ha de detener la eje- cucin del proceso. Especificamos los que queramos, por ejemplo, 2.500 para que no tarde mucho. Incluimos la funcin Esperar donde habra que crear el proceso de facturacin. Ejecucin del proyecto: Al arrancar el proyecto se ejecuta el men tipo formulario que hayamos identificado AUTOEXEC. En l habramos incluido las distintas opciones que tenemos. Damos de alta al menos dos clientes a travs de la opcin Nuevo cliente y a continuacin damos de alta, al menos, un albarn por cliente, ejecutando la opcin Nuevo albarn. Ejecutamos la opcin de bsqueda de albaranes ordenados por fecha (Al- baranes por fecha) y pulsamos el botn Procesos de la barra de herra- mientas que se encuentra en la parte inferior de la rejilla. Aparecer un me- n en el que se muestran los procesos a ejecutar desde una lista de alba- ranes (en este caso ser uno: el que hemos creado anteriormente (Factura- cin de albaranes). 08 Desarrollo completo de una aplicacin MEN AUTOEXEC e Procesos 404 405 VELAZQUEZ VISUAL Seleccionndolo, veremos cmo se presenta en pantalla el formulario que habamos incluido en el proceso, con la animacin en marcha e incluyendo el nombre del cliente del que se estn facturando los albaranes. En el momento que el proceso pase al siguiente registro de la lista de ALBA- RANES, en el formulario se mostrar el nombre del cliente correspondiente. 8.5.23. Ejecucin de procesos en primer, segundo 8.5.23. y tercer plano en la arquitectura VRunner 8.5.23. y la arquitectura cliente-servidor 8.5.23. de Velzquez Visual Veremos ahora los diferentes planos en los que puede ser ejecutado un pro- ceso en Velzquez Visual: ALBARANES POR FECHA VENTANA QUE PRESENTA LA FUNCIN DE PROCESO: FORMULARIO CON SUBPROCESO e Primer plano: son lanzados en la parte cliente. Su ejecucin paraliza al usuario, es decir, debe esperar a que finalice el proceso para seguir traba- jando con la aplicacin. Segundo plano (en multitarea): son lanzados en la parte cliente pero su eje- cucin no paraliza al usuario, es decir, el usuario puede trabajar con la apli- cacin a la vez. Tercer plano: son ejecutados en la parte servidora y pueden ser lanzados desde: Un proceso en primer plano ejecutado desde la parte cliente. Un proceso en segundo plano ejecutado desde la parte cliente. Tambin son procesos en tercer plano los siguientes: Los que son ejecutados desde Pginas html de Velzquez Visual. Los ejecutados como tareas programadas en el Servidor de Aplicacio- nes de Velzquez Visual. Slo podrn dispararse como tarea programa- da en el Servidor de Aplicaciones de Velzquez Visual aquellos procesos pblicos que tengan origen Ninguno. Los demonios. Veamos ciertas consideraciones a tener en cuenta sobre los procesos a eje- cutar en tercer plano: Permiten herencia de retornos, es decir, el proceso que llama a otro here- dar los retornos lanzados desde el proceso ejecutado en tercer plano (por ejemplo, las funciones de procesos Imprimir informe o Aadir retorno). Es posible lanzar un proceso que escriba en disco desde un proceso que no escriba en disco. En este caso, la transaccin la generar el subproce- so, siendo generada una por cada vez que ste se ejecuta, y no una nica transaccin por el proceso principal. Esta caracterstica es til cuando te- nemos un proceso que realiza numerosas escrituras en disco: si llevamos estas escrituras en disco a un subproceso, en vez de generar una nica transaccin en la que si se corta el proceso nos eche atrs gran nmero de operaciones, genera una por cada ejecucin del subproceso, con lo que si se corta el proceso principal, solamente echar atrs la ltima transaccin, correspondiente a la ltima ejecucin del subproceso. Es posible pasar variables globales desde el proceso de origen al que se ejecute en el Servidor, y desde ste devolver al proceso principal los nue- vos valores que tomen las mismas. Los procesos llamados no pueden tener su origen en una tabla en memo- ria, pues las tablas en memoria son de carcter local y por tanto su conte- nido es diferente en cada estacin Cliente y en el Servidor. 08 Desarrollo completo de una aplicacin Los procesos en segundo plano no aaden retornos (por ejemplo, retornar rejillas o presentar un informe). En la versin de comparticin de ficheros de Velzquez Visual (ejecucin con fichero VRunner) slo pueden ejecutarse procesos en primer o segundo plano. Es la arquitectura Cliente- servidor la que permite ejecutar procesos en tercer plano. ADVERTENCIA 406 407 VELAZQUEZ VISUAL No heredan cestas de la compra, pues stas tambin son de carcter local. 8.5.24. Tubos Los tubos son procesos especializados en transferir informacin de un ori- gen a un destino. Estn compuestos por capilares, que sirven para calcular los campos de destino en base a la informacin de origen. Los Tubos de Ficha: sirven para crear un nico registro en la tabla de datos de destino. Pueden usarse desde una ficha o desde un registro de una lis- ta de la tabla de datos de origen (al seleccionar un registro de una rejilla o de un rbol visor de tablas arboladas). Al finalizar el proceso, pueden presentar un formulario de la tabla de datos de destino con el contenido de sus campos alimentado por los capilares del tubo. El usuario podr realizar cambios y validar o cancelar el alta del re- gistro como en cualquier otro formulario. Con los Tubos de Lista: generamos listas de registros en una tabla de da- tos en funcin de los registros de otra. Tanto el origen como el destino po- drn ser cualquiera de las tablas declaradas en el proyecto o una tabla de datos externa. Adems, es posible crear varios tubos con el mismo origen / destino. Un ejemplo puede ser un tubo de lista cuyo origen sea ARTICULOS y su destino LINEAS DE ALBARAN de compras. Podemos hacer una bsqueda de los artculos de un proveedor cuyo stock se encuentre bajo mnimos pa- ra despus disparar el tubo, que nos crear el albarn de pedido de los ar- tculos encontrados. Un tubo de lista es capaz de crear un registro en una tabla de datos maes- tra de la de destino. Siguiendo con el ejemplo anterior, el tubo sera capaz de crear una cabecera de albarn de compras. Tubos de Ficha En el apartado anterior ya hemos visto cmo trabaja un tubo de ficha, aho- ra bien, tengamos en cuenta lo siguiente: Para crear un tubo de ficha pulsamos el botn Nuevo objeto. De la Ga- lera de Objetos elegimos Tubo de ficha. En el cuadro de dilogo Propiedades del tubo de ficha declaramos el Nom- bre, la Tabla de datos de origen, la Tabla de datos de destino, el Formulario para presentar el nuevo registro y los Capilares del tubo. Si el formulario de destino no est especificado dentro de las propiedades, el tubo no presentar mensaje de error, pero no se ejecutar en caso de que usemos una funcin de proceso Tubo de ficha. ADVERTENCIA Tubos de Ficha Nuevo objeto Para crear un capilar pulsamos el botn Aadir. Aparecer entonces el cuadro de dilogo Propiedades de un capilar de Tubo de Ficha. En el cuadro elegimos el Campo destino y establecemos la frmula o ca- dena de formato (segn el tipo de campo del que se trate) a aplicar al ori- 08 Desarrollo completo de una aplicacin VENTANA DE PROPIEDADES DE UN TUBO DE FICHA PROPIEDADES DE UN CAPILAR DE TUBO DE FICHA Aadir 408 409 VELAZQUEZ VISUAL gen, ayudndonos para ello del Asistente para la edicin de frmulas o el Asistente para la edicin de cadenas de formato, respectivamente. De este modo podemos alimentar el campo destino con una frmula que involucre los campos que queramos de la ficha origen. A la hora de crear los capilares de un tubo de ficha debemos tener en cuen- ta el orden de los mismos para un correcto traspaso de los datos. Si el botn Auto est activo es porque entre las tablas de origen y de destino hay campos coincidentes. Activndolo, Velzquez crear automticamente los capilares entre dichos campos, alimentando el campo destino con el contenido de su gemelo origen. Si no lo pulsa- mos podremos alimentar el destino con la frmula o cadena de forma- to que queramos. Tubos de Lista Para crear un tubo de lista pulsaremos el botn Nuevo objeto, y de la Galera de Objetos elegiremos Tubo de lista. Ya sabemos que mediante los tubos de lista generamos registros en una ta- bla de datos en virtud del contenido de otra tabla. Tanto el origen como el destino podrn ser cualquiera de las tablas declaradas en el proyecto o una tabla de datos externa. En el cuadro de dilogo Propiedades del tubo de lista se declara el Nombre, el Flujo de la informacin, el Origen, el Destino y los Capilares. PROPIEDADES DE UN TUBO DE LISTA Auto Tubos de Lista Nuevo objeto El Origen y el Destino pueden variar dependiendo del flujo. Si el flujo es Im- portacin, el origen ha de ser una consulta de una base de datos externa. A este tipo de tubos se les conoce como Tubos de Importacin. Si el flujo es de Exportacin, el destino ser una tabla de una base de datos externa a Velzquez Visual. A este tipo de tubos se les conoce como Tubos de Ex- portacin. En la tabla de destino, los campos se alimentan en el mismo orden en el que se han generado los capilares, excepto en los tubos de importacin, en los que se sigue el orden que tengan los campos en la consulta de la tabla de datos de origen, independientemente del orden de los capilares del tubo. Estilos: Privado: si activamos esta opcin el tubo slo podr dispararse desde don- de nosotros indiquemos. Si est desactivado, el usuario final podr dispa- rarlo desde cualquier lista de la tabla de datos de origen del tubo. No indexar y hacer regen al final: si se trata de un Tubo de importacin, po- dremos activar o desactivar esta opcin. Reduce enormemente el tiempo de importacin de datos. Primero realiza la importacin de datos y poste- riormente regenera los ndices de la tabla de destino. Su uso se aconseja slo en el caso de que se trate de un programa en el que se deban impor- tar gran cantidad de datos diariamente. Antes de ejecutar un tubo de im- portacin con esta opcin activada es aconsejable borrar previamente los registros de la tabla de datos de destino (la de Velzquez Visual), pues esta opcin ni comprueba los campos cdigo ni indexa hasta que no se hayan importado todos los registros. Usar contenido inicial campos destino: si activamos esta opcin, al gene- rarse los registros se dispararn los contenidos iniciales definidos en los campos de la tabla de datos de destino. Es aconsejable, por tanto, no crear capilares para los campos de la tabla de destino que tengan establecido un contenido inicial. Usar cdigo automtico en destino: este estilo slo estar activo cuando se haya desactivado el estilo anterior (usar contenido inicial campos destino). En el caso de que la tabla de destino sea maestra, es decir, que tenga de- finido un campo cdigo y que su contenido inicial sea Siguiente al ltimo, habr que activar este estilo para que la codificacin de los registros de la tabla sea automtica. Si este estilo est desactivado y el cdigo se pasa en un capilar, el registro no ser dado de alta si en la tabla de destino existe al- gn registro con el mismo cdigo. Usar actualizaciones en destino: si la tabla de datos de destino tiene defini- das actualizaciones y activamos esta opcin, al generarse los registros s- tas sern disparadas, si no, no se realizarn las actualizaciones. Dar alta?: en los casos de flujo Interno, es decir, cuando el origen y el des- tino son tablas de Velzquez Visual, es posible hacer un alta de ficha en un maestro de la tabla destino. Sealando la opcin Dar alta? se activan las 08 Desarrollo completo de una aplicacin No utilizar nunca esta opcin en caso de que la tabla de destino tenga definido el contenido del campo cdigo como Siguiente al ltimo, pues, al no indexarse los registros al ejecutar el tubo, todos los registros importados quedarn con el mismo cdigo. ADVERTENCIA 410 411 VELAZQUEZ VISUAL listas desplegables Maestro, Formulario y Formulario visualizacin final sali- da tubo. En la primera se elige la tabla maestra donde queremos realizar el alta. En la segunda se elige el formulario para el alta. En la tercera se indi- ca el formulario donde se puede ver el resultado final del tubo. Pedir?: la casilla de verificacin Pedir? se utiliza para declarar el formula- rio mediante el cual se puede introducir un valor fijo en uno o en varios cam- pos de todas las fichas de destino. Para crear un capilar pulsaremos el botn Aadir, apareciendo el cua- dro de dilogo donde elegiremos el campo destino y estableceremos la fr- mula o la cadena de formato (si se trata de un campo alfabtico) que apli- caremos al origen. La casilla de verificacin Introducido manualmente se utiliza en combinacin con la casilla de verificacin Pedir? del cuadro de dilogo de propiedades. Al sea- lar la casilla de verificacin Introducido manualmente se desactiva el control Fr- mula origen porque Velzquez Visual entiende que el valor de este campo lo tie- ne que tomar del formulario declarado junto a la casilla de verificacin Pedir? A la hora de crear los capilares de un tubo de lista debemos tener en cuen- ta el orden de los mismos para un correcto traspaso de los datos. Si el botn Auto est activo es porque entre las tablas de origen y de destino hay campos coincidentes. Activndolo, el programa crear auto- mticamente los capilares entre dichos campos, alimentando el campo destino con el contenido del campo origen. Si el flujo es de Importacin o de Exportacin, la opcin de dar de alta un registro en una tabla maestra de la tabla de destino o la opcin de pedir da- PROPIEDADES DE UN CAPILAR DE TUBO DE LISTA Aadir Auto tos mediante un formulario para introducirlos en los registros dados de alta en la tabla de destino no estn disponibles. Ejemplo: Definicin de una Base de datos externa ODBC-DAO para la im- portacin y exportacin de registros de otras bases de datos A travs de una Base de datos externa ODBC-DAO podemos importar y ex- portar registros de otras bases de datos o de ficheros ASCII (aunque, ge- neralmente, para trabajar con archivos ASCII trabajaremos con funciones especficas para ellos). Para ello procedemos en primer lugar a vincular en Access la base de datos con la que queremos intercambiar datos. Una vez la tenemos vinculada, creamos las consultas necesarias, ya que Velzquez Visual las necesita para la importacin, aunque para la escritura lo har di- rectamente sobre las tablas de la base de datos externa. Creamos un objeto Base de datos externa ODBC-DAO en nuestro proyecto, y con un Tubo de Lista importamos o exportamos los datos que necesitemos. Toda importacin de datos hemos de realizarla sobre una tabla en nuestro proyecto igual que la tabla externa de la que provienen los datos. Para crear- la seleccionamos la tabla en el objeto Base de datos externa ODBC-DAO y usamos la opcin de men Objetos/Crear tabla igual a externa, lo que har que tengamos una nueva tabla en nuestro proyecto con las mismas caracte- rsticas, los mismos campos, etc., aunque deberemos revisar los tipos de campos y longitudes para una correcta equivalencia. Despus de importar los datos en la tabla del proyecto, procederemos con un Tubo de lista inter- no a dar de alta o a modificar los registros necesarios en otras tablas. En este ejemplo haremos la importacin y exportacin de datos desde una hoja de clculo Excel, a travs de una base de datos Access. Para ello comenzamos vinculando a una base de datos Access el fichero Excel. Pulsamos la opcin de men Insertar/Tabla, y escogemos de entre las opciones que se nos presentan: vincular. 08 Desarrollo completo de una aplicacin e 412 413 VELAZQUEZ VISUAL Escogemos el fichero que queremos vincular y pulsamos el botn Vincular. Como en este caso estamos vinculando una hoja de clculo Excel, nos pe- dir elegir la hoja del libro que queremos importar. e A continuacin nos pregunta si la primera fila contiene la cabecera de las columnas, que, en nuestro caso, as es. Por ltimo, nos pregunta el nombre que tendr la tabla vinculada y pulsa- mos Finalizar tras cumplimentarlo. 08 Desarrollo completo de una aplicacin e 414 415 VELAZQUEZ VISUAL Si vamos a importar datos desde la tabla vinculada hemos de crear las con- sultas necesarias que lean los campos que vamos a leer. Tambin, debe- mos recordar que para que Velzquez Visual pueda importar la base de da- tos externa, sta ha de ser Access97, as que si no es as, debemos con- vertir la base de datos con la opcin Herramientas/Utilidades de la base de datos/Convertir base de datos/A una versin anterior de la base de datos de Access. Una vez realizado este proceso pasamos a nuestro proyecto y creamos un objeto Base de datos externa ODBC-DAO. Pulsando el botn Nuevo objeto, elegimos el pertinente: Base de datos externa ODBC-DAO y abrimos la base de datos MDB con la que he- mos enlazado la hoja Excel. A continuacin Velzquez Visual nos muestra la tabla proveniente de la ho- ja vinculada y las consultas creadas en la base de datos. e Nuevo objeto Base de datos externa ODBC- DAO Aceptamos, y damos un identificador adecuado al objeto Base de datos ex- terna. Ahora el siguiente paso es crear una tabla en nuestro proyecto igual a la de la base de datos. Para ello, seleccionamos la tabla de datos, en este caso Registros, y bien pulsando con el botn de la derecha del ratn, o bien seleccionando la op- cin de men Objetos/Crear tabla igual externa, Velzquez Visual nos crea esta tabla. Nos preguntar cules queremos que sean los Nombres plural y singular. Si la tabla es de tipo maestro activamos la opcin Maestro. En ese caso, nos preguntar tambin cul es el campo cdigo, si tiene un campo nombre (ac- tivando la opcin Tiene nombre) y si queremos crear los ndices alfabtico y palabras para el campo nombre. 08 Desarrollo completo de una aplicacin BASE DE DATOS EXTERNA e 416 417 VELAZQUEZ VISUAL En nuestro ejemplo el nombre plural es Registros, el singular Registro es de tipo maestro y tiene como campo cdigo CODIGO y como campo nombre NOMBRE. Adems, crearemos los ndices que nos propone. Revisaremos los tipos de campos y las longitudes y ya tenemos entonces la tabla con la que trabajaremos a partir de ahora, y a la que traeremos los datos. Ahora, crearemos un Tubo de lista con el que realizar la importacin de datos. Para ello pulsamos el botn Nuevo objeto y escogemos Tubo de lista. Este tubo de lista tendr como Flujo Importacin. Adems, como tenemos campo cdigo, en Estilos hemos desmarcado las opciones de Usar conte- nido inicial campos destino, y Usar cdigo automtico en destino. Hay que tener cuidado con estas dos opciones. Nosotros no las usamos porque los datos ya vienen con un cdigo, pero debemos entonces ser nosotros en- tonces los que nos aseguremos de que no se repite ninguno. Si algn c- digo est repetido Velzquez Visual no lo podr determinar. e Nuevo objeto Tubo de lista Como origen escogemos la consulta de la base de datos externa que he- mos implementado en nuestro proyecto, y como destino la tabla que hemos creado igual que la tabla externa. Pulsando el botn Automticos, Ve- lzquez Visual se encarga de crear los capilares automticamente (ya que los nombres de los campos son iguales). Con esto ya tenemos hecho el tubo de importacin, que tendremos que lan- zar desde una opcin de men en un Men tipo formulario. 08 Desarrollo completo de una aplicacin PROPIEDADES DEL TUBO DE LISTA e Automticos 418 419 VELAZQUEZ VISUAL Los datos que importemos sern los que provengan de la hoja Excel o cual- quier otra base de datos que hayamos vinculado con Access. Para exportar usaremos otro tubo de lista, en este caso con Flujo Exporta- cin y que tendr por origen la tabla que queramos y como destino la tabla Registros vinculada a Access. Este tubo de lista tendremos que lanzarlo desde un proceso de lista con ori- gen en la tabla que comparte origen con el mismo. Esta tabla con sus nuevos datos podr ser usada directamente dentro de nuestro proyecto, o bien puede ser necesario mover los datos de nuevo pa- ra que concuerden con la estructura que tiene nuestro proyecto. Esto pue- de ser porque guardemos la fecha en un formato distinto, tengamos que convertir S o N en boleanos, la base de datos de origen no tenga tablas estticas como las nuestras, haya que generar nuevos maestros en funcin de los datos de origen, etc. Para ello, o bien usamos un tubo de lista de Flu- jo Interno, o bien un proceso en el que hagamos altas directas a partir de los datos que leamos en la tabla a la que hemos importado los datos, etc. Esto podemos realizarlo en el evento de tabla Proceso posterior al alta o en un proceso que se lance tras la importacin. Nota: si tenemos un proceso de importacin en el que es necesario que los datos sean analizados y modificados para que concuerden con la estructu- ra que tiene nuestro proyecto, y el volumen de informacin es muy grande, podemos crear un mapa especial que llamaremos de importacin. En este mapa aadiremos a la tabla que ser destino de la informacin unos cam- e pos que luego desecharemos, a los que ir la informacin, y en el evento de tabla: Proceso anterior al alta haremos los clculos, altas o modificaciones necesarias. Adems, a este mapa le podremos quitar todos aquellos ndices que no sean necesarios, aumentando la velocidad en la incorporacin de los datos. De esta manera, la importacin y el proceso para hacer concordar la estructura se realiza en un nico paso mucho ms rpido. Una vez realizada la importacin, volveremos al mapa anterior que tenamos, con lo que se vol- ver a hacer la indexacin y la reestructuracin de tablas, desapareciendo aquellos campos y datos intermedios, que ya no son necesarios. Debemos tener en cuenta que esto nos sirve nicamente para importacio- nes puntuales. Si la importacin ha de ser a menudo, debemos introducir sta en la estructura del mapa. 8.5.25. Librera de Funciones DLL Con las Libreras de Funciones DLL podemos aadir nuevas funciones a nuestra aplicacin con facilidad. Seleccionamos este objeto en la Galera de Objetos, con lo que se nos presentar el cuadro de dilogo correspondien- te. En l, debemos cumplimentar los siguientes parmetros: Nombre del archivo: nombre identificativo del archivo dll que vamos a utilizar. Descripcin: descripcin de las funciones que engloba dicha dll. Estilos: Borland: activamos este estilo si la dll que va a ser utilizada es de Borland. 08 Desarrollo completo de una aplicacin Librera de Funciones DLL 420 421 VELAZQUEZ VISUAL Privada: si se activa este estilo, la dll no estar disponible para el usuario fi- nal en el Asistente para la edicin de frmulas al crear frmulas dinmicas. Una vez especificados todos los parmetros, pasamos a crear las distintas funciones de dicha dll que van a ser utilizadas. Toda dll tiene un archivo h, donde se definen las funciones. Para ello pulsamos el botn Aadir, abrindose la ventana de ingreso de funciones. En sta, debemos cumpli- mentar los siguientes parmetros: Retorno: especificacin del tipo de dato de retorno de la funcin. Convencin: podemos optar entre dos valores posibles: _stdcall:, para Pas- cal y _cdcl: para C. Nombre de funcin: especificaremos en este parmetro el nombre de la funcin. Privada: si la dll definida es pblica, es posible definir una funcin de la mis- ma como privada. Si no queremos que un usuario final tenga acceso a la funcin al definir una frmula dinmica, activaremos esta casilla. Tipo parmetro: tipo de parmetro que debe ser pasado a la funcin. Para especificarlo abriremos el combo box y lo seleccionaremos en la lista que se presenta. Si el tipo de parmetro que tiene no coincide con los de la lis- ta deber buscar en la lista uno compatible. VENTANA DE PROPIEDADES DE UNA FUNCIN DLL Aadir Nombre del parmetro (opcional): especificaremos aqu el nombre que ser presentado en el Asistente para la edicin de frmulas para indicar cul es el parmetro. Observaciones: el texto que escribamos en este parmetro ser presenta- do junto con la funcin en el Asistente para la edicin de frmulas. Ejemplo: Librera de funciones runtime de Visual C++ Para ver cmo funciona usaremos la librera msvcrt.dll, runtime de Visual C++ utilizado por Velzquez Visual. Dentro del archivo h de la librera de C msvcrt.dll, entre otras, encontramos la funcin que calcula el seno de un nmero; en el fichero h viene especificada de la forma siguiente: _CRTIMP double __cdecl sin( double ) ; En base a esto vamos a generar en el proyecto de Velzquez Visual esta funcin. Seleccionamos de la Galera de Objetos un nuevo objeto Librera de Fun- ciones DLL, cumplimentando las propiedades del objeto: Ahora vamos a ir aadiendo las funciones. Para ello pulsamos el botn Aadir de la barra de botones de esta ventana. Se presentar el cuadro de dilogo de las funciones, en el que debemos completar los siguientes pa- rmetros: 08 Desarrollo completo de una aplicacin e Aadir 422 423 VELAZQUEZ VISUAL Retorno: ste ser double. Para especificarlo debemos abrir el combo box y seleccionarlo en la lista que se presenta. Convencin: en este ejemplo la dll es de C++, as que la convencin ser _cdecl: Nombre de funcin: ser sin. Privada: si no queremos que el usuario final tenga acceso a la funcin al de- finir una frmula dinmica, activaremos esta casilla. Tipo parmetro: double. Nombre del parmetro (opcional): para este ejemplo le daremos el nombre dAngulo. Observaciones: en este caso, puesto que el resultado es en radianes, es- cribiremos: Angulo en radianes. Ya tenemos definida una funcin de una dll externa que podr ser atacada desde el proyecto de Velzquez. Ejemplo Imaginemos que en una tabla queremos que, en funcin de un valor que el usuario escriba en un campo llamado DATO, otro campo devuelva su seno. e e Crearemos en la tabla el campo SENO, de tipo Frmula numrica. Para espe- cificar la frmula abriremos el asistente para la edicin de frmulas y pulsa- mos el botn Funciones de DLL. Se presentar el Asistente de funciones DLL con todas las Funciones DLL que hayan sido creadas en el proyecto. En este caso seleccionaremos la funcin Sin. Una vez seleccionada aparecer la frmula siguiente: MSVCRT.Sin( dAngulo ) Solamente nos queda sustituir el texto dAngulo por el campo que queremos pasar como parmetro, en este caso DATO; con lo que la frmula quedara: MSVCRT.Sin( %DATO% ) Resumen Velzquez Visual cuenta con una serie de objetos que permiten aumentar la funcionalidad de una aplicacin por medio de instrucciones de proceso: son los procesos, los demonios, las funciones, los tubos de lista y de ficha y las libreras de funciones DLL. Los procesos son objetos definidos por el diseador del proyecto, en- cargados de realizar operaciones especiales que Velzquez Visual no hace de forma automtica. Para cada proceso debe especificarse un origen, que puede ser una ficha o una lista de registros provenientes de una tabla de datos del proyecto, o ninguno. 08 Desarrollo completo de una aplicacin e Funciones de DLL Procesos 424 425 VELAZQUEZ VISUAL A continuacin, aadimos de forma visual las lneas de instrucciones. Cada lnea de proceso ejecuta una funcin de proceso de la capa alta de funciones de Velzquez Visual dependiendo de los parmetros que pasemos. Los procesos pueden ser en primer plano, si son ejecutados en la parte cliente. Su ejecucin paraliza al usuario. En Segundo plano (multitarea), eje- cutados en la parte cliente. Su ejecucin no paraliza al usuario. En Tercer plano si son ejecutados en la parte servidora. Los demonios son procesos nicamente vlidos para la versin cliente- servidor. stos se ejecutan de forma continua cada x milisegundos, mien- tras la aplicacin est siendo ejecutada en el servidor de aplicaciones. Las funciones son procesos ejecutables slo en primer plano (en sus propiedades no se permite activar Multitarea) y a los que podemos pasar parmetros. El origen de estos procesos siempre es Ninguno. Las funciones de proceso pueden ser funciones propias de lista, funciones propias de ficha o funciones comunes de ficha y de lista. Dependiendo del origen que tenga el proceso podremos usarlas o no. Tambin hay funciones especficas para Procesos, Demonios o Funciones. Velzquez Visual agrupa las funciones de procesos segn su tipo: bsicas, de arrays, retornos, internet, listas, ficheros y directorios, varios, etc. Los tubos son procesos especializados en transferir informacin de un ori- gen a un destino. Estn compuestos por capilares, que calculan los cam- pos de destino en base a la informacin de origen. Los Tubos de Ficha crean un nico registro en la tabla de datos de destino, mientras que los Tu- bos de Lista generan listas de registros en una tabla de datos en fun- cin de los registros de otra. Los tubos siempre dan de alta registros, nun- ca modifican fichas. Gracias a las Libreras de Funciones DLL podemos aadir nuevas fun- ciones a nuestra aplicacin. 8.5.26. Directorio de Tablas Al ejecutar un proyecto por primera vez, las tablas de datos son creadas en el directorio de la aplicacin. Ahora bien, podemos redirigir a un directorio distinto al de nuestra aplicacin las tablas declaradas en nuestro proyecto con sus datos, para lo cual hemos de usar el objeto Directorio de Tablas. Con este objeto tambin tenemos la posibilidad de que una o varias tablas de datos sean compartidas entre distintas aplicaciones. En ningn momento en el Editor deber especificarse la senda real del di- rectorio, sino que se crear un directorio lgico que ser resuelto de forma externa al Editor. Tiene un funcionamiento parecido al de la Impresora L- gica; ms adelante explicaremos cmo se hace. Demonios Funciones Tubos de Ficha Tubos de Lista Libreras de Funciones DLL Directorio de Tablas Al seleccionar un objeto de este tipo en la Galera de Objetos se presenta un cuadro de dilogo en el que deberemos especificar: Nombre: descripcin del directorio. No se trata de que indiquemos la ubi- cacin fsica del mismo, sino de darle un nombre comprensible para que al seleccionarlo sepamos a qu directorio nos referimos. La ubicacin fsica la haremos posteriormente. A continuacin, aadimos la tabla o tablas que van a estar ubicadas en el mismo. Para aadir una tabla pulsamos el botn Aadir de la barra de herramientas de este cuadro de propiedades. Se presentar una lista con las tablas del mapa que no tengan asignado ningn directorio y cuya per- sistencia sea en disco. Seleccionamos aquellas que queramos incluir y si queremos aadir ms tablas posteriormente podemos repetir esta misma operacin tantas veces como sea necesario. 08 Desarrollo completo de una aplicacin VENTANA DE PROPIEDADES DEL DIRECTORIO DE TABLAS Aadir 426 427 VELAZQUEZ VISUAL Para borrar una tabla de la lista de tablas de un directorio la seleccionamos y pulsamos el botn Suprimir. Esta accin no borrar la tabla del mapa, sino que la quitar de la lista de tablas de ese directorio, por lo que ser creada en el directorio de la aplicacin. Una vez creado, el directorio aparecer en el panel izquierdo del Editor. Po- demos cambiar su identificador pulsando el botn F2 y escribiendo el iden- tificador que mejor nos parezca. Otra forma de asignar una tabla a un directorio es a travs de las propieda- des de la propia tabla, donde podemos seleccionar un objeto Directorio de tablas que hayamos creado antes en el mapa, o el directorio por defecto de la aplicacin llamado .el de la aplicacin (que es el que el sistema asigna por defecto a las tablas que son creadas en el mapa). Suprimir Una vez que en las propiedades de la tabla cambiamos el Directorio, sta se quita del objeto Directorio de Tablas al que estaba asignada y se aade al que seleccionemos. Si ste es .el de la aplicacin no se aade a ningn objeto Directorio de tablas, ya que sta es la opcin por defecto para toda nueva tabla y no necesita un Directorio de Tablas. En lo que al Editor de proyectos se refiere, ya est hecha la redireccin. Ahora veremos cmo se hace efectiva en ejecucin. La asociacin de cada objeto Directorio de tablas creado en una aplicacin a un directorio fsico se llevar a cabo creando un fichero ASCII con el mismo identificador que el mapa y con extensin VRT (Velzquez Redireccionador de Tablas). Dicho fichero tenemos que guardarlo en el mismo directorio que el mapa. En cada lnea del archivo escribiremos a qu directorio del disco co- rresponden los directorios lgicos del Directorio de Tablas. Podremos aadir tantas lneas al archivo como Directorios de Tablas tengamos que definir. El nombre del fichero tiene que ser del tipo IDENTIFICADOR.VRT, donde IDENTIFICADOR es el identificador del mapa y .VRT la extensin corres- pondiente a archivos redireccionadores. Las lneas del fichero tendrn la estructura IDENTIFICADOR-DIRECTO- RIO=SENDA, donde IDENTIFICADOR-DIRECTORIO es el identificador del objeto Directorio de Tablas, y SENDA el directorio que queremos asignar a ste en el disco, y en el que se guardar la tabla. Si realizamos una modificacin del archivo VRT despus de haber ejecuta- do la aplicacin, es decir, las tablas han sido ya creadas, debemos ser no- 08 Desarrollo completo de una aplicacin 428 429 VELAZQUEZ VISUAL sotros los que creemos los nuevos directorios a usar y movamos los fiche- ros de tablas (datos, ndices y contenedores) a las nuevas carpetas que he- mos definido en el archivo VRT. En caso de no hacerlo, se crearan de nue- vo las tablas, con la distorsin de la base de datos que ello podra crear: la nueva tabla no tendra registros y las tablas que apuntaban a sta sus re- gistros apuntarn a registros inexistentes. Ejemplo: Redireccionamiento de tablas Tenemos un mapa de gestin (gestion.map) y un mapa de contabilidad (conta.map). El mapa de gestin est enlazado con el de contabilidad, es decir, la gestin comparte tablas con el mapa de contabilidad, estando am- bos mapas en dos directorios diferentes. En el mapa de gestin se ha creado un directorio de tablas, al que hemos asignado las tablas compartidas con el mapa de contabilidad y ha sido lla- mado CONTA. Los mapas estn ubicados en los directorios siguientes: Gestin: c:\atica\gestion\gestion.map Contabilidad: c:\atica\contabilidad\conta.map Tendremos que crear en c:\atica\gestion un fichero ASCII con el nombre gestion.vrt con el contenido siguiente: CONTA=c:\atica\contabilidad Donde CONTA es el identificador del objeto Directorio de Tablas y c:\ati- ca\contabilidad\ el directorio fsico donde ir la tabla. Al ejecutar la contabilidad, el programa buscar las tablas en el directorio del mapa; al ejecutar la gestin ir a buscar las tablas compartidas con la contabilidad al directorio c:\atica\contabilidad. Ejemplo: aplicacin con varios Directorios de tablas Si en un mapa hemos creado varios Directorios de tablas diferentes, stos debern ser creados en un nico fichero .VRT. e e GESTION=c:\empresa\gestion CONTABILIDAD=c:\empresa\contabilidad COMUN=c:\empresa Si queremos modificar la redireccin de tablas de una aplicacin que ya es- t en funcionamiento debemos hacerlo cuando no haya usuarios ejecutn- dola, pues no entrar en vigor hasta que se ejecute el mapa de nuevo (VRunner) o sea reiniciado (servidor de aplicaciones). Cuando hagamos es- to debemos mover al directorio especificado la tabla o tablas (archivos .DAT), ndices (archivos .IDX), contenedor (archivos .CND) e ndices del con- tenedor (archivos .CNI) correspondientes, ya que si no, generar unos nue- vos que estarn vacos, con la consiguiente distorsin de la base de datos. Resumen El objeto Directorios de Tablas permite redirigir una o varias tablas de- claradas en el proyecto a un directorio diferente al de la aplicacin y que va- rias aplicaciones puedan compartir ciertas tablas. 08 Desarrollo completo de una aplicacin El fichero donde guardamos la resolucin de los directorios de tablas debemos crearlo antes de ejecutar la aplicacin. No podemos generarlo desde la misma aplicacin, pues al ejecutarla (VRunner) o abrirla (en el servidor) es cuando se inicializan las tablas, y si no existen los directorios, las crear todas en el mismo directorio del mapa. Podramos crear un mapa especfico para automatizar el proceso de creacin de dicho archivo. Trabajando con VRunner la comparticin de tablas funciona si en un mismo ejecutor abrimos varias aplicaciones que compartan tablas. Ahora bien, como VRunner es monopuesto las tablas no podrn ser compartidas si tratamos de abrir cada aplicacin con un ejecutor distinto. ADVERTENCIA e Directorios de Tablas 09 Ejecutar una aplicacin 9.1 Cmo ejecutar un proyecto Hay dos formas de ejecutar un proyecto: Desde el editor de proyectos: todo proyecto puede ser ejecutado desde el editor de proyectos EdMap32. Para ello disponemos de una opcin en el men Archivo / Ejecutar. Tambin podemos ejecutarlo mediante el botn (o F5) situado en la barra de herramientas. Desde la lnea de comandos: para una ejecucin directa de la aplicacin, es recomendable crear un acceso directo en el escritorio de Windows e intro- ducir en la Lnea de comandos el nombre del ejecutor (VRunner.exe) y, co- mo primer parmetro, el nombre del archivo que contiene el proyecto que queremos ejecutar. Veremos ahora cmo funciona el ejecutor y cmo usar los distintos objetos visuales que hemos diseado en el editor de proyectos. Tambin veremos las opciones que nos dan las rejillas, formularios, botones, etc., que hemos diseado. En el Servidor de Velzquez Visual hemos de abrir la aplicacin o reiniciar- la en el caso de haber hecho alguna modificacin desde que la abrimos. 9.2 Inicio de una aplicacin, clave y nombre de usuario Antes de iniciar una aplicacin Velzquez Visual pide un nombre de usuario y una clave, si as est especificado en el proyecto. Para especificarlo, en las Propiedades del proyecto tiene que estar marcada la opcin de Usuarios: Pedir usuario en la pestaa de Estilos. 09 Ejecutar una aplicacin Propiedades del proyecto 434 435 VELAZQUEZ VISUAL Cuando el proyecto es ejecutado por primera vez, el primer usuario regis- trado es dado de alta por el sistema como Supervisor, dndole todos los privilegios. En la ventana que nos aparece debemos rellenar un Nombre del Usuario. De momento no hemos de escribir la Palabra clave. Recordemos que, para cambiar la imagen que aparece como icono, hemos de crear un objeto Dibujo que convertiremos en Icono de usuarios en el Editor de Proyectos con la opcin de men Comunes/Convertir en/Icono usuarios. Tambin podemos renombrar un dibujo y ponerle como identificador ON- PASSWORD. PESTAA ESTILOS DE LA VENTANA DE PROPIEDADES DEL PROYECTO VENTANA DE USUARIO Y CLAVE AL INICIAR UNA APLICACIN 9.3 El men del usuario y sus opciones Despus de ser registrados los datos del usuario e inicializadas las tablas de datos, se presenta el men que hubiramos asignado al usuario como men inicial. Si no tiene ninguno asignado, Velzquez Visual le presentar el men AUTOEXEC. En el caso de que no existiese tampoco un men AU- TOEXEC, el programa compondr automticamente un men con tres car- petas: Tablas: rejilla de tabla de datos completa de cada tabla. Bsquedas: bsquedas definidas en el mapa para cada tabla. Mens: definidos en el mapa. En el caso de un men arbolado, para abrir una subcarpeta de men debe- mos pulsar el botn situado a la izquierda de la carpeta, y para selec- cionar una opcin del men haremos doble clic sobre la misma. Para cerrar una carpeta haremos clic sobre el botn situado a su izquierda. En el caso de que el men sea un men tipo formulario, basta con hacer clic sobre una de las opciones del mismo. 09 Ejecutar una aplicacin Abrir rama Cerrar rama 436 437 VELAZQUEZ VISUAL Si incluimos en un men de tipo formulario una o varias rejillas, podremos imprimir el informe asociado a la rejilla activa (si es que lo tiene) pulsando sobre el botn correspondiente de la barra de herramientas. En el caso de que lo tengamos activo en el men, cada una de las opcio- nes a las que nos permita acceder la aplicacin se abrir en un separador del ejecutor, que puede ser el mismo en el que estamos (por ejemplo, en los casos de mens con dos balas) o un separador nuevo. Muchas de las fun- ciones que incorpora el ejecutor de Velzquez Visual por defecto nos abri- rn nuevos separadores con los resultados de aplicarlas. 9.4 Qu opciones nos dan la Rejilla, el Formulario y los Visores de Tablas Arboladas La rejilla nos permite visualizar una lista de registros de una tabla de datos. En ella podemos modificar los tamaos de las columnas o de las cabece- PESTAAS DE LOS SEPARADORES DEL EJECUTOR ras, as como reordenar la lista de registros haciendo clic sobre la cabece- ra de una columna. Para que esto sea as debe estar activado en las pro- piedades de la rejilla. El formulario nos permite dar de alta, modificar o dar de baja un registro de una tabla de datos. En un formulario pueden apare- cer listas (rejillas de histricos), botones, cuadros de edicin, etc. 9.4.1. Formas de llamar a una rejilla Una rejilla puede ser llamada desde los siguientes puntos: Una opcin de men: normalmente ser llamada por una bsqueda, cuyo resultado (es decir, los registros encontrados) se visualizar en una rejilla. Desde un formulario: en los formularios se permite pegar una o ms rejillas. En ellas se presentan registros histricos de la ficha en curso, subhistricos o datos de cualquier otra tabla, segn el control que usemos. A su vez, es- tas rejillas podrn disparar ms formularios de altas, modificaciones y ba- jas, y as sucesivamente si los formularios llamados incluyen en su interior nuevas rejillas. Desde un proceso: tambin pueden aparecer rejillas como resultado de un proceso, por ejemplo, cuando usamos la funcin de proceso Aadir retor- no en una lnea cuyo origen sea una lista. Men tipo formulario, informe, localizador, etc. 9.4.2. Formas de llamar a un formulario Un formulario puede llamarse desde los siguientes puntos: Una opcin de men: los mens pueden llamar a un formulario de altas, es decir, un formulario que recoge los datos para dar de alta un nuevo registro. Una rejilla: una rejilla puede disparar tres tipos de formularios: de altas, de modificaciones y de bajas. 09 Ejecutar una aplicacin 438 439 VELAZQUEZ VISUAL Para llamar al formulario de altas hemos de asegurarnos de que la rejilla ten- ga el foco (en caso contrario pulsaremos con el ratn sobre la rejilla), a con- tinuacin pulsamos el botn derecho del ratn y del men de contexto se- leccionamos la opcin Formulario Alta. Esto es comn tanto para rejillas editables como para rejillas no editables. Desde una rejilla no editable tambin podemos llamarlo pulsando la tecla + del teclado numrico. Tambin podemos llamar a un formulario de alta ha- ciendo doble clic sobre una lnea vaca de la rejilla. Desde una rejilla editable podemos llamarlo pulsando las teclas Ctrl+N. Para llamar a un formulario de modificaciones (editar una ficha), pulsaremos el botn derecho del ratn y, del men de contexto seleccionamos la op- cin Formulario Modificacin. Desde una rejilla no editable bastar con hacer doble clic con el puntero del ratn sobre el registro a editar o pulsar la barra espaciadora. Desde una rejilla editable podremos llamarlo mediante la combinacin de las teclas Ctrl+E. Para llamar a un formulario de bajas, es decir, para eliminar un registro, se- leccionaremos el elemento deseado y pulsaremos la tecla Supr. Estas opciones aparecen en un men de contexto que se activa pulsando el botn derecho del ratn sobre el rea de la rejilla. Tambin podemos uti- lizar el men Ficha que aparece en la barra de mens cuando una rejilla es- t activa. Un proceso: con aadir retorno desde una lnea con origen ficha, con for- mulario de alta de maestro, pedir formulario, etc. Un botn: los botones pueden abrir subformularios de la ficha actual. Por ejemplo, en la presentacin de subfichas para ampliar informacin de la fi- cha en curso. Cuando demos de alta una ficha de una rejilla de histrico utilizada como segunda bala de un men, Velzquez Visual nos inducir automticamente el maestro de la ficha seleccionada en la primera bala. 9.4.3. Eliminacin temporal de un elemento 9.4.3. en una rejilla Podemos eliminar temporalmente un elemento de una rejilla sin que real- mente sea borrado de la tabla de datos. Para ello disponemos de una op- cin en el men de contexto que se activa pulsando el botn derecho del ratn, cuando el puntero se encuentra situado sobre la rejilla. La opcin del men se denomina Quitar de la lista el seleccionado. Si quitamos una ficha de una lista podremos deshacer la operacin ejecu- tando la opcin Deshacer, y si queremos rehacer dicha operacin, ejecuta- remos la opcin Rehacer del men de contexto que se presenta al pulsar el botn derecho del ratn sobre la rejilla. 9.4.4. Invertir el orden de una lista dentro 9.4.4. de una rejilla Podemos hacer que se invierta el orden en que estn colocados los regis- tros visualizados en una rejilla. Para ello disponemos de una opcin en el men de contexto que se activa pulsando el botn derecho del ratn cuan- do el puntero se encuentra situado sobre la rejilla. La opcin del men se denomina Invertir el orden de la lista. Si ejecutamos este comando sobre una lista podremos deshacerlo ejecutando la opcin Deshacer del men de contexto. Si queremos rehacer el comando ejecutaremos la opcin Rehacer del men de contexto. 09 Ejecutar una aplicacin 440 441 VELAZQUEZ VISUAL 9.4.5. Seleccin mltiple de registros en una rejilla 9.4.5. (Multiseleccin) Podemos realizar una seleccin de varios registros de una rejilla. Para ello, la rejilla debe tener activada en el editor la opcin Multiseleccin. En la reji- lla slo tenemos que hacer clic con el botn izquierdo del ratn sobre el bo- tn que aparece en la parte izquierda de sta a la altura de cada fila. Tam- bin podremos seleccionar un registro mediante la combinacin de las te- clas: Alt+Intro o Alt+Barra espaciadora. Los registros seleccionados se vern marcados de diferente forma depen- diendo del estilo que hayamos escogido al configurar la rejilla en el editor. Podemos ver un botn, una marca de verificacin o un dibujo que hayamos definido nosotros. Con los registros seleccionados podremos lanzar procesos que hayamos creado. Por ejemplo, de una lista de albaranes podemos facturar slo los seleccionados. Para marcar o desmarcar un bloque de registros usaremos la tecla Shift y clic con el botn izquierdo del ratn en la primera lnea del bloque. Repeti- remos la operacin en la ltima lnea del bloque. Si el bloque est marcado, esta operacin lo desmarca. Para marcar o desmarcar todos los registros pulsaremos con el botn iz- quierdo del ratn en la cabecera de la columna de multiseleccin. Para invertir la multiseleccin en una rejilla (los seleccionados pasan a ser los que no lo estaban) tenemos dos maneras: Pulsaremos la tecla Ctrl y haremos clic con el botn izquierdo del ratn en la cabecera de la columna de multiseleccin. Haremos clic con el botn derecho del ratn sobre la cabecera de la co- lumna de multiseleccin para abrir el men contextual y seleccionar en l la opcin Invertir. Para activar o desactivar la seleccin de un registro podemos hacerlo a travs del teclado con las combinaciones de teclas Alt+ Intro o Alt+Es- pacio. 09 Ejecutar una aplicacin 442 443 VELAZQUEZ VISUAL 9.4.6. Edicin directa de rejillas Se trata de rejillas en las que podemos escribir directamente sobre las cel- das tanto para dar de alta como para modificar registros. Esto ahorrar mu- cho tiempo al usuario final a la hora de introducir datos. Para dar de alta un nuevo registro pulsamos la tecla + del teclado numri- co y para modificar una lnea pulsaremos la barra espaciadora estando se- leccionado el registro a editar; en ambos casos la celda correspondiente a la primera columna editable se marcar con el cursor parpadeante. Para aceptar un alta o una modificacin basta con pulsar la tecla Intro. Si queremos cancelar un alta o una modificacin, pulsamos la tecla Escape. Para borrar un registro, pulsamos la tecla Supr. Para insertar en un campo el mismo contenido que el del registro anterior utilizaremos la combinacin de las teclas Ctrl y + (del teclado numrico). Para pasar a la celda siguiente basta con que pulsemos el tabulador. Al pul- sar ste sobre la ltima celda editable de una fila, si estamos dando un al- ta, se grabar el registro y saltar automticamente a la lnea siguiente pa- ra que podamos seguir dando altas; en una modificacin, aceptar las mo- dificaciones realizadas sobre el registro. Para pasar a la celda anterior pulsaremos las teclas Shift+Tabulador. Para movernos entre filas utilizaremos las teclas de movimiento del cursor arriba y abajo. Sobre una lnea que estemos editando, si pulsamos cursor arriba o abajo se aceptarn los cambios de la lnea y pasaremos a editar la lnea anterior o siguiente, respectivamente. En aquellas columnas que contienen campos enlazados a maestros, al igual que en los formularios, no podremos escribir directamente su contenido, si- no que tendremos que cogerlo de la tabla enlazada. Si queremos lanzar un localizador para localizar un registro maestro debemos definirlo en las propiedades de la columna que aparecen cuando hemos se- leccionado la edicin directa de rejillas. Para usarlo en ejecucin, pulsamos las teclas Ctrl+L, y mediante las teclas Alt+Cursor arriba/Abajo recorreremos la lista maestra en orden ascendente/descendente, alfabticamente (si es un campo Alfabtico) o en orden numrico (si es Numrico) con cada pulsacin. Si queremos dar un alta de un registro maestro desde un campo enlazado pulsaremos las teclas Ctrl+N, mientras que para editar la ficha maestra pul- saremos las teclas Ctrl+E. Estos formularios tenemos tambin que haberlos definido en las propiedades de la columna. 9.4.7. Exportacin Ascii Sobre cualquier rejilla resultado de una bsqueda es posible ejecutar una exportacin de los registros de la misma a un fichero Ascii si tenemos un ni- vel de privilegio como usuario mayor o igual que 90. Para ello debemos eje- cutar la opcin del men Lista/Exportar Ascii. Se abre entonces un cuadro de dilogo con el que podremos configurar la exportacin de los datos que estn en la rejilla en ese momento. Los botones de la barra de herramientas de esta ventana ejecutan las si- guientes operaciones: Seleccionar un campo: se abrir una ventana con la lista de campos; se- leccionaremos el que queramos incluir en la exportacin. Frmula: se abrir el Asistente para la edicin de frmulas con el que po- dremos exportar una operacin entre varios campos. Eliminar columna: elimina la columna seleccionada en la lista. Subir uno: mover una posicin hacia arriba el elemento seleccionado en la lista. Bajar uno: mover una posicin hacia abajo el elemento seleccionado en la lista. Modificar: nos permite cambiar el campo seleccionado en la lista. 09 Ejecutar una aplicacin Seleccionar un campo Frmula Eliminar columna Subir uno Bajar uno Modificar 444 445 VELAZQUEZ VISUAL Abrir configuracin: si ya hemos definido alguna exportacin, sta puede ser almacenada en disco; ejecutaremos esta opcin cuando queramos abrirla. Guardar configuracin: nos permite guardar en disco el fichero de ex- portacin creado para poder utilizarlo con posterioridad. Las opciones de exportacin disponibles son: Formato de archivo: ASCII delimitado o de ancho fijo. Delimitador de campo: si lo que vamos a generar es un fichero ASCII delimita- do, seleccionaremos qu carcter ser utilizado como delimitador de campos. Cualificador de texto: en caso de crear un fichero ASCII delimitado, selec- cionaremos el carcter que se utilizar para entrecomillar los textos. Aadir primera lnea ttulos: si activamos esta opcin en el fichero de texto se generar una primera lnea con los ttulos de los campos a exportar. Archivo de destino: seleccionaremos la carpeta donde se generar y el nombre del archivo de texto. 9.4.8. La Cesta de la Compra Esta opcin nos da la oportunidad de incluir en una lista cualquier elemen- to de la rejilla que tengamos activa para su posterior utilizacin en otros lu- gares del programa. Por ejemplo, en un programa de gestin de libreras se puede tener una cesta para las novedades, otra para los libros pendientes de servir, etc. Si tenemos una cesta de libros, sta podr ser actualizada o se podrn extraer registros de la misma desde cualquier rejilla de Libros. El contenido de las cestas tiene persistencia en memoria, por lo que ser nico en cada mquina que las use, y se borrar cuando se cierre el pro- grama. As, al ejecutarlo de nuevo, estarn todas vacas. Introducir datos en la cesta de la compra Podemos guardar registros de una rejilla en la Cesta de la Compra de dos maneras: Pulsando la tecla F2: nos permitir ir guardando uno a uno los registros que queramos de la rejilla. Para ello slo hay que marcar un registro y pulsar di- cha tecla. Sonar un pitido cuando ste es guardado en la cesta. Si esto no ocurriese puede deberse a que dicho registro ya se encuentre en la cesta o a que no hayamos definido ninguna cesta para esa tabla de datos. Pulsando las teclas Shift+F2: as incluimos todos los registros de la lista en la cesta. Cuando pulsamos sobre la rejilla con el botn derecho del ratn aparece un men que, entre otras opciones, incluye las de la Cesta. stas son: Abrir configuracin Guardar configuracin Anotar en cesta: Elemento seleccionado: guarda en la cesta el registro so- bre el cual pulsamos con el botn derecho del ratn. Anotar en cesta: Todos: se guardarn en la cesta todos los registros de la rejilla. En una cesta podremos incluir todos los registros que queramos de cualquier rejilla de una misma tabla de datos. Si se aade un registro a una cesta y sta ya lo contena, no se incluir. As se evita duplicar in- formacin. 09 Ejecutar una aplicacin 446 447 VELAZQUEZ VISUAL En la parte superior izquierda de la ventana de la Cesta de la compra, bajo el epgrafe Cesta, se muestra un combo box en el que se especifica la ces- ta activa en ese momento. Si hemos definido ms de una cesta para una misma tabla de datos, haciendo clic en la flecha de dicho combo aparece- rn todas las existentes para dicha tabla. Podremos anotar los registros ele- gidos en cada una de ellas, dependiendo de su definicin. Por ejemplo, en un programa de gestin de libreras podemos crear dos cestas para la tabla de libros: una para incluir los que estn pendientes y otra para incluir las novedades. En cada una de ellas el usuario podr incluir los libros que desee. Cada una de las cestas creadas para una misma tabla son independientes. Podremos aadir datos a la Cesta tantas veces como queramos, desde dis- tintos puntos del programa donde se visualice una rejilla de la misma tabla de datos. Coger datos de la Cesta de la Compra Para extraer registros de la cesta de la compra debemos estar en la rejilla sobre la que queramos volcarlos. Dicha rejilla debe pertenecer a la misma tabla de datos que la cesta. Para traer los registros tenemos que hacer clic con el botn derecho del ratn sobre ella o bien pulsar las teclas Ctrl+F2. Aparecer de nuevo el men en el que, adems de las anteriores, se inclu- yen las opciones de trada de datos de la cesta. stas son: Abrir la cesta: pulsando esta opcin podremos ver el contenido de la cesta. Traer cesta completa: vuelca todo el contenido de la cesta en la lista. Si eje- cutamos este comando sobre una lista podremos deshacerlo, ejecutando la opcin Deshacer, del men de contexto que se presenta al pulsar el botn CESTA DE LA COMPRA derecho del ratn sobre la rejilla. Si queremos rehacer el comando ejecuta- do sobre una lista ejecutaremos la opcin Rehacer del mismo men de con- texto. Si un registro de los que se extrae de la Cesta de la compra a la nueva lis- ta ya exista en sta, no lo aadir. As evitaremos la duplicidad de infor- macin. Una vez abierta la cesta, podremos extraer datos de ella mediante la pul- sacin de los botones incluidos en la misma. stos son: borra todo el contenido de la cesta, no incluyndose los datos en la re- jilla actual. borra todo el contenido de la cesta, incluyndose los datos en la rejilla actual. Copia el contenido de la cesta en la rejilla actual y los registros se man- tienen en la cesta. Copia el registro marcado en la cesta en la rejilla actual y lo borra de la cesta. Copia el registro marcado en la cesta en la rejilla actual pero no lo bo- rra de la cesta. Cierra la ventana de la cesta. Como vimos antes, si tenemos definida ms de una cesta para la misma ta- bla de datos, podremos seleccionar en el combo box que aparece en la par- te superior izquierda de la ventana, bajo el epgrafe Cesta, la cesta de la que queramos extraer datos. 09 Ejecutar una aplicacin Borra todo el contenido de la cesta Borra todo el contenido de la cesta Copia el contenido de la cesta Copia el registro Copia el registro Cierra la ventana de la cesta 448 449 VELAZQUEZ VISUAL 9.4.9. Guardar y recuperar listas virtuales en disco Los registros de una rejilla pueden ser almacenados en disco para poder re- cuperarlos en una nueva sesin. Para guardar una lista en disco hacemos clic con el botn derecho del ratn sobre la lista y en el men de contexto seleccionamos la opcin Guardar lista virtual. Le damos un nombre y espe- cificamos la senda donde queremos guardarla, que por defecto es el direc- torio del sistema. Las listas virtuales se almacenan con la extensin VTV. Para recuperar una lista almacenada en disco ejecutaremos la opcin Re- cuperar lista virtual. Si recuperamos una lista virtual sobre una lista podremos deshacer la ope- racin, ejecutando la opcin Deshacer, del men de contexto. Si queremos rehacer esta operacin ejecutaremos la opcin Rehacer del men de con- texto. 9.4.10. Imprimir desde una rejilla o un formulario Para imprimir una lista desde una rejilla a la que hayamos asociado un in- forme, seleccionamos la opcin de men Archivo/Imprimir informe El bo- tn Imprimir informe tambin realiza esta funcin. Si lo que queremos es ver una presentacin preliminar del informe selec- cionaremos la opcin de men Archivo/Presentar informe o pulsaremos el botn Ver Informe. Para ver todos los tipos de informes que se pueden lanzar con la lista de re- gistros de la rejilla actual, seleccionamos la opcin de men Archivo/Espe- cificar informe, o bien pulsamos el botn Especificar informe. Imprimir informe Ver Informe Especificar informe Cuando se manda imprimir un informe, el ttulo de ste se refleja en la cola de impresora de Windows, lo cual ayuda a saber el contenido de cualquier informe cuando existen varios en cola. Para imprimir desde un formulario alguna de las rejillas que incluya, son v- lidas las opciones siguientes: Las opciones de men y los botones de herramientas anteriores (si el for- mulario no es cuadro de dilogo). Pulsar un botn que ejecute un proceso que utilice la funcin Imprimir in- forme. 9.4.11. Cmo introducir los datos Hay dos formas fundamentales de introducir datos en un registro. Son las siguientes: Introducir datos en un campo no enlazado Cuando un campo no est enlazado a otra tabla de datos, el contenido se introduce directamente, teclendolo dentro del cuadro de edicin. En este tipo de campos no aparecen las flechas arriba/abajo. Si el campo es del tipo Objeto Texto, campo que puede llevar un nmero ili- mitado de lneas de texto, tendremos que pulsar las teclas Ctrl+Intro para insertar un salto de lnea. En este tipo de campos slo podemos escribir, pero no cambiar atributos de letra, colores, alineacin del texto, etc. S po- dremos hacer uso de las opciones habituales de Windows: Deshacer, Cor- tar, Copiar, Pegar, Eliminar, Seleccionar todo, a travs del men contextual que aparece al pulsar con el botn de la derecha del ratn sobre el fondo del control del campo. En campos de tipo Objeto Texto Enriquecido es similar al anterior, pero ad- miten cambiar atributos de la letra, tipo, colores, justificacin, formatos de prrafo, etc. Adems, cuando hacemos clic con el botn derecho del ratn sobre un objeto de este tipo se abrir un men de contexto con las si- guientes opciones: 09 Ejecutar una aplicacin CONTROL DE EDICIN DE UN CAMPO TIPO OBJETO TEXTO 450 451 VELAZQUEZ VISUAL Cambiar fuente: nos permitir cambiar el tipo de fuente, estilo, tamao, efectos y color. Alinear izquierda: para establecer la alineacin del texto justificado a la iz- quierda del control. Alinear centrado: para establecer la alineacin del texto centrado del control. Alinear derecha: para establecer la alineacin del texto justificado a la de- recha del control. Preparar pgina: para establecer el tamao, la orientacin y los mrgenes de la pgina, as como la impresora que vamos a utilizar para imprimirlo. Editar objeto: para lanzar el documento a un programa de edicin de docu- mentos de texto. En campos de tipo Objeto OLE podremos incrustar cualquier tipo de objeto (documento de Word, Excel, Paint, etc.). Para incluir un objeto en un campo de este tipo haremos doble clic con el botn izquierdo del ratn sobre el con- trol, o bien pulsamos sobre el control el botn derecho del ratn y seleccio- namos la opcin Nuevo Objeto del men de contexto que aparece. CONTROL DE EDICIN DE UN CAMPO TIPO OBJETO TEXTO ENRIQUECIDO CONTROL DE EDICIN DE UN CAMPO TIPO OBJETO OLE Se mostrar el cuadro de dilogo estndar para insertar objetos. Cuando editamos un campo en el que ya existe un objeto incrustado tene- mos la opcin de Editar Objeto y Eliminar objeto al aparecer el men de contexto. Introducir datos en un campo enlazado Cuando un campo est enlazado a una tabla de datos maestra, su conteni- do ha de ser atrapado de la tabla de datos enlazada. Este tipo de campos se reconocen fcilmente puesto que el cuadro de edicin tiene adosadas a su derecha las flechas arriba/abajo . Para ello debemos haber activado en las propiedades del control de edicin de campo de un formulario, Pro- piedades de: Edicin con microscroll, la opcin Botones arriba/abajo de la pestaa Ms estilos. Si hemos definido el control para presentar la informacin en varias lneas, tendremos que mantener pulsada la tecla Alt mientras pulsamos las tecla de cursor arriba/abajo, si no, bastar con pulsar solamente las teclas del cursor arriba/abajo. Utilizando estas flechas podemos recorrer los registros de la tabla de datos apuntada. Si introducimos un texto y pulsamos la tecla Flecha abajo (o la tecla ALT + Cursor abajo, si se trata de un control de mltiples lneas) de 09 Ejecutar una aplicacin Flechas arriba/abajo 452 453 VELAZQUEZ VISUAL movimientos del cursor, Velzquez Visual buscar en la tabla de datos en- lazada el registro ms prximo al texto introducido. Cuando conocemos el contenido exacto de la informacin a introducir y existe dicha informacin en la tabla de datos enlazada, podemos introducir el contenido completo del campo. Al terminar de escribir, moviendo el cur- sor a otro control, Velzquez Visual buscar en la tabla de datos apuntada la informacin introducida y la atrapar automticamente. Tambin podemos activar la propiedad Autocompletar en el control del for- mulario. Al escribir una cadena en un edit de maestro, pasados los milise- gundos que tengamos configurados en el ejecutor, el programa presenta el primer registro que comience por la misma. No hay que perder el foco pa- ra que funcione. Para introducir fechas podemos usar tambin las flechas arriba/abajo. Si s- ta no fue definida con un contenido inicial comenzar por la fecha del sis- tema. Esta fecha puede introducirse de dos maneras: DDMMAA, DDM- MAAAA, DD-MM-AA, DD/MM/AA... (Da, mes y ao, dos dgitos cada uno, con o sin separaciones: - /) o bien DD-Mes-AAAA (Da: dos dgitos; mes: tres primeras letras, ao: 4 dgitos, con separaciones entre datos: - /). 9.4.12. Fundir una ficha con otra Disponemos de esta opcin en el men Fichas/Fundir que aparece cuando se est visualizando una rejilla. Su funcin es eliminar un registro maestro haciendo que toda la informacin que dependa de l (sus registros histri- cos) pase a depender de otro. Esta opcin solamente estar activada si el usuario tiene un nivel de privi- legio igual o superior a 92. Para realizar esta operacin seleccionaremos primero el registro que se quiere eliminar y pulsamos Fichas/Fundir en la barra de mens. Nos apare- ce entonces la ventana Fundido de fichas con el cdigo y el nombre del primer registro. Despus, seleccionamos el registro que va a recoger los da- tos y volvemos a pulsar Fichas/Fundir en la barra de mens. En la ventana Fundido de fichas se muestran ahora el cdigo y el nombre de los dos re- gistros. Si pulsamos el botn Invertir, la ficha vlida pasar a ser la ficha a eliminar, y viceversa. Finalmente, si pulsamos el botn Fundir de la ventana Fundido de fichas se realizar la operacin de fundido. Por ejemplo, si se tienen dos fichas de un mismo cliente, siendo una de las dos errnea, los datos histricos de la errnea se pueden fundir con los de la correcta. Todos los albaranes, facturas, etc., que estuvieran asociadas a la errnea pasarn a depender de la correcta. 9.4.13. Cambiar aspecto de la rejilla Cuando en el ejecutor se visualiza una rejilla, se puede cambiar el aspecto de la misma haciendo clic sobre el botn Cambiar el aspecto de la Re- jilla. Dicho botn se encuentra en la barra de herramientas de listas de la parte inferior de la pantalla. Lo que permite es cambiar la rejilla en la que se estn presentando los registros de una tabla de datos por otra de las defi- nidas como pblicas para la misma tabla. Si no est disponible el botn porque hayamos cambiado la barra de herramientas estndar por una he- cha por nosotros y no hayamos incluido este comando, podemos acceder a esta funcin a travs de la barra de mens Lista/Cambiar el aspecto de la rejilla. 09 Ejecutar una aplicacin VENTANA DE FUNDIDO DE FICHAS Cambiar el aspecto de la Rejilla 454 455 VELAZQUEZ VISUAL 9.4.14. Cambio de visualizacin de las hojas de clculo Las hojas de clculo permiten visualizar la informacin de las siguientes for- mas: Lneas, Barras verticales/horizontales/3D verticales/3D horizontales, Gant vertical/horizontal, Tartas y Rejillas de valores. Para cambiar la visualizacin disponemos de un men de contexto con las opciones anteriores. Para activar este men pulsamos con el botn derecho del ratn sobre el rea de la hoja de clculo. 9.4.15. Imgenes dinmicas Recordemos que imgenes dinmicas son aquellas que el usuario puede cambiar, es decir, puede introducir, cambiar o eliminar imgenes de un cam- po Objeto dibujo durante la ejecucin. Imgenes estticas son los objetos visuales Dibujo, que no pueden ser alterados por el usuario durante la eje- cucin. Modos de visualizacin Los controles Objeto dibujo disponen de diversos modos de visualizacin. Por defecto se activa el que hayamos definido en el proyecto, en las Pro- piedades de: Objeto dibujo, en la opcin Modo ver. REJILLA CUYA SEGUNDA BALA ES UN GRFICO Para cambiar la visualizacin del dibujo en ejecucin disponemos de un men de contexto con las opciones correspondientes a los diversos modos de visualizacin. Este men se activa pulsando el botn derecho del ratn sobre el rea del control. Los modos de visualizacin son: Estirar-Encoger: cambiar el ancho y el alto de la imagen para adaptarlo a la altura y anchura del control. Si no es proporcional el alto y el ancho de la imagen a la altura y la anchura del control, la imagen se ver deformada. Tamao Original: la imagen se presentar en su tamao original, comen- zando a dibujarse desde el borde superior izquierdo del control. Si sta es mayor que el tamao del control se ver truncada. 09 Ejecutar una aplicacin 456 457 VELAZQUEZ VISUAL Tamao Original Centrado: la imagen se visualizar con su tamao original, pero centrada dentro del rea que el control ocupe. Si dicha imagen es ma- yor que el tamao del control se ver truncada. Encoger/Estirar Proporcionado: la imagen aumentar o reducir su tama- o para adaptarse al tamao del control, pero conservando siempre la proporcin alto/ancho. Si la imagen es muy pequea y el control es muy grande, sta se ver distorsionada al estirarse para adaptarse al tamao de ste. Mosaico: la imagen se presentar en su tamao original pero a modo de mosaico, ocupando toda el rea del control. Proporcionar sin Ampliar: la imagen se mostrar en su tamao original o se reducir de forma proporcionada para adaptarse al tamao del control, en el caso que ste sea menor que el tamao de la imagen. Ventana del tamao original: nos abre una ventana independiente del for- mulario de la imagen con su tamao original. Nos muestra las dimensiones de la imagen en el ttulo de la ventana. Importar y exportar imgenes En ejecucin, para importar y exportar imgenes desde un control que edi- te un campo tipo Objeto dibujo, utilizamos las opciones Importar dibujo, Im- portar eliminando el origen y Exportar dibujo, situadas en el men de con- 09 Ejecutar una aplicacin 458 459 VELAZQUEZ VISUAL texto asociado al control. Este men se activa pulsando el botn derecho del ratn sobre el rea del control. Podemos importar imgenes en formato BMP, JPEG, Targa y PCX. Obtener una imagen va Twain Va Twain se pueden conseguir imgenes desde un escner, una cmara fo- togrfica digital e incluso de algunas cmaras de vdeo (para capturar un fo- tograma). En primer lugar seleccionamos el control de tipo Dibujo en un formulario. Si en el ordenador tenemos instalada una nica fuente Twain, podremos eje- cutar directamente la opcin Archivo/Obtener imagen va twain despus de tener en foco el control de tipo Dibujo. En caso de tener ms de una fuen- te, antes de ejecutar esta opcin tendremos que ejecutar la opcin Archi- vo/Seleccionar fuente twain para especificar cul ser la fuente de obten- cin de la imagen. Se ejecutar el programa que tengamos asignado al dis- positivo de obtencin de imgenes seleccionado. MEN DE CONTEXTO DE OBJETOS DIBUJO Slo pueden obtenerse imgenes va twain desde formularios en modo vista (a pantalla completa) no en cuadro de dilogo. ADVERTENCIA Eliminar, Cortar, Copiar y Pegar una imagen Disponemos de las opciones Eliminar, Cortar, Copiar y Pegar en el men de contexto del control. Las opciones Eliminar y Cortar estarn desactivadas si el control es de Solo Lectura. Para Cortar, Copiar y Pegar tambin se pueden utilizar los botones adecuados de la barra de herramientas de edicin. Editar una imagen Al hacer doble clic sobre la imagen de un control tipo Objeto Dibujo, si no est definida como Solo Lectura, dicha imagen ser abierta en el programa de edicin de imgenes que tengamos definido por defecto en el sistema. Si el control es de Solo lectura, al hacer doble clic aparecer un cuadro de dilogo con el dibujo a su tamao real o reducido proporcionalmente si no cabe en pantalla, no pudiendo realizarse ninguna edicin. Reducir el tamao fsico de la imagen Es posible reducir el tamao fsico de una imagen incluida en un control ti- po Objeto Dibujo mediante la opcin Reduce el tamao fsico de la imagen, que aparece en el men de contexto del control. Al desplazar el botn de la barra vertical se produce la reduccin de tama- o. Para salir cerramos la ventana ( ), quedando guardado el cambio si aceptamos la ficha. Esta opcin estar desactivada si el control es de Solo Lectura. 9.4.16. Rejillas encarpetadas en formularios 9.4.16. (encarpetados de histrico) Las rejillas encarpetadas se utilizan en los formularios para ver la informa- cin de forma clasificada dentro de las mismas. La clasificacin se realiza encarpetando los registros de la rejilla segn los valores de un determinado campo de la tabla de datos al que se llama campo subclasificador. 09 Ejecutar una aplicacin Cortar Copiar Pegar 460 461 VELAZQUEZ VISUAL La lista desplegable situada en la parte superior de la rejilla nos permite visualizar el encarpetado de nuestra eleccin. Por defecto, la primera vez que se abre presenta una lista completa de los registros de la rejilla, mientras que si cambiamos la carpeta, cada ficha que se abra durante la ejecucin del programa se presentar con esa misma carpeta selec- cionada. Existen dos tipos de encarpetado: Encarpetado automtico: las carpetas son generadas automticamente por la aplicacin tomando los valores del campo subclasificador. No podremos crear, modificar ni borrar dichas carpetas. Encarpetado manual: el encarpetado ser creado por nosotros y guardado en el disco para su posterior uso. Para editar un Encarpetado pulsamos el botn Carpetas, con lo que se lanza un cuadro de dilogo en el que podemos declarar las distintas op- ciones que luego nos aparecern en el combo box desplegable. ENCARPETADO DE HISTRICO Carpetas En la ventana para edicin de carpetas tenemos los botones: Aadir: permite aadir una nueva carpeta a la lista de carpetas. Insertar: permite insertar una carpeta encima de la seleccionada en la lista de carpetas. Eliminar: borra la carpeta seleccionada. Arriba: desplaza la carpeta seleccionada una posicin hacia arriba. Abajo: desplaza la carpeta seleccionada una posicin hacia abajo. Propiedades: permite editar las propiedades de la carpeta para realizar modificaciones. Al editar una carpeta debemos poner un Ttulo para el encarpetado, as co- mo unos Lmites, Inicial y Final, por los que buscar en el segundo compo- nente del ndice que compone la clave del histrico, que podemos ver den- tro del control de Lmites. 09 Ejecutar una aplicacin Aadir Insertar Eliminar Arriba Abajo Propiedades 462 463 VELAZQUEZ VISUAL Los encarpetados manuales muestran siempre la ltima carpeta abierta en esa ejecucin de la aplicacin. 9.4.17. Usos avanzados de una rejilla Las siguientes utilidades se encuentran en la opcin de men Lista (algunos en la barra de herramientas), que aparece cuando una rejilla est visible en la pantalla. Son unas funciones muy potentes que lleva implementadas Ve- lzquez Visual y que permiten al usuario final realizar bsquedas y actuali- zaciones personalizadas. OPCIN DE MEN LISTA Rebuscar (F3) Esta opcin nos permite lanzar las bsquedas declaradas en el proyecto que no sean privadas, haciendo que la lista resultante de las mismas se combine con la lista desde la que lanzamos esta opcin. Tambin podemos ejecutarla pulsando el botn Rebuscar o la tecla F3. Hay tres tipos posibles de combinacin: Cruzar: realiza una nueva bsqueda y los registros resultantes de la misma los compara con los de la lista previa. Aquellos registros que se encuentren en las dos listas son los que formarn la lista final. Aadir: realiza una nueva bsqueda, comparando los registros resultantes con los de la lista previa. La lista final estar compuesta por los registros de la primera lista ms los registros de la segunda que no aparecen en la pri- mera, es decir, no repite registros. Quitar: realiza una nueva bsqueda y los registros resultantes de la misma los compara con los de la lista previa. La lista final estar compuesta por los registros de la primera lista menos los registros de la segunda que apare- cen tambin en la primera. En la ventana de Seleccin de bsqueda elegiremos la que vayamos a usar, aparecindonos el formulario de peticin de datos para la bsqueda en el caso de que lo requiera. Esta funcin podr ser deshecha y rehecha en el men de edicin, con lo que nos devolvera a la rejilla anterior a su ejecucin o nos lo volvera a eje- cutar si lo hemos deshecho. 09 Ejecutar una aplicacin VENTANA SELECCIN DE BSQUEDA Rebuscar 464 465 VELAZQUEZ VISUAL Filtrar (Ctrl+F3) Mediante esta opcin excluimos de una lista aquellos registros que no cum- plan una determinada condicin. Podemos lanzarla pulsando el botn Filtrar o la combinacin de teclas Ctrl+F3. Cuando seleccionamos esta opcin se presenta el cuadro de dilogo Filtra- do de tabla de datos. Aqu podemos seleccionar el Campo por el que que- ramos filtrar, la condicin que debe cumplir cada registro para ser incluido en la nueva lista y el Dato a buscar dentro del campo por el que filtramos. Los registros que no cumplan esta condicin son eliminados de la rejilla, pe- ro no son borrados de la tabla. Tenemos la opcin de que lo que busque sea el Campo completo: si hemos marcado la casilla, el contenido del campo debe coincidir exactamente con el Dato a buscar. Si no la marcamos, se filtrarn aquellos registros en los que sea parte del contenido del Campo la que coincida con el Dato a bus- car (en el caso de la figura anterior estaramos conservando los registros ta- les que contengan la cadena cargar en el campo NOMBRE. Si marcramos la casilla Campo completo slo nos quedaramos con los registros tales que el campo nombre fuera cargar). La casilla Compara con ficha seleccionada nos permite seleccionar una fi- cha y coger de sta el valor del campo por el que queremos filtrar la lista. Esta opcin podemos combinarla con Campo Completo. As, si en una lista de Proveedores queremos ver slo los de Gijn (la tabla POBLACIONES es maestra de PROVEEDORES), buscamos uno que est tambin asignado a esa poblacin y lo seleccionamos (para encontrarlo po- demos ordenar la lista de Proveedores por orden alfabtico de Poblacin, pulsando en la cabecera de la columna). Filtramos entonces por el campo y marcamos Compara con ficha seleccionada. Velzquez Visual se encarga de mirar que las fichas filtradas tengan el mismo cdigo en el campo enla- zado que el de la ficha que hemos seleccionado. Si hacemos el filtrado por un campo enlazado a maestro, el valor del campo al filtrar ha de ser el cdigo del registro maestro, no su descripcin. Por ejemplo, de una lista de Proveedores se desea ver solamente los que sean de Gijn (la tabla POBLACIONES es maestra de la de PROVEEDORES), al tratarse de un maestro no puede filtrar por Poblaciones=Gijn, sino que debe buscar por el cdigo: Poblaciones=3. ADVERTENCIA CUADRO DE DILOGO FILTRADO DE TABLA DE DATOS Usando la opcin Compara con ficha seleccionada en el caso de hacer un filtrado por un campo enlazado a maestro, evitamos tener que buscar el cdigo del registro maestro por el que queremos hacer el filtrado. Basta buscar un registro en la lista actual que tenga por valor el que necesitamos y marcando Compara con ficha seleccionada cuando hagamos el filtrado, Velzquez Visual se encarga de suministrar el valor adecuado desde el registro. TRUCO Filtrar Si ejecutamos un filtrado sobre una lista podremos deshacerlo ejecutando la opcin Deshacer del men de contexto que se presenta al pulsar el bo- tn derecho del ratn sobre la rejilla. Si queremos rehacer un filtrado hecho sobre una lista ejecutaremos la opcin Rehacer del men de contexto que se presenta al pulsar el botn derecho del ratn sobre la rejilla. Combinar Esta opcin slo est activa cuando disponemos de varias rejillas de la mis- ma tabla de datos. Nos permite realizar combinaciones entre la rejilla activa y otra que seleccionemos de entre la lista que nos presenta. Las combina- ciones posibles son: Cruzar, Aadir y Quitar. La lista final de los registros nos la muestra en la rejilla del separador en curso. Adems de lanzar esta opcin desde el men, podemos hacerlo pulsando el botn Combinar. Partir lista (Ctrl+F5) Esta opcin slo est activa cuando seleccionamos un elemento de la reji- lla en curso. Al ejecutarla cortamos la rejilla por el registro seleccionado y los datos sucesivos son introducidos en una nueva rejilla que crea Velz- quez Visual. El resultado final son dos rejillas: una que contiene los datos hasta la seleccin (no incluye el seleccionado) y otra con los datos desde la seleccin (s lo incluye). Cada rejilla se muestra en una ventana distinta del ejecutor. Mediante la combinacin Ctrl+F5 podemos lanzar esta opcin. Multipartir lista Esta opcin parte la lista en funcin del contenido de un campo. Al ejecu- tarla nos presenta la ventana Seleccin de campo, donde seleccionamos el 09 Ejecutar una aplicacin CUADRO DE DILOGO COMBINAR CON OTRA VENTANA Slo podemos combinar rejillas asociadas a una misma tabla de datos. ADVERTENCIA Combinar 466 467 VELAZQUEZ VISUAL campo por el que queremos multipartir la lista. Nos crea entonces una lista por cada grupo de registros que tengan el mismo valor en el campo elegi- do, ordenados alfabticamente o numricamente dependiendo del tipo de campo elegido. Cada lista aparece en una nueva ventana del ejecutor. Ejemplo: Multipartir lista Tenemos la tabla PROVINCIAS, cuya maestra es COMUNIDADES AUTO- NOMAS, y queremos multipartir la lista de Provincias por el campo Comu- nidades Autnomas. VENTANA SELECCIN DE CAMPO e Elegimos la opcin multipartir lista, y en la ventana Seleccin de campo ele- gimos el campo COMUNIDAD, por el que multipartiremos la lista. Velzquez crear una lista por cada Comunidad Autnoma. El ejecutor abrir tantas ventanas como comunidades autnomas distintas haya en la lista original. 09 Ejecutar una aplicacin LISTA DE PROVINCIAS VENTANA SELECCIN DE CAMPO e 468 469 VELAZQUEZ VISUAL Campos duplicados Esta opcin crea una nueva lista con los registros de la rejilla en curso que posean el contenido de un campo duplicado, abrindonos otro separador en el ejecutor para mostrrnosla. Por ejemplo, supongamos una lista de habitantes de una ciudad (habitan- tes histrico de ciudad), en la que ejecutamos la opcin Campos duplica- dos especificando el campo Edad. Si hay ms de un registro tal que el con- tenido del campo edad sea 1, todos esos registros con edad igual a 1 se- rn incluidos en la lista, pero tambin se incluirn en la misma lista todos los que tengan dos aos, siempre que haya ms de un registro con dos aos. Ahora bien, si slo hay un registro con 107 aos, ste no ser incluido en la lista. Al ejecutar esta opcin aparecer la ventana Seleccin de campo, en la que seleccionamos el campo por el que vamos a comprobar si hay registros du- plicados. Nos es particularmente til para la localizacin de cdigos o cla- ves duplicadas en una tabla de datos. e Si no hay registros con campos duplicados aparecer una ventana infor- mativa al respecto. Modificar campo Mediante esta opcin modificamos en todos los elementos de la lista el campo que seleccionemos, indicando su nuevo contenido en el cuadro de edicin que aparece en pantalla. Modificar campo si... Con esta opcin modificamos el contenido de un campo en todos los re- gistros de la lista que cumplan una determinada condicin. 09 Ejecutar una aplicacin VENTANA SELECCIN DE CAMPO CUADRO MODIFICACIN CAMPO Esta opcin solamente estar activada si el usuario tiene un nivel de privilegio igual o superior a 92. ADVERTENCIA 470 471 VELAZQUEZ VISUAL Al seleccionar la opcin aparece el cuadro de dilogo Modificacin general de un campo, en el que se muestran los siguientes controles de edicin: Campo a buscar: campo por el que vamos a buscar los registros de la lis- ta. Puede coincidir o no con el campo a modificar. Dato a buscar: es el contenido que ha de tener el Campo a buscar. Aque- llos registros en los que dicho campo contenga el Dato a buscar sern los modificados. Si se trata de un campo enlazado, debemos introducir el c- digo que posee el registro correspondiente en la tabla de datos padre, y no el nombre u otro campo del registro. Campo completo: si no marcamos esta casilla de verificacin se modifica- rn aquellos registros en los que parte del contenido del Campo a buscar coincida con el Dato a buscar. Si est marcada, el contenido del campo de- be coincidir exactamente con el Dato a buscar. Campo a modificar: el campo que vamos a modificar si se cumple la con- dicin. Dato para reemplazar: es el contenido final que introduciremos en el Cam- po a modificar. De nuevo, si es un campo enlazado debemos introducir el cdigo que posee el registro correspondiente en la tabla de datos padre, y no el nombre u otro campo del registro, tal y como pasaba en el dato a buscar. Reordenar Reordena los elementos de la rejilla por el campo seleccionado. Al ejecutar la opcin aparece la ventana Seleccione campo, en la que elegimos el cam- po por el que reordenar. Esta opcin solamente estar activa si el usuario tiene un nivel de privilegio igual o superior a 92. ADVERTENCIA CUADRO MODIFICACIN GENERAL DE UN CAMPO Si ejecutamos una ordenacin sobre una lista podremos deshacerla ejecu- tando la opcin Deshacer del men de contexto que se presenta al pulsar el botn derecho del ratn sobre la rejilla. Si queremos rehacer una ordena- cin ejecutaremos la opcin Rehacer del men de contexto. Recalcular totales Cuando seleccionamos esta opcin se recalculan los totales de la rejilla. Tambin realiza esta funcin el botn Recalcular, situado en la barra de listas de Velzquez Visual. 9.4.18. Utilidades Esta opcin de men aparece cuando, a la hora de presentar los registros de una tabla, se realiza un volcado completo de sta usando la Pistola de men: Rejilla Tabla datos completa. Cuando usamos esta pistola en un me- n arbolado con los iconos por defecto de Velzquez Visual esta opcin aparece precedida del icono . 09 Ejecutar una aplicacin Si vamos a ordenar por un campo incluido en una columna de la rejilla, bastar hacer clic con el ratn sobre la cabecera correspondiente. TRUCO VENTANA SELECCIN DE CAMPO PARA REORDENAR Recalcular Rejilla tabla datos completa 472 473 VELAZQUEZ VISUAL Informacin Tabla de datos Desde la opcin Utilidades se puede obtener informacin sobre una tabla de datos: Nombre e Identificador de la tabla, nmero Total de Fichas, cun- tas se encuentran Ocupadas y cuntos Huecos libres hay. El total de fichas ha de ser la suma de Ocupadas y Huecos libres. Estos huecos libres son causados por la eliminacin de registros anteriores al ltimo creado, que- dando libre el espacio que ocupaban. Los siguientes registros que vayamos dando de alta irn ocupando los huecos libres que haya. Regenerar ndices y Regenerar el rea de datos Desde la rejilla de tabla de datos completa tenemos la opcin de Regene- rar ndices, volviendo a construir stos tal y como si hubiramos hecho una modificacin del esquema de tablas del mapa. Tambin podemos Regene- rar el rea de datos, con lo que se reconstruirn los archivos de datos .DAT, escribindolos de nuevo. Exportar ASCII Con esta opcin podemos exportar los datos de la tabla en formato ASCII delimitado, separados por comas y entrecomillados. Seleccionada la op- cin, Velzquez Visual pregunta si queremos realizar la exportacin. Al con- firmar, exporta la tabla a un fichero de texto con extensin .TXT cuyo nom- bre es el de la tabla exportada. Esta opcin no est disponible en arquitectura cliente-servidor haciendo uso de la pistola Rejilla tabla de datos completa. En este caso usaramos la opcin del irunner Lista/Exportar Ascii. MEN UTILIDADES Este men slo aparece en VRunner, no en Irunner, ya que en arquitectura cliente- servidor estas opciones se incluyen en el Servidor de aplicaciones de Velzquez Visual. ADVERTENCIA VENTANA INFORMACIN SOBRE UNA TABLA DE DATOS 9.4.19. Ejecucin de procesos desde una rejilla Posibilidad de disparar un proceso desde una rejilla Para disparar cualquier tipo de proceso disponemos de las opciones del men Procesos. Tambin podemos lanzarlos usando los botones de la ba- rra de listas de Velzquez Visual o desde una barra de herramientas creada por nosotros. Estas opciones estn accesibles en los casos siguientes: Procesos: est activada si estn disponibles uno o ms procesos de lis- ta para la tabla de datos de la rejilla en curso. Tubo de ficha: est activada si en la rejilla hay un registro seleccionado y estn disponibles uno o ms tubos de ficha para la tabla de datos de la rejilla en curso. Tubo de lista: est activada si estn disponibles uno o ms tubos de lis- ta para la tabla de datos de la rejilla en curso. Disparo de un Tubo de ficha Para disparar un tubo de ficha primero hemos de seleccionar un elemento de la rejilla en curso. Si hay tubos de ficha disponibles se activar la opcin de men Procesos/Tubo de ficha y el botn Tubo de ficha. Usando uno u otro, Velzquez Visual nos mostrar una lista con los tubos de ficha dis- ponibles, confirmndonos la tabla de origen y la ficha desde la que se rea- liza el tubo de ficha. Seleccionamos el tubo que queramos usar y acepta- mos, ejecutndose sobre la ficha seleccionada. 09 Ejecutar una aplicacin MEN PROCESOS Procesos Tubo de ficha Tubo de lista 474 475 VELAZQUEZ VISUAL Disparo de un Tubo de lista Para disparar un tubo de lista primero debemos situarnos en la rejilla origen. Si hay tubos de lista disponibles se activarn la opcin de men Proce- sos/Tubo de lista y el botn Tubo de Lista. Al pulsar uno de los dos se mostrarn los tubos de lista disponibles. Seleccionamos entonces el que- ramos usar. VENTANA SELECCIN DE TUBO DE FICHA VENTANA SELECCIN DE TUBO DE LISTA Tubo de Lista Disparo de un proceso Para disparar un proceso hemos de situarnos en la rejilla origen. Si hay pro- cesos de lista disponibles se activar la opcin de men Procesos/Proce- sos. Al pulsarla se mostrarn la tabla a la que pertenece la rejilla (como t- tulo) y los procesos de Origen Lista disponibles. Seleccionaremos entonces el que vayamos a lanzar. Consulta de procesos en segundo plano Los procesos que se ejecutan en segundo plano son aquellos en los que hemos marcado el Estilo Multitarea en su ventana de edicin. Al pulsar el botn Procesos 2 Plano, situado en la barra de herramien- tas superior de la rejilla, o en la opcin de men Archivo / Procesos en eje- cucin, aparece un cuadro de dilogo donde se informa del estado de eje- cucin de cada uno de los procesos activos en el momento de la consulta. Si el botn est desactivado se debe a que no se est ejecutando ningn proceso en segundo plano. Para abortar una tarea, sta ha de tener la funcin de proceso Punto don- de se puede abortar. Cuando seleccionamos un proceso y pulsamos el bo- tn Abortar proceso, el ejecutor nos pide confirmacin para abortar la tarea, 09 Ejecutar una aplicacin OPCIN DE MEN PROCESOS / PROCESOS ESTADO DE EJECUCIN DE PROCESOS ACTIVOS Procesos 2 Plano 476 477 VELAZQUEZ VISUAL de modo que si pulsamos S muestra el mensaje que hayamos especifica- do en la funcin de proceso Punto donde se puede abortar. Si queremos salir de la aplicacin y hay procesos en segundo plano, Velz- quez Visual se encargar de avisarnos y no nos dejar cerrar la aplicacin. Para salir sin terminar los procesos hemos de abortarlos como acabamos de explicar (si no son abortables hay que esperar a que terminen). 9.4.20. Conmutador de herencia de histricos 9.4.19. para arbolados Cuando estemos utilizando una opcin de men cuya pistola sea un rbol visor de tablas y que como segunda bala incluya una rejilla de histrico, por defecto el botn Herencia arbolada estar seleccionado, mostrndose todos los histricos de la rama seleccionada del rbol y de todas las ramas que cuelguen de ella. Si tenemos desactivado el botn Herencia arbolada, en la rejilla de his- trico se visualizarn solamente los registros asignados directamente a la rama seleccionada, no los de las ramas que dependen de ella. Ejemplo: herencia arbolada Una librera tiene diversos almacenes; en cada almacn tenemos varias plantas, varios pasillos dentro de cada planta, y en cada pasillo varias es- tanteras. Para gestionar esta estructura usamos una tabla arbolada, como puede ser la de Ubicaciones de almacn, con estructura Almacn-Planta- Pasillo-Estantera. Supongamos que el departamento de compras necesita grabar un albarn de entrada de mercancas en el que aparecen varios ar- tculos nuevos. Podemos grabarlos asignndoles como ubicacin slo el cdigo del primer nivel (Almacn). e Herencia arbolada Herencia arbolada Posteriormente, la persona responsable de la ubicacin de los libros puede consultar cules no estn asignados todava a una estantera (son los que se grabaron anteriormente al nivel de almacn) gracias a este botn, ya que si se sita en el nivel de Almacn, en principio aparecen todos los libros que estn asignados a su nivel o a los inferiores, pero al desactivar el conmuta- dor de herencia ver slo los libros que estn asignados al nivel de Al- macn, que son los que han sido recin comprados por la librera, todava no ubicados, y, por tanto, podr modificar su situacin, asignndoles una ubicacin a nivel de Estantera. 09 Ejecutar una aplicacin HERENCIA ACTIVA HERENCIA NO ACTIVA e Conmutador de herencia 478 479 VELAZQUEZ VISUAL 9.4.21. Altas desde un Localizador Arbolado Desde un Localizador Arbolado podemos dar de alta una nueva ficha en la tabla arbolada correspondiente. Para lanzar el Localizador Arbolado debe- mos tener un botn en el formulario de edicin de ficha de su histrico que nos ejecute la funcin Localizar maestro arbolado. Al pulsar el botn al que hemos asignado el localizador nos despliega ste y pulsando el botn Nueva nos abre el formulario de altas de la tabla arbolada. De este modo podramos, por ejemplo, crear una nueva Estantera desde el visor arbolado de Ubicaciones de Almacn. BOTN ENCARGADO DE LANZAR EL LOCALIZADOR ARBOLADO VENTANA LOCALIZADOR DE MAESTRO ARBOLADO 9.5 Explorador Web El ejecutor de aplicaciones incorpora un Explorador Web que nos permitir navegar por la web directamente desde la aplicacin, siempre y cuando lo hayamos implementado. Por su parte, el Irunner incorpora permanente- mente un navegador web. El Explorador Web ser arrancado automticamente cuando en la aplica- cin hayamos ejecutado alguna accin que implique la apertura de una p- gina web; como por ejemplo si en nuestra aplicacin existe un campo para almacenar la pgina web del proveedor, y se ha incluido en el formulario de proveedores un botn para abrirla. Las pginas web sern abiertas en una ventana diferente, en un separador distinto al de partida y aparecer, junto a la barra de botones del Ejecutor, la barra de botones del Explorador Web, que incluye los botones siguientes: Atrs: si hemos abierto varias pginas en la misma ventana, al pulsar es- te botn iremos a la pgina anterior a la actual. Adelante: si hemos abierto varias pginas en la misma ventana, al pul- sar este botn iremos a la pgina siguiente a la actual. Detener: detiene la carga de la pgina web. Actualizar: carga de nuevo la pgina web en curso. Inicio: abre la pgina que est especificada como pgina principal en las Propiedades de Internet del sistema. Inicio serie: si en una misma ventana del explorador hemos abierto dife- rentes pginas, este botn retornar a la que hayamos seleccionado con una Marca de inicio de serie o, si no establecimos una marca, a la pri- mera pgina que hayamos abierto en dicha ventana. Marca inicio serie: la pgina que hayamos seleccionado con esta marca ser a la que se retorne si, en la misma ventana, se pulsa el botn de Inicio serie. Barra de direcciones: aqu podemos escribir la di- reccin URL de una pgina web para entrar en ella. Adems, pulsando el botn desplegamos las que hemos escrito antes en esta barra. 09 Ejecutar una aplicacin Atrs Adelante Detener Actualizar Inicio Inicio serie Marca de inicio de serie 480 481 VELAZQUEZ VISUAL 9.6 Correo electrnico Si en nuestra aplicacin ejecutamos funciones de correo electrnico podre- mos activar la opcin Display Out del men Ver o pulsar el botn de la barra de herramientas, para ver los mensajes enviados y recibidos. Una vez ejecutada, aparecer una ventana en la que se informa sobre los mensajes enviados y recibidos, el nmero de mensajes que no han podido ser enviados y sobre el estado de la conexin. 9.7 Incorporacin de un manual de ayuda propio para una aplicacin Podemos utilizar nuestro propio manual de ayuda para una aplicacin final, en lugar de usar el manual del ejecutor de proyectos/navegador de Velz- quez Visual. Para ello crearemos el manual de ayuda con formato HLP, as Bandejas e-mail como su fichero de contenidos correspondiente (.CNT). Ambos ficheros tendrn que ser llamados igual que el proyecto (por ejemplo, si hemos crea- do un proyecto llamado Gestion.map, tenemos que nombrar los ficheros Gestion.hlp y Gestion.cnt). Copiaremos ambos archivos en la carpeta don- de est instalado el ejecutor de Velzquez Visual (en ejecucin con vRunner). As, en ejecucin, cuando el usuario solicite ayuda se visualizar el fichero de ayuda que hayamos creado para la aplicacin. Resumen Las distintas opciones disponibles en una aplicacin se lanzan desde los mens, presentndose cada opcin en un separador distinto del ejecutor. Las rejillas nos permiten visualizar listas de registros de una tabla de da- tos. Presentan una serie de opciones como son: invertir el orden de la lis- ta, multiseleccin, edicin directa, exportar a ASCII sus registros, cestas de la compra, imprimir listas, fundir fichas, encarpetados, rebuscar, filtrar, combinar, partir lista, multipartir lista, campos duplicados, modificar cam- pos, reordenar, recalcular totales, ejecucin de procesos, tubos de lista y de ficha, etc. Los formularios nos permiten dar de alta, modificar o dar de baja registros de una tabla de datos. En un formulario pueden aparecer listas (rejillas de histricos), botones, cuadros de edicin, etc. La opcin de men utilidades aparece cuando, a la hora de presentar los re- gistros de una tabla, se realiza un volcado completo de sta usando la Pis- tola de men: Rejilla Tabla datos completa. Encontramos en ella informacin de la tabla, la posibilidad de regenerar tanto los ndices como el rea de da- tos, as como de exportar los registros en ASCII. En una opcin de men cuya pistola sea un rbol visor de tablas y que co- mo segunda bala incluya una rejilla de histrico, Velzquez nos ofrece la po- sibilidad de ver todos los registros que cuelguen directamente de una rama del rbol o todos los registros contenidos en todas las ramas que cuelguen de la rama en la que estemos. A esto se le llama herencia arbolada. Ade- ms, desde un Localizador Arbolado podemos dar de alta una nueva ficha en la tabla arbolada correspondiente. El ejecutor de aplicaciones incorpora un Explorador Web que nos permitir navegar por la web directamente desde la aplicacin, siempre y cuando lo hayamos implementado. Si en nuestra aplicacin ejecutamos funciones de correo electrnico, el eje- cutor nos permite ver los mensajes enviados y recibidos. 09 Ejecutar una aplicacin 10 Instalacin de aplicaciones 10.1 Versin de Velzquez Visual basada en un servidor de disco (Monopuesto) Para instalar una aplicacin realizada con Velzquez Visual a un usuario fi- nal debemos instalar en el servidor el Proyecto (fichero .VAM o .MAP). Re- cordemos que el fichero .MAP puede ser abierto y modificado con el Editor de Proyectos, el fichero .VAM no. Este ltimo adems est totalmente en- criptado y ocupa menos espacio en disco. As que lo aconsejable es insta- lar este ltimo. Cuando trabajamos en arquitectura VRunner, debemos instalar el Ejecutor de aplicaciones (fichero VRunner.exe) en cada puesto en que vaya a ser eje- cutada. La ejecucin de aplicaciones en modo local ser monopuesto, es decir, una aplicacin slo puede ser ejecutada una vez por un nico usuario en el mismo momento, aunque varios usuarios podrn ejecutar la aplicacin pe- ro no simultneamente. En funcin del Ejecutor que se vaya a instalar, pueden necesitarse otros ar- chivos adicionales (dlls), que son: Libreras DLL de C++: Mfc42.dll, Mfc42Loc.dll, Msvcp60.dll, Msvcrt.dll. Todos los ejecutables VRunner las necesitan. Los ejecutables VRunner no, pues ya las tienen incluidas. Libreras DLL de Oracle: Ociw32.dll. Al igual que antes, los ejecutables VRunner.exe las necesitan. Los ejecuta- bles VRunner.exe ya tienen incluida la librera. Las libreras dll que sean necesarias se han de instalar (en cada puesto, al igual que el vRunner) en la carpeta C:\Windows\System (en Windows 95 y 98) o en la carpeta Windows\System32 (en Windows NT y 2000). A continuacin enumeraremos los diferentes ejecutores existentes: VRunner.exe: ejecutor de proyectos. VRunner.exe: ejecutor de proyectos con Proteccin Sentinel. Slo dispon- dremos de l si tenemos la versin Proteccin Sentinel de Velzquez Visual. En cada puesto tambin se ha de instalar la llave de proteccin debida- mente programada. VRunner.exe: ejecutor de proyectos (con libreras dll incluidas). VRunner.exe: ejecutor de proyectos (con libreras dll incluidas) con Protec- cin Sentinel. Slo dispondremos de l si usamos la versin Proteccin Sentinel de Velzquez Visual. 10 Instalacin de aplicaciones 486 487 VELAZQUEZ VISUAL Para que nos sea ms fcil la localizacin de los archivos redistribuibles, en el directorio del programa se encuentran todos en una carpeta llamada RE- DIST. En esta carpeta tambin se incluye el manual de edicin en lnea de los ejecutores. Si el usuario final va a trabajar con bases de datos externas ODBC/DAO, ne- cesitar tener instalados en su mquina los controladores de ODBC/DAO. En el CD-ROM de instalacin de Velzquez Visual existe una carpeta llama- da DAO que le permitir instalar los controladores del DAO y otra llamada ODBC que permitir instalar los controladores del ODBC. Son totalmente re- distribuibles. Existe una serie de ficheros que podemos incluir tambin en la instalacin (en el servidor) en los siguientes casos: Si la aplicacin la vamos a entregar con datos en las tablas tendremos que incluir los ficheros con la extensin DAT e IDX correspondientes. Si hemos introducido informacin en campos de tipo objeto tendremos que incluir tambin los ficheros con extensin CND y CNI. Si la aplicacin ya la entregamos con la informacin de los usuarios y de los grupos de usuarios tendremos que incluir el fichero con la extensin USR. Si vamos a entregar la aplicacin con los valores de variables en disco ya introducidos tendremos que incluir tambin el fichero con la extensin VAR. Si creamos un fichero de ayuda propio (.HLP) con o sin fichero de conteni- dos (.CNT) los incluiremos tambin. Se instalarn en el mismo directorio que el Ejecutor. Si no tenemos archivo de ayuda propio, instalaremos los archi- vos VRunner.hip y VRunner.cnt. 10.2 Versin cliente-servidor de Velzquez Visual Deberemos instalar en el servidor el fichero .VAM o .MAP, y el Servidor de Aplicaciones de Velzquez Visual. Y en los clientes instalaremos el Nave- gador de Velzquez Visual. En el mismo CD-ROM de instalacin del Ser- vidor de Aplicaciones encontraremos el programa de instalacin del Na- vegador. Otros ficheros adicionales que puede incluir en la instalacin Si la aplicacin la vamos a entregar con datos en las tablas tendremos que incluir los ficheros con la extensin DAT e IDX correspondientes. Si hemos introducido informacin en campos de tipo objeto tendremos que incluir tambin los ficheros con extensin CND y CNI. Si hemos creado un fichero de ayuda propio (.HLP) con o sin fichero de con- tenidos (.CNT) tendremos que instalarlos tambin en el mismo directorio que el Navegador de Velzquez Visual. Si no tenemos archivo de ayuda propio, instalaremos los archivos Irun- ner.hlp e Irunner.cnt. Si el usuario final va a trabajar con bases de datos externas ODBC/DAO, al igual que antes, necesitar tener instalados en su mquina los controlado- res de ODBC/DAO. 10.3 Creacin de aplicaciones para ejecutar desde CD-ROM Al tratarse de un dispositivo de solo lectura, para crear una aplicacin para ejecutar desde un CD-ROM tendremos que tener en cuenta lo siguiente: El proyecto de Velzquez Visual no puede tener procesos que provoquen escritura en disco. En los formularios del proyecto no puede haber botones que disparen fun- ciones Aceptar ni Eliminar. Habr que aadir ficheros de los especificados anteriormente (ficheros de datos, ndices, contenedor, etc.). El ejecutor a utilizar ser VRunner.exe. 10 Instalacin de aplicaciones 11 Servidor de aplicaciones A continuacin vamos a explicar a travs de un esquema una serie de con- ceptos, tratados de forma general, con el propsito de ayudar a compren- der qu es el Servidor de Aplicaciones, qu servicios ofrece y cmo es su funcionamiento: Se puede definir el Servidor de aplicaciones Velzquez Visual como un pro- grama que se instala en un equipo, con el objeto de que otro equipo pueda acceder a las aplicaciones desarrolladas con Velzquez Visual que se hayan instalado previamente en el Servidor de aplicaciones Velzquez Visual (del primer equipo). Este funcionamiento corresponde a la denominada arquitectura Cliente- Servidor. Por esto, al equipo que tiene instalado el Servidor de aplicaciones Velzquez Visual se le denomina SERVIDOR y al equipo que pretende ac- ceder a las aplicaciones se denomina CLIENTE. El servidor y el cliente pueden estar dentro de una red local o bien dentro de la red que forma Internet. El servidor de aplicaciones Velzquez Visual tiene las siguientes caractersticas: Es el motor de las bases de datos de las aplicaciones que se hayan insta- lado en l. Gracias al servidor HTTP puede mostrar, por ejemplo, las pginas web de la empresa, tanto estticas como dinmicas (es decir, puede mostrar los datos que se deseen de las distintas aplicaciones Velzquez Visual instala- das en l). Finalmente, permite que los distintos equipos cliente puedan acceder a las carpetas del equipo Servidor que se hayan compartido. Razn por la cual se dice que el Servidor es tambin un Servidor de disco. Cuando un cliente quiere entrar en una de las aplicaciones Velzquez Vi- sual instaladas en el Servidor debe utilizar el Navegador de Velzquez Vi- 11 Servidor de aplicaciones 492 493 VELAZQUEZ VISUAL sual. La comunicacin entre Servidor y Cliente se realiza a travs de un protocolo (es decir, el conjunto de normas y procedimientos para la trans- misin de datos). Un ejemplo de protocolo es el conocido TCP/IP, utiliza- do en Internet. El protocolo utilizado en Velzquez Visual es el denominado VATP. Dicho protocolo es propio de Velzquez Visual y tiene asignado a nivel interna- cional su propio nmero de puerto (es el 690). VATP permite acceder a las distintas aplicaciones instaladas en el Servidor y a sus correspondientes datos, y tambin acceder a las carpetas compar- tidas por el Servidor de Disco. Si un cliente quiere visualizar las pginas web que tiene instaladas el Servi- dor puede utilizar tanto el Navegador de Velzquez Visual como cualquier otro navegador web. En este caso el protocolo de comunicacin que se uti- liza es el TCP/IP habitual. 11.1 Instalacin del Servidor La instalacin del Servidor de aplicaciones Velzquez Visual (tambin de- nominado Motor) es sencilla, ya que el asistente de instalacin indica los pasos a realizar. Una vez instalado, tenemos un fichero ejecutable, denomi- nado Vmotor.exe, situado en la senda C:\Archivos de Programa\Atica\Ve- lazquez\Program. Adicionalmente, el usuario debe instalar los drivers correspondientes a la llave de proteccin Sentinel, ya que el servidor est protegido con tales lla- ves los necesita para acceder a ellas. Dichos controladores se encuentran en el CD de instalacin, dentro de la carpeta Sentinel. Una vez realizada la instalacin podemos iniciar el servidor a travs de Me- n de Inicio/Programas/Velzquez/Servidor aplicaciones: 11.2 Interfaz del Servidor Cuando accedemos al Servidor de aplicaciones las distintas reas que componen la ventana principal del servidor son las siguientes: a) rea de configuraciones: contiene varias pestaas denominadas Aplica- ciones, Usuarios (Personas), Enganches, Transacciones y Archivos. Di- chas pestaas las iremos viendo con detalle posteriormente. b) rea de mensajes: til de cara sobre todo a los programadores. En ella podremos visualizar mensajes enviados desde procesos ejecutados en 11 Servidor de aplicaciones 494 495 VELAZQUEZ VISUAL el Servidor a travs de la funcin de proceso Mensaje. Es habitual el in- tercalar mensajes en procesos para depurarlos. En el caso de procesos que son ejecutados en el servidor de aplicaciones, la forma de visualizar dichos mensajes es en esta barra de salida. En ella tambin se visuali- zan mensajes internos del Servidor de Aplicaciones: c) rea de demonios: se trata de un proceso que definimos en la aplicacin y que son ejecutados de forma continuada mientras la aplicacin est en ejecucin. Son procesos de baja prioridad, es decir, su ejecucin no afecta al tra- bajo normal por parte de los usuarios. En esta rea se muestra, para cada demonio en ejecucin, informacin sobre el nombre del proceso, cada cuntos milisegundos es ejecutado y el n de veces que ha sido ejecutado: d) rea de tablas: muestra para la aplicacin seleccionada en ese momen- to la lista de sus tablas de datos, indicando el nmero de fichas que tie- ne cada una de ellas: e) rea de tareas: est divida por las pestaas Tareas programadas (accio- nes que el administrador del servidor puede crear para que se realicen con la periodicidad que se desee) y Tareas Ejecucin (muestra las tareas que han sido ejecutadas o se estn ejecutando). 11.3 Barra de mens La barra de mens del Servidor contiene las siguientes opciones: 11.3.1. Aplicaciones Con el men Aplicaciones podemos abrir una nueva aplicacin ( Abrir), cerrar la aplicacin seleccionada ( Cerrar), reiniciar la aplicacin seleccio- nada ( Reiniciar) o reiniciarla utilizando el fichero encriptado y comprimi- do de extensin .VAM( Reiniciar con vam). Tambin podremos detener ( Detener ejecucin) o continuar la ejecucin ( Continuar ejecucin) de la aplicacin seleccionada. Asimismo, podremos visualizar las propiedades de la aplicacin ( Propiedades) y los usuarios que pueden acceder a ella ( Usuarios). 11 Servidor de aplicaciones Abrir Cerrar Reiniciar Reiniciar con vam Detener ejecucin Continuar ejecucin Propiedades Usuarios 496 497 VELAZQUEZ VISUAL Podemos realizar, adems, una copia de seguridad en caliente de la aplica- cin ( Copia de seguridad) y poder en un momento dado recuperarla ( Recuperar copia). Finalmente, visualizamos un listado con las cuatro ltimas aplicaciones ins- taladas en el servidor y podemos cerrar el Servidor (Salir). 11.3.2. Editar Con el men Editar podemos cortar ( Cortar, Crtl+X), copiar ( Copiar, Ctrl+C) y pegar ( Pegar, Ctrl+V) lo que seleccionemos. Tambin es posible crear ( Nueva), suprimir ( Suprimir) o modificar ( Modificar) una Carpeta de usuarios, crear ( Nuevo), duplicar ( Duplicar), suprimir ( Suprimir) o modificar ( Modificar) un Usuario, crear ( Nue- vo), suprimir ( Suprimir) o modificar ( Modificar) un Grupo de usuarios, crear ( Nuevo), suprimir ( Suprimir) o modificar ( Modificar) un Grupo de mensajera, crear ( Nueva), suprimir ( Suprimir) o modificar ( Mo- dificar) una Mquina, crear ( Nueva) una Carpeta de archivo y crear ( Nueva), suprimir ( Suprimir) o modificar ( Modificar) una Tarea. Podemos crear una lista de aplicaciones ( Listas de aplicaciones), y crear un dominio web ( Dominios Web) para que sirva pginas html. Copia de seguridad Recuperar copia Cortar Copiar Pegar Nueva carpeta de usuarios Suprimir carpeta de usuarios Modificar carpeta de usuarios Nuevo usuario Duplicar usuario Suprimir usuario Modificar usuario Nuevo grupo de usuarios Suprimir grupo de usuarios Modificar grupo de usuarios Nuevo grupo de mensajera Suprimir grupo de mensajera Modificar grupo de mensajera Nueva mquina Suprimir mquina Modificar mquina Nueva carpeta de archivo Nueva tarea Suprimir tarea Modificar tarea Listas de aplicaciones Dominios Web Finalmente, podemos borrar el texto que aparece en el rea de mensajes ( Limpiar barra salida mensajes) y modificar la configuracin del Servidor ( Configuracin). 11.3.3. Servicios Con el men Servicios podemos arrancar ( Arrancar servidores, F5) o dete- ner ( Detener servidores, F8) todos los servicios VATP o tambin arrancar- los y detenerlos de forma individual, bien el VATP ( Arrancar servidor o Detener servidor), bien el http ( Arrancar servidor o Detener servidor). Es posible tambin expulsar ( Expulsar enganche) un enganche, expulsar ( Expulsar enganches usuario) los enganches de un usuario o expulsar to- dos los enganches (Expulsar todos los enganches). Finalmente, tambin podemos parar y deshacer las operaciones que est llevando a cabo una transaccin ( Deshacer transaccin). 11.3.4. Utilidades Con el men Utilidades podemos Regenerar ndices de algunas ( Tablas seleccionadas) o de todas ( Todas las tablas) las tablas de una aplicacin, as como tambin Regenerar rea de datos de algunas ( Tablas seleccio- nadas) o de todas ( Todas las tablas) las tablas de la aplicacin. 11 Servidor de aplicaciones Limpiar barra salida mensajes Configuracin Arrancar servidores Detener servidores Arrancar servidor Detener servidor Expulsar enganche Expulsar enganches usuario Deshacer transaccin Tablas seleccionadas Todas las tablas Tablas seleccionadas Todas las tablas 498 499 VELAZQUEZ VISUAL Tambin es posible desde esta opcin de men partir el contenedor para que cada tabla tengo el suyo propio (Partir contenedor por tabla). Finalmente, podemos visualizar un cuadro de dilogo (Registro de ficheros) donde consultar el estado de los ficheros que componen la aplicacin, agrupados por directorios. 11.3.5. Ver Con el men Ver se pueden mostrar u ocultar las diferentes reas del Servi- dor ( Barra del servidor, Barra de tareas y Barra de salida mensajes). Tambin es posible desde aqu que se puedan mostrar u ocultar las dife- rentes barras del Servidor: por una parte, la de men y la estndar junto con la posibilidad de poder personalizarlas (Barras de herramientas), y por otra parte, la barra situada en la parte inferior ( Barra de estado) que muestra informacin sobre el servidor VATP, el servidor HTTP, el hilo de control y los ficheros de las aplicaciones. Como comentamos anteriormente, las barras de men y estndar pueden personalizarse ( Personalizar). Asimismo, con esta opcin tambin se pueden crear nuevas barras de herramientas. Por ltimo, es posible visualizar en un determinado momento ( Licen- cias) el uso que se est haciendo de la licencia, es decir, informacin re- lativa a la IP del enganche y del socket, as como los puestos y enganches que consume. Adems podemos ver el nmero de serie, si se tiene licen- cia para servidor HTTP y cuntos puestos tenemos reservados para ac- ceso va web. Normalmente regeneraremos en primer lugar el rea de datos, para a continuacin regenerar los ndices. ADVERTENCIA Barra del servidor Barra de tareas Barra de salida mensajes Barra de estado Personalizar Licencias 11.3.6. Ventana Cada aplicacin instalada en el servidor dispone de una ventana que mues- tra su correspondiente rea de tablas. Con el men Ventana podemos or- ganizar la disposicin de cada una de dichas ventanas ( Cascada, Mo- saico horizontal y Mosaico vertical, Organizar iconos). Es posible minimizar el Servidor ( Ocultar) para que desaparezca de pan- talla. Al ocultarlo aparecer un icono en la barra de tareas de Windows. Si el icono tiene una luz verde significa que el Servidor est a la escucha. 11 Servidor de aplicaciones Cascada Mosaico horizontal Mosaico vertical Organizar iconos Ocultar El servidor est a la escucha 500 501 VELAZQUEZ VISUAL Si presenta una luz roja significa que el Servidor est parado. Para vol- ver a mostrar el Servidor en pantalla debemos hacer doble clic sobre el mencionado icono. Si hemos establecido en el Servidor la peticin de con- trasea de supervisor, se solicitar una contrasea de supervisor para su apertura. Finalmente, podemos seleccionar qu ventana de rea de tablas corres- pondiente a cada aplicacin instalada en el Servidor queremos mostrar (en la figura aparecen numeradas del uno al cuatro porque sirve cuatro aplicaciones). 11.3.7. Ayuda La opcin de men Ayuda ( Acerca de Velzquez Server) nos permite vi- sualizar informacin relativa a la licencia: nmero de serie, nmero de pues- tos, si dispone o no del Servidor http, versin del Servidor, desde cundo est funcionando y el nmero de conexiones realizadas desde entonces. 11.4 Barra de herramientas La barra de herramientas por defecto del Servidor de aplicaciones Velz- quez Visual contiene los siguientes botones: El servidor est parado Acerca de Velzquez Server Abrir aplicacin: abre un proyecto realizado con Velzquez Visual para que sea servido por el Motor. Configuracin: muestra el cuadro de dilogo Configuracin que permite modificar las propiedades del Servidor. Arrancar servidores (F5): pone en marcha los servicios VATP y HTTP (SI dispone de l) del Motor. Detener servidores (F8): detiene los servicios VATP y HTTP del Servidor. Expulsar enganche: anula el enganche que ha creado el usuario que ac- cede a una aplicacin. Si en ese momento el cliente estuviese ejecutando transacciones, se avisara en el Servidor sobre su existencia y si ste desea continuar con su expulsin; si el supervisor responde afirmativamente, las transacciones sern deshechas y el enganche expulsado. En caso de res- puesta negativa, las transacciones seguirn su curso y el enganche no se- r expulsado. En el caso de expulsar un enganche, el Cliente de ese en- ganche no podr seguir trabajando con la aplicacin. Nueva carpeta de usuarios: crea una carpeta de usuarios para poder or- ganizar los usuarios dados de alta en el Servidor. Suprimir carpeta de usuarios: elimina una carpeta de usuarios creada con anterioridad. Modificar carpeta de usuarios: permite realizar modificaciones en la car- peta dada de alta previamente. Nuevo usuario: crea un usuario para que pueda acceder a las aplicacio- nes que se desee. Duplicar usuario: el usuario que se crea tiene inicialmente las mismas propiedades del usuario seleccionado. Suprimir usuario: elimina un usuario creado con anterioridad. Modificar usuario: permite realizar modificaciones en el usuario dado de alta previamente. Nuevo grupo: crea un grupo de usuarios. Cuando ms de un usuario va- ya a tener acceso a las mismas aplicaciones, con los mismos estilos y con las mismas mquinas, nos es muy til crear un grupo de usuarios. De esta forma, no tendremos que dar de alta las aplicaciones y mquinas en las pro- piedades de cada usuario, pues heredarn las definidas en el grupo al que pertenezcan. Si hemos incluido un usuario en un grupo y posteriormente en las propiedades de dicho usuario modificamos algo de lo que hereda del grupo al que pertenece (mquinas, aplicaciones, estilos de usuarios en apli- caciones) prevalecer lo que est establecido en las propiedades del usuario sobre las del grupo. 11 Servidor de aplicaciones Abrir aplicacin Configuracin Arrancar servidores Detener servidores Expulsar enganche Nueva carpeta de usuarios Suprimir carpeta de usuarios Modificar carpeta de usuarios Nuevo usuario Duplicar usuario Suprimir usuario Modificar usuario Nuevo grupo 502 503 VELAZQUEZ VISUAL Suprimir grupo: elimina un grupo de usuarios creado con anterioridad. Modificar grupo: permite realizar modificaciones en el grupo de usuarios creado con anterioridad. Nueva mquina: crea una nueva mquina, es decir, un equipo que ten- dr acceso al Motor. Suprimir mquina: elimina una mquina creada anteriormente. Modificar mquina: modifica las propiedades de una mquina creada previamente. Barra del servidor: muestra u oculta la ventana correspondiente al rea de configuraciones. Barra de tareas: muestra u oculta la ventana correspondiente al rea de tareas. Barra de salida de mensajes: muestra u oculta la ventana correspon- diente al rea de mensajes. Acerca de: presenta el cuadro de dilogo Acerca de Vmotor que contie- ne informacin acerca del motor y su licencia. Ocultar: minimiza el Motor y lo representa con un icono situado en la ba- rra de tareas de Windows. 11.5 Configuracin del Servidor Como comentamos anteriormente existe en el Motor un cuadro de dilogo llamado Configuracin que permite modificar las propiedades del Servidor. Para abrirlo debemos pulsar el botn Configuracin (o bien ejecutar la opcin de men Editar/Configuracin). En primer lugar vamos a ir comentando las distintas propiedades del cua- dro de dilogo Configuracin, para posteriormente indicar cul es la confi- guracin bsica del Motor. Suprimir grupo Modificar grupo Nueva mquina Suprimir mquina Modificar mquina Barra del servidor Barra de tareas Barra de salida de mensajes Acerca de Ocultar Configuracin 11.5.1. Pestaa Estilos Poner el servidor a la escucha al ejecutarse el programa: cuando marcamos esta opcin, la prxima vez que iniciemos el Servidor pondr en marcha los servicios VATP y HTTP y se pondr a la escucha, oculto en la barra de ta- reas de Windows representado con el icono . Fichero LOG activo: si activamos esta opcin se generar un fichero .LOG en el que se irn almacenando todas las operaciones realizadas por los usuarios en las aplicaciones abiertas en el Servidor. Esta opcin es acon- sejable que la activemos solamente en caso de estar realizando algn tipo de depuracin para detectar algn posible error en la aplicacin. Pedir contrasea de supervisor para abrir: si hemos activado la opcin Poner el servidor a la escucha al ejecutarse el programa, para poder abrir el Servidor o ejecutar cualquier opcin del men de contexto desde la barra de tareas de Windows se pedir una contrasea, que debe ser la de cualquiera de los usuarios que hayan sido dados de alta como super- visores. Enviar mensajes a los supervisores: si activamos esta opcin, el supervisor de la aplicacin recibir a travs de un telegrama (un pequeo cuadro de dilogo que contiene un mensaje) aquellos mensajes que se hayan definido para esa licencia en el Servidor de licencias (se ampliar este concepto ms adelante en el apartado dedicado a dicha aplicacin). Tambin recibir un telegrama con los mensajes que haya en los procesos de cualquier aplica- cin que ejecute un cliente. 11 Servidor de aplicaciones Velzquez - Servidor de apli- caciones 504 505 VELAZQUEZ VISUAL Desbloqueo de usuarios automtico: debemos activar esta opcin si quere- mos desbloquear de forma automtica las cuentas de usuarios que han si- do bloqueadas por haber superado el nmero mximo de intentos de es- pecificacin de usuario/contrasea. Si esta opcin est activada deber es- pecificarse el nmero de minutos que deben transcurrir para desbloquear- las, y que por defecto son 10 minutos. Si esta opcin est activada y se cie- rra el Servidor, al volver a ejecutarlo las cuentas bloqueadas sern desblo- queadas automticamente. Nmero mximo de intentos usuario/contrasea: aqu se especifica el n- mero mximo de intentos de especificacin de usuario/contrasea que po- dr efectuar un usuario para ejecutar una aplicacin. Una vez excedido ese nmero de intentos, la cuenta ser bloqueada. La cuenta podr ser desblo- queada de forma manual accediendo a las propiedades del usuario y de- sactivando la casilla Cuenta bloqueada o de forma automtica activando la opcin anterior (Desbloqueo de usuarios automtico). Cierre del servidor: se puede programar el cierre del servidor de dos formas diferentes: Cierre automtico a una hora: si activamos esta propiedad tendremos que seleccionar en la lista desplegable la hora a la que el servidor ser cerrado. Al llegar la hora especificada el servidor ser cerrado. Cerrar servidor al finalizar la sesin de Windows: si activamos esta opcin no har falta cerrar el Motor antes de cerrar la sesin de Windows, al ce- rrarla ser el sistema quien se encargue de cerrar el Servidor. 11.5.2. Pestaa VATP Directorio del servidor: indica el directorio donde se encuentra instalado el Servidor de aplicaciones Velzquez Visual. Directorio para Copias de seguridad: directorio donde van a ser almacena- das las copias de seguridad de las aplicaciones. Enganches sin accesos expiran en: cuando un usuario se conecta con el Servidor y solicita una aplicacin se genera un enganche. A medida que el usuario va ejecutando la aplicacin, se van generando diferentes accesos de dicho enganche en el Servidor. En esta pestaa se indica el tiempo que ha de transcurrir para que un enganche sin accesos sea dado por muerto (en horas y/o minutos). Una vez transcurrido este tiempo, un usuario cuyo enganche ha sido extinguido no podr seguir trabajando con la aplicacin. Por ejemplo, si se consulta una ficha, aparecern los controles de edicin vacos, rejillas vacas, etc. Ver nombre completo en enganches: si activamos esta opcin, al consultar enganches veremos el nombre completo del usuario. Si no est activada veremos el nombre corto. 11.5.3. Pestaa HTTP Directorio de la Web: directorio donde se encuentran las pginas web ex- ternas a los proyectos de Velzquez Visual. Archivo Html por defecto: pgina web que se presentar por defecto cuan- do se conecte desde un navegador de Internet con el Servidor. sta debe 11 Servidor de aplicaciones Todos los archivos que estn en ese directorio son descargables, as que debemos tener en cules tenemos all. Adems, por defecto, est configurado para que sea el directorio donde est instalado el motor: C:\Archivos de programa\Atica\Velazquez\ program, as que si no lo cambiamos, se podrn descargar todos los archivos que all se encuentran. Debemos tener cuidado de no dejar all copias de los mapas, u otros archivos sensibles. ADVERTENCIA 506 507 VELAZQUEZ VISUAL ser un archivo HTML, no puede ser una pgina web interna de una aplica- cin Velzquez Visual. Si se especifica la pgina Html en este parmetro, para acceder a ella desde cualquier navegador de Internet simplemente bastar con escribir http:// seguido de la IP o el nombre de Servidor. % Calidad de imgenes: Velzquez Visual guarda las imgenes al 100% de calidad, pero con esta opcin podemos indicar al Motor a qu calidad mos- trar las imgenes cuando las tenga que servir. Puerto de escucha: el puerto estndar para la escucha para HTTP es el 80, y ste es el que se aplica por defecto al servidor HTTP. Si queremos modificar el nmero de puerto debemos especificarlo en este parmetro. No es posible modificar el puerto de escucha si el Servidor HTTP est arrancado; debemos pararlo previamente. Si hemos cambiado el nmero de puerto del Servidor HTTP, para poder acceder desde un explorador web a las pginas del mismo, en la especificacin de la URL se deber incluir el nmero de puerto a travs del cual debe conectarse precedido de dos puntos (:). Por ejemplo, se ha cambiado el nmero de puerto HTTP por el 81; para que un usuario pueda co- nectarse con este Servidor a travs de un explorador web, en la barra de di- recciones del explorador tendra que escribir: http://IP_SERVIDOR:81/ Reservar puesto vatp para la web: los enganches va web no consumen puestos concurrentes, pero, si se ejecutan procesos va web, es necesario que exista un enganche libre; si es el caso, puede activar esta opcin para que el servidor siempre deje un enganche libre. 11.5.4. Pestaa iRunner nicamente ser necesario reservar puestos VATP cuando desde una pgina web se lance un proceso del mapa. Si desde nuestra pgina web no se ejecutan procesos, es decir, al servidor slo se realizan peticiones de otros elementos de Velzquez Visual, no necesitamos reservar el puesto: Bsquedas, Pginas Html, Componentes Html. La razn de reservar un puesto VATP es que el servidor necesita controlar las transacciones que el proceso realice, y esto nicamente se puede hacer a travs del protocolo VATP. ADVERTENCIA Cada versin del Navegador Velzquez Visual (iRunner) se corresponde con una versin determinada del Servidor. En este apartado indicaremos la ver- sin del Navegador que se corresponde con la del Servidor (y no la del ma- pa). De esta forma, cuando un usuario se conecte con el Servidor desde un Navegador de una versin anterior, se le presentar un mensaje informan- do que tiene una versin antigua de Navegador, y le da la posibilidad de ac- tualizarlo automticamente. Es decir, el Servidor podr actualizar el Nave- gador del cliente cuando ste se conecte. Podemos usar versiones del na- vegador superiores a la del servidor sin ningn problema. 11.5.5. Pestaa Licencia Si vamos a realizar el arranque del Servidor utilizando el Servidor de licen- cias deberemos indicar previamente en esta pestaa la correspondiente clave de licencia para la prxima vez que se arranque el Motor. 11.5.6. Configuracin bsica La configuracin bsica del Motor consiste en activar, en la pestaa Estilos, las opciones Poner el servidor a la escucha al ejecutarse el programa y Ce- rrar servidor al finalizar sesin de Windows y desactivar la opcin de Fiche- ro LOG activo. 11 Servidor de aplicaciones Si utilizamos un acceso directo a una aplicacin con el iRunner debemos comprobar, tras la actualizacin de ste, que el acceso directo apunte al navegador actualizado y no al antiguo. En el caso de que sobreescribamos sobre el anterior no debera haber problema. ADVERTENCIA 508 509 VELAZQUEZ VISUAL 11.6 rea de configuraciones 11.6.1. Pestaa Aplicaciones En esta pestaa aparecen representadas las aplicaciones Velzquez Visual que hemos instalado en el Servidor. Por defecto el Servidor tiene instaladas dos aplicaciones que se vern ms adelante: el Historial del servidor y el Servidor de licencias. La informacin de las aplicaciones abiertas es guardada por el servidor en el archivo fuvm.vuf en el directorio en el que est instalado, y del cual es conveniente guardar copias de seguridad en caso de modificaciones acci- dentales, reinstalacin del servidor, etc. Instalacin de una aplicacin Vamos a ver el proceso de instalacin a travs del siguiente ejemplo: Ejemplo: Instalacin de la aplicacin Agenda.map Queremos instalar en un Servidor la aplicacin Agenda.map. Para ello se- guiremos los siguientes pasos: Pulsamos el botn Abrir aplicacin (o se ejecuta la opcin de men Apli- caciones > Abrir. A continuacin seleccionamos, utilizando el cuadro de dilogo Abrir, el nombre del mapa de Velzquez Visual que queremos instalar en el Ser- vidor. e Abrir aplicacin Una vez se pulsa el botn Abrir, la aplicacin aparecer representada en el rea de configuraciones del Motor, dentro de la pestaa Aplicaciones. Propiedades de una aplicacin Vamos a ver las propiedades utilizando el mapa que instalamos en el apar- tado anterior. Ejemplo: Visualizar las propiedades de la aplicacin Agenda.map Queremos ver las propiedades en un Servidor de la aplicacin Agenda.map. Para ello seguimos los siguientes pasos: Con la aplicacin agenda seleccionada, pulsamos el botn derecho del ra- tn, y seleccionamos en el men contextual la opcin Propiedades apli- cacin (o seleccionando la opcin de men Aplicaciones/Propiedades) pa- ra mostrar el cuadro de dilogo Propiedades de la aplicacin: 11 Servidor de aplicaciones e Propiedades aplicacin 510 511 VELAZQUEZ VISUAL Dicho cuadro de dilogo muestra las propiedades siguientes: Cdigo: nmero de la aplicacin abierta. Nombre, Versin, Aplicacin desarrollada por y N Licencia: son las especi- ficadas para dicho mapa en el cuadro de dilogo Propiedades proyecto del Editor de Proyectos de Velzquez Visual). Alias: ser el que se presente al usuario en la lista de aplicaciones al conec- tar el Navegador con el Servidor. Si no se indica ninguno, la aplicacin apa- recer en la lista de aplicaciones con lo indicado en la propiedad Nombre. Incluir en la lista de aplicaciones por defecto: si marcamos esta propiedad la aplicacin figurar en la lista de aplicaciones que se presenta al realizar la conexin desde el Navegador con el Servidor. N puestos: indica cuntos puestos estn utilizando la aplicacin. 11.6.2. Pestaa Usuarios En esta pestaa aparecen los Usuarios (e incluidas aqu las Carpetas de usuarios), los Grupos de usuarios, los Grupos de mensajera y las Mquinas que estn creadas en el Motor. e Por defecto aparece creado, por un lado, un usuario denominado Supervi- sor, y por otro lado tambin una mquina denominada Toda la red. En este apartado se va a crear en primer lugar una Carpeta de usuarios y en segundo lugar una Mquina. Las configuraciones de usuarios y grupos de usuarios se guardan en el ar- chivo fuvm.vuf en el directorio del servidor, por lo que es conveniente hacer copias de seguridad de este archivo de forma que en caso de modificacio- nes accidentales, reinstalacin del servidor, etc., podamos hacer uso de es- te archivo y recuperar los datos. Creacin de una Carpeta de usuarios Se va a realizar este proceso utilizando para ello el siguiente ejemplo: Ejemplo: Creacin de la carpeta Supervisores Vamos crear una carpeta de usuarios para introducir en ella a dos usuarios que se crearn posteriormente. Los pasos a realizar son los siguientes: Dentro del rea de configuraciones pinchamos con el botn izquierdo del ratn sobre la pestaa Usuarios. Aparecer, creado por defecto, el usuario Supervisor. Entonces pulsamos el botn Nueva carpeta de usuarios de la barra de herramientas (o bien usamos la opcin de men Editar/Carpetas de usua- rios/Nueva), crendose automticamente la carpeta. Si pulsamos el botn Modificar carpeta de usuarios de la barra de he- rramientas (o bien seleccionando la opcin de men Editar/Carpetas de usuarios/Modificar) se mostrar el cuadro de dilogo Carpeta de usuarios en 11 Servidor de aplicaciones e Nueva carpeta de usuarios Modificar carpeta de usuarios 512 513 VELAZQUEZ VISUAL el cual podemos modificar el nombre de la carpeta. Dicho nombre lo susti- tuimos por Supervisores. Al pulsar el botn Aceptar, la nueva carpeta aparecer representada con el nombre asignado en el Servidor. Creacin de una mquina Una mquina engloba aquellos equipos que tendrn acceso al Servidor. Va- mos a explicar los pasos a realizar utilizando un nuevo ejemplo. Ejemplo: Creacin de una mquina Vamos a crear una nueva mquina que va a ser la que se asignar al De- partamento de Administracin. Dicho departamento forma una red con equipos entre la IP 100.100.120.0 y la IP 100.100.120.255. Los pasos a rea- lizar son los siguientes: Dentro de la pestaa Usuarios pulsamos el botn Nueva mquina de la barra de herramientas (o tambin podemos seleccionar la opcin de men Editar/Mquinas/Nueva...). Esto mostrar el cuadro de dilogo Mquina. En las propiedades del cuadro de dilogo escribiremos lo siguiente: Nombre: en nuestro ejemplo Administracin. Nombre completo: es una propiedad opcional. Escribimos Departamento de Administracin. e e Nueva mquina 11 Servidor de aplicaciones Ip: si vamos a crear una sola mquina para una sola IP se rellenara nica- mente el valor Inicial. Como en el ejemplo mencionamos un rango de IPs, marcamos la opcin Varios y rellenamos como valor Inicial 100.100.120.0 y como valor Final 100.100.120.255. Al pulsar el botn Aceptar aparecer representada esa mquina en el apar- tado Mquinas de la pestaa Aplicaciones: 11.6.3. Pestaa Enganches Cuando un usuario abre una aplicacin con el Navegador de Velzquez Vi- sual se genera un enganche con el Servidor. e 514 515 VELAZQUEZ VISUAL Adicionalmente, cada peticin que el usuario hace al Servidor durante la ejecucin de la aplicacin generar un acceso. Cada vez que se establezca un enganche o se finalice, ste ser dado de alta automticamente en la aplicacin del Historial del Servidor. Dentro del rea correspondiente a esta ventana podemos ver informacin relativa a: Aplicacin: nombre de la aplicacin abierta en el enganche. Usuario: si la aplicacin tiene activada la peticin de usuario se mostrar el nombre del mismo. Mquina: IP de la mquina desde la que el usuario est ejecutando la apli- cacin. Inicio: da de la semana y hora en que el enganche ha sido establecido. Acceso: hora del ltimo acceso realizado en dicho enganche. Transac.: indica el nmero de transacciones que est realizando el enganche. 11.6.4. Pestaa Transacciones Las transacciones son operaciones que implican escritura en disco. La ar- quitectura que utiliza el Servidor funciona transaccionalmente a dos niveles diferentes: Si durante la ejecucin de una transaccin generada por un usuario se pro- duce una finalizacin anmala de la misma, ser deshecha solamente esa transaccin, no afectar al resto de los clientes. Si esto ocurre en el propio Servidor, se deshar todas las que estuvieran pendientes de finalizar. Si en la mquina donde est instalado el Servidor se hubiese producido una terminacin anmala del mismo mientras se estuviesen ejecutando tran- sacciones sobre una aplicacin, al volver a arrancar el Servidor, el progra- ma advertir sobre la existencia de transacciones pendientes de finalizar y da opcin al supervisor para reconstruir las bases de datos de la aplicacin. En el caso de que no las reconstruya se indicar en la lista de aplicaciones que la aplicacin tiene transacciones pendientes de finalizar con el icono junto al nombre de la misma. Para reconstruir las bases de datos bas- tar con que seleccionemos la aplicacin en la lista de aplicaciones y eje- cutemos la opcin de men Aplicaciones/Reiniciar. Por otro lado, supongamos un proceso que transacciona pero que en la transaccin no se realizan operaciones durante ms de cuatro minutos. En este caso se entender que el cliente que lo lanz est colgado o no res- ponde, y la transaccin ser deshecha. Un ejemplo es un proceso en el que se abra un formulario: si ste permanece abierto durante ms de 4 minutos, se terminar el proceso y se deshar la transaccin efectuada. Esta arquitectura cliente-servidor incluye un potentsimo sistema de control de bloqueos. Por ejemplo, desde dos usuarios se ejecutan sendos proce- sos durante la ejecucin de los cuales se produce una colisin (en los dos se intenta bloquear la misma ficha), uno continuar con la transaccin y la del otro ser deshecha por el sistema, que ejecutar una serie de reinten- tos, tras los cuales, si no ha sido posible continuarla, avisar al usuario si quiere reintentar y, en caso afirmativo, la transaccin permanecer a la es- pera hasta que finalice la del otro usuario y, una vez finalizada, la lanzar de nuevo. Los bloqueos son realizados a nivel de registro, no a nivel de tabla. En esta pestaa Transacciones podremos obtener informacin sobre: Ttulo Transaccin: nombre de la transaccin que est siendo ejecutada. Aplicacin: nombre de la aplicacin sobre la que se est ejecutando la tran- saccin. Usuario: nombre del usuario que ha disparado la transaccin. Inicio: hora en que la transaccin ha comenzado. Acceso: hora en la que se ha efectuado el ltimo acceso al Servidor. N de operaciones realizadas: nmero de operaciones realizadas en la tran- saccin. 11 Servidor de aplicaciones Transacciones pendientes de finalizar 516 517 VELAZQUEZ VISUAL Cada nueva transaccin que reciba el Servidor ser presentada en la pri- mera posicin de la lista de transacciones. Las transacciones tendrn un icono diferente segn su estado. Los posibles estados son: La transaccin se est ejecutando . La transaccin est fuera de control y ha entrado otra en el Servidor con la que colisiona. El Servidor rechaza la que est fuera de control y con- tina la ejecucin de la nueva . La transaccin ha finalizado correctamente . La transaccin ha sido deshecha . Las notificaciones sobre estado de las transacciones que aparecen en esta pestaa no desaparecen inmediatamente al concluir, sino que permanecen cierto tiempo en pantalla para que el Administrador del sistema tenga tiem- po de monitorizarlas. Una vez transcurrido dicho tiempo desaparecern de la lista de transacciones. Es posible abortar manualmente una transaccin que est siendo ejecuta- da. Para ello la seleccionamos en la pestaa de Transacciones y ejecutamos la opcin Deshacer transaccin del men de contexto que se presenta al hacer clic con el botn derecho del ratn sobre la misma: Nos pedir confirmacin antes deshacerla. 11.6.5. Pestaa Archivos Motor, adems de servir aplicaciones de Velzquez Visual y pginas web, tambin funciona como servidor de disco, es decir, podemos compartir car- petas que sern accesibles a travs del Explorador de equipos del Navega- dor Velzquez Visual. Para crear una nueva carpeta compartida pulsamos sobre el rea corres- pondiente a esta pestaa con el botn derecho del ratn y selecciona- mos la opcin Nueva... del men contextual que se muestra. Al se- leccionar dicha opcin se presenta el cuadro de dilogo Compartir car- peta de archivo. Transaccin ejecutndose Transaccin: colisin Transaccin finalizada correc- tamente Transaccin deshecha Nueva Los parmetros a cumplimentar son: Nombre de la carpeta compartida: nombre que va a tener la carpeta en el cliente cuando se conecte con el SDV (Servidor de Disco Velzquez). Senda: ruta de la carpeta a compartir. Si pulsamos el botn se mostra- r el cuadro de dilogo Seleccione carpeta a compartir para seleccionar di- cha ruta y la correspondiente carpeta: 11 Servidor de aplicaciones Examinar 518 519 VELAZQUEZ VISUAL Permisos: permisos que van a tener los usuarios sobre las carpetas. Para aadir un permiso pulsamos el botn Agregar, para seleccionar en pri- mer lugar un grupo de usuarios. Una vez seleccionado aparecer la prime- ra carpeta compartida. Por defecto, el tipo de acceso por parte de los usuarios es de Control total, aunque es posible modificar estos valores. La informacin sobre la configuracin de las carpetas compartidas se guar- da en el archivo carcom.vuf en la carpeta en que est instalado el servidor. Por tanto, es importante realizar copias de seguridad de este archivo para, en caso de modificaciones accidentales, reinstalacin del servidor, etc., po- der recuperar la configuracin guardada en este archivo. Vamos a realizar a continuacin un ejemplo para crear una nueva carpeta compartida en el Servidor: Ejemplo: Creacin de una carpeta compartida Vamos a crear una carpeta compartida en el Servidor denominada Admi- nistracin y que va a estar en la senda c:\Agenda. Los pasos a realizar son los siguientes: Dentro de la pestaa Archivos pulsamos con el botn derecho del ratn so- bre el rea blanca y se selecciona la opcin del men contextual Nueva... (o bien la opcin de men Editar/Carpetas de archivos/Nueva...) para que se muestre el cuadro de dilogo Compartir carpeta de archivos. En dicho cuadro de dilogo se definen las siguientes propiedades: Nombre de la carpeta compartida: Administracin. Senda: pulsamos el botn para mostrar el cuadro de dilogo Seleccio- ne carpeta a compartir y elegimos la senda c:\\Agenda (si no se tiene esta carpeta creada se puede crear una nueva carpeta en Windows para poder asignarla en este apartado). Al pulsar el botn Aceptar dicha carpeta aparecer en la lista de carpetas de la pestaa Archivos. e Agregar Examinar 11.7 Configuracin de usuarios Como hemos comentado en un apartado anterior, la primera vez que eje- cutamos el Servidor se crea un usuario Supervisor por defecto. Si queremos eliminarlo debemos crear previamente otro usuario antes de hacerlo. En el rbol de usuarios el Supervisor es identificado por el icono Supervisor. Para crear un usuario pinchamos con el botn izquierdo del ratn sobre la pestaa Usuarios. Dentro de la carpeta Usuarios aparecer creado por de- fecto el usuario Supervisor. Pulsamos el botn Nuevo usuario (o bien seleccionamos la opcin de men Editar/Usuarios/Nuevo...) para que se muestre el cuadro de dilogo Usuario. 11 Servidor de aplicaciones Supervisor Nuevo usuario 520 521 VELAZQUEZ VISUAL Las propiedades de dicho cuadro de dilogo son las siguientes: Nombre: nombre que deber escribir el usuario en la ventana de peticin de usuario que se presenta al ejecutar una aplicacin de Velzquez Visual. Nombre completo: nombre completo de dicho usuario. Contrasea: contrasea que deber escribir el usuario en la ventana de pe- ticin de usuario que se presenta al abrir una aplicacin Velzquez Visual desde el Navegador. Repetir contrasea: confirmacin de la contrasea escrita en el parmetro anterior. Carpeta: si hemos creado carpetas de usuarios es posible seleccionar aqu la carpeta en la que incluiremos al usuario. Estilos: Supervisor: activaremos este estilo si deseamos que el usuario sea Super- visor. El Supervisor puede, por ejemplo, reconstruir el sistema, crear y mo- dificar otros usuarios, abrir el servidor, etc. Desconfiar: si a un usuario le marcamos esta opcin, el Servidor crear un LOG independiente con las operaciones que ste vaya realizando al ejecu- tar las aplicaciones. De esta manera, el supervisor del sistema podr vigilar todos sus movimientos. En el rbol de usuarios, el que tenga activado este estilo ser identificado por el icono Desconfiar. Al acceder a la pestaa de enganches, si existe uno de un usuario en el que se desconfa, se mos- trar junto al enganche el icono Desconfiar. Cuenta desactivada: esta opcin nos permite desactivar la cuenta de un usuario sin que para ello tengamos que eliminarlo. En el momento que de- sactivemos esta opcin, el usuario podr acceder de nuevo a las aplicacio- nes del Servidor. Cuenta bloqueada: si un usuario intenta abrir una aplicacin con una con- trasea errnea, tantas veces como se haya especificado en el cuadro de dilogo Configuracin, automticamente el Servidor bloquear dicha cuen- ta. Cuando esto ha ocurrido, queda ya de mano del supervisor del sistema el desbloquearla. Debe cambiar contrasea en siguiente conexin: si activamos este estilo, la siguiente vez que el usuario se conecte con el Servidor, se le avisar que cambie su contrasea por una nueva. La contrasea nunca caduca: si activamos esta opcin, la contrasea asig- nada al usuario nunca caducar; si no la activamos, se entender que sta caducar el da y la hora especificados en las opciones de inicio. Caducidad cuenta: Esta opcin no puede ser activada por el Supervisor del sistema, sino que es el servidor el que la activa. Pero el Supervisor s puede desmarcarla para desbloquear la cuenta. ADVERTENCIA Desconfiar Desconfiar Tiene caducidad: si queremos establecer una fecha de caducidad a la cuen- ta del usuario, bastar con que activemos esta opcin y especifiquemos la fecha y hora en que sta caducar. Enganches simultneos: Sin lmite: cada vez que el usuario pide una aplicacin al Servidor genera un enganche. Si activamos esta propiedad el usuario podr generar varios en- ganches simultneos. N: si no activamos la opcin Sin lmite especificaremos en este parmetro el nmero de enganches simultneos permitidos al usuario. El cuadro de dilogo Usuarios presenta en la parte inferior una serie de pes- taas. Que son las siguientes: Pestaa Grupos: si hemos creado grupos de usuarios seleccionaremos el grupo o grupos donde queremos incluir al usuario. Para seleccionar un grupo de usuarios pulsaremos el botn Aadir grupo. Se presentar un men desplegable con los grupos de usuarios disponibles para as selec- cionar el deseado. Un usuario puede estar vinculado a varios grupos. Si queremos quitar al usuario de un grupo determinado, seleccionaremos el grupo en la lista y pulsaremos el botn Quitar grupo. En el apartado siguiente veremos cmo crear un Grupo de usuarios. Pestaa Mensajera: desde el Navegador Velzquez Visual un usuario puede enviar Telegramas (mensajes) al resto de los usuarios. Solamente po- dr enviar telegramas a usuarios pertenecientes al mismo grupo o grupos de mensajera que l. Si hemos creado grupos de mensajera seleccionaremos el grupo o grupos donde incluiremos al usuario. Para seleccionar un grupo de mensajera pul- saremos el botn Aadir grupo de mensajera. Se presentar un men desplegable con los grupos de mensajera disponibles para poder seleccio- nar el deseado. Un usuario puede estar vinculado a varios grupos de mensajera. Si queremos quitar al usuario de un grupo de mensajera determinado, se- leccionar el grupo en la lista y pulsar el botn Quitar grupo de mensa- jera. Pestaa Aplicaciones: en este apartado seleccionaremos la aplicacin o aplicaciones a las que el usuario podr tener acceso. Si hemos activado al usuario la propiedad Supervisor, automticamente ser asignado como usuario autorizado de la aplicacin del Historial del servidor aunque sta no aparecer en la lista de aplicaciones del mismo. 11 Servidor de aplicaciones Grupos Aadir grupo Quitar grupo Mensajera Aadir grupo de mensajera Quitar grupo de mensajera Aplicaciones 522 523 VELAZQUEZ VISUAL Al pulsar el botn Agregar se presenta un men desplegable con las aplicaciones disponibles abiertas en el Servidor en las que hayamos activa- do la peticin de usuario. Al seleccionar la aplicacin deseada sta apare- ce en la lista de aplicaciones del usuario. Con el botn Quitar se suprime la aplicacin seleccionada de entre las que aparecen en la lista de aplicaciones del usuario. El botn Propiedades nos permite establecer los permisos que el usua- rio tendr en la aplicacin seleccionada. Para ello debemos seleccionar la aplicacin en la lista y pulsar este botn. Se presentar el cuadro de dilo- go Permiso: Este cuadro de dilogo tiene las siguientes propiedades: Privilegio: nivel de privilegio del usuario en la aplicacin. Grupo: los grupos de usuarios de una aplicacin son necesarios cuando en el proyecto de Velzquez hemos creado variables globales con la propiedad Por grupos de usuarios activada. Esta propiedad permite que, en tiempo de ejecucin, la variable tenga un valor diferente para cada grupo. Pues bien, en este parmetro simplemente habr que escribir un nmero, que ser in- dicativo del grupo al que pertenecer dicho usuario. Obviamente, dicho n- mero no puede ser superior al nmero mximo de grupos de usuarios defi- nido en el proyecto de Velzquez. Men inicial: men inicial de la aplicacin para dicho usuario. Perfil: existe un producto, el Editor de Personalizaciones Velzquez Visual, que permite personalizar y crear informes y dibujos en una aplicacin de Ve- En el Navegador existen ciertas opciones de listas ya preprogramadas que estarn activadas o desactivadas segn el nivel de privilegio de los usuarios; stas son: Modificar campo: para que est activa el usuario deber tener un nivel de privilegio igual o superior a 92. Modificar campo si: para que est activa el usuario deber tener un nivel de privilegio igual o superior a 92. Fundir fichas: para que est activa el usuario deber tener un nivel de privilegio igual o superior a 92. Exportar ASCII: para que est activa el usuario deber tener un nivel de privilegio igual o superior a 90. ADVERTENCIA Agregar Quitar Propiedades lzquez Visual. Si hemos creado alguna personalizacin aparecer listada en el combo box. Por tanto, cada usuario puede tener sus propios informes y dibujos personalizados. A cada usuario de la aplicacin slo le podemos asignar una personaliza- cin, pero una misma personalizacin puede ser asignada a diferentes usuarios. En esta propiedad seleccionamos en el combo box la personalizacin que se quiere asignar al usuario. A partir de este momento dicho usuario tendr a su disposicin tanto los di- bujos e informes que hayamos personalizado como los que hayamos aa- dido especficamente para la personalizacin asignada. Estilos: si en el proyecto de Velzquez Visual hemos creado estilos de usua- rios, stos aparecern en este control. A la izquierda de cada estilo de usua- rio se incluye una casilla de verificacin que permitir activarlo o desacti- varlo. Con los botones Marcar Todos y Desmarcar todos se puede, respec- tivamente, marcar o desmarcar todos los estilos de la aplicacin. Pestaa Mquinas: si hacemos doble clic sobre el rea correspondien- te a esta pestaa se presentar el cuadro de dilogo Mquinas autorizadas, que muestra todas las mquinas que estn creadas en el Servidor: 11 Servidor de aplicaciones Si hemos creado personalizaciones durante la ejecucin de la aplicacin, hay que cerrar la aplicacin y reiniciarla para que los cambios estn disponibles para los usuarios. ADVERTENCIA Mquinas 524 525 VELAZQUEZ VISUAL Para seleccionar una mquina debemos activar la casilla de verificacin que se encuentra junto al nombre de la misma. La mquina o mquinas seleccionadas aparecern en la lista de mquinas autorizadas del usuario. Para desasignar una mquina a un usuario haremos doble clic sobre ella en las propiedades del usuario y desactivaremos la casilla de verificacin co- rrespondiente. Pestaa Observacin: en esta pestaa es posible escribir cualquier co- mentario que queramos realizar sobre el usuario. A continuacin realizaremos un ejemplo para ver la configuracin de usuarios. Ejemplo: Creacin de dos usuarios Vamos a crear dos nuevos usuarios que deben acceder a la aplicacin Agenda.map instalada anteriormente y que forman parte del Departamento de Administracin. Los pasos a realizar son los siguientes: Dentro de la pestaa Usuarios pulsamos el botn Nuevo usuario de la barra de herramientas (o bien seleccionamos la opcin de men Editar/Usuarios/Nuevo..) para que se muestre el cuadro de dilogo Usuario. En l rellenamos los siguientes datos correspondientes al primer usuario. Nombre: Usuariouno. Nombre completo: El primer usuario. La contrasea nunca caduca: Activamos esta opcin. Enganches simultneos: Sin lmite. e Observacin Nuevo usuario Seleccionamos la pestaa Aplicaciones y pulsando el botn Agregar es- cogemos la aplicacin Agenda. Dicha aplicacin aparecer en la lista de aplicaciones del usuario. Al hacer doble clic sobre la aplicacin para que aparezca el cuadro de di- logo Permiso rellenamos sus propiedades con los siguientes datos: Privilegio: 90 Grupo: 0 Men inicial: Men General Perfil: .Ninguno 11 Servidor de aplicaciones e Agregar 526 527 VELAZQUEZ VISUAL A continuacin seleccionamos la pestaa Mquinas y en su correspondien- te ventana hacemos doble clic para que aparezca el cuadro de dilogo M- quinas autorizadas a: Usuariouno. En dicho cuadro se marca la casilla co- rrespondiente a la mquina denominada Administracin. La mquina selec- cionada aparecer en la lista de mquinas del usuario: De esta manera el nuevo Usuariouno tiene autorizacin para acceder a la aplicacin Agenda utilizando la mquina Administracin (que tiene el rango de IPs vista en el apartado de Creacin de mquina). Seguidamente creamos el segundo usuario. Podemos utilizar el mismo pro- cedimiento utilizado para crear el primer usuario. Pero para hacerlo ms r- pido esta vez optamos por seguir otro camino: Con el usuario Usuariouno del rbol Usuario de la pestaa Usuarios selec- cionado, pulsamos el botn Duplicar usuario de la barra de herramien- tas (o bien seleccionamos la opcin de men Editar/Usuarios/Duplicar). De esta manera se presenta de nuevo el cuadro de dilogo Usuario, pero en es- e Duplicar usuario te caso, al duplicar el usuario, tiene la particularidad de que ya hereda las propiedades del usuario duplicado. Por lo tanto, slo tenemos que definir las propiedades de usuario y contrasea: 11.8 Configuracin de grupos de usuarios Los grupos de usuarios se utilizan en los casos en que ms de un usuario vaya a tener acceso a las mismas aplicaciones, con los mismos estilos y con las mismas mquinas. De esta forma, no tendremos que dar de alta las aplicaciones y mquinas en las propiedades de cada usuario, pues heredarn las definidas en el gru- po al que pertenezcan. Si hubisemos incluido un usuario en un grupo y posteriormente en las propiedades de dicho usuario se modifica algo de lo que hereda del grupo al que pertenece (mquinas, aplicaciones, estilos de usuarios en aplicaciones) prevalecer lo que est establecido en las pro- piedades del usuario sobre las del grupo. Asimismo, los grupos de usuarios tambin son necesarios cuando vayamos a utilizar el Servidor de disco de Velzquez Visual. 11 Servidor de aplicaciones e 528 529 VELAZQUEZ VISUAL Para crear un nuevo Grupo de usuarios debemos pulsar, desde la pestaa Usuarios, el botn Nuevo grupo de la barra de herramientas. Se mos- trar el cuadro de dilogo Grupo de usuarios. Dicho cuadro de dilogo tiene las siguientes propiedades: Nombre: nombre que se le va a asignar al grupo de usuarios. Pestaa Usuarios: aqu se irn seleccionando uno a uno los usuarios que van a formar parte del grupo. Para aadir un usuario se pulsa el botn Nuevo usuario. Se presentar el cuadro de dilogo Seleccin de miembros del grupo: En el panel izquierdo aparecer la lista de usuarios seleccionables. Para se- leccionar uno haremos doble clic sobre l. Desaparecer del panel izquier- Nuevo grupo Usuarios Nuevo usuario do y se mostrar en el derecho, que es el panel de usuarios seleccionados en el grupo. Pestaa Aplicaciones: tiene la misma funcionalidad que la pestaa Apli- caciones vista en el apartado dedicado a los usuarios. Pestaa Mquinas: tiene la misma funcionalidad que la pestaa Mqui- nas vista en el apartado dedicado a los usuarios. Pestaa Archivos: en el rea correspondiente a esta pestaa podemos definir las diferentes carpetas compartidas del Servidor de disco a las que puede acceder el grupo de usuarios. Para ello debemos pulsar el botn Agregar, que mostrar un men desplegable con las carpetas compartidas por el Servidor. Al seleccionar la carpeta deseada sta aparece en la lista de carpetas del Grupo de usuarios. Los botones Quitar y Propiedades permiten, respectivamente, eliminar y mostrar el cuadro de dilogo Permi- sos (que se ver a continuacin) de la carpeta seleccionada en la lista de carpetas del Grupo de usuarios: Es posible definir para cada una de las carpetas de la lista de carpetas del grupo de usuarios el tipo de acceso que van a tener (si pueden crear nue- vas carpetas, borrar, copiar o pegar). Si hacemos doble clic con el botn iz- quierdo del ratn sobre una de las carpetas de la lista de carpetas del Gru- po de usuarios (o bien seleccionamos una carpeta de dicha lista y pulsamos el botn Propiedades) se presentar el cuadro de dilogo Permisos en el cual podemos definir los citados niveles de acceso. 11 Servidor de aplicaciones Aplicaciones Mquinas Archivos Agregar Quitar Propiedades 530 531 VELAZQUEZ VISUAL Para definirlos bastar con que marquemos o desmarquemos las casillas correspondientes a cada tipo de acceso (Lectura, Escritura, Borrado de ar- chivos o carpetas y Creacin de nuevas carpetas, respectivamente). Veremos a travs de un ejemplo cmo crear un nuevo grupo de usuarios: Ejemplo: Creacin de un grupo de usuarios Vamos a crear un nuevo Grupo de usuarios llamado Administracin que va a englobar a los dos usuarios creados anteriormente y que pertenecen al Departamento de Administracin de una empresa. Dichos usuarios podrn tener todos los accesos, salvo el de borrado. Los pasos a realizar son los siguientes: Dentro de la pestaa Usuarios se pulsa el botn Nuevo grupo de la ba- rra de herramientas (o tambin seleccionamos de la opcin de men Editar > Grupos de usuarios > Nuevo). Esto mostrar el cuadro de dilogo Grupo de usuarios. Las propiedades de este Grupo de usuarios son las siguientes: Nombre: Administracin. Pestaa Usuarios: Pulsamos el botn Agregar usuario para que se muestre el cuadro de dilogo Seleccin de miembros del grupo. Hacemos doble clic sobre los usuarios Usuariodos y Usuariouno para que pasen al rea de la derecha: e Nuevo grupo Agregar usuario Pestaa Aplicaciones: Pulsamos el botn Agregar y seleccionamos la aplicacin Agenda del men desplegable. Una vez situados en la lista de aplicaciones del Grupo de usuarios, seleccionamos y hacemos doble clic con el botn izquierdo del ratn (o bien se selecciona y se pulsa el botn Propiedades) para definir las siguientes propiedades en el cuadro de dilogo Permiso: Privilegio: 100 Grupo: 0 Men inicial: Arranque men formulario. Perfil: .Ninguno 11 Servidor de aplicaciones e Agregar Propiedades 532 533 VELAZQUEZ VISUAL Pestaa Mquinas: Hacemos clic con el botn derecho del ratn sobre el rea de color blanco para seleccionar la opcin del men contextual Modi- ficar mquinas autorizadas y marcamos, dentro del cuadro de dilogo M- quinas autorizadas, la casilla de la mquina denominada Administracin (creada en un apartado anterior). Pestaa Archivos: Pulsamos el botn Agregar y en la lista desplegable que aparece seleccionamos la carpeta Administracin para que se muestre en la lista de carpetas del Grupo de usuarios. Al hacer doble clic sobre esa carpeta de la lista aparece el cuadro de dilogo Permisos. Como en el enun- ciado comentamos que no permitiremos el borrado, desmarcamos la op- cin Borrado de archivos o carpetas. 11.9 Configuracin de grupos de mensajera Desde el Navegador Velzquez Visual un usuario puede enviar Telegramas (mensajes) al resto de los usuarios. Solamente podr enviar telegramas a usuarios pertenecientes al mismo grupo o grupos que l. Si un usuario no se encuentra dentro de un grupo de mensajera no podr enviar ni recibir telegramas. Para crear un nuevo Grupo de mensajera deberemos pulsar, dentro de la pestaa Usuarios, la opcin de men Editar/Grupos de mensajera/Nuevo... Se mostrar el cuadro de dilogo Grupo de mensajera: e Agregar Este cuadro de dilogo tiene las siguientes propiedades: Nombre: nombre que daremos al Grupo de mensajera. Si pulsamos el botn Agregar usuario aparece el cuadro de dilogo Se- leccin de miembros del grupo, similar al que aparece en la definicin de un nuevo Grupo de usuarios: En el panel izquierdo aparecer la lista de usuarios seleccionables. Para se- leccionar uno hacemos doble clic sobre l. Desaparecer del panel izquier- do y se mostrar en el derecho, que es el panel de usuarios seleccionados en el grupo. La creacin de un grupo de usuarios se va a explicar a travs de un ejemplo. Ejemplo: Creacin de un Grupo de mensajera Vamos a crear un nuevo Grupo de mensajera denominado Administracin, que engloba a todos aquellos usuarios que pertenecen al Departamento de Administracin de una empresa. Los pasos a realizar son los siguientes: Dentro de la pestaa Usuarios seleccionamos la opcin de men Editar/Grupos de mensajera/Nuevo... Aparecer el cuadro de dilogo Gru- po de mensajera. En la propiedad Nombre se escribe Administracin. A continuacin pulsamos el botn Agregar usuario para mostrar el cua- dro de dilogo Seleccin de miembros del grupo. Se hace doble clic sobre el Usuariouno y el Usuariodos para pasarlos al rea de la derecha. As for- marn parte del Grupo de mensajera. 11 Servidor de aplicaciones e Agregar usuario 534 535 VELAZQUEZ VISUAL De esta manera, al pulsar el botn Aceptar del cuadro de dilogo Grupo de mensajera se habr creado el nuevo Grupo de mensajera. 11.10 Configuracin de tareas 11.10.1. Pestaa Tareas programadas Para programar una nueva tarea hacemos clic sobre el rea blanca de la pestaa y seleccionamos, en el men contextual que aparece, la opcin Nueva tarea... (o tambin a travs de la opcin de men Editar/Tareas/Nue- va). Aparecer el cuadro de dilogo Tarea. Las propiedades del cuadro de dilogo son las siguientes: Asunto: especificacin del tipo de tarea que vamos a programar. Existen tres tipos de tareas: CUADRO DE DILOGO TAREA e Tareas programadas Nueva tarea Copia de seguridad: la tarea a programar ser la realizacin de una co- pia de seguridad de las tablas de datos de una aplicacin concreta. Sus parmetros especficos son: Aplicacin: nombre de la aplicacin de la que vamos a hacer una copia de seguridad. Directorio destino: especificacin del directorio donde se guardar el ar- chivo de la copia de seguridad (archivo con extensin VCS). Para facili- tar la especificacin del mismo pulsamos el botn Examinar. Regenerar ndices: la tarea a programar ser la regeneracin de los ndi- ces de una tabla de datos de una aplicacin concreta. Aplicacin: nombre de la aplicacin de la que queremos regenerar ndices. Tabla: especificacin de la tabla de datos de la aplicacin de la que que- remos regenerar los ndices. Ejecutar proceso: la tarea a programar ser la ejecucin de un proceso de una aplicacin concreta. Esta opcin est pensada para la ejecucin de procesos para el mantenimiento de la aplicacin. El proceso ser eje- cutado en el Servidor. Sus parmetros especficos son: Aplicacin: nombre de la aplicacin de la que ejecutaremos un proceso. Procesos: especificacin del proceso a ejecutar. Solamente estarn disponibles aquellos procesos del proyecto que sean pblicos y cuyo origen sea ninguno. La Periodicidad se refiere al momento en el que se ha de ejecutar la tarea. Las opciones son: Absoluto (Fecha/Hora concreta): la tarea se ejecutar un da y hora concre- tos. Es decir, ser ejecutada una sola vez. Parmetros complementarios: Fecha: da, mes y ao en que la tarea ha de ser ejecutada. Para facilitar su especificacin, pulsando el botn que se encuentra dentro del con- trol de edicin aparecer un calendario para su seleccin. Hora: hora en la que la tarea debe ser ejecutada. Con las teclas de mo- vimiento del cursor izquierda y derecha se puede desplazar entre la ho- ra, los minutos y los segundos, y con las teclas de movimiento del cur- sor arriba y abajo cambiar los valores del elemento seleccionado. Diario: la tarea ser ejecutada todos los das a una hora determinada. Parmetros complementarios. Hora: hora en la que la tarea debe ser ejecutada. Con las teclas de mo- vimiento del cursor izquierda y derecha se puede desplazar entre la ho- ra, los minutos y los segundos, y con las teclas de movimiento del cur- sor arriba y abajo cambiar los valores del elemento seleccionado. 11 Servidor de aplicaciones Examinar 536 537 VELAZQUEZ VISUAL Semanal: la tarea ser ejecutada cada semana en un da y hora concre- tos. Parmetros complementarios: Da de la semana: en el que la tarea debe ser ejecutada (de lunes a domingo). Hora: tiene las mismas especificaciones comentadas para la opcin Ab- soluto. Mensual: la tarea ser ejecutada cada mes un da y a una hora concre- tos. Parmetros complementarios: Da del mes: en el que la tarea debe ser ejecutada (del 1 al 31). Hora: tiene las mismas especificaciones comentadas para la opcin Absoluto. Anual: la tarea ser ejecutada cada ao a una hora de un da de un mes concreto. Parmetros complementarios: Da del mes: en el que la tarea debe ser ejecutada (del 1 al 31). Mes: en el que la tarea debe ser ejecutada (de enero a diciembre). Hora: tiene las mismas especificaciones comentadas para la opcin Absoluto. Cada cierto tiempo: tiene los siguientes parmetros complementarios: Horas: tiene las mismas especificaciones comentadas para la opcin Absoluto. Minutos: tiene las mismas especificaciones comentadas para la opcin Absoluto aplicado a los minutos. Para modificar una tarea basta con seleccionarla, pulsar con el botn dere- cho del ratn y seleccionar en el men contextual la opcin Modificar ta- rea (o seleccionarla y ejecutar la opcin del men Editar/Tareas/ Modificar). Para eliminar una tarea basta con seleccionarla, pulsar con el botn dere- cho del ratn y seleccionar en el men contextual la opcin Suprimir ta- rea (o seleccionarla y ejecutar la opcin del men Editar/Tareas/Suprimir). El servidor de aplicaciones guarda la configuracin de las tareas programa- das en el archivo tareas.vuf, de forma que es importante hacer copias de seguridad de este archivo para prevenir modificaciones accidentales, o en caso de reinstalar el servidor conservar y recuperar los datos anteriores so- bre tareas. 11.10.2. Pestaa Tareas ejecucin En esta pestaa se podrn consultar aquellas tareas que estn siendo o han sido ejecutadas. Modificar tarea Suprimir tarea Tareas ejecucin En ella se muestra la siguiente informacin: Tarea: tipo de tarea ejecutada. Aplicacin: nombre de la aplicacin sobre la que se ha ejecutado la tarea. Observaciones: si se trata de una copia de seguridad se mostrar el direc- torio donde sta ha sido almacenada. Si se ha ejecutado una regeneracin de ndices se mostrar el nombre de la tabla de datos que ha sido regene- rada. Si se trata de la ejecucin de un proceso se mostrar el nombre del proceso ejecutado. Inicio: da y hora de inicio de la tarea. Fin: hora de finalizacin de la tarea. 11.11 Historial del servidor Se trata de una aplicacin incorporada al Servidor que, como cualquier otra aplicacin Velzquez Visual, podr ser atacada con el Navegador Velzquez Visual aunque solamente por todos aquellos usuarios dados de alta en el Servidor que sean Supervisores. Su utilidad es la de monitorear (visualizar en el monitor del equipo) los en- ganches y trabajos realizados por los usuarios en las aplicaciones abiertas en el Servidor. Cada vez que un usuario abre una aplicacin del Servidor se genera un enganche, y la informacin de cada trabajo que ste ejecute en la aplicacin ser almacenada en esta aplicacin. Dado su carcter de consulta no es posible la generacin, modificacin o la eliminacin de fichas por parte del usuario que la ejecute. Es el propio Ser- vidor quien se encarga de su mantenimiento. Con esta aplicacin podremos obtener informacin sobre los enganches y trabajos realizados en las aplicaciones del Servidor, as como el control de enganches y trabajos realizados por usuario dado de alta en el Servidor. 11 Servidor de aplicaciones 538 539 VELAZQUEZ VISUAL 11.11.1. Opciones de men Las opciones que encontramos en el rea derecha de la aplicacin Historial del servidor son las siguientes: Enganches activos: muestra una lista con todos los enganches activos en el momento de la consulta. Finalizados entre fechas: presenta una lista con todos los enganches finali- zados entre lmites de fecha desde-hasta. Por usuario: aparece un cuadro de dilogo para la seleccin de un usuario del Servidor y presenta todos los enganches realizados por l: Por aplicacin: presenta un cuadro de dilogo para la seleccin de una de las aplicaciones del Servidor y presenta todos los enganches realizados a la misma. Los enganches que estn activos en el momento de la consulta sern des- tacados en color azul. Al editar la ficha de cualquier enganche se incluir en el formulario una lis- ta con todos los trabajos realizados durante ese enganche. 11 Servidor de aplicaciones 540 541 VELAZQUEZ VISUAL Para todas las opciones de men vistas, la informacin que se presentar en las rejillas despus de disparar dichas opciones ser la siguiente: IP Cliente: direccin IP de la mquina desde la que se ha realizado el en- ganche. Usuario: nombre del usuario que ha realizado el enganche. Si una aplica- cin no tiene especificada la peticin de usuario el dato ser presentado en blanco. Nombre completo: nombre completo del usuario que ha realizado el en- ganche. Si una aplicacin no tiene especificada la peticin de usuario dicho dato ser presentado en blanco. Aplicacin: nombre de la aplicacin objeto del enganche. Directorio: senda de la aplicacin objeto del enganche. Fecha inicio: fecha en la que se ha generado el enganche. Hora: hora en la que se ha generado el enganche. Fecha fin: fecha en la que ha finalizado el enganche. Cuando se consultan los enganches activos esta columna no aparecer. Hora: hora en la que ha finalizado el enganche. Cuando se consultan los en- ganches activos esta columna no aparecer. Las opciones de men del rea izquierda del Historial del servidor son las siguientes: Enganches: muestra el rea derecha Enganches con las opciones de men vistas anteriormente (Activos, Finalizados entre fechas, Por usuario y Por aplicacin). Trabajos perodo: presenta un cuadro de dilogo en el cual se pide una fe- cha de inicio y de fin, as como una hora inicial y final (en Horas y Minutos). El resultado ser una rejilla con todos los trabajos realizados en la fecha y entre las horas especificadas. Trabajos ltima hora: se presentar una rejilla con todos los trabajos reali- zados durante la hora previa a la de la ejecucin de esta consulta. 11 Servidor de aplicaciones 542 543 VELAZQUEZ VISUAL En cualquier consulta de trabajos, la informacin que se facilitar ser: Aplicacin: nombre de la aplicacin objeto del enganche. Usuario: nombre del usuario que ha realizado el enganche. Si una aplica- cin no tiene especificada la peticin de usuario el dato ser presentado en blanco. IP: direccin IP del equipo utilizado por el usuario. Tipo: tipo de trabajo efectuado (bsqueda, alta de ficha, proceso, etc.). Descripcin: presenta un texto descriptivo del trabajo efectuado. Inicio: fecha y hora de inicio del trabajo. Fin: fecha y hora de finalizacin del trabajo. N operaciones: nmero de operaciones que ha generado el trabajo en el Servidor (modificaciones de fichas). Ms opciones de men disponibles en el rea izquierda de la aplicacin son las siguientes: Usuarios: se presentar una rejilla con todos los usuarios dados de alta en el Servidor y que muestra el nombre y el nombre completo de cada uno de ellos. Cuando hacemos doble clic sobre cualquiera de ellos se muestra el formu- lario del usuario y dos pestaas: una denominada Enganches y otra Engan- ches/Aplicacin. La pestaa Enganches presenta una rejilla con los distintos enganches realizados por el usuario. Dicha rejilla aporta informacin sobre la IP del usuario, la aplicacin, el directorio y las fechas y horas de inicio y fin. Por otra parte la pestaa Enganches/Aplicacin muestra en una rejilla los da- tos mencionados en la pestaa anterior encarpetados por aplicacin. Si an no ha finalizado el enganche aparecer el texto Activo. Localizar usuario: se presentar un localizador en el que, si se selecciona un usuario, se presentar un formulario con su ficha correspondiente. En dicha ficha podemos consultar los enganches efectuados, con posibilidad de en- carpetar la informacin de los enganches por cada aplicacin, tal y como suceda en la opcin de men anterior. Aplicaciones: muestra una rejilla con todas las aplicaciones que hemos ins- talado en algn momento en el Motor: Utilidades: muestra en el rea derecha las siguientes opciones de men: Cambiar n das a conservar: podemos especificar cuntos das se desea conservar los datos del historial. Eliminar historiales atrasados: borrar todos los historiales anteriores al nme- ro de das especificados en la opcin Nmero de das de historial a conservar. 11.11.2. Configuracin bsica del Historial del servidor En las opciones de men Cambiar n das a conservar dicho mapa, confi- guramos el tiempo que ha de ser guardado, por ejemplo, 60 das. 11 Servidor de aplicaciones 544 545 VELAZQUEZ VISUAL Asimismo, en el Servidor es conveniente crear una nueva tarea progra- mada (dentro de la pestaa Tareas programadas del rea tareas) que ac- tive el nico proceso que es pblico de dicho mapa: LIMPIAR-ANTERIOR- AFECHA: 11.12 Configuracin de los dominios web Si un Servidor dispone del Servidor HTTP puede servir las Pginas HTML que se encuentren dentro del directorio definido en la pestaa HTTP del cuadro de dilogo Configuracin que aparece al seleccionar la opcin de men Editar/Configuracin (o bien pulsando el botn Configuracin de la barra de herramientas). Adicionalmente, dicho servidor HTTP puede gestionar ms de un dominio web. Para definir los dominios seleccionamos la opcin de men Edi- tar/Dominios Web. Se presentar, entonces, el cuadro de dilogo Domi- nios web: Configuracin Para crear un nuevo dominio debemos pulsar el botn Aadir. Se mos- trar el cuadro de dilogo Propiedades del dominio web que tiene las si- guientes propiedades: Dominio: nombre del dominio. Directorio de la Web: directorio de la web por defecto para ese dominio. Po- demos seleccionar el que queramos pulsando el botn Examinar. Archivo Html por defecto: nombre del archivo html que presentaremos por defecto para ese dominio. Mediante los botones Suprimir y Editar es posible, respectivamente, eliminar el dominio web o mostrar el cuadro de dilogo Propiedades del do- minio web del dominio web seleccionado. 11 Servidor de aplicaciones Aadir Examinar Suprimir Editar 546 547 VELAZQUEZ VISUAL A continuacin se va a realizar un ejercicio prctico para revisar estos con- ceptos tericos: Ejemplo: Creacin de dos dominios web Vamos a servir dos dominios en una misma mquina: www.dominio1.com (cuyas pginas web se encuentran en C:\Web\Dominio1 y tiene como pgi- na inicial indexd1.htm) y www.dominio2.com (cuyas pginas web se en- cuentran en C:\Web\Dominio2 y tiene como pgina inicial indexd2.htm). Pa- ra ello decidimos utilizar los dominios web del Motor. Los pasos a realizar son los siguientes (para realizar el ejercicio completo deberamos crear pre- viamente la carpetas Web, y dentro de sta las carpetas Dominio1 y Domi- nio2, as como las pginas indexd1.htm e indexd2.htm). Seleccionamos la opcin de men Editar/Dominios Web para que se mues- tre el cuadro de dilogo Dominios web. En dicho cuadro de dilogo pulsa- mos el botn Agregar y en el cuadro de dilogo Propiedades del domi- nio web introducimos las propiedades correspondientes al primero de los dominios: Dominio: www.dominio1.com Directorio de la Web: C:\Web\Dominio1\ Archivo Html por defecto: indexd1.htm Una vez pulsado el botn Aceptar, volvemos a pulsar el botn Agregar e introducimos las propiedades correspondientes al segundo dominio. e Agregar De esta manera, cuando un visitante de la web teclea cualquiera de los dos dominios, ambos irn dirigidos al Motor, y ste resolver en funcin de las propiedades que se han definido para cada uno de ellos. 11.13 Navegador Velzquez Visual El Navegador de Velzquez Visual permite ejecutar aplicaciones de Velz- quez Visual cargadas en un Servidor de aplicaciones de Velzquez Visual. La conexin con el Servidor ha de hacerse a travs de una direccin IP, bien en una red local, o bien va telefnica. Asimismo, tambin es un navegador web y un cliente de disco (permite ac- ceder a las carpetas compartidas en el Servidor). 11.13.1. Instalacin del Navegador La instalacin del Navegador Velzquez Visual es sencilla, ya que el asisten- te de instalacin indica los pasos a realizar. Una vez instalado, se crea un fi- chero ejecutable, denominado iRunner.exe, situado en la senda C:\Archivos de Programa\Atica\Velazquez\Program. Cuando se actualiza el Motor con una nueva versin es posible actualizar los puestos clientes que disponen de un Navegador de versin anterior a la nueva versin del Servidor. Dicha actualizacin del Navegador se producir 11 Servidor de aplicaciones Para que los dominios web en el Motor estn bien definidos se debe tener en cuenta lo siguiente: En la propiedad Dominio del cuadro de dilogo Propiedades del dominio web debe escribirse el dominio slo con www (es decir, para uno de los dominios del ejercicio anterior ser www.dominio1.com). El proveedor de servicios de internet que tiene registrado el dominio debe redirigir el dominio a la IP del router (en caso de disponer de una conexin ADSL) de la siguiente manera: (utilizando el ejemplo del ejercicio anterior sera: http://Iprouter/dominio2.com /indexd2.hml). ADVERTENCIA e 548 549 VELAZQUEZ VISUAL cuando accedamos a alguna de las aplicaciones que sirva el Servidor. En ese momento aparecer un cuadro de dilogo que pregunta si queremos realizar la actualizacin: Si se pulsa el botn No se mostrar un nuevo cuadro de dilogo indican- do la necesitad de actualizarse, y por la que no podremos acceder a la aplicacin solicitada. Si pulsamos el botn S aparecer el cuadro de di- logo Actualizacin de Navegador Velzquez Visual versin X.X que mos- trar la senda en la que est instalado dicho Navegador. Con el botn Examinar podremos modificar la ruta (en el caso de no estar instalado en la senda por defecto, es decir, C:\Archivos de Programa\Atica\Velaz- quez\Program). 11.13.2. Interfaz del Navegador Una vez arrancado el Navegador se mostrar una ventana que est dividi- da en las siguientes partes. El rea [a] corresponde a la barra de mens, el rea [b] corresponde a la barra de herramientas y, finalmente, la opcin [c] es el rea de visualiza- cin (tanto de aplicaciones, como de pginas web, como de carpetas compartidas). Las actualizaciones de versin del Navegador no afectan a los iconos de acceso directo. Es decir, si cuando actualizamos el navegador, lo hacemos en un directorio distinto del que tenamos la versin anterior, debemos revisar los accesos directos que tenamos creados y apuntarlos al nuevo Navegador. ADVERTENCIA 11.13.3. Barra de mens Antes de pasar a las opciones de la barra de mens indicar que slo se van a explicar aquellas opciones propias del Navegador, ya que el resto se han mencionado al hablar del Ejecutor de proyectos (vRunner). Men Archivo En este men existen las siguientes opciones: Ver estado cachs..., que lanza el cuadro de dilogo Estado de las cachs y que muestra para cada tabla de la aplicacin el nmero de fichas alma- cenadas en cach hasta ese momento. 11 Servidor de aplicaciones 550 551 VELAZQUEZ VISUAL Dormir aplicacin: esta opcin aparece siempre y cuando se realiza la co- nexin a internet a travs de un mdem. Si durante la ejecucin de una apli- cacin cualquiera dormimos sta, se desconectar la conexin y se mi- nimizar el Navegador en la barra de herramientas. Haciendo doble clic so- bre el icono del mismo en la barra de herramientas estableceremos de nue- vo la conexin telefnica con el Servidor y se abrir la aplicacin en el pun- to donde la habamos dejado durmiendo. Men Editar En este men contamos con las siguientes opciones: Enviar telegrama...: si previamente hemos creado Grupos de mensajera es posible enviar telegramas a otros usuarios desde el Navegador. Cuan- do se ejecuta esta opcin se presenta el cuadro de dilogo Enviar tele- grama: Las opciones del cuadro de dilogo son las siguientes: Seleccionar todos: el telegrama a enviar ser recibido por todos los usuarios que formen parte del Grupo de mensajera (los que aparecen en el rea Destinatarios). Seleccionar los activos: el telegrama a enviar ser recibido por todos los usuarios del Grupo de mensajera que estn en ese momento co- nectados. Deseleccionar todos: desmarca los usuarios del Grupo que se hayan marcado para enviar el telegrama. Mensaje: rea en el que se escribe el texto del telegrama. Una vez pulsemos el botn Enviar los usuarios seleccionados como desti- natarios recibirn un cuadro de dilogo Telegrama recibido que contiene el nombre del remitente junto con el texto del telegrama. 11 Servidor de aplicaciones Seleccionar todos Seleccionar los activos Deseleccionar todos 552 553 VELAZQUEZ VISUAL Ver telegramas..: permite visualizar los telegramas recibidos por el usuario en el caso de tener seleccionada la propiedad Telegramas-Se presentan cuando se desee en la pestaa Opciones dentro de la opcin de men Ver > Personalizar (se ver ms adelante). Explorar Web: abre el panel correspondiente al navegador web. Explorar equipo: permite visualizar las carpetas compartidas por los servi- dores de Velzquez Visual a los que el usuario tiene acceso. Al seleccionar esta opcin se mostrar una ventana dividida en cuatro partes: Los dos paneles de la parte superior muestran para cada uno de los servi- dores Velzquez Visual a los que est conectado el usuario (panel izquier- do) las carpetas y ficheros a los que tiene acceso (panel derecho). Los dos paneles de la parte inferior son los correspondientes a un explora- dor de Windows del equipo del usuario. A continuacin realizaremos un ejemplo de conexin al Servidor de disco. Ejemplo: Conexin a un Servidor de disco Velzquez El usuario Usuariodos desea crear una conexin con el Servidor de disco de la empresa. Para ello se siguen los siguientes pasos: Selecciona desde el Navegador la opcin de men Editar/Explorar equipo. Se muestra la ventana del Navegador con los cuatro paneles vistos ante- riormente. Sobre el panel superior izquierdo de la ventana pulsa con el botn derecho del ratn y selecciona, en el men contextual que aparece, la opcin Aa- dir servidor... Al seleccionar esa opcin se muestra el cuadro de dilogo Servidor de dis- co de Velzquez. En dicho cuadro el usuario rellena las propiedades: 11 Servidor de aplicaciones e 554 555 VELAZQUEZ VISUAL Las propiedades del cuadro de dilogo son las siguientes: Nombre o IP del servidor: nombre del Servidor (o IP) al que se conecta el usuario. Nombre usuario: nombre que tiene el usuario en el Servidor Velzquez Vi- sual, es decir, la que utiliza para acceder a las aplicaciones. Contrasea: contrasea del usuario en el Servidor Velzquez Visual, es de- cir, la que utiliza para acceder a las aplicaciones. Pedir contrasea en cada sesin: si se marca este check le aparecer el cuadro de dilogo Control de acceso, que le pedir la contrasea del usuario. Descripcin: la que tiene el Servidor. Dicha descripcin aparecer en la lis- ta de servidores. Una vez se pulsa el botn Aceptar, aparecer representado en el panel su- perior izquierdo el Servidor, y en el panel superior derecho las carpetas y fi- cheros a los que accede el usuario. e Seleccionando el icono del Servidor del panel superior izquierdo y pulsan- do con el botn derecho del ratn es posible tanto borrar (Eliminar servi- dor) como modificar (Modificar servidor) las propiedades del Servidor se- leccionado. Men Favoritos Favoritos es una lista donde podemos almacenar tanto aplicaciones Velz- quez como URL a las que accedamos con frecuencia. En este men contamos con las siguientes opciones: Agregar a Favoritos: agrega a la lista de favoritos la aplicacin de Velzquez Visual o URL actual. Al seleccionar esta opcin se presentar el cuadro de dilogo Agregar a Favoritos. 11 Servidor de aplicaciones e 556 557 VELAZQUEZ VISUAL En dicho cuadro de dilogo podemos dar un nombre descriptivo a la pgi- na o aplicacin que vayamos a agregar a Favoritos y especificar en qu car- peta queremos almacenarlo. Organizar Favoritos: nos permite organizar por carpetas todas las pginas o aplicaciones agregadas en favoritos. Al seleccionar esta opcin se muestra el cuadro de dilogo Organizar Favoritos. En dicho cuadro de dilogo nos es posible cambiar el nombre, tanto de car- petas, como de pginas agregadas a favoritos, as como crear nuevas car- petas, cambiar su ubicacin o eliminarlas. Finalmente, en esta opcin de men pueden aparecer los Favoritos que no estn guardados en ninguna carpeta. Men Ver En este men tenemos las siguientes opciones: Display Out: si en la aplicacin ejecutamos funciones de Correo electrnico podemos activar esta opcin de men para ver los mensajes enviados y re- cibidos. Una vez seleccionada se mostrar el cuadro de dilogo EMail. En ella se informa sobre los mensajes enviados y recibidos, nmero de mensajes que no han podido ser enviados y sobre el estado de la conexin. Personalizar...: permite personalizar barras de herramientas, as como otros datos de entorno del Navegador. Al seleccionar esta opcin se presenta el cuadro de dilogo Personalizacin: 11 Servidor de aplicaciones 558 559 VELAZQUEZ VISUAL En el mencionado cuadro de dilogo aparecen las barras de herramientas por defecto del Navegador. Si queremos crear una nueva barra de herra- mientas se debe pulsar el botn Nueva dentro de la pestaa Toolbars. Para personalizar una barra de herramientas debemos hacer clic en la car- peta Comandos y mediante la tcnica de arrastrar y soltar, mover el botn que se desee a la barra de herramientas. Para facilitar la localizacin de los botones, stos han sido agrupados por categoras (Archivo, Editar, rbol, Fichas, Lista, Navegante, Procesos, Ver, Ventana y Navegador). La pestaa ms interesante es la de Opciones, que tiene las siguientes pro- piedades: Formato de Nmeros, Carcter separador: Miles: indica el carcter que se utiliza como separador de miles en cam- pos numricos. Decimales: indica el carcter que se utiliza como indicador de decima- les en campos numricos. Milisegundos retardo: Autocompletar: permite, en campos NOMBRE de una tabla maestra, que al es- cribir en el control una cadena y transcurridos los milisegundos establecidos en esta opcin, el programa presente automticamente el primer registro de la ta- bla maestra cuyo campo nombre comience por dicha cadena. La parte aadida quedar seleccionada, con lo que, si el usuario prosigue la escritura, la parte se- leccionada ser sustituida por los nuevos caracteres que el usuario escriba. Localizadores: cuando el usuario escribe en el localizador una cadena a buscar, transcurridos los milisegundos especificados en esta opcin se presentarn los registros encontrados en la rejilla. Inicio: existen tres posibles modos de iniciar el Navegador: Abrir aplicacin Velzquez: al ejecutar el Navegador se presentar el cuadro de dilogo Introduzca nombre del servidor que solicita la IP del servidor de aplicaciones Velzquez con el que conectarse. 11 Servidor de aplicaciones Es importante que en ambos retardos no pongamos valores muy pequeos, ya que si no estaran refrescando la informacin cada muy poco tiempo, ralentizando el uso de la aplicacin. Tambin debemos tener en cuenta si el acceso lo realizamos a travs de Internet o a travs de una red local. En este ltimo podremos poner valores menores que para Internet. ADVERTENCIA 560 561 VELAZQUEZ VISUAL Explorador web: inicia el Navegador como un explorador web y car- gar la pgina html de inicio especificada en las opciones de internet del sistema. Explorador del equipo: inicia el Navegador como un explorador de equi- pos, similar al explorador de Windows. Ninguno: el navegador no se abrir en ninguno de los tres modos ante- riores. Ser el usuario quien debe o bien ejecutar una aplicacin Velz- quez o bien abrir una pgina web. Telegramas: Se presentan cuando llegan: si a un usuario le han enviado un telegrama ste le ser mostrado en pantalla cuando llegue. Se presentan cuando se desee: el telegrama no ser mostrado al usuario hasta que ejecute la opcin Editar > Ver telegramas Al re- cibir un telegrama se emitir un aviso acstico (si est activada la op- cin siguiente) y se presentar en la barra de tareas del navegador un icono advirtindolo. Aviso acstico al recibir: si hemos activado esta opcin se emitir un pi- tido cuando recibamos un telegrama. Hilo de control: tiempo en segundos, transcurrido el cual el Navegador debe enviar un pulso al Servidor de Aplicaciones para el refresco de los datos en notificaciones terciarias. Por ejemplo, el usuario A y el usuario B editan una misma ficha. El usua- rio A realiza cambios y acepta. Transcurridos los segundos especifica- dos en esta opcin se refrescarn los datos de la ficha editada por el usuario B. 11.13.4. Barra de herramientas La barra de herramientas por defecto del Navegador Velzquez Visual con- tiene los siguientes botones: Como en el apartado anterior, vamos a comentar aquellos botones espe- ciales del Navegador. A continuacin detallamos la accin que ejecuta ca- da uno de ellos: Ejecutar aplicacin: muestra el cuadro de dilogo Introduzca nombre del servidor en el que se escribe el nombre o la IP del servidor al que se quie- re conectar: Ejecutar aplicacin Una vez pulsamos el botn Aceptar se presenta el cuadro de dilogo Se- leccione aplicacin, que mostrar el listado de todas las aplicaciones que sirve el Motor. Cuando seleccionamos una aplicacin y pulsamos el botn Aceptar apare- ce el cuadro de dilogo Control de usuario en el que el usuario escribe su nombre y su contrasea para acceder finalmente a la aplicacin: 11 Servidor de aplicaciones 562 563 VELAZQUEZ VISUAL En el cuadro de dilogo Introduzca nombre del servidor, si el usuario pulsa el botn se conectar a un Servidor de Atica Software que, al pre- sentar el cuadro de dilogo Seleccione aplicacin, mostrar la aplicacin Li- bros, que es un ejemplo de aplicacin de Velzquez Visual. Enviar telegrama: presenta el cuadro de dilogo Enviar telegrama que hemos visto en el apartado anterior. Explorar equipo: presenta en una ventana la estructura de cuatro pane- les, que comentamos anteriormente para acceder a las carpetas comparti- das por el Servidor. A continuacin mencionamos los botones correspondientes a la barra de herramientas Explorador: Atrs: si hemos abierto varias pginas en la misma ventana, cuando pul- semos este botn iremos a la pgina anterior a la actual. Adelante: si hemos abierto varias pginas en la misma ventana, cuando pulsemos este botn iremos a la pgina siguiente a la actual. Detener: detiene la carga de la pgina web. Actualizar: carga de nuevo la pgina web en curso. Inicio: abre la pgina que hayamos especificado como pgina principal en las Propiedades de Internet del sistema. Inicio serie: si en una misma ventana del explorador hemos abierto di- ferentes pginas, este botn retornar a la que hayamos marcado con una marca de inicio de serie (ver el siguiente botn), o, si no establecimos una marca, a la primera pgina abierta en dicha ventana. Marca inicio serie: la pgina en la que hayamos generado la marca se- r a la que retornemos si, en la misma ventana, pulsamos el botn de Inicio serie. Barra de direcciones: este control permite acceder directamente desde el Navegador a la direccin URL escrita en el mismo. Si este control es incluido en una barra de herramientas del Navegador siempre estar activo, por tanto, desde cualquier punto de la aplicacin donde est visible dicha barra de herramientas podr dispararse el explo- rador web. Pulsando sobre el botn de este control se mostrar el historial de las distintas URLs a las que se haya accedido a lo largo de esa sesin del Navegador. Conectarse a Servidor de tica Software Enviar telegrama Explorar equipo Atrs Adelante Detener Actualizar Inicio Inicio serie Marca inicio serie 11.14 Optimizacin de aplicaciones en Cliente-Servidor Si hemos desarrollado una aplicacin y sta se ejecuta en arquitectura de red local (utilizando el Ejecutor vRunner) dicha aplicacin podr ser instala- da en el Servidor de aplicaciones Velzquez Visual sin realizar por ello nin- gn tipo de modificacin. Sin embargo, hemos de tener en cuenta una serie de cuestiones que au- mentarn el rendimiento de la aplicacin (optimizarla) de cara a su instala- cin en el Motor, ya que los usuarios pueden estar conectados a la aplica- cin desde cualquier lugar a travs de Internet. 11.14.1. Sockets TCP: retardos y optimizacin La comunicacin entre mquinas se establece mediante sockets. Una vez establecida dicha comunicacin, la informacin viaja distribuida en paquetes con un tamao de unos 4 kb (aproximadamente). Por ejem- plo: un conjunto de datos de 400 kb viajara distribuido en unos 100 pa- quetes. Los sockets llevan, entre otros parmetros, las IP origen e IP destino, de modo que siempre alcanzan su destino: si un nodo falla en la comunicacin otros nodos son interrogados para lograr el envo. Una vez establecida la comunicacin (socket), el tiempo que los paquetes de informacin emplean en viajar es el mismo independientemente de que ocupen 4 kb o menos. Es en el establecimiento del socket donde se ralen- tiza la comunicacin, ya que una vez establecida el traspaso de informacin es rpido, tardando ms o menos segn el canal por el que viajen los datos (enviar 1k es casi igual a enviar 4k). Por otro lado, en una red local el tiempo que un socket emplea en viajar es de unos 10 ms, mientras que a travs de internet ronda los 250 ms, de ah que las peticiones a travs de internet sean mucho ms lentas: se produce un retardo, y por lo tanto conviene generar el menor nmero de sockets po- sible: hemos de optimizar nuestras aplicaciones. Existen diversos factores que aumentan el nmero de sockets generados, por ejemplo, las rejillas en las que se presentan datos capturados median- te punteros indirectos. Por ejemplo: si a travs de internet presentamos una rejilla con datos de la misma tabla se generan dos sockets, uno para la pe- ticin y otro para el envo de datos, de modo que la rejilla se presentara en menos de un segundo. Sin embargo, si presentamos registros capturados mediante un puntero indirecto generamos tantos sockets como registros se presenten, de modo que si encontramos 100 registros, la rejilla tardara 25 segundos en presentarse. 11 Servidor de aplicaciones 564 565 VELAZQUEZ VISUAL 11.14.2. Optimizar el tamao del mapa Cuando nos conectamos a un servidor de Velzquez ste nos enva la infor- macin del mapa de la aplicacin, de modo que necesitamos optimizar el ta- mao del mapa con el fin de que este traspaso sea lo ms rpido posible. En el Servidor de aplicaciones podemos instalar tanto un fichero .map co- mo un .vam, pero no pensemos que por instalar el .vam (que ocupa menos) realizamos optimizacin alguna, ya que el servidor convierte esos archivos a otro archivo .mgz, que es el que realmente nos enva, y que ocupa lo mis- mo hayamos instalado el .map o el .vam. Optimizacin de dibujos Hemos de reducir al mximo el tamao de los dibujos que incluimos en el mapa, para lo cual en un programa de edicin iremos reduciendo la paleta de colores del dibujo, cuidando que ste no pierda calidad. Esta reduccin en la paleta hemos de realizarla paulatinamente, ya que si lo hacemos de golpe puede fallar el algoritmo de clculo del programa de edicin. Una vez hayamos reducido la paleta, con el programa de edicin realizare- mos una nueva compresin a formato RLE estndar (bmp) (cuidado: si no es RLE estndar puede que el editor de Velzquez rompa al llevar el dibujo al mapa) y la guardamos en disco para despus abrir el editor y traernos la imagen retocada (opcin pegar desde). Hemos de hacerlo as y no me- diante copiar y pegar, ya que usando el portapapeles se reservan los pri- meros veinte colores para Windows y no se respeta la paleta de colores de la imagen retocada. Cuando reducimos el tamao de una imagen (pensemos en todos los ico- nos que puede tener nuestra aplicacin) lo ideal es reducirla a 16 colores (4 bits por pixel), ya que de este modo optimizamos la paleta al mximo. Si la imagen no queda del todo bien al reducirla a 16 colores podemos retocar- la con el programa de edicin. Aprovechamiento de los objetos Otra manera de controlar el tamao de un mapa es el aprovechamiento de objetos. Por ejemplo: si una misma rejilla puede servirnos para presentar dos listados distintos, no tiene sentido crear una rejilla para cada listado. 11.14.3. Elementos que retardan una aplicacin Cuando diseamos una aplicacin o trabajamos con ella a travs de inter- net hay ciertos detalles que hemos de tener en cuenta, ya que ralentizan en gran modo su funcionamiento. Vemoslos: Visualizacin de datos obtenidos a travs de punteros indirectos Supongamos una aplicacin en la que tenemos las tablas LIBROS, AUTO- RES y EDITORES, siendo LIBROS histrica de las otras dos. Para presen- tar en una rejilla de la aplicacin una lista de libros con su autor y editor el proceso sera el siguiente: nuestra mquina genera un socket de peticin de libros, devolvindonos el servidor los primeros ttulos a presentar (ponga- mos unos 50 del total, que podran ser 1.000, por ejemplo). Una vez de- vueltos estos 50 primeros ttulos, se generan un segundo y tercer sockets para pedir los autores y los editores de los ttulos devueltos. En el ejemplo anterior presentamos en una rejilla punteros enlazados a maestro, muy optimizados en Velzquez Visual. Ahora bien, en absoluto es aconsejable presentar en una rejilla punteros indirectos, ya que estos enla- ces no se encuentran optimizados, de modo que para presentar cada re- gistro de la lista ha de generarse un socket. Si en la rejilla del ejemplo ante- rior presentramos un campo capturado mediante un puntero indirecto, co- mo son 1.000 registros tardara 250 segundos en presentarse (ms de cua- tro minutos!). Si se trata de un formulario la presentacin de datos capturados mediante punteros indirectos tambin ralentiza la apliacin, pero como presentamos uno o pocos registros el efecto se nota menos. Filtros secuenciales Supongamos que en una rejilla en la que presentamos artculos queremos quedarnos slo con aquellos cuyo campo agotado (booleano) tenga valor 1. Tenemos la opcin de Filtrar, pero sta es desaconsejable ya que filtrando generamos una peticin (socket) al servidor, el cual devuelve una primera remesa con 50 o 100 registros que el irunner debe recorrer uno a uno, com- probando el contenido del campo agotado. Terminada esta primera remesa se genera otro socket en el que se piden ms registros al servidor y que el irunner debe filtrar... as hasta acabar con toda la lista. Este proceso es muy lento a travs de internet, por lo que es totalmente de- saconsejable a no ser que sepamos con total seguridad que el nmero de registros es muy pequeo. Tambin hemos de saber que cuando filtramos desde las propiedades de una bsqueda el proceso es algo ms rpido, ya que el filtrado lo realiza el servidor (tercer plano). De todos modos, la forma ptima para resolver el problema anterior es me- diante la opcin de listas Rebuscar, indicando que quite de la lista aquellos registros cuyo campo agotado sea 0. Esto es as ya que Rebuscar trabaja con ndices y no va leyendo los registros uno por uno. Rejillas iniciales donde se muestren objetos Todos los objetos del contenedor (objetos texto, dibujos, etc.) se tienen que pedir al servidor cada vez que van a ser presentados en una rejilla, de mo- do que por cada uno se genera un socket. Adems no hay cach para los objetos del contenedor. Esto ocasiona que las rejillas en las que presente- mos objetos del contenedor se van a ralentizar mucho si las presentamos a travs de internet. Rejillas con totales En las rejillas hemos de evitar la introduccin de pies, ya que esto fuerza a la lectura de toda la lista para el clculo del pie. 11 Servidor de aplicaciones 566 567 VELAZQUEZ VISUAL Condiciones activo / visible y enlaces a hermano Supongamos un formulario en el que establecemos una condicin de acti- vo para un botn (el botn Aceptar, por ejemplo) en las propiedades de un control de edicin de un campo enlazado con un puntero indirecto. Como los punteros indirectos no se guardan en la cach de nuestra mquina, ca- da vez que escribamos sobre el control de edicin se generar un socket para que nos devuelva el contenido del campo con el fin de determinar si se cumple la condicin. Adems, se generarn tantos sockets como condi- ciones hayamos introducido en el formulario. Es por esto que las condiciones activo / visible sobre campos capturados con puntero indirecto son totalmente desaconsejables trabajando a travs de internet. Si el campo es enlazado a maestro o de la propia tabla no tenemos este pro- blema, ya que s son guardados en la memoria cach de nuestra mquina. Otro caso parecido al anterior aparece cuando trabajamos con campos en- lazados a hermano contiguo. Supongamos un formulario en el que presen- tamos un campo enlazado a hermano contiguo y en el que tenemos boto- nes Siguiente y Anterior que nos permiten movernos por los hermanos. Se- ra til una condicin de activo para el botn, de manera que ste se de- sactivara cuando no hubiera ms hermanos (habramos llegado a los ex- tremos), pero verificar esta condicin implicara la generacin de un socket cada vez que pulsamos una tecla (al pulsar una tecla se analizan todas las condiciones activo y visible), lo que la hace totalmente desaconsejable cuando trabajamos por internet. 11.14.4. Transacciones Cada vez que realizamos una operacin que implique escritura en disco es- tamos realizando una transaccin. Cuando lanzamos procesos que tran- saccionen nos encontramos con dos casos extremos: Puede que forcemos muchas transacciones pequeas, lo que implica: Abrir y cerrar cada una de las transacciones, lo que provoca un tiempo de retardo por cada operacin (desventaja). Dar de alta un registro en el Historial del servidor por cada transaccin rea- lizada, que tambin implica retardo (desventaja). Bloqueamos pocas fichas, de modo que apenas gastamos memoria en el servidor (ventaja), pero esto no siempre nos interesa. Supongamos, por ejemplo, un proceso en el que para una factura de un cliente realizamos una transaccin por cada albarn, y justo cuando hemos facturado la mitad se cae el sistema. Nos queda la otra mitad sin facturar y las transacciones que ya se han realizado no se deshacen! En casos como ste es aconsejable realizar una transaccin por cada factura del cliente que englobe todos los albaranes. Puede que forcemos una sola transaccin grande, lo que implica: Un gasto considerable de memoria en el servidor (desventaja), ya que ste guarda en memoria las fichas bloqueadas por si hay que deshacer la tran- saccin. Ojo: hay gasto de memoria cuando realizamos bajas o modifica- ciones, pero no cuando damos altas, ya que en este caso no hay ficha que memorizar por si hay que deshacer la transaccin. Caso aparte son aque- llas altas que desencadenan actualizaciones, ya que en este caso las fichas modificadas por la actualizacin s se guardan en memoria. La velocidad a la que se realizan las operaciones es mucho mayor que en el primer caso (ventaja). Se genera una sola transaccin, de modo que la prdida de tiempo es mu- cho menor (ventaja). Se bloquean las fichas implicadas en la operacin, lo que impide a otros usuarios de la aplicacin trabajar con esas fichas (desventaja). No se blo- quean todas las fichas a la vez, sino que se van bloqueando segn trabaja- mos con ellas. Es decir, si en una transaccin vamos a modificar 1.000 fi- chas, cuando llega a la 563 habr bloqueado las primeras 563. 11.14.5. Optimizaciones para el rendimiento ptimo 11.14.5. en ejecucin Procesos en tercer plano En nuestras aplicaciones podemos optimizar los procesos forzando que s- tos se ejecuten en tercer plano, es decir, en el servidor. Vemoslo con un ejemplo. A continuacin presentamos un proceso sin optimizar: El origen del proceso es una lista de la tabla CLIENTES y en l se pregunta si queremos o no actualizar los clientes. En caso afirmativo se recorre la lis- ta y se modifica el campo FECHA ALTA. El proceso se ejecuta en primer plano, es decir, en nuestra mquina. Ade- ms, como incluye la funcin recorrer lista lectura / escritura, escribe en dis- co. Esto implica que slo realice una transaccin al recorrer el bucle (si no escribiera en disco realizara tantas transacciones como registros encontra- ra, ralentizndose mucho ms el proceso). Podemos optimizar este proceso partindolo en dos: uno que incluya el bu- cle y que se ejecute en tercer plano y otro encargado de lanzar el anterior y que se ejecute en primer plano. Vemoslo: 11 Servidor de aplicaciones 568 569 VELAZQUEZ VISUAL El proceso que se va a ejecutar en el servidor es el siguiente: El proceso anterior tiene como origen una lista de la tabla CLIENTES y lo hemos identificado como UPDATE-CLIENTES-OPT-3P. El proceso encargado de lanzar el anterior es: Este proceso se ejecuta en primer plano, y en l incluimos la funcin Eje- cutar proceso en la que seleccionamos el proceso UPDATE-CLIENTES- OPT-3P, indicando que ste debe lanzarse en modo servidor. Al montar el proceso de este segundo modo (optimizado) la actualizacin de la lista se realiza mucho ms rpido (diez veces ms de media), ya que es el servidor quien la realiza, evitando que haya trfico de informacin a travs de la red. Al montar una estructura como la anterior hemos de tener en cuenta que en un proceso en tercer plano no podemos lanzar preguntas, presentar formu- larios, rejillas... slo podemos usar la funcin de procesos Mensaje, que se suele usar para depurar. Sus contenidos se presentarn en la barra de men- sajes del servidor de aplicaciones. Forzar una nica transaccin Supongamos un proceso para actualizar las ventas en una lista de clientes y que necesita confirmacin por parte del usuario. ste se compondr de dos procesos: Uno lanzador, en primer plano y con origen una lista de la tabla CLIENTES. En l incluiremos la parte que interacta con el usuario. Otro en tercer plano (ACTUALIZAR-VENTAS-CLIENTES-3P en el proceso anterior) con origen ficha de la tabla CLIENTES, en el que cargamos el his- trico de ventas de cada cliente, lo recorremos y realizamos la modificacin necesaria en cada registro. PROCESO LANZADOR Slo ejecutamos esta ltima parte en el servidor, ya que necesitamos que, una vez dentro del bucle que recorre los clientes, nos pregunte si queremos actualizar sus ventas en el caso de que se cumpla una condicin (en este ejemplo la condicin es que pertenezca al aula 8). Para que se presente la pregunta sta ha de ejecutarse en primer plano. Ahora bien, aunque parte de este proceso se ejecute en tercer plano, esta- mos generando una transaccin por cada cliente (muchas transacciones pequeas), lo que ralentiza su ejecucin. Podemos optimizar este proceso forzando una nica transaccin global pa- ra todo el bucle. Para ello haremos que el proceso en primer plano escriba en disco, introduciendo una sentencia que implique modificacin en la ba- se de datos. Esta sentencia la incluiremos antes del primer bucle, de modo que todos los subprocesos que vengan despus heredarn dicha transac- cin. Vemoslo: Al introducir la funcin de proceso Modificar ficha seleccionada estamos forzando a que el proceso escriba en disco, es decir, genere una transac- cin de la que dependern todas las que se generaban antes y que vienen despus. Fijmonos cmo en el fondo estamos engaando a Velzquez, ya que la sentencia que acabamos de introducir se encuentra bajo una con- dicin que nunca se va a cumplir (tambin podramos haber usado la fun- cin Modificar ficha seleccionada, o si el proceso no tuviera origen podra- mos usar un Alta directa. La funcin Modificar variable global no implica es- critura en disco). Veamos otro ejemplo. En este caso se trata de un proceso que importa un fichero ASCII a una base de datos de clientes. El proceso es el que se pre- senta a continuacin: 11 Servidor de aplicaciones PROCESO EN TERCER PLANO PROCESO OPTIMIZADO 570 571 VELAZQUEZ VISUAL Mediante la funcin Alta directa (el origen del proceso es ninguno) forzamos a que se genere una nica transaccin (si no generamos una por cada clien- te). A continuacin abrimos el fichero y mediante un bucle vamos leyendo sus lneas. El siguiente paso es lanzar un proceso en tercer plano, que es el que realiza el proceso de importacin (al ser en tercer plano la importacin es mucho ms rpida). A este proceso le pasamos los datos ledos en el fi- chero mediante una variable. Con esta tcnica que acabamos de ver la velocidad de ejecucin es mucho mayor, ya que generamos una nica transaccin y un solo alta en el histo- rial. Ahora bien, tiene sus inconvenientes: al generar una nica transaccin consumimos mucha memoria en el servidor. Si nos quedamos sin memoria, Windows dar un aviso. Si el motor detecta que se queda sin memoria des- har la transaccin, pero puede que no lo detecte y rompa, con lo que se tendr que deshacer la transaccin al arrancar de nuevo el motor. Otro inconveniente es que todas las fichas que intervienen en el proceso estn bloquedas para todos los usuarios. Supongamos, por ejemplo, que en un proceso como el anterior actualizamos el precio de todos los artcu- los de una gran empresa. Mientras dure el proceso las fichas de los art- culos permanecern bloqueadas, con lo que las ventas estaran paradas ese tiempo porque no podramos generar tickets de venta (stos modifican el stock del artculo, pero como las fichas estn bloqueadas no se pueden lanzar). La solucin a los problemas anteriores pasa por trocear el proceso en va- rias transacciones. Vemoslo con el siguiente ejemplo, con el que importa- mos fotos (portadas) a una base de datos de libros: IMPORTACIN DE CLIENTES Este proceso, que no transacciona, recorre el disco duro buscando exten- siones de fotos y memorizando los ficheros en una variable global. Al llegar a 500 fotos llama al proceso IMPORT-PORTADAS-DE-LIBROS-TRN, que es el que realmente realiza la importacin y que s transacciona. Este segundo proceso toma la variable que le hemos pasado, la memoriza en una local, busca todos los ficheros y los importa. A continuacin busca el libro, modifica la ficha seleccionada e importa la foto. Con esta estructura estamos generando una transaccin por cada 500 fo- tos. De este modo la ejecucin es rpida, ya que generamos pocas tran- sacciones y a la base de datos le cuesta poco importar 500 fotos. Adems bloqueamos menos registros y durante menos tiempo, a lo que hemos de aadir que el gasto en memoria es menor. 11 Servidor de aplicaciones PROCESO IMPORT-PORTADAS-DE-LIBROS-TRN 572 573 VELAZQUEZ VISUAL 11.14.6. Efectos negativos no deseados Bucle en el cliente con las bsquedas, historial del servidor Fijmonos en el siguiente proceso con el que actualizamos las ventas de los clientes entre fechas: El origen del proceso es una lista de la tabla CLIENTES. ste recorre en solo lectura la lista de clientes, y lanza la bsqueda VENTAS-ENTRE-FE- CHAS-CLIENTE, que devuelve las ventas de cada cliente y que es ali- mentada por las variables que hemos modificado antes de lanzarla. A continuacin recorre la lista de artculos y modifica la cantidad de cada artculo. Este proceso genera una sola transaccin, pero ocasiona un efecto no de- seado: cada vez que se lanza la bsqueda (tantas veces como clientes con- tenga la lista) se genera un registro en el historial, lo que disminuye en gran modo el rendimiento del proceso adems de cargar el historial con registros no deseados. Cmo salvar este inconveniente? Para evitar este efecto aprovechamos que las bsquedas no son memorizadas en el historial cuando se lanzan en tercer plano, de modo que diseamos un nuevo proceso, ACTUALIZAR- VENTAS-CLIENTES-FECHAS-3P, con origen ficha de la tabla CLIENTES. El proceso es el siguiente: Este proceso hemos de lanzarlo en tercer plano desde principal (ACTUALI- ZAR-VENTAS-CLIENTES-FECHAS), pero entonces nos encontraremos con otro detalle: estaremos generando tantas transacciones como clientes ten- ga la lista, de modo que al proceso principal hemos de aadirle una sen- tencia que implique escritura en disco bajo una condicin que no se cum- pla. El proceso totalmente optimizado sera: PROCESO ACTUALIZAR-VENTAS-CLIENTES-FECHAS NO OPTIMIZADO PROCESO ACTUALIZAR-VENTAS-CLIENTES-FECHAS-3P Lista de registros en una tabla en memoria Supongamos un almacn en el que se realiza inventario mediante una pistola inalmbrica conectada al puerto serie de una mquina. De este modo gene- raremos una lista de registros en una tabla en memoria, pero tenemos un pro- blema: las tablas en memoria no pueden compartirse en arquitectura cliente - servidor, de modo que el motor no tiene acceso a la tabla del irunner. En parte podemos solventar este problema, ya que no se puede compartir una lista entera, pero s un solo registro de la lista. Vemoslo en el siguien- te proceso (no optimizado): 11 Servidor de aplicaciones PROCESO OPTIMIZADO PROCESO NO OPTIMIZADO 574 575 VELAZQUEZ VISUAL En el proceso anterior, cuyo origen es una lista de una tabla en memoria (los cdigos de barras ledos por la pistola), filtramos y ordenamos (permitido en este caso por tratarse de una tabla en memoria). A continuacin multiparti- mos por el artculo, recorremos la lista, modificamos la ficha y disparamos el tubo de ficha que da de alta en la tabla MOV STOCKS la cantidad total a regularizar. De este modo (uno a uno) s podemos compartir los registros de una tabla en memoria. El proceso anterior, que se ejecuta en primer plano, va bien si trabajamos en un red local, pero qu ocurrira si el almacn que regulariza se encuen- tra en remoto? y si adems al dar de alta un registro en la tabla MOV STOCKS se disparan contenidos iniciales que evalan varios punteros? En este caso, al lanzar el tubo de ficha en primer plano se generaran muchos sockets, que retardaran en gran modo la aplicacin. Podemos optimizar el proceso ejecutando en tercer plano el siguiente sub- proceso con origen ficha de la tabla en memoria: De este modo la ejecucin es mucho ms rpida, ya que en tercer plano no se generan todos los sockets generados en primer plano. El proceso opti- mizado es el siguiente: PROCESO M-IMPUT-PISTOL-REGULARIZAR-3P 11.15 Incorporacin de un manual de ayuda propio para una aplicacin Podemos utilizar nuestro propio manual de ayuda para una aplicacin final, en lugar de usar el manual del ejecutor de proyectos/navegador de Velz- quez Visual. Para ello crearemos el manual de ayuda con formato HLP, as como su fichero de contenidos correspondiente (.CNT). Ambos ficheros tendrn que ser llamados igual que el proyecto (por ejemplo, si hemos crea- do un proyecto llamado Gestion.map, tenemos que nombrar los ficheros Gestion.hlp y Gestion.cnt). Tendremos que almacenar el manual de ayuda en el directorio creado para la aplicacin en el cach de disco de la mquina cliente. Cuando un clien- te se conecta por primera vez con un servidor, automticamente, dentro de la carpeta WINDOWS o WINNT (segn el sistema operativo) de su disco lo- cal, se crea una carpeta llamada Vatp; dentro de sta se generar una car- peta cuyo nombre ser la IP del servidor conectado; dentro de esta carpe- ta se crearn subcarpetas por cada aplicacin que haya sido ejecutada; dentro de la carpeta de la aplicacin se incluir el manual de ayuda corres- pondiente. En ejecucin, cuando el usuario solicite ayuda se visualizar el fichero de ayuda que hayamos creado para la aplicacin. 11 Servidor de aplicaciones PROCESO OPTIMIZADO 576 577 VELAZQUEZ VISUAL Resumen Con el Servidor de Aplicaciones y HTTP de Velzquez Visual los usuarios podrn acceder con el Navegador a una aplicacin a travs de Internet con el protocolo VATP. Adems ste podr servir pginas web, tanto estticas como dinmicas. Esto ltimo quiere decir que las pginas web se presen- tarn con datos procedentes de la base de datos de la aplicacin, gene- rndose en tiempo real y quedando totalmente integradas con la aplicacin. Podremos ver las pginas web tanto con el Navegador de Velzquez Visual como con cualquier explorador web. Esto implica tambin que podremos ver va http, y en tiempo real, las actualizaciones y modificaciones hechas por Internet va VATP y viceversa, las modificaciones que hagamos con el navegador podrn ser vistas al instante por un usuario con un explorador web. Para servir una aplicacin debemos configurar primero el motor, instalar la aplicacin en el servidor y luego configurar los usuarios, sus grupos, las m- quinas y las carpetas que queramos que compartan, etc. Por defecto, crea- r un usuario, que ser el Supervisor. Con el Servidor de Aplicaciones viene una aplicacin denominada Historial del Servidor, donde se graban todos los movimientos que en ste se pro- ducen y que nos permite conocer su funcionamiento. Es conveniente la realizacin de copias de seguridad de los siguientes ar- chivos para prevenir modificaciones accidentales, en caso de reinstalacin del servidor, etc., y poder recuperar los datos referentes a la configuracin del servidor: fuvm.vuf: aplicaciones abiertas, usuarios y sus propiedades, grupos de usuarios, etc. tareas.fuv: tareas programadas. carcom.vuf: carpetas compartidas. Con el Navegador nos conectaremos al Servidor de Aplicaciones para eje- cutar una aplicacin de la lista que nos presenta. Adems podremos ver pginas web y explorar equipos para ver las carpetas compartidas. Debemos tener en cuenta a la hora de servir una aplicacin que debemos optimizarla para el medio en que va a ser ejecutada: evitar el uso de fun- ciones que llamen numerosas veces al servidor, cuidar dnde y cmo se ejecutan los procesos, la carga de datos que se enviar al usuario, la can- tidad de clculos requeridos, las transacciones que se realizan, etc. 12 Editor de personalizaciones 12.1 Introduccin El Editor de Personalizaciones es una aplicacin que permite tanto perso- nalizar Informes y Dibujos ya existentes en una aplicacin de Velzquez Vi- sual, como crear nuevos informes y dibujos para la misma. Los Informes se utilizan para presentar en papel una lista de registros de una tabla de datos. Cada informe est asociado a una tabla de da- tos. Al presentar el resultado de una bsqueda en una rejilla, los regis- tros a imprimir son los que forman parte de la lista en curso, los cuales pueden haber sido obtenidos como resultado de una bsqueda simple, o de una compleja combinacin de consultas, filtrados, reordenacio- nes, etc. Cuando ejecutamos la aplicacin, en la opcin Archivo/Especificar in- forme disponemos de todos los informes asociados a la tabla de da- tos en curso y que podemos utilizar para imprimir la lista de la rejilla ac- tual. Velzquez Visual dispone de una potente herramienta visual para el diseo de informes que permite definir con gran sencillez cabeceras, lneas de de- talle, pies, agrupamientos, clculos, condiciones, etc. Los Dibujos se utilizan en distintas partes de un proyecto, como logos, di- bujos explicativos, iconos, etc., dentro de objetos tales como son los For- mularios, los Mens de tipo formulario, Mens arbolados e Informes. El di- bujo no puede ser modificado, aunque s puede ser personalizado, es de- cir, en ejecucin no podemos modificar el dibujo, pero podemos hacer que aparezca uno distinto para cada perfil. ste es el motivo por el que a veces se les denomina dibujos estticos. Los dibujos dinmicos son los dibujos que el usuario incorpora a la aplicacin en tiempo de ejecucin formando parte de sus datos. Es posible crear diferentes personalizaciones para una misma aplicacin. Cada una de esas personalizaciones se denomina Perfil. En cualquier caso, lo primero que hay que hacer al arrancar el editor de personalizaciones es cargar el mapa de datos de la aplicacin de Velzquez Visual que queremos personalizar; este mapa de datos tiene la extensin .MAP. Cada personalizacin que creemos ser guardada en el directorio de la apli- cacin (donde se encuentra el mapa de datos) con el identificador que se haya especificado y con la extensin .MVP. Todo el trabajo que se realiza en el Editor de Personalizaciones es guarda- do automticamente en el instante en que se crea o modifica algn objeto o personalizacin. 12 Editor de personalizaciones 580 581 VELAZQUEZ VISUAL 12.2 Interfaz del editor 12.2.1. Partes de la ventana del editor Una vez arrancado el editor de personalizaciones, seleccionamos el mapa de datos que vamos a personalizar. Se trata de un fichero con extensin .MAP que ha sido creado con el Editor de Proyectos de Velzquez Visual. Para cargarlo ejecutamos la opcin de men Archivo/Abrir o pulsamos el botn de la barra de herramientas del Editor de Personalizaciones. Se abrir el cuadro de dilogo para la seleccin de fichero. En Buscar en seleccionamos la carpeta donde se encuentra el mapa de da- tos. Una vez encontrado, lo seleccionamos y pulsamos el botn Abrir. En- tonces el Editor se dividir en cuatro paneles diferentes. Estos paneles son: Panel de informacin: informa sobre la aplicacin y la personalizacin en curso. Nos indica la senda del archivo del que estamos realizando perso- Abrir aplicacin nalizaciones y la senda del archivo donde nos guarda la personalizacin creada. Panel de personalizaciones: lista de las diferentes personalizaciones que se han creado para el mapa de datos en curso. Panel de objetos personalizables: lista de objetos (informes y dibujos) que el programador ha designado como personalizables dentro del mapa en cur- so. Si no aparece ninguno se debe a que el mapa no contiene objetos per- sonalizables. Panel de objetos aadidos: lista de objetos (informes y dibujos) que se han aadido al mapa en la personalizacin en curso. Para modificar las dimensiones de un panel hacemos clic con el botn iz- quierdo del ratn y movemos las barras que dividen los paneles. Una vez cargado el mapa de datos hay que crear una nueva personaliza- cin o seleccionar una existente. 12.2.2. Barra de Mens En la barra de mens podemos acceder a las siguientes opciones: Archivo En el men Archivo podemos acceder a las siguientes opciones: Abrir... (Ctrl+A) un mapa a editar o Cerrar ste. Imprimir y Presentacin prelimi- nar estn deshabilitados. Aunque podamos Configurar impresora, de mo- mento no se usa. Edicin En el men de edicin tenemos las opciones habituales de deshacer y re- hacer ( Deshacer, Ctrl+Z), de cortar, copiar y pegar ( Cortar, Ctrl+X, Copiar, Ctrl+C y Pegar, Ctrl+V). 12 Editor de personalizaciones Abrir Cerrar Deshacer Cortar Copiar Pegar 582 583 VELAZQUEZ VISUAL Objetos Desde este men accedemos a las opciones para crear nuevos objetos Di- bujo e Informe ( Nuevo Dibujo, Nuevo Informe), editarlos (Editar, In- tro), ver sus propiedades ( Propiedades, Alt+Intro) o eliminarlos de la per- sonalizacin ( Suprimir, Supr). Personalizacin En este men podemos crear, eliminar, modificar y duplicar personalizacio- nes ( Nueva, Suprimir, Modificar, Duplicar). Ver Las opciones del men Ver son iguales a las que podemos encontrar en el Editor de Proyectos. Gracias a la casilla de verificacin Barra de herramientas podemos ver o dejar de ver la barra de herramientas segn est activada o no. Por otro lado, tambin podemos activar o desactivar una barra a travs del men de contexto de las mismas. Para ello pulsamos con el botn derecho del ratn Nuevo Dibujo Nuevo Informe Propiedades Suprimir Nueva Suprimir Modificar, Duplicar Barra de herramientas sobre cualquier barra, mostrndose un cuadro de dilogo en el que pode- mos decidir si ver o no la barra de Men (Barra de men), si ver o no la ba- rra de herramientas (Estndar) y escoger, de entre las barras que hayamos creado, cules ver y cules no (Personalizar). Con la opcin Barra de estado decidimos si ver o no la barra de estado de Velzquez Visual, situada en la parte inferior de la pantalla, mientras que la opcin Personalizar nos dar acceso a la ventana para personalizar tanto la barra de herramientas como el entorno de trabajo. Ventana El men Ventana contiene las opciones habituales de Windows: Casca- da, Mosaico Horizontal, Mosaico Vertical y Arreglar Iconos, ms otras en las que podemos escoger la personalizacin de entre las que estamos editando. Ayuda El men Ayuda contiene la opcin Acerca de EdPer32. 12.2.3. Barra de Herramientas Desde la barra de herramientas del Editor de Personalizaciones podemos acceder a las siguientes funciones: Abrir aplicacin: para abrir el mapa de la aplicacin a personalizar. Cortar, Copiar y Pegar: los habituales de Windows. Nuevo Dibujo: en el panel inferior derecho insertaremos un nuevo obje- to Dibujo para la personalizacin que estemos editando. 12 Editor de personalizaciones Abrir aplicacin Cortar, Copiar y Pegar Nuevo Dibujo 584 585 VELAZQUEZ VISUAL Nuevo Informe: igual que en el caso anterior, insertaremos un nuevo ob- jeto Informe para la personalizacin que estemos editando en el panel infe- rior derecho. Propiedades: editaremos las propiedades de los objetos creados y edi- tados a travs de ventanas iguales a las que nos aparecen en el Editor de Proyectos, pero no podremos modificar las tablas a las que pertenecen los objetos. Suprimir: estar habilitado para eliminar Dibujos o Informes de la perso- nalizacin que estamos editando. Nueva personalizacin: crearemos una nueva personalizacin para el mapa que hemos abierto. Propiedades Personalizacin: editaremos las propiedades de la perso- nalizacin que estamos editando. Suprimir Personalizacin: eliminamos la personalizacin que estemos editando. Acerca de: informacin sobre la versin del Editor de Personalizaciones y tica Software, S.L. 12.2.4. Personalizacin del entorno de trabajo A travs de la opcin del men Ver/Personalizar podemos crear nuestras propias barras de herramientas y modificar las ya existentes. Al igual que personalizamos las barras de herramientas en el Editor de Pro- yectos podemos hacerlo aqu. En la pestaa Comandos de la ventana de Personalizacin tenemos disponibles todos los comandos de los que se puede hacer uso en el Editor de Personalizaciones. Nuevo Informe Propiedades Suprimir Nueva personalizacin Propiedades Personalizacin Suprimir Personalizacin Acerca de En la pestaa Toolbars ser donde creemos o editemos las barras de he- rramientas. 12 Editor de personalizaciones 586 587 VELAZQUEZ VISUAL 12.3 Creacin de personalizaciones 12.3.1. Designacin de objetos como personalizables 12.3.1. (Editor de Proyectos) Para personalizar tanto un dibujo como un informe tendremos que haberlo designado como personalizable al editarlo con el Editor de Proyectos. Para ello debemos, en primer lugar, configurar el mapa como personali- zable a travs del men Edicin/Propiedades proyecto del Editor de Pro- yectos. En la pestaa General de la ventana Propiedades proyecto tenemos la op- cin Personalizable, que debemos activar marcando su casilla. Aceptamos esta ventana, presentndose otra en la que se indica que Ve- lzquez Visual ha creado una nueva carpeta con el ttulo $Personalizables, en la que deben estar todos aquellos objetos que queremos personalizar. Aceptamos y vamos moviendo o copiando todos aquellos objetos que que- ramos personalizar. Puede darse el caso de que no queramos modificar nin- guno de los objetos del mapa y lo que pretendamos sea aadir informes o dibujos a los ya disponibles. En ese caso podemos dejar vaca la carpeta $Personalizables. Los objetos que aadamos se guardarn con el perfil. Debemos tener en cuenta que los objetos a personalizar son Informes y Di- bujos. Los Dibujos son tanto los que usemos en los informes, como los que aparezcan en formularios, mens, etc., de la propia aplicacin. Cuando el usuario del perfil de personalizacin use el informe o aparezca al- gn dibujo, stos sern sustituidos por los que hemos creado en la perso- nalizacin. Si el usuario no posee perfil ninguno o no est modificado el ob- jeto en su personalizacin, se usarn los que definimos en el mapa. 12.3.2. Nueva personalizacin 12.3.2. (Editor de Personalizaciones) Entraremos ahora en el Editor de Personalizaciones. ste nos pedir el mapa a editar en una ventana de seleccin de fichero (recordemos que debe tener activada la opcin personalizable). Una vez seleccionado, para crear una nue- va personalizacin ejecutaremos la opcin de men Personalizacin/Nueva o pulsaremos el botn de la barra de herramientas del Editor. 12 Editor de personalizaciones Nueva personalizacin 588 589 VELAZQUEZ VISUAL Al crear una nueva personalizacin se pide un Nombre del archivo y una Descripcin de la misma. El archivo ser creado con el nombre especificado y con la extensin .MVP, en la misma carpeta donde se encuentra el mapa de datos (fichero .MAP). De esta forma, al ejecutar la aplicacin se podrn cargar las diferentes per- sonalizaciones que hayamos creado. Si a la personalizacin le damos un nombre de archivo igual que el del ma- pa de datos (el fichero .MAP) sta ser cargada directamente al ejecutar la aplicacin, con lo que aquellos informes y dibujos del mapa que hayamos personalizado sern impresos y visualizados, respectivamente, tal y como se ha definido en la personalizacin, y aquellos informes y dibujos que se hayan creado en la personalizacin estarn disponibles para todos los usuarios. Una vez aceptada la creacin de la personalizacin sta aparecer en el pa- nel correspondiente y se crearn automticamente dos carpetas en el pa- nel de objetos aadidos para guardar all los distintos dibujos e informes que creemos para dicha personalizacin. Si queremos trabajar sobre una personalizacin ya existente, basta con se- leccionarla en el panel correspondiente (arriba a la derecha). Podemos modificar las propiedades de una personalizacin ya creada eje- cutando la opcin del men Personalizacin/Modificar o pulsando el botn de la barra de herramientas. Si queremos eliminar una personalizacin la seleccionaremos en el panel de personalizaciones y pulsamos el botn de la barra de herramientas o en el men Personalizacin. Modificar personalizacin Suprimir personalizacin Todas las personalizaciones que se hagan tanto en informes y dibujos del mapa de datos, como nuevos informes y dibujos que se creen, sern guar- dados en el fichero de personalizacin actual. Los objetos que hayamos personalizado en la personalizacin activa se dis- tinguirn del resto por tener el icono junto a su identificador. Tambin es posible duplicar una personalizacin. Para ello basta con selec- cionar la personalizacin que se quiere duplicar y ejecutar la opcin de me- n Personalizacin/Duplicar. 12.4 Personalizar objetos de un mapa de Velzquez Visual Una vez arrancado el Editor de Personalizaciones y seleccionado el mapa de datos que queremos personalizar, si hemos creado informes y dibujos personalizables stos sern mostrados en el panel de objetos personaliza- bles. Recordemos que para poder personalizar los objetos debemos haber creado antes una personalizacin. Un mismo informe o dibujo es personalizable de forma independiente en cada personalizacin que generemos. Es decir, podemos crear diferentes personalizaciones con distintas variaciones de un mismo informe. As, en tiempo de ejecucin se presentar el informe que corresponda a la perso- nalizacin activa. Debemos tener en cuenta que, una vez personalizado un informe o un di- bujo, si modificamos el original en el mapa, estos cambios no se vern en los objetos de las personalizaciones, puesto que son independientes y es- pecficos para cada uno de los perfiles. 12.4.1. Personalizar un informe Para personalizar un informe hay que hacer doble clic sobre el mismo en el pa- nel de objetos personalizables del Editor de Informes Personalizables. Si el in- forme an no ha sido personalizado, en la personalizacin activa aparecer un cuadro de dilogo en el que debemos confirmar nuestra intencin de editarlo. Si pulsamos el botn No se cancelar la personalizacin del informe. Si pul- samos S se mostrar el otro cuadro de dilogo en el que debemos decidir 12 Editor de personalizaciones Marcador 590 591 VELAZQUEZ VISUAL si lo que vamos a modificar es una copia del original o partimos de un in- forme en blanco. En ambos casos, el informe que obtengamos sustituir al original cuando el usuario del perfil lo use. Si pulsamos el botn S accederemos directamente al Editor de Informes, en el que podremos realizar cuantas modificaciones sean necesarias en el diseo del informe. Si pulsamos el botn No se presentar el cuadro de dilogo del Asistente para la creacin de informes. En este cuadro de dilogo tendremos que seleccionar cmo queremos crear el informe: Ninguno: se ejecutar directamente el Editor de informes. Asistente para informes: para crear de forma rpida y sencilla un informe. Incluye diferentes plantillas. Asistente para etiquetas: para crear de forma rpida y sencilla un informe de etiquetas. Asimismo, se ha de especificar el nombre que tendr el informe. La tabla a la que est asignado, lgicamente, no se puede cambiar. El informe que personalicemos ser guardado en la personalizacin ac- tiva. Si el informe ya hubiese sido personalizado con anterioridad, se acceder directamente al Editor de Informes. 12.4.2. Personalizar un dibujo Para personalizar un dibujo hay que hacer doble clic sobre el mismo en el panel de objetos personalizables del Editor de Personalizaciones. Si an no hemos personalizado el dibujo en la personalizacin activa, apa- recer de nuevo un cuadro de dilogo en el que confirmar que lo vamos a hacer: Para llevar a cabo la personalizacin pulsaremos el botn S y entraremos en el Editor de Dibujos. Si el dibujo ya haba sido personalizado se accede- r directamente al Editor de Dibujos. Las modificaciones que se hagan en el mismo sern guardadas en la per- sonalizacin activa. 12 Editor de personalizaciones 592 593 VELAZQUEZ VISUAL 12.4.3. Crear informes y dibujos Adems de personalizar objetos ya existentes en el mapa de datos, pode- mos crear nuevos informes y dibujos para las personalizaciones, que po- drn ser cargados al ejecutar la aplicacin. Estos informes y dibujos que creemos nicamente se presentarn cuando sea el usuario del perfil quien arranque la aplicacin. Para el resto de perfi- les no estarn disponibles. Si hemos aadido una serie de informes en un perfil y queremos que stos estn disponibles para otros usuarios, lo que podemos hacer es duplicar el perfil y trabajar sobre ste. Tambin podemos abrir dos perfiles distintos, entrar en un informe y copiar los controles para pegarlos en otro informe que hayamos creado en el otro perfil, o en el mismo en el que estamos tra- bajando (debemos tener en cuenta que las ordenaciones y agrupaciones, as como la plantilla elegida que definimos, no se copian, sino que debemos hacerlo de nuevo al crear el nuevo informe). Para crear un nuevo Informe pulsamos el botn Nuevo informe, mos- trndose entonces la ventana del Asistente para informes. Nuevo informe El informe que nos crea tendr como identificador el prefijo MVP y el nom- bre de la tabla a la que est asignado. Si queremos crear un nuevo Dibujo pulsaremos el botn Nuevo Dibujo, crendose uno con un identificador con el prefijo MVP. Pulsando Intro po- dremos entrar al Editor de Dibujos. Estos nuevos objetos que creamos aparecen en el panel inferior derecho agrupados en carpetas: los dibujos en una carpeta nica denominada Di- bujos y los informes en una carpeta que se llama como la tabla a la que es- tn asignados que cuelga de otra carpeta de Informes. 12.5 Cargar las personalizaciones en la aplicacin Una vez que hemos creado las personalizaciones en un mapa, ya estn lis- tas para ser cargadas en el Ejecutor de Proyectos de Velzquez Visual. Pa- ra ello ejecutaremos la aplicacin y si existe alguna personalizacin con el mismo nombre que el mapa de datos (el fichero .MAP) sta ser cargada automticamente para todos los usuarios. Si hemos creado personalizacio- nes con nombre diferente al de la aplicacin habr que proceder de la for- ma siguiente: 12 Editor de personalizaciones Nuevo Dibujo 594 595 VELAZQUEZ VISUAL La aplicacin debe ser ejecutada por un usuario que haya sido dado de al- ta como Administrador y que tenga nivel de privilegio suficiente como para poder modificar a otros usuarios. Recordemos que un usuario administra- dor no puede dar de alta, modificar o borrar a otros usuarios que tengan igual o mayor nivel de privilegio que l. A cada usuario de la aplicacin po- demos asignarle solamente una personalizacin, pero podemos asignar una misma personalizacin a varios usuarios. Una vez entramos como administrador, ejecutamos la opcin del men Op- ciones/Usuarios, apareciendo la ventana de edicin de usuarios. Seleccio- namos un usuario y pulsamos el botn Modificar. En el apartado Perfil seleccionaremos la personalizacin que queremos asignar al usuario. A partir de este momento dicho usuario tendr a su disposicin tanto los di- bujos e informes que hayamos personalizado como los que creemos nue- vos en la personalizacin. Ejemplo: Personalizacin Vamos a crear un perfil de usuario en el que cambiaremos el logo de la em- presa que se usa a lo largo de la aplicacin en mens, informes y formula- rios. Tambin modificaremos un informe para que presente una ficha redu- cida de los clientes y no la ficha completa que por defecto lleva la aplica- cin. Tambin aadiremos un informe que nos haga una lista de clientes con unos pocos datos. Comenzamos haciendo personalizable el mapa. Para ello entramos en el Editor de Proyectos y abrimos el mapa pulsando el botn Propiedades proyecto o en el men Edicin/Propiedades proyecto. 12 Editor de personalizaciones Si se han creado personalizaciones durante la ejecucin de la aplicacin, para que stas puedan ser cargadas basta con que el usuario del perfil salga de la aplicacin. La siguiente vez que entre ya usar el nuevo. ADVERTENCIA e Propiedades proyecto 596 597 VELAZQUEZ VISUAL Aparece entonces la ventana en la que podemos editar las propiedades del proyecto. En la pestaa General se encuentra la casilla que debemos mar- car: Personalizable. A continuacin Velzquez Visual nos avisa de lo que acaba de crear: una carpeta que se llama $Personalizables, en la que debemos situar aquellos objetos que queremos personalizar. All creamos un objeto tipo Dibujo cuyo identificador ser LOGO y que ser el que usemos como logo para las empresas. Este LOGO lo incrustamos en for- mularios, mens, en los informes, etc. Cuando se ejecute la aplicacin, depen- diendo de a qu empresa pertenece el usuario que entre, el LOGO ser distinto. Podemos entrar en el Editor de Dibujos pulsando Intro o haciendo doble clic sobre l y poner un dibujo que sea el que aparezca por defecto cuando el usuario no tenga perfil. e De la carpeta Clientes movemos el Informe que hemos creado para esta ta- bla y lo pasamos tambin a la carpeta de $Personalizables. De esta mane- ra, ambos objetos sern accesibles desde el Editor de Personalizaciones. Al entrar en el Editor de Personalizaciones, ste pide un mapa para perso- nalizarlo (si ya editamos alguno antes abrir ste directamente). Seleccio- namos el que hemos creado. Una vez dentro podemos ver que los elementos que hemos definido como personalizables en el Editor de Proyectos ahora aparecen en el panel infe- rior izquierdo. Vemos tambin que en los paneles de objetos aadidos (pa- nel inferior derecho) y en el de los perfiles (panel superior derecho) no hay ningn elemento. En primer lugar hemos de crear un perfil. Para ello pulsamos el botn Nueva personalizacin, aparecindonos entonces una ventana donde de- bemos introducir el Nombre del archivo de la personalizacin y una Des- cripcin de ste. 12 Editor de personalizaciones e Nueva personalizacin 598 599 VELAZQUEZ VISUAL Recordemos que, si ponemos como nombre del archivo el del mapa, ten- dremos una personalizacin que afectar a todos aquellos que no tengan perfil propio. Nosotros llamaremos al archivo empresa1 y pondremos una descripcin, por ejemplo, Perfil para la empresa 1. Aceptamos y vemos cmo aparece, en el panel de los perfiles, el recin creado. Si adems de este perfil creamos otros, debemos tenerlo seleccio- nado cuando modifiquemos objetos o creemos alguno nuevo. Vemos tambin que nos han dos carpetas en el panel de nuevos objetos: una de Dibujos y otra de Informes. Cuando creemos un nuevo objeto, ste ser creado en su carpeta correspondiente. Comenzamos por modificar el objeto dibujo LOGO. Hacemos doble clic so- bre l, avisndonos el programa de que El objeto an no ha sido personali- zado y si queremos hacerlo. Pulsamos el botn S y seguimos adelante. Nos aparece entonces el Editor de Dibujos con el que contuviera en el mapa. En nuestro caso tenemos un logo que cambiaremos por el de la empresa 1. e Como podemos ver, las opciones para introducir dibujos son las mismas que en el Editor de Proyectos. A travs del men Edicin podemos Pe- gar (Ctrl+V) una imagen desde el portapapeles, Pegar desde... un archivo del disco duro, o bien importar un Objeto OLE. Introducimos nuestro logo a travs de alguno de estos tres medios, y sali- mos del Editor de Dibujos. Tenemos entonces el logo personalizado para la empresa 1. Todos aquellos usuarios que entren con el perfil propio de esta empresa vern como logo en informes, formularios, etc., el de la empresa 1. El resto de usuarios que no tengan perfil vern el logo original que hemos incluido en el mapa. 12 Editor de personalizaciones e Pegar 600 601 VELAZQUEZ VISUAL Cuando salimos del Editor de Dibujos podemos ver cmo el objeto Dibujo que acabamos de editar tiene una marca , indicando que ha sido perso- nalizado en el perfil actual. No es necesario guardar estos cambios. El Editor de Personalizaciones guarda inmediatamente los cambios a medida de que se van realizando en cada uno de los objetos. En caso de querer eliminar una personalizacin para restaurar el objeto anterior, eliminamos ste pulsando el botn Su- primir. Esto no elimina el objeto del mapa, sino que borra la personalizacin del perfil actual. Vamos ahora con el informe. Decamos que el informe por defecto del ma- pa es uno que presenta todos los datos de un cliente. Nosotros queremos que nos haga una ficha reducida. Para ello hacemos doble clic sobre el in- forme, preguntndonos de nuevo si queremos personalizarlo. En el caso de los informes, adems nos pregunta si queremos realizar los cambios sobre una copia del original, o crear uno completamente nuevo. Como en nuestro caso lo que queremos es realizar un cambio sobre uno ya hecho, diremos que queremos modificar una copia del original. Si lo que quisiramos fuera crear uno nuevo completamente diferente, diramos que no y se abrira el Asistente para Informes. e Marcador Suprimir Entramos entonces en el Editor de Informes. ste es el mismo que el del Editor de Proyectos, con las mismas funciones que tena ste y el mismo funcionamiento. En la ventana de edicin podemos ver el informe que guar- damos con el mapa y que hemos de modificar. Realizamos los cambios que nos interese hacer, en nuestro caso eliminar una serie de campos que no queremos que aparezcan en el Detalle, poner en el Encabezado el nombre del cliente y quitar el salto de pgina. Salimos de nuevo al Editor de Personalizaciones y podemos ver cmo apa- rece marcado el objeto como personalizado en este perfil. 12 Editor de personalizaciones e 602 603 VELAZQUEZ VISUAL Vamos a crear el informe que nos falta. Pulsamos el botn Nuevo Infor- me, apareciendo el Asistente para informes. ste funciona exactamente igual que en el Editor de Proyectos. Elegimos el asistente para informes, como tabla la de Clientes y como des- cripcin Listado de Clientes. e Nuevo Informe Elegimos aquellos campos que van a aparecer en el listado y luego indica- mos el orden o agrupamiento que nos interese, en este caso por nombre, para que aparezcan por orden alfabtico. Elegimos la distribucin y orientacin del papel. Como lo que queremos realizar es un listado, elegimos En columnas y orientacin Vertical del papel. Siguiendo con el asistente escogemos la plantilla que mejor nos parezca y el ttulo que llevar el informe, en nuestro caso Listado de Clientes. 12 Editor de personalizaciones e 604 605 VELAZQUEZ VISUAL Pulsamos el botn Finalizar para entrar en el Editor de Informes. Realizamos los cambios que necesitemos y salimos del editor. Veremos en- tonces que este nuevo objeto creado por nosotros aparece en el panel in- ferior derecho del Editor de Personalizaciones, colgando de la carpeta de la tabla Clientes, que cuelga a su vez de la carpeta Informes. Una vez realizada la personalizacin hay que asignarla al usuario. Salimos del Editor de Personalizaciones y abrimos el ejecutor vRunner o el Navega- e dor de Velzquez Visual. ste nos pedir un nombre de usuario y una clave. Vamos a cambiar el perfil de este mismo usuario que usamos para ver el re- sultado. Nos aparece entonces el men inicial del proyecto. En l habamos incluido ya el logo de la empresa. A continuacin vemos el original que habamos in- cluido en el mapa. En la barra de mens nos vamos al men Opciones. Tenemos all la op- cin Usuarios, que ser en la que modifiquemos las caractersticas de un usuario. Debemos recordar que para hacer esto debemos ser Superviso- res y tener un nivel de privilegio por encima del usuario que queramos modificar. 12 Editor de personalizaciones e 606 607 VELAZQUEZ VISUAL Elegimos el Grupo de usuarios, aparecindonos la lista de usuarios perte- neciente a ste; elegimos el que nos interese y pulsamos Modificar. En la ventana que nos aparece podemos modificar el Nombre del usuario, su Palabra Clave, su Privilegio, si ste ser Supervisor, a qu Grupo de usuarios pertenece, qu Men Inicial se presentar cuando arranque la apli- cacin y, por ltimo, el Perfil que queremos asignarle. Escogemos el que hemos creado antes. Adems podemos asignarle los estilos que permitirn al usuario realizar de- terminadas opciones en la aplicacin si as las tenemos programadas. e Aceptamos y salimos de la Edicin de Usuarios. Ahora, como ya comenta- mos antes, debemos salir de la aplicacin para que se carguen los perfiles asignados. Al volver a entrar veremos cmo el logo del men principal ha cambiado para nuestro usuario. Adems, si entramos a la rejilla que nos muestra los clientes, podemos ver cmo estn disponibles los informes creados pa- ra este perfil pulsando el botn Especificar informe de la barra de he- rramientas. 12 Editor de personalizaciones e Especificar informe 13 Importador XBase El Importador Xbase es un programa que permite convertir bases de datos de tipo ASCII o de Dbase en bases de datos de Velzquez Visual. Por cada base de datos que importemos se generar una tabla de datos en el proyecto de Velzquez Visual con sus datos correspondientes. 13.1 Inicio del Importador Xbase Una vez arrancado el Importador Xbase, el primer paso a seguir es especi- ficar el proyecto de Velzquez Visual en el que se desean importar las ba- ses de datos. Si queremos utilizar un proyecto ya existente, ejecutaremos la opcin del men Archivo/Abrir o pulsaremos el botn Abrir mapa de la barra de he- rramientas. Una vez seleccionado el archivo correspondiente, aparecer su estructura de tablas en el panel del Importador Xbase. Si queremos crear un nuevo proyecto de Velzquez, usaremos la opcin de men Archivo/Nuevo Ctrl+N o el botn Nuevo mapa de la barra de he- rramientas. Despus ejecutaremos la opcin Archivo/Guardar o pulsaremos 13 Importador XBase Abrir mapa 612 613 VELAZQUEZ VISUAL el botn Guardar mapa, puesto que para realizar una importacin debe- mos tener un mapa ya guardado antes de comenzar sta: a partir de este momento podremos importar una base de datos ASCII o una base de da- tos de Dbase. 13.2 Importar una base de datos ASCII Si se trata de un fichero ASCII ste no puede ser delimitado, es decir, tiene que ser de ancho fijo (los campos estn alineados en columnas con espa- cios entre cada campo). Pulsando el botn Importar ASCII comenzamos la importacin. Tendre- mos que definir la estructura del archivo ASCII que vamos a importar: el N- mero de campos que tiene, el Nombre plural y singular que tendr la tabla y su Identificador. Tambin tenemos que definir el tipo de tabla que creare- mos (Tipo de base de datos): si es Maestro o Histrico. Tambin podemos elegir uno de los campos como campo CDIGO y otro como campo NOM- BRE. Por ltimo, podemos convertir un archivo ASCII tipo OEM en tipo AN- SI. Esta ltima opcin la activaremos cuando el archivo desde el que que- ramos importar provenga del sistema MS-DOS. Pulsando doble clic sobre una definicin de campo debemos darle un Iden- tificador, su Posicin inicial (contada desde la posicin 0) y Longitud. Guardar mapa Importar ASCII Cuando tengamos definidos todos los campos, aceptamos y guardamos el mapa que hemos generado. Podemos repetir este proceso cuantas veces queramos, para importar tantas tablas con sus datos como sea necesario para el proyecto. Cuando cargamos el proyecto en el Editor de Proyectos vemos cmo se ha creado la tabla de Velzquez Visual con sus campos correspondientes, adems de los siguientes objetos visuales: Una rejilla. Una bsqueda de todo el fichero por el ndice Cdigo. Una bsqueda de todo el fichero por el ndice Nombre. Si ejecutamos la aplicacin, podremos disparar cualquiera de las bsque- das creadas para consultar los datos importados. Ejemplo 13.3.1 Queremos importar un fichero de texto con la siguiente estructura: Enrique Enrquez Enrquez 33206 Gijn Fernn Fernndez Fernndez 33509 Parres Antonio Ramn Ramn 24429 Trascastro Una vez seleccionado el mapa donde vamos a importar los datos tendre- mos que seleccionar el fichero de texto a importar; para ello ejecutaremos la opcin del men Importar/Ascii o pulsamos el botn Importar ASCII de la barra de herramientas. Aparecer un cuadro de dilogo, en el que tendremos que definir la estruc- tura del fichero a importar (nmero de campos que contiene, identificador, posicin inicial y longitud de cada campo). Siguiendo con el ejemplo ante- rior habr que proceder de la forma siguiente: 13 Importador XBase e Importar ASCII 614 615 VELAZQUEZ VISUAL Especificamos el nmero de campos, que sern 3, y una vez especificado el nmero de campos aparecern los siguientes: Campos Tipo Posicin Longitud 0 ID-0 C 0 1 1 ID-1 C 0 1 2 ID-2 C 0 1 Pulsando la barra espaciadora sobre cada fila podremos especificar las pro- piedades de cada campo: ID-0: Identificador: NOMBRE Posicin: 0 Longitud: 21 La posicin inicial hemos de contarla desde la posicin 0. ID-1: Identificador: COD POSTAL Posicin: 21 Longitud: 5 ID-2: Identificador: POBLACION Posicin: 26 Longitud: 7 e Una vez establecida la estructura del fichero ASCII especificaremos qu ti- po de tabla de datos se generar en el proyecto de Velzquez. Siguiendo con el ejemplo ser: Nombre plural: Clientes. Nombre singular: Cliente. Tipo de base de datos: Maestro. Campo cdigo: Generar nuevo campo cdigo (pues en el fichero ASCII no existe). Campo nombre/descripcin: NOMBRE. Convertir OEM a ANSI: Slo necesitaremos activar esta opcin si el fichero ASCII es un fichero de MS-DOS. Por ltimo, aceptamos el cuadro de dilogo de importacin de fichero AS- CII y guardamos el proyecto. 13.3 Importar una base de datos de Dbase Si de lo que se trata es de importar un fichero de Dbase, en primer lu- gar tendremos que, al igual que antes, seleccionar un mapa o crear uno nuevo donde realizaremos la importacin. Despus, seleccionamos el fi- chero DBF a importar; para ello ejecutamos la opcin del men Impor- tar/Dbase (*.dbf) o pulsamos el botn Importar DBF de la barra de herramientas. Una vez seleccionado el fichero aparecer el cuadro de dilogo de im- portacin del fichero Dbase, con la estructura del fichero dbf ya inter- pretada. Lo que tendremos que modificar, si as queremos, son los identificadores de los campos, el nombre plural y singular y el identificador de la tabla re- sultante, adems de su tipo, maestro o histrico. En el caso de que deter- minemos que es maestro podremos decir qu campo es el cdigo, o que se genere uno por cada registro, y cul ser el que usemos como campo nombre. 13 Importador XBase e Importar DBF 616 617 VELAZQUEZ VISUAL Anexo I Formateadores de Velzquez Visual A continuacin presentamos los formateadores con los que podemos trabajar en Velz- quez Visual. Alfabticos Al colocar un nmero detrs del smbolo #, indicamos la longitud mxima de la cadena que se est formateando. Por ejemplo, para limitar el ta- mao de salida del campo %NOMBRE% a 25 caracteres, escribimos: %NOMBRE#25% Numricos (Todos los ejemplos que vie- nen a continuacin se harn con la cifra 1.250) S: formatea el campo numri- co visualizndolo con separa- dor de miles. Por ejemplo, para que una co- lumna muestre el contenido del campo IMPORTE con se- parador de miles escribimos: %IMPORTE#S% El resultado sera: 1.250 Dx: formatea el campo numri- co visualizndolo con x deci- males. Por ejemplo, para que una co- lumna muestre el contenido del campo IMPORTE con 2 de- cimales y sin separador de mi- les, escribimos: %IMPORTE#D2% El resultado sera: 1250,00 (Para incluir separador de miles escribimos %IMPORTE#D2S%, siendo el resultado 1.250,00) Lx: formatea el campo pegn- dolo a la izquierda y rellenando con espacios a la derecha has- ta alcanzar x caracteres. Por ejemplo, para que el im- porte aparezca a la izquierda rellenando hasta el carcter nmero 12 con espacios he- mos de escribir: %IMPORTE#L12% El resultado sera: 1250 (- es un espacio en blanco). Rx: formatea el campo pegn- dolo a la derecha y rellenando con espacios a la izquierda hasta llegar a x caracteres. Por ejemplo, para que el im- porte aparezca a la derecha re- llenando hasta el carcter n- mero 1 con espacios, escribi- mos: %IMPORTE#R12% El resultado es: 1250 Cx: formatea el campo pegn- dolo a la derecha y rellenando con ceros a la izquierda hasta llegar a x caracteres. Por ejemplo, para que el impor- te aparezca a la derecha relle- nando hasta el carcter nme- ro 12 con ceros, escribimos: %IMPORTE#C12% El resultado es: 000000001250 De fechas (Para los ejemplos usaremos la fecha domingo, 2 de agosto de 1998) &d: visualiza el da del mes de un campo fecha (1 - 31) Por ejemplo, para que una co- lumna muestre slo el da del mes del campo FECHA, escri- bimos: %FECHA#&d% El resultado es: 2 &e: visualiza el da del mes de un campo fecha (01 - 31) Por ejemplo, para que una co- lumna muestre slo el da del mes del campo FECHA, escri- bimos: %FECHA#&e% El resultado es: 02 &L: visualiza, en castellano, el da de la semana (en texto) de un campo fecha. Por ejemplo, para que una co- lumna muestre slo el da de la semana del campo FECHA, escribimos: %FECHA#&L% El resultado es: Domingo &A: visualiza, en ingls, el da de la semana (en texto) de un campo fecha (monday, etc.). Por ejemplo, para que una co- lumna muestre slo el da de la semana del campo FECHA, escribimos: %FECHA#&A% El resultado es: Sunday &l: (L minscula) visualiza, en castellano, el da de la semana (abreviado) de un campo fecha. Por ejemplo, para que una co- lumna muestre slo el da en texto abreviado del campo FE- CHA, escribimos: %FECHA#&l% El resultado es: Dom &a: visualiza, en ingls, el da de la semana (abreviado) de un campo fecha. Por ejemplo, para que una co- lumna muestre slo el da en texto abreviado del campo FE- CHA, escribimos: Anexo I Formateadores de Velzquez Visual 620 621 VELAZQUEZ VISUAL %FECHA#&a% El resultado es: Sun &m: visualiza el nmero del mes de un campo fecha (1 - 12). Por ejemplo, para que una co- lumna muestre slo el mes del campo FECHA, escribimos: %FECHA#&m% El resultado es: 8 &n: visualiza el nmero del mes de un campo fecha (01 - 12). Por ejemplo, para que una co- lumna muestre slo el mes del campo FECHA, escribimos: %FECHA#&n% El resultado es: 08 &K: visualiza, en castellano, el mes (en texto) de un campo fecha. Por ejemplo, para que una colum- na muestre slo el mes, en texto, del campo FECHA, escribimos: %FECHA#&K% El resultado es: Agosto &B: visualiza, en ingls, el mes (en texto) de un campo fecha. Por ejemplo, para que una co- lumna muestre slo el mes, en texto, del campo FECHA, es- cribimos: %FECHA#&B% El resultado es: August &k: visualiza, en castellano, el mes (en texto abreviado) de un campo fecha. Por ejemplo, para que una co- lumna muestre slo el mes, en texto abreviado, del campo FECHA, escribimos: %FECHA#&k% El resultado es: Ago &b: visualiza, en ingls, el mes (en texto abreviado) de un campo fecha. Por ejemplo, para que una co- lumna muestre slo el mes, en texto abreviado, del campo FECHA, escribimos: %FECHA#&b% El resultado es: Aug &j: visualiza el da del ao de un campo fecha (1 - 366). Por ejemplo, para que una co- lumna muestre slo el da del ao del campo FECHA, escri- bimos: %FECHA#&j% El resultado ser: 212 &u: visualiza el da de la sema- na en nmero de un campo fe- cha (1 - 7; Lunes= 1). Por ejemplo, para que una co- lumna muestre slo el da de la semana del campo FECHA, escribimos: %FECHA#&u% El resultado ser: 7 &w: visualiza el nmero del da de la semana de un campo fe- cha (0 - 6; Domingo= 0). Por ejemplo, para que una co- lumna muestre slo el nmero del da de una semana de un campo FECHA, escribimos: %FECHA#&w% El resultado es: 0 &W: visualiza el nmero de la semana del ao de un campo fecha (0 - 51). Por ejemplo, para que una co- lumna muestre slo el nmero de la semana del ao de un campo FECHA, escribimos: %FECHA#&W% El resultado es: 30 &U: visualiza el nmero de la semana del ao de un campo fecha (1 - 52). Por ejemplo, para que una co- lumna muestre slo el nmero de la semana del ao de un campo FECHA, escribimos: %FECHA#&U% El resultado es 31 &x: formatea la fecha en la for- ma que el sistema est confi- gurado. Por ejemplo, para que una co- lumna muestre el contenido de un campo FECHA segn el for- mato definido en el sistema, escribimos: %FECHA#&x% &Y: visualiza el ao de un cam- po fecha con siglo. Por ejemplo, para que una co- lumna muestre slo el ao de un campo FECHA, escribimos: %FECHA#&Y% El resultado es 1998 &y: visualiza el ao de un cam- po fecha sin siglo (0 - 99). Por ejemplo, para que una co- lumna muestre slo el ao sin siglo de un campo FECHA, es- cribimos: %FECHA#&y% El resultado es: 98 &z: visualiza el ao de un cam- po fecha sin siglo (00 - 99) Por ejemplo, para que una co- lumna muestre slo el ao sin siglo de un campo FECHA, es- cribimos: %FECHA#&z% El resultado es: 98 De horas (Para los ejemplos tomaremos como referencia la hora 12:31:22) &H: visualiza las horas (0 - 23) Por ejemplo; %HORA#&H% dara el resultado: 12 &M: visualiza los minutos (0 - 59) Por ejemplo; %HORA#&M% dara el resultado: 31 &S: visualiza los segundos (0 - 59) Por ejemplo; %HORA#&S% dara el resultado: 22 Si escribiramos %HO- RA#&H:&M:&S%, el resulta- do sera: 12:31:22 Las subcadenas que presenta- mos a continuacin son espe- cficas para los informes. Aun- que coinciden algunos de los elementos con los del resto de controles, las etiquetas en al- gunos casos son distintas. El uso es el mismo que en el ca- so anterior. Anexo I Formateadores de Velzquez Visual %P Nmero de pgina actual %T Nmero total de pginas %n Nmero de elementos de la lista %d Da del mes (1 - 31) %m Mes (1 - 12) %K Nombre del mes completo %k Nombre del mes abreviado %Y Ao con siglo (Milenio). Por ej. 1996 %y Ao sin siglo (00 - 99) %w Da de la semana (0 - 6). Domingo= 0 %L Nombre del da de la semana completo %l Nombre del da de la semana abreviado %j Da del ao (1 - 366) %U Semana del ao (0 - 51). Inicio semana: domingo %W Semana del ao (0 - 51). Inicio semana: lunes %H Hora (0 - 23) %I Hora ( 1 - 12) %p AM/PM %M Minuto (0 - 59) %S Segundo (0 - 59) Anexo II Funciones del asistente de edicin de frmulas de Velzquez Visual Para cada funcin mostraremos su sintaxis, siendo opcionales todos aquellos parmetros que van entre corchetes ([ ]) , es de- cir, no es obligatoria su especifi- cacin. Disponemos de un asistente para la edicin de fr- mulas por cada parmetro de la funcin, de esta manera resulta ms fcil su composicin. Funciones numricas: Absoluto Devuelve el valor absoluto del nmero, es decir, desprecia el signo. Sintaxis: fAbsoluto ( x ) Parmetros: x: ha de ser un nmero o una expresin numrica. Ejemplo: fAbsoluto ( -35 ) = 35 Redondear Devuelve el nmero entero o decimal ms prximo al valor. Sintaxis: fRedondear ( Valor [ , deci- mal ] ) Parmetros: Valor: dato numrico a redon- dear. Decimal: posicin del decimal a redondear (opcional). Ejemplo: %VALOR% = 12, 58 fRedondear ( %VALOR% ) = 13 fRedondear ( %VALOR% , 1 ) = 12,6 Entero Devuelve la parte entera del valor o recorta decimales. Sintaxis: fEntero ( Valor [ , decimales ] ) Parmetros: Valor: dato numrico a cortar. Decimales: nmero de decima- les a tener en cuenta (opcional). Ejemplo: %VALOR% = 12, 58 fEntero ( %VALOR% ) = 12 fEntero ( %VALOR% , 1 ) = 12,5 Porcentaje Devuelve el nmero resultante de aplicar el porcentaje al valor. Sintaxis: fPorcentaje ( Valor , porcen- taje ) Parmetros: Valor: dato numrico. Porcentaje: porcentaje. Ejemplo: fPorcentaje ( 100 , 20 ) = 20 Neto Devuelve el neto del valor, es decir, el valor menos el porcen- taje. Sintaxis: fNeto ( Valor , porcentaje ) Parmetros: Valor: dato numrico. Porcentaje: porcentaje. Ejemplo: fNeto ( 100 , 20 ) = 80 NumeroAleatorio Genera un nmero entero alea- torio. Sintaxis: fNumeroAleatorio ( ) NumeroEnLetras Convierte un nmero a texto descrito con palabras y ade- ms permite seleccionar el g- nero (masculino o femenino). Sintaxis: fNumeroEnLetras ( Valor [ , Masculino ] ) Parmetros: Valor: dato numrico a convertir. Masculino: gnero, 0-masculi- no, 1-femenino. Ejemplo: fNumeroEnLetras ( 1235,1 ) = mil doscientos treinta y cinco. fNumeroEnLetras ( 1235, 2 ) = mil doscientas treinta y cinco. FormatNumero Convierte un nmero en cade- na de texto formateada segn parmetros. Ej: 123.456,07. Sintaxis: fFormatNumero ( valor [ , bSepMiles [ , nDecimales] ] ) Parmetros: Valor: dato numrico a convertir. BSepMiles: separador de mi- les. Un 1 incluir separador de miles y un 0 no. nDecimales: nmero de deci- males a incluir. Ejemplo: %NUMERO%= 1234,25 fFormatNumero ( %NUME- RO% ) = 1234 fFormatNumero ( %NUME- RO%, 0 , 2 ) = 1234,25 fFormatNumero ( %NUME- RO%, 1 , 2 ) = 1.234,25 Funciones de cadenas: Len Devuelve el nmero de carac- teres de la expresin. Sintaxis: fLen ( ExpAlfa ) Anexo II Funciones del asistente de edicin de frmulas de Velzquez Visual 626 627 VELAZQUEZ VISUAL Parmetros: ExpAlfa: expresin alfabtica. Ejemplo: fLen ( Velzquez ) = 9 Left Extracta caracteres por la iz- quierda de la cadena. El primer carcter tiene la posicin 1. Sintaxis: fLeft ( ExpAlfa , Longitud ) Parmetros: ExpAlfa: expresin alfabtica. Longitud: nmero de caracte- res a extraer. Ejemplo: fLeft ( Velzquez , 3 ) = Vel Right Extracta caracteres por la dere- cha de la cadena. Se comenza- r a contar desde la posicin 1. Sintaxis: fRight ( ExpAlfa , Longitud ) Parmetros: ExpAlfa: expresin alfabtica. Longitud: nmero de caracte- res a extraer. Ejemplo: fRight ( Velzquez , 2 ) = ez Mid Extracta caracteres a partir de una posicin determinada de la cadena. Se comienza a con- tar desde la posicin 0. Sintaxis: fMid ( ExpAlfa , Posicin , Longitud ) Parmetros: ExpAlfa: expresin alfabtica. Posicin: posicin desde la cual se van a extraer los carac- teres. Longitud: nmero de caracte- res a extraer. Ejemplo: fMid ( Velzquez , 4, 3 ) = zqu LeftPalabras Extrae la parte izquierda de la cadena, a partir de una deter- minada posicin sin cortar pa- labras. Sintaxis: fLeftPalabras ( Cadena , Lon- gitud ) Parmetros: Cadena: expresin alfabtica. Longitud: posicin a partir de la cual se desea extraer palabras. Ejemplo: fLeftPalabras ( Juan Martnez Lpez , 4 ) = Juan RightPalabras Extrae la parte derecha de la cadena, a partir de una deter- minada posicin sin cortar pa- labras. Sintaxis: fRightPalabras ( Cadena , Longitud ) Parmetros: Cadena: expresin alfabtica. Longitud: posicin a partir de la cual se desea extraer pala- bras. Ejemplo: fRghtPalabras ( Juan Martnez Lpez , 8 ) = Lpez JustificarLeft Devuelve una cadena, pegada a la izquierda, de la longitud especificada en los parme- tros, rellenando por la derecha, si es necesario, con el carcter de relleno especificado en los parmetros o espacios. Sintaxis: fJustificarLeft ( Dato , Longi- tud [ , Relleno ] ) Parmetros: Dato: expresin alfabtica. Longitud: longitud total de la cadena (ha de ser un nmero). Relleno: carcter de relleno. Ejemplo: fJustificarLeft ( Velzquez , 15 , * ) = Velzquez****** fJustificarLeft (Velzquez, 15 ) = Velzquez JustificarRight Devuelve una cadena, pegada a la derecha, de la longitud es- pecificada en los parmetros, rellenada por la izquierda, si es necesario, con el carcter de relleno o, en su defecto, espa- cios en blanco. Sintaxis: fJustificarRight ( Dato , Lon- gitud [ , Relleno ] ) Parmetros: Dato: expresin alfabtica. Longitud: longitud total de la cadena (ha de ser un nmero). Relleno: carcter de relleno. Ejemplo: fJustificarRight ( Velzquez , 15 , * ) = ******Velzquez fJustificarRight (Velzquez, 15 ) = Velzquez InvertirCadena Da la vuelta a la cadena. Sintaxis: fInvertirCadena ( Cadena ) Parmetros: Cadena: expresin alfabtica a invertir. Ejemplo: fMaysculas ( velzquez ) = zeuqzlev Valor Convierte una cadena alfabti- ca en su valor numrico. Sintaxis: fValor ( ExpAlfa ) Parmetros: ExpAlfa: expresin alfabtica. CheckSet Comprueba si todos los carac- teres de la primera cadena pertenecen tambin a la se- gunda cadena. Sintaxis: fCheckSet ( ExpAlfa1 , Ex- pAlfa2 ) Parmetros: ExpAlfa1: cadena a controlar. ExpAlfa2: cadena de referencia. Ejemplo: %CAMPO1% = dos %CAMPO2% = codos fCheckSet ( %CAMPO1% , %CAMPO2% ) = 1 Campo1 = dos Campo2 = coros fCheckSet ( %CAMPO1% , %CAMPO2% ) = 0 CheckSetNum Devuelve 1 (SI) si todos los ca- racteres de la cadena son dgi- tos (0 al 9) y 0 (NO) si no lo son. Si la cadena incluye separador de miles o dcimas, la funcin devolver 0. Sintaxis: fCheckSetNum ( Cadena ) Parmetros: Cadena: expresin alfabtica de referencia. Ejemplo: fCheckSetNum ( 123456 ) = 1 fCheckSetNum ( 123456a ) = 0 CheckSetAlfa Devuelve 1 (SI) si todos los ca- racteres de la cadena son alfa- bticos de la A a la Z, incluidas la y la , sean maysculas, minsculas o acentuadas, y 0 (NO) si no lo son. Sintaxis: fCheckSetAlfa ( Cadena ) Parmetros: Cadena: expresin alfabtica de referencia. Ejemplo: fCheckSetAlfa ( Nio ) = 1 fCheckSetAlfa ( Almacn 1 ) = 0 CheckSetAlfanum Devuelve 1 (SI) si todos los ca- racteres de la cadena son alfa- bticos (de la A a la Z, y in- cluidas) o dgitos (0 al 9). Equi- vale a fCheckSetNum | fCheck- SetAlfa. Sintaxis: fCheckSetAlfaNum ( Cadena ) Parmetros: Cadena: expresin alfabtica de referencia. Ejemplo: fCheckSetAlfaNum ( Almacn 1 ) = 1 fCheckSetAlfaNum ( Almacn 1 ) = 0 PosSubCadena Devuelve la posicin del inicio de la subcadena de texto den- tro de la cadena, o -1 si no la contiene. La posicin se ha de comenzar a contar desde el 0. Sintaxis: fPosSubcadena ( Cadena , Subcadena, Posicin ) Parmetros: Cadena: expresin alfabtica de referencia. Subcadena: expresin alfab- tica a comprobar. Posicin: posicin inicial de la bsqueda (la primera posicin ser 0). Ejemplo: %CAMPO1% = codos %CAMPO2% = dos fPosSubcadena ( %CAM- PO1% , %CAMPO2% ) = 2 Campo1 = coros Campo2 = dos fPosSubcadena ( %CAM- PO1% , %CAMPO2% ) = -1 OcurrenciasSubCadena Devuelve el numero de veces que aparece la subcadena en la cadena. Sintaxis: fOcurrenciasSubCadena ( Ca- dena , Subcadena) Parmetros: Cadena donde buscar: expre- sin alfabtica de referencia. Subcadena a buscar: expre- sin alfabtica a buscar en la cadena. Posicin inicial bsqueda ca- dena: posicin a partir de la cual se realizar la bsqueda de la cadena. Ejemplo: %CAMPO% = monton fOcurrenciasSubCadena ( %CAM- PO% , n, 4 ) = 1 fOcurrenciasSubCadena ( %CAM- PO% , on, 1) = 2 SustituirSubCadena Sustituye en la cadena todas las ocurrencias de la subcade- na 1 por la 2. Anexo II Funciones del asistente de edicin de frmulas de Velzquez Visual 628 629 VELAZQUEZ VISUAL Sintaxis: fSustituirSubCadena ( Cade- na , Subcadena1 , Subcade- na 2 ) Parmetros: Cadena (dnde buscar): expre- sin alfabtica de referencia. Subcadena1 (qu buscar): ex- presin alfabtica a buscar en la cadena. Subcadena2 (sustituta): expre- sin alfabtica a sustituir en la Cadena por los caracteres de la Subcadena1. Ejemplo: %CAMPO% = pelo fOcurrenciasSubCadena ( %CAM- PO% , l , rr ) = perro RepiteCadena Devuelve una cadena repetida tantas veces como se especifi- que en sus parmetros. Sintaxis: fRepiteCadena ( Cadena , Repeticiones ) Parmetros: Cadena: constante o expresin alfabtica. Repeticiones: nmero de ve- ces a repetir. Ejemplo: fRepiteCadena ( * , 5 ) = ***** fRepiteCadena (abc, 5 ) = abcabcabcabcabc CadenaToAscii Devuelve el cdigo ASCII del carcter especificado de la ca- dena. Si no se le pasa posicin coge el 1 (posicin= 0). Sintaxis: fCadenaToAscii ( Cadena [ , Posicin ] ) Parmetros: Cadena: constante o expresin alfabtica. Posicin: posicin del carcter a convertir (la primera posicin es la posicin 0). Ejemplo: fCadenaToAscii ( abc ) = a fCadenaToAscii (abc, 1 ) = b AsciiToCadena Devuelve una cadena con un carcter del cdigo ASCII es- pecificado como parmetro. Sintaxis: fAsciiToCadena ( NmeroAs- cii ) Parmetros: NumeroAscii: nmero ASCII del carcter que se desea ob- tener (debe ser un nmero en- tre el 0 y el 255). Funciones de conversin de cadenas: Maysculas Convierte una expresin alfa- btica a maysculas. Sintaxis: fMaysculas ( ExpAlfa ) Parmetros: ExpAlfa: expresin alfabtica. Ejemplo: fMaysculas ( velzquez ) = VELZQUEZ Minsculas Convierte una expresin alfa- btica a minsculas. Sintaxis: fMinsculas ( ExpAlfa ) Parmetros: ExpAlfa: expresin alfabtica. Ejemplo: fMinsculas ( VELZQUEZ ) = velzquez EstiloNombre Convierte la primera letra de cada palabra a maysculas y el resto a minsculas. Sintaxis: fEstiloNombre ( cadena ) Parmetros: cadena: constante o expresin alfabtica a convertir. Ejemplo: fEstilo nombre ( velzquez vi- sual ) = Velzquez Visual QuitarAcentos Elimina los acentos de la cadena. Sintaxis: fQuitarAcentos ( cadena ) Parmetros: cadena: constante o expresin alfabtica a convertir. Ejemplo: fQuitarAcentos ( Velzquez ) = Velazquez AnsiToOem Convierte la cadena de ANSI (Windows) a OEM (MS-DOS). Sintaxis: fAnsiToOem ( cadena ) Parmetros: cadena: constante o expresin alfabtica a convertir. OemToAnsi Convierte la cadena de OEM (MS-DOS) a ANSI (Windows). Sintaxis: fOemToAnsi ( cadena ) Parmetros: cadena: constante o expresin alfabtica a convertir. QuitarEspacios Devuelve la cadena pasada co- mo parmetro sin espacios por la izquierda ni por la derecha. Sintaxis: fQuitarEspacios ( cadena ) Parmetros: cadena: constante o expresin alfabtica a convertir. Ejemplo: %CADENA% = Velzquez Vi- sual fQuitarAcentos ( %CADENA% ) = Velzquez Visual Funciones de fecha: Fecha Devuelve la fecha del da, mes y ao solicitados. Sintaxis: fFecha ( Da [ , Mes [ , Ao ] ] ) Parmetros: Da: nmero. Mes: nmero. Es opcional, por defecto se tomar el mes de la fecha del sistema. Ao: nmero. Es opcional, por defecto se tomar el ao de la fecha del sistema. Ejemplo: Fecha del sistema: 11-May- 1998 fFecha ( 26 ) = 26-May-1998 fFecha ( 26 , 8 ) = 26-Ago-1998 fFecha (26 , 8 , 1999) = 26- Ago-1999 Da Devuelve el da de la fecha que se le pase como parmetro. Sintaxis: fDa ( Fecha ) Parmetros: Fecha: fecha de la que se de- sea extraer el da. Ejemplo: %FECHA% = 12-Mayo-1998 fDa ( %FECHA% ) = 12 Mes Devuelve el mes de la fecha que se le pase como parmetro. Sintaxis: fMes ( Fecha ) Parmetros: Fecha: fecha de la que se de- sea extraer el mes. Ejemplo: %FECHA% = 12-Mayo-1998 fMes ( %FECHA% ) = 5 Trimestre Devuelve el trimestre de la fe- cha que se le pase como par- metro. Sintaxis: fTrimestre ( Fecha ) Parmetros: Fecha: fecha de la que se de- sea extraer el trimestre. Ejemplo: %FECHA% = 12-Mayo-1998 fTrimestre ( %FECHA% ) = 2 Ao Devuelve el ao de la fecha que se le pase como parme- tro. Sintaxis: fAo ( Fecha ) Parmetros: Fecha: fecha de la que se de- sea extraer el ao. Ejemplo: %FECHA% = 12-Mayo-1998 fAo ( %FECHA% ) = 1998 Hoy Devuelve la fecha del sistema. Sintaxis: fHoy ( ) Edad Devuelve la diferencia en aos entre dos fechas. Sintaxis: fEdad ( Fecha1 [ , Fecha2 ] ) Parmetros: Fecha1: fecha menor. Fecha2: fecha mayor. Es op- cional, si no se especifica nin- guna fecha tomar por defecto la fecha del sistema. Ejemplo: Fecha actual = 11-Mayo-1998 %FECHA% = 26-Dic-1968 fEdad ( %FECHA% ) = 29 FormatFecha Formatea una fecha del mismo modo que se hace con campos fecha, siendo el 2 parmetro la subcadena de formato. Sintaxis: fFormatFecha ( Fecha, sz- Formato ) Parmetros: Fecha: fecha. szFormato: subcadena de for- mato. Ejemplo: %FECHA% = 20/06/1998 fFormatFecha ( %FECHA% , En Gijn, a %d de %K de %Y ) -> En Gijn, a 20 de Ju- nio de 1998 FechaDasFijos Si el da de la fecha no es uno de los fijos, la fecha ser modi- ficada por una fecha con da fi- jo segn el modo (0 -> ms Anexo II Funciones del asistente de edicin de frmulas de Velzquez Visual 630 631 VELAZQUEZ VISUAL prximo, 1 -> inmediatamente superior, 2 -> inmediatamente inferior). Sintaxis: fFechaDasFijos ( Fecha , nMo- do , nDa1 , [ [ nDa2 ] , ...] ) Parmetros: Fecha: fecha. nModo: modo (0, 1 o 2). nDa1, [nDa2]: da fijo Ejemplo: Si la fecha es el 2-Jul-1998 y los das fijos son 1, 15, 30, de- volver segn el estilo: fFechaDasFijos( %FECHA%, 0, 1,15,30 ) = 1-Jul-1998 fFechaDasFijos( %FECHA%, 1, 1,15,30 ) = 15-Jul-1998 fFechaDasFijos( %FECHA%, 2, 1,15,30 ) = 1-Jul-1998 SumaMeses Devuelve la fecha resultante de sumar el nmero de meses es- pecificado en el segundo par- metro a la fecha especificada en el primero. Sintaxis: fSumaMeses ( Fecha , meses ) Parmetros: Fecha: fecha. Meses: nmero de meses a sumar a la fecha. Ejemplo: Si la fecha es el 2-Jul-1998 fSumaMeses ( %FECHA%, 6 ) -> 2-Ene-1998 SumaAos Devuelve la fecha resultante de sumar el nmero de aos es- pecificado en el segundo par- metro a la fecha especificada en el primero. Sintaxis: fSumaAos ( Fecha , aos ) Parmetros: Fecha: fecha. Aos: nmero de aos a sumar a la fecha. Ejemplo: Si la fecha es el 2-Jul-1998 fSumaMeses ( %FECHA%, 6 ) -> 2-Ene-2004 DasDelMes Devuelve el nmero de das del mes y ao pasados como pa- rmetros. Sintaxis: fDasDelMes ( nMes , nAo ) Parmetros: nMes: nmero del mes. nAo: nmero del ao. Ejemplo: Si el campo fecha es el 2-Feb- 2000 fDasDelMes ( fMes( %FECHA% ), fAo( %FECHA%) ) -> 29 EsBisiesto Devuelve 1 si la fecha o el n- mero pasado como parmetro es un ao bisiesto y 0 si no lo es. Sintaxis: fEsBisiesto ( dato ) Parmetros: Dato: expresin Fecha o nmero. Funciones de hora: Ahora Devuelve la hora del sistema en formato HH:MM:SS. Sintaxis: fAhora ( ) ComponerHora Compone una Hora partiendo de sus elementos. Devuelve un valor de tipo hora. Sintaxis: fComponerHora ( horas , mi- nutos , segundos ) Parmetros: Horas: constante o expresin numrica. Minutos: constante o expre- sin numrica. Segundos: constante o expre- sin numrica. Ejemplo: fComponerHora ( 13 , 24 , 55 ) -> 13:24:55 GetHoras Extracta las horas de la hora pasada como parmetro. Sintaxis: fGetHoras ( Hora ) Parmetros: Hora: expresin de tipo hora. Ejemplo: %HORA% = 15:17:21 fGetHoras ( %HORA% ) -> 15 GetMinutos Extracta los minutos de la hora pasada como parmetro. Sintaxis: fGetMinutos ( Hora ) Parmetros: Hora: expresin de tipo hora. Ejemplo: %HORA% = 15:17:21 fGetHoras ( %HORA% ) -> 17 GetSegundos Extracta los segundos de la hora pasada como parmetro. Sintaxis: fGetSegundos ( Hora ) Parmetros: Hora: expresin de tipo hora. Ejemplo: %HORA% = 15:17:21 fGetSegundos ( %HORA% ) -> 21 FormatHora Formatea una hora del mismo modo que se hace con cam- pos hora, siendo el 2 parme- tro la subcadena de formato. Sintaxis: fFormatHora( Hora , szFor- mato ) Parmetros: Hora: expresin de tipo hora. SzFormato: subcadena de for- mato Ejemplo: %HORA% = 23:12:33 fFormatHora ( %HORA%, %H horas, %M minutos y %S segundos ) -> 23 horas, 12 minutos y 33 segundos. SegundosDiferencia Devuelve la diferencia en se- gundos entre las horas de las fechas especificadas en sus parmetros. Sintaxis: fSegundosDiferencia( Fecha desde , Hora desde , Fecha hasta , Hora hasta ) Parmetros: Fecha desde: fecha inicial del clculo. Hora desde: hora inicial del clculo. Fecha hasta: fecha final del clculo. Hora hasta: hora final del cl- culo. Ejemplo: FECHA-INICIO = 30/06/1998; HORA-INICIO = 16:00:00 FECHA-FIN = 01/7/1998; HO- RA-FIN = 16:00:00 fSegundosDiferencia (%FE- CHA-INICIO%, %HORA-INI- CIO%, %FECHA-FIN%, %HO- RA-FIN%) = 84600 SumaSegundosFecha Devuelve la fecha resultante de sumar los segundos a la Fe- cha/Hora. Sintaxis: fSumaSegundosFecha ( Fe- cha , Hora , Segundos ) Parmetros: Fecha: expresin de tipo fecha. Hora: expresin de tipo hora. Segundos: constante o expre- sin numrica. Ejemplo: FECHA = 30/06/1998 HORA-FIN = 15:50:35 SEGUNDOS = 38000 fSumaSegundosFecha( %FE- CHA-ENTRADA%, %HORA- ENTRADA%, 38000 ) = 1/7/1998 SumaSegundosHora Devuelve la hora resultante de sumar los segundos a la hora especificada en sus parme- tros. Devuelve una hora de re- loj, es decir, que si suma un se- gundo a las 00:59:59 la hora devuelta ser la 1:00:00. Sintaxis: fSumaSegundosHora ( Hora , Segundos ) Parmetros: Hora: expresin de tipo hora. Segundos: constante o expre- sin numrica. Ejemplo: HORA = 15:51:54 SEGUNDOS = 120000 fSumaSegundosHora( %HORA %, %SEGUNDOS% ) = 1:11:24 Funciones varias: DecidirDato Elige un dato en funcin de una condicin. Sintaxis: fDecidirDato ( Condicin , DatoSI , DatoNO ) Parmetros: Condicin: frmula a evaluar. DatoSI: resultado cuando se cumple la condicin. DatoNO: resultado cuando no se cumple la condicin. Ejemplo: fDecidirDato ( 1=0, Verdade- ro, Falso ) = Devuelve Falso. fDecidirDato ( 1=1, Verdade- ro, Falso ) = Devuelve Ver- dadero. Mayor Devuelve el mayor de los dos parmetros. El tipo de compa- racin (numrica, fecha o alfa- btica) depende del tipo de dato especificado en el primer parmetro. Sintaxis: fMayor ( x , y ) Parmetros: x : constante o expresin. y: constante o expresin. Ejemplo: fMayor ( 25, 12 ) = 25 fMayor( 12/10/1968, 24/05/1980 ) = 24-May-1980 fMayor ( abc , def ) = def Menor Devuelve el menor de los dos pa- rmetros. El tipo de comparacin Anexo II Funciones del asistente de edicin de frmulas de Velzquez Visual 632 633 VELAZQUEZ VISUAL (numrica, fecha o alfabtica) de- pende del tipo de dato especifi- cado en el primer parmetro. Sintaxis: fMenor ( x , y ) Parmetros: x: constante o expresin. y: constante o expresin. Ejemplo: fMenor ( 25, 12 ) = 12 fMenor( 12/10/1968, 24/05/1980 ) = 12-Oct-1968 fMenor ( abc , def ) = abc CampoVaco Devuelve 1 si el campo que se le pasa como parmetro est vaco y 0 si no lo est. Sintaxis: fCampoVaco ( %ID_CAM- PO% ) Parmetros: %ID_CAMPO%: identificador del campo. Ejemplo: %NOMBRE% = fCampoVaco (%NOMBRE%) = 1 %NOMBRE% = Luis fCampoVaco (%NOMBRE%) = 0 Pregunta Presenta un cuadro de dilogo con el texto que le pasemos como parmetro, con los boto- nes SI y NO. Devuelve uno si se puls SI y 0 si se puls NO. Sintaxis: fPregunta ( ExpAlfa ) Parmetros: ExpAlfa: texto a presentar en el cuadro de dilogo. Mensaje Presenta un cuadro de dilogo con el texto que le pasemos como parmetro y un botn Aceptar. Sintaxis: fMensaje ( ExpAlfa ) Parmetros: ExpAlfa: texto a presentar en el cuadro de dilogo. Ejemplo: fMensaje ( Est seguro que desea continuar? ) UserFlag Devuelve un 1 si el usuario ac- tual tiene activo el estilo que se pase como parmetro y 0 si lo tiene desactivado. Esta fun- cin se utiliza para establecer condiciones para restringir el acceso de usuarios a ciertas partes de la aplicacin. Como parmetro utiliza un estilo de usuario de los definidos por el programador. Sintaxis: fUserFlag ( Nmero ) Parmetros: Numero: nmero del estilo de usuario. Ejemplo: El estilo 1- puede modificar campos lo tiene activado el usuario CARLOS y desactivado el usuario PEDRO. En tiempo de ejecucin, una sesin de CAR- LOS fUserFlag (1) = 1 y en una de PEDRO fUserFalg (1) = 0. NombrePC Devuelve el nombre del equipo (PC) que est ejecutando la aplicacin. Sintaxis: fNombrePC ( ) Parmetros: No tiene. EjecutarFuncinRemota Ejecuta una funcin remota en un servidor Velzquez. Sintaxis: EjecutarFuncinRemota ( Do- minio, IDAplicacin, IDFun- cin, Parmetros) Parmetros: Dominio: expresin frmula del dominio o IP del servidor del que se quiere lanzar la funcin remota. IDAplicacin: expresin frmula del alias de la aplicacin de la que se quiere lanzar una funcin. IDFuncin: expresin frmula del identificador de la funcin que se quiere lanzar. Parmetros: expresin frmula de los parmetros de la funcin. Esta funcin del asistente re- torna el valor que devuelva la funcin remota ejecutada. Funciones API de Velzquez: GetProyectoNombre Devuelve el nombre del proyec- to que se haya especificado en las propiedades del proyecto. Sintaxis: fGetProyectoNombre( ) Parmetros: No tiene. GetProyectoVersin Devuelve la versin del proyec- to que se haya especificado en las propiedades del proyecto. Sintaxis: fGetProyectoVersin( ) Parmetros: No tiene. GetProyectoCompaa Devuelve el nombre de la com- paa que se haya especifica- do en las propiedades del pro- yecto. Sintaxis: fGetProyectoCompaa( ) Parmetros: No tiene. GetProyectoLicencia Devuelve el nmero de licencia de la compaa que se haya especificado en las propieda- des del proyecto. Sintaxis: fGetProyectoLicencia( ) Parmetros: No tiene. GetProyectoEsSoloLectura Devuelve 1 si en las propieda- des del proyecto se ha activa- do el check Solo lectura y 0 si no se ha activado. Sintaxis: fGetProyectoEsSoloLectura( ) Parmetros: No tiene. GetProyectoPideUsuario Devuelve 1 si se ha activado la peticin de usuario en las pro- piedades del proyecto y 0 si no se ha activado. Sintaxis: fGetProyectoPideUsuario( ) Parmetros: No tiene. GetProyectoTieneCadu- cidad Devuelve 1 si se ha activado la proteccin de caducidad en las propiedades del proyecto y 0 si no se ha activado. Sintaxis: fGetProyectoTieneCaduci- dad( ) Parmetros: No tiene. GetProyectoCaducaFecha Si en las propiedades del pro- yecto se ha establecido una fe- cha de caducidad devolver la misma; si no se ha establecido no devolver nada. Sintaxis: fGetProyectoCaducaFecha( ) Parmetros: No tiene. GetProyectoCaducaEje- cuciones Si en las propiedades del pro- yecto se ha limitado la ejecu- cin del proyecto por nmero de ejecuciones, ser este n- mero el que devuelva. Si no se ha establecido ninguno, devol- ver 0. Sintaxis: fGetProyectoCaducaEjecu- ciones( ) Parmetros: No tiene. GetProyectoCaducaMen- saje Devuelve el mensaje escrito en las propiedades del pro- yecto que ser presentado al usuario cuando caduque la aplicacin. Si no se ha escrito ningn mensaje no devolver nada. Sintaxis: fGetProyectoCaducaMensa- je( ) Parmetros: No tiene. Funciones de cliente- servidor: EsClienteServidor Devuelve 1 si un proyecto Velz- quez se est ejecutando en Cliente-Servidor (con el Nave- gador de Velzquez Visual), 0 en caso contrario (con el VRunner). Sintaxis: fEsClienteServidor( ) Parmetros: No tiene. GetIPServidor Funcin especfica para la eje- cucin de aplicaciones en la versin cliente-servidor de Ve- lzquez Visual. Devuelve la IP del servidor al que se est co- nectado en ese momento. Sintaxis: fGetIPServidor( ) Parmetros: No tiene. HayServidorWeb Funcin especfica para la eje- cucin de aplicaciones en la versin cliente-servidor de Ve- lzquez Visual. Devuelve 1 si hay servidor web disponible. Sintaxis: fHayServidorWeb( ) Parmetros: No tiene. GetPuertoHTTPServidor Funcin especfica para la eje- cucin de aplicaciones en la versin cliente-servidor de Ve- lzquez Visual. Devuelve el n de puerto de escucha HTTP del servidor Velzquez. Sintaxis: fGetPuertoHTTPServidor() Anexo II Funciones del asistente de edicin de frmulas de Velzquez Visual 634 635 VELAZQUEZ VISUAL Parmetros: No tiene. GetWebAplicacin Funcin especfica para la eje- cucin de aplicaciones en la versin cliente-servidor de Ve- lzquez Visual. Devuelve la di- reccin url de la aplicacin con la que se est conectado en ese momento. Devuelve la pa- sarela CGI completa. Sintaxis: fGetWebAplicacin( ) Parmetros: No tiene. Ejemplo: es posible generar en un proyecto de Velzquez Vi- sual pginas html y desde el Navegador de Velzquez Visual podemos atacar a dichas pgi- nas con su explorador web. Es- to nos da la posibilidad de tener un potente generador de lista- dos, en vez de utilizando infor- mes, utilizando pginas html. Para este ejemplo se ha creado en el proyecto de Velzquez Vi- sual llamado GESTION.MAP una pgina HTML con el identi- ficador INDEX en la que se ha- brn incluido links para ejecutar diferentes bsquedas en sus bases de datos. La pgina html de la aplicacin que tiene este identificador es la que se pre- sente por defecto al acceder a la aplicacin va web. Creare- mos un proceso con origen nu- lo como el que sigue: Aadir retorno URL -> fGetWe- bAplicacin() Si el Servidor tiene, por ejem- plo, la IP 200.121.21.20, esta funcin devolvera: ht t p: / / 212. 121. 21. 20/ cgi - vel/GESTION/ Es decir, devuelve la pasarela cgi completa de la aplicacin. GetLastWebURL Devuelve la direccin de la lti- ma url abierta en el explorador web que incorporan tanto el VRunner como el Navegador de Velzquez Visual. Sintaxis: fGetLastWebURL( ) Parmetros: No tiene. GetLastWebTitle Devuelve el ttulo de la ltima url abierta en el explorador web que incorporan tanto el VRunner como el Navegador de Velzquez Visual. Sintaxis: fGetLastWebTitle( ) Parmetros: No tiene. Ejemplo: deseamos crear un proyecto en el que almacenar pginas web que nos sean de inters; para ello se crea una tabla que, entre otros, conten- dr dos campos alfabticos; URL: direccin URL y NOM- BRE: ttulo de esa URL. Crea- remos un proceso (el origen del mismo depender del lugar desde el que se dispare) como el que sigue: Alta Directa -> DIRECCIONES Pre Modificar campo -> URL, fGe- tLastWebURL() Modificar campo -> NOMBRE, fGetLastWebTitle() Post Libre Este proceso genera un regis- tro en la tabla DIRECCIONES, en el que se almacenar en el campo URL la ltima URL abierta en el explorador web de Velzquez y en el campo NOM- BRE el ttulo de dicha URL. GetIPCliente Funcin especfica para la eje- cucin de aplicaciones en la versin cliente-servidor de Ve- lzquez Visual. Devuelve el IP de la estacin cliente. Si el cliente se conecta a travs de un servidor Proxy devolver la IP del proxy. Puede ser utiliza- da tanto en procesos ejecuta- dos va web como va iRunner. Sintaxis: fGetIPCliente( ) Parmetros: No tiene. Funciones de cdigos: CalcularCheckMdulo11 Devuelve una cadena con el carcter de comprobacin se- gn el algoritmo Mdulo11, usado, por ejemplo, en los c- digos bancarios. Sintaxis: fCalcularCheckMdulo11 ( C- digo ) Parmetros: Cdigo: puede ser una cons- tante o una expresin. AddCheckMdulo11 Convierte el cdigo pasado como parmetro en un cdigo Mdulo11. Es decir, devuelve el cdigo ms el carcter de comprobacin. El Mdulo 11 es usado, por ejemplo, en los cdigos bancarios. Sintaxis: fAddCheckMdulo11 ( Cdigo ) Parmetros: Cdigo: puede ser una cons- tante o una expresin. CalcularCheckCode128 Calcula el check del parmetro para crear un Code 128. De- vuelve un nmero del 0 al 102 o -1 si no es correcto. Sintaxis: fCalcularCheckCode128 ( C- digo ) Parmetros: Cdigo: puede ser una cons- tante o una expresin. EspecialCharCode128 Caracteres especiales de Co- de 128: 1 = FNC1 2 = FNC2 3 = FNC3 4 = FNC4 A = Cambio a Code A B = Cambio a Code B C = Cambio a Code C S = Cambio (Shift) Sintaxis: fEspecialCharCode128 ( ca- dena ) Parmetros: Cadena con el carcter ms- cara: hemos de especificar uno de los caracteres especia- les entrecomillados. Ejemplo: fEspecialCharCode128( 1 ) para FNC1 CalcularCheckEan13 Devuelve el dgito de control que debemos aadir al cdigo para que sea un EAN13 vlido. La longitud del cdigo ha de ser 12; si es mayor, los carac- teres sobrantes sern despre- ciados. Sintaxis: fCalcularCheckEan13 ( Ca- dena ) Parmetros: Cdigo: puede ser una cons- tante o una expresin. Ejemplo: %CODIGO% = 112233445566 fCalcularCheckEan13 ( %CO- DIGO% ) = 6 AddCheckEan13 Convierte el cdigo pasado como parmetro en un cdigo Ean13. Es decir, devuelve el cdigo ms el carcter de comprobacin. Sintaxis: fAddCheckEan13 ( Cdigo ) Parmetros: Cdigo: puede ser una cons- tante o una expresin. EsEan13 Devuelve 1 (SI) si el cdigo es un EAN 13, y 0 (NO) en caso contrario. Sintaxis: fEsEan13 ( Cdigo ) Parmetros: Cdigo: puede ser una cons- tante o una expresin. CalcularCheckEan8 Devuelve el dgito de control que debemos aadir al cdigo para que sea un EAN8 vlido. La longitud del cdigo ha de ser 7; si es mayor, los caracte- res sobrantes sern despre- ciados. Sintaxis: fCalcularCheckEan8 ( Cdigo ) Parmetros: Cdigo: puede ser una cons- tante o una expresin. Ejemplo: %CODIGO% = 1122338 fCalcularCheckEan8 ( %CODI- GO% ) = 2 AddCheckEan8 Convierte el cdigo pasado como parmetro en un cdigo Ean8. Es decir, devuelve el c- digo ms el carcter de com- probacin. Sintaxis: fAddCheckEan8 ( Cdigo ) Parmetros: Cdigo: puede ser una cons- tante o una expresin. EsEan8 Devuelve 1 (SI) si el cdigo es un EAN8, y 0 (NO) en caso contrario. Sintaxis: fEsEan8 ( Cdigo ) Parmetros: Cdigo: puede ser una cons- tante o una expresin. CalcularCheckUpc Devuelve el dgito de control que debemos aadir al cdigo para que sea un UPC vlido. La longitud del cdigo ha de ser 11; si es mayor, los carac- teres sobrantes sern despre- ciados. Sintaxis: fCalcularCheckUpc ( Cdigo ) Parmetros: Cdigo: puede ser una cons- tante o una expresin. Ejemplo: %CODIGO% = 11223344559 Anexo II Funciones del asistente de edicin de frmulas de Velzquez Visual 636 637 VELAZQUEZ VISUAL fCalcularCheckUpc ( %CODI- GO% ) = 3 AddCheckUpc Convierte el cdigo pasado como parmetro en un cdigo UPC. Es decir, devuelve el c- digo ms el carcter de com- probacin. Sintaxis: fAddCheckUpc ( Cdigo ) Parmetros: Cdigo: puede ser una cons- tante o una expresin. EsUpc Devuelve 1 (SI) si el cdigo es un UPC, y 0 (NO) en caso con- trario. Sintaxis: fEsUpc ( Cdigo ) Parmetros: Cdigo: puede ser una cons- tante o una expresin. CalcularCheckCode11 Devuelve el dgito de control que debemos aadir al cdigo para que sea un CODE11 vlido. Sintaxis: fCalcularCheckCode11 ( C- digo ) Parmetros: Cdigo: puede ser una cons- tante o una expresin. Ejemplo: %CODIGO% = 112233445599 fCalcularCheckCode11 ( %CODIGO% ) = 3 AddCheckCode11 Convierte el cdigo pasado co- mo parmetro en un cdigo Code11. Es decir, devuelve el cdigo ms el carcter de com- probacin. Sintaxis: fAddCheckCode11 ( Cdigo ) Parmetros: Cdigo: puede ser una cons- tante o una expresin. EsCode11 Devuelve 1 (SI) si el cdigo es un CODE11, y 0 (NO) en caso contrario. Sintaxis: fEsCode11 ( Cdigo ) Parmetros: Cdigo: puede ser una cons- tante o una expresin. CalcularCheckIsbn Devuelve una cadena de un ca- rcter con el dgito de control que debemos aadir al dato para que sea un ISBN vlido. Sintaxis: fCalcularCheckIsbn ( Cdigo ) Parmetros: Cdigo: cdigo a partir del cual se determinar el dgito de control. AddCheckIsbn Convierte el cdigo pasado como parmetro en un cdigo ISBN. Es decir, devuelve el c- digo ms el carcter de com- probacin. Sintaxis: fAddCheckIsbn ( Cdigo ) Parmetros: Cdigo: puede ser una cons- tante o una expresin. EsIsbn Devuelve 1 (SI) si el cdigo es un ISBN, y 0 (NO) en caso con- trario. Sintaxis: fEsIsbn ( Cdigo ) Parmetros: Cdigo: cdigo que se desea comprobar si es un ISBN vlido. EanToIsbn Convierte un EAN en un ISBN. Sintaxis: fEanToIsbn ( ean ) Parmetros: ean: constante o expresin que contenga el cdigo EAN que se desea convertir en ISBN. IsbnToEan Convierte un cdigo ISBN en un EAN. Sintaxis: fIsbnToEan ( isbn ) Parmetros: isbn: constante o expresin que contenga el cdigo ISBN que se desea convertir en EAN. Funciones de juegos de caracteres: GetCharAlfa40 Devuelve el carcter corres- pondiente al nmero pasado como parmetro en la tabla de caracteres Alfa40. Sintaxis: fGetCharAlfa40 ( nmero ) Parmetros: Nmero. GetCharAlfa64 Devuelve el carcter corres- pondiente al nmero pasado como parmetro en la tabla de caracteres Alfa64. Sintaxis: fGetCharAlfa64 ( nmero ) Parmetros: Nmero. GetCharAlfa128 Devuelve el carcter corres- pondiente al nmero pasado como parmetro en la tabla de caracteres Alfa128. Sintaxis: fGetCharAlfa128 ( nmero ) Parmetros: Nmero. GetCodeCharAlfa40 Devuelve el cdigo correspon- diente a la tabla de Alfa40 del carcter de la cadena pasada como primer parmetro, en la posicin especificada en el se- gundo. Sintaxis: fGetCodeCharAlfa40 ( cade- na, [posicin] ) Parmetros: Cadena: cadena de la que se desea extraer el cdigo. Posicin: (opcional), posicin en la cadena del carcter del que se desea obtener el cdigo. GetCodeCharAlfa64 Devuelve el cdigo correspon- diente a la tabla de Alfa64 del carcter de la cadena pasada como primer parmetro, en la posicin especificada en el se- gundo. Sintaxis: fGetCodeCharAlfa64 ( cade- na, [posicin] ) Parmetros: Cadena: cadena de la que se desea extraer el cdigo. Posicin: (opcional), posicin en la cadena del carcter del que se desea obtener el cdigo. GetCodeCharAlfa128 Devuelve el cdigo correspon- diente a la tabla de Alfa128 del carcter de la cadena pasada co- mo primer parmetro, en la posi- cin especificada en el segundo. Sintaxis: fGetCodeCharAlfa128 ( ca- dena, [posicin] ) Parmetros: Cadena: cadena de la que se desea extraer el cdigo. Posicin: (opcional), posicin en la cadena del carcter del que se desea obtener el cdigo. Funciones de directorios: AjustaSenda Convierte una senda para que sea interpretada correctamente. Es decir, sustituye la barra de di- rectorios (\) en \\. Esta funcin debe utilizarse con datos varia- bles, no con constantes especi- ficadas por el programador. Sintaxis: fAjustaSenda ( senda ) Parmetros: Senda: senda path a ajustar. Ejemplo: %PATH% = c:\Archivos de Programa fAjustaSenda ( %PATH% ) = C:\\Archivos de Programa SendaSinNombreExt Devuelve unidad y directorio del parmetro, es decir, de- vuelve la senda sin el nombre ni la extensin del archivo. Sintaxis: fSendaSinNombreExt ( senda ) Parmetros: Senda: dato alfabtico del que extraer la senda. Ejemplo: %ARCHIVO% = N:\Gestion\Ges- tion.map fSendaSinNombreExt ( %AR- CHIVO% ) = N:\Gestion\ ExtraerNombreExtDeSenda Devuelve el nombre del fichero y la extensin del parmetro, es decir, la senda sin unidad ni directorio. Sintaxis: fExtraerNombreExtDeSenda ( senda ) Parmetros: Senda: dato alfabtico del que extraer la senda. Ejemplo: %ARCHIVO% = N:\Gestion\Ges- tion.map fExtraerNombreExtDeSenda ( %ARCHIVO% ) = Gestion.map ExtraerNombreDeSenda Devuelve el nombre del fichero del parmetro, es decir, la sen- da sin unidad, directorio ni ex- tensin. Sintaxis: fExtraerNombreDeSenda ( sen- da ) Parmetros: Senda: dato alfabtico del que extraer la senda. Ejemplo: %ARCHIVO% = N:\Gestion\Ges- tion.map fExtraerNombreDeSenda ( %AR- CHIVO% ) = Gestion ExtraerExtensinDeSenda Devuelve la extensin del fi- chero del parmetro, es decir, la senda sin unidad, directorio ni nombre de archivo. Sintaxis: Anexo II Funciones del asistente de edicin de frmulas de Velzquez Visual 638 639 VELAZQUEZ VISUAL fExtraerExtensinDeSenda ( senda ) Parmetros: Senda: dato alfabtico del que extraer la senda. Ejemplo: %ARCHIVO% = N:\Gestion\Ges- tion.map fExtraerExtensionDeSenda ( %AR- CHIVO% ) = .map Funciones cientficas: BinarioAND Realiza la operacin binaria AND. Sintaxis: fBinarioAND ( nEntero1, nEn- tero2 ) Parmetros: nEntero1: puede ser un nme- ro o una expresin numrica. nEntero 2: puede ser un nme- ro o una expresin numrica. Ejemplo: fBinarioAND ( 1, 1 ) = 1 BinarioOR Realiza la operacin binaria OR. Sintaxis: fBinarioOR ( nEntero1, nEn- tero2 ) Parmetros: nEntero1: puede ser un nme- ro o una expresin numrica. nEntero 2: puede ser un nme- ro o una expresin numrica. Ejemplo: fBinarioOR ( 1, 1 ) = 1 BinarioXOR Realiza la operacin binaria XOR (OR exclusivo). Sintaxis: fBinarioXOR ( nEntero1, nEn- tero2 ) Parmetros: nEntero1: puede ser un nme- ro o una expresin numrica. nEntero 2: puede ser un nme- ro o una expresin numrica. Ejemplo: fBinarioXOR ( 1, 1 ) = 0 RazCuadrada Devuelve la raz cuadrada de x. Sintaxis: fRazCuadrada ( x ) Parmetros: x: puede ser un nmero o una expresin numrica. Ejemplo: fRazCuadrada ( 4 ) = 2 Potencia Devuelve x elevado a la poten- cia de y. Sintaxis: fPotencia ( x , y ) Parmetros: x: base. Puede ser un nmero o una expresin numrica. y: exponente. Puede ser un n- mero o una expresin numrica. Ejemplo: fPotencia ( 4 , 3 ) = 64 Exponencial Devuelve el valor exponencial de x. Sintaxis: fExponencial ( x ) Parmetros: x: puede ser un nmero o una expresin numrica. Logaritmo Devuelve el logaritmo en base e (neperiano) de x. Sintaxis: fLogaritmo ( x ) Parmetros: x: puede ser un nmero o una expresin numrica. Logaritmo10 Devuelve el logaritmo en base 10 de x. Sintaxis: fLogaritmo10 ( x ) Parmetros: x: puede ser un nmero o una expresin numrica. Seno Devuelve el seno de x. Sintaxis: fSeno ( x ) Parmetros: x: puede ser un nmero o una expresin numrica. Coseno Devuelve el coseno x. Sintaxis: fCoseno ( x ) Parmetros: x: puede ser un nmero o una expresin numrica. Tangente Devuelve la tangente de x. Sintaxis: fTangente ( x ) Parmetros: x: puede ser un nmero o una expresin numrica. ArcoSeno Devuelve el arcoseno de x. Sintaxis: fArcoSeno ( x ) Parmetros: x: puede ser un nmero o una expresin numrica. ArcoCoseno Devuelve el arcocoseno de x. Sintaxis: fArcoCoseno ( x ) Parmetros: x: puede ser un nmero o una expresin numrica. ArcoTangente Devuelve la arcotangente de x. Sintaxis: fArcoTangente ( x ) Parmetros: x: puede ser un nmero o una expresin numrica. SenoHiper Devuelve el seno hiperblico de x. Sintaxis: fSenoHiper ( x ) Parmetros: x: puede ser un nmero o una expresin numrica. CosenoHiper Devuelve el coseno hiperblico de x. Sintaxis: fCosenoHiper ( x ) Parmetros: x: puede ser un nmero o una expresin numrica. TangenteHiper Devuelve la tangente hiperbli- ca de x. Sintaxis: fTangenteHiper ( x ) Parmetros: x: puede ser un nmero o una expresin numrica. Funciones de DLL Si en el proyecto se ha creado algn objeto dll con funciones, stas podrn ser selecciona- das pulsando el botn Fun- ciones de dll de la barra de bo- tones del asistente. Anexo II Funciones del asistente de edicin de frmulas de Velzquez Visual Funciones de dll Anexo III Paleta de colores Cada vez que en un objeto aparece una opcin para defi- nir un color, al seleccionarla aparece la ventana Seleccin de Color. En ella podemos op- tar por dos tipos de paleta: RGB y de Windows. Si seleccionamos el modo RGB podremos optar por tres tipos distintos de colores: de Siste- ma, Tpicos y Personalizados. De sistema: contiene los co- lores bsicos de Windows. Si pulsamos el botn Otros aparecer una ventana en la que podremos escoger entre ms Colores bsicos que aparecen en la parte izquier- da de la pantalla, as como definir colores propios en la parte derecha. Para definir colores propios podemos es- pecificar la cantidad de ma- tiz, saturacin y luminosidad y/o el nivel de rojo, de verde y de azul o haciendo clic en la matriz de colores (en la parte superior derecha de la pantalla) y arrastrando el cur- sor que en ella aparece. El color resultante podemos agregarlo a los colores per- sonalizados pulsando el bo- tn Agregar a los colores personalizados. Anexo III Paleta de colores 644 VELAZQUEZ VISUAL Tpica: contiene una serie de colores con ms matices que la paleta anterior; su utilizacin es igual que en el punto anterior. Personalizada: cuando hemos creado un color personalizado, pulsando el botn Aadir Color a Paleta podremos guardarlo en ella y utilizarlo en cualquier otro objeto del programa. Si en cambio seleccionamos el modo Windows, en esta paleta podremos definir cualquiera de los colores tipo de Windows. Esta clase de color permite que en cada aplicacin se ve- an los colores que cada usua- rio tenga definidos para Win- dows.