libro de programación en velneo - tomo i - calidad alta.pdf

442

Upload: jorge-vega-trigueros

Post on 27-Dec-2015

153 views

Category:

Documents


22 download

TRANSCRIPT

Page 1: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf
Page 2: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf
Page 3: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Edita:

Ática Software, S.L.Plaza Nicanor Piñole, 1 - Esc. Izq. - 1º dcha.33205 Gijón (Asturias)Tels.: 985 35 64 60 - 985 35 34 64 • Fax 985 35 44 09Correo electrónico: [email protected]: www.velazquezvisual.com

Page 4: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf
Page 5: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

No está permitida la reproducción total o parcial de este libro, nisu tratamiento informático, ni la transmisión de ninguna forma opor cualquier medio, ya sea electrónico, mecánico, por fotocopia,por registro u otros métodos, sin el permiso previo y por escrito delos titulares.

Page 6: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Agradecemos la inestimable colaboración de los compañeros deÁtica Software, de los equipos de programación y soporte, enespecial el gran esfuerzo realizado por Rafael Cueto-FelguerosoSolís, y a los equipos de comercial y administración por sucontribución a que llegara a buen puerto este manual.

Page 7: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf
Page 8: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Índice

Page 9: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf
Page 10: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

01. INTRODUCCIÓN ............................................................................................................... 151.1. NACIMIENTO Y EVOLUCIÓN DE VELÁZQUEZ VISUAL............................................................ 171.2. MODELO REAL ............................................................................................................ 19

02. INSTALACIÓN DE VELÁZQUEZ VISUAL......................................................................... 212.1. OBTENER VELÁZQUEZ VISUAL........................................................................................ 232.2. REQUISITOS MÍNIMOS.................................................................................................... 232.3. INSTALACIÓN DE VELÁZQUEZ VISUAL............................................................................... 232.4. EJECUTABLES DE VELÁZQUEZ VISUAL ............................................................................. 232.5. MODOS DE GUARDAR UN PROYECTO. ARCHIVOS GENERADOS POR VELÁZQUEZ VISUAL.......... 24

03. INTERFAZ DEL EDITOR DE PROYECTOS...................................................................... 273.1. VENTANA PRINCIPAL DEL EDITOR DE PROYECTOs ............................................................. 29

3.1.1. Barra de Menús .......................................................................................... 303.1.2. Barra de Herramientas................................................................................ 323.1.3. Menús de Contexto .................................................................................... 34

3.2. VENTANA ESQUEMA DE TABLAS...................................................................................... 353.2.1. Barra de Menús .......................................................................................... 393.2.2. Barra de herramientas y opciones.............................................................. 393.2.3. Menús de Contexto .................................................................................... 41

3.3. PERSONALIZACIÓN DEL ENTORNO DE TRABAJO ................................................................. 423.3.1. Personalización de Barras de Herramientas............................................... 433.3.2. Personalización del Entorno ....................................................................... 443.3.3. Personalización del Proyecto ..................................................................... 453.3.4. Personalización del Esquema de Tablas..................................................... 47

04. DESARROLLO BÁSICO DE UNA APLICACIÓN.............................................................. 494.1. EXPLICACIÓN BÁSICA Y GENERAL.................................................................................... 51

4.1.1. Análisis de la información ........................................................................... 514.1.2. Principales elementos que componen una aplicación ............................... 51

4.2. INICIANDO EL PROYECTO ............................................................................................... 534.2.1. Editor de Proyectos .................................................................................... 534.2.2. Fuentes por defecto ................................................................................... 544.2.3. Propiedades del Proyecto .......................................................................... 554.2.4. Tareas pendientes....................................................................................... 60

4.3. ESQUEMA DE TABLAS.................................................................................................... 614.3.1. Tablas de datos........................................................................................... 614.3.2. Tablas de datos: maestras .......................................................................... 614.3.3. Enlace a tabla de datos maestra (enlace singular y plural)......................... 96

4.4. OBJETOS VISUALES...................................................................................................... 1084.4.1. Galería de objetos....................................................................................... 1084.4.2. Rejilla visor de tablas .................................................................................. 1104.4.3. Formulario de Edición Fichas ..................................................................... 1344.4.4. Búsquedas .................................................................................................. 1904.4.5. Menús ......................................................................................................... 2084.4.6. Localizador.................................................................................................. 272

4.5. EJECUCIÓN (VRUNNER) ................................................................................................ 2774.5.1. Interfaz del Ejecutor (VRunner) ................................................................... 2774.5.2. Navegación en el ejecutor .......................................................................... 287

Indice

Page 11: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

10 11 VELAZQUEZ VISUAL

4.5.3. Transacciones ............................................................................................. 2904.6. AGENDA DE TAREAS ..................................................................................................... 292

4.6.1. Exposición del problema ............................................................................ 2924.6.2. Esquema de Tablas..................................................................................... 2944.6.3. Objetos Visuales ......................................................................................... 320

05. INSPECTORES .................................................................................................................. 3915.1. DE TABLAS Y CAMPOS… (F10) ................................................................................ 3935.2. DÓNDE SE USA EL OBJETO (F9)................................................................................ 3945.3. QUÉ OBJETOS USA ................................................................................................ 3975.4. OBJETOS NO USADOS ............................................................................................. 3985.5. POR TIPO DE OBJETO (Ctrl + F9)............................................................................. 3995.6. OBJETOS DE UN COLOR (F3) ................................................................................... 4005.7. CONTENIDO DE FÓRMULAS ....................................................................................... 4015.8. ERRORES DEL PROYECTO ......................................................................................... 402

06. ASISTENTES...................................................................................................................... 4056.1. ASISTENTE PARA EDICIÓN DE FÓRMULAS.......................................................................... 407

6.1.1. Sintaxis de las fórmulas. Operadores y funciones ..................................... 4086.1.2. Operaciones avanzadas .............................................................................. 413

6.2. USO DE LAS CADENAS DE FORMATO................................................................................ 4216.2.1. Sintaxis de las cadenas de formato............................................................ 4216.2.2. El asistente para la edición de cadenas de formato .................................. 4226.2.3. Subcadenas de formato ............................................................................. 4236.2.4. Conversión automática de datos y secuencias de escape en cadenas

de caracteres .............................................................................................. 427

07. VARIABLES........................................................................................................................ 4297.1. VARIABLES GLOBALES ................................................................................................... 431

7.1.1. Definición .................................................................................................... 4317.1.2. Tipos de Variables Globales (en memoria y en disco)................................ 433

7.2. VARIABLES DE SISTEMA ................................................................................................. 4347.2.1. Definición y propiedades ............................................................................ 4347.2.2. Variables de sistema de Velázquez Visual .................................................. 435

7.3. VARIABLES LOCALES ..................................................................................................... 437

Page 12: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

TOMO II

08. DESARROLLO COMPLETO DE UNA APLICACIÓN....................................................... 158.1. TIPOS DE TABLA ........................................................................................................... 17

8.1.1. Tabla Submaestra ....................................................................................... 178.1.2. Tabla Arbolada ............................................................................................ 208.1.3. Tablas históricas ......................................................................................... 248.1.4. Maestro de segundo nivel con clave numérica .......................................... 328.1.5. Histórico doble ........................................................................................... 378.1.6. Creación de una tabla igual a una base de datos externa ......................... 39

8.2. TIPOS DE ENLACE......................................................................................................... 408.2.1. Asistentes para la creación de enlaces ...................................................... 408.2.2. Enlace a hermano contiguo ........................................................................ 418.2.3. Singular de plural por posición................................................................... 458.2.4. Singular de plural por índice....................................................................... 468.2.5. Enlace a tabla de datos indirecta real y virtual.......................................... 498.2.6. Las actualizaciones ..................................................................................... 548.2.7. Componente de actualización a un hermano contiguo.............................. 588.2.8. Enlace a maestro de una tabla contra sí misma......................................... 62

8.3. ANÁLISIS DE LA INFORMACIÓN: EJEMPLOS ....................................................................... 648.3.1. Un centro de enseñanza............................................................................. 648.3.2. Empresa de instalación de cristalería para vehículos................................. 658.3.3. Aplicación de análisis para obras literarias................................................. 678.3.4. Una galería de arte ..................................................................................... 688.3.5. Gestión de un colegio................................................................................. 698.3.6. Gestión de una librería................................................................................ 718.3.7. Aplicación para turismo rural...................................................................... 738.3.8. Gestión de un Quiosco ............................................................................... 788.3.9. Pedidos de compras................................................................................... 868.3.10. Aplicación para control de existencias en almacenes (caso de compras) .. 918.3.11. Tienda de discos......................................................................................... 968.3.12. Hotel ........................................................................................................... 988.3.13. Base de datos de cine ................................................................................ 1048.3.14. Gestión comercial ....................................................................................... 113

8.4. EL ALMACÉN DE OBJETOS ............................................................................................ 1278.5. MÁS OBJETOS VISUALES ............................................................................................... 136

8.5.1. La Lupa ................................................................................................. 1368.5.2. Encarpetado de Histórico ..................................................................... 1418.5.3. Cesta de la compra ............................................................................... 1498.5.4. Hoja de Cálculo ..................................................................................... 1558.5.5. Base de datos externa ODBC-DAO ...................................................... 1598.5.6. Dibujo .................................................................................................... 1648.5.7. Multi-Iconos ........................................................................................ 1698.5.8. Imagen Gif ............................................................................................. 1708.5.9. Barras de Herramientas ...................................................................... 1708.5.10. Impresora Lógica .................................................................................. 1838.5.11. Comunicación Serie .............................................................................. 1848.5.12. Árbol Visor de Tablas .......................................................................... 186

Indice

Page 13: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

12 13 VELAZQUEZ VISUAL

8.5.13. Casillero ................................................................................................ 1898.5.14. Agendizador .......................................................................................... 2058.5.15. Informe .................................................................................................. 2078.5.16. Página Html ........................................................................................... 2538.5.17. Componente Html ................................................................................ 2568.5.18. Editor de Páginas Html............................................................................... 2588.5.19. Procesos ............................................................................................... 2798.5.20. Demonios .............................................................................................. 2878.5.21. Función ............................................................................................... 2888.5.22. Funciones de Procesos .............................................................................. 2898.5.23. Ejecución de procesos en primer, segundo y tercer plano en la arquitectura

VRunner y la arquitectura cliente-servidor de Velázquez Visual................. 4048.5.24. Tubos .......................................................................................................... 4068.5.25. Librería de Funciones DLL ................................................................... 4198.5.26. Directorio de Tablas ............................................................................ 424

09. EJECUTAR UNA APLICACIÓN......................................................................................... 4319.1. CÓMO EJECUTAR UN PROYECTO..................................................................................... 4339.2. INICIO DE UNA APLICACIÓN, CLAVE Y NOMBRE DE USUARIO ................................................ 4339.3. EL MENÚ DEL USUARIO Y SUS OPCIONES......................................................................... 4359.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 ..................................................................... 4379.4.2. Formas de llamar a un formulario............................................................... 4379.4.3. Eliminación temporal de un elemento en una rejilla................................... 4399.4.4. Invertir el orden de una lista dentro de una rejilla ...................................... 4399.4.5. Selección múltiple de registros en una rejilla (Multiselección) ................... 4409.4.6. Edición directa de rejillas............................................................................ 4429.4.7. Exportación Ascii ........................................................................................ 4439.4.8. La Cesta de la Compra............................................................................... 4449.4.9. Guardar y recuperar listas virtuales en disco ............................................. 4489.4.10. Imprimir desde una rejilla o un formulario .................................................. 4489.4.11. Cómo introducir los datos .......................................................................... 4499.4.12. Fundir una ficha con otra............................................................................ 4529.4.13. Cambiar aspecto de la rejilla ...................................................................... 4539.4.14. Cambio de visualización de las hojas de cálculo ....................................... 4549.4.15. Imágenes dinámicas ................................................................................... 4549.4.16. Rejillas encarpetadas en formularios (encarpetados de histórico) ............. 4599.4.17. Usos avanzados de una rejilla .................................................................... 4629.4.18. Utilidades .................................................................................................... 4719.4.19. Ejecución de procesos desde una rejilla .................................................... 4739.4.20. Conmutador de herencia de históricos para arbolados ............................. 4769.4.21. Altas desde un Localizador Arbolado......................................................... 478

9.5. EXPLORADOR WEB....................................................................................................... 4799.6. CORREO ELECTRÓNICO ................................................................................................. 4809.7. INCORPORACIÓN DE UN MANUAL DE AYUDA PROPIO PARA UNA APLICACIÓN........................... 480

10. INSTALACIÓN DE APLICACIONES ................................................................................. 48310.1. VERSIÓN DE VELÁZQUEZ VISUAL BASADA EN SERVIDOR DE DISCO (MONOPUESTO) ................ 485

Page 14: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

10.2. VERSIÓN CLIENTE-SERVIDOR DE VELÁZQUEZ VISUAL ......................................................... 48610.3. CREACIÓN DE APLICACIONES PARA EJECUTAR DESDE CD-ROM......................................... 487

11. SERVIDOR DE APLICACIONES....................................................................................... 48911.1. INSTALACIÓN DEL SERVIDOR .......................................................................................... 49211.2. INTERFAZ DEL SERVIDOR ............................................................................................... 49311.3. BARRA DE MENÚS ........................................................................................................ 495

11.3.1. Aplicaciones................................................................................................ 49511.3.2. Editar........................................................................................................... 49611.3.3. Servicios ..................................................................................................... 49711.3.4. Utilidades .................................................................................................... 49711.3.5. Ver............................................................................................................... 49811.3.6. Ventana ....................................................................................................... 49911.3.7. Ayuda.......................................................................................................... 500

11.4. BARRA DE HERRAMIENTAS ............................................................................................. 50011.5. CONFIGURACIÓN DEL SERVIDOR..................................................................................... 502

11.5.1. Pestaña Estilos............................................................................................ 50311.5.2. Pestaña VATP ............................................................................................. 50411.5.3. Pestaña HTTP ............................................................................................. 50511.5.4. Pestaña iRunner.......................................................................................... 50611.5.5. Pestaña Licencia......................................................................................... 50711.5.6. Configuración básica .................................................................................. 507

11.6. ÁREA DE CONFIGURACIONES .......................................................................................... 50811.6.1. Pestaña Aplicaciones.................................................................................. 50811.6.2. Pestaña Usuarios ........................................................................................ 51011.6.3. Pestaña Enganches .................................................................................... 51311.6.4. Pestaña Transacciones ............................................................................... 51411.6.5. Pestaña Archivos ........................................................................................ 516

11.7. CONFIGURACIÓN DE USUARIOS ...................................................................................... 51911.8. CONFIGURACIÓN DE GRUPOS DE USUARIOS..................................................................... 52711.9. CONFIGURACIÓN DE GRUPOS DE MENSAJERÍA.................................................................. 53211.10. CONFIGURACIÓN DE TAREAS.......................................................................................... 534

11.10.1. Pestaña Tareas programadas............................................................... 53411.10.2. Pestaña Tareas ejecución .................................................................... 536

11.11. HISTORIAL DEL SERVIDOR .............................................................................................. 53711.11.1. Opciones de menú .................................................................................... 53811.11.2. Configuración básica del Historial del servidor ......................................... 543

11.12. CONFIGURACIÓN DE LOS DOMINIOS WEB ......................................................................... 54411.13. NAVEGADOR VELÁZQUEZ VISUAL .................................................................................... 547

11.13.1. Instalación del Navegador ......................................................................... 54711.13.2. Interfaz del Navegador .............................................................................. 54811.13.3. Barra de menús ......................................................................................... 54911.13.4. Barra de herramientas ............................................................................... 560

11.14. OPTIMIZACIÓN DE APLICACIONES EN CLIENTE-SERVIDOR ................................................... 56311.14.1. Sockets TCP: retardos y optimización ...................................................... 56311.14.2. Optimizar el tamaño del mapa .................................................................. 56411.14.3. Elementos que retardan una aplicación .................................................... 56411.14.4. Transacciones ............................................................................................ 56611.14.5. Optimizaciones para el rendimiento óptimo en ejecución ........................ 567

Indice

Page 15: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

14 15 VELAZQUEZ VISUAL

11.14.6. Efectos negativos no deseados ................................................................ 57211.15. INCORPORACIÓN DE UN MANUAL DE AYUDA PROPIO PARA UNA APLICACIÓN........................... 575

12. EDITOR DE PERSONALIZACIONES............................................................................... 57712.1. INTRODUCCIÓN .............................................................................................................. 57912.2. INTERFAZ DEL EDITOR..................................................................................................... 580

12.2.1. Partes de la ventana del editor .................................................................... 58012.2.2. Barra de Menús ........................................................................................... 58112.2.3. Barra de Herramientas ................................................................................. 58312.2.4. Personalización del entorno de trabajo ....................................................... 584

12.3. CREACIÓN DE PERSONALIZACIONES................................................................................. 58612.3.1. Designación de objetos como personalizables (Editor de Proyectos) ........ 58612.3.2. Nueva personalización (Editor de Personalizaciones).................................. 587

12.4. PERSONALIZAR OBJETOS DE UN MAPA DE VELÁZQUEZ VISUAL ............................................ 58912.4.1. Personalizar un informe ............................................................................... 58912.4.2. Personalizar un dibujo.................................................................................. 59112.4.3. Crear informes y dibujos.............................................................................. 592

12.5. CARGAR LAS PERSONALIZACIONES EN LA APLICACIÓN........................................................ 593

13. IMPORTADOR XBASE ...................................................................................................... 60913.1. INICIO DEL IMPORTADOR XBASE...................................................................................... 61113.2. IMPORTAR UNA BASE DE DATOS ASCII............................................................................ 61213.3. IMPORTAR UNA BASE DE DATOS DE DBASE....................................................................... 615

ANEXO I: FORMATEADORES DE VELÁZQUEZ VISUAL....................................................... 617ALFABÉTICOS ......................................................................................................................... 619NUMÉRICOS ........................................................................................................................... 619DE FECHAS ............................................................................................................................ 619DE HORAS ............................................................................................................................. 620

ANEXO II: FUNCIONES DEL ASISTENTE DE EDICIÓN DE FÓRMULASANEXO II: DE VELÁZQUEZ VISUAL ....................................................................................... 623

ANEXO III: PALETA DE COLORES.......................................................................................... 641

Page 16: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

01Introducción

Page 17: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf
Page 18: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

1.1 Nacimiento y evoluciónde Velázquez Visual

Los comienzos de Velázquez Visual se remontan a finales de la década delos 70, principios de los 80, cuando su creador, Juan Muñoz Cobos, co-mienza a diseñar programas de gestión de compras en Basic. Usaba unCommodore Pet 8032, después de haber trabajado con una facturadoraOlivetti en la que incluye un interfaz gráfico.

Tras usar LISP en la programación midi de un Roland MPU-401, en el año1986 realiza un programa para transporte de contenedores en C-Basic. A fi-nales de ese mismo año se pasa a Lattice C y escribe diversos programaspara librerías, apareciendo el gestor de librerías Homero. Paralelamente di-seña un motor de disco en el que aparecen los primeros índices, así comola gestión del área de datos, de la que se aprovecha Homero. Ya entonces,tras darse cuenta de que problemas aparentemente muy distintos se re-suelven de igual modo, surge la idea de abstracción.

Expliquemos esta abstracción mediante una analogía: peras, manzanas, plá-tanos... en principio pueden parecer muy distintos, pero tenemos la capaci-dad de abstraer y englobarlas dentro de una misma categoría: fruta. De mo-do análogo podríamos decir que “Velázquez Visual trabaja con fruta”: comomaneja fruta es capaz de arreglárselas con peras, manzanas, plátanos... ade-más, si una abstracción es buena, cualquier elemento nuevo es asimilado porel modelo al momento. Es lo que el creador de Velázquez Visual denomina“Efecto Kiwi”: aunque nunca hayamos visto un kiwi, como tenemos la ideaabstracta “fruta” en nuestra mente, es identificado como tal de inmediato.

Cuando en Velázquez Visual se plantea un problema aparentemente distin-to a los demás no es necesario retocar el modelo inicial puesto que, en mo-do abstracto, el problema puede ser tratado como los anteriores.

Juan Muñoz continúa diseñando funciones de captura de pantalla y pre-sentación de los datos, y desarrolla los primeros enlaces simples: los pun-teros singular y plural. También prevé la importancia que la conexión en rediba a tener en el futuro, teniéndolo en cuenta en todos los desarrollos si-guientes. De momento sigue trabajando en MS-DOS, con la dificultad detrabajar sin interfaces gráficos.

En el año 1992 migra a C++ todo lo creado hasta entonces, con estructura de32 bits, multitarea y trabajando en Windows. Desde finales de ese año hastala presentación en el SIMO en 1996 de la primera versión de Velázquez Visual,pasan varios años en los que reescribe por completo el kernel de la aplica-ción, incluyendo editor, ejecutor y servidor de disco. Durante dos años escri-bió en torno a 800.000 líneas de código sin poder realizar una sola prueba. Alfinal de ese período de tiempo reescribe el programa de gestión de libreríasHomero, lo que le sirve para afianzar la idea que estructura Velázquez Visual.

A partir de la presentación de Velázquez Visual 1.0 aparecen sucesivas ver-siones con nuevos objetos, enlaces y punteros, siempre manteniendo la

01 Introducción

Page 19: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

18 19 VELAZQUEZ VISUAL

compatibilidad con versiones anteriores. Esto ocasiona que el kernel inicialcrezca más de cien veces. En la versión 2.1 aparece el generador Esquemade Tablas, de modo que Velázquez Visual se desarrolla de un modo que im-plica una programación cada vez más visual. Además de la eficacia y la ra-pidez, se mimará al diseñador de la aplicación, facilitándole la tarea.

Aparecen nuevos objetos y punteros que permiten al diseñador realizar ta-reas importantes sin tener que programar líneas de código, como el enlaceSingular de Plural por índice, que permite realizar inventarios a fecha auto-máticamente, el puntero a hermano contiguo, para gestión de saldos, obje-tos como la Búsqueda alfabética ternaria, etc. Esto implica que el progra-mador ha de abstraer a la hora de diseñar una aplicación ya que VelázquezVisual pretende que la abstracción alcance no sólo a la base de datos, sinoa los procedimientos y a los objetos que usamos, teniendo en cuenta en to-do momento el modelo real de relaciones de Velázquez Visual.

El proceso de abstracción conduce a que objetos nuevos que van apare-ciendo se les aplique las mismas técnicas usadas para trabajar con otros,por ejemplo, haciendo que un contenedor de objetos de tamaño variable secomporte como una tabla, con unos índices y un área de datos.

De esta manera el ejecutor de aplicaciones lee el mapa como un fichero depropiedades, que aplica a la hora de mostrar y trabajar con los distintos ob-jetos visuales: tablas, índices, rejillas, búsquedas, etc. El ejecutor sabeconstruir los diversos objetos mientras que el mapa le dice qué caracterís-ticas deben tener.

Hasta entonces Velázquez Visual había funcionado en red local, pero ha-biendo previsto el desarrollo de las redes y con el impulso de Internet a fi-nales de los años 90, crea el Servidor de Aplicaciones de Velázquez Visualque se presenta en el SIMO de 1999 junto a la versión 4.0 de Velázquez Vi-sual. Gracias de nuevo a la abstracción, todas las aplicaciones diseñadaspara red local funcionan a través de servidor sin ningún problema. La crea-ción del servidor, así como del navegador con el que acceder a él, supusoun trabajo de seis meses y 900.000 líneas de código, que tres meses des-pués fueron ampliadas para que también sirviera páginas web dinámicas,es decir, alimentadas por las tablas de la aplicación.

El futuro de Velázquez Visual pasa por aplicar la arquitectura cliente-servi-dor a toda la estructura, lo que implicaría la edición en red de un mapa enmodo multiusuario. Otra tendencia será la herencia de mapas: un mapa po-drá apuntar hacia otro, asumiendo como propia toda su estructura. En es-te punto confluirían la herencia y la arquitectura cliente-servidor: un mapapodría asimilarse por otro vía red, no importando si ésta es local o Internet.Ya se está pensando en crear índices complejos, tablas polimórficas en lasque los registros tengan diferentes campos según su tipo, etc.

Todas las metas alcanzadas por Velázquez Visual se basan en un códigofuente limpio y documentado, con una programación que busca la rapidezademás de la sencillez, pero inflexible ante los parches, es decir, los pro-blemas han de solucionarse de verdad, evitando las soluciones parciales y

Page 20: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

momentáneas (un ejemplo de esto es que no se usan tablas intermedias pa-ra resolver enlaces y búsquedas como hacen otros desarrolladores, sinoque se enlaza directamente con el dato requerido).

También se sigue una metodología estricta en la sintaxis de la programa-ción, lo que lleva a que la compilación de Velázquez Visual no tenga ni unsolo error ni advertencia (0 errors, 0 warnings). En la programación de Ve-lázquez Visual no se ha escrito ni una sola línea sin antes tener perfecta-mente claro lo que se buscaba.

1.2 Modelo real

Velázquez Visual trabaja con el denominado modelo real. En éste, a diferen-cia del modelo relacional, son las tablas las que se adaptan a la informacióny no al revés. Los enlaces “funcionan”, es decir, sin necesidad de escribir lí-neas de código son capaces de devolver registros en función del enlace queestablezcamos entre las tablas. Además, dispone de una serie de enlacesmás complejos e inexistentes en otros desarrolladores de aplicaciones.

Velázquez Visual cuenta con tablas de tipo maestro, caracterizadas por tenerun campo que identifica de forma inequívoca sus registros, además de un ín-dice con clave única o irrepetible (campo e índice Código), y que serán las ta-blas que más usemos; tablas de tipo submaestro, que necesitan de una ta-bla padre (maestra) para completarse; tablas arboladas, que en realidad sontablas maestras que se visualizan con una estructura arbolada (al estilo de unárbol de directorios) muy útil cuando trabajamos con familias; tablas históri-cas, que carecen de campo Código y que nos permiten, entre otras cosas,enlazar dos tablas cuando existe plural en las dos direcciones; y tablas está-ticas, para tablas que tienen pocos datos y éstos son fijos, como los días dela semana, los meses del año, etc. (el usuario final no va a modificarlos).

Los enlaces más comunes en Velázquez Visual son el enlace a maestro (sin-gular), que relaciona un elemento de una tabla (histórica) con un elementode otra tabla (maestra) y el enlace a histórico (plural), que relaciona un ele-mento de una tabla (maestra) con varios elementos de otra tabla (histórica).Gracias a estos enlaces podemos, dado un elemento de la tabla maestra,obtener todos sus históricos, y dados una serie de registros de una tablahistórica podemos obtener sus maestros.

Otro es el enlace a hermano contiguo. Gracias a este enlace seremos capa-ces de movernos por los registros de una tabla a través de un índice deter-minado. Supongamos, por ejemplo, una tabla en la que guardamos clientes.El enlace nos permitiría movernos por los registros correspondientes a clien-tes de una misma provincia. Este enlace es muy potente ya que también nospermite lo que en Velázquez Visual se denomina Arrastrado, es decir, calcularun campo en función de otro que tiene el registro anterior (anterior en funciónde un índice). Esto nos será muy útil para calcular saldos, existencias, etc.

01 Introducción

Page 21: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

20 21 VELAZQUEZ VISUAL

Los enlaces de tipo singular de plural permiten enlazar un registro de unatabla maestra con un registro de una tabla histórica. Hay dos tipos: singu-lar de plural por posición y singular de plural por índice.

El enlace singular de plural por posición permite elegir un registro de un his-tórico de la tabla actual resolviéndolo por la posición. Este enlace nos re-solvería, por ejemplo, qué corredor quedó en una posición determinada (elprimero, el último, el séptimo...) en una etapa de la Vuelta a Asturias.

El enlace singular de plural por índice resuelve un registro histórico de la ta-bla actual por un índice determinado. Por ejemplo, gracias a este enlace po-demos obtener las existencias de un artículo a una fecha dada.

Velázquez Visual cuenta también con el enlace a tabla de datos indirecta,de modo que podremos enlazar la tabla de datos en curso con otra tablaque no sea maestra de la actual. Suele tratarse de tablas que carecen decampo Código y que, por tanto, no pueden ser definidas como maestras deotras tablas. Éste puede ser enlace indirecto real (con persistencia en dis-co) o enlace indirecto virtual (con persistencia en memoria).

Usaremos el virtual cuando queramos leer datos, con lo que no ocupan na-da en disco, mientras que el real lo usaremos cuando queramos escribir da-tos, permaneciendo en las tablas. Esta escritura podremos realizarla me-diante el objeto actualización, que permite realizar de manera automáticamodificaciones en otras tablas que nosotros determinemos. Por ejemplo,con una actualización podemos forzar a que las existencias de cierto artí-culo en un almacén se actualicen con la cantidad indicada en las líneas decompra o venta.

En definitiva, con Velázquez Visual debemos darnos cuenta de que el aná-lisis de una aplicación y su reflejo en un esquema de tablas, es decir, el con-junto de tablas y enlaces establecidos entre ellas, es muy importante, por-que de ahí saldrán una serie de funcionalidades que no necesitaremos pro-gramar y que darán una gran potencia y agilidad a la aplicación.

Page 22: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

02Instalación deVelázquez Visual

Page 23: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf
Page 24: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

2.1 Obtener Velázquez Visual

Se puede descargar la versión LT del programa en la siguiente dirección:

http://www.velazquezvisual.com

Esta versión genera aplicaciones sin limitaciones, funcionando también enCliente-Servidor.

2.2 Requisitos mínimos

Velázquez Visual requiere un ordenador que cumpla, como mínimo, las si-guientes características de hardware:

Pentium

Unos 24 MB de disco duro

16 MB de memoria RAM

En cuanto al software, necesitaremos Windows 95, 98, NT, 2000, XP.

2.3 Instalación de Velázquez Visual

La instalación de Velázquez Visual es sencilla, de manera que si ejecutamosel programa de instalación se creará la siguiente estructura de carpetas en“c:\Archivos de programa”.

2.4 Ejecutables de Velázquez Visual

Velázquez Visual se compone de varios programas; veámoslos de forma ge-neral.

02 Instalación deVelázquez Visual

Page 25: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

24 25 VELAZQUEZ VISUAL

Editor de proyectos (fichero Edmap32.exe): contiene el entorno de desarro-llo con el que se crean y modifican las aplicaciones. Estas aplicaciones se-rán almacenadas en ficheros con la extensión MAP (o VAM). Por ello, enmuchas ocasiones dentro del mundo Velázquez Visual a las aplicaciones seles llama mapas.

Ejecutor de proyectos (fichero VRunner.exe): es el módulo que ejecuta lasaplicaciones (o mapas) que se van creando. El ejecutor M se integra dentrode la denominada “arquitectura de red local”. Bastará simplemente conabrir el Ejecutor VRunner desde el propio Editor de Proyectos para ver enejecución el mapa con el que estemos trabajando, pero ojo: desde el Eje-cutor no es posible la modificación de ningún mapa, por lo tanto, al usuariofinal de la aplicación que estemos diseñando no le será posible cambiar losobjetos del mapa ni sus propiedades. Con VRunner es posible ejecutar apli-caciones en modo monopuesto tanto en local como en red.

Importador X-base (fichero ImpXbase.exe): se trata de un pequeño progra-ma que permite incorporar los datos incluidos en bases de datos de tipoASCII o de Dbase a la base de datos de Velázquez Visual. En general nosuele ser muy utilizado; ya veremos qué otros métodos se utilizan en Veláz-quez Visual para importar y exportar datos.

Editor de Personalizaciones (EdPer.exe): es el programa que permite reali-zar personalizaciones diferentes a un mismo mapa. De esta manera, de unmismo mapa podemos hacer diferentes versiones para distintos clientes,cambiando o añadiendo imágenes, informes y otros objetos susceptiblesde personalización, que serán almacenadas en archivos independientes almismo.

Los dos programas siguientes se engloban dentro de la denominada “ar-quitectura cliente-servidor”.

Servidor de aplicaciones (fichero VMotor.exe): es el módulo servidor. Sirveaplicaciones de Velázquez Visual a los clientes vía Navegador de Velázquezy páginas web a clientes vía navegadores de Internet (por ejemplo, Netsca-pe o Iexplorer). Además es también un servidor de disco.

Navegador de Velázquez (fichero iRunner.exe): se trata del módulo Cliente.Realiza la conexión con el servidor vía TCP-IP, siendo además un explora-dor web y explorador cliente de disco.

2.5 Modos de guardar un proyecto.Archivos generados por Velázquez Visual

Existen dos formatos de archivo diferentes en los que puede guardar unproyecto, veámoslos:

MAP: un proyecto con este formato puede ser editado en el Editor de Pro-yectos de Velázquez Visual y también puede ser ejecutado (tanto por VRun-

Page 26: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

ner en modo monopuesto, como por el Servidor de Aplicaciones en modomultiusuario). Éste será el archivo sobre el que el programador trabaje. Pa-ra guardar un proyecto en este modo sólo hemos de ejecutar la opción delEdmap Archivo/Guardar o Archivo / Guardar como.

VAM: un proyecto que haya sido guardado con este formato no puede sereditado en el Editor de Proyectos de Velázquez pero sí ejecutado (tanto porel VRunner como por el Servidor de Aplicaciones, como en el caso anterior).El proyecto se guarda de forma encriptada y la ocupación en disco es me-nor que la de un archivo .MAP. Archivos con este formato serán los que ha-bitualmente se suministren a la hora de instalar las aplicaciones finales. Pa-ra guardar un archivo en este modo hemos de ejecutar la opción del EdmapArchivo/Guardar aplicación, pero ojo, el VAM no puede ser guardado si nose ha guardado antes el MAP.

Por otro lado, al trabajar con una aplicación de Velázquez Visual se generanuna serie de ficheros. Veámoslos:

.DAT: fichero de datos. Contiene los registros introducidos en una tabla dedatos.

.OLD: fichero de datos viejo. Cuando cambia la estructura de datos de unatabla al reestructurarse en ejecución, ésta se guarda con su estructura an-terior con la extensión .OLD. Su creación puede ser omitida.

.IDX: fichero de índices. Contiene los índices que se hayan definido parauna tabla de datos.

.CND: contenedor. Este tipo de ficheros contienen todos los objetos talescomo los de tipo dibujo, texto y texto enriquecido que el usuario final vayaincluyendo en cada tabla.

.CNI: índices del contenedor. Este fichero recoge los índices para los obje-tos del contenedor.

.BAK: copia de seguridad del mapa de datos. Cuando se guarda un mapade datos (.MAP), se genera automáticamente una copia de seguridad conla última versión guardada del mismo. Para recuperarla basta con renom-brar el fichero que tenga esta extensión con la extensión .MAP.

.TRN: fichero de transacciones. Recoge las transacciones que se realizan yserá el que permita deshacer una transacción cuando ha habido una caídadel sistema mientras se ejecutaban procesos de transacciones.

.USR: fichero de usuarios. En él se guarda toda la información relativa a losgrupos de usuarios definidos en el módulo ejecutor de programas. Este fi-chero es generado al ejecutar aplicaciones con VRunner, no con el Servidorde Aplicaciones.

.VAR: fichero de variables. En él se guardan a modo de lista todas las va-riables creadas para un proyecto de datos cuya propiedad es “en disco”.

02 Instalación deVelázquez Visual

Page 27: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

26 27 VELAZQUEZ VISUAL

Este fichero es generado al ejecutar aplicaciones con VRunner no con elServidor de Aplicaciones.

.LOG: agenda. Si se produce alguna incidencia que impida la terminaciónde un proceso transaccionado, deja constancia del mismo en un archivo deeste tipo.

.VPU: impresoras lógicas. Este tipo de archivo se crea cuando un usuarioha conectado una impresora física a una impresora lógica de Velázquez.

.VTV: lista virtual. Con esta extensión se almacenan en disco las listas vir-tuales al seleccionar la opción de listas guardar lista virtual.

.VUF: ficheros de configuración del motor. El fuvm.vuf guarda las aplicacio-nes abiertas, usuarios, grupos... El tareas.vuf almacena las tareas progra-madas y el carcom.vuf guarda las carpetas compartidas.

.CAR: en él se almacenan los encarpetados de histórico manuales.

.VEA: en estos archivos se almacena la configuración de una exportación aASCII cuando pulsamos el botón salvar configuración en la opción de listasExportar a ASCII.

Page 28: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

03Interfaz del Editorde Proyectos

Page 29: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf
Page 30: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

3.1 Ventana principal del Editorde Proyectos

Vamos a crear un nuevo proyecto: para ello entramos en el editor y selec-cionamos la opción de menú Archivo/Nuevo. Al generar el archivo apa-recerá la ventana principal del proyecto, en la que se muestran tres áreasbien definidas:

Estructuras de datos (a): aquí se almacenan las tablas de datos que va-yamos creando, distinguiendo las tablas estáticas del resto por su particu-laridad. También accedemos a las plantillas de campo que se usarán paracrear nuevos campos dentro de las tablas, a las bases de datos externasconectadas por medio de ODBC y a las librerías de funciones DLL.

Variables: en esta región se crean y almacenan las variables globales. Se-rán organizadas con ayuda de carpetas y subcarpetas.

Área de Objetos: aquí se incorporan los objetos visuales. Éstos se han decrear para cada tabla de datos (no todos han de asociarse a una tabla) y losorganizaremos también por medio de carpetas.

En cada una de las tres partes de la ventana principal podemos encontrardos columnas: en una irá el nombre del objeto y en la otra la descripción.

03 Interfaz del Editorde Proyectos

VENTANA PRINCIPAL DEL PROYECTO

Archivo/Nuevo

Page 31: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

30 31 VELAZQUEZ VISUAL

Podemos imprimir listados con todos los objetos del panel izquierdo (listade tablas y sus elementos, tablas estáticas y variables globales). Para elloejecutamos la opción Archivo/Modo Imprimir todo antes de seleccionar laopción de menú Archivo/Imprimir (Ctrl-P) o pulsar el botón Imprimir .

También podemos presentar un listado con todos los objetos visuales delpanel derecho, incluyendo el icono asociado a cada objeto y el identifica-dor de los mismos. Para lanzar el informe tendremos que situarnos en elpanel derecho del editor y posteriormente ejecutar la opción de menú Ar-chivo/Imprimir (Ctrl-P) o pulsar el botón Imprimir .

3.1.1. Barra de Menús

En la Barra de Menús encontraremos las siguientes opciones:En la Barra de Menús encontraremos las siguientes opciones:ArchivoCon el menú Archivo podemos crear un mapa nuevo ( Nuevo Ctrl+N).Abrir uno ya creado ( Abrir Ctrl+A). Cerrar el que estamos editando (Cerrar) y guardarlo ( Guardar Ctrl+G o Guardar Como...). También podre-mos guardarlo en formato .VAM ( Guardar aplicación), comprimido y en-criptado, y ejecutarlo (Ejecutar F5).

También encontramos diferentes opciones para la impresión ( ImprimirCtrl+P, Modo imprimir todo, Presentación preliminar, Especificar impre-sora, Preparar página), además de la posibilidad de enviar el mapa por co-rreo electrónico ( Enviar).

Por último, tenemos una lista de aquellos archivos que hemos abierto enanteriores ocasiones y que podemos abrir al seleccionarlos, así como la op-ción de salir del programa (Salir).

Al igual que en el resto del menú, tenemos la posibilidad de abrirlo y ejecu-tar los comandos con ayuda de la tecla ALT y la letra subrayada en cadauno de los comandos.

EdiciónEn el menú Edición tenemos las opciones habituales de deshacer y rehacer( Deshacer, Ctrl+Z, Rehacer), cortar, copiar y pegar ( Cortar, Ctrl+X,

Copiar, Ctrl+C y Pegar, Ctrl+V).

Además encontramos varias opciones propias de Velázquez, donde podre-mos editar las propiedades del mapa que estamos realizando ( Propie-dades proyecto...), anotar las tareas pendientes de éste ( Tareas pen-dientes...), editar las fuentes que queremos que por defecto tomen los ob-jetos visuales ( Fuentes por defecto...) y, por último, editar los estilos deusuarios ( Estilos de Usuarios...).

InspectoresEn este menú encontramos una serie de inspectores que nos serán de granayuda. Podemos ver los campos que tiene cada tabla ( De tablas y cam-

Imprimir

Nuevo

Abrir

Cerrar

Guardar

Guardar aplicación

Imprimir

Presentación preliminar

Enviar

Deshacer

Rehacer

Cortar

Copiar

Pegar

Propiedades proyecto

Tareas pendientes

Fuentes por defecto

Estilos de Usuarios

Inspector de tablas y campos

Page 32: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

pos... F10), en dónde o qué objetos usan el objeto que tenemos seleccionado( Dónde se usa el objeto... F9), qué objetos a su vez usa el que tenemosseleccionado ( Qué objetos usa...). También podemos localizar aquellos ob-jetos que no se usan en el proyecto ( Objetos no usados). Además, pode-mos buscar por tipos de objeto ( Por tipo de objeto... Ctrl+F9) y aquellosobjetos que tienen un cierto color ( Objetos de un color). Otra opción esbuscar una cadena dentro del contenido de las fórmulas usadas a lo largodel proyecto ( Contenido fórmulas).

El último comando es muy interesante, ya que buscará y localizará aquelloserrores que pueda tener el proyecto ( Errores del proyecto).

ObjetosEn este menú encontramos opciones para editar los objetos, tanto visualescomo tablas, etc. ( Editar... Intro). También podemos ver las propiedadesde esos objetos ( Propiedades... Alt+Intro) o cambiar su identificador (Cambiar identificador F2).

Podemos crear un nuevo objeto visual ( Nuevo/Objeto), un objeto de ta-bla (es decir, un campo, un índice, etc.) o una carpeta o subcarpeta.

Desde aquí también llamamos al almacén de objetos para traer algo de él( Almacén de objetos F8), o eliminar algún objeto ( Suprimir Supr).

Por último, nos permite crear una tabla igual a una externa perteneciente auna base de datos externa conectada por ODBC (Crear tabla igual a exter-na), así como crear un localizador con rejilla (Crear localizador con rejilla).

CamposEl menú Campos nos permite crear un campo que controle la fecha y horadel alta, baja, o modificación de un campo objeto ( Crear campos fe-cha/hora campo objeto), así como un campo que almacene las dimensio-nes de un dibujo introducido en un campo tipo objeto dibujo ( Crear cam-pos dimensiones dibujo).

También tenemos asistentes para crear los diversos tipos de punteros quehay en Velázquez Visual (más adelante los veremos con detalle).

ComunesEl menú Comunes contiene opciones para Localizar y Convertir objetos. Po-demos localizar los siguientes objetos: Icono de Usuarios, Imagen deSplash, Proceso de Inicio, Menú Inicial, Menú de Cierre de Aplicación y Pá-gina Html Principal. Mientras que es posible convertir el objeto selecciona-do, dependiendo del tipo, en uno de los anteriores.

VerEl menú Ver contiene las opciones siguientes:

Barra de herramientas: para ver o dejar de ver la barra de herramientas.También es posible esconder/ver una barra de herramientas a través delmenú de contexto de las mismas, pulsando el botón derecho del ratón so-

03 Interfaz del Editorde Proyectos

Inspector dónde se usa el objeto

Inspector qué objetos usa

Inspector objetos no usados

Inspector por tipo de objeto

Inspector objetos de un color

Inspector contenido fórmulas

Inspector errores del proyecto

Editar

Propiedades

Cambiar identificador

Nuevo/Objeto

Almacén de objetos

Suprimir Supr

Crear campos fecha/hora

Crear campos dimensiones di-bujo

Page 33: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

32 33 VELAZQUEZ VISUAL

bre el área de la barra. Activando o desactivando el check box que se en-cuentra junto al nombre de cada barra de herramientas, ésta estará o no es-tará visible.

Otras opciones del menú Ver son: Barra de estado, para ver o dejar de verla barra de estado de Velázquez Visual, situada en la parte inferior de la pan-talla. Personalizar, dará acceso a la ventana para personalizar tanto la barrade herramientas como el entorno de trabajo. Pantalla completa (F11), vi-sualiza u oculta la barra de menús y la barra de estado del Editor y Sendacompleta: permite visualizar/ocultar en el título de la ventana del Editor lasenda completa del proyecto actual.

VentanaEl menú Ventana contiene las opciones habituales de Windows: Cascada,Mosaico Horizontal, Mosaico Vertical y Arreglar Iconos, más otras propiasque son: Organizador, cada ventana abierta será presentada dentro de unapestaña, por lo que para moverse de una a otra bastará con pulsar con el ra-tón sobre la pestaña deseada. Esquema de tablas, permite acceder a la pan-talla de creación de esquemas, donde podremos crear de forma gráfica lasestructuras de información de la aplicación. Panel siguiente, presentará el si-guiente panel abierto y Panel anterior presentará el panel anterior abierto.

También se presenta una lista de los mapas abiertos en el Editor al mismotiempo, pudiendo seleccionar cuál de ellos quiere abrirse y mostrando cuáles el actual.

? (Ayuda)En el menú Ayuda encontraremos las opciones Ayuda de Velázquez y Acer-ca de EDMAP.

3.1.2. Barra de herramientas

Por defecto, la barra de herramientas del editor de proyectos de VelázquezVisual contiene los siguientes botones:3.1.2. Barra de Herramientas

Nuevo proyecto: para crear un proyecto nuevo.

Abrir proyecto: para cargar un proyecto.

Guardar proyecto: para archivar el proyecto en curso. Al pulsar este bo-tón, automáticamente se guarda en un fichero .BAK una copia con la últimaversión guardada del mismo. De esta forma se puede recuperar fácilmentela versión anterior del proyecto. Un proyecto guardado de esta forma podráser abierto con el Editor de Proyectos y ejecutado (tanto con el VRunner co-mo con el servidor de Aplicaciones). El archivo guardado tendrá extensión.map. Éste será el archivo con el que trabaje el programador.

Guardar aplicación: guarda el proyecto en un modo encriptado. El ar-chivo se generará con extensión .VAM. Este archivo no podrá ser abiertocon el Editor de Proyectos pero sí ejecutado (tanto por el VRunner como por

Nuevo proyecto

Abrir proyecto

Guardar proyecto

Guardar aplicación

Page 34: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

el Servidor de Aplicaciones). Un archivo guardado en este modo ocupa me-nos espacio en disco que un archivo .MAP. Dadas sus características seráel archivo más apropiado para suministrar a sus clientes.

Ejecutar proyecto: para ver la ejecución del proyecto.

Propiedades proyecto: para definir o modificar las características delproyecto (protecciones, usuarios, etc.).

Paneles: para volver a los paneles del Editor esté donde esté.

Esquema: para acceder a la pantalla de esquemas en la que podrácrearse la estructura de tablas de forma visual.

Los tres siguientes son: Cortar, Copiar y Pegar (respectivamente)y a continuación

Deshacer y Rehacer y los inspectores: Inspector de tablas y campos,Inspector Dónde se usa el objeto, Inspector Qué objetos usa el ob-

jeto, Inspector de objetos no usados, Inspector por tipo de objeto,Inspector de objetos por color, Inspector de fórmulas, Inspector

de errores del proyecto.

Nuevo objeto: para visualizar la Galería de Objetos.

Almacén de objetos: permite importar y asignar tablas, campos y obje-tos visuales de otras aplicaciones de Velázquez en el proyecto actual. Unalmacén bien estructurado le ahorrará horas de programación.

Propiedades: para aquellos objetos, como por ejemplo informes o for-mularios, que al pulsar intro sobre ellos se muestra directamente la panta-lla de edición, puede obtener directamente su cuadro de propiedades pul-sando este botón o pulsando la combinación de teclas Alt+Intro.

Suprimir objeto: para eliminar un objeto del proyecto.

Nueva carpeta: para crear carpetas en el panel derecho del editor deproyectos, y Nueva subcarpeta, para crear subcarpetas en el panel derechodel editor de proyectos.

Los cinco botones siguientes sirven para crear sub-objetos de tablas de da-tos: Nuevo campo, Nuevo índice, Nuevo enlace histórico, Nue-va actualización y Nuevo evento de tabla.

Imprimir y Previsualizar la documentación del proyecto u objetos delpanel derecho.

Organizador: con esta forma de visualización todas las ventanas que es-tén abiertas se organizarán a modo de separadores (en la parte inferior iz-quierda de las mismas). Así, para cambiar de ventana, simplemente habráque hacer clic con el ratón sobre la pestaña correspondiente.

03 Interfaz del Editorde Proyectos

Ejecutar proyecto

Propiedades proyecto

Paneles

Esquema

Cortar

Copiar

Pegar

Inspector de tablas y campos

Inspector Dónde se usa el objeto

Inspector Qué objetos usa el objeto

Inspector de objetos no usados

Inspector por tipo de objeto

Inspector de objetos por color

Inspector de fórmulas

Inspector de errores del proyecto

Nuevo objeto

Almacén de objetos

Propiedades

Suprimir objeto

Nueva carpeta

Nuevo campo

Nuevo índice

Nuevo enlace histórico

Nueva actualización

Nuevo evento de tabla

Imprimir

Previsualizar

Organizador

Page 35: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

34 35 VELAZQUEZ VISUAL

Lanza el manual en línea del editor de proyectos.

Lista de proyectos abiertos: en este control se mues-tra el proyecto actual, es decir, si se están editando varios proyectos a lavez, este control mostrará el proyecto en curso. Para cambiar de proyectobastará con abrir este combo box y seleccionarlo.

3.1.3. Menús de contexto

Pulsando con el botón derecho sobre cada uno de los tres paneles de laventana principal del proyecto aparecen unos menús de contexto que pa-samos a explicar.

Panel de Estructura de Datos

Aparece al pulsar con el botón derecho del ratón sobre el área de estructura dedatos. En este menú podemos manejar el árbol de la estructura de datos: ce-rrar la carpeta superior al elemento que tenemos seleccionado ( Cerrar car-peta superior), abrir completamente la carpeta seleccionada ( Abrir carpetacompleta), o cerrarla ( Cerrar carpeta completa). También podemos abrir (Abrir árbol completo) o cerrar el árbol completo ( Cerrar completo).

Podemos añadir objetos al proyecto (Nuevo objeto), o crear una tabla dedatos en Velázquez Visual con igual estructura que una Base de datos ex-terna (Crear tabla igual a externa).

Además veremos dónde se usa un objeto ( Dónde se usa, F9), suprimir-lo ( Suprimir, Supr), cambiar el identificador del objeto seleccionado (

ESTRUCTURA DE DATOS

Lanza el manual en línea deleditor de proyectos

Cerrar carpeta superior

Abrir carpeta completa

Cerrar carpeta completa

Cerrar completo

Dónde se usa

Suprimir

Cambiar Identificador

Page 36: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Cambiar Identificador F2), ver sus propiedades ( Propiedades..., Alt+In-tro), o si lo que seleccionamos es una tabla, ver sus objetos ( Objetos dela tabla... Intro).

Panel de VariablesAquí tenemos estas opciones más: crear una nueva carpeta ( Nueva car-peta) o subcarpeta ( Nueva carpeta hija) para ordenar las variables. Po-demos insertar una nueva variable ( Insertar variable, Ins), seleccionar elcolor de su identificador ( Cambiar color... F3), o pasarlo a negro (Quitarcolor, Shift+F3).

Panel de Objetos VisualesEn el panel de Objetos Visuales, desde el menú de contexto tenemos la op-ción de abrir la Galería de Objetos ( Nuevo objeto), o las opciones que vi-mos en la Barra de Menús Comunes: Localizar y Convertir en: Iconousuarios, Splash, Proceso inicio, Menú inicial, Menú cierre aplica-ción, Página Html principal, según sea el objeto que tengamos seleccionado.

3.2 Ventana Esquema de Tablas

Ahora vamos a pasar al Esquema de Tablas. Para ello, desde la ventanaprincipal del proyecto hemos de pulsar el botón Esquema de Tablas, oseleccionar la opción del menú Ventana/ Esquema de Tablas.

Al entrar en él, como no hemos creado ninguna tabla, el Asistente para lacreación de una tabla de datos aparece abierto.

03 Interfaz del Editorde Proyectos

VENTANA ESQUEMA DE TABLAS CON EL ASISTENTE DE CREACIÓN DE TABLAS

Propiedades

Objetos de la tabla

Nueva carpeta

Nueva carpeta hija

Insertar variable

Cambiar color

Nuevo objeto

Icono usuarios

Splash

Proceso inicio

Menú inicial

Menú cierre aplicación

Página Html principal

Esquema de Tablas

Page 37: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

36 37 VELAZQUEZ VISUAL

Esta nueva ventana nos la ha abierto en un separador distinto. Esto faci-litará la tarea de diseño de una aplicación ya que podremos pasar de laventana principal al esquema de tablas pulsando el separador corres-pondiente.

De momento no nos vamos a fijar mucho en cómo se crea una tabla, sim-plemente seleccionamos Maestro normal con clave numérica y aceptamos.Aparecerá una ventana de propiedades para la creación de un maestro enla que únicamente rellenamos los controles Nombre: Plural y Singular, es-cribiendo por ejemplo Registros y Registro (respectivamente) y aceptamos.

A continuación aparecerá la ventana Esquema de Tablas con la tabla reciéncreada. Veamos las partes que componen esta ventana.

VENTANA CREACIÓN DE MAESTRO

Page 38: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

La pantalla aparece dividida en dos paneles, izquierdo y derecho, y a suvez el izquierdo se divide en otros tres. En la parte superior izquierda semostrará la lista de esquemas que hemos creado en un mismo proyecto.Debajo, se mostrará una lista de todas las tablas del proyecto junto a unacasilla de verificación. Si está activada la casilla de verificación de una ta-bla se mostrarán, en el panel derecho, todos los enlaces que salgan de lamisma. Si está desactivada, no. En la parte inferior del panel izquierdo semostrará la lista de las tablas no utilizadas en el esquema que se esté edi-tando.

En el panel derecho veremos las tablas del proyecto en forma de esquemacon sus correspondientes enlaces. En función del tipo de tabla que se tra-te, éstas se representarán gráficamente de forma y color distintos.

Los distintos tipos de enlace se representan también de distintas formas ycolores.

03 Interfaz del Editorde Proyectos

REPRESENTACIÓN DE LOS DISTINTOS TIPOS DE TABLA

VENTANA ESQUEMA DE TABLAS

Page 39: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

38 39 VELAZQUEZ VISUAL

En esta ventana creamos de forma gráfica y visualmente las tablas que que-ramos, las distribuiremos por pantalla de la forma que más nos interese y,simplemente, pinchando en el enlazador de una y arrastrando a otra,Velázquez Visual creará las relaciones entre las mismas automáticamente.Al volver al Editor de Proyectos podremos comprobar que se han creado to-das las tablas de datos y los enlaces entre las mismas.

Los esquemas tienen otra función muy importante, que es poder consultaren todo momento la estructura de nuestro proyecto y, si así lo queremos,dividirla en varios esquemas que representen las relaciones entre tablas quenosotros seleccionemos. Siempre que carguemos un proyecto, tendremosdisponibles todos los esquemas que hayamos creado en el mismo. Ade-más, podremos imprimirlos.

Desde un esquema podremos editar el cuadro de las propiedades de unatabla, los campos y los índices.

Una vez que tengamos claro qué tablas van a intervenir en un proyecto,cuando vamos a crear éste, la primera vez que entramos en la ventana de Es-quema de Tablas, Velázquez Visual presentará automáticamente el Asistentepara la creación de tablas, donde como hemos hecho antes, seleccionaría-mos una plantilla que queramos usar (maestro, por ejemplo), y crearíamos latabla a partir de ésta. Podremos ver una vez terminado cómo en el panel dela derecha ya se ha dibujado la tabla con su correspondiente nombre.

A partir de ahí iremos creando el resto de tablas y estableciendo los enla-ces que nos interesen. Este esquema se llama por defecto Esquema de ta-blas y será el que tengamos habitualmente en todas nuestras aplicaciones.A partir de éste, crearemos otros en los que nos centraremos en aspectosmás específicos para facilitar el análisis de la aplicación.

Cuando creamos nuevas tablas y enlaces en estos otros esquemas, éstosno son exclusivos del esquema, sino que podremos verlos en todos los de-más seleccionándolos en el panel izquierdo de Tablas no usadas. Y si elimi-namos una tabla de un esquema, esto no quiere decir que la eliminemos delmapa, únicamente dejamos de visualizarla en el esquema que estamos edi-tando. Para eliminar tablas del proyecto hemos de ir a la ventana de pro-yectos y eliminarlas del panel izquierdo.

Para eliminar enlaces que hemos creado hemos de borrar los elementosque se crean al establecer un enlace. Más adelante veremos cuáles son.

REPRESENTACIÓN DE LOS ENLACES

Page 40: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

3.2.1. Barra de menús

Aparte de los menús que veíamos en la ventana principal del proyecto, te-nemos varios específicos para esta ventana. Éstos son:específicos para esta ventana. Estos son:EsquemaCon este menú tenemos la posibilidad de crear un nuevo esquema a partirde las tablas que tenemos en el proyecto (Nuevo). Podemos duplicar el quetenemos seleccionado y estamos editando en ese momento (Duplicar) o eli-minar el esquema de la lista (Eliminar). Para cambiar el nombre de un es-quema usaremos Cambiar nombre (F2).

También podemos añadir o quitar tablas del esquema según nos convengapresentarlas o no (Añadir tabla, Quitar tabla).

Podemos también marcar o desmarcar todas (Marcar todas, Ctrl+M, Des-marcar todas, Ctrl+D). Esto quiere decir, como veíamos al hablar del panelizquierdo de la ventana de esquemas, que según estén o no marcadas lastablas, veremos los enlaces de éstas.

Por último, podemos hacer que sean únicamente ciertos punteros los quese vean usando la opción Ver punteros y eligiendo aquellos que queremosactivar o desactivar.

Ninguna de estas opciones implica eliminar elementos del mapa, tanto ta-blas como enlaces. El efecto es que no se verán en el esquema. Normal-mente tendremos un esquema en el que veremos todos los enlaces y tablasdel proyecto y luego otros con partes más concretas del esquema para unmejor análisis.

MaquetarCon este menú podemos acceder a la opción Tamaño del contenido, F7,que nos permite redimensionar el tamaño del marco de una tabla en el es-quema para poder ver su nombre completo.

TablasCon esta opción de menú podemos crear una nueva tabla, de modo que seabrirá el Asistente para la creación de una tabla de datos (Crear nueva ta-bla, Ctrl+T) o bien crearla a partir de una plantilla seleccionando el tipo di-rectamente (Crear nueva tabla de tipo...).

Podemos editar las propiedades de una tabla una vez creada ( Propie-dades de la tabla..., Alt+Intro), o los objetos que ésta posee ( Objetos dela tabla, Intro).

3.2.2. Barra de herramientas y opciones

Panel izquierdo: con este botón podemos activar y desactivar el panelizquierdo completo.

03 Interfaz del Editorde Proyectos

Tamaño del contenido

Propiedades de la tabla

Objetos de la tabla

Panel izquierdo

Page 41: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

40 41 VELAZQUEZ VISUAL

Nueva tabla maestra: para crear una tabla de tipo maestro normal conclave numérica.

Nueva tabla submaestra: para crear una tabla de tipo submaestro.

Nueva tabla arbolada: para crear una tabla de tipo maestro con clave ar-bolada.

Nueva tabla histórica: para crear una tabla de tipo histórico.

Propiedades tabla: para editar las propiedades de una tabla una vez se-leccionada. También podemos editar sus propiedades pulsando la combi-nación de las teclas Alt+Intro, o usando la opción de menú Tablas/Propie-dades de la tabla.

Objetos de la tabla: para editar los objetos de una tabla (campos, índi-ces, etc.). Podemos también hacer doble clic con el botón izquierdo del ra-tón sobre ella dentro del esquema o seleccionarla y ejecutar la opción Ta-blas/Objetos de la tabla.

Una vez creadas todas las tablas del proyecto, comenzaremos a pintar losenlaces entre ellas: se pintan desde la tabla maestra hacia su histórica. Paraello hacemos clic con el botón izquierdo del ratón sobre el enlazador quese encuentra en la parte superior izquierda del dibujo de la tabla maestra queenlazaremos, arrastramos el ratón hasta la tabla con la que queremos enla-zar y dejamos de pulsar el botón. Automáticamente, se pintarán los enlacesentre ambas tablas y el programa habrá creado en la tabla histórica el cam-po enlazado a la maestra con su índice correspondiente, mientras que en lamaestra crea el enlace histórico. Para crear los enlaces también disponemosde los siguientes botones, que nos abrirán los correspondientes asistentes:

Crear punteros con histórico: crea un enlace a maestro en la tabla his-tórica y un enlace a histórico en la maestra.

Crear puntero indirecto real: crea un enlace indirecto real a una tabla.

Crear puntero indirecto virtual: crea un enlace indirecto virtual.

Crear puntero singular-plural por posición: crea un enlace singular deplural por posición.

Crear puntero singular-plural por índice: crea un enlace singular de plu-ral por índice.

Crear puntero hermano: crea un enlace a hermano contiguo.

Para activar o desactivar la visualización de los distintos enlaces tenemoslos siguientes botones:

Ver punteros a maestros: visualización de los enlaces singulares amaestro.

Nueva tabla maestra

Nueva tabla submaestra

Nueva tabla arbolada

Nueva tabla histórica

Propiedades tabla

Objetos de la tabla

Crear punteros con histórico

Crear puntero indirecto real

Crear puntero indirecto virtual

Crear puntero singular-pluralpor posición

Crear puntero singular-pluralpor índice

Crear puntero hermano

Ver punteros a maestros

Page 42: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Ver punteros abuelos de submaestros: visualización de enlaces singula-res a abuelos de submaestros.

Ver punteros indirectos: visualización de punteros indirectos, sean rea-les o virtuales.

Ver punteros singular de plural: visualización de enlaces singulares deplural.

Ver punteros a histórico: visualización de enlaces plurales a histórico.

3.2.3. Menús de Contexto

Pulsando con el botón derecho del ratón sobre una tabla se abre un menúde contexto que nos permite acceder a las siguientes opciones: ver las pro-piedades de la tabla seleccionada ( Propiedades de la tabla, Alt+Intro),sus objetos ( Objetos de la tabla..., Intro), o ver dónde se usa ( Ins-pector: Dónde se usa la tabla..., F9). También podemos ver las tablas delproyecto con todos sus campos ( Inspector: De tablas y campos..., F10).Podemos adaptar el tamaño del dibujo de la tabla al nombre que debenmostrar para que no aparezca cortado ( Maquetar: Tamaño del conteni-do, F7).

Con las opciones Crear punteros con histórico..., Crear puntero in-directo real..., Crear puntero indirecto virtual..., Crear puntero singu-lar-plural por posición..., Crear puntero singular-plural por índice..., Crear puntero hermano... creamos una serie de punteros dentro de la tablaseleccionada lanzando sus asistentes.

Situando el ratón sobre un enlace se muestra un texto informativo sobre elmismo: cuáles son la tabla origen y destino, y qué campo o qué histórico esel que los enlaza.

03 Interfaz del Editorde Proyectos

ESQUEMA DE TABLAS

Ver punteros abuelos de sub-maestros

Ver punteros indirectos

Ver punteros singular de plural

Ver punteros a histórico

Propiedades de la tabla

Objetos de la tabla

Inspector: De tablas y campos

Inspector: De tablas y campos

Maquetar: Tamaño del contenido

Crear punteros con histórico

Crear puntero indirecto real

Crear puntero indirecto virtual

Crear puntero singular-pluralpor posición

Crear puntero singular-plural poríndice

Crear puntero hermano

Page 43: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

42 43 VELAZQUEZ VISUAL

3.3 Personalización del entornode trabajo

Para facilitar la tarea de programación es posible personalizar el entorno detrabajo del editor de proyectos, adaptando barras de Herramientas, el pro-yecto y los esquemas de tablas.

Para abrir el menú de personalizaciones nos situamos sobre cualquier barra deherramientas del Editor de Proyectos y pulsamos el botón derecho del ratón.También es posible hacerlo ejecutando la opción del menú Ver/Personalizar.

Aparecerá el cuadro de diálogo Personalización en el que se incluyen cincoseparadores:

Comandos: los diferentes comandos que pueden ser incluidos en barras deherramientas.

Toolbars: los nombres de las barras de herramientas del Editor.

Entorno: diversas opciones del Editor como son la Senda del almacén, op-ciones de inicio de la aplicación, etc.

Proyecto: aquí se encuentra todo lo referente a la personalización de losproyectos.

Esquemas: en esta pestaña encontraremos todo lo referente a la personali-zación de los esquemas de tablas.

VENTANA PERSONALIZACIÓN

Page 44: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

3.3.1. Personalización de Barras de Herramientas

Para crear una nueva barra de herramientas pulsamos el botón Nueva... dela pestaña Toolbars; se presentará un cuadro de diálogo en la que escribi-remos su nombre. La barra creada aparecerá en la lista de barras de herra-mientas, dentro de la pestaña Toolbars, y físicamente en pantalla.

Para ver una barra de herramientas activaremos la casilla de verificaciónque se encuentra junto a su nombre, y para esconderla desactivaremos di-cha casilla de verificación.

Para borrar una barra de herramientas, la seleccionaremos en la lista de lapestaña Toolbars y pulsamos el botón Eliminar.

Para añadir botones a una barra de herramientas vamos a la pestaña Co-mandos, seleccionamos la categoría de comandos deseada, hacemos cliccon el ratón sobre el botón a incluir y lo arrastramos hasta la barra de he-rramientas, soltándolo para finalizar.

03 Interfaz del Editorde Proyectos

VENTANA PERSONALIZACIÓN / TOOLBARS

Page 45: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

44 45 VELAZQUEZ VISUAL

Se incluye un comando de tipo COMBO BOX que puede ser muy útil a lahora de editar varios proyectos al mismo tiempo; si incluimos dicho controlen la barra de herramientas del Editor, en todo momento indicará el nombrey la senda del proyecto actual (esta última si está activada la opción del me-nú Ver/Senda completa).

Si se han añadido nuevos comandos a la barra de herramientas del Editory se desea que ésta vuelva a tener su formato inicial, la seleccionaremos enla pestaña Toolbars y pulsaremos el botón Reiniciar.

3.3.2. Personalización del Entorno

En la pestaña Entorno podemos elegir cómo arrancará el Editor, la lista deúltimos proyectos que debe presentar y dónde está situado el almacén.

VENTANA PERSONALIZACIÓN / COMANDOS

Page 46: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

En la región Inicio de la aplicación nos encontramos con las siguientes ca-jas de verificación:

Maximizado: activando esta opción nos aseguramos de que el Editor seabra siempre maximizado, si no, recordará el tamaño que tenía cuando secerró por última vez.

Abrir último proyecto: si activamos esta casilla Velázquez abrirá el últimoproyecto en el que estuvimos trabajando.

Sonido de presentación: al abrirse el Editor éste se presenta con un sonido.

En la región Lista de últimos proyectos se encuentra el control Nº de Pro-yectos, en el que indicamos cuántos proyectos queremos que nos presen-te el Editor al desplegar el menú Archivo, mientras que en el control Sendadel Almacén indicamos dónde se encuentra el almacén. Si pulsamos el bo-tón , Velázquez nos mostrará una ventana de selección de directorio pa-ra elegir aquel donde se encuentra el Almacén.

3.3.3. Personalización del Proyecto

En esta ventana personalizaremos el modo de visualización de los distintosobjetos del proyecto.

Tanto las estructuras de datos en el panel izquierdo del Editor como los ob-jetos en el panel derecho son estructurados de forma arbolada (de un nodo

03 Interfaz del Editorde Proyectos

VENTANA PERSONALIZACIÓN / ENTORNO

Examinar

Page 47: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

46 47 VELAZQUEZ VISUAL

raíz parten otros nodos que, a su vez, contienen otros nodos, etc.). Puesbien, en la región Árboles ver configuramos los siguientes puntos:

Cabecera: tanto el panel izquierdo como el panel derecho del Editor tienenuna cabecera; si esta opción se encuentra activada éstas estarán visibles,si está desactivada, no.

Líneas de jerarquía: si esta opción está activada se visualizarán las líneasentre los nodos de los árboles.

Línea de jerarquía en la raíz: si esta opción está activada se visualizará unalínea de jerarquía entre los nodos raíces de los árboles.

Botones más/menos: si una rama de un árbol contiene subramas y esta op-ción está activada, se mostrará un botón en la rama, de modo que si con-tiene el signo + la abrirá y si contiene el signo – la cerrará.

Planchado: si esta opción está activada el ancho de las columnas de los pa-neles del editor se ampliará o reducirá en función del tamaño de la ventanadel Editor de Proyectos.

Líneas entre objetos: si esta opción está activada se visualizarán líneas ho-rizontales entre los objetos.

Líneas entre columnas: si esta opción está activada presentará líneas divi-sorias de cada columna de cada uno de los paneles del Editor.

VENTANA PERSONALIZACIÓN / PROYECTO

Page 48: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Alto de fila variable según contenido: con esta opción activada y si no cabeen una misma línea el identificador y la descripción de un objeto, esto pro-vocará que tanto el identificador como la descripción de un objeto seanmultilíneas; es decir, ambos aparecerán en varias líneas de texto. Si esta op-ción está activada y se pulsa la tecla F2 para modificar el identificador deun objeto, al ser multilíneas no podemos pulsar la tecla Intro para aceptarel cambio de identificador, pues ésta provocará un salto de línea. Paraaceptar los cambios pulsamos de nuevo F2 y la tecla Esc.

Iconos grandes: marcando esta opción aumentaremos el tamaño de los ico-nos y la tipografía en la ventana principal del editor.

En la región Selección tenemos las opciones:

Fila completa: si esta opción se encuentra activa, cuando seleccionemos unítem en cualquiera de los paneles del Editor se visualizará en vídeo inversotoda la fila en la que se encuentre el mismo. Si está desactivada, solamen-te aparecerá en vídeo inverso el identificador del objeto seleccionado.

Siempre visible: si esta opción está activada el objeto que se encuentre se-leccionado en cada panel del editor siempre estará en vídeo inverso. Si es-tá desactivada, solamente se encontrará destacado el seleccionado del pa-nel activo.

Por defecto, el negro es el color que se utiliza para el color del texto de losidentificadores de los objetos. Si queremos destacar de algún modo los ob-jetos que se creen a partir de un momento determinado, seleccionamos uncolor en el control Color objetos nuevos, que será el que tenga el texto delos objetos que se creen a partir de ese momento. La especificación del co-lor de los nuevos objetos también puede ser hecha a través del menú decontexto que se presenta al pulsar el botón derecho del ratón sobre cual-quier objeto del Editor de Proyectos.

3.3.4. Personalización del Esquema de Tablas

En la pestaña Personalización / Esquemas personalizamos los siguientesaspectos de los esquemas de tablas:

03 Interfaz del Editorde Proyectos

Page 49: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

48 49 VELAZQUEZ VISUAL

Color de los punteros singulares a: maestro, submaestro, indirecto real e in-directo virtual.

Color de los punteros plurales (enlaces a históricos).

Color de fondo de la pantalla de los esquemas.

Tamaño y tipo de fuente utilizada.

Ancho enlazador: ancho de las puntas de las flechas de los enlaces.

Alto de barra de tablas maestras: donde se incluye el control sobre el quese ha de pinchar y arrastrar para generar un enlace maestro.

El botón Por defecto, restaura todos los valores por omisión de los esque-mas de Velázquez.

VENTANA PERSONALIZACIÓN / ESQUEMAS

Page 50: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

04Desarrollo básicode una aplicación

Page 51: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf
Page 52: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

4.1 Explicación básica y general

4.1.1. Análisis de la información

Siempre que nos proponemos diseñar una aplicación usando VelázquezVisual, hemos de analizar el problema, al igual que haríamos con cualquierotra herramienta de programación. El fin de este análisis es el de organizarla información en tablas de tal manera que, una vez establecidas las rela-ciones entre ellas, podamos obtener la información requerida en cada mo-mento.

Pero al trabajar con Velázquez Visual este punto cobra mayor relieve yaque un correcto planteamiento del problema redundará en una mayor po-tencia, además de un ahorro de tiempo y trabajo, evitando escribir líneasde código.

Velázquez Visual permite establecer relaciones entre las tablas siguiendo unmodelo denominado real, que, a diferencia del modelo relacional, dota a laaplicación final de la capacidad de dar información de manera automáticasin necesidad de escribir código suplementario. Estas relaciones se puedencrear gracias a que Velázquez Visual dispone de una serie de enlaces ine-xistentes en otras bases de datos o desarrolladores de aplicaciones. De ahíla necesidad de entender la filosofía de Velázquez Visual y su modelo real.

Pero de alguna manera tendremos que acceder a esta información organi-zada de un modo tan abstracto, por esto aparecen en escena una serie deelementos denominados Objetos visuales, que son los que nos facultan pa-ra trabajar con los datos, introducirlos, mostrarlos, etc.

4.1.2. Principales elementos que componen4.1.2 una aplicación

El principal elemento para mostrar listas de datos es la rejilla, en la que lascolumnas representan los campos y las filas representan las fichas. Existenotros elementos de visualización de listas de datos como son el árbol visorde tablas, el casillero, el agendizador o los gráficos.

04 Desarrollo básicode una aplicación

Page 53: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

52 53 VELAZQUEZ VISUAL

Desde las rejillas podemos llamar a los formularios, con los que daremos dealta, baja o editaremos una ficha.

Mediante las búsquedas podremos encontrar listas o fichas concretas queserán presentadas por medio de rejillas.

Estas búsquedas estarán basadas en los índices que creamos en las tablasy que, gracias a la estructura de Velázquez Visual, permiten una gran agili-dad a la hora de trabajar con grandes cantidades de datos.

Todas estas opciones serán accesibles al usuario final a través de un menú,que crearemos nosotros y que estará complementado por uno propio deVelázquez Visual (con el que podremos navegar por la información graciasa los enlaces entre tablas y que se mostrará siempre sin necesidad de pro-gramarlo).

FORMULARIO

REJILLA

Page 54: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Además de éstos, existen otros objetos visuales como el informe, que nospermite imprimir datos; el localizador, que permite obtener un registro deuna tabla de datos; la lupa, que filtra fichas en una lista; el dibujo y el mul-ti-icono, que usaremos para manejar imágenes; la Página Html y el Com-ponente Html, que usaremos para servir Web, etc.

4.2 Iniciando el proyecto

Para iniciar un nuevo proyecto seguiremos, como norma general, los si-guientes pasos:

4.2.1. Editor de Proyectos

Para crear una nueva aplicación, abrimos el Editor de Proyectos de Veláz-quez Visual y seleccionamos la opción de menú Archivo/Nuevo o pulsamosel botón Nuevo Proyecto , situado en la barra de herramientas del Editorde Proyectos.

El nuevo mapa se dividirá en tres áreas: el área Estructura de datos, dondeaparecerán (entre otras cosas) las tablas que vayamos incluyendo, el áreaObjetos, donde aparecerán los objetos visuales que se vayan creando, y elárea Variables, donde aparecerán las variables globales que incorporaremos.

04 Desarrollo básicode una aplicación

MENÚ

Nuevo Proyecto

Page 55: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

54 55 VELAZQUEZ VISUAL

4.2.2. Fuentes por defecto

Cada objeto visual debe tener asignados unos tipos de letra para luego ser usa-dos dentro del objeto. Si no tenemos fuentes por defecto, cada vez que creemosun objeto nuevo, debemos añadírselas para luego usarlas dentro del objeto. Pe-ro si tenemos definidas unas fuentes por defecto, éstas serán añadidas a cadanuevo objeto visual que creemos, siempre dando la posibilidad de añadir másfuentes que las ya asignadas. Veamos cómo seleccionar las fuentes por defecto.

Si no asignamos fuentes por defecto a un objeto visual, el sistema usa lafuente system para visualizar los datos. No obstante, es aconsejable usarfuentes en los objetos para evitar problemas.

Ejemplo: selección de las fuentes por defecto

Vamos a la opción de menú Edición/Fuentes por defecto .

EDITOR DE PROYECTOS

Fuentes por defectoe

Page 56: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Al hacer clic en esta opción Velázquez Visual nos mostrará una ventana enla que indicaremos al programa qué fuentes por defecto asignamos a losobjetos visuales: Rejillas, Formularios, Informes, Casilleros y Menús. Paraello utilizaremos en cada pestaña el botón Añadir.

Es mejor utilizar fuentes habituales (Arial, Times New Roman, etc.) y procu-rar no utilizar fuentes extrañas, que pueden no estar instaladas en el equipodel usuario final y ocasionen que no se visualice bien la información. De to-dos modos, si utilizamos fuentes no habituales conviene incorporarlas juntocon la instalación del desarrollo que creemos para que no haya problemas.

En la ventana Fuentes por defecto aparecen una serie de botones, que sevisualizarán en otras ventanas y que nos permiten Añadir, Sustituir, Supri-mir, Subir o Bajar (ordenar) las fuentes.

4.2.3. Propiedades del Proyecto

Una vez elegidas las fuentes, el siguiente paso sería seleccionar la opciónEdición/Propiedades proyecto..., o bien pulsar el botón situado en la ba-rra de herramientas.

Al hacer clic en esta opción, Velázquez Visual nos mostrará la ventana Pro-piedades proyecto.

04 Desarrollo básicode una aplicación

VENTANA FUENTES POR DEFECTO

Añadir

Propiedades del proyecto

e

Page 57: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

56 57 VELAZQUEZ VISUAL

En la ventana rellenaremos, dentro de la pestaña General, el Nombre delproyecto, la Versión, el nombre de su Compañía y su Número de Licencia.Esto es importante por lo siguiente: en caso de no poder abrir el mapa quehaya creado con su desarrollo, en Atica Software se lo pueden abrir, peroes imprescindible que en el mapa aparezca el número de licencia.

En la pestaña Comentarios podemos añadir notas sobre la aplicación queestamos desarrollando. Es ésta una ventana que aparecerá en varios de losobjetos visuales, tablas, etc., y que nos servirá para ir documentando laaplicación. Los comentarios que escribamos aquí se verán al seleccionar unmapa en el Almacén de objetos.

En la pestaña Estilos nos encontramos con las siguientes opciones:

PROPIEDADES DEL PROYECTO

Nunca nombrar el proyectodel mismo modo que algunade las tablas que locomponen, ya que entoncesno podrá ejecutarse.

ADVERTENCIA

PESTAÑA ESTILOS

Page 58: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

• Pedir Usuario: activando esta opción, al ejecutar la aplicación se mos-trará un cuadro de diálogo en el que habrá que especificar un nombre deusuario y su contraseña. Trabajando en arquitectura local (VRunner) laprimera vez que se ejecuta el proyecto, el nombre de usuario escrito se-rá tomado como el del usuario administrador. También implica que laaplicación será multiusuario en el caso de usar Servidor de aplicaciones(aunque con VRunner sigue siendo monopuesto), es decir, que podrá serejecutada por varios usuarios al mismo tiempo, pudiendo tener cadausuario un menú de arranque distinto.

• Número máximo de grupos: número máximo de grupos de usuarios quecreará para su aplicación final.

• Pantalla completa: activaremos esta opción si deseamos que la aplica-ción se ejecute en modo de pantalla completa, es decir, sin la barra demenús, sin la barra de estado y sin la ventana principal del Ejecutor deProyectos o Navegador. Tanto en el Editor como en el Ejecutor, la teclaF11 activará o desactivará el modo de pantalla completa.

• Barra de herramientas

– Por defecto: el proyecto visualizará o no la barra de herramientas pordefecto de Velázquez Visual, en función de si el usuario final activa odesactiva la opción del ejecutor Ver/Barra de herramientas.

– Visible: el programa siempre se ejecutará visualizando la barra de he-rramientas.

– Invisible: el programa siempre arrancará sin mostrar la barra de he-rramientas.

• Barra de Estado

– Por defecto: el proyecto visualizará o no la barra de estado, en fun-ción de si el usuario final activa o desactiva la opción del ejecutorVer/Barra de estado.

– Visible: el programa siempre se ejecutará visualizando la barra de es-tado.

– Invisible: el programa siempre arrancará sin mostrar la barra de es-tado.

• Organizador: mediante esta forma de visualización todas las ventanasque estén abiertas se organizarán a modo de separadores. Así que, pa-ra cambiar de ventana, simplemente tenemos que hacer clic con el ra-tón sobre la pestaña correspondiente.

– Por defecto: el proyecto visualizará o no el organizador, en función desi el usuario final activa o desactiva la opción del ejecutor Ver/Orga-nizador.

04 Desarrollo básicode una aplicación

Page 59: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

58 59 VELAZQUEZ VISUAL

– Visible: el programa siempre se ejecutará visualizando el organizador.

– Invisible: el programa siempre arrancará sin mostrar el organizador.

La pestaña Opciones de Menús nos permitirá activar o desactivar las op-ciones de la barra de menús que se describen a continuación. Si desacti-vamos una opción, ésta no podrá activarse desde el Ejecutor.

• Archivo: permite activar las opciones Abrir, Registro de ficheros, Tran-sacciones, Contenedor.

• Ventana / Ver: permite activar las opciones Organizador y Pantalla com-pleta.

Dentro de la pestaña Protecciones, tenemos el apartado Palabra clave pa-ra editar si se quiere que al abrir el mapa Velázquez Visual pida la contra-seña que hayamos incluido aquí. Esto le permitirá proteger sus fuentes.De todos modos no es aconsejable distribuir el fichero .map a un clientefinal pues es editable. Lo más conveniente es servir el fichero .vam, noeditable.

El apartado Caducidad permite realizar una demo de nuestro producto. Simarcamos el check Protegido podemos indicar cuál será la fecha de cadu-cidad de la demo o el número de ejecuciones que permite, o ambas al tiem-po. Para una mayor seguridad lo mejor es combinar los dos métodos. Si laaplicación caduca por número de ejecuciones, la única forma que tendrá elusuario de seguir ejecutando la aplicación será mediante el borrado de lastablas de datos, pues es en ellas donde se computa el número de ejecu-ciones de la aplicación.

También puede incluirse un texto que será el mensaje que aparezca al ca-ducar la demo.

PESTAÑA OPCIONES MENÚS

Page 60: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Por último, si estamos trabajando con el editor PS (Protección Sentinel), en-contraremos una pestaña más en la ventana Propiedades proyecto; la pes-taña Sentinel.

En el control nº de usuario Sentinel introduciremos en formato decimalnuestra password (se proporciona en formato hexadecimal), y en el controlPalabra clave del proyecto teclearemos la clave que deseemos. Con estosdos datos Velázquez compondrá un código que aparecerá en el control By-tes a grabar en la llave.

El paso siguiente será abrir la aplicación de grabación de llaves y procedera la grabación con los datos proporcionados por el editor de Velázquez(pestaña Sentinel).

04 Desarrollo básicode una aplicación

PESTAÑA PROTECCIONES

PESTAÑA SENTINEL

Page 61: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

60 61 VELAZQUEZ VISUAL

4.2.4. Tareas pendientes

Por último hablaremos de la opción Tareas pendientes . Está pensada decara al programador, de modo que pueda ir anotando todo aquello que ten-ga pendiente por hacer en el proyecto, pudiendo incluso establecer una fe-cha límite de caducidad. Si alguna de las tareas ha caducado, al cerrar elproyecto el programa le avisará que tiene tareas caducadas. Muy útil porejemplo para ir anotando los plazos previstos de cada módulo de la aplica-ción.

Al ejecutar la opción se presenta el cuadro de diálogo Tareas pendientes de:

Para crear una nueva tarea pendiente pulsamos el botón Nueva (o la com-binación de teclas Alt-N), creándose con el identificador “Nueva”. En la par-te superior se mostrará la información sobre las distintas tareas que hayacreado: en Creación se mostrará la fecha y la hora en que una tarea ha si-do creada. En Caducidad aparece la fecha y hora en que caducará una ta-rea pendiente (fecha límite estimada para la tarea pendiente). El programa,por defecto, propone para la fecha y hora de caducidad la misma hora deldía siguiente.

En la parte inferior de la ventana podremos modificar tanto la fecha comola hora límite de ejecución y, además, escribir las observaciones que de-seemos sobre la tarea pendiente editada. Si queremos eliminar una tarea, laseleccionamos y pulsamos el botón Eliminar.

La opción restante del menú Edición: Estilos de Usuarios, la veremos másadelante.

TAREAS PENDIENTES DE:

Tareas pendientes

Page 62: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

4.3 Esquema de tablas

4.3.1. Tablas de datos

Las tablas son los objetos que usamos para almacenar la información demanera organizada. En cada una de ellas se guardan los datos sobre un te-ma particular, pudiendo relacionarse unas con otras para formar una super-estructura de información.

Las tablas de datos organizan la información en fichas o registros, cada unode los cuales contiene los mismos campos o datos individuales (por ejem-plo, la tabla CLIENTES contiene información acerca de los clientes de unaempresa, teniendo cada cliente una ficha. A su vez, cada ficha organiza lainformación en campos, como pueden ser el número de teléfono, dirección,empresa...).

El número máximo de registros (fichas) que puede contener una tabla es decuatro mil millones, limitación impuesta por la estructura de 32 bits. Pode-mos manejar tablas de tamaño superior a dos gigas en disco, siendo el lí-mite máximo teórico de 4 Petabytes.

Para facilitar la creación de tablas, Velázquez cuenta con una serie de asis-tentes.

4.3.2. Tablas de datos: maestras

Creación y propiedades

Vamos a centrarnos a continuación en las tablas de tipo maestro normalcon clave numérica. La propiedad principal de una tabla maestra radica entener un campo que identifica de forma inequívoca a sus registros median-te un índice con clave única o irrepetible.

En la ventana Creación de maestro podremos crear una tabla que inicial-mente tendrá dos campos (CODIGO y NOMBRE) y tres índices (CODIGO,NOMBRE, PALABRAS y TROZOS).

04 Desarrollo básicode una aplicación

Page 63: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

62 63 VELAZQUEZ VISUAL

En esta ventana indicaremos:

Nombre plural y singular de la tabla maestra.

Región de Datos de la clave: aquí especificamos datos correspondientes alcampo CODIGO de la tabla.

Nombre del campo: descripción que va a tener el campo CODIGO (clave dela tabla). Por defecto aparece Código.

Numeración automática: marcando esta opción le indicamos a VelázquezVisual que cree el campo CODIGO de tipo numérico y él irá incrementán-dolo en una unidad por cada registro introducido. Esta propiedad y las de-más que definamos ahora podrán modificarse una vez creada la tabla. Eluso de esta opción es aconsejable para que sea Velázquez el que controlela numeración sin intervención del usuario. Si deseamos una numeracióndistinta podemos crear un nuevo campo para ello, que indexaremos comoclave única.

Nombre del índice: descripción que va a tener el índice por código que vaa crear Velázquez Visual. Por defecto será Código.

Longitud-Rango: indicamos cuántos registros, como máximo, soportará latabla (255, 65535, 16,7 millones o 4.000 millones de registros).

Región de Datos de la descripción: aquí especificaremos los datos corres-pondientes al campo NOMBRE.

VENTANA CREACIÓN DE MAESTRO

Al índice código no hemosde añadirle componentes,cambiar su tipo, etc.

ADVERTENCIA

Page 64: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Nombre del campo: descripción que va a tener el campo NOMBRE de la ta-bla. Por defecto aparece Nombre.

Índice alfabético, por palabras o por trozos de palabras: si queremos queVelázquez Visual cree alguno de estos índices simplemente deberemosmarcar su correspondiente casilla. Por defecto todas aparecen activadas.

Nombre del índice: descripción que va a tener cada uno de los índices an-teriores.

Si sobre una tabla hacemos doble clic con el botón izquierdo del ratón opulsamos la tecla Intro, se presentará un cuadro de diálogo con todos suscomponentes.

Desde este cuadro podremos editar, añadir o borrar componentes de lamisma. También podremos añadir, modificar o borrar componentes directa-mente en el panel izquierdo del Editor.

Añadir campo: crea un nuevo campo al que podremos modificar el iden-tificador y editar sus propiedades.

Crear nuevo campo enlazado: muestra el asistente para la creación deltipo de enlace que elijamos.

Nuevo Índice: crea un nuevo índice al que podremos modificar el iden-tificador y luego editar.

04 Desarrollo básicode una aplicación

Añadir campo

Crear nuevo campo enlazado

Nuevo Índice

Page 65: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

64 65 VELAZQUEZ VISUAL

Nuevo Índice del campo: crea un nuevo índice a partir del campo selec-cionado.

Nuevo enlace histórico: crea un enlace histórico en la carpeta de históri-cos a una tabla, por el índice que escojamos. El índice usado siempre debetener como primer componente el campo enlazado a esta tabla maestra.

Nueva actualización: crearemos una nueva actualización desde la tablaque estamos editando.

Nuevo evento: podremos crear un nuevo evento o trigger para que seejecute cuando haya movimientos en la tabla.

Suprimir: eliminamos cualquier elemento que hayamos creado en la tabla.

Subir y Bajar: ordenamos los elementos dentro de sus carpetas.

Editar: editamos las propiedades de un objeto de la tabla. Equivale a do-ble clic del ratón sobre el elemento.

Cambiar identificador (F2): con este botón podremos cambiar los iden-tificadores de los objetos. Conseguiremos el mismo efecto pulsando F2 ohaciendo un clic del ratón sobre el objeto seleccionado. Recordamos quenunca hemos de cambiar los identificadores de los campos CODIGO yNOMBRE.

Cortar Ctrl+X, Copiar Ctrl+C, Pegar Ctrl+P: usaremos estos boto-nes para cortar, copiar y pegar objetos de la tabla y de otras tablas.

Salir: cerramos la edición de propiedades de la tabla.

Si sobre una tabla pulsamos la combinación de teclas Alt + Intro o el botónPropiedades de tabla , obtendremos su cuadro de propiedades.

Nuevo Índice del campo

Nuevo enlace histórico

Nueva actualización

Nuevo evento

Suprimir

Subir y Bajar

Editar

Cambiar identificador

Cortar, Copiar yPegar

Salir

Propiedades de tabla

Page 66: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Veamos estas propiedades una por una:

Nombre Plural: nombre plural de la tabla de datos.

Nombre Singular: nombre singular de la tabla de datos.

Velázquez Visual necesita conocer el nombre de la tabla en plural y en sin-gular ya que automáticamente utilizará uno u otro nombre dependiendo delobjeto que se esté editando en ejecución. Siguiendo el ejemplo anterior, sihemos creado una tabla “Clientes” (nombre plural) y “Cliente” (nombre sin-gular), cuando se vaya a mostrar un formulario, en la barra de título apare-cerá Cliente ya que es sólo una ficha la que se visualiza, mientras que enotro objeto en el que aparezca un listado de varios clientes, en su corres-pondiente barra de título aparecerá Clientes.

Tipo: tipo de tabla (maestro, submaestro, histórico…). Dependerá de laplantilla utilizada en el asistente de creación de tablas. Veremos más ade-lante los tipos de tablas.

Tabla de datos padre: si la tabla es submaestra, presentará el nombre de sutabla padre. Más adelante volveremos sobre este concepto.

Reside en: las tablas en Velázquez Visual pueden estar almacenadas de dosformas:

En disco: son tablas compartidas por todos los usuarios de la aplicación.

04 Desarrollo básicode una aplicación

Conviene identificar lastablas de datos connombres escuetos eintuitivos que en todomomento nos recuerden larazón por la que ha sidocreada. No debemos usarcaracteres especiales en elnombre de las tablas.

TRUCO

VENTANA PROPIEDADES DE LA TABLA

Page 67: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

66 67 VELAZQUEZ VISUAL

En memoria: son de carácter local, útiles cuando queremos tablas tempo-rales sobre las que trabajar como con cualquier tabla en disco. En muchasocasiones se utiliza este tipo de tablas para realizar una serie de operacio-nes cuyo contenido ya no es necesario una vez finalizadas. Su contenidodesaparece al cerrar la aplicación.

Estilo privada: activando este check la tabla no estará disponible en el Edi-tor de Personalizaciones de Velázquez Visual.

Info Bytes/ficha: indica cuánto espacio (expresado en bytes) ocupará la fi-cha en disco (todos los campos de una tabla) de un registro. A medida quevayamos avanzando en este manual observaremos cómo Velázquez Visualcuida al máximo el tamaño.

Info Campos: número de campos que tiene la tabla.

Info Índices: número de índices de la tabla.

Directorio: directorio donde va a estar alojada la tabla. Aquí no hemos de es-pecificar un directorio físico, sino el directorio de la aplicación (el directorio pordefecto) o un objeto Directorio de tablas creado en el proyecto (directorio ló-gico que será resuelto de forma externa al mapa en tiempo de ejecución).

Comentarios: espacio para escribir cualquier comentario que el programa-dor estime oportuno.

Ejemplo: creación de una tabla de tipo maestro normal con clave numérica

Supongamos una aplicación con la que llevar los datos de nuestros clien-tes. Necesitamos crear la tabla CLIENTES, para lo cual damos los siguien-tes pasos:

Dentro del Editor de Proyectos (EdMap) pulsamos el botón (Esquema detablas) para visualizar el Editor de Esquemas. Si comenzamos con un nue-vo proyecto, al no haber ninguna tabla creada, aparecerá una ventana deselección de tipo de tabla en la que seleccionaremos la opción Maestronormal con clave numérica y pulsaremos el botón Aceptar, por lo que ob-viaríamos el siguiente paso.

En arquitectura Cliente -Servidor las tablas enmemoria no tienencontenedor, con lo que nopodemos usar campos tipoobjeto ya que éstos seguardan precisamente en elcontenedor.

ADVERTENCIA

Esquema de tablas

e

Page 68: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

En caso de que sea un proyecto ya creado, una vez en el Editor de Esque-mas pulsamos el botón (Nueva tabla maestra) situado a la derecha delEditor de Esquemas o la combinación de teclas Ctrl+t.

En la ventana de Propiedades de la tabla maestra, en nombre plural escri-bimos Clientes y en nombre singular escribimos Cliente. Dejamos el restode opciones tal y como están y pulsamos el botón Aceptar. Observaremoscómo en el Editor de Esquemas aparece la tabla recién creada.

Se puede desplazar la representación de la tabla CLIENTES a lo largo delárea gris del Editor de Esquemas. Para ello hacemos clic sobre ella y sin sol-tar el botón del ratón la arrastramos al lugar que queramos, o bien utilizan-do las flechas del teclado (con las flechas la desplazamos de 5 en 5 píxelesy con la tecla Ctrl y las flechas la desplazamos de 1 en 1 píxel).

Si hacemos doble clic en la tabla CLIENTES y posteriormente doble clic enla carpeta de Campos o carpeta de Indices, aparecerán los campos y los ín-dices que ha creado Velázquez Visual. Por una parte, dentro de la carpetaCampos ha creado los campos CODIGO y NOMBRE (si hacemos doble clicen cualquiera de los dos campos mencionados anteriormente para accedera la ventana que contiene sus propiedades, veremos cómo para el campoCODIGO ha puesto en el apartado Descripción: Código y en el apartadoContenido Inicial ha marcado la opción Siguiente al último. Para el campoNOMBRE aparece en el apartado Descripción: Nombre. En la carpeta Índi-ces ha creado los índices CODIGO, NOMBRE, PALABRAS y TROZOS consus respectivas Descripciones. Es decir, ha creado estos elementos con laspropiedades que aparecen por defecto en las propiedades de la tabla.

04 Desarrollo básicode una aplicación

Nueva tabla maestra

e

Page 69: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

68 69 VELAZQUEZ VISUAL

Finalmente guardamos el proyecto, llamándolo gestión (por ejemplo), den-tro de la carpeta que nosotros queramos.

Situándonos sobre la carpeta Tablas de datos del panel izquierdo del Editorde Proyectos y seleccionando la opción de menú Archivo / Imprimir (Ctrl-P),obtendremos un informe que presenta una lista con todas las tablas quecomponen el proyecto, incluyendo identificador, nombre plural, nombre sin-gular y tipo.

También podemos imprimir los elementos de una tabla. Para ello, en elpanel izquierdo del Editor seleccionamos la tabla dentro de la carpeta Ta-blas de datos, y seleccionamos la opción de menú Archivo / Imprimir(Ctrl-P). Obtendremos los siguientes datos acerca de los elementos de latabla:

Campos: muestra el identificador, el nombre, el tipo, los bytes (longitud) y elrango.

Indices: muestra el identificador, el nombre, el tipo y los bytes.

Actualizaciones: muestra el nombre de la tabla a actualizar, el campo a mo-dificar, el modo en que se va a producir ésta (absoluto o acumular) y los co-mentarios.

Históricos: muestra el identificador de la tabla histórica y el índice por el quese realiza el enlace.

e

Page 70: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

CamposYa sabemos que las tablas guardan información de registros, constando ca-da registro de campos.

Los campos de una tabla se crean pulsando el botón Nuevo campo , queaparece en la ventana propiedades de tabla, al hacer doble clic sobre unatabla del Editor de Esquemas. También se puede acceder a él desde la ba-rra de herramientas del Editor de Proyectos. Otra opción es utilizar la teclaInsert.

Velázquez Visual utiliza el identificador y la descripción para reconocer loscampos.

Velázquez Visual genera un identificador estándar que puede ser modifica-do por el diseñador, asignándole uno relativo al tipo de dato que va a con-tener. Para evitar pérdidas de información como resultado de cambiar elidentificador de un campo, Velázquez Visual guarda el identificador antiguodel campo. De esta forma al ejecutar la aplicación de nuevo, Velázquez Vi-sual reconstruirá la tabla sin perder ningún dato.

Una vez aceptado el identificador, haciendo doble clic sobre el mismo o pul-sando la tecla Intro, aparece el cuadro de diálogo Propiedades del campo.

04 Desarrollo básicode una aplicación

Nunca hemos de cambiarlos identificadores de loscampos CODIGO yNOMBRE.

ADVERTENCIA

Si inadvertidamente eldiseñador cambia dos veces(consecutivas y sinreconstruir) el identificadorde un campo, los datos delcampo no aparecerán en lanueva tabla después de queVelázquez Visual lareconstruya. De todosmodos, es posible recuperarla información si el diseñadorrecuerda el nombre antiguodel identificador porqueVelázquez Visual puedeguardar una copia de latabla vieja renombrada conla extensión .OLD (esconfigurable guardar los .oldo no). De esta forma,restituyendo el antiguoidentificador, borrando latabla de datos nueva yrenombrando la tabla dedatos antigua con laextensión .DAT, lainformación estarárecuperada.

TRUCO

Los identificadores enVelázquez deben estarcompuestos por letras,números o guiones, y nuncapor caracteres especialescomo “%” o “$”, ya queéstos se usan comodelimitadores.

ADVERTENCIA

Nuevo campo

Page 71: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

70 71 VELAZQUEZ VISUAL

Propiedades de los campos. TiposLas características comunes a todos los campos son las siguientes:

• Nombre: es el nombre (descripción) que tendrá el campo. Será el que apa-rezca cada vez que el campo se incluya dentro de un objeto visual o seseleccione como parte de una fórmula. Al igual que aconsejamos con lastablas, tratemos de que sus nombres sean escuetos y nos recuerden cuáles su contenido. También hemos de huir de los caracteres especiales.

• Enlace ¿Enlazado?: más adelante dedicaremos un apartado a describirlos distintos tipos de enlaces que podemos utilizar.

• Longitud: número de bytes para el campo.

• Decimales: número de decimales para el campo. Se podrá especificarhasta 6 decimales.

• Signo: casilla de verificación que define si el campo tiene signo.

• Rango: límites válidos de entrada de valores para el usuario.

• Contenido inicial: expresión fórmula que será el contenido inicial delcampo. Puede ser una constante, el identificador de un campo, una va-riable global, una variable del sistema, una función de fórmulas o unafunción (objeto visual). Es muy habitual inicializar los campos de tipo Fe-cha y Hora con las funciones fHoy( ), que devuelve el día actual, y fAho-ra( ), que devuelve la hora actual del sistema. Si en el contenido inicial deun campo se especifica más de un campo o variable, éste será interpre-tado por el programa como una fórmula, en cambio, si en el contenidoinicial aparece un solo campo o una sola variable, Velázquez lo tomará

Si en una aplicación yaexisten datos y deseacambiar el identificador y elnombre de un campo,deberá modificar primero suidentificador, ejecutar laaplicación para forzar lareconstrucción de la tabla,volver a editar el proyecto ycambiar el nombre delcampo; pues si edita elproyecto y modifica elidentificador y el nombre delcampo, al ejecutar,desaparecerá el contenidode dicho campo en losregistros existentes.

ADVERTENCIA

PROPIEDADES DEL CAMPO

Page 72: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

como una constante. En los campos CODIGO sólo se permiten tres op-ciones: Ninguno (para que el valor lo introduzca el usuario); Siguiente alúltimo (para que el valor lo genere Velázquez Visual) y Contador en va-riable (para que el valor lo controle el diseñador o el usuario).

• Caracteres válidos: esta opción es exclusiva para campos fórmula. Aun-que este tipo de campos no tienen una longitud fija, podemos especifi-car aquí la longitud esperada del mismo si se va a saber de antemano.Por ejemplo, si en una tabla hemos creado un campo fórmula alfabéticacuya fórmula sea extraer un carácter de un campo alfabético, la longitudesperada del mismo siempre será 1. Esto redundará en un mejor rendi-miento de la aplicación al saber de antemano la longitud que se necesi-tará para el campo fórmula.

• Fórmula: expresión fórmula usada para calcular los campos de tipo Fór-mula Numérica, Alfabética, Fecha, Tiempo e Histórico.

• Tipo: aquí fijamos de qué tipo va a ser el campo. En Velázquez Visual lostipos de campo existentes son los siguientes:

Alfabético: tipo alfabético estándar que incluye todos los caracteresde la tabla ANSI. Se suele utilizar en campos que vayan a contener di-recciones de correo electrónico o la ruta de algún fichero, ya que loscampos alfa que veremos a continuación no contienen ni la arroba (@) nila barra de directorios (\).

Numérico: se utiliza para datos numéricos. Se puede especificar sulongitud, número de decimales y signo.

Alfa 128: es un tipo alfanumérico que incluye letras mayúsculas, mi-núsculas, acentos, signos de puntuación y números. Su formato es em-paquetado: 8 caracteres que el usuario introduce se comprimen en 7 pa-ra grabarlos al disco.

Alfa 64: es un tipo alfanumérico que incluye letras mayúsculas, signosde puntuación y números. El formato es empaquetado: cada 4 caracte-res que el usuario introduce se comprimen en 3 para grabarlos al disco.

Alfa 40: es un tipo alfanumérico que incluye letras mayúsculas, núme-ros, guión y espacio. El formato es empaquetado: cada 3 caracteres queel usuario introduce se comprimen en 2 que serán grabados al disco.

Fecha: permite introducir fechas con diversos formatos. El carácterde separación puede ser el guión o la barra.

Hora: permite introducir horas en formato HH:MM:SS. Las horas quese utilizan en este campo son las del día, es decir, de 00:00:00 a23:59:59.

Tiempo: permite introducir fechas y horas. Es un campo que no seutiliza demasiado y que probablemente desaparezca.

04 Desarrollo básicode una aplicación

Alfabético

Numérico

Alfa 128

Alfa 64

Alfa 40

Fecha

Hora

Tiempo

Page 73: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

72 73 VELAZQUEZ VISUAL

Booleano: es un campo lógico que permite fijar el contenido del mis-mo como SÍ/NO (1 o 0). Ojo: es 1 o 0, y no 1, -1 como sucede en otroslenguajes de programación.

• Objeto: campo con contenido variable (no puede ser utilizado comocomponente de índices). Están disponibles los objetos siguientes:

Texto: su contenido es texto de longitud variable ocupando sola-mente el tamaño del contenido. Normalmente es usado para anotacio-nes en la ficha de un cliente, artículo, etc.

Dibujo: su contenido es un gráfico con cualquier resolución y núme-ro de colores que será importado en tiempo de ejecución. Normalmenteson usados para ver la imagen de un artículo en su ficha, el logotipo deun cliente, etc.

Texto enriquecido: su contenido es un documento de texto RTF. Sediferencia del Objeto Texto en que admite cambiar fuentes, estilos, ali-neación, etc. en tiempo de ejecución.

OLE genérico: su contenido será cualquier objeto OLE. Para cargar-lo en tiempo de ejecución se utilizará el cuadro de diálogo Insertar Ob-jeto estándar de Windows. Una vez incorporado el objeto OLE a Veláz-quez Visual podrá ser lanzado directamente en el programa correspon-diente haciendo doble clic sobre él.

E-mail: su contenido será un mensaje de correo electrónico (e-mail).

• Campos fórmula: tienen dos características comunes: no ocupan espa-cio en disco y no pueden utilizarse en índices. Son campos que se cal-culan a partir de una expresión que se genera en el Asistente para edi-ción de fórmulas (que veremos más adelante).

Fórmula numérica: el resultado de las operaciones realizadas con uncampo de este tipo será un número. Si hemos definido un campo de estetipo, para evitar un error de división por 0, dividiremos siempre el dividendopor el divisor o por 1. Así, cuando el divisor es 0 divide el dividendo por 1.

Fórmula alfabética: se utiliza para concatenar campos, variables y/oconstantes. El resultado será una cadena alfabética.

Fórmula fecha: retorna un valor de tipo fecha. Podemos utilizarla, porejemplo, para sumar a una fecha un campo, variable o constante de ti-po numérico y obtener la fecha resultante de dicha operación.

Fórmula tiempo: retorna un valor de tipo tiempo. Al igual que loscampos de tipo Tiempo, apenas se utiliza.

Fórmula histórico: este tipo de campo recorre todo el histórico yefectúa la fórmula por cada registro encontrado para determinar el valorde la misma.

Booleano

Texto

Dibujo

Texto enriquecido

OLE genérico

E-mail

Fórmula numérica

Fórmula alfabética

Fórmula fecha

Fórmula tiempo

Fórmula histórico

Page 74: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Fórmula Dinámica: a pesar de tratarse de un campo fórmula, tienepersistencia en disco. Este tipo de campo será utilizado cuando la defi-nición de la fórmula deba ser establecida por el usuario en tiempo deejecución. Aclarar que una cosa es la fórmula en sí y otra el resultado deejecutarla; en este tipo de campo se guardará la fórmula pero su resul-tado solamente podrá obtenerse a través de otro campo fórmula (numé-rica, alfabética o fecha, en función del resultado que deba obtenerse) encuyas propiedades se establezca como fórmula a ejecutar el campo ti-po fórmula dinámica. Si en un formulario se incluye un control de ediciónpara editar este tipo de campo, en tiempo de ejecución se incrustará enel mismo un botón que dispara el asistente para la edición de fórmulas,para facilitar al usuario su composición.

Hemos de seleccionar la tabla con cuyos campos (y los de sus maes-tras) construiremos la fórmula. Esto lo haremos en el control de ediciónIdentificador de la ventana de propiedades del campo.

Las tablas de caracteres que usa Velázquez Visual son distintas a las es-tándar que estamos habituados (ASCII, ANSI, Windows, etc.) en cuanto alos caracteres que incluyen. Además, dependiendo del tipo, al reducir el nú-mero de caracteres que tiene la tabla podemos guardar, en el mismo nú-mero de bytes que en el tipo alfabético, más caracteres. Esto en terminolo-gía Velázquez Visual se denomina empaquetado. La desventaja frente al ti-po Alfabético es que nos faltarán algunos caracteres como, @ o \, tal y co-mo comentamos antes, pero en muchos casos no es importante, ya que elcarácter (@) sólo lo usaremos en campos que almacenen direcciones de co-rreo electrónico y el carácter ( \ ) en campos donde se guarden sendas dedisco.

04 Desarrollo básicode una aplicación

Usar el tipo Alfa 64-40 paratrabajar con mayúsculas, porejemplo en la introducciónde campos para normalizara mayúsculas o al realizarbúsquedas sin que tengarelevancia distinguir entremayúsculas y minúsculas.

TRUCO

No hemos de utilizar uncampo de tipo Fórmulahistórico cuando preveamosque los registros de la tablavan a tener un gran númerode históricos, pues seralentizaría la presentaciónde datos en pantalla entiempo de ejecución(imaginemos presentar enuna rejilla, en la que seincluye en una columna elcampo fórmula histórico,miles de registros de latabla. Por cada uno se deberecorrer sus registroshistóricos y efectuar lafórmula correspondiente, loque llevará a unaralentización de lapresentación de los datosen pantalla). Lo másadecuado en estos casoses crear una actualizacióndesde la tabla histórica adicho campo en la tablamaestra, habiendo definidoel campo como de tiponumérico.

Cuando se utiliza unaconstante en un campofórmula, como puede ser untexto, es aconsejableentrecomillarla. El tipo decampo fórmula a utilizardepende del resultadobuscado, no de los tipos deparámetros utilizados en elcálculo.

ADVERTENCIA

TABLA DE CARACTERES PARA EL TIPO DE CAMPO ALFA 128

Fórmula Dinámica

Page 75: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

74 75 VELAZQUEZ VISUAL

Asistentes de camposVelázquez Visual cuenta con un asistente de campos que nos permite ac-ceder a ciertas funcionalidades muy interesantes. En el menú Campos po-demos crear campos con enlaces y también tenemos las opciones Crearcampos fecha/hora campo objeto y Crear campos dimensiones dibujo. Veá-moslas:

Crear campos fecha/hora campo objeto: si seleccionamos un campo de ti-po Objeto en el panel izquierdo del Editor y ejecutamos esta opción, se crea-rán en la tabla dos campos: uno de tipo fecha y otro de tipo hora que, entiempo de ejecución, se actualizarán automáticamente al dar de alta o mo-dificar una ficha. Velázquez Visual se encargará de dar valores a esos cam-pos sin que nosotros tengamos nada más que hacer.

El identificador de los nuevos campos estará compuesto por el identifica-dor del campo Objeto seguido por las palabras FECHA u HORA.

Crea campos dimensiones dibujo: si seleccionamos un campo de tipo Ob-jeto Dibujo en el panel izquierdo del Editor y ejecutamos esta opción, secrearán en la tabla dos campos: uno para almacenar el alto y otro para al-macenar el ancho de la imagen. El contenido de estos campos se actuali-zará automáticamente en tiempo de ejecución cuando se dé de alta o mo-difique el contenido de un Objeto Dibujo de una ficha.

El identificador de cada campo creado será el identificador del campo alque hacen referencia seguidos del texto -CX o -CY.

TABLA DE CARACTERES PARA EL TIPO DE CAMPO ALFA 64

TABLA DE CARACTERES PARA EL TIPO DE CAMPO ALFA 40

Page 76: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Esta opción es muy útil para ganar velocidad en la presentación de imáge-nes en páginas web servidas por el Servidor http de Velázquez Visual.

Si modificamos la estructura de una aplicación que ya tiene datos y añadi-mos los campos para guardar las dimensiones del dibujo cuando antes nolos teníamos, al ejecutar la aplicación, todos los registros que ya existíanantes de la modificación del proyecto que contuviesen dibujos, tendrán am-bos campos a 0. En estos casos tendremos que ejecutar un proceso con lafunción Refrescar dimensiones dibujo para darles el valor que les corres-ponda.

Tablas estáticas Son un tipo de tablas diferentes al resto de las vistas hasta ahora ya quecontienen una lista de registros no modificables por el usuario final. Porejemplo: una tabla que contiene los días de la semana o los meses del año.Una tabla estática se crea desde el Editor de Proyectos, pulsando el botónNuevo objeto . Aparecerá la ventana correspondiente a la Galería de Ob-jetos, que contiene todos los objetos visuales incluidos en Velázquez Visual.En ella, haciendo doble clic, seleccionamos el objeto Tabla Estática.

Al hacer doble clic, nos aparecerá la ventana de Propiedades de la tabla es-tática:

04 Desarrollo básicode una aplicación

MENÚ CAMPOS

Nuevo objeto

Page 77: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

76 77 VELAZQUEZ VISUAL

En el control de edición Nombre escribiremos la descripción que va a tenerla tabla, mientras que los distintos datos a incorporar en la tabla estática seincluyen pulsando sobre el botón Añadir . Al pulsar este botón aparecela ventana para introducir el dato.

En dicha ventana introduciremos un código (sólo admite un carácter, por loque si escribimos un código numérico para cada dato sólo podríamos in-troducir 10 registros: del 0 al 9. Si necesitamos más datos podremos solu-cionarlo introduciendo letras) y una descripción.

El resto de botones que aparecen a continuación del botón añadir nos per-miten suprimir, subir, bajar o editar un dato. También existe la posibilidad deasignar un icono a cada dato utilizando el botón Cambiar iconos.

Enlazaremos un campo de una tabla de datos con una tabla estática me-diante el enlace a tabla de datos estática. Así conseguimos que el valor delcampo enlazado sea siempre igual a uno de los registros de la tabla estáti-ca. Para ello hemos de especificar en el cuadro de diálogo propiedades delcampo que el campo debe estar enlazado a tabla de datos estática, así co-mo el identificador de ésta.

Añadir

Page 78: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Como puede verse, estas tablas se utilizan para un número reducido de da-tos y suelen asociarse en formularios a un control ComboBox o List Box pa-ra que el usuario de la aplicación pueda seleccionar un dato de entre losque contiene la tabla.

Ejemplo: uso de una tabla estática

Estamos diseñando una aplicación de cursos de formación para profesio-nales en la que tenemos, entre otras, una tabla llamada ESTUDIANTES conuna serie de campos.

El usuario de la aplicación nos indica que quiere ver en la ficha del estu-diante, además de los campos que ya hay creados en la tabla, otro en el

04 Desarrollo básicode una aplicación

e

Page 79: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

78 79 VELAZQUEZ VISUAL

que pueda seleccionar si el estudiante está parado, está en activo o es au-tónomo. Para ello vamos a utilizar el enlace a tabla estática.

Los pasos que realizamos son los siguientes:

• Pulsamos el botón Nuevo objeto de la barra de herramientas (o biena través de la barra de menús, seleccionando la opción Objetos > Nue-vo > Objeto).

• Dentro de la ventana Galería de objetos, seleccionamos el objeto Tablaestática.

• Velázquez muestra la ventana correspondiente a las propiedades de latabla estática. En la propiedad Nombre escribimos “Situación del estu-diante”.

• Para introducir las diferentes situaciones en las que se puede encontrarel estudiante, pulsamos el botón Añadir . Velázquez Visual nos mues-tra una ventana en la cual podremos introducir cada uno de los registrosque tendrá la tabla estática. Es decir, para el caso “Parado”, rellenamoseste estado de la siguiente manera: Código: P, Descripción: Parado.

• Una vez pulsado el botón Aceptar, volveríamos a pulsar el botón Añadirpara añadir el registro correspondiente a la situación “En activo”: Códi-go: A, Descripción: En activo.

• Finalmente, repetiríamos la operación anterior para introducir el registrodel estado “Autónomo”. Para ello escribimos: Código: T, Descripción:Autónomo. Al pulsar el botón Aceptar, en la ventana de Propiedades dela tabla estática veremos los tres registros introducidos.

Nuevo objeto

Añadir

e

Page 80: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

• Desde esta ventana podremos eliminar un registro , subir o bajarun registro concreto, así como visualizar la ventana de propieda-

des del registro. También es posible asignar un pequeño icono a ca-da registro de la tabla asignándole un objeto Multi-icono (que se verácon posterioridad).

• Al pulsar el botón Aceptar de la ventana de Propiedades de la tabla es-tática, ésta aparecerá dentro de la carpeta Tablas estáticas que está enel área Estructuras de datos del Editor de Proyectos. Cambiamos elidentificador de la tabla (que por defecto es TABLEST1) por otro llama-do SITUACION.

• El paso siguiente sería crear un nuevo campo en la tabla ESTUDIANTES,que será el que permita elegir qué situación es la que tiene el estudian-te (Parado, En activo o Autónomo). En la opción ¿Enlazado? de la ven-tana Propiedades del campo indicaremos el tipo Tabla estática, y en lapropiedad Identificador el nombre de la tabla estática (en este caso SI-TUACION).

04 Desarrollo básicode una aplicación

eliminar un registro

subir un registro

bajar un registro

visualizar la ventana de propie-dades del registro

asignar un pequeño icono

e

Page 81: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

80 81 VELAZQUEZ VISUAL

• Sustituimos el identificador del campo por SITUACION.

• Finalmente incluimos en el correspondiente formulario tres controles Bo-tón de radio o un control ComboBox o un List Box para que el usuariopueda seleccionar la situación del estudiante.

Situándonos sobre la carpeta Tablas estáticas del panel izquierdo del Editorde Proyectos y seleccionando la opción de menú Archivo / Imprimir (Ctrl-p),obtendremos un informe que presenta el identificador, el nombre y la listade elementos de las tablas estáticas del proyecto.

Plantillas de CamposSupongamos que en nuestro proyecto vamos a trabajar con varios camposde idénticas propiedades. Para no establecer sus propiedades uno a uno,podemos definir una plantilla de campo y usarla para definir todos esoscampos. También son útiles en los casos en los que un mismo tipo de cam-po se repite en diferentes tablas de datos. En consecuencia: las plantillasse utilizan para estandarizar los campos de un proyecto.

Para crear una plantilla de campo de una forma rápida debemos seleccio-nar el campo que queremos utilizar como plantilla, copiarlo, irnos a la car-peta Plantillas de campo y pegarlo. Ya estará creada. También podemoscrearlas directamente en la zona de estructura de datos de la ventana prin-cipal del proyecto.

e

Page 82: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Velázquez mostrará un cuadro de diálogo en el que definir las propiedadesde la plantilla.

Una vez hayamos creado la plantilla, para crear un campo en una tabla apartir de ésta, sólo hemos de añadir un nuevo campo en la tabla que que-ramos, y dentro de las propiedades del campo, en el apartado Tipo de cam-po seleccionaremos la plantilla.

Otro detalle: las plantillas son exclusivas del mapa donde se hayan creado.

Ejemplo: uso de las plantillas de campo

Estamos realizando una aplicación en la que tenemos, entre otras, dos ta-blas: una que se llama CLIENTES y otra que se llama PROVEEDORES.

04 Desarrollo básicode una aplicación

PLANTILLAS DE CAMPO

Cuando trabajemos conplantillas hemos de tener encuenta el siguiente detalle:supongamos que asociamosla plantilla1 a un campo,llamémoslo campo1. Si mástarde cambiamos laspropiedades de la plantilla1,el campo1 permanecerá conlas propiedades de laplantilla vieja, es decir, no seactualiza.

ADVERTENCIA

e

Page 83: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

82 83 VELAZQUEZ VISUAL

Vamos a añadir, tanto en la tabla CLIENTES como en PROVEEDORES, elcampo TELEFONO. Para ello utilizaremos una Plantilla de campo. Los pa-sos que realizamos son los siguientes:

• Pulsamos el botón Nuevo objeto de la barra de herramientas (o biena través de la barra de menús, seleccionando la opción Objetos > Nue-vo > Objeto).

• Dentro de la ventana Galería de objetos seleccionamos el objeto Planti-lla de campo personalizado.

• Velázquez muestra la ventana correspondiente a las propiedades delcampo (en este caso la plantilla de campo) en la cual introducimos laspropiedades que tendrá dicha plantilla.

Nuevo objeto

e

Page 84: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

• Pulsamos el botón Aceptar de la ventana de propiedades y veremos, enla carpeta Plantillas de Campo que aparece en el área de Estructura dedatos del Editor de Proyectos, el nombre del campo Plantilla que aca-bamos de crear.

Por defecto aparece como nombre del identificador PLANTILLA1. Sustitui-remos el identificador por TELEF.

• Ahora, si creamos un campo en la tabla CLIENTES (por ejemplo) y abri-mos el combo Tipo en las propiedades de dicho campo, encontraremosel tipo Teléfono, que es la descripción de la Plantilla de campo reciéncreada.

04 Desarrollo básicode una aplicación

PLANTILLA TELÉFONO

e

Page 85: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

84 85 VELAZQUEZ VISUAL

• Al seleccionar el Tipo Teléfono, Velázquez asignará al nuevo campo laspropiedades de la plantilla.

Indices. Tipos y propiedades generalesEl índice en Velázquez Visual es un elemento clave ya que permite realizarbúsquedas de datos, tanto en la propia tabla a la que pertenece como enotras enlazadas. También es el encargado de enlazar esas mismas tablas.

Se crean pulsando el botón Nuevo índice de la barra de herramientas.Velázquez Visual genera un identificador estándar para los índices que po-drá ser modificado por el diseñador. Haciendo doble clic sobre el nombredel índice aparece el cuadro de diálogo Propiedades del índice donde se leda un nombre, un tipo y las partes de las que se compone.

Nuevo índice

e

Page 86: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

La ventana presenta los siguientes apartados:

• Tipo de índice: Velázquez Visual cuenta con los siguientes tipos de índices:

– Clave única: no admite más que un registro con la misma clave. Porejemplo, el campo código de una tabla maestra. Si en el mismo índi-ce añadimos varias partes, sólo admitirá un registro con esa combi-nación de componentes.

– Palabras: el registro es indexado por cada palabra encontrada en loscampos que forman la clave. Los índices de tipo Palabras disponende una lista negra en la que se pueden incluir todas aquellas palabrasque no queremos indexar. Para ello nos situamos en el control de edi-ción Lista negra, introducimos la palabra a excluir y pulsamos la teclaTab para aceptarla. Repetiremos esta operación por cada palabraque queramos añadir a la lista. Los artículos El, La, Las, Los... son losmejores candidatos a incluir, aunque no los únicos. El índice Palabrassuele usarse con el campo NOMBRE de un artículo, cliente, provee-dor, etc. lo que permite, por ejemplo, buscar los artículos en cuyadescripción esté incluida una determinada palabra, sea cual sea laposición que ocupe dentro del campo.

– Múltiples claves: el registro es indexado desde cero claves hasta elnúmero de claves declaradas en el cuadro de edición Nº de claves.Vamos a tratar de aclararlo con un ejemplo: supongamos una tablaque contiene datos acerca de libros (título, autor, género...). Existe laposibilidad de que un libro sea escrito por dos personas, de modoque podríamos tener los campos Autor1 y Autor2. En este caso po-

04 Desarrollo básicode una aplicación

CUADRO PROPIEDADES DEL ÍNDICE No es aconsejable declararun índice correspondiente aun campo de tipo alfabético(por ejemplo, el campoNombre) con clave única.De este modo no evitamosque un mismo registro (uncliente, por ejemplo) seaintroducido varias veces:basta que un usuario lo déde alta como Cliente1, y queotro lo vuelva a dar de altacomo “Cliente1” para que,aun refiriéndose al mismocliente, éste aparezca comodos registros distintos.

Aun obviando el problemaanterior, veamos otro detalle:supongamos un índice declave única correspondientea un campo alfabético delongitud 10 caracteres. Siintroducimos el registroJosé-Ramón Blanco yposteriormente José-RamónPérez, el segundo registrono será dado de alta ya quelos diez primeros caracteresde ambos nombrescoinciden, y Velázquezasume que los dos soniguales. Como el índice esde clave única sólo sequedará con el primero.

ADVERTENCIA

Page 87: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

86 87 VELAZQUEZ VISUAL

demos definir un índice de Múltiples claves con 2 claves, la primeraes el campo Autor1 y la segunda Autor2. Si hacemos ahora una bús-queda de libros por un autor determinado se incluirán todos los librosde los que sea coautor, independientemente de que figure en el cam-po Autor1 o en el campo Autor2. Así nos ahorramos tener que definirdos índices y dos búsquedas (una para cada campo Autor), cosa quetendríamos que hacer de no existir los índices de múltiples claves, yaque no sabemos si el que buscamos se encuentra en el campo Au-tor1 o en el Autor2. Además evitamos dar de alta más de una vez aun autor, cosa que ocurriría si en un libro metemos a un autor comoAutor1 y en otro distinto lo metemos en el campo Autor2 (estaríamosdándolo de alta dos veces). Esto no ocurre si usamos los índices demúltiples claves. Este índice se usa en especial en los plurales finitos,cuando simplificamos una relación entre tablas de plural en las dosdirecciones, y que veremos más adelante.

– Acepta repetidas: la ficha es indexada sólo una vez pero, al contrarioque la clave única, se admiten repeticiones. El sistema le añade 4 by-tes a la clave para diferenciar las repetidas.

– Aproximación alfabética ternaria: permite localizar de forma instantá-nea los registros que contengan dentro del campo indexado el grupode letras solicitadas por el usuario, en número mínimo de tres, de ahílo de ternaria.

• Nº partes: indica el número de campos que añadimos en el cuadro Fór-mula partes y por los que seremos capaces de indexar. Por ejemplo, siincluimos los campos Autor1, Autor2 y Autor3 en el cuadro condiciónfórmula, el número de partes será tres. No hay limitación en el númerode partes de la clave, se pueden poner tantos campos como sea nece-sario y lógico.

• Nº de claves: se refiere al número de campos que aparecen en el cuadroFórmula partes por los que queremos indexar. Sólo es necesario rellenareste cuadro cuando el tipo de índice es Múltiples claves. Siguiendo conel ejemplo del punto anterior, si especificamos que el número de claveses uno, sólo estaremos indexando por Autor1, si el número de claves esdos, indexaremos por Autor1 y Autor2...

• Campo condición para indexar: debe ser un campo Booleano (Sí / No) alque asociamos nuestro índice. Del valor que tenga el campo dependeque el registro sea o no indexado.

• Estado del campo para indexar: si la casilla de verificación está activada,el registro se indexará cuando el valor del campo booleano sea Verdade-ro. Si la casilla de verificación no está activada el registro se indexarácuando el valor del campo booleano sea Falso (1 verdadero, 0 falso).

• Fórmula partes: permite seleccionar de la lista Campos seleccionableslos campos que componen la clave (por ejemplo, Autor1, Autor2...). Conel botón Conversión parte, podemos reducir la ocupación en disco de

Page 88: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

los índices. Esta conversión no sólo ahorra espacio en disco, sino queproporciona funcionalidades adicionales a las búsquedas. Por ejemplo,si tenemos un campo de tipo alfabético, creamos un índice por ese cam-po y lo convertimos a Alfa 40, el resultado es que el campo en sí conti-núa siendo alfabético a todos los efectos, pero al buscar por el índice se-rán despreciados todos los caracteres que no pertenezcan al tipo con-vertido. De modo que encontraríamos “Quijote” aunque escribiéramos“Quijote” o “quijote”, ya que los caracteres en minúsculas se converti-rían a mayúsculas y los acentos se despreciarían por no formar parte deltipo.

• Con los botones Aumentar y Reducir parte, somos capaces de aumen-tar o reducir el número de caracteres que van a componer la clave sobrela que se va a realizar la búsqueda (ojo, hemos de reducir al número decaracteres tal que aun nos permita distinguir los registros). Esto reper-cutirá en ahorro del espacio en disco y en una mayor velocidad al reali-zar las búsquedas.

• Longitud clave: este dato lo calcula Velázquez Visual y nos dice, en by-tes, cuánto va a ocupar la clave para cada registro. Será la suma de lalongitud de cada una de las componentes de la clave, más cuatro bytesen el caso de que estemos usando Acepta Repetidas (y que usa para di-ferenciar registros con la misma clave).

El número de índices que podemos crear para cada tabla es algo mayor detrescientos, aunque no se recomienda que su número crezca mucho por ra-zones de tamaño.

Ejemplo: creación de índices

Tenemos un proyecto con varias tablas, entre las cuales hay una llamadaESTUDIANTES con una serie de campos e índices (dichos índices creadosautomáticamente por Velázquez Visual).

04 Desarrollo básicode una aplicación

Los índices de clave únicason útiles para asegurarnosde que un único elementocon cierta característica, ocon dos o más, no se repita.

TRUCO

e

Page 89: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

88 89 VELAZQUEZ VISUAL

El usuario de la aplicación quiere incorporar en el programa las siguientesbúsquedas: un listado de todos los estudiantes ordenados por código, otroen el que aparezcan ordenados alfabéticamente, otro que muestre los re-gistros que incluyan en su nombre la palabra o palabras que el usuario es-criba y por último otro en el que el usuario pueda buscar registros por tro-zos de palabras del nombre. Necesitaremos crear búsquedas, y las bús-quedas necesitan de los índices para que éstas puedan ejecutarse. Los ín-dices que nos hacen falta los crea por defecto Velázquez Visual:

• El índice CODIGO es del tipo Clave única e indexa por el campo CODI-GO de la tabla. Este índice se utilizará para realizar la búsqueda de es-tudiantes por código.

• El índice NOMBRE es de tipo Acepta repetidas e indexa por el campoNOMBRE de la tabla. Por defecto indexa los 12 primeros caracteres y loconvierte a Alfa 64. Nos permitirá realizar la búsqueda de estudiantespor orden alfabético.

• El índice PALABRAS es de tipo Palabras e indexa igualmente por el cam-po NOMBRE de la tabla. Se utilizará para realizar la búsqueda de estu-diantes por palabras del nombre.

• Finalmente, el índice TROZOS es de tipo Aproximación alfabética terna-ria (grupos de tres caracteres) e indexa por el campo NOMBRE de la ta-bla. Permite realizar búsquedas por trozos de palabras del nombre.

Ejemplo: Análisis de una tabla de datos maestra

Vamos a declarar una tabla de tipo maestro normal con clave numérica,desactivando todas las opciones, para ser nosotros mismos los que es-tablezcamos las propiedades que hubiera creado Velázquez Visual pordefecto.

e

e

Page 90: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Entramos en el editor de proyectos y creamos un nuevo mapa, pulsando elbotón Nuevo proyecto. A continuación pasamos a la ventana de Es-quema de Tablas pulsando el correspondiente botón. Ya que el proyecto notiene tablas, nos aparece la ventana del asistente de creación de tablas enla que optaremos por crear una tabla de tipo maestro normal con clave nu-mérica.

A continuación nos aparece la ventana de propiedades Creación de maes-tro, en la que cumplimentaremos los campos Nombre Plural y Singular conlo que queramos, por ejemplo, Fotografías y Fotografía, respectivamente(veremos cómo al pasar el foco al control de Singular nos copia lo que he-mos escrito para que lo editemos).

04 Desarrollo básicode una aplicación

Nuevo proyecto

Esquema de Tablas

e

Page 91: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

90 91 VELAZQUEZ VISUAL

Desactivaremos también las opciones Índice alfabético, Índice de palabrase Índice de trozos de palabras de Datos de la descripción. Además, quita-remos el Nombre del campo. De Datos de la clave desactivamos Numera-ción automática y eliminamos el Nombre del campo, y el Nombre del índi-ce. Pulsamos entonces Aceptar, con lo que ya tendremos creada la tablasobre la que trabajaremos.

Editamos ahora la tabla haciendo doble clic con el botón izquierdo del ra-tón sobre ésta y vemos lo que hemos creado.

e

Page 92: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Si la comparamos con una tabla que hayamos creado con todas las opcio-nes por defecto, veremos cómo nos faltan tres índices, pero además, si en-tramos en los campos e índices creados, veremos que éstos no tienen cum-plimentado el campo descripción.

04 Desarrollo básicode una aplicación

e

Page 93: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

92 93 VELAZQUEZ VISUAL

Como sabemos, es importante mantener los identificadores de los camposque se crean por defecto al añadir una tabla para que la aplicación funcio-ne bien, sin embargo sí podemos modificar las descripciones para que seadecúen a los datos que van a contener: por ejemplo, nos puede interesarcambiar la descripción del campo NOMBRE (por defecto es Nombre) por elde Razón Social o Nombre comercial. El descriptor del campo CÓDIGO nor-malmente no se cambiará. Si queremos usar un código propio (códigos debarra, codificación de series de albaranes propia, etc.), lo añadiremos co-mo un campo más de la tabla, manteniendo el original.

Además, en las propiedades del campo CÓDIGO veremos cómo su conte-nido inicial es Ninguno. Lo normal es que usemos como contenido inicial Si-guiente al último, forzando a que Velázquez Visual compruebe antes de aña-dir un registro cuál fue el último, y sumar uno al código.

También disponemos de la opción Contador en variable, de modo que Ve-lázquez se encarga de incrementar el valor del código pero trabajando so-bre una variable. En este caso, si abrimos el formulario de alta, Velázquezincrementa el valor de la variable en una unidad y no la decrementa si can-celamos el formulario de alta.

La opción Ninguno la usaremos, por ejemplo, cuando importemos registrosque ya tengan código, o en otros tipos de tabla en los que seamos noso-tros, en ejecución, los que cumplimentamos el código.

TABLA CREADA CON TODAS LOS OPCIONES POR DEFECTO

e

Page 94: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Completamos las descripciones y cambiamos el contenido inicial por Si-guiente al último. En el caso del campo NOMBRE, nos interesa cambiar sudescripción por Título ya que los registros serán fotografías, pero mantene-mos el identificador NOMBRE para no perder ninguna funcionalidad de Ve-lázquez Visual.

Ahora pasamos a los índices. Si entramos en el índice que se ha creado au-tomáticamente, veremos que también falta el Nombre, que cumplimentare-mos. En el caso de las tablas maestras, además de ser de Clave única (esdecir, no puede haber dos registros con el mismo código) y no poder cam-biar eso, lo normal es que no tenga más componente que el código.

Si hubiéramos aceptado las opciones por defecto al crear una tabla de da-tos maestra, nos habría añadido tres índices más que son: NOMBRE, PA-LABRAS y TROZOS. Vamos a crearlos.

Los tres índices parten del campo NOMBRE como componente. Por tanto,pulsando el botón Nuevo índice del campo, después de haber seleccio-nado el campo NOMBRE, Velázquez crea un índice que tiene como Nom-bre: Título. Así es el índice NOMBRE que nos crea por defecto VelázquezVisual, diferenciándose únicamente con el que acabamos de crear en quesu descripción (nombre) es Nombre, mientras que la del índice recién crea-do es Título.

04 Desarrollo básicode una aplicación

Nuevo índice del campo

e

Page 95: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

94 95 VELAZQUEZ VISUAL

Ya tenemos un índice alfabético por el campo NOMBRE, que nos servirápara sacar una lista de fotografías ordenadas por el título. Ahora vamos ahacer el índice PALABRAS: podemos, o bien volver a seleccionar el campoNOMBRE y pulsar el botón Nuevo índice del campo, o bien copiar el queacabamos de crear. Hagamos esto último.

Nuevo índice del campo

e

Page 96: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Pulsamos F2 para cambiar el identificador y escribimos PALABRAS. En gene-ral usaremos este identificador para el índice por palabras de un campo nom-bre. Ahora lo editaremos pulsando Intro o haciendo doble clic con el ratón.

Ahora cambiaremos el Tipo de índice, escogiendo Palabras de entre la listaque se nos presenta. Este índice nos servirá para buscar palabras comple-tas en el título de las fotografías. Cuando escogemos este tipo de índice po-demos hacer uso de la Lista Negra: las palabras que introduzcamos en elcontrol inferior pulsando tabulador a continuación, no formarán parte de labúsqueda. Con esto evitamos que en el índice se guarden ciertas palabrascomo artículos, determinantes, preposiciones, etc., que no suelen usarseen las búsquedas o que no nos interesen (a, ante, de, el, la, para, por, etc.).

Nos falta el tercer índice, el índice TROZOS. Repetimos la misma operación:copiamos el último índice que creamos, lo renombramos y lo llamamosTROZOS. Lo editamos, y como Tipo de índice escogemos Aproximación al-fabética ternaria. Este índice nos permitirá encontrar fotografías cuyo títulocontenga las tres letras, o más, que hayamos escrito. Las claves que guar-da son todos los grupos ternarios de letras que contenga un campo (porejemplo, prueba, tendrá como claves: pru, rue, ueb, eba).

04 Desarrollo básicode una aplicación

INDICE PALABRAS

e

Page 97: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

96 97 VELAZQUEZ VISUAL

Con esto ya hemos creado todos los objetos que por defecto se generancon una tabla de datos maestra.

4.3.3. Enlace a tabla de datos maestra4.3.2. (enlace singular y plural)

Ya hemos comentado anteriormente cómo Velázquez Visual establece lasrelaciones entre las tablas mediante distintos tipos de enlaces, uno de loscuales es el enlace a tabla de datos maestra.

INDICE TROZOS

e

Cuestiones1. Crear una tabla estática con los días de la semana.

2. Crear una tabla de tipo maestro normal con clave numérica. A conti-nuación crear en ella un campo de tipo numérico.

3. En las propiedades del campo creado en la cuestión anterior experi-mentar con la longitud y el número de decimales: ¿Qué ocurre? Ex-perimentar también con el rango del campo.

4. Crear un campo enlazado a la tabla estática creada en la primeracuestión.

5. Crear una plantilla para campos de tipo fecha. A continuación crearotro campo usando la plantilla.

6. Ver los índices que Velázquez Visual generó por defecto al crear la ta-bla de la segunda cuestión. Crear un índice asociado a alguno de loscampos que añadimos nosotros.

Page 98: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Supongamos que tenemos dos tablas: MARCAS, con los datos correspon-dientes a una determinada marca de automóviles, y MODELOS, cuyos re-gistros se refieren a datos del modelo de coche. Vamos a establecer un en-lace de este tipo entre ambas.

Para realizar un enlace a tabla de datos maestra nos ayudamos de dos fra-ses: una que contenga un singular y un plural y otra en la que haya dos sin-gulares. Para este caso la frase singular-plural sería: “Una Marca tiene mu-chos Modelos” (de ahora en adelante diremos que MODELOS es un histó-rico de MARCAS), mientras que la frase singular-singular es: “Un Modelopertenece a una sola Marca”.

Los enlaces vienen representados gráficamente mediante flechas, siendopara este tipo de enlace una flecha de color rojo la que va de singular a plu-ral, mientras que es azul la que va de singular a singular.

Esto ya nos indica cómo son las flechas: de MARCAS a MODELOS la frasees UNO-MUCHOS, luego en esa dirección irá una flecha roja, que es el en-lace plural, también llamado enlace a histórico, y de la misma manera, de latabla MODELOS a MARCAS la frase es UNO-UNO, luego en esa otra di-rección irá una flecha azul, que es el enlace singular o a maestro.

Ahora bien: ¿Cómo creamos este enlace?

Dentro del Editor de Esquemas nos situamos en la tabla correspondiente alsingular, en este caso es MARCAS.

Situamos el cursor sobre el enlazador (cuadro gris que está en la partesuperior-izquierda de la tabla). El cursor del ratón tomará la forma de unamano. Hacemos clic sobre él (aparecerá una flecha de color rojo) y sin sol-tarlo nos desplazamos hasta la tabla MODELOS. De esta manera tendre-mos creado el enlace.

Una vez establecido el enlace, vamos a comprobar los elementos que hacreado Velázquez Visual automáticamente: si nos vamos a la Ventana depropiedades de la tabla MODELOS, veremos que en la carpeta Campos hacreado el campo MARCAS. Esto es lógico ya que hemos indicado que unModelo va a pertenecer a una Marca determinada. Si hacemos doble clicsobre su identificador, veremos en la ventana de Propiedades del campoque es un campo enlazado a la tabla MARCAS mediante el enlace a tablade datos maestra.

04 Desarrollo básicode una aplicación

enlazador

Page 99: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

98 99 VELAZQUEZ VISUAL

Si volvemos a la misma ventana de Propiedades de la tabla MODELOS yhacemos doble clic sobre la carpeta índices veremos cómo ha creado un ín-dice llamado MARCAS. Si damos doble clic sobre el índice veremos la ven-tana correspondiente a sus propiedades:

Dicho índice es del tipo Acepta repetidas e indexa por el campo MARCAS.De esta manera Velázquez Visual puede conocer desde un Modelo concre-to a qué Marca pertenece.

VENTANA PROPIEDADES DEL CAMPO MARCAS

PROPIEDADES DEL ÍNDICE MARCAS

Page 100: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Si nos vamos a la ventana de Propiedades de la tabla MODELOS y hace-mos doble clic sobre la carpeta Históricos, veremos cómo ha creado un his-tórico llamado MODELOS. Haciendo doble clic sobre dicho histórico vere-mos la ventana de Propiedades del histórico.

Podemos ver cómo dicho histórico enlaza la tabla MARCAS con MODELOSa través del índice MARCAS que ha creado Velázquez Visual.

En resumen, el enlace plural (color rojo) nos genera un histórico de la tabla,y el enlace singular (color azul) nos genera un campo enlazado a la tabla su-perior (o maestra) y un índice por ese campo.

Velázquez cuenta con un asistente para la creación de enlaces singular -plural. Dicho asistente aparece cuando, en la ventana esquema de tablasdel editor, pulsamos el botón crear punteros con histórico. Para que di-cho botón esté activo hemos de tener seleccionada una tabla del proyecto,que será la que trabaje como maestra. Al pulsar el botón aparece la venta-na del asistente en la que hemos de elegir la tabla del proyecto que hará lasveces de histórico.

04 Desarrollo básicode una aplicación

PROPIEDADES DEL HISTÓRICO MODELOS

crear punteros con histórico

Page 101: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

100 101 VELAZQUEZ VISUAL

Para eliminar un enlace hemos de borrar todos los elementos que se hangenerado al establecerlo: el campo enlazado y el índice en el histórico, asícomo el enlace a histórico del maestro.

Más adelante veremos que existe un tipo particular de tabla denominado ta-bla histórica. Lo comentamos en este punto ya que es importante paracomprender lo siguiente: el enlace MARCAS-MODELOS lo hemos creadoentre dos tablas maestras, y sin embargo, a efectos de enlace, decimos quela tabla MODELOS es histórica de la de MARCAS (aunque MODELOS es detipo maestro y no de tipo histórico). Con ello queremos decir que una tablade tipo maestro puede ser histórica de otra (a pesar de no ser de tipo his-tórico) debido al modo en el que hemos establecido el enlace.

El diseño del esquema de tablas es lo más importante a la hora de desa-rrollar un proyecto en Velázquez Visual ya que un buen diseño de esquemagarantiza una buena aplicación. El resto, que son los objetos visuales y queiremos viendo paulatinamente, tienen en general una menor importancia.

Ejemplo: Enlace a tabla de datos maestra

Tenemos un proyecto con una tabla llamada ESTUDIANTES, en la que he-mos creado una serie de campos e índices.

VENTANA CREACIÓN DE PUNTEROS CON HISTÓRICO

e

Page 102: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

El usuario final nos dice que, en la aplicación, quiere ver los cursos que va-yan realizando los centros de formación, y que un curso determinado pue-den darlo dos profesores como máximo. Asimismo, un alumno sólo puedeestar matriculado en un curso.

Como el usuario desea registrar los cursos que va impartiendo el centro for-mador hemos de crear una nueva tabla, que llamaremos CURSOS y quedeberemos enlazar con ESTUDIANTES. Para ello vamos a seguir los si-guientes pasos:

• Pulsamos el botón Esquema de tablas de la barra de herramientas (obien a través de la barra de menús, seleccionando la opción Ventana >Esquema de tablas) para acceder al área Esquema de tablas del Editorde Proyectos. Visualizaremos la tabla ESTUDIANTES que ya existe en elproyecto.

• A continuación, para crear la tabla CURSOS, pulsamos el botón Nuevatabla maestra (o también dentro de la barra de menús, seleccionan-do la opción Tablas > Crear nueva tabla de tipo > Maestro, o la combi-nación de teclas Ctrl+t). Velázquez Visual muestra la ventana Creaciónde Maestro en la cual escribimos como nombre plural: Cursos y comonombre singular: Curso.

04 Desarrollo básicode una aplicación

Esquema de tablas

Nueva tabla maestra

e

Page 103: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

102 103 VELAZQUEZ VISUAL

• Al pulsar el botón Aceptar de la ventana Creación de Maestro, VelázquezVisual crea una representación de la tabla CURSOS, que aparecerá co-loreada en amarillo (indicando que en ese momento está seleccionada).Utilizando las teclas flecha del teclado o pinchando, arrastrando y sol-tando con el ratón, situamos las tablas, una debajo de otra.

• El usuario nos ha dicho que un alumno sólo puede estar matriculado enun curso, dato que nos indica cómo enlazar ambas tablas. Enunciandolas frases “Los alumnos del curso” y “El curso del alumno” deducimosque ESTUDIANTES es histórica de CURSOS.

• Para enlazar las tablas hacemos lo siguiente: nos situamos con el botónizquierdo del ratón sobre el enlazador de la tabla CURSOS (un pequeñorectángulo situado en la esquina superior izquierda de la tabla). El cursordel ratón tomará la forma de una mano.

• Al pinchar con el botón izquierdo del ratón sobre el enlazador, el cursortomará la forma de una flecha de color rojo. Manteniendo el botón iz-quierdo del ratón pulsado y arrastrándolo hasta situarse sobre la tablaESTUDIANTES, al dejar de pulsar el botón del ratón se dibujarán auto-máticamente dos líneas: una de color rojo (enlace plural) y otro de colorazul (enlace singular).

Al diseñar el esquema detablas hemos deacostumbrarnos a situar lastablas maestras por encimade sus tablas históricas. Deeste modo cuandoposteriormente veamos elesquema, será mucho másfácil reconocer cuál es larelación de cada tabla conrespecto a las demás.

TRUCO

e

Page 104: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

• Velázquez Visual, además de dibujar las líneas, crea en cada tabla unaserie de elementos. Si hacemos doble clic sobre la tabla CURSOS ac-cederemos a la ventana Tabla: CURSOS que contiene los elementos quecomponen dicha tabla. Dentro de la carpeta Históricos Velázquez Visualcrea el histórico ESTUDIANTES, enlazado a la tabla ESTUDIANTES a tra-vés del índice CURSOS. Es lo que representa la línea de color rojo.

• Si hacemos doble clic sobre la tabla ESTUDIANTES accederemos a laventana Tabla: ESTUDIANTES que contiene los elementos que compo-nen dicha tabla. Velázquez Visual ha creado dentro de la carpeta Cam-pos el campo CURSOS, enlazado a tabla de datos maestra, y dentro dela carpeta Índices, el índice CURSOS, de tipo Acepta repetidas e inde-xado por el campo CURSOS. Toda esta estructura es la que representala línea de color azul.

Por otra parte, el usuario nos ha dicho que un curso puede ser impartidopor dos profesores. Para solucionar este tema utilizamos el denominadoÍndice de múltiples claves. Seguimos los pasos que a continuación se de-tallan:

• Creamos una nueva tabla maestra: PROFESORES utilizando el mismoprocedimiento que seguimos para crear la tabla CURSOS.

• Mediante una frase que relacione la tabla PROFESORES con la tablaCURSOS, deducimos “Los cursos del profesor” y “El profesor del cur-so”. Por lo tanto, PROFESORES es maestra de CURSOS.

• Al hacer doble clic sobre la tabla CURSOS aparece la ventana Tabla:CURSOS, y en ella, dentro de la carpeta Campos, veremos cómo Veláz-

04 Desarrollo básicode una aplicación

e

Page 105: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

104 105 VELAZQUEZ VISUAL

quez Visual ha creado, como en el caso anterior, el campo PROFESO-RES enlazado a la tabla de datos maestra PROFESORES. Selecciona-mos el identificador del campo PROFESORES y pulsamos la tecla F2para sustituirlo por PROFESOR-1.

• Como máximo cada curso va a ser impartido por dos profesores, de mo-do que crearemos otro campo con identificador PROFESOR-2, tambiénenlazado a la tabla de datos maestra PROFESORES.

• De esta manera tendremos los datos de los dos profesores que puedenrealizar el curso. Ahora, para crear un nuevo índice, seleccionamos lacarpeta Índices y pulsamos el botón Insert del teclado. Una vez creadoentraremos en su correspondiente ventana de propiedades para selec-cionar como tipo de índice Múltiples claves.

e

Page 106: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

• Adicionalmente, indicamos en la propiedad número de claves 2, y selec-cionamos como campos para indexar PROFESOR-1 y PROFESOR-2. Deesta manera, cuando se utilice el índice para (por ejemplo) buscar loscursos impartidos por un determinado profesor, aparecerán los cursosque haya impartido independientemente de estar en el campo PROFE-SOR-1 o en el campo PROFESOR-2.

Ejemplo: Creación de históricos

Supongamos una aplicación que lleva el censo de habitantes en una po-blación. Consta de dos tablas: POBLACIONES y HABITANTES, de modoque HABITANTES es histórica de POBLACIONES.

En la tabla HABITANTES incluimos los campos PRIMER APELLIDO, SE-GUNDO APELLIDO, LUGAR DE NACIMIENTO, DOMICILIO, FECHANAC(fecha de nacimiento), etc.

04 Desarrollo básicode una aplicación

e

e

Page 107: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

106 107 VELAZQUEZ VISUAL

Por haber establecido el enlace singular-plural entre las dos tablas, Veláz-quez ha creado un histórico en POBLACIONES que usa el índice Poblacio-nes de la tabla HABITANTES. Dicho índice también ha sido creado al esta-blecer el enlace y es de tipo Acepta repetidas, de modo que nos permite re-petir la población en distintos registros de HABITANTES.

Ahora bien, podemos crear otros históricos desde POBLACIONES contraHABITANTES que usen distintos índices de la tabla HABITANTES.

Por ejemplo: creamos un índice que llamaremos FECHANAC (Fecha naci-miento), en el que incluiremos el campo enlazado a la tabla maestra (Po-blaciones) y el campo FECHANAC (Fecha nacimiento). Tenemos que incluirPoblaciones para decirle a Velázquez cómo realizar el enlace a maestro. Alíndice Fecha nacimiento lo declaramos de tipo Acepta repetidas (por la mis-ma razón de antes: así varios habitantes podrán tener igual fecha de naci-miento e igual población).

El siguiente paso es crear el histórico, de modo que en POBLACIONES de-claramos un histórico contra la tabla HABITANTES mediante el índice FE-CHANAC.

ÍNDICE FECHANAC

e

Page 108: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

De este modo el histórico recién creado nos dará los habitantes de una ciu-dad pero ordenados por fecha de nacimiento.

ResumenUna vez analizado el problema, organizamos la información en Tablas, querelacionaremos por medio de enlaces de tal manera que aporten informa-ción para resolver el problema. Cuanto mejor esté el diseño de tablas y en-laces, más potente resultará la aplicación.

Las tablas organizan la información en fichas o registros, estando cada re-gistro compuesto por campos.

04 Desarrollo básicode una aplicación

e

Cuestiones1. Enlazar correctamente las tablas LIBROS y AUTORES. ¿Qué cam-

pos, índices e históricos crea automáticamente Velázquez en ellas alenlazarlas?

2. En el caso de las tablas COMUNIDADES y PAÍSES, ¿cuál es el maes-tro y cuál el histórico?

3. Intenta resolver con un índice de múltiples claves el caso en el queun libro esté escrito por más de un autor.

4. Enunciar correctamente las frases que nos ayudan a establecer el en-lace entre las tablas siguientes: JUGADORES y EQUIPOS, CLASES yALUMNOS, ALMACENES y ARTÍCULOS, TIENDAS y DEPENDIEN-TES, FACTURAS y CLIENTES, ALBARANES y LÍNEAS DE ALBARÁN.

Page 109: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

108 109 VELAZQUEZ VISUAL

La principal propiedad de las tablas de tipo maestro normal con clave nu-mérica es la de tener un campo que identifica de forma inequívoca a sus re-gistros además de un índice con clave única e irrepetible (código).

Los campos pueden enlazarse a las tablas estáticas, las cuales guardan re-gistros que no pueden ser modificados en ejecución.

Mediante las plantillas de campo podemos predeterminar las propiedadesde ciertos campos de uso frecuente en un mapa.

Gracias a los índices podremos establecer relaciones entre las tablas y rea-lizar búsquedas en la base de datos.

El enlace más común es el que se establece entre un maestro (AUTORES)y sus históricos (LIBROS).

Para saber quién es el maestro y quién es el histórico nos ayudamos de dosfrases. Una que contenga un plural y un singular (las comunidades delpaís), y otra con dos singulares (el país de la comunidad).

Una tabla se puede definir como tipo histórico. Otra cosa distinta es queuna tabla sea histórica de otra por cómo establecemos el enlace entre am-bas (LIBROS, aun siendo de tipo maestro, es histórica de AUTORES).

4.4 Objetos visuales

4.4.1. Galería de objetos

GALERÍA DE OBJETOS

Page 110: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

La Galería de objetos es el cuadro de diálogo en el que pueden elegirse losobjetos que componen un proyecto de Velázquez Visual.

Para acceder a ella hemos de pulsar dentro de la barra de herramientas delEditor de Proyectos el botón Nuevo objeto. Una vez en ella, para elegirun objeto podemos, o bien hacer doble clic sobre el que queramos crear, obien seleccionarlo y pulsar el botón . Con el botón podremos salir sincrear ningún objeto, y si reconocemos mejor el objeto que necesitamos porlos iconos, podemos hacerlos más grandes pulsando .

Nos interesa familiarizarnos con las Carpetas de objetos, utilizadas en eleditor de proyectos para ordenar y clasificar los objetos visuales (y tambiénlas variables globales).

Para crear una carpeta nos situaremos en el área derecha del Editor deProyectos (área de objetos) y haremos clic con el botón derecho del ratón,de modo que nos aparecerá un menú contextual en el que seleccionamosla opción Nueva carpeta. También podemos acceder a esta opción desdela barra de Herramientas del Editor de Proyectos. Velázquez nos presenta-rá la ventana Carpeta de Objetos (ésta no aparece en el área de variablesglobales. Aquí creamos la carpeta directamente y no se puede cambiar sudiseño):

04 Desarrollo básicode una aplicación

Para crear un objetoseleccionamos una tabla yabrimos entonces la Galeríade Objetos. El objeto quecreemos quedaráautomáticamente asociado ala tabla seleccionada en unprincipio. Esto sirve paratodos los objetos que debanestar asociados a una tabla,incluidos los procesos, quetendrán como origen ésta.

TRUCO

Nuevo objeto

Seleccionar

Salir

Aumentar tamaño de iconos

Page 111: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

110 111 VELAZQUEZ VISUAL

Seleccionamos el diseño de carpeta según el tipo de objetos visuales quevayamos a clasificar en ella y pulsamos el botón Aceptar. De esta maneraVelázquez Visual crea en el área de objetos la carpeta. Si queremos cam-biar su título basta con pulsar la tecla F2, escribir el nuevo título y pulsar elbotón Intro.

Para crear una carpeta hija, basta con seleccionar el menú contextual ante-rior que aparecía con el botón derecho del ratón y elegir la opción Nuevacarpeta hija, o bien desde la barra de herramientas del Editor de Proyectos.

4.4.2. Rejilla visor de tablas

La rejilla es un objeto que se utiliza en Velázquez Visual para ver listas de re-gistros de una determinada tabla. Se crea partiendo de columnas, cada unade las cuales contendrá un campo de la tabla, mientras que las filas hacenreferencia a cada uno de los registros de la tabla.

VENTANA CARPETA DE OBJETOS

Como sugerencia deorganización se suele crearuna carpeta para cada tablade nuestro proyecto (lascarpetas Objetos 1 aObjetos 7) y luego crear ensu interior una serie decarpetas hijas (carpetasVarios a Informes) paraagrupar los distintos objetosvisuales.

TRUCO

Page 112: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Creación y propiedades de rejillas Para crear una rejilla pulsamos, dentro de la barra de herramientas del Edi-tor de Proyectos, el botón Nuevo objeto. Aparecerá la ventana Galeríade Objetos, en la que haremos doble clic sobre el objeto Rejilla visor de ta-blas. Velázquez Visual nos mostrará la ventana Propiedades de la rejilla.

Una vez seleccionadas las propiedades, pulsamos el botón Aceptar, apare-ciendo una representación visual de la rejilla en el área de objetos.

Las propiedades de la rejilla son las siguientes:

Tabla datos: tabla de origen de la rejilla.

Nombre: descripción que va a tener la rejilla.

Fuentes: en este apartado aparecen las fuentes por defecto que se hayandesignado en el proyecto. Incorpora una serie de botones para poder aña-dir, sustituir, suprimir, subir o bajar fuentes.

Privada: identifica la rejilla como privada de modo que el usuario final nopueda utilizarla para sus propios fines. Si es privada sólo podrá usarsedonde determine el programador. Si es pública el usuario podrá usarla des-de cualquier lista de esa misma tabla mediante la opción Cambiar aspec-to rejilla.

04 Desarrollo básicode una aplicación

PROPIEDADES DE LA REJILLA

Nuevo objeto

Page 113: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

112 113 VELAZQUEZ VISUAL

Multiselección: activada esta casilla de verificación, en tiempo de ejecuciónpodremos seleccionar más de un registro a la vez (para ejecutar un proce-so sobre los registros seleccionados, por ejemplo). Una vez activada, se in-sertará antes de la primera columna otra nueva, que será la columna demultiselección. Una vez creada la columna de multiselección podemos dar-le propiedades.

Editable: activada esta casilla de verificación, en tiempo de ejecución elusuario podrá modificar registros directamente en la rejilla, sin tener queabrir el formulario de edición. A las columnas de la rejilla que queramos seanmodificables por el usuario final, tendremos que activarles esta opción enlas propiedades del Cuerpo. Los campos de tipo objeto no admiten la edi-ción directa.

Líneas redimensionables: si se desactiva, en ejecución no se podrá cambiarel alto de las líneas.

Columnas redimensionables: si se desactiva, en ejecución no se podrácambiar el ancho de las columnas.

Cols/Ancho: se muestran aquí (son de solo lectura) las dimensiones de larejilla: el número de columnas y el ancho de la misma.

Botones cabecera: establecemos su altura, también fijamos los colores pa-ra la cara, la sombra y la luz de los mismos.

Cuerpo: podremos establecer la altura de las filas, el color de fondo y el co-lor de fondo para filas pares. También el color de las líneas de la rejilla.

Pie: activamos esta opción para que en la rejilla se muestre un pie para pre-sentar, por ejemplo, un texto o la suma acumulada de toda la columna. Ten-dremos que especificar su altura en píxeles.

Formulario alta: formulario asociado para dar altas en la tabla de datos. Enel ejecutor esta opción se dispara con la tecla +, haciendo doble clic en unalínea vacía o a través del menú de contexto de rejillas.

Formulario modificación: formulario asociado para modificar un registro enla tabla de datos. En el ejecutor esta opción se dispara pulsando la tecla es-pacio sobre la línea seleccionada, haciendo doble clic sobre la misma o através del menú de contexto de rejillas.

Formulario bajas: formulario asociado para dar de baja un registro en latabla de datos. En el ejecutor esta opción es disparada con la tecla Suprhabiendo seleccionado la línea o a través del menú de contexto de reji-llas.

Doble clic: si queremos disparar un proceso al hacer doble clic sobre unelemento de la rejilla, habrá que seleccionarlo en este parámetro.

Informe: informe por defecto que puede lanzarse desde esa rejilla.

Para diferenciar fácilmentelas filas pares de las imparespodemos darles un color defondo distinto.

Si queremos visualizar unarejilla con una única fila queocupe todo el alto de laventana donde se vaya avisualizar, le damos a la filaun alto superior al altomáximo que va a tener laventana. En tiempo deejecución, se reduciráautomáticamente hastaocupar, sólo una fila, todo elalto de la ventana. Porejemplo, podemos utilizaruna rejilla para visualizar unúnico registro en un menú.

TRUCO

La opción Doble clic implicaque no se va a presentar elformulario de modificación alhacer doble clic. En estecaso, para obtenerlo habráque abrir el menú decontexto que se presenta alpulsar el botón derecho delratón.

ADVERTENCIA

Page 114: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Cambio selección simple: permite disparar un proceso cada vez que se se-leccione, en ejecución, un registro en la rejilla (esta opción es útil para lasincronización de controles en menús de tipo formulario).

Inicio edición en línea: permite disparar un proceso al comienzo de la edi-ción de una línea. Sólo se disparará cuando editemos la línea, no por cadacelda que editemos en la misma. Estará inactiva si no se ha activado pre-viamente la opción Editable.

Fin edición en línea: permite disparar un proceso al finalizar la edición deuna línea. Sólo se disparará cuando se haya finalizado la edición de la línea,no cada vez que finalice la edición de una celda de la misma. También es-tará inactiva si no se ha activado previamente la opción Editable.

Marcado multiselección: permite ejecutar un proceso cuando el usuariomarque un registro para selección. Esta opción estará inactiva si no se haactivado previamente la opción Multiselección. No hemos de utilizar estoseventos para lanzar procesos que no sean de control.

Desmarcado multiselección: permite disparar un proceso cuando el usuariodesmarque un registro de la selección. Permanecerá inactiva si no se ha ac-tivado previamente la opción Multiselección. Tampoco hemos de utilizar es-tos eventos para lanzar procesos que no sean de control. Si al ejecutar unaaplicación en una rejilla con multiselección se ejecuta la opción de marcaro desmarcar todos los registros de la lista, los eventos de marcado / des-marcado multiselección no serán ejecutados.

Asistente creación de rejillasPara facilitar la creación de rejillas, Velázquez Visual dispone del Asistentede creación de rejillas. Éste aparece al pulsar el botón Asistente, situa-do en la barra de herramientas de la rejilla. El asistente aparece automáti-camente cuando la rejilla está vacía.

04 Desarrollo básicode una aplicación

Asistente

Page 115: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

114 115 VELAZQUEZ VISUAL

Las propiedades del asistente son:

Campos seleccionables: son los campos que pueden incluirse en la rejilla,es decir, los campos contenidos en la tabla de datos asociada y los de lastablas enlazadas a ella. Los campos enlazados están identificados con unpequeño botón ( ), que al ser pulsado despliega los campos de la tabla dedatos enlazada. Si se trata de un campo enlazado a una tabla estática, te-niendo ésta definido un dibujo multi-iconos, podremos visualizar en el cuer-po de la rejilla el icono del dato. Para ello desplegamos el campo y selec-cionamos el icono. Para seleccionar un campo haremos doble clic sobre elnombre del campo o bien pulsaremos la barra espaciadora.

Campos seleccionados: campos elegidos de la lista Campos selecciona-bles. Por cada elemento el asistente creará una columna para la rejilla. Pa-ra borrar un elemento de esta lista hacemos doble clic sobre él o lo selec-cionamos y pulsamos la tecla Supr.

Aspecto: tipos de letra y color para cada una de las secciones: cabecera,cuerpo y pie.

Crear con todos los campos: creará una columna en la rejilla por cada campode la tabla de datos. En este caso no es necesario seleccionar los campos.

Crear según selección: creará una columna en la rejilla por cada campo se-leccionado.

En la parte inferior de la rejilla se muestra el ancho en píxeles de cada co-lumna y si ha sido definida como de ancho variable, en cuyo caso, junto alnúmero aparecerá el símbolo >>. Por ejemplo, en la siguiente figura se in-dica que la primera columna mide 46 píxeles de ancho, la segunda 90, latercera 262 (definida con ancho variable), la cuarta y la quinta 78.

Expandir rama

Cuestiones1. Cada ficha que aparece en una rejilla, ¿se dispone en las filas o en

las columnas? ¿Y los campos de cada ficha?

2. En el editor de proyectos, abrir un nuevo proyecto y crear la tablaMONTAÑAS (maestro normal con clave numérica). En ella añadimoslos campos Altura, Localización, Primer ascensionista, Nº de éxitos eÍndice de peligrosidad. Crear una rejilla asociada a la tabla, de modoque podamos seleccionar más de una montaña a la vez. La rejilla só-lo debe presentar los campos Nombre y Altura.

3. Crear otra rejilla asociada a la tabla MONTAÑAS, pero en este casoque presente todos los campos de la tabla MONTAÑAS y con la po-sibilidad de modificar sus registros en tiempo de ejecución (Nota:cuando aceptemos, se presentará la ventana de edición de rejillas,que vamos a ver a continuación. De todos modos ya sabemos lo su-ficiente para practicar con las cuestiones propuestas).

Page 116: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Crear y eliminar columnasUna vez creada la rejilla, podemos modificar la misma utilizando la barra deherramientas disponible.

Hagamos un recorrido por los botones de la barra:

Si queremos que aparezca el Asistente de creación de rejillas, pulsamos elboton Asistente.

Para ver las propiedades de la rejilla pulsamos el botón Propiedades ob-jeto.

Para incluir procesos ejecutables desde la rejilla pulsamos el botón Pro-cesos. Por defecto, desde la rejilla podremos disparar cualquier procesopúblico del mapa cuyo origen sea una lista asociada a la rejilla. Con esta op-ción seleccionamos cuáles podrán dispararse y cuáles no.

Para crear una columna en la rejilla pulsamos el botón Nueva columna.De este modo creamos una columna que se posicionará en último lugar.

Si mantenemos pulsado el botón Vuelve a función Modificar , se volveráa activar automáticamente el modo Propiedades de columna tras usaruna sola vez cualquiera de los demás botones. Si no está pulsado, no sevuelve automáticamente al modo Propiedades de columna y podremos usarcada botón indefinidamente.

Para insertar una nueva columna pulsamos el botón Insertar columna ysobre la cabecera de la columna a insertar hacemos un clic. La columna se-rá creada a la izquierda de la seleccionada.

Si queremos duplicar una columna, pulsamos el botón Duplicar colum-na. La nueva columna será creada a la derecha de la original y mantendrásus mismas propiedades.

Para eliminar una columna pulsamos el botón Eliminar columna y sobrela cabecera de la columna a borrar hacemos un clic.

Si queremos mover una columna hacia la izquierda pulsamos el botón .

En cambio, si queremos mover la columna hacia la derecha pulsamos elbotón .

Para aumentar el ancho de una columna píxel a píxel, activamos el botóny vamos haciendo clic sobre la cabecera de la columna. De igual modo,

con el botón reducimos el ancho píxel a píxel.

Con los botones copiar y pegar condiciones-fuentes ( ) copiamos laslistas de colores y fuentes condicionados que tengamos definidas en la

04 Desarrollo básicode una aplicación

Asistente

Propiedades objeto

Procesos

Nueva columna

Vuelve a función Modificar

Propiedades de columna

Insertar columna

Duplicar columna

Eliminar columna

Mover columna a la izquierda

Mover columna a la derecha

Aumentar ancho

Reducir ancho

Copiar y pegar condi-ciones colores - fuentes

Page 117: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

116 117 VELAZQUEZ VISUAL

pestaña cuerpo de las propiedades de una columna de rejilla (casilla Otros).En los apartados siguientes veremos los botones que faltan.

Cambiar las propiedades de una columnaPara cambiar las propiedades de una columna comprobamos que está pul-sado el botón Propiedades columna y hacemos clic con el botón iz-quierdo del ratón sobre su cabecera. Al pulsar, aparece el cuadro de diálo-go Propiedades de columna de rejilla con sus tres secciones separadas:Cabecera, Cuerpo y Pie (esta última opcional). Cada sección tiene sus pro-piedades particulares, veámoslas:

Propiedades de cabecera:

Título: es el texto para la cabecera de la columna. Es una cadena de for-mato. Para partir una línea en dos, pulsaremos la combinación de teclas Ctrl+ Intro.

Alineamiento del texto: seleccionamos aquí el tipo de alineamiento que de-seamos. Si la casilla de verificación Multilíneas está seleccionada, el títulose repartirá en varias líneas si no entra completo en una sola.

PROPIEDADES DE CABECERA

Propiedades columna

Page 118: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Fuente: aquí elegimos la fuente que vamos a usar en la cabecera de entrelas seleccionadas en las propiedades de la rejilla.

Color texto: esta opción nos permite cambiar el color del texto de la cabe-cera.

Propiedades del cuerpo:

Contenido: presenta los campos de la tabla de datos asociada a la rejilla.Los campos enlazados a una tabla de datos maestra están identificadoscon un pequeño botón + con el que podemos desplegarlos.

Manual: casilla de verificación que conmuta entre la lista arbolada de loscampos de la tabla y el modo manual. En este modo son introducidos losdatos manualmente mediante una cadena de formato. Para ayudarnos enla creación de la cadena podemos utilizar el Asistente para la edición de ca-denas de formato.

Fuente: aquí especificamos la fuente a utilizar en la columna de entre las in-cluidas en las propiedades de la rejilla.

04 Desarrollo básicode una aplicación

PROPIEDADES DEL CUERPO

Page 119: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

118 119 VELAZQUEZ VISUAL

Color Texto: aquí seleccionamos el color para el texto. Si activamos elcheck Otros, obtendremos la ventana Lista de colores y fuentes condicio-nados. En ella, al darle al botón insertar, aparecerá la ventana Colores yfuente condicionados, en la que podremos decidir el color del fondo y quéfuente y de qué color vamos a usar según la condición que queramos (pa-ra introducir la condición disponemos del asistente para la edición de fór-mulas). Se tomará como color de fondo por defecto el especificado en laspropiedades de la rejilla.

Alineamiento del texto: seleccionamos aquí el alineamiento que queramos:Horizontal o Vertical. Con Horizontal podremos alinear el texto con respec-to al ancho de la celda a la izquierda, centrado, a la derecha o justificado.Con Vertical podremos alinear el texto con respecto al alto de la celda en laparte superior, en la inferior o en la línea base.

Multilíneas: al activar esta casilla, el contenido se repartirá en varias líneassi no entra en una sola.

Acumulador: activa la acumulación parcial de la columna, esto es, en cadafila aparece la suma de sí misma con todas las anteriores.

Ancho variable: si activamos esta opción para una columna determinada, entiempo de ejecución ésta se expandirá o se reducirá según sea el tamañode la ventana y de la resolución del monitor. Si una columna ha sido defini-da como de ancho variable, en la última fila de la pantalla de edición de re-jillas se mostrará, junto al ancho en píxeles de la misma, el símbolo >>.

Editable: activada esta opción, si previamente la hemos activado en las pro-piedades de la rejilla, en ejecución el usuario final podrá modificar directa-mente sobre la rejilla el valor del campo del registro sobre el que esté posi-cionado. Para comenzar la edición de una línea el usuario tendrá que pul-sar la barra espaciadora sobre ella. Con el tabulador se podrá mover entrelos distintos campos editables de una línea.

Page 120: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Separador de miles: si el campo es numérico podemos activar esta opciónpara que se muestren los separadores de miles.

Condición visible: si se activa esta opción podremos condicionar, medianteuna condición fórmula, que la columna sea mostrada en tiempo de ejecu-ción.

Propiedades Edición: sólo necesitaremos establecer estas propiedades si larejilla y la columna están marcadas como editables.

Condición activo: a través del asistente para la edición de fórmulas podre-mos establecer una condición que debe cumplirse para que el campo de lacolumna pueda ser editado.

Autocompletar: sólo válido para columnas de edición de un campo NOM-BRE de una tabla de datos maestra. De este modo, si el usuario escribe enla celda una cadena, el programa presentará automáticamente el primer re-gistro de la tabla maestra cuyo campo nombre comience por dicha cadena.La parte añadida quedará seleccionada, con lo que, si el usuario prosiguela escritura, la parte seleccionada será sustituida por los nuevos caracteresque el usuario escriba.

04 Desarrollo básicode una aplicación

PROPIEDADES DE EDICIÓN

Page 121: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

120 121 VELAZQUEZ VISUAL

Botón menú: sólo válido para columnas de edición de campos enlazadosa maestro. Si esta propiedad está activada, en tiempo de ejecución al edi-tar una celda se verá un botón que, al ser pulsado, desplegará un menúque permitirá disparar un localizador de maestro, presentar un formulariode altas de maestro o editar la ficha de maestro. El localizador y los for-mularios de alta y de edición serán asociados en esta misma pestaña deEdición.

Al perder el foco: para asociar un proceso de pérdida de foco en rejillas deedición directa y así poder realizar validaciones. Si en el proceso utilizamosla función de procesos Retorno NO, se cancelará el avance del control y elfoco permanecerá en la celda que había lanzado el proceso.

Maestro: si en el cuerpo de la columna que hemos definido como editablese selecciona un campo enlazado a una tabla de datos maestra, aquí ten-dremos que especificar cuál es el maestro a editar. Esta opción sólo estaráactiva si se trata de un campo enlazado a maestro.

Rejilla localizar: esta opción sólo estará activada si se trata de una columnaque contenga un campo enlazado a maestro. Nos permite lanzar un locali-zador en tiempo de ejecución para poder localizar el registro maestro.

Formulario alta: esta opción sólo estará disponible si se trata de una co-lumna editable de un campo enlazado a maestro. Permite disparar, en tiem-po de ejecución, el formulario especificado en el parámetro para dar de al-ta un nuevo registro maestro.

Formulario mod: opción sólo disponible si se trata de una columna editablede un campo enlazado a maestro. Permite disparar, en tiempo de ejecución,el formulario especificado en el parámetro para editar la ficha del registromaestro enlazado.

Campo que recibe el dato: esta opción sólo estará disponible cuando elcampo a editar sea de tipo fórmula. Si la modificación del contenido de uncampo fórmula implica la modificación de un campo que intervenga en ella,habrá que especificar cuál es este campo que se ha de recalcular. Por ejem-plo, si tenemos un campo fórmula que calcula el PVP más el IVA, el campoPVP tendría que ser el campo a incluir en este parámetro.

Fórmula inversa: en el caso de que se haya especificado un campo en el pa-rámetro anterior, aquí especificaremos la fórmula que se ha de ejecutar pa-ra modificar dicho campo.

Page 122: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Propiedades de pie:

Contenido: lista desplegable con las opciones siguientes:

Sin contenido: pie sin contenido.

Texto: texto para el pie. Introduciremos la cadena de formato en el controlde edición situado bajo la lista desplegable.

Suma acumulada de toda la columna: presenta la suma de toda la columna.

Fórmula absoluta: expresión de tipo fórmula que se introduce en el controlde edición situado bajo la lista desplegable. Esta fórmula se calcula des-pués de haber sumado los totales de los pies de las demás columnas. Pa-ra operar con el valor del pie de otra columna, usamos la variable local ‘X’en la fórmula, donde X es el número de columna que tenga un pie acumu-lado (este número lo podremos encontrar a través del asistente de ediciónde fórmulas, en el apartado de variables locales. Por ejemplo, ‘3’ hace re-ferencia al pie de la tercera columna de la rejilla). Si la columna ‘X’ fuesecambiada de posición, por ejemplo, la columna 3 pasa a ser la 4, en los piesdonde se hiciese referencia a la misma los cambiaría el programa por sunueva posición: ‘4’. Para obtener el número de filas de la rejilla usamos lavariable local n (no lleva prefijo/sufijo) (Ej.: si deseamos multiplicar el valor

04 Desarrollo básicode una aplicación

PROPIEDADES DE PIE

Page 123: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

122 123 VELAZQUEZ VISUAL

del pie de la tercera columna por el número de filas de la rejilla, la expresióncorrecta sería: ‘3’ * n).

Fórmula acumulable: expresión de tipo fórmula. La fórmula especificada se-rá calculada por cada registro de la rejilla.

Suma acumulada de los marcados: presenta la suma de todos los registrosmarcados en una rejilla con multiselección.

Suma acumulada de los no marcados: presenta la suma de todos los regis-tros que no estén marcados en una rejilla con multiselección.

Color Valores Positivos: color para el pie de la columna cuando tiene un va-lor numérico positivo.

Color Valores Negativos: color para el pie de la columna cuando tiene un va-lor numérico negativo.

Columna de multiselección: en esta sección tendremos que especificarqué dibujos queremos utilizar para su visualización en ejecución. Podre-mos optar entre los estándar de Velázquez (Botón o Check box) o uno per-sonalizado, en este último caso hemos de hacer clic sobre la opción Dibu-jo y seleccionar dos dibujos –que tendremos que haber incluido previa-mente en el proyecto– uno para el estado de selección y otro para el esta-do de no selección.

Page 124: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Dimensiones de una rejillaEl ancho total y el número de columnas de la rejilla se ven en el cuadro depropiedades de la rejilla (no se establecen, son controles de solo lectura).

04 Desarrollo básicode una aplicación

DIBUJOS PARA COLUMNA DE MULTISELECCIÓN

Cuestiones1. Abramos el editor de proyectos y creemos un proyecto nuevo. En

él volvemos a crear la tabla MONTAÑAS (maestro normal con clavenumérica), a la que añadimos los campos Altura, Localización, Pri-mer ascensionista y Nº de éxitos. Crear una rejilla asociada a la ta-bla en la que se presenten los campos Nombre y Altura, en la quese puedan modificar los registros en tiempo de ejecución.

2. En la cabecera del campo Nombre debe aparecer “Nombre nativo”,mientras que en la cabecera del campo Altura debe leerse “Altura(en metros)”. Además, es necesario que el fondo de las filas corres-pondientes a picos de más de 7.000 metros aparezcan en rojo.

3. Añadir el campo Nº de éxitos a la rejilla anterior. Queremos que enel pie de esta columna, aparezca la suma acumulada de ascensio-nes a las montañas de la tabla.

Page 125: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

124 125 VELAZQUEZ VISUAL

El ancho de una columna se ajusta, mediante el ratón, como indica la figu-ra Ancho columna. Si el número de columnas supera el ancho de la panta-lla, aparecerá una barra de desplazamiento para visualizar al completo la re-jilla. Asimismo, podemos redimensionar el ancho de una columna en fun-ción del tamaño del texto de la cabecera, para ello podemos o bien selec-cionar la opción del menú Columna/Ancho del Título, o pulsar el botón Ancho del Título y seleccionar la columna a redimensionar. También pode-mos redimensionar una columna en función del contenido, es decir, en fun-ción del tamaño del campo. Para ello seleccionamos la opción de menú Co-lumna / Ancho del contenido o pulsamos el botón ancho del contenidoy seleccionamos la columna a redimensionar.

El alto de la cabecera se ajusta, mediante el ratón, como indica la figura Al-to Cabecera. Otra forma de ajustar el alto de cabecera al tamaño de la fuen-te es realizar un doble clic sobre la línea de la propia cabecera.

El alto de una línea se ajusta, mediante el ratón, como indica la figura AltoLínea. Si el número de líneas supera el alto de la pantalla, aparecerá una ba-rra de desplazamiento para visualizar al completo la rejilla. Otra forma deajustar el alto de línea al tamaño de la fuente es hacer doble clic sobre lapropia línea.

Coloreado rápido de RejillasPulsando el botón Coloreado rápido, o a través de la opción Rejilla/Co-loreado Rápido se puede cambiar el color tanto de las cabeceras como delcuerpo y las líneas de una rejilla. Aparecerá una lista de combinaciones decolores en la que sólo tendremos que elegir un elemento para que todos loscolores de la rejilla sean cambiados. En la parte inferior de la misma venta-na se muestra un ejemplo de la combinación de colores seleccionada.

ANCHO COLUMNA

ALTO CABECERA

ALTO LÍNEA

Ancho del Título

Ancho del contenido

Coloreado rápido

Page 126: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

A través de la opción de menú Columna / Cambiar en todas del Editor, po-demos cambiar, o bien el color del texto de todas las cabeceras mediantela opción Color Texto Cabecera, o bien el color del texto de todas las líneascon la opción Color Texto Líneas.

Ejemplo: Creación de una rejilla

Estamos realizando una pequeña agenda de tareas para organizar nuestrostrabajos. Hasta ahora hemos creado una tabla, llamada TAREAS, que guar-dará todos los trabajos que llevemos a cabo.

04 Desarrollo básicode una aplicación

e

Page 127: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

126 127 VELAZQUEZ VISUAL

A continuación crearemos un objeto rejilla siguiendo los puntos:

• En el área Objetos (parte derecha del Editor de Proyectos) pulsamos elbotón Nueva carpeta situado en la barra de herramientas (o bien se-leccionando desde la barra de menús la opción Objetos/Nuevo/Carpeta/Hermana de la actual).

• Aparece la ventana Carpeta de objetos, en la que seleccionamos lacarpeta Rejillas. Como título escribimos Tareas y pulsamos el botónAceptar.

• Velázquez Visual crea la carpeta Tareas en el área Objetos. Dentro de ellaincluiremos las rejillas que vayamos creando.

• Con la carpeta Tareas y la tabla TAREAS (en el panel izquierdo) selec-cionadas, pulsamos el botón Nuevo objeto de la barra de herramien-tas (o bien a través de la barra de menús, seleccionamos la opción Ob-jetos/Nuevo/Objeto).

• Dentro de la ventana Galería de objetos, seleccionamos el objeto Rejillavisor de tablas.

• Al seleccionar el objeto y pulsar el botón Nuevo objeto del tipo se-leccionado Velázquez Visual muestra la ventana Propiedades de la reji-lla: Tareas.

Nueva carpeta

Nuevo objeto

Nuevo objeto del tipo seleccio-nado

e

Page 128: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

• Si pulsamos directamente el botón Aceptar, Velázquez Visual crea el ob-jeto rejilla Tareas dentro de la carpeta Tareas.

• Al hacer doble clic sobre el objeto rejilla TAREAS aparece automática-mente la ventana Asistente de creación de rejilla.

• Al hacer doble clic sobre uno de los campos de la tabla (los que apa-recen en el área Campos seleccionables) éste irá pasando al área dela derecha (Campos seleccionados). Como en este caso queremosque en la rejilla aparezcan todos los campos de la tabla, pulsamos di-rectamente el botón Crear con todos los campos. Velázquez Visualnos mostrará directamente la rejilla creada en modo edición, para querealicemos las modificaciones que consideremos oportunas.

• Pulsando el botón Vuelve a función modificar y a continuación el bo-tón Ancho del título (ambos situados en la barra de herramientas deedición) conseguimos que pueda visualizarse el texto completo de la co-lumna Código y el de la columna Realizada haciendo clic sobre el áreacorrespondiente a la cabecera de cada columna.

• Ahora pulsamos el botón Coloreado rápido y seleccionamos dentrode la ventana Paletas para rejillas la paleta Azul pastel.

04 Desarrollo básicode una aplicación

Vuelve a función modificar

Ancho del título

Coloreado rápido

e

Page 129: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

128 129 VELAZQUEZ VISUAL

• Al pulsar el botón Aceptar, la rejilla tendrá el siguiente aspecto

• A continuación vamos a introducir un pie en la rejilla que va a mostrar elnúmero total de tareas y a continuación el texto “Tareas”. Para ello pul-samos el botón Propiedades del objeto de la barra de herramientas deedición para volver a mostrar la ventana Propiedades de la rejilla. En di-

e

Page 130: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

cha ventana marcamos, para crear el pie, el check Activo y como alturaindicamos16.

• Al hacer clic sobre la cabecera de la columna del campo Código, abrir laventana Propiedades de columna de rejilla y seleccionar la pestaña Pie,Velázquez Visual mostrará las propiedades del pie. En la propiedad Con-tenido seleccionamos el tipo Fórmula absoluta.

• Al pulsar el botón Asistente, aparece la ventana Asistente para ediciónde fórmulas.

• En dicha ventana, pulsamos el botón Variables de sistema (o pulsamosla tecla F8 del teclado) y seleccionamos en la ventana Lista de variables:SISTEMA la letra n (Número de elementos de la lista).

• Al pulsar el botón Aceptar del Asistente para edición de fórmulas aparecela letra n en las propiedades del pie de la ventana Propiedades de Colum-na de Rejilla. Obtendremos este mismo resultado seleccionando Fórmulaacumulable en la propiedad Contenido e indicando como fórmula: 1.

• Ahora hacemos doble clic sobre la cabecera del campo Descripción tarea,abrimos la ventana de Propiedades de la columna, seleccionamos la pes-

04 Desarrollo básicode una aplicación

e

Page 131: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

130 131 VELAZQUEZ VISUAL

taña Pie y elegimos esta vez como contenido el tipo Texto. A continuaciónsituamos el cursor sobre el área de color blanco y escribimos Tareas.

• Al pulsar el botón Aceptar la rejilla mostrará en el pie un 0 (correspon-diente a la letra n e indicando que ese pie devolverá un resultado numé-rico) y el texto Tareas.

Ejemplo: Vamos a crear otra rejilla

Supongamos una aplicación para un videoclub. En ella crearemos una reji-lla llamada MOSTRAR-VÍDEOS, en la que presentaremos el contenido delos campos, TÍTULO, IDIOMA, TIPO y UNIDADES referentes a cada pelícu-la. Para ello utilizaremos las carpetas de objetos, de modo que el proyectoquede bien estructurado.

e

e

Page 132: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Veremos la ventana de propiedades tecleando la combinación Alt + Intro opulsando el botón correspondiente de la barra de herramientas.

Una vez definidas las propiedades de la rejilla (incluidos los formularios queutilizaremos para modificar, dar de alta y dar de baja los registros), pasare-mos a crearla utilizando el asistente de creación de rejillas.

04 Desarrollo básicode una aplicación

e

Page 133: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

132 133 VELAZQUEZ VISUAL

En la región Campos seleccionables hacemos doble clic sobre los camposque vamos a incluir en la rejilla e irán apareciendo en la región Campos se-leccionados. Aquí también asociamos las fuentes a las distintas partes dela rejilla.

Pulsando el botón Crear según selección pasaremos a la pantalla de ediciónde rejillas.

Pinchando en la cabecera de cada columna accedemos a sus propiedadesde cabecera, cuerpo y pie. Para cada columna hemos de escribir el conte-nido de la cabecera en la región Título de la pestaña cabecera, mientras queel campo que va a llevar el cuerpo de la rejilla es el seleccionado en la re-gión Contenido de la pestaña Cuerpo.

e

Page 134: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Una de las propiedades más utilizadas en las rejillas es la de ancho de co-lumna variable (>>). Gracias a ella, el ancho de la columna se ajustará al ta-maño del contenido. En la última fila de las columnas de ancho variableaparecerá el símbolo >>.

Para dar rápidamente un tono de color a la rejilla usamos el botón colo-reado rápido, seleccionando el que queramos en la ventana Paletas para re-jillas que Velázquez presenta.

ResumenLa rejilla es un objeto que se utiliza en Velázquez Visual para ver un listadode registros de una tabla. Las filas hacen referencia a los registros de la ta-bla, mientras que cada columna de la fila guarda un campo. Las columnasestán compuestas por cabecera, cuerpo y pie.

En el cuerpo de cada columna se puede presentar el contenido de un cam-po o una cadena de formato. Los campos pueden ser de la tabla de datosen curso o de cualquiera de sus maestros o maestros de éstos, hacia arri-ba y en orden jerárquico.

Es posible definir la rejilla para que los registros visualizados en ella puedanser modificados directamente, sin tener que utilizar formularios; asimismo,también es posible la selección múltiple de registros (multiselección), de es-

04 Desarrollo básicode una aplicación

COLUMNAS DE ANCHO VARIABLE

Coloreado rápido

e

Page 135: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

134 135 VELAZQUEZ VISUAL

ta forma podremos, por ejemplo, ejecutar procesos sólo contra los registrosque estén seleccionados en la rejilla. También podremos dar de alta y debaja registros de la tabla.

El pie es opcional y en él se pueden presentar textos estáticos, sumas acu-muladas de las columnas numéricas o fórmulas.

Mediante las rejillas presentamos en pantalla el resultado de las búsquedas.También se utilizan las rejillas en los formularios para ver históricos de és-tos. Por ejemplo, podemos pegar en un formulario de Cliente una rejilla consus facturas.

Al crear el objeto rejilla visor de tablas aparece la ventana propiedades de larejilla, en la que definimos la tabla de datos asociada, el nombre de la reji-lla, sus estilos, los formularios asociados, etc.

Posteriormente aparece la ventana Asistente de creación de rejillas, dondedefinimos los campos de la tabla que van a incluirse, así como el aspectode la cabecera, cuerpo y pie.

Al editar la rejilla podemos cambiar las propiedades de la cabecera, el cuer-po y el pie. También contamos con una barra de herramientas para modifi-car sus dimensiones, asociar procesos, cambiar sus propiedades, llamar alasistente, etc.

4.4.3. Formulario de Edición Fichas

Los formularios son los objetos que se utilizan para introducir, modificar yver los datos de los diferentes registros de una tabla de datos. Un formula-rio va asociado a una tabla de datos del proyecto y podrá ser usado pararealizar altas, bajas y modificaciones.

FORMULARIO

Page 136: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Un Formulario de Modificación efectúa un bloqueo blando sobre el registroeditado para su compartición con otros usuarios. Este tipo de bloqueo per-mite que otros usuarios lean y modifiquen la ficha. Al cerrar el formulariopulsando el botón Aceptar y habiendo realizado cambios, Velázquez Visualverifica si otros usuarios han modificado el registro desde que se abrió elformulario.

En caso afirmativo, hace una comprobación en el ámbito de campos. Si noha habido colisión de campos (mismo campo modificado a la vez), se fun-den nuestros cambios con los realizados por otros usuarios. Si hay colisiónde campos, se asumen los cambios del usuario que haya aceptado prime-ro y se advierte al otro u otros usuarios que han modificado la misma fichaque va a perder sus modificaciones.

Los formularios pueden llamarse desde:

Rejillas: en el cuadro propiedades de la rejilla se pueden asociar los tres for-mularios para altas, bajas y modificaciones, de modo que desde la rejilla, yen tiempo de ejecución, se puede llamar a estos formularios mediante lassiguientes opciones:

Formulario Altas: pulsando la tecla + (teclado numérico), haciendo dobleclic con el ratón sobre una línea sin datos de la rejilla, pulsando la tecla In-sert o mediante el menú contextual.

Formulario Bajas: seleccionado el registro en la rejilla y pulsando la tecla Su-primir o con el menú contextual.

Formulario Modificaciones: pulsando la tecla Espacio una vez seleccionadoel registro en la rejilla, haciendo doble clic con el ratón sobre una línea de larejilla (si ésta no tiene asociado evento de doble clic) o mediante el menúcontextual.

Menús: las opciones de un menú pueden disparar objetos con distintas pis-tolas. Con la pistola Formulario Alta se disparan formularios para dar altasde nuevos registros. Con la pistola Búsqueda Formulario se disparan bús-quedas que presentan su resultado en una rejilla, si encuentran varios re-gistros, y en un formulario, si sólo encuentra uno.

Procesos: a través de las funciones Modificar ficha seleccionada con for-mulario, Pedir formulario y formulario de alta de maestro.

Creación del formularioPara crear un formulario seleccionamos Formulario de edición de fichasdentro de la Galería de objetos. Aparecerá el cuadro de diálogo Propieda-des formulario: FORMULARIO1.

04 Desarrollo básicode una aplicación

Page 137: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

136 137 VELAZQUEZ VISUAL

Las propiedades de la ventana son las siguientes:

Tabla de datos: es la tabla a la que está asociado el formulario.

Nombre: el que vamos a darle al formulario. Por defecto Velázquez le poneel nombre singular de la tabla.

Proceso a ejecutar al crearse un formulario: permite seleccionar un proce-so que se ejecutará antes de la creación y presentación en pantalla del for-mulario.

Proceso a ejecutar al iniciar o cambiar de ficha: permite seleccionar unproceso que se ejecutará cada vez que cambie la ficha presentada en elformulario. Por ejemplo: si hacemos doble clic sobre una rejilla, primeroes llamado el proceso anterior a la creación del formulario y luego el deinicio o cambio de ficha, que es anterior a la creación de una ficha. Siposteriormente se pulsa un botón para moverse a otra ficha, sólo se lan-za el proceso a ejecutar al iniciar o cambiar de ficha (el anterior a la crea-ción no, pues el formulario ya ha sido creado y en este caso sólo cambiala ficha).

Una vez hayamos rellenado los controles de edición del cuadro de diálogo,aceptamos y aparecerá el objeto formulario en la región de objetos del edi-tor. Si hacemos doble clic sobre el objeto formulario, podremos editarlo.

Propiedades del formularioSe obtienen dentro del Editor de Formularios al seleccionar la opción demenú Edición/Propiedades o en el cuadro de diálogo de propiedades decontroles, en las pestañas Formulario y Fuentes (también se muestra la ven-tana de propiedades al hacer doble clic sobre el fondo del formulario o so-bre un área vacía de los dos paneles del editor de formularios).

Page 138: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Las propiedades del formulario son:

Nombre: nombre que vamos a dar al formulario. Cuando el formulario se utili-za dentro de un control separador (pestaña), podemos introducir un aceleradordentro del nombre del formulario. Para ello colocamos el símbolo & delante deuna letra del nombre del formulario, la letra en cuestión se convierte en un ace-lerador, permitiendo que cuando el usuario pulse la tecla Alt simultáneamentecon la letra siguiente al símbolo & (en tiempo de ejecución la letra se ve su-brayada) el foco pase al formulario apuntado por el acelerador. De esta formael usuario evita tener que recurrir al ratón para cambiar de formulario. Debe-mos escoger las letras que utilizamos como aceleradores de tal forma que nose creen aceleradores con letras repetidas dentro de un mismo formulario.

Si el formulario está en cuadro de diálogo, en ejecución su título será elNombre que hayamos escrito. Si está a pantalla completa el título será elnombre singular de la tabla a la que está asociado. Lo anterior no es válidosi hemos introducido una fórmula como título opcional del formulario, mos-trándose entonces la expresión fórmula.

Siempre cuadro diálogo: permite seleccionar la forma de presentar el for-mulario: ocupando toda la pantalla o como cuadro de diálogo.

Especial para búsqueda: configura el formulario para usarlo en una bús-queda. Pulsar esta casilla de verificación produce el mismo resultado quehaber elegido el objeto Formulario para búsquedas de la Galería de Objetos.

Condición activo: al activar esta opción tenemos que especificar una condi-ción (fórmula), de modo que si no se cumple no se podrá modificar ningúncampo del formulario. Si queremos que un usuario con un nivel de privilegioinferior a 50 no pueda editar un formulario, activamos esta opción y en la fór-mula especificamos: v > 49. (v es la variable del sistema que devuelve el ni-vel de privilegio del usuario actual). Cuando no se cumple la condición acti-vo, todos los controles del formulario estarán inactivos, excepto los botonesque disparen las funciones: Cancelar, Moverse a hermano y Ayuda, ademásde las rejillas de histórico y de proceso.

04 Desarrollo básicode una aplicación

VENTANA PROPIEDADES DE: FORMULARIO

Page 139: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

138 139 VELAZQUEZ VISUAL

Tecla Intro: permite seleccionar la acción a realizar al pulsar la tecla Intro: elavance del cursor o el cierre del formulario aceptando los cambios hechos.

Ventana: título y posición: para establecer la posición en que se ha de mos-trar el formulario en la pantalla en tiempo de ejecución. Por defecto estaráactivada la opción Centrado, que abrirá el formulario centrado en la venta-na en que se esté ejecutando el programa. Si desactivamos esta opción po-demos especificar la posición con respecto al eje horizontal (x) y al eje ver-tical (y), de esta forma siempre será presentado a la distancia especificadadesde el borde de la ventana. También se pueden modificar las dimensio-nes del formulario utilizando las teclas de desplazamiento del cursor, mien-tras se mantiene pulsada la tecla de las Mayúsculas. Otra forma de dimen-sionarlos es con el ratón, haciendo clic en los manejadores y arrastrando.

Título opcional: podemos cambiar el título de la ventana de un formularioactivando la opción Título opcional ventana, y mediante el editor de fórmu-las podemos hacer que aparezca el contenido de uno o varios campos, devariables globales, etc.

Color de fondo: dentro del menú Edición se encuentra la opción Color defondo donde podemos seleccionar el que sea de nuestro gusto para el for-mulario actual.

Tapiz de fondo: permite seleccionar un gráfico para utilizarlo como fondodel formulario. La casilla de verificación Mosaico permite elegir entre pre-sentar el gráfico centrado o en forma de mosaico. Si el dibujo ha sido defi-nido con fondo transparente, el mosaico se creará con fondo transparentetambién.

Para seleccionar las fuentes a utilizar en el formulario hemos de trabajar conel cuadro de diálogo siguiente:

Page 140: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Las opciones del cuadro de diálogo son las que se muestran a continuación:

Añadir: pulsamos este botón para añadir una nueva fuente al formulario.

Sustituir: pulsamos este botón para sustituir alguna de las fuentes delformulario por otra diferente.

Eliminar: esta opción sirve para eliminar una fuente del formulario. Si di-cha fuente está siendo utilizada por algún control del formulario no podráser eliminada.

Eliminar sin uso: elimina todas las fuentes del formulario que no estánsiendo utilizadas en ningún control.

También contamos con los botones subir y bajar , para cambiar el or-den de las fuentes en el formulario.

Controles del formularioSe encuentran situados bajo la barra de herramientas y son los siguientes:

Modo de edición: este botón se usa para mover controles o para cam-biar su tamaño.

Caja de grupo: se trata de una caja con un título, utilizada para agruparcontroles dentro de ella.

En las propiedades de la caja de grupos hemos de escribir el texto a pre-sentar como título en la caja.

04 Desarrollo básicode una aplicación

Añadir

Sustituir

Eliminar

Eliminar sin uso

Subir y bajar

Modo de edición

Caja de grupo

Cuestiones1. Tenemos un proyecto que incluye una tabla llamada PAÍSES. Asociar un

formulario a dicha tabla, llamándolo países, de tal modo que aparezcaen cuadro de diálogo y en el que se use la fuente Arial 10 negrita.

Page 141: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

140 141 VELAZQUEZ VISUAL

Separador estático: este control presenta una línea en tres dimensionescon un texto incrustado. En sus propiedades seleccionamos el título a pre-sentar y el alineamiento del texto con respecto a la línea.

Anuncio: este control presenta un texto animado. En tiempo de ejecu-ción el texto irá desplazándose de izquierda a derecha en el control. Dispo-nemos del Asistente para la edición de fórmulas para la especificación de lafórmula de la cadena de texto a presentar.

Dibujo estático: control que sirve para insertar un dibujo en el formula-rio. En sus propiedades generales hemos de seleccionar uno de los dibujosincluidos en el proyecto. Hemos de pulsar F7 para redimensionar el controlal tamaño real del dibujo.

Texto estático: con él podremos incluir textos dentro de un formulario.Un texto estático puede tener un acelerador del tipo [ Alt ] + [Tecla], paraello, hay que incluir antes del carácter que se desee utilizar como acelera-dor el símbolo &. Por ejemplo: No&mbre. En tiempo de ejecución se desta-cará la tecla aceleradora con un subrayado (Nombre). Al pulsar el usuario latecla Alt + la tecla aceleradora (m), el foco se situará en el siguiente controlen el orden de tabulación al del texto estático.

Nombre campo: sirve para visualizar el nombre de un campo de la ta-bla. Si se modifica el nombre del campo de la tabla de datos asociada alformulario, este control cambia automáticamente el texto para visualizar elnuevo. En sus parámetros generales aparece Lista de campos, de modoque en la lista de campos que se muestra podemos seleccionar el nombredel campo a visualizar.

Campo: permite editar el contenido de un campo de la ficha en curso,de una variable global o manual, para crear una cadena de formato. Una vezsituado el control sobre el formulario, haremos clic con el botón izquierdodel ratón sobre él para indicar si vamos a editar un campo, una variable omanual. Si es un campo numérico, permite usar Separador de miles. Estecontrol no sirve para editar campos de tipo Objeto (objeto texto, objeto di-bujo, etc.). Sus propiedades son:

Campo: activamos esta opción si queremos editar un campo de la tablaasociada al formulario o enlazadas. A continuación seleccionamos de entrela lista de campos que se presenta el que queramos editar.

Variable: activamos esta opción si queremos editar una variable global. Acontinuación seleccionamos de entre la lista de variables globales que sepresente la que queramos editar.

Manual: se utiliza para la creación de cadenas de formato. Si pulsamos elbotón Asistente, podremos acceder al Asistente para la edición de cadenasde formato. Una vez activado aparecerá una pequeña pantalla de edicióncon el nombre del campo seleccionado entre dos símbolos %, o el de la va-riable entre dos símbolos $. Podremos crear una cadena de formato para,por ejemplo, formatear la forma de presentación del campo editado.

Separador estático

Anuncio

Dibujo estático

Texto estático

Nombre campo

Campo

Page 142: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Si el contenido es manual, el control será convertido en control de solo lec-tura, excepto si se trata de un control que aplique una máscara de entradaa un dato de tipo fecha.

Texto Tool Tip: permite especificar un texto que será mostrado en ejecucióncuando el usuario pase con el puntero del ratón sobre el control.

Si el campo seleccionado es de tipo fórmula dinámica, en tiempo de ejecu-ción se incrustará en el control un botón que dispara el asistente para la edi-ción de fórmulas, para facilitar al usuario su composición.

Microscroll (botones arriba y abajo): permite incluir en un formulario unosbotones arriba y abajo para modificar el contenido del campo asociado. Susparámetros generales son:

Lista de campos: de la lista seleccionamos el campo al que vamos a aso-ciar el control.

Texto Tool Tip: permite incluir un texto que se presentará en ejecución cuan-do el usuario pase con el puntero del ratón por encima del control.

Este control se puede asociar a los siguientes tipos de campo:

• Campos enlazados con tablas de datos maestras: permite recorrer la ta-bla de datos maestra hacia arriba y hacia abajo y visualizar el contenidode cada registro en el control de edición del campo del formulario al quese le hayan asociado los Microescrollers. El usuario final recorrerá la lis-ta maestra pulsando las teclas de movimiento del cursor arriba y abajo.

• Campos numéricos: permite incrementar o reducir el valor de un camponumérico en tanta cantidad como se haya especificado en el parámetroValor a Incrementar, en la pestaña Más estilos.

• Campos de tipo fecha.

Calendario: visualiza un calendario gráfico con los colores y el tipo deletra que establezcamos en sus propiedades. Éstas son:

Campo: seleccionamos esta opción si queremos editar un campo de tipo fechaque seleccionamos de la lista de campos fecha que se muestra. Si vamos amodificar un campo fecha, el calendario nos muestra la fecha contenida en elcampo. Si vamos a dar de alta un campo fecha, el calendario muestra el con-tenido inicial del campo (si lo tiene), en caso contrario muestra la fecha del día.Si el control calendario no tiene marcada la casilla de verificación Sólo lecturaen la pestaña de Estilos, cambiará el contenido del campo al modificar la fecha.

Variable: seleccionamos esta opción si queremos editar una variable globalde tipo fecha. En la lista de variables globales sólo aparecerán aquellas quesean de este tipo.

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase con el puntero del ratón sobre el control.

04 Desarrollo básicode una aplicación

La edición de variables entrelímites es muy útil parapoder almacenar los rangosde fecha de búsquedasentre límites, para poder serutilizados con posterioridaden procesos, informes, etc.

TRUCO

Microscroll

Calendario

Page 143: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

142 143 VELAZQUEZ VISUAL

Fecha/Hora: edita en un mismo control una fecha, una hora o ambas co-sas a la vez. Tanto para la fecha como para la hora podemos optar entre lossiguientes contenidos: Campo, variable o no usar (este último si no va sereditado el tipo de dato que corresponda). El formato de salida de la infor-mación dependerá de la máscara de entrada que se le aplique. Para ello ac-cedemos a la pestaña Estilos y activamos el check Máscara.

Por ejemplo, si editamos dos campos, uno de tipo fecha y otro de tipo ho-ra, y aplicamos la máscara: dd-MM-yy hh:mm, el dato se visualizará como01-01-01 12:35. Una vez el foco esté en el control de edición, con las teclasde movimiento del cursor izquierda / derecha podremos ir seleccionando eldía, el mes, el año, etc., y con las teclas de movimiento del cursor arriba /abajo, incrementar o decrementar su valor.

Botón con texto: botón en el que se visualiza un texto y que permitedisparar en tiempo de ejecución funciones ofrecidas por Velázquez Visual.Cuando dispara las funciones Aceptar y Cancelar grabación de ficha po-demos asociar un proceso que se ejecute antes de disparar la función yotro que se ejecute después. La diferencia entre estos procesos radica enque el primero se ejecutaría antes de escribir en disco y el segundo se eje-cutaría después. En eventos anteriores a la pulsación de un botón no se in-terpretan retornos (Funciones de procesos “Añadir retorno” e “Imprimir in-forme”). Estos eventos anteriores son ejecutados cada vez que desde elformulario se grabe la ficha (no al pulsar el botón físicamente). Los poste-riores sí son ejecutados después de pulsar el botón. Operaciones que oca-sionen que desde el formulario se grabe la ficha son: Pulsación de un bo-tón que ejecute un proceso y tenga activada la propiedad Refresca cam-bio en ficha, Obtener un formulario de una rejilla de histórico (implica que

MÁSCARAS FECHA / HORA

Fecha/Hora

Botón con texto

Page 144: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

se dé de alta el maestro) o grabación de un registro histórico en una rejillaeditable.

Sus propiedades generales son:

Texto contenido: texto que se visualizará en el botón.

Tool Tip: texto que se mostrará en tiempo de ejecución cuando el usuariopase sobre el control con el puntero del ratón.

Se puede asignar una tecla o una combinación de teclas a un botón. Paraello, en la pestaña Comando, seleccionamos la tecla deseada en la lista deteclas y, si se quiere, activamos la opción Shift pulsado o la opción Controlpulsado para establecer combinaciones de teclas aceleradoras. Los boto-nes con texto también admiten aceleradores del tipo Alt+Tecla, para ello es-cribimos antes de la letra que se va a utilizar como acelerador el símbolo &.Dicha letra aparecerá destacada con un carácter de subrayado.

La función a disparar por el botón se especifica en la pestaña Comando,presentando cada función sus parámetros específicos. Las funciones pre-vistas son las siguientes:

Cancelar: cancela el formulario y todos los cambios realizados. Si el for-mulario tiene una condición de activo y ésta no se cumple, el botón quedispare esta función estará activo para que el usuario pueda cerrar la fi-cha. Admite asociar procesos anterior y posterior a la ejecución de lafunción.

04 Desarrollo básicode una aplicación

FUNCIONES A DISPARAR POR UN BOTÓN CON TEXTO

Page 145: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

144 145 VELAZQUEZ VISUAL

Aceptar: acepta el formulario con los cambios realizados. Admite asociarprocesos anterior y posterior a la ejecución de la función. Si se asocia unproceso posterior a la pulsación del botón, éste sólo se ejecutará despuésde que el usuario haya aceptado el formulario, no cada vez que se dé de al-ta, edite o elimine un histórico.

Eliminar: borra del disco la ficha del formulario. Admite asociar procesos an-terior y posterior a la ejecución de la función. Si se asocia un proceso pos-terior a la pulsación del botón, éste sólo se ejecutará después de que elusuario haya aceptado el formulario.

Aceptar /Cancelar /Eliminar controlado: igual a los anteriores excepto queVelázquez Visual pide confirmación al usuario para realizar la tarea. Admitenasociar procesos anterior y posterior a la ejecución de la función. Si se aso-cia un proceso posterior a la pulsación del botón Aceptar controlado, éstesólo se ejecutará después de que el usuario haya aceptado el formulario, nocada vez que se dé de alta, edite o elimine un histórico. Si el formulario tie-ne una condición de activo y ésta no se cumple, el botón que dispare la fun-ción Cancelar controlado estará activo para que el usuario pueda cerrar laficha.

Subformulario ficha actual: visualiza el formulario seleccionado con infor-mación adicional del registro. El formulario debe estar asociado a la mismatabla de datos. Si activamos la opción Alinear formulario con el botón, po-dremos hacer que el formulario siempre se dispare o bien alineado a la iz-quierda, centrado o a la derecha del botón y encima o debajo del mismo.

Alta ficha maestro: da un alta en una tabla de datos maestra de la actual. Latabla maestra se elige a través de la lista desplegable Campos mientras queel formulario con el que dar el alta se elige en la lista desplegable Formula-rios. Por ejemplo, supongamos las tablas CLIENTES (maestro) y TAREAS(histórico). Al dar de alta una tarea, cuando llegamos al campo Cliente, siéste no existe podemos darlo de alta desde la tarea. Si activamos la opciónAlinear formulario con el botón, podremos hacer que el formulario siemprese dispare o bien alineado a la izquierda, centrado o a la derecha del botóny encima o debajo del mismo.

Edición ficha maestro: muestra el registro de la tabla maestra en el formu-lario seleccionado en la lista desplegable Formularios, pudiendo ser edita-do. Si activamos la opción Alinear formulario con el botón, podremos hacerque el formulario siempre se dispare o bien alineado a la izquierda, centra-do o a la derecha del botón y encima o debajo del mismo.

Localizar maestro: presenta el localizador seleccionado de la tabla maestra.En una lista desplegable veremos los índices por los que localizar un regis-tro. Si lo atrapamos, el registro será capturado en la ficha de origen, con loque el campo enlazado apuntará al registro seleccionado.

Atrapar contenidos campos: esta función de botones permite atrapar el va-lor de uno o varios campos, a uno o varios campos de la ficha editada. Porejemplo, en la tabla CLIENTES existen tres campos, uno para cada porcen-

Cuando utilicemos la funciónELIMINAR o ELIMINARCONTROLADO para borrarun registro que tieneregistros históricos, enejecución, el programaavisará de ello y no nosdejará borrarlo. Para ellotendremos que ir borrandouno a uno todos loshistóricos de dicho registromaestro.

ADVERTENCIA

Para eliminar un maestrocon históricos se podríacrear un proceso anterior auna baja de ficha quecargue todos los históricosdel maestro y los elimine. Endicho proceso convienemostrar un mensajeadvirtiendo al usuario queperderá toda la informaciónde otras tablas relacionadascon el registro de la tablamaestra que se pretendeeliminar.

TRUCO

En un subformulario llamadomediante esta función desdeun formulario de altas demaestro, nunca debemosincluir una rejilla de históricoen la que se permita dar altade fichas, ya que no esposible inducir en las altasde los registros históricos elmaestro, por lo que, en altassimultáneas en red, sepuede producir unaincorrecta asignación demaestros a dichas líneas.

ADVERTENCIA

Page 146: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

taje de descuento que se puede aplicar. En la tabla FACTURAS, el campoDescuento no tiene ningún contenido inicial, pero se incluyen tres botones,uno para atrapar el descuento 1º del cliente, otro para el descuento 2º y otropara el descuento 3º. Estos tres botones dispararán la función “Atraparcontenido campos”. Así, en los tres el campo de destino será el campoDESCUENTO de la tabla de Facturas, y el campo de origen será %CLIEN-TES.DESCUENTO1% para el primer botón, %CLIENTES.DESCUENTO2%para el segundo, y %CLIENTES.DESCUENTO3% para el tercero. Las pro-piedades de cada captura se introducen en el cuadro de lista Campos.

Ejecutar proceso ficha actual: ejecuta el proceso de ficha dado en la listadesplegable Procesos. Los datos de origen del proceso serán los de la fi-cha actual.

Localizar maestro por sus históricos: permite localizar un maestro por me-dio de los datos de sus históricos. El maestro será uno de los enlazados ala tabla de datos en curso, y su histórico será el seleccionado en la listadesplegable correspondiente. El botón Resolver se utiliza para establecer elíndice de búsqueda del histórico y la resolución de las partes de las que secompone. En tiempo de ejecución, al atrapar en el localizador un elementode la rejilla, el registro es capturado en la ficha de origen, con lo que el cam-po enlazado se hace apuntar al registro seleccionado.

Localizar submaestro: presenta en el localizador seleccionado los registrosde una tabla maestra (que a su vez sea submaestra), históricos de un cam-po padre seleccionado. Por ejemplo: si en un formulario de la tabla PO-BLACIONES, histórica de PROVINCIAS, que a su vez es submaestra dePAÍSES, seleccionamos un país, este comando presentará el localizadorcon las provincias del país seleccionado. Si lo atrapamos, el registro serácapturado en la ficha de origen, con lo que el campo enlazado apuntará alregistro seleccionado.

Localizar maestro arbolado: presenta el localizador de la tabla arbolada enforma de árbol. Si atrapamos un registro, éste será capturado en la ficha deorigen, con lo que el campo enlazado apuntará al registro seleccionado.

Ejecutar proceso Rejilla: Lista completa: ejecuta un proceso sobre todos losregistros de la rejilla cuando se pulsa el botón. El proceso a ejecutar es el se-leccionado en la lista desplegable Procesos. En la lista desplegable Contro-les rejilla histórico elegimos la rejilla que se tomará como origen del proceso.

Ejecutar proceso Rejilla: Contra los seleccionados: para rejillas con multise-lección. Ejecuta un proceso sobre todos los registros seleccionados de larejilla cuando se pulsa el botón. El proceso a ejecutar es el seleccionado enla lista desplegable Procesos. En la lista desplegable Controles rejilla histó-rico elegimos la rejilla de donde se tomarán los registros. Si queremos quetras la ejecución del proceso se desmarquen los registros activamos la op-ción Desmarcar multiselección tras proceso. Si deseamos que tras la eje-cución del proceso se quiten de la lista los registros seleccionados activa-mos la opción Quitar los seleccionados tras proceso. Ésta los quita de la lis-ta, pero no los borra del disco, a no ser, claro está, que en el proceso eje-

04 Desarrollo básicode una aplicación

Page 147: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

146 147 VELAZQUEZ VISUAL

cutado se realice un borrado de los mismos. Esta propiedad no es válidapara las rejillas de histórico, pues siempre visualizan todos los registros his-tóricos del maestro editado, y sólo podrán ser quitados de la lista si son bo-rrados físicamente del disco.

Ejecutar proceso Rejilla: Contra los no seleccionados: para rejillas con mul-tiselección. Ejecuta un proceso sobre todos los registros que no estén se-leccionados en la rejilla cuando se pulsa el botón. El proceso a ejecutar esel seleccionado en la lista desplegable Procesos. En la lista desplegableControles rejilla histórico elegimos la rejilla de donde se tomarán los regis-tros. Si deseamos que tras la ejecución del proceso se desmarquen los re-gistros, activamos la opción Desmarcar multiselección tras proceso. Si de-seamos que tras la ejecución del proceso se quiten de la lista los registrosseleccionados, activamos la opción Quitar los seleccionados tras proceso,ésta los quita de la lista, pero no los borra del disco, a no ser, claro está,que en el proceso ejecutado se realice un borrado de los mismos. Esta pro-piedad no es válida para las rejillas de histórico, pues siempre visualizan to-dos los registros históricos del maestro editado, y sólo podrán ser quitadosde la lista si son borrados físicamente del disco.

Nota: los controles de formularios son refrescados cuando se actúa direc-tamente sobre ellos, por ejemplo al escribir directamente en un control deedición o al dar de alta desde una rejilla de histórico. Si desde un botón eje-cutamos un proceso que modifica datos de la ficha o del histórico o histó-ricos editados en rejillas, para refrescarlos activamos al botón las propieda-des Refresca cambios en ficha (fuerza el refresco de la ficha) y / o Refrescacambios en históricos (fuerza el refresco en históricos). Lo que realmentehace la primera de estas propiedades es forzar la grabación de la ficha endisco y su posterior lectura.

Aceptar sin cerrar formulario: en altas acepta, guarda cambios y presenta elformulario vacío para dar alta nuevamente. Admite asociar procesos ante-rior y posterior a la ejecución de la función. Si se asocia un proceso poste-rior a la pulsación del botón, éste sólo se ejecutará después de que el usua-rio haya aceptado el formulario, no cada vez que se dé de alta, edite o eli-mine un registro.

Aceptar controlado sin cerrar formulario: igual que Aceptar sin cerrar for-mulario excepto que Velázquez Visual pide confirmación al usuario paraaceptar los datos. Admite asociar procesos anterior y posterior a la ejecu-ción de la función. Si se asocia un proceso posterior a la pulsación del bo-tón, éste sólo se ejecutará después de que el usuario haya aceptado el for-mulario.

Ayuda: permite personalizar las ayudas. Podremos presentar un índice decontenido, un tópico o un tópico en pop-up. Para ello tendremos que crearun archivo de ayuda con un programa adecuado para ello, en el que espe-cificaremos cuáles serán los tópicos creados previamente en un archivo deayuda .hlp y su numeración. Si el formulario tiene una condición de activo yésta no se cumple, el botón que dispare esta opción estará activo para queel usuario pueda consultar igualmente la ayuda.

Si en un formularioqueremos incluir un botónque guarde cambios peroque no cierre la ficha, leasignamos la funciónEjecutar proceso ficha actualy no seleccionamos procesoalguno, o seleccionamosuno que no haga nada.Activamos la propiedadRefresca cambios en ficha yya tenemos el efectodeseado.

TRUCO

Page 148: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Localizar en cesta de la compra: es como la función “Localizar Maestro”,pero en vez de presentar la rejilla con todos los registros del maestro, sólopresenta los registros que se hayan incluido en una cesta de la compra, entiempo de ejecución, definida para la tabla maestra enlazada. En primer lu-gar se especificará el campo enlazado y en segundo lugar cuál de las ces-tas de la compra definidas para la tabla se va a utilizar.

Moverse a hermano: esta función le permitirá crear botones en un formula-rio para visualizar en el mismo formulario un registro anterior o un registrosiguiente (hermanos contiguos) al actual. Su único parámetro es un campode tipo enlazado a hermano contiguo. Si el formulario tiene una condiciónde activo y ésta no se cumple, el botón que dispare esta opción estará ac-tivo para que el usuario pueda consultar la ficha anterior o siguiente.

Botón con dibujo: permite ejecutar procesos y funciones como en el ca-so del botón con texto. La función a disparar por el botón debe especifi-carse en la pestaña Comando. Este control utiliza los dibujos incorporadosal proyecto. Se creará un objeto dibujo por cada estado del botón (normal,pulsado, con el foco e inactivo). Si asignamos un solo dibujo perderá la apa-riencia de botón y parecerá un dibujo estático cualquiera. Sus parámetrosgenerales son:

Sincronizar edición de dibujos: puesto que se debe especificar un objeto di-bujo para cada estado del botón, para que nos resulte más cómoda su es-pecificación disponemos de la sincronización de los cuatro controles de edi-ción para cada estado, es decir, si el foco está sobre el control correspon-diente al primer estado (Normal), cada vez que seleccionemos el nombre delobjeto dibujo, en los tres controles siguientes se mostrarán automáticamen-te los tres objetos dibujos siguientes en orden alfabético del seleccionado.

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

Normal: dibujo del botón en estado normal.

Pulsado: dibujo del botón cuando está pulsado.

Con el foco: dibujo del botón cuando está con el foco.

Inactivo: dibujo del botón cuando está inactivo.

Acelerador: se puede asignar una tecla o una combinación de teclas a unbotón. Para ello seleccionamos la tecla deseada en la lista de teclas y, si sequiere, activamos la opción Shift pulsado o la opción Control pulsado paraestablecer combinaciones de teclas aceleradoras.

Botón menú: este control permite agrupar varios botones (tanto de tex-to como con dibujo) en uno solo. En tiempo de ejecución, al pulsar el botónse desplegará un menú, cada opción del mismo se corresponderá con ca-da uno de los botones agrupados en él. Condición indispensable para agru-par varios botones en un control de este tipo es que tanto éste como los

04 Desarrollo básicode una aplicación

Asignar el mismoidentificador a los cuatrodibujos, con númeroscorrelativos. Por ejemplo:para el botón de alta deficha de maestro hemoscreado los dibujos AFICHA1,AFICHA2, AFICHA3 yAFICHA4. Si sobre el controlcorrespondiente al estadoNormal seleccionamos eldibujo AFICHA1automáticamente seasignará el dibujo AFICHA2al estado Pulsado, AFICHA3al estado Con el foco yAFICHA4 al estado Inactivo.

TRUCO

Botón con dibujo

Botón menú

Page 149: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

148 149 VELAZQUEZ VISUAL

botones a incrustar en él han de estar seguidos en el orden de tabulaciónen el formulario.

Si el botón incrustado es de tipo texto, se tomará como título de la opcióndel menú desplegable el texto contenido del botón. Si es de tipo dibujo, setomará como título de la opción del menú desplegable el texto tooltip es-crito en sus propiedades.

Por ejemplo: en un formulario existen tres botones y deseamos agruparlosen uno solo. Para ello situamos en el formulario un control de tipo BotónMenú y establecemos el siguiente orden de tabulación para los botones:Botón Menú, Botón 1, Botón 2, Botón 3. Editamos las propiedades del Bo-tón 1 y en la pestaña Aspecto activamos la opción Menú desplegable. Re-petiremos esta operación con los botones 2 y 3.

Url: este control permite disparar la url que se especifique en uno de susparámetros. Sus parámetros generales son:

Texto: texto que presentará el control en el formulario (es una fórmula).

Dato fijo: la Url a disparar (es una fórmula).

En tiempo de ejecución, el control presentará el texto especificado en el pri-mer parámetro. Al hacer clic sobre él se abrirá, en el Explorador Web de Ve-lázquez, la url especificada en el segundo parámetro.

RadioButton (Botón de radio): estos botones se agrupan para pasar di-versos valores a un mismo campo dependiendo del Botón de Radio selec-cionado. Sus propiedades generales son:

Campo: seleccionamos esta opción para asociar un campo a un botón deradio.

Variable: seleccionamos esta opción para asociar una variable global a unbotón de radio.

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

Campo/Variable: en este combo seleccionaremos el campo o la variableglobal que deseamos asignar al control.

Texto: texto que se visualizará junto al control. Es una cadena de formato ypodremos utilizar tanto una constante como el contenido de un campo o deuna variable global. Estarán disponibles los aceleradores de teclado, si-tuando el símbolo & delante de la letra que deseemos utilizar como acele-rador. Los aceleradores son dinámicos, es decir, pueden utilizarse con va-riables globales, pudiendo aceptar expresiones tales como &$IVA1$.

Dato fijo: cada botón de radio se asocia al mismo campo de datos, el cualserá modificado con el contenido que especifiquemos en este cuadro de

Url

RadioButton

Page 150: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

edición. Se ha de especificar una cadena de formato y podremos utilizarconstantes, campos o variables. Basta con que uno de ellos tenga selec-cionada la propiedad Selección con Tab para que el cursor se posicione so-bre el seleccionado. Una vez seleccionado, podemos usar las flechas dedesplazamiento del cursor para moverse entre los botones de radio y se-leccionarlos.

Check Box (casilla de verificación): se usa para editar campos boolea-nos o variables del mismo tipo. Sus parámetros generales son:

Campo: seleccionamos esta opción para asociar un campo al control.

Variable: seleccionamos esta opción para asociar una variable global alcontrol.

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

Campo/Variable: en este combo seleccionaremos el campo o la variableglobal que deseemos asignar al control. En la lista de campos o variablesseleccionables sólo se mostrarán los que sean de tipo booleano.

Texto: texto que se visualizará junto al control. Es una cadena de formato ypodremos utilizar tanto una constante, como el contenido de un campo ode una variable global. Podemos utilizar aceleradores de teclado, situandoel símbolo & delante de la letra que va a actuar de acelerador.

Rama de Árbol: este control sirve para visualizar el contenido de una ta-bla arbolada maestra de la tabla de datos del formulario actual. Su atribuloes de solo lectura y muestra la rama completa de la ficha maestra selec-cionada.

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

Campo: identificador de un campo enlazado a una tabla maestra arbolada.Sólo aparecerán campos enlazados a tablas maestras arboladas en el combo.

Árbol: debemos seleccionar un objeto árbol asociado a la tabla de datos delcampo especificado en el parámetro anterior.

List Box: muestra una caja con flechas arriba y abajo que permiten vi-sualizar su contenido. Sus parámetros generales son:

Campo: seleccionaremos esta opción para asociar un campo al control. De-be ser un campo enlazado a una tabla de datos estática.

Variable: opción para asociar una variable global al control.

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

04 Desarrollo básicode una aplicación

Check Box

Rama de Árbol

List Box

Page 151: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

150 151 VELAZQUEZ VISUAL

Campo/Variable: en este combo seleccionamos el campo o la variable glo-bal que asignaremos al control.

Puede activarse la opción de que al hacer doble clic sobre alguno de los da-tos mostrados en ella acepte y cierre el formulario, para ello en la pestañaEstilos activamos la opción Doble clic acepta.

Si en la carpeta Aspecto activamos el flag Con imágenes se visualizará, jun-to a cada elemento de la tabla, el dibujo multi-iconos asociado a esa tablaestática.

Combo Box (Lista desplegable): permite ver los registros contenidos enel control a través de una lista desplegable. Sus parámetros generales son:

Campo: seleccionamos esta opción para asociar un campo al control. De-be ser un campo enlazado a una tabla de datos estática.

Variable: seleccionamos esta opción para asociar una variable global alcontrol.

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

Campo/Variable: en este combo seleccionamos el campo o la variable glo-bal que deseamos asignar al control.

Puede activarse la opción de que al hacer doble clic sobre alguno de los da-tos mostrados en ella acepte y cierre el formulario, para ello en la pestañaEstilos activamos la opción Doble clic acepta. En este tipo de controles, unsolo clic acepta y cierra el combo.

Si en la carpeta Aspecto activamos el flag Con imágenes, se visualizará jun-to a cada elemento de la tabla, el dibujo correspondiente que se haya defi-nido en la creación de la tabla estática.

Rejilla histórico: visualiza, en la rejilla seleccionada por el diseñador, unode los históricos de la tabla de datos asociada al formulario. Como en cual-quier otra rejilla, es posible realizar altas, bajas y modificaciones, pero al es-tar dentro de un formulario abierto, las operaciones realizadas en la tablahistórica afectan a la tabla maestra. Sus propiedades generales son:

Histórico encarpetado: activamos esta opción si en vez de visualizar una re-jilla del histórico de un maestro, queremos visualizar un objeto encarpetadode histórico que hayamos incluido en el proyecto.

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

Histórico / Carpetas: enlace a histórico de la tabla del formulario que se deseaincluir en el mismo. Si hemos activado la opción Histórico encarpetado ten-dremos que seleccionar el objeto encarpetado de histórico que deseemos.

Combo Box

Rejilla histórico

Page 152: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Rejilla: rejilla que queremos utilizar para visualizar los registros históricos.Sólo podremos elegir entre las rejillas asociadas a la tabla de datos históri-ca de la del formulario.

Si en un formulario de altas incluimos una rejilla de histórico, se fuerza el al-ta del formulario y se pasa a trabajar en modo de modificación cuando sa-camos un formulario de la rejilla (alta o modificación) en el caso de que larejilla sea no editable o al finalizar la edición de una línea cuando ésta eseditable. El hecho de haber provocado el alta tiene varias implicaciones:

Si el usuario decide borrar las líneas de la rejilla y cancelar el formulario, elregistro no desaparece, sino que permanece dado de alta aunque no tengaregistros históricos.

Si se han declarado procesos asociados a los eventos de altas y modifica-ciones de registros de la tabla, al dar el alta al primer registro del históricose dispararán los procesos asociados al alta. A partir de ese momento elformulario pasa a trabajar en modo de modificación, por lo que al aceptarel formulario se dispararán los procesos asociados a modificaciones.

Podemos asociar un proceso cuando un control de rejilla de histórico gane opierda el foco (esto puede hacerse con todos los controles editables). Basta-rá con marcar el flag correspondiente y seleccionar, de la lista de los proce-sos con origen de lista de la tabla actual, el proceso que deseemos ejecutar.

Si en la carpeta Más estilos activamos la casilla de verificación Invertir lista,en tiempo de ejecución, se visualizarán los registros de la misma en ordeninverso. Esto es muy útil, por ejemplo, para visualizar una lista de facturasde un cliente, pues en primer lugar tendremos la última que se haya dadode alta.

Rejilla subhistórico: este control permite incluir en un formulario una re-jilla de un histórico de un histórico de la tabla asociada al formulario. Porejemplo, en un proyecto con las tablas CLIENTES (maestro), FACTURAS(histórico de Clientes) y LÍNEAS DE FACTURAS (histórico de Facturas), po-demos incluir en un formulario de Clientes una rejilla con las líneas de fac-turas. Sus parámetros generales son:

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

Histórico: tabla histórica de la tabla asociada al formulario.

Histórico 2º: tabla de datos histórica de la seleccionada en el parámetro an-terior.

Rejilla: rejilla de la tabla de datos especificada en el parámetro anterior quedeseamos utilizar.

Si en la carpeta Más estilos activamos la casilla de verificación Invertir lista,en tiempo de ejecución se visualizarán los registros de la misma en orden

04 Desarrollo básicode una aplicación

Rejilla subhistórico

Page 153: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

152 153 VELAZQUEZ VISUAL

inverso. No existe sincronización entre las rejillas de subhistórico con las re-jillas de histórico.

Rejilla alimentada por proceso: este control permite incluir en un formu-lario una rejilla de cualquier tabla de datos del proyecto, sea o no históricade la tabla de datos asociada al formulario. Como su propio nombre indica,esta rejilla está alimentada por un proceso, es decir, habrá que crear un pro-ceso para realizar la búsqueda de los registros que se han de presentar enella. Sus parámetros generales son:

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

Procesos: para determinar los registros que se van a incluir en una rejillasiempre es necesario ejecutar un proceso que termine con una función Aña-dir retorno en una línea cuyo origen sea una LISTA de la tabla de datos dela rejilla. El proceso a ejecutar debe tener su origen en una FICHA de la ta-bla de datos del formulario.

Tablas: seleccione la tabla de datos a la que está asociado el retorno del proceso.

Rejillas: tendrá que seleccionar cualquiera de las rejillas asociadas a la ta-bla especificada en el parámetro anterior.

Casillero alimentado por proceso: este control permite incluir en un for-mulario un casillero de cualquier tabla de datos del proyecto. Sus paráme-tros generales son:

Proceso: para determinar los registros que se van a incluir en un casillerosiempre es necesario ejecutar un proceso que termine con una función Aña-dir retorno en una línea cuyo origen sea una LISTA de la tabla de datos delCASILLERO. El proceso a ejecutar debe tener su origen en una FICHA de latabla de datos del formulario.

Tabla: identificador de la tabla de datos del casillero.

Casillero: identificador del casillero.

Árbol alimentado por proceso: este control permite incluir en un formu-lario un árbol visor de una tabla arbolada del proyecto. Sus parámetros ge-nerales son:

Proceso: para determinar los registros que se van a incluir en el árbol siem-pre es necesario ejecutar un proceso que termine con una función Añadirretorno en una línea cuyo origen sea una LISTA de la tabla de datos arbola-da. El proceso a ejecutar debe tener su origen en una FICHA de la tabla dedatos asociada al formulario.

Tabla: identificador de la tabla de datos arbolada.

Árbol: identificador de un árbol visor de tabla arbolada.

Rejilla alimentada por proceso

Casillero alimentado por proceso

Árbol alimentado por proceso

Page 154: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Indicador de nivel: visualiza gráficamente, en una barra de nivel, el valornumérico de un campo o de una variable en tantos por ciento. El campo ovariable que vayamos a editar en este control debe tener especificados susrangos máximo y mínimo en sus propiedades (en las del campo o la varia-ble). Sus propiedades generales son:

Campo: seleccionamos esta opción para asociar un campo al control.

Variable: opción para asociar una variable global al control.

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

Campo/Variable: en este combo seleccionamos el campo o la variable glo-bal que deseamos asignar al control.

Deslizador: permite alterar el valor numérico de un campo o de una va-riable global mediante el botón de control del deslizador. Sus propiedadesgenerales son:

Campo: seleccionamos esta opción para asociar un campo al control.

Variable: opción para asociar una variable global al control.

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

Campo/Variable: en este combo seleccionamos el campo o la variable glo-bal que deseamos asignar al control.

Separador de subformularios: permite visualizar varios formularios en elmismo área. A través de la barra de botones del cuadro de propiedades po-dremos hacer lo siguiente (por orden de izquierda a derecha):

Nuevo: al pulsar el botón se abrirá una ventana con todos los formularios dis-ponibles (los que hayan sido seleccionados previamente ya no aparecerán).

Eliminar: permite quitar de la lista de subformularios el seleccionado.

Arriba: permite desplazar una posición hacia arriba el subformulario selec-cionado en la lista de subformularios.

Abajo: permite desplazar una posición hacia abajo el subformulario selec-cionado en la lista de subformularios.

En el formulario, los subformularios se mostrarán en el orden que hayamosestablecido en las propiedades del separador. El resto de sus propiedadesson:

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

04 Desarrollo básicode una aplicación

Indicador de nivel

Deslizador

Separador de subformularios

Page 155: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

154 155 VELAZQUEZ VISUAL

Multilíneas cabecera: permite repartir todos los formularios del separador envarias líneas. Dependiendo del número de formularios usará más o menos lí-neas. En caso de no usar esta opción y asignar un número de formularios queno entren en el área del separador, aparecerán los botones en el mo-mento de la ejecución, permitiendo desplazar las pestañas horizontalmente.

Hojas dinámicas: marcando esta casilla podemos seleccionar un procesoanterior a la creación del formulario que decidirá si una pestaña ha depresentarse o no.

Si queremos que un determinado subformulario incluido en un separador no seavisto si no se cumple una determinada condición, hemos de marcar la casilla ho-jas dinámicas y asociar al formulario un proceso a ejecutar al crearse el formula-rio en el que se evalúe la condición, si ésta no se cumple, la función a ejecutar pa-ra no abrir dicho formulario será Set retorno proceso=NO, esta función le dirá alseparador que la pestaña correspondiente al subformulario no debe presentarse.

Para establecer alguna condición de activo a una pestaña de un separadorhemos de hacerlo en las propiedades del subformulario que se vaya a in-cluir en la misma.

Aspecto cabecera:

Texto sólo: sólo se muestra el texto con el nombre del formulario.

Texto + Imágenes: muestra el texto con el nombre del formulario y el iconoque corresponda del dibujo multi-iconos seleccionado en la lista desplega-ble Multi-iconos.

Imágenes sólo: sólo se muestran los gráficos asociados en la lista desple-gable Imágenes.

Multi-iconos: si vamos a utilizar iconos en la cabecera de los separadores, se-leccionamos el objeto multi-icono que hayamos creado con ese propósito.

Si los nombres de los formularios incluidos en el control Separador contie-nen un Acelerador (&), se puede saltar a cualquier formulario, pulsando latecla Alt de forma simultánea a la letra subrayada por el acelerador. Estatécnica evita que el usuario tenga que recurrir al ratón para seleccionar elformulario. Para ello, en el Nombre del formulario situamos el símbolo & de-lante de la letra que deseemos utilizar como acelerador.

No se recomienda la utilización de separadores anidados, es decir, unosdentro de otros, debido a la pérdida de funcionalidad.

Gráfico: presenta la información de una hoja de cálculo. Sólo podremosvisualizar una hoja de cálculo de un histórico de la tabla asociada al formu-lario. Sus parámetros generales son:

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

Desplazar separadores

Gráfico

Page 156: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Histórico: tabla de datos histórica de la que se deseamos presentar el gráfico.

Hoja calc: objeto hoja de cálculo del histórico que se desea visualizar.

Gráfico: tipo de gráfico que vamos a utilizar para visualizar la información.Los tipos de gráficos que incorpora Velázquez son: Líneas, Barras vertica-les, Barras horizontales, Barras 3D verticales, Barras 3D horizontales, Gantvertical, Gant horizontal, Tartas, Rejilla de valores.

Objeto texto: edita el contenido de un campo de tipo objeto texto de laficha en curso. Puede incluirse en un subformulario y editar su contenido.Sus parámetros generales son:

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

Campo: aquí especificamos el campo a editar. Pulsamos el botón Cambiary aparecerá una lista con todos los campos de tipo objeto texto de la tabladel formulario y de sus tablas maestras. Seleccionamos el que deseemoseditar.

En ejecución, para añadir un salto de línea en un control de este tipo, usa-remos la combinación de teclas Ctrl.+Intro.

Objeto dibujo: edita el contenido de un campo de tipo objeto dibujo dela ficha en curso. Puede incluirse en un subformulario y editar su contenido.Sus parámetros generales son:

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

Campo: para especificar el campo a editar pulsamos el botón Cambiar,apareciendo una lista con todos los campos de tipo objeto dibujo de la ta-bla del formulario y de sus tablas maestras. Seleccionamos el que desee-mos editar.

Si se edita un campo Objeto dibujo de maestro no podremos modificar sucontenido. Para hacerlo tendríamos que editar la ficha del maestro. Estomismo es aplicable al resto de los controles de edición de campos objeto.

Modo ver: modo de visualización en el que se van a presentar las imágenesen tiempo de ejecución. Los modos de visualización son:

Encoger/Estirar Área Completa: cambiará el ancho y el alto de la imagen pa-ra adaptarla a la altura y anchura del control. Si no son proporcionales el al-to y el ancho de la imagen a la altura y la anchura del control, la imagen severá deformada.

Tamaño Original: la imagen se presentará en su tamaño original, empezan-do desde el borde superior izquierdo del control. Si ésta es mayor que el ta-maño del control se verá truncada.

04 Desarrollo básicode una aplicación

Objeto texto

Objeto dibujo

Page 157: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

156 157 VELAZQUEZ VISUAL

Tamaño Original Centrado: la imagen se visualizará con su tamaño original,pero centrada dentro del área que el control ocupe. Si dicha imagen es ma-yor que el tamaño del control se verá truncada.

Encoger/Estirar Proporcionado: la imagen se aumentará o reducirá paraadaptarse al tamaño del control, pero conservando siempre la proporciónalto / ancho. Si la imagen es muy pequeña y el control es muy grande, és-ta se verá distorsionada al estirarse para adaptarse al tamaño de éste.

Mosaico: la imagen se presentará en su tamaño original pero a modo demosaico, ocupando toda el área del control.

Tamaño original/Encoger proporcionado: la imagen se mostrará en su ta-maño original o se reducirá de forma proporcionada para adaptarse al ta-maño del control, en el caso que éste sea menor que el tamaño de la ima-gen. Ésta es la opción más aconsejable.

Desde una aplicación final de Velázquez el usuario podrá obtener una ima-gen vía twain (escáner) para pegar en un control de este tipo. Para ello elformulario no puede estar definido en modo cuadro de diálogo, tiene queestar definido en modo vista (a pantalla completa).

Objeto texto Enriquecido: edita el contenido de un campo de tipo Obje-to texto Enriquecido de la ficha en curso. En ejecución permite cambiar ti-pos de letra, atributos, ajustes de línea de párrafo, etc. Sus parámetros ge-nerales son:

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

Campo: para especificar el campo a editar pulsamos el botón Cambiar yaparecerá una lista de todos los campos de tipo objeto texto enriquecidode la tabla del formulario y de sus tablas maestras. Seleccionamos el quedeseemos editar.

Objeto OLE: este control permite incrustar cualquier objeto OLE en un for-mulario. En tiempo de ejecución podemos insertarlo haciendo doble clic con elbotón izquierdo del ratón sobre el control, o bien pulsando el botón derecho yseleccionando la opción Editar objeto en el menú de contexto que aparece; sepresentará el cuadro de diálogo estándar Insertar objeto y en él el usuario se-leccionará el tipo de objeto que desee incrustar. Sus parámetros generales son:

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

Campo: para especificar el campo a editar pulsamos el botón Cambiar yaparecerá una lista de todos los campos de tipo objeto OLE de la tabla delformulario y de sus tablas maestras. Seleccionamos el que deseemos editar.

E-mail: para edición de campos de tipo Objeto E-mail. Permite editar unmensaje de correo electrónico. Sus propiedades generales son:

Objeto texto enriquecido

Objeto OLE

E-mail

Page 158: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Campo: identificador del campo tipo objeto e-mail que va a ser editado. Pa-ra seleccionar el campo o modificarlo pulsamos el botón Cambiar, y de lalista de campos e-mail que aparece seleccionamos el que corresponda. Laconfección de los correos electrónicos deberá hacerse a través de proce-sos, no pudiendo realizarse edición directa sobre este control. Por ejemplo,para la creación del cuerpo del mensaje podemos utilizar un control de tipoobjeto texto para luego pasar su contenido, desde un proceso, al cuerpodel campo de tipo e-mail.

Película: permite incluir un fichero AVI de audio y vídeo en un formula-rio. Es un control estático. Sus propiedades generales son:

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

Fórmula contenido: archivo AVI a visualizar. El nombre del fichero se intro-ducirá como una fórmula, para lo cual contamos con el asistente de fórmu-las. Como se trata de una fórmula, el nombre del fichero tendrá que ir entrecomillas.

Por ejemplo, si tenemos en el directorio de la aplicación un fichero llamadoPelicula.avi, para incluirlo en el formulario, en fórmula tendríamos que es-pecificar: d +“\\Pelicula.avi” (d es una variable en la que guardamos el pathdel directorio de la aplicación).

Si dicho fichero estuviese en otro directorio, tendríamos que escribir entrecomillas toda la senda para llegar a dicho documento.

Animación: es un control estático que permite incluir un fichero AVI conlas siguientes características:

• Sin sonido.

• Con una sola corriente de vídeo.

• Sin comprimir o con compresión RLE8.

• Debe contener al menos un frame.

Sus parámetros generales son:

Interna: en Velázquez ya se incluye un stock de animaciones que podremosutilizar en nuestras aplicaciones. Para seleccionar una de ellas tendremosque especificar Origen Interno. Las animaciones internas de Velázquez son:Copiar, Mover, Borrar y Buscar.

Externa: si deseamos incluir una animación propia, seleccionaremos estaopción.

Nombre fichero: nombre del fichero AVI que deseamos utilizar como ani-mación.

04 Desarrollo básicode una aplicación

Película

Animación

Page 159: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

158 159 VELAZQUEZ VISUAL

Texto Tool Tip: texto que se presentará en tiempo de ejecución cuando elusuario pase el puntero del ratón sobre el control.

Este tipo de animaciones admiten fondo transparente. Para ello basta conactivar el flag correspondiente del cuadro de propiedades y éstas tomaránel color de fondo definido para el formulario. Si estamos utilizando un dibu-jo de fondo en modo mosaico no se realizará la transparencia, la animaciónutilizará como color de fondo el que estaba definido para el formulario.

No necesitamos darle un tamaño a estos controles, el programa ya ajustael tamaño de los mismos según sea el tamaño de la animación, exceptocuando activamos el flag Centrado; en este caso tendremos que dar tama-ño al control para que Velázquez lo centre dentro del marco. Obviamente, sidefinimos un tamaño de marco muy pequeño y la animación tiene mayor ta-maño, ésta se verá truncada.

Html: permite incrustar una URL como control dentro de un formulario.En el Navegador de Velázquez Visual la barra de navegación web actúa so-bre el control cuando éste tiene el foco (atrás, adelante, actualizar...), perono la barra de direcciones URL (ésta sigue actuando como siempre, al es-cribir una URL presenta el resultado en una nueva ventana). Las propieda-des específicas de este control son:

Fórmula contenido: expresión fórmula de la URL que presentará el formulario.Puede ser una constante, una variable global, un campo, etc. Por ejemplo: sien una ficha de CLIENTES tenemos un campo para almacenar la página webdel cliente, podríamos incluir en el formulario un control de este tipo (comofórmula especificaríamos dicho campo) para visualizar su página web.

Teclas aceleradorasVeamos a continuación los aceleradores de teclado para los controles.

Aceleradores del tipo Alt+Tecla: se trata de una combinación de la tecla Alt+ una letra, mediante la cual se accede a un lugar determinado. En ejecu-ción, se sabe cuándo hay un acelerador de teclado si aparece un controlcon un texto descriptivo con una letra subrayada. Pulsando la tecla Alt + le-tra, el cursor se pone sobre el control. Los aceleradores de teclado puedenincluirse en los siguientes controles:

Botón con texto: en el cuadro de propiedades escribiremos, en la especifi-cación Texto, el símbolo & delante de la letra que deseemos utilizar comoacelerador.

Botón de radio: procederemos igual que para el botón con texto.

Check box (casilla de verificación): igual que para los dos anteriores.

Separador: para incluir un acelerador en un separador tendremos que es-cribir en el dato Nombre del cuadro propiedades de cada formulario que sevaya a incluir en él, el símbolo & delante de la letra que se desee utilizar co-mo acelerador. Por ejemplo, si vamos a disparar un subformulario que con-

Html

Page 160: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

tiene un control de tipo Calendario a través de un botón de un formulario, ya éste le hemos escrito el texto &Calendario, en ejecución, el usuario al pul-sar Alt+C hará que se dispare dicho subformulario.

Botón menú.

Caja de grupo.

Separador estático.

Texto estático.

En los últimos tres controles el foco irá al siguiente control seleccionablecon tabulador en el orden TAB.

Tecla aceleradora: de uso exclusivo para botones con texto y dibujo. Per-miten asociar una tecla o una combinación de las teclas Shift o Ctrl + otratecla al control. La tecla aceleradora puede ser cualquiera, incluidas las te-clas de función.

Cuadro de propiedades de formulario y controlesPara editar las propiedades del formulario y los controles haremos un dobleclic sobre cualquier zona de la pantalla de edición de formularios. Este cua-dro es único para todos los controles, aunque las propiedades que semuestren en las pestañas variarán según el control que esté seleccionado.Podemos mantenerlo abierto permanentemente durante la creación del for-mulario.

La tecla Intro cambiará el foco del formulario al cuadro de propiedades y vi-ceversa, mientras que la tecla Esc cerrará el cuadro de propiedades.

Si el cuadro de propiedades ya está abierto, para editar las propiedades deun control determinado basta con seleccionarlo, o bien con el foco sobre elformulario y pulsando el tabulador hasta llevar el foco hasta él, o seleccio-nándolo con un clic del ratón.

Si el cuadro de propiedades está cerrado, para editar las propiedades de uncontrol determinado basta con seleccionarlo, o bien con el foco sobre el for-mulario, pulsando el tabulador hasta llevar el foco hasta él y pulsando la te-cla Intro, o seleccionándolo con doble clic del ratón.

Una vez cambiada o asignada una propiedad a un control, ésta ya se haceefectiva inmediatamente, por lo que si queremos cancelar la operación, pul-saremos el botón deshacer de la barra de botones del Editor de Proyectos(recordemos que la tecla Esc cierra el cuadro de propiedades).

Las propiedades del cuadro están agrupadas en pestañas, que son:

Formulario y fuentes: aspectos generales del formulario

General: contiene opciones que son específicas de cada control.

04 Desarrollo básicode una aplicación

Page 161: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

160 161 VELAZQUEZ VISUAL

Estilos: propiedades para definir la forma en que van a actuar los controles.No todas las propiedades son válidas para todos los controles; dependien-do del control seleccionado unas estarán activadas y otras no.

Las propiedades de la pestaña Estilos son:

Selec con Tab: permite que el control sea accesible usando la tecla Tab.

Sólo lectura: posibilita (desactivado) o impide (activado) la modificación delcontenido del campo.

Borde: activaremos esta opción si deseamos remarcar el control con unborde.

Condición activo: condición (expresión fórmula) para que el control sea fun-cional.

Condición visible: condición (expresión fórmula) para que el control sea vi-sible al usuario.

Pierde foco: proceso a ejecutar cuando el cursor salte a otro control, es de-cir, cuando pierda el foco.

Gana foco: proceso a ejecutar cuando el cursor se posicione sobre el control.

Doble clic acepta: para controles de tipo calendario, combo box y list box,de modo que al hacer doble clic sobre el control se acepte y cierre el for-mulario.

Autopulsado al ganar el foco: exclusiva para botones. Si a un botón se le ac-tiva esta propiedad, en tiempo de ejecución cuando gane el foco, se dispara-rá automáticamente la función que se haya seleccionado en sus propiedades.

Máscara: es posible definir una máscara de entrada en controles de edición(con la que podemos definir formatos de entrada). Activaremos esta pro-piedad en las propiedades de un control. Disponemos de un control de edi-

Page 162: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

ción para escribir la máscara, para su especificación podemos utilizar lossímbolos del siguiente cuadro.

# -> Admite un número del 0 al 9.

A -> Admite un número del 0 al 9 y letras (mayúsculas y minúsculas) de laa “a” la “z”.

& -> Admite cualquier carácter Ascii.

? -> Admite letras (mayúsculas y minúsculas) de la “a” a la “z”.

U -> Admite letras mayúsculas de la “A” a la “Z”.

L -> Admite letras minúsculas de la “a” a la “z”.

\ -> Carácter de escape.

Por ejemplo: definiendo la máscara: (# # #)-##-##, el dato que vamos a te-clear es: 985356460, mientras que el dato visible es: (985)-35-64-60.

Cuando se trate de un campo fecha, para una correcta interpretación de lamisma, es necesario indicar a Velázquez en qué formato se ha de interpre-tar, para ello además de la máscara de entrada, en las propiedades del con-trol de edición se ha de activar la propiedad Manual y escribir la cadena deformato que se corresponda con la máscara especificada.

Por ejemplo:

Máscara de entrada -> ##/##/##

Subcadena de formato -> %FECHA#&e/&n/&z%

e -> Día del mes (01-31)

n -> Número del mes (01-12)

z -> Año del mes (00-99)

Para la creación de la subcadena de formato podemos utilizar el asistentepara la creación de subcadenas de formato que se activa al seleccionar uncampo a través del asistente.

Capturar Intro: para controles de tipo botón y rejilla de histórico. Activadaesta propiedad hará que al situar el foco sobre un botón y pulsar Intro sedispare la función asociada a dicho botón, y sobre una rejilla de históricoforzará el disparo del formulario de modificaciones del registro selecciona-do en la rejilla.

Auto aceptar: si activamos esta propiedad a un control, en tiempo de eje-cución, cuando éste pierda el foco se aceptará directamente el formulario.

04 Desarrollo básicode una aplicación

Page 163: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

162 163 VELAZQUEZ VISUAL

Sólo se ejecutará cuando el usuario final haya pulsado el Tabulador o la te-cla Intro con el foco en dicho control; siempre y cuando Intro haya sido de-finido como Avanza Control en las propiedades del formulario.

Auto Tab: para hacer que en ejecución, al rellenar la totalidad de la longi-tud de un campo, el foco pase automáticamente al siguiente control en elorden de tabulación, debemos activar esta opción. Si la activamos apare-cerá debajo la opción Nº caracteres, en ella se ha de especificar el núme-ro de caracteres de longitud del campo para que se ejecute la auto-tabu-lación.

Por ejemplo, en un campo que tenga una longitud de 3 caracteres, se leasigna esta propiedad en el control del formulario y se establece 3 como elnúmero de caracteres. En tiempo de ejecución, cuando el usuario haya es-crito el tercer carácter, el cursor pasará automáticamente al siguiente con-trol. Si se asigna esta propiedad a un botón, en tiempo de ejecución, unavez pulsado el botón, pasará el foco al siguiente control en el orden de ta-bulación.

Borde 3D: si al control le hemos activado el Borde, podremos seleccionarcualquiera de los siguientes efectos de tres dimensiones: A nivel, Hundidoo Elevado.

Tamaño: esta propiedad nos da la posibilidad de que el tamaño de los con-troles se adapte al tamaño de la ventana y a la resolución del monitor entiempo de ejecución. Puede ser: Fijo (no cambiará su tamaño), Ancho va-riable (que en ejecución sólo varíe el ancho del control), Alto variable (sólose adaptará a lo alto de la ventana), Ambos variables (se adaptará el controltanto al alto como al ancho de la ventana). El cambio de tamaño funciona-rá hasta que se llegue al tamaño mínimo del formulario (el tamaño que seespecifica en las propiedades del mismo), es decir, que si se reduce la ven-tana a un tamaño menor que el del formulario, el contenido de éste se verátruncado.

Autocentrado horizontal: para el “auto-planchado”. Si el control tiene acti-vada esta propiedad hará que en tiempo de ejecución, si el formulario estáen modo vista, el control se muestre en la posición horizontal relativa a suposición en el formulario en edición. Por ejemplo: si situamos centrados enla parte inferior del formulario los botones Aceptar y Cancelar y les activa-mos esta propiedad, en tiempo de ejecución, si el formulario no está en mo-do cuadro de diálogo, éstos se mostrarán centrados dentro de la ventanaque contiene al formulario.

Autocentrado vertical: igual que la opción anterior, pero los controles conesta propiedad activa se mantendrán centrados verticalmente con respec-to al tamaño de la ventana que contenga el formulario.

Aspecto: en esta pestaña se encuentran las propiedades para definir la for-ma en que se van a mostrar los controles. No todas las propiedades son vá-lidas para todos los controles, dependiendo del control seleccionado unasestarán activadas y otras no.

Page 164: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Fuente: abriendo el combo box aparecerán todas las fuentes que hayamoscreado en el formulario. Seleccionamos la que deseemos utilizar para vi-sualizar el control.

Color de Texto: aquí seleccionamos el color que deseamos utilizar para pre-sentar el texto contenido en el control.

Color de fondo: seleccionamos el color a utilizar para presentar como colorde fondo del control. Para que se visualice el color de fondo especificado,el control ha de tener activada la propiedad Borde de la pestaña Estilos.

Color Fondo con foco: esta opción nos permite especificar un color de fon-do opcional para un control, que se activará cuando en tiempo de ejecucióndicho control gane el foco.

Alineamiento horizontal: en esta opción seleccionamos la forma en que de-seamos que se presente el contenido del control con respecto a los márge-nes izquierdo y derecho del mismo. Puede ser Izquierda (el contenido delcontrol aparecerá pegado al margen izquierdo del mismo), Centrado (el con-tenido del control aparecerá centrado entre los márgenes izquierdo y dere-cho del mismo) o Derecha (el contenido del control aparecerá pegado almargen derecho del mismo).

Alineamiento Vertical: esta opción permite seleccionar la forma en que de-seamos que se presente el contenido del control con respecto a los márge-nes superior e inferior del mismo. Hay dos tipos de alineamiento: arriba (elcontenido del control se presentará cerca del margen superior del mismo) yabajo (el contenido del control se presentará cerca del margen superior delmismo).

Multilínea: activaremos esta opción si queremos que el texto contenido enun control se muestre en varias líneas. Hemos de tener en cuenta que alcontrol hemos de darle el alto suficiente para que quepan el número de lí-neas que desee. Un control multilíneas deberá tener un alineamiento hori-zontal a la Izquierda y un alineamiento vertical Superior.

04 Desarrollo básicode una aplicación

Page 165: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

164 165 VELAZQUEZ VISUAL

En el caso de controles de tipo objeto texto u objeto enriquecido, si el con-trol no es lo suficientemente alto como para presentar su contenido, secrearán barras de scroll.

Separador de miles: para controles de edición de campos numéricos. Acti-varemos esta opción si deseamos mostrar el contenido de un campo nu-mérico con separador de miles.

Calculadora: para controles de edición de campos de tipo numérico. Entiempo de ejecución se visualizará un botón incrustado en el control deedición. Para lanzar la calculadora basta con hacer clic sobre dicho bo-tón o con el foco en el control de edición, pulsando la tecla F4. Al lanzarla calculadora se visualizará el contenido del campo numérico desde elque se lanza. El resultado de las operaciones realizadas con la calcula-dora se moverán al control de edición si se pulsa Intro. Podremos utilizar,o bien el ratón, o bien el teclado numérico para la realización de las ope-raciones.

Menú desplegable y Alinear botón derecha: estas opciones se utilizan pa-ra agrupar controles de edición, botones y para agrupar botones en un bo-tón menú. Volveremos más adelante sobre ello dentro de este mismo ca-pítulo.

Texto a la izquierda: para controles de tipo Check box y Botones de radio.Por defecto, en ambos controles, se presenta la casilla de verificación o elbotón de radio a la izquierda del texto descriptivo de los mismos. Si desea-mos que el texto aparezca a la izquierda del check box o del botón de ra-dio activaremos esta opción.

Con imágenes: para Combo Box y List Box. Si activamos esta opción, enejecución se visualizará junto a cada elemento de la tabla, el dibujo corres-pondiente que se haya definido en la creación de la tabla estática con la queesté enlazado el campo.

Pestaña Más estilos: en este cuadro de diálogo encontramos propiedadesvariadas, veámoslas:

Page 166: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Password: para controles de edición. Permitirá que cuando sea editado elcampo en tiempo de ejecución, se muestre el contenido del mismo con as-teriscos (*). Esta opción no estará activa si el control está declarado comoMultilíneas.

Refrescar cambios ficha: para todos aquellos botones que ejecuten algúnproceso que no implique el refresco directo del resto de los controles delformulario, tendremos que activar esta opción para que se lleve a cabo di-cho refresco. Esta opción lo que hace es grabar la ficha en disco, con lo quese fuerza su lectura de nuevo.

Refresca cambios históricos: esta opción estará inactiva si la anterior no hasido activada. Implicará el refresco de los controles de históricos que con-tenga el formulario tras la ejecución del proceso.

Valor a incrementar: esta opción sólo es visible cuando el control editado esun microescroll. En ella se especifica el valor en el que se desee incremen-tar el campo asociado al microescroll.

Inicio semana: para controles de tipo Calendario. Especificará el día de ini-cio de la semana: lunes o domingo.

Botones arriba y abajo: para campos numéricos, tipo fecha o campos enla-zados. Permiten que, en tiempo de ejecución, al pulsar las flechas arriba oabajo o las teclas del cursor arriba y abajo, se incremente o se reduzca enuna unidad el valor del campo. En campos enlazados a tablas de datosmaestras permiten, en tiempo de ejecución, que al pulsar las flechas arribao abajo o las teclas del cursor arriba o cursor abajo, se vaya recorriendo latabla maestra secuencialmente y presentando en el control, con cada pul-sación, el contenido del campo editado de la tabla maestra. Si el control es-tá definido como Multilíneas, el usuario tendrá que mantener pulsada la te-cla Alt mientras pulsa las teclas de cursor arriba y abajo para recorrer la ta-bla maestra.

Autocompletar: sólo válido para controles de edición de un campo Nombrede una tabla de datos maestra. Esto hará que, en tiempo de ejecución, si elusuario escribe una cadena en el control de edición, transcurridos unos mi-lisegundos el programa presentará automáticamente el primer registro de latabla maestra cuyo campo nombre comience por dicha cadena. La parteañadida quedará seleccionada, con lo que, si el usuario prosigue la escritu-ra, la parte seleccionada será sustituida por los nuevos caracteres que elusuario escriba.

Auto alta de maestro: solamente válido para controles de edición de uncampo Nombre de una tabla de datos maestra. Si se activa esta propiedad,en tiempo de ejecución si el usuario escribe una cadena en el control deedición y al perder el foco no se encuentra ningún registro en la tabla maes-tra con ese nombre, automáticamente presentará el formulario de altas delmaestro con ese nombre. Para que esta opción sea operativa es necesarioque el control de edición del campo nombre del maestro tenga incrustadoun botón que dispare la función Alta de ficha de maestro de esa tabla de

04 Desarrollo básicode una aplicación

En modificación, siqueremos guardar la fichaactual pero que éstapermanezca en pantalla,actuaremos del siguientemodo: si el formulario es apantalla completa añadimosun botón (por ejemplo, conel texto Guardar) quedispare la función Aceptarsin cerrar formulario. Si elformulario es en modocuadro de diálogo,añadiremos un botón con lafunción Ejecutar procesoficha actual, sin asociarproceso alguno oindicándole que dispare unproceso creadoanteriormente y que no haganada. También marcaremosla casilla Refrescar cambiosficha de la pestaña Estilos.Si estamos dando altas, unbotón con la función Aceptarsin cerrar formulario haráque éste permanezca enpantalla, pudiendo dar dealta la ficha siguiente.

TRUCO

Page 167: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

166 167 VELAZQUEZ VISUAL

datos maestra. Para incrustar un botón en un control de edición ambos de-ben estar seguidos en el orden de tabulador y tener activada la propiedadMenú desplegable (en la pestaña Aspecto).

La subindexación especial: utilizada cuando se desee realizar una búsque-da más selectiva de un registro maestro que a su vez sea submaestro deotra tabla.

Invertir lista: sólo para controles tipo rejilla de histórico, rejilla de subhistóri-co y rejilla alimentada por proceso. Activada esta opción, en tiempo de eje-cución se visualizarán los registros de las rejillas en orden inverso. Muy útil,por ejemplo, para visualizar una lista de facturas de un cliente, pues en pri-mer lugar tendrá la última que se ha dado de alta.

Ejemplo: subindexación especial

En un proyecto con la estructura de tablas PAÍSES -> PROVINCIAS -> PO-BLACIONES (Maestro -> Submaestro -> Submaestro, respectivamente), sedesea que al dar de alta una población, a la hora de buscar en la tabla dePROVINCIAS pulsando los microescrollers del campo NOMBRE de la pro-vincia, salgan sólo aquellas pertenecientes al país que se tenga editado. Pa-ra ello habrá que hacer lo siguiente:

En la tabla de PROVINCIAS creamos un nuevo índice compuesto por elcampo CODIGO de PAÍSES y por el campo NOMBRE de PROVINCIAS (es-te último podemos convertirlo a Alfa64 y reducir la longitud de la Parte a 12).Identificamos a este nuevo índice con el nombre, por ejemplo, de COM-PUESTO.

e

Page 168: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

En el formulario de edición de fichas de POBLACIONES, situamos los con-troles de edición correspondientes al CÓDIGO y al NOMBRE de los cam-pos PAÍS y PROVINCIA, todos con botones arriba y abajo.

Editamos el cuadro de las propiedades del campo NOMBRE de la provin-cia y seleccionamos el campo Provincia ->Nombre.

Activamos la casilla de verificación de Subindexación especial de enlace yhacemos clic sobre el botón Editar subindexación. Si deseamos no utilizarla subindexación especial de enlace podremos desactivar la casilla, paraque ésta quede anulada.

Se abrirá una ventana en la que se nos pedirá la resolución del puntero olocalizador. En el parámetro correspondiente al Índice seleccionamos COM-PUESTO. Veremos cómo inmediatamente, en la ventana que se encuentradebajo (Campos a resolver), el programa pide que resolvamos el campoPAÍS. En la ventana de la parte superior derecha se especificará que se re-suelva dicho campo desde el origen actual (que será Población). Seleccio-namos la descripción de la tabla PAÍS, pues al hacerlo el programa enten-derá que se trata del código del país. Tan solo queda aceptar y ejecutar elproyecto.

04 Desarrollo básicode una aplicación

e

Page 169: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

168 169 VELAZQUEZ VISUAL

En tiempo de ejecución cuando demos de alta una nueva población teniendoun país seleccionado, al pulsar los botones arriba y abajo del campo NOM-BRE de la provincia, recorreremos la tabla de provincias, pero indexada por elpaís que se ha editado; es decir, sólo aparecerán las provincias de ese país.

BrochaEsta opción permite establecer una serie de propiedades para asignárselasposteriormente a todos los controles que deseemos. Para activar la brochapulsamos el botón brocha de propiedades y en la pantalla aparecerá subarra de herramientas.

En la barra podremos establecer las siguientes propiedades:

Fuentes: podremos seleccionar una de las fuentes incluidas en el formula-rio. Si no queremos modificar las fuentes de los controles por los que vayaa pasar la brocha, hemos de seleccionar No cambiar fuentes.

Color: especificamos aquí el color del texto, del fondo y del fondo con fo-co. Si no queremos modificar los colores de los controles por los que vayaa pasar la brocha hemos de desactivar la casilla de verificación que se en-cuentra junto a los controles de selección de controles de la paleta.

Seleccionable con tabulador: activada esta casilla de verificación, a todoslos controles sobre los que pase la brocha se les asignará esta propiedad.

Sólo lectura: si activamos esta casilla de verificación, a todos los controlessobre los que pase la brocha se les asignará esta propiedad.

Borde: activada esta casilla de verificación, asignará esta propiedad a to-dos los controles sobre los que pase la brocha.

Condición activo: si activamos esta casilla de verificación, a todos los con-troles sobre los que pase la brocha se les asignará esta propiedad.

Brocha de propiedades

e

Page 170: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Condición visible: activando esta casilla de verificación, a todos los contro-les sobre los que pase la brocha se les asignará esta propiedad.

Borde 3D: si activamos esta casilla de verificación, a todos los controles so-bre los que pase la brocha se les asignará esta propiedad. Podrá seleccio-nar entre A nivel, Hundido, Elevado y No aplicar.

Tamaño: si activamos esta casilla de verificación, a todos los controlessobre los que pase la brocha se les asignará esta propiedad. El tamañopodrá ser: No aplicar, Fijo, Ancho variable, Alto variable o Ambos varia-bles.

Autocentrado horizontal: activando esta casilla de verificación, a todoslos controles sobre los que pase la brocha se les asignará esta propie-dad.

Autocentrado vertical: activando esta casilla de verificación, a todos loscontroles sobre los que pase la brocha se les asignará esta propiedad.

Una vez establecidas las propiedades, podremos ir asignándolas a los con-troles que deseemos llevando el puntero del ratón sobre cada control y ha-ciendo clic con el botón izquierdo. Para desactivar la brocha pulsamos subotón o hacemos clic con el botón izquierdo del ratón en alguna zona don-de no se encuentre ningún control.

Si deseamos asignar las propiedades de un control existente en el formula-rio a otros controles, activamos la brocha y pulsamos la techa Ctrl + el bo-tón izquierdo del ratón sobre el control que va a tomar como modelo. Paraaplicar estas propiedades a otros controles se procederá como se ha expli-cado en el párrafo anterior.

Agregar y eliminar controlesPara agregar un control en un formulario seleccionamos en la barra de con-troles el botón correspondiente al control que deseamos añadir y posterior-mente hacemos clic en la posición donde deseamos situarlo.

Dentro del menú Controles se encuentra la opción Campos automáticos.Esta opción permite hacer una selección de campos de la tabla para crearen el formulario y de forma automática los controles para editarlos, con ex-cepción de los campos de tipo Objeto. Además, ajusta cada tipo de controla cada tipo de campo de la tabla.

Para eliminar un control de un formulario basta con seleccionarlo y pulsar latecla Supr.

Seleccionar controlesLa selección de un control se realiza al pulsarlo en modo edición.

Para hacer una múltiple selección de controles hemos de retener la teclaShift y seguidamente pulsar sobre los controles a seleccionar. También conel ratón: pinchar, arrastrar y soltar.

04 Desarrollo básicode una aplicación

Page 171: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

170 171 VELAZQUEZ VISUAL

Si la selección es múltiple, el último control seleccionado tiene un maneja-dor (rectángulo de selección) diferente al resto. El manejador indica que esel control principal y es utilizado para maquetar otros controles en base aéste. Para cambiar la selección del control principal pulsamos la tecla Ctrl yrealizamos un clic sobre otro control.

Mover controles y cambiar su tamañoPara mover un control posicionamos el puntero del ratón sobre éste, pulsa-mos el botón izquierdo del ratón y, sin soltarlo, lo arrastramos hasta su po-sición final. También podremos moverlo, una vez seleccionado, utilizando lasteclas de movimiento del cursor. Si mientras se pulsan las teclas de movi-miento del cursor se pulsa la tecla Ctrl, el desplazamiento será más rápido.

Podremos mover varios controles al mismo tiempo, para ello, con la teclashift pulsada iremos seleccionando cada control que deseemos desplazar.Una vez seleccionados pulsaremos las teclas de movimiento del cursor pa-ra desplazarlos.

Para cambiar el tamaño de un control posicionamos el puntero del ratón so-bre éste y hacemos un simple clic (también podemos hacerlo pulsando Shift+ teclas del cursor). Aparecerá un manejador con el que redimensionar su ta-maño. Colocamos el puntero del ratón sobre uno de los ocho puntos de trac-ción, hacemos clic con el botón izquierdo, arrastramos y soltamos el botón.

Las opciones Deshacer y Rehacer están activadas en la pantalla de ediciónde formularios, a través de los botones de la barra de herramientas.

Maquetación de controlesPara maquetar los controles de un formulario hemos de tener selecciona-dos, dependiendo de los casos, uno, dos o más controles. Disponemos deuna barra de maquetación con los siguientes botones:

Los cuatro primeros botones alinean los controles seleccionadospor los bordes izquierdo, derecho, superior e inferior, respectivamente, delcontrol seleccionado en último lugar.

Los dos siguientes centran los controles horizontal y verticalmente,respectivamente, dentro del área del formulario.

Los dos siguientes espacian tres o más 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 botones dan a varios controles el mismo ancho, el mismoalto y el mismo ancho y alto, respectivamente, del control seleccionado enúltimo lugar.

Con este control alineamos los botones seleccionados en el área supe-rior derecha del formulario (Ctrl + B).

Deshacer / Rehacer

Alinea izquierda/ derecha / su-perior / inferior

Centrado vertical / ho-rizontal

Reparto horizontal /vertical

Adjuntar horizontal /vertical

Misma anchura/ altura / tamaño

Botones a la derecha

Page 172: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Este control alinea los botones seleccionados en el área central inferiordel formulario (Ctrl + Shift + B).

Además de estas formas de maquetación, existen dos opciones en menúMaquetar/Alinear, que son:

Centrado Horizontal: centra horizontalmente todos los controles seleccio-nados con respecto a la posición del último (Shift + F9).

Centrado Vertical: centra verticalmente todos los controles seleccionadoscon respecto a la posición del último (F9).

Por último, Tamaño del contenido (F7) nos redimensionará el control al ta-maño de lo que contiene.

La posición y las dimensiones de un control o del formulario se mostraránen la barra de estado.

Para que resulte más fácil la maquetación de controles disponemos de unarejilla de puntos. Para que aparezca ejecutamos la opción de menú Ver/Re-jilla de fondo. Los puntos que componen la rejilla se podrán tomar como re-ferencia para la maquetación de los controles.

El orden de los controlesVelázquez Visual asigna un número de orden a cada uno de los controlesque aparecen en un formulario. Este número determina el orden en que loscontroles reciben el foco o el cursor en tiempo de ejecución.

Dentro del menú Controles se encuentra la opción Cambiar orden Tab (ejeZ), cuya función es que el diseñador establezca el orden que mejor respon-da a sus intereses.

Al elegir esta opción el puntero se convierte en una mano. Para establecerel orden basta con ir haciendo clic sobre cada uno de los controles en elmismo orden en que deseemos que Velázquez Visual los ordene. Para ter-minar, podemos hacer clic sobre cualquier objeto que no sea un control.

Si por ejemplo insertamos en un formulario un control texto estático sin textocontenido, con borde y le ponemos el color negro para el fondo, de modo queéste haga las veces de fondo para otro control texto estático con color blan-co para el texto, en el orden de tabulación hemos de marcar primero el con-trol que hace las veces de fondo y después el otro, ya que de lo contrario elfondo estaría por encima y ocultaría al texto (de ahí decir eje Z o vertical).

También es posible cambiar el orden de tabulación de uno o varios contro-les a través del panel de controles del editor de formularios. Para ello, en elpanel de controles, seleccionamos uno o varios controles (si se trata de va-rios controles han de estar seguidos en dicho panel). Para desplazarlos enel orden de tabulación hacia adelante o hacia atrás utilizamos los botones

y de la barra de maquetación o con la combinación de teclas Alt +Cursor arriba / abajo.

04 Desarrollo básicode una aplicación

Botones al pie

Subir en tab

Bajar en tab

Page 173: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

172 173 VELAZQUEZ VISUAL

Panel de controlesAparece en la parte derecha del editor de formularios. En él se muestra unalista con todos los controles incluidos en el formulario y da informaciónacerca del Tipo de control del que se trata, posición horizontal y vertical, al-tura, anchura y contenido.

Los controles están ordenados en el panel en función del orden de tabula-ción que se haya especificado en el formulario, lo que nos será de muchaayuda a la hora de comprobar cuál es el orden de tabulación.

Si en esta lista seleccionamos uno o varios controles, éstos aparecerántambién seleccionados en el editor de formularios. Lo mismo ocurre si en elformulario seleccionamos uno o varios controles: éstos aparecerán selec-cionados en este panel.

Control de edición con menú desplegableEs posible agrupar varios botones con un control de edición. En tiempo deejecución, se presentará incrustado en el control de edición un único botón,que se disparará pulsando la tecla F4 con el foco en el control de edición,o haciendo clic con el ratón sobre el botón. Una vez pulsado se presentaráun menú de contexto con una serie de opciones que dispararán las funcio-nes asignadas a cada botón agrupado con el control de edición.

El título de cada opción del menú de contexto estará compuesto por elTooltip asignado en las propiedades de cada botón que se haya agrupadoy por su tecla aceleradora, si la tuviese.

En el editor de formularios, para que el agrupamiento sea posible, tanto elcontrol de edición como los botones a agrupar han de estar seguidos en elorden de tabulación. Una vez hecho esto, hay que proceder de la siguienteforma:

En la pestaña Estilos activamos la propiedad Menú desplegable en las pro-piedades tanto del control de edición como de los botones que se deseanagrupar en él.

Por defecto, el botón único aparecerá incrustado en la parte izquierda delcontrol de edición, si activamos la propiedad Alinear botón derecha apare-cerá incrustado a la derecha del mismo.

Page 174: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

En la siguiente figura se muestra cómo se visualiza en el editor de formula-rios un control de edición en el que se han agrupado botones.

Una vez agrupados los botones con el control de edición éstos ya no esta-rán visibles en el diseño del formulario. Para poder editar las propiedadesde alguno habrá que hacerlo a través del panel de controles que se en-cuentra a la derecha del editor de formularios. Los botones que estén agru-pados tendrán un icono diferente:

Como se puede observar en la figura anterior, tenemos tres botones con di-bujo, los dos primeros se encuentran agrupados en un control de edición yel tercero no.

Los aceleradores que se hayan asignado a cada botón permanecerán acti-vos igualmente. En tiempo de ejecución, estas teclas aceleradoras podránser disparadas solamente cuando el foco esté situado sobre el control deedición con el que se hayan agrupado los botones, por lo que es posible,en un mismo formulario, tener varios botones agrupados con diferentescontroles de edición con la misma tecla aceleradora asignada.

Si el botón tiene establecida una condición activo, ésta será evaluada igual-mente a la hora de desplegar el menú en tiempo de ejecución.

La siguiente figura muestra un control de edición con el menú desplegadoen tiempo de ejecución.

04 Desarrollo básicode una aplicación

Cuestiones1. Tenemos un proyecto que incluye una tabla llamada REGIONES y en

la que se encuentran los campos Nombre, Código, Extensión, Nú-mero de habitantes, País, Principal actividad económica y Descrip-ción. Asociar un formulario a la tabla con todos sus campos. Usarpara ello la opción de menú Controles / Campos automáticos.

2. Crear de nuevo un formulario asociado a la tabla REGIONES, peroesta vez sin usar la opción Controles / Campos automáticos. Paracada campo de la tabla hemos de incluir en el formulario su controlde edición y un texto que lo identifique (usar los botones Nombre

Page 175: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

174 175 VELAZQUEZ VISUAL

Ejemplo: Creación de un formulario

Estamos diseñando un programa en el que podamos almacenar los equiposde fútbol de la Liga española. Dentro de dicho programa vamos a crear, ade-más de la tabla, un formulario que mostrará el nombre del equipo, su año defundación, el nombre del estadio y la foto de su escudo.

Inicialmente creamos la tabla EQUIPOS que contiene los siguientes campos:

e

campo y edición). Queremos que, al pasar el puntero del ratón porencima de cada cuadro de edición, se visualice un texto con el nom-bre del campo correspondiente. Además el formulario debe apareceren modo cuadro de diálogo.

3. Añadir al formulario los botones Aceptar, Cancelar, de modo que ca-da uno de ellos dispare la función correspondiente. Dotar a cada bo-tón de un acelerador.

4. En el proyecto tenemos otras tablas, entre las que se encuentra la ta-bla CIUDADES (submaestra de REGIONES). Añadir un botón en elformulario que nos permita ver en una rejilla todas las ciudades de laregión que estemos editando.

5. Crear dos formularios asociados a la tabla REGIONES: uno que inclu-ya los campos Nombre, País y Descripción, y otro que contenga Ex-tensión, Número de habitantes y Principal actividad económica. Incluirel segundo formulario dentro del separador del primer formulario.

6. Crear de nuevo el formulario de REGIONES con todos los campos dela tabla, de modo que el orden de tabulación de los campos sea:Nombre, Extensión, País, Descripción, Principal actividad económi-ca, Número de habitantes.

Page 176: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

A continuación vamos a crear un objeto formulario. Para crear dicho objetoseguimos los siguientes pasos:

• En el área Objetos, situada en la parte derecha del Editor de Proyectos,pulsamos el botón Nueva carpeta situado en la barra de herramien-tas (o bien seleccionamos desde la barra de menús la opción Obje-tos/Nuevo/Carpeta /Hermana de la actual).

• Aparece la ventana Carpeta de objetos. En ella seleccionamos la carpe-ta Formularios y como título ponemos Equipos. Pulsamos el botónAceptar.

• Velázquez Visual crea en el área Objetos la carpeta Equipos. Dentro deella incluimos los formularios que vayamos creando.

• Con la carpeta Equipos seleccionada, pulsamos el botón Nuevo ob-jeto de la barra de herramientas, o bien a través de la barra de menús,seleccionando la opción Objetos/ Nuevo /Objeto).

• Dentro de la ventana Galería de objetos, seleccionamos el objeto For-mulario de edición de fichas.

• Al seleccionar el objeto y pulsar el botón Nuevo objeto del tipo se-leccionado, Velázquez Visual muestra la ventana Propiedades formula-rio: Equipos.

04 Desarrollo básicode una aplicación

IDENTIFICADOR DESCRIPCIÓN TIPO BYTES

Código Código Numérico 2

Nombre Equipo Alfa64 30

Año Año fundación Numérico

Estadio Estadio Alfa64 30

Foto Foto Objeto Dibujo

Nueva carpeta

Nuevo objeto

Nuevo objeto del tipo seleccio-nado

e

Page 177: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

176 177 VELAZQUEZ VISUAL

• Si pulsamos el botón Aceptar Velázquez Visual crea el formulario Equi-pos dentro de la carpeta Equipos.

• Al hacer doble clic sobre el objeto formulario Equipos aparece automá-ticamente la ventana de edición del formulario.

• Al seleccionar la opción de menú Controles/Campos automáticos... apa-rece la ventana Selección de campos que permite definir los campos dela tabla que figurarán en el formulario.

e

Page 178: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

• Pulsando el botón Todos, Velázquez Visual marcará las casillas de todoslos campos de la tabla. Al pulsar el botón Aceptar, en el formulario apa-recerán todos los campos seleccionados anteriormente (a excepción delcampo Escudo, que es de tipo Objeto Dibujo).

• Para añadir el campo Escudo primero aumentamos la altura del formu-lario, para lo que se hace clic en cualquier punto del formulario hasta queaparezcan tres cuadrados de color negro en su parte inferior.

04 Desarrollo básicode una aplicación

e

Page 179: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

178 179 VELAZQUEZ VISUAL

• Seleccionamos el cuadrado central (el marcado en rojo en la figura an-terior) y situamos el puntero del ratón sobre él, tomando éste la forma deuna doble flecha. Hacemos en ese momento clic con el botón izquierdodel ratón y mantenemos pulsado, moviéndonos hacia abajo se consigueaumentar la altura del formulario (sin el ratón lo conseguiríamos median-te la combinación Shift + “cursor abajo”).

• A continuación seleccionamos el botón Objeto dibujo que se en-cuentra en la barra de herramientas de edición para incluir el campo Es-cudo. Al hacer clic sobre el formulario una vez pulsado el botón men-cionado se dibujará el correspondiente control (que estará seleccionadoy mostrará una serie de pequeños cuadrados de color negro). Al selec-cionar el cuadrado de la esquina inferior derecha se puede aumentar eltamaño del mismo.

• Pulsando sobre el control recién creado con el botón derecho del ratónaparecerá la ventana Propiedades de: Objeto dibujo.

Objeto dibujo

e

Page 180: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

• Pulsando el botón Cambiar se muestra la ventana Seleccione campo:Objeto dibujo en la cual aparece ya seleccionado el campo Escudo.

• Pulsando el botón Aceptar el formulario estaría inicialmente creado.

Ejemplo: creación de un formulario de búsqueda

Continuando con el ejemplo anterior de los equipos de la Liga española, va-mos a crear a continuación la tabla JUGADORES, que incluirá los jugado-res de cada uno de los equipos.

• Los datos de la mencionada tabla, que se elige de tipo Histórico, son lossiguientes.

04 Desarrollo básicode una aplicación

e

e

Page 181: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

180 181 VELAZQUEZ VISUAL

• Una vez creada la tabla histórica aparecerá en el Esquema de tablas larepresentación de las dos tablas ya enlazadas.

• Haciendo doble clic sobre la tabla JUGADORES vamos creando en laventana Tabla: Jugadores los siguientes campos:

• La ventana Tabla: Jugadores tiene el siguiente aspecto:

IDENTIFICADOR DESCRIPCIÓN TIPO BYTES

Nombre Nombre Alfa128 35

Lugar Lugar nacimiento Alfa64 30

Fecha Fecha Fecha

Puesto Puesto Alfa64 30

Foto Foto Objeto Dibujo

e

Page 182: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

• Volviendo a la ventana de proyectos del editor, en el área Objetos te-nemos el formulario de EQUIPOS creado en el ejemplo anterior. A con-tinuación vamos a crear los objetos pertenecientes a la tabla JUGA-DORES. Comenzamos creando la carpeta Objetos4 a la que llamamosJugadores.

• Dentro de ella creamos, utilizando el botón Nueva subcarpeta dela barra de herramientas, la carpeta Rejillas a la que llamamos Juga-dores.

• Dentro de la subcarpeta Jugadores creamos una rejilla con las siguien-tes propiedades:

04 Desarrollo básicode una aplicación

Nueva subcarpeta

e

Page 183: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

182 183 VELAZQUEZ VISUAL

• La rejilla incluirá los campos Nombre, Lugar de nacimiento y Puesto.Tendrá como identificador JUGADORES. El aspecto que tendrá el áreade Objetos será el siguiente:

• Seguidamente vamos a crear el formulario de búsqueda. Dicho formulariova a utilizarse en una búsqueda de jugadores por equipo. Es decir, el for-mulario de búsqueda permitirá al usuario de la aplicación que introduzcaun equipo para que la búsqueda le devuelva los jugadores de ese equipo.

• Con la carpeta azul Jugadores seleccionada, pulsamos el botón Nue-va subcarpeta y creamos la carpeta Formularios llamada Jugadores.

• Dentro de esa carpeta crearemos el formulario de búsqueda. Para ellopulsamos el botón Nuevo objeto de la barra de herramientas (o biena través de la barra de menús, seleccionamos la opción Objetos/Nue-vo/Objeto) para seleccionar el objeto Formulario para búsquedas.

• Al seleccionar el objeto y pulsar el botón Nuevo objeto del tipo seleccio-nado Velázquez Visual muestra la ventana Propiedades formulario: Jugadores.

Nueva subcarpeta

Nuevo objeto

Nuevo objeto del tipo seleccio-nado

e

Page 184: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

• El identificador del formulario de búsqueda se renombra a JUGADO-RES-EQUIPO. El área Objetos tendrá ahora este aspecto:

• Al hacer doble clic sobre el objeto formulario JUGADORES-EQUIPOaparece automáticamente la ventana de edición del formulario. En él in-cluimos la etiqueta Equipos, para lo cual pulsamos el botón Nombrecampo y seleccionamos en la pestaña General de la ventana Propieda-des de: Texto estático de nombre de campo el campo Equipo. Incluimostambién el control de edición Equipos.Nombre, para ello pulsamos el bo-tón Edición y seleccionamos en la pestaña General de la ventanaPropiedades de: Edición el campo Equipo del enlace Equipo).

04 Desarrollo básicode una aplicación

Nombre campo

Edición

e

Page 185: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

184 185 VELAZQUEZ VISUAL

• Activamos el check Botones arriba/abajo de la pestaña Más estilos paraque el usuario pueda seleccionar el equipo.

• Reducimos el tamaño del formulario y su aspecto será:

e

Page 186: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Ejemplo: Creación de un formulario

Vamos a crear un Formulario de Edición de fichas para la tabla VIDEOS. Lollamaremos ALTA/MOD-VIDEOS (alta / modificación). Para ello pulsamos elbotón Nuevo Objeto, apareciendo la Galería de objetos, en la que seleccio-namos Formulario de edición de fichas. Aparecerá la ventana propiedadesdel formulario, en la que indicamos la tabla de datos asociada, así como elidentificador del formulario.

Aceptamos, y nos aparecerá el formulario en el área de objetos del editor.Lo seleccionamos, pulsamos la tecla F2 y le cambiamos el nombre por AL-TA/MOD-VIDEOS.

04 Desarrollo básicode una aplicación

e

e

Page 187: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

186 187 VELAZQUEZ VISUAL

Hacemos doble clic sobre el formulario para editarlo. Una vez en la panta-lla de edición, haciendo clic con el botón derecho o mediante la combina-ción de teclas Alt+Intro, aparecerá la ventana Propiedades de Formulario enla que determinamos la forma de presentación y las fuentes que vamos ausar.

En este punto hemos de incluir en el formulario los controles necesariospara poder editar las fichas. Dichos controles tienen que estar asociadosa los campos de los que están compuestos los registros. La opción demenú Controles/Campos automáticos de Velázquez Visual nos permiteelegir los campos que vamos a incluir en el formulario, de modo que elprograma crea automáticamente los controles de texto y los controles deedición necesarios. Seleccionaremos todos los campos exceptuando elcódigo.

El siguiente paso es fijar el orden de tabulación, para lo cual seleccionamosla opción de menú Controles/Cambiar orden tab (eje z). El puntero del ratóntomará la forma de una mano, e iremos haciendo clic en cada uno de loscontroles según el orden de tabulación deseado. Haciendo clic con el bo-tón derecho del ratón sobre cada control, aparecerá la ventana de propie-dades del control, en la que podemos cambiar sus propiedades.

e

Page 188: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Si tenemos algún campo que sea de tipo fecha, podemos asociarle un ca-lendario, para lo cual seleccionamos con el ratón el botón calendario dela barra de herramientas y lo llevamos a la zona del formulario donde que-remos que se encuentre. Con el botón derecho obtenemos la ventana Pro-piedades de: Calendario y en ella seleccionamos el radio botón Campo yelegimos el campo tipo fecha que queramos de la lista desplegable.

El formulario podría tener un aspecto final parecido al que se presenta en lasiguiente figura:

04 Desarrollo básicode una aplicación

Calendario

e

Page 189: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

188 189 VELAZQUEZ VISUAL

Si queremos que el formulario sea de baja, debemos añadirle un botón Eli-minar. Para ello pinchamos en el control botón con texto, llevándolo al sitiodel formulario donde deseamos que aparezca. Con el botón derecho del ra-tón aparece la ventana de propiedades del control. En la pestaña General ledecimos que el texto contenido es Eliminar, mientras que en la pestaña Co-mando elegimos la función a disparar Eliminar de entre las que aparecen enla lista desplegable. Obtendríamos algo parecido a lo que se presenta en lasiguiente figura:

Una vez que tengamos creados los formularios de altas, bajas y modifica-ciones, podemos asociarlos a la rejilla que usemos para ver las fichas de ví-deos.

e

Page 190: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

ResumenLos formularios son objetos asociados a una tabla de datos del proyectocon los que podemos realizar altas, bajas y modificaciones en las fichas dela tabla. Esto es así ya que contienen controles de edición con los que po-demos editar el contenido de los campos y variables de la tabla. Puedenllamarse desde rejillas, menús y procesos.

Podemos determinar las propiedades de los formularios (nombre, especialpara búsqueda, presentación en pantalla, condición de activo, etc.), así co-mo las fuentes que van a usar.

En un formulario disponemos de una gran variedad de controles que nospermiten disparar funciones, visualizar imágenes y textos, agrupar con-troles, visualizar rejillas de histórico y subhistórico, visualizar árboles, dis-parar rejillas alimentadas por procesos, lanzar otros formularios de la ta-bla, etc.

Las propiedades de cada control son editables. Hay propiedades exclusi-vas de cada control, otras referentes a la forma en que van a actuar, a suaspecto, al comando que van a lanzar, etc.

Disponemos de una barra de maquetación para ajustar la posición de loscontroles que incluimos en el formulario.

04 Desarrollo básicode una aplicación

e

Page 191: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

190 191 VELAZQUEZ VISUAL

4.4.4. Búsquedas

Crear BúsquedaLas búsquedas se emplean para realizar consultas en una tabla de datos.Normalmente se disparan desde los menús, y su resultado es una lista deregistros que debe ser presentada en una rejilla.

Para la creación de una búsqueda pulsamos el botón Nuevo objeto. Dela Galería de Objetos elegimos Búsqueda en la base de datos. Si hemos se-leccionado una tabla antes de pulsar el botón, la búsqueda se asociará au-tomáticamente a esta tabla.

Propiedades de la BúsquedaAl crear una búsqueda o al hacer doble clic sobre ella en el panel derechodel editor de proyectos, se presenta la ventana Propiedades de la búsque-da donde se definen las propiedades de la misma. Velázquez Visual generaun identificador por defecto, que podemos modificar. Éste aparece en la ba-rra de títulos del cuadro de diálogo y en el panel derecho del editor de pro-yectos.

Veamos las propiedades de las búsquedas:

Tabla de datos: tabla sobre la que se va a realizar la búsqueda.

Nombre: nombre que le damos a la búsqueda.

VENTANA DE PROPIEDADES DE LA BÚSQUEDA

Nuevo objeto

Page 192: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Rejilla/árbol para ver el resultado: identificador de la rejilla o árbol visor detablas (si la tabla es arbolada) en la que se presentará el resultado de labúsqueda.

Formulario inicial: especificamos aquí el formulario a usar para petición dedatos. Se lanzará antes de ejecutarse los componentes de la búsqueda(aunque hayamos especificado en componentes de la búsqueda que lanceel formulario por defecto), y en él podremos utilizar diversos campos a untiempo o variables para editar los parámetros de las búsquedas entre lími-tes y así poder reutilizar dichos valores en posteriores procedimientos de laaplicación.

Página Html: si la aplicación va a ser ejecutada en el Servidor de Aplicacio-nes de Velázquez Visual y se va a presentar el resultado de la búsqueda enuna página web, en este parámetro se indicará el objeto Página Html de Ve-lázquez en el que será presentado el resultado de la búsqueda.

Estilos privada: no aparecerá entre las búsquedas que se presentan al usua-rio final de una aplicación de Velázquez cuando ejecuta la opción de listasRebuscar.

Estilos invertir orden: mostrará el resultado de la búsqueda ordenado ensentido inverso.

Filtro secuencial: podemos definir aquí una fórmula condicional que deberácumplir cada registro para ser incluido en la lista final de registros.

Orden: en este cuadro podemos especificar el campo o campos por los queordenar el resultado de la búsqueda, sean éstos de la propia tabla o de ta-blas enlazadas (por ejemplo, podemos ordenar libros por el apellido del au-tor o su procedencia).

Comentarios: aquí podemos escribir comentarios acerca de la búsqueda.

Selección inicial: si activamos la casilla de verificación Utilizar, permitiremosque se seleccione una ficha determinada en la rejilla resultante de una bús-queda. Habrá que especificar el índice por el que se determinará dicha fi-cha inicial. A través del asistente para la edición de fórmulas podremos es-pecificar el contenido inicial para la realización de la selección. Para abrir elasistente hemos de pulsar el botón Editar. Es mejor que el índice usado sede clave única.

04 Desarrollo básicode una aplicación

Page 193: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

192 193 VELAZQUEZ VISUAL

Las propiedades de la caja barra de herramientas son:

Ninguna: no presentará ninguna barra de herramientas al presentar la rejillacon los registros encontrados.

Estándar: presentará la barra de herramientas de listas estándar de Veláz-quez, que incluye botones para dar alta, editar o borrar registros, presentarlos maestros de los registros de la rejilla, presentar los históricos de una fi-cha de la rejilla, presentar históricos de todas las fichas de la rejilla, lanzarun tubo de ficha, ejecutar procesos, cambiar la rejilla, recalcular totales y elcontador del total de fichas de la rejilla.

Personal: permite presentar una barra de herramientas que hayamos crea-do en el proyecto.

Componentes de la BúsquedaDefiniremos aquí uno o varios componentes para realizar la búsqueda, pu-diendo hacer una combinación de los resultados obtenidos con cada com-ponente de búsqueda. Pulsando el botón Añadir (o Modificar, si ya hay al-gún componente) de la pestaña índices del cuadro de diálogo Propiedadesde la búsqueda aparece la ventana Componente de Búsqueda, donde sedefinen.

VENTANA DE POSICIÓN INICIAL

Page 194: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Las propiedades de la ventana Componente de búsqueda son las siguientes:

Índice: seleccionamos aquí el índice por el cual queremos realizar la bús-queda. La lista desplegable muestra todos los índices declarados en latabla.

Condición activa: casilla de verificación que permite establecer una condi-ción, con lo cual el componente de búsqueda no se ejecutará si dicha con-dición no se cumple. Si activamos esta opción se abrirá el asistente para laedición de fórmulas, para que pueda especificar la fórmula condicional.

Modo de búsqueda: en esta lista desplegable podemos seleccionar la for-ma de realizar la búsqueda. Existen tres formas:

Todo el fichero: el resultado de la búsqueda serán todos los registros de latabla indexados por ese índice (exceptuando los excluidos debido al Filtrosecuencial, si está definido). En este caso, como es lógico, no es necesarioespecificar un formulario para pedir datos ni declarar los datos iniciales debúsqueda.

Parte izquierda clave: realiza la búsqueda de los registros cuya parte iz-quierda de la clave coincida con la introducida por el usuario en el Formu-lario para pedir datos (no es necesario usar un formulario para definir los pa-rámetros, éstos pueden ser variables a las que se asignen valores median-te procesos, etc.). Se pueden especificar tantos campos (partes) de la cla-ve como sean necesarios. Cada una de las partes se presenta de arribaabajo en la lista del componente de búsqueda. Hemos de ir resolviendo ca-da una de las partes por orden, hasta aquella que no queramos definir el va-lor. Por ejemplo, si tenemos un libro con una clave que llamamos NOMBREy que tiene como partes TÍTULO e ISBN, podemos buscar por parte iz-quierda de la clave, resolviendo únicamente el título, o además el I.S.B.N.Cuantas más partes resolvamos, más específica será la búsqueda.

04 Desarrollo básicode una aplicación

VENTANA DE PROPIEDADES DEL COMPONENTE DE BÚSQUEDA

Page 195: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

194 195 VELAZQUEZ VISUAL

Entre límites: realiza la búsqueda de los registros cuya clave esté compren-dida entre los límites, especificados en el Formulario para pedir datos o porotro procedimiento. En el caso de usar un formulario en el componente, enéste sólo se debe incluir el campo por el que se realizará la búsqueda unavez porque Velázquez Visual lo presentará dos veces: la primera para reco-ger el límite inicial y la segunda para el límite final.

Formulario para pedir datos: podemos especificar aquí el formulario a utili-zar para recoger los datos necesarios en las búsquedas del tipo parte iz-quierda de la clave y entre límites. Este formulario debe ser del tipo Formu-lario para búsquedas y no es necesario que contenga título ni botonesAceptar y Cancelar ya que Velázquez Visual se los añade en ejecución. Siespecificamos un formulario en las propiedades de la búsqueda, no haráfalta hacerlo aquí. Si hemos seleccionado un índice de Palabras o de Apro-ximación alfabética ternaria (trozos de palabras), podremos hacer que sepresente o no el formulario de petición de la(s) palabra(s) o de los trozos depalabras. Por ejemplo, no es necesario pedir dicho formulario si hemos es-pecificado ya uno en las propiedades de la búsqueda. Además, en el índi-ce por palabras podremos especificar si deseamos que realice la búsque-da en el modo que contenga todas las palabras o el modo que contenga al-guna de las palabras.

Componente de búsqueda: en este cuadro aparecen los campos que for-man parte del índice seleccionado.

Haciendo doble clic sobre cada uno de ellos, podemos especificar los con-tenidos iniciales que serán mostrados en los formularios de petición de da-tos. Para ello usaremos expresiones fórmula, por lo que se admiten cons-tantes, variables globales, campos, etc.

Mezcla: se especifica aquí la forma de combinar el componente de bús-queda seleccionado con el anterior en el caso de búsquedas con más deun componente. Hay tres formas de combinar:

Cruzar: el resultado estará compuesto por los registros que se repiten eneste componente y en el anterior.

Page 196: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Añadir: el resultado es una lista con los registros que pertenecen al primercomponente y al segundo. Si un registro pertenece a más de un compo-nente, sólo aparecerá una vez en la lista final.

Quitar: el resultado es una lista con los registros que pertenecen al primercomponente quitando los que también pertenecen al segundo.

Ejemplo: Creación de búsquedas

Tenemos una tabla llamada ESTUDIANTES con una serie de campos y unaserie de índices (dichos índices son creados automáticamente por Veláz-quez Visual). También tenemos una rejilla, Estudiantes, asociada a la tabla.

Queremos incorporar en el programa una serie de búsquedas con las quepodamos ver un listado de todos los estudiantes ordenados por código,otro listado en el que aparezcan ordenados alfabéticamente, otro listadoque muestre los registros que incluyan en su nombre la palabra o palabrasque el usuario escriba y, por último, otro listado en el que el usuario puedabuscar registros por trozos de palabras del nombre.

Como mencionábamos anteriormente, Velázquez Visual crea automática-mente cuatro índices. Veámoslos con detalle:

• El índice CODIGO utiliza el Tipo de índice Clave única e indexa por elcampo CODIGO de la tabla. Este índice se utilizará para realizar la bús-queda de estudiantes por código.

• El índice NOMBRE utiliza el Tipo de índice Acepta repetidas e indexa porel campo NOMBRE de la tabla. Nos permitirá realizar la búsqueda de es-tudiantes por orden alfabético.

04 Desarrollo básicode una aplicación

VENTANA DE ESTRUCTURAS DE DATOS DEL EDITOR DE PROYECTOS

e

Page 197: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

196 197 VELAZQUEZ VISUAL

• El índice PALABRAS utiliza el Tipo de índice Palabras e indexa igual-mente por el campo NOMBRE de la tabla. Se utilizará para realizar labúsqueda de estudiantes por palabras del nombre.

• Finalmente, el índice TROZOS utiliza el Tipo de índice Aproximación al-fabética ternaria (grupos de tres caracteres) e indexa por el campo NOM-BRE de la tabla. Permite realizar búsquedas por trozos de palabras delnombre (mínimo tres caracteres de cada palabra).

Hemos de realizar los siguientes pasos:

• En el área Objetos, situada en la parte derecha del Editor de Proyectos,pulsamos el botón Nueva carpeta , situado en la barra de herramien-tas (o bien seleccionando desde la barra de menús la opción Objetos /Nuevo /Carpeta /Hermana de la actual).

• Aparece la ventana Carpeta de objetos. En ella seleccionamos la carpe-ta Búsquedas y como título ponemos Estudiantes. Pulsamos el botónAceptar.

• Velázquez Visual crea en el área Objetos la carpeta Estudiantes. Dentrode ella incluiremos las distintas búsquedas que vayamos creando.

• Con la carpeta Búsquedas seleccionada, pulsamos el botón Nuevoobjeto de la barra de herramientas (o bien a través de la barra de menús,seleccionando la opción Objetos / Nuevo / Objeto, o con la tecla Insert).

• Dentro de la ventana Galería de objetos, seleccionamos el objeto Bús-queda en la base de datos.

• En la ventana propiedades de la búsqueda, rellenamos los siguientesdatos:

Nueva carpeta

Nuevo objeto

e

Page 198: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

• Para seleccionar el índice que va a utilizar la búsqueda, pulsamos el bo-tón Añadir que está dentro de la ventana de propiedades de la bús-queda. Al pulsar, Velázquez Visual muestra la ventana Componente debúsqueda, en la cual seleccionamos el índice CODIGO.

• Al pulsar el botón Aceptar, y luego pulsar el botón Aceptar de nuevo, sevisualizará en el área Objetos del Editor de Proyectos la búsqueda crea-da. Sustituimos el identificador creado por defecto por el identificadorESTUDIANTES-COD:

04 Desarrollo básicode una aplicación

Añadir

e

Page 199: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

198 199 VELAZQUEZ VISUAL

• Para el resto de búsquedas se realizan los mismos pasos que para lacreación de la búsqueda ESTUDIANTES-COD. Las propiedades de ca-da una de ellas se presenta a continuación:

e

Page 200: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Nota: se debe marcar el check Pedir formulario para que Velázquez Visualle muestre al usuario final un formulario en el cual pueda introducir la pala-bra o las palabras a buscar.

04 Desarrollo básicode una aplicación

e

Page 201: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

200 201 VELAZQUEZ VISUAL

Nota: se debe marcar el check Pedir formulario para que Velázquez Visualle muestre al usuario final un formulario en el cual pueda introducir el trozode palabra a buscar.

Con esto en el área Objetos del Editor de Proyectos aparecerán las bús-quedas que queríamos.

e

Page 202: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Ejemplo: Creación de una búsqueda compleja

Vamos a ver con un ejemplo cómo desarrollar una búsqueda compleja. Pa-ra ello supongamos una aplicación de una librería, en la que tenemos trestablas: LIBROS, EDITORES y AUTORES. Poniéndonos en el caso más sim-ple de que un libro sólo haya sido escrito por una persona y editado tam-bién por una sola persona, la tabla LIBROS es histórica de AUTORES y deEDITORES (maestros).

Centrémonos cuanto antes en lo que nos ocupa: la búsqueda compleja.Nos será de ayuda tener a la vista un formulario de búsqueda como el quenos hace falta.

Queremos crear una única búsqueda en la que el usuario final pueda elegirel tipo y modo de búsqueda que prefiera de las siguientes:

Buscar los libros que en su título contengan todas las palabras que escri-bamos en el control de edición Título. En este caso marcaríamos el radiobotón Palabras y el radio botón Todas las palabras (los botones Todas laspalabras y Alguna de las palabras sólo se activan cuando seleccionamos elbotón Palabras).

04 Desarrollo básicode una aplicación

FORMULARIO DE PETICIÓN DE DATOS QUE UTILIZARÁ EL USUARIO FINAL

e

Page 203: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

202 203 VELAZQUEZ VISUAL

Buscar los libros que en su título contengan alguna de las palabras que es-cribamos en el control de edición Título. En este caso marcaríamos el radiobotón Palabras y el radio botón Alguna de las palabras.

Buscar los libros que contengan los trozos de palabras que escribamos enel control de edición Título, para lo cual marcaríamos el radio botón Trozosde palabras.

Buscar libros que han sido escritos por un determinado autor.

Buscar libros de un mismo editor.

Que todas las búsquedas anteriores puedan cruzarse. Por ejemplo: encon-trar todos los libros escritos por Carl Sagan que en su título contengan lapalabra espacio o la palabra estrella, independientemente de quién sea eleditor.

Ya sabemos lo que queremos. Veamos ahora cómo se construye el formu-lario de búsqueda. Pinchamos sobre el botón Nuevo Objeto y seleccio-namos el objeto Formulario para búsquedas. Le damos al mismo las si-guientes propiedades:

Tabla de datos: LIBROS. Es la tabla a la que vamos a asociar el formulariode búsqueda.

Nombre: libro título, autor y editor. Es el nombre del formulario de bús-queda.

Una vez hecho esto, pasaremos a incluir los controles que formarán partede nuestro formulario de búsqueda y que serán los siguientes:

Control Nombre campo: título.

Control Edición: aquí asociamos el campo título al control de edición.

Nuevo objeto

e

Page 204: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

En nuestra aplicación hemos creado dos variables globales: PALABRAS-EXACTAS y PALABRAS-TODAS-ALGUNAS ambas de tipo booleano, esdecir, sólo pueden tomar el valor 1 o 0. Éstas van a estar asociadas a losbotones de radio del formulario, de modo que pinchando sobre el radio bo-tón Palabras asignamos a la variable PALABRAS-EXACTAS el valor 1, loque hace que se activen los botones Todas las palabras y Alguna de las pa-labras. Esto es gracias a una condición de activo que hemos de definir enla pestaña Estilos del cuadro de diálogo Propiedades de: Botón de radio($PALABRAS-EXACTAS$=1). Seleccionando el botón Todas las palabras, ledamos a la variable PALABRAS-TODAS-ALGUNA el valor 0, mientras quele damos el valor 1 si elegimos el botón Alguna de las palabras. Por otro la-do, si pinchamos en el botón Trozos de palabras, estamos asignando el va-lor 0 a la variable PALABRAS-EXACTAS.

Velázquez Visual comprobará el estado de las variables, de modo que de-pendiendo del valor que éstas tengan sabrá cuál es la búsqueda que debelanzar.

Ahora que ya sabemos todo esto, añadamos los botones de radio a nues-tro formulario de búsqueda:

Botón de radio Palabras : Alimentado por la variable PALABRAS-EXAC-TAS. Dato fijo: 1.

Botón de radio Trozos de palabras: alimentado por la variable PALABRAS-EXACTAS. Datos fijos: 0.

Botón de radio Todas las palabras: alimentado por la variable PALABRAS-TODAS-ALGUNAS. Dato fijo: 0.

04 Desarrollo básicode una aplicación

Botón de radio Palabras

e

Page 205: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

204 205 VELAZQUEZ VISUAL

Botón de radio Alguna de las palabras: alimentado por la variable PALA-BRAS-TODAS-ALGUNAS. Dato fijo: 1.

Control Nombre campo: autor.

Control Edición: hemos de asociarlo al campo Autor (con la opción botonesarriba y abajo activada, se encuentra en la pestaña Más estilos. También de-be tener activada la opción menú desplegable).

Botón dibujo (con la opción menú desplegable activada): función a dis-parar: localizador de autores.

Control Nombre campo: Editor.

Control Edición: lo asociamos al campo Editor (con las opciones botonesarriba y abajo y menú desplegable activadas).

Botón dibujo: función a disparar: localizador de editores (con la opción me-nú desplegable activada).

Para incrustar el botón que dispara el localizador de autores en el controlde edición del campo nombre del autor lo que hemos hecho ha sido situarambos controles seguidos en el orden de tabulación (primero el control deedición y luego el botón), y hemos activado en ambos controles la propie-dad Menú desplegable (dentro de la pestaña Aspecto). Hemos procedidode la misma forma con el control de edición del nombre del editor y el bo-tón que dispara el localizador correspondiente.

Veamos ahora cómo hemos construido la búsqueda y sus propiedades.

Seleccionamos el objeto Búsqueda en la base de datos de la Galería de ob-jetos y le damos las siguientes propiedades:

Tabla de datos: LIBROS. Es la tabla a la que está asociada la búsqueda.

Rejilla: LIBROS. Rejilla en la que vamos a presentar los libros que resultende la búsqueda.

Formulario inicial: LIBROS-TITULO-AUTOR-EDITOR (formulario que se pre-sentará en pantalla al elegir esta búsqueda, y en el que se introducirán losparámetros de la misma [es el que hemos explicado en el punto anterior]).

Botón dibujo

e

Page 206: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Pulsamos el botón Añadir del apartado Componentes de búsqueda eníndices, y especificamos los siguientes parámetros para realizar una bús-queda Por Palabras del título, y con el modo Todas las palabras:

Índice: PALABRAS

Condición activa: (fCampoVacío (%TITULO%) = 0) & ($PALABRAS-EXAC-TAS$ = 1) & ($PALABRAS-TODAS-ALGUNA$ = 0). Evalúa si el campo títu-lo no está vacío y que la opción marcada en el formulario es buscar el libro

04 Desarrollo básicode una aplicación

Añadir

e

Page 207: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

206 207 VELAZQUEZ VISUAL

por Palabras conteniendo Todas las palabras del título. Si en tiempo de eje-cución no se cumple esta condición, este componente de la búsqueda noserá ejecutado.

Radio botón Todas las palabras activado.

Pulsamos de nuevo el botón Añadir para introducir un nuevo índice, espe-cificando los siguientes parámetros para realizar una búsqueda Por pala-bras del título, y con el modo Alguna de las palabras:

Mezcla: cruzar (la lista final estará compuesta por los registros que apare-cen en las dos listas).

Índice: palabras

Condición activa: (fCampoVacío (%TITULO%) = 0) & ($PALABRAS-EXAC-TAS$ = 1) & ($PALABRAS-TODAS-ALGUNA$ = 1). Evalúa si el campo títulono está vacío y la opción marcada en el formulario es buscar un libro porPalabras conteniendo Alguna de las palabras del título.

Radio botón Alguna de las palabras activado.

Pulsamos el botón Añadir y especificamos los siguientes parámetros pararealizar una búsqueda Por Trozos del título:

Mezcla: Cruzar

Índice: Trozos

Condición activa: (fCampoVacío (%TITULO%) = 0) & ($PALABRAS-EXAC-TAS$ = 0). En este caso buscará el libro Por trozos de palabras.

Es importante darnos cuenta de que en los tres casos anteriores la prime-ra comprobación que se incluye en la condición activo es que el título noesté vacío. Esto es así ya que de estarlo no tendríamos nada por lo quebuscar.

Pulsamos de nuevo el botón Añadir y especificamos los siguientes pará-metros para realizar una búsqueda Por Autores del libro:

Mezcla: cruzar.

Índice: autores.

Condición activa: fCampoVacío( %AUTORES% ) = 0. Evalúa si el campoAutores del formulario está vacío o no.

Modo de buscar: parte izquierda clave (realiza la búsqueda de los registroscuya parte izquierda de la clave coincida con la introducida por el usuarioen el formulario para pedir datos).

e

Page 208: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Por último, pulsamos el botón Añadir y especificamos los siguientes pará-metros para realizar una búsqueda Por Editores del libro:

Mezcla: cruzar.

Índice: editores.

Condición activa: fCampoVacío(%EDITORES%) = 0. Evalúa si el campo Edi-tores del formulario está vacío o no.

Modo de buscar: parte izquierda clave (realiza la búsqueda de los registroscuya parte izquierda de la clave coincida con la introducida por el usuarioen el Formulario para pedir datos).

Con esto ya tenemos creada nuestra búsqueda compleja.

Podemos imprimir las propiedades de una búsqueda. Para ello selecciona-mos la búsqueda y pulsamos el botón Imprimir de la barra de herra-mientas, o seleccionamos la opción de menú Archivo/Imprimir. El informemostrará el identificador de la búsqueda, el nombre, los comentarios, la ta-bla de datos asociada a la misma, la rejilla que se va a utilizar para mostrarlos registros encontrados, los componentes de la búsqueda, mostrando losíndices con su nombre, tipo y el modo de búsqueda. Asimismo, si hemosespecificado una fórmula de filtro secuencial o un orden por un campo de-terminado, también se mostrará en el informe.

ResumenLas búsquedas son los objetos que sirven para realizar consultas en las ta-blas de datos. Hemos de especificar la tabla de datos en la que buscar, larejilla o árbol con la que presentar la lista de registros localizados y los com-ponentes de búsqueda.

04 Desarrollo básicode una aplicación

Imprimir

e

Cuestiones1. Estamos diseñando una aplicación para empadronamientos. Co-

menzamos creando las tablas CIUDADES y HABITANTES, la segun-da histórica de la primera (los habitantes de la ciudad, la ciudad delhabitante). En la tabla HABITANTES añadimos el campo calle.

2. Diseñar las búsquedas por palabras del campo nombre del habitan-te, por calle y por ciudad.

3. Añadir el campo Edad a la tabla HABITANTES y diseñar una bús-queda de habitantes por edad de modo que sólo sean devueltos loshabitantes cuya edad se encuentre entre dos límites que le pasamosal programa.

4. Diseñar una búsqueda que devuelva todos los habitantes de una ca-lle que se llamen igual y de cualquier edad (calle y nombre son pará-metros que le pasamos al programa).

Page 209: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

208 209 VELAZQUEZ VISUAL

En los componentes de búsqueda se define el índice por el que buscar, elmodo de búsqueda y el formulario para pedir datos al usuario, cuando seanecesario.

En una misma búsqueda es posible definir varios Componentes de Bús-queda, que podemos combinar de tres formas distintas: Cruzar, Añadir yQuitar, dependiendo del resultado que queramos obtener.

4.4.5. Menús

Son los objetos que se encargan de mostrar al usuario las opciones que eldiseñador ha establecido para la aplicación. Cuando el usuario elige una delas opciones mostradas, el menú dispara el objeto asociado, provocando suejecución.

Cada una de las opciones de un menú se compone de una pistola y una odos balas. La pistola establece el tipo de acción a realizar y las balas sonlos objetos que protagonizan la acción. Por ejemplo, al elegir la pistola Bús-queda, podremos elegir como bala cualquiera de las búsquedas definidasen el proyecto.

Existen dos tipos de menús: los menús arbolados y los menús tipo formu-lario.

Arbolado: presentan las distintas opciones de la aplicación con la apa-riencia arborescente que utiliza el Explorador de Windows (tm) para presen-tar las carpetas de las unidades de disco.

Tipo Formulario: permiten que el diseñador utilice un formulario de pantallacompleta para que coloque textos y gráficos que disparen las distintas op-ciones del menú. Los textos y los gráficos que disparan opciones puedencambiar su color al ser apuntados por el ratón, el cual también cambia deforma.

Para crear un menú, pulsamos el botón Nuevo objeto de la barra de herra-mientas. De la Galería de Objetos elegimos el icono Menú arbolado o Menútipo formulario.

Propiedades de un menú arboladoAl crear un menú arbolado, se presenta un cuadro de diálogo donde es po-sible definir las propiedades del mismo, empezando por el nombre.

El resto de sus propiedades son las siguientes:

Arbolado

Page 210: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Privado: si se activa esta casilla de verificación, el menú se ocultará al usua-rio, aunque podrá ser lanzado directamente desde algún otro menú.

Área izquierda:

Dibujo: debe ser uno de los declarados en el proyecto. Este dibujo se mos-trará, junto al menú de la aplicación, en la parte izquierda de la pantalla du-rante la ejecución del proyecto.

Color fondo: color asignado para el fondo del área donde se sitúa el dibujo.

Árbol:

Iconos: debe ser un multi-icono declarado en el proyecto. Éstos se presen-tarán al lado de cada nombre de menú.

Color texto: color asignado al texto de las ramas del menú.

Color fondo: color asignado para el fondo de la zona del menú.

04 Desarrollo básicode una aplicación

Page 211: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

210 211 VELAZQUEZ VISUAL

En el apartado Carpetas subgrupos se definen las carpetas que formaránparte del menú. Para añadir nuevas carpetas pulsamos el botón Nueva .Para cambiar el orden de una carpeta, la seleccionamos en la lista y pulsa-mos los botones de desplazar subir o bajar .

En la casilla Icono seleccionamos de entre los dibujos del multi-icono quehemos escogido, aquel que preferimos para la opción que estamos crean-do. Éste lo hemos declarado en el menú en Árbol: Iconos, y se presentarájunto al título.

Una carpeta se compone de un Título, de una o varias opciones y de la ca-silla de Abrir al inicio. Si está señalada la casilla, el menú aparece desple-gado al ejecutar la aplicación.

Propiedades de una opción de menúUna opción de menú está compuesta por las propiedades siguientes:

Nueva

Subir o bajar

Page 212: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

• Título opcional: permite establecer un título diferente al que VelázquezVisual propone por defecto.

• Pistola: útil que permite disparar uno o varios objetos.

• Bala: objeto a disparar por la pistola.

• Segunda bala: segundo objeto a disparar por la pistola. Con esta opción,dos balas son visualizadas simultáneamente dividiendo la pantalla endos, mediante una barra vertical u horizontal. La barra puede moverseen tiempo de ejecución para alterar el tamaño de las partes. El tamañoinicial y la orientación se definen en el apartado Doble ventana. Pulsan-do el botón Cambiar 2ª bala se define el objeto que será disparado. Es-te objeto dependerá de la selección de los Botones de Radio. Sólo al-gunas pistolas permiten disparar dos balas. En el caso de la opción Eje-cutar proceso tras búsqueda, la segunda bala es un proceso y lo quepresenta finalmente es lo que devuelva el proceso.

• Estilos:

– Autodisparable: si está seleccionado, la bala se dispara automática-mente por el sistema al crearse el menú.

– Ajusta ventana: si está seleccionado, establece el tamaño de la ven-tana como el declarado en los apartados Posición y Dimensiones. Sien tiempo de ejecución la ventana está maximizada, esta opción se-rá ignorada.

– Pasarle usuario: es específico para la pistola Abrir otra aplicación deVelázquez Visual.

– Cerrar este menú: esta opción únicamente aparece cuando en la pis-tola tenemos opciones relacionadas con los menús.

04 Desarrollo básicode una aplicación

Page 213: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

212 213 VELAZQUEZ VISUAL

Doble Ventana: en el caso de que se usen dos balas con las opciones demenú, por defecto son dos paneles verticales los que se presentan, pero simarcamos la casilla horizontal, tomarán esta orientación. También podemoscontrolar el tamaño relativo que tendrán, rellenando la casilla % tamaño pa-nel 1. Se refiere al panel de la izquierda o el de arriba, dependiendo de laorientación. Si no se rellena, por defecto, el de la izquierda tendrá el tama-ño justo para que se vean todos los controles que tiene, dejando el resto delespacio de la ventana para el otro menú, y en el horizontal se reparten lapantalla al 50 por ciento.

Estas opciones son comunes tanto para los menús arbolados como paralos menús tipo formulario que veremos más adelante.

Tipos de PistolaDisponemos de las siguientes pistolas

• Búsqueda: dispara el objeto Búsqueda seleccionado en la bala. Si no seencuentra ningún registro, el programa presentará un mensaje avisandoque no se han encontrado registros y volverá al menú desde la que sedisparó.

• Búsqueda (permite vacío): dispara el objeto Búsqueda seleccionado enla bala. Si no se encuentra ningún registro, se presentará igualmente larejilla asociada a la búsqueda, con 0 registros.

• Menú: en menús arbolados dispara el objeto Menú seleccionado en labala. En menús de tipo formulario permite disparar dos menús, uno co-mo primera bala y otro como segunda bala.

• Formulario (Alta): dispara el objeto Formulario seleccionado en la bala,para permitir un alta en una tabla de dato.

VENTANA DE PROPIEDADES DE UNA OPCIÓN DE MENÚ

Page 214: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

• Rejilla tabla datos completa: dispara el objeto Rejilla seleccionado en labala, mostrando el contenido de la tabla tal y como se encuentra física-mente en el disco, incluidos los huecos dejados por registros eliminados.

Desde una rejilla de tabla de datos completa disponemos, en tiempo deejecución, de las utilidades siguientes cuando no usamos cliente-servidor(puesto que estas opciones las tenemos en el servidor, excepto la últimaque la tenemos en el menú Lista cuando estamos viendo una rejilla):

– Información sobre la tabla de datos: obtendremos información sobre elnombre e identificador de la tabla, el número total de fichas que con-tiene, cuántas de ellas están ocupadas y cuántos huecos libres tiene.

– Regenerar índices: si los ficheros de índices están corruptos o han si-do eliminados, podemos regenerarlos a través de esta opción.

– Regenerar área de datos: permite regenerar el área de datos de la ta-bla, es decir, su cabecera, que contiene información tal como el nú-mero total de registros de la tabla y otra información adicional sobrela misma.

– Exportar Ascii: permite realizar un volcado de la tabla a un fichero Ascii.

• Búsqueda Formulario: dispara el objeto Búsqueda seleccionado en labala. Si sólo encuentra un registro, Velázquez Visual lo presenta con elformulario. En caso contrario, muestra la rejilla de la búsqueda con to-dos los registros encontrados.

• Incluir Menú: incluye, en el momento de la ejecución, el objeto Menú consu título y su contenido completo. En menús de tipo formulario provocaque el nuevo menú se ejecute en la misma ventana que el menú llamador.

• Incluir Carpetas Menú: en menús arbolados incluye, en tiempo de ejecu-ción, el contenido del objeto Menú. Excluye el título del mismo. En me-nús de tipo formulario, si desde un menú utilizamos la pistola Menú, po-dremos disparar dos menús al mismo tiempo, uno como primera bala yotro como segunda bala. En el menú disparado como primera bala po-drá crear opciones que disparen diferentes menús, que se visualizaránen la parte derecha de la pantalla, mediante la pistola Incluir Carpetas demenú. Así, podremos tener en la parte derecha de la pantalla un menúcon opciones generales (Artículos, Clientes, Proveedores, etc.), y al eje-cutar una de ellas, por ejemplo Artículos, como segunda bala en la par-te derecha de la pantalla un menú con sus opciones correspondientes(búsquedas, localizador, formulario de altas, etc. de artículos). El tama-ño de los paneles donde se visualizarán los menús se determinará enfunción del ancho que ocupe el menú disparado como primera bala.

• Localizador: muestra el Localizador seleccionado en la bala. El localiza-dor muestra los índices en una Lista desplegable para que el usuario eli-ja el más adecuado para realizar la búsqueda. El resultado de la bús-queda es visualizado en la rejilla.

04 Desarrollo básicode una aplicación

Esta pistola está orientada alprogramador o aladministrador del sistemapara poder comprobar elestado físico de la tabla; asíque no la utilice nunca comoopción para usuarios finalesde una aplicación. Dado elcarácter de la misma, en ellano están implementadas lasutilidades que tienen lasrejillas (reordenación de losregistros por un campo,edición directa, etc.).

ADVERTENCIA

Page 215: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

214 215 VELAZQUEZ VISUAL

• Árbol de tabla de datos: dispara el objeto Árbol seleccionado en la bala.

• Ejecutar proceso tras búsqueda: ejecuta el proceso declarado en sus pa-rámetros con la lista obtenida en la búsqueda declarada en la bala.

• Ejecutar proceso sin origen: ejecuta el proceso declarado como bala deesta opción. Debe ser un proceso sin origen.

• Tubo de importación: ejecuta el Tubo de importación declarado en la bala.

• Cerrar la aplicación: cierra la aplicación que esté abierta.

• Cerrar ventana de menú: cierra la ventana del menú actual.

Abrir otra aplicación Velázquez: permite lanzar otro proyecto de Velázquez.Como primera bala necesitamos una variable global, que debe ser de for-mato alfabético. Su contenido variará según se ejecute la aplicación en elServidor de Aplicaciones o a través del VRunner.

Sintaxis del contenido de la variable para ejecutar el proyecto con el VRun-ner: será la senda de la aplicación a abrir. Es muy útil para la gestión mul-tiempresa. Por ejemplo, podemos tener en un directorio el proyecto princi-pal (que será un simple proyecto de empresas) y en directorios dependien-tes del mismo los proyectos correspondientes a la contabilidad de cada em-presa. Con esta pistola podremos abrir cualquiera de los otros proyectos,dependiendo del valor de la variable global utilizada como bala. El estilo Pa-sarle usuario es específico para esta opción. Si se activa, al arrancar el otroproyecto se toma el usuario/password de la aplicación en curso y se pasana la nueva. Si existe ese usuario/password en la otra, entra directamente y sino, presentará el cuadro de diálogo de petición de usuario y contraseña.

Para la versión cliente servidor la sintaxis será: etiqueta_aplicacion/usua-rio/password@SERVIDOR.

Etiqueta_aplicación: se trata del nombre interno del proyecto o del alias da-do en el Servidor. Si éste contiene espacios en blanco, éstos serán susti-tuidos por un guión (-).

/usario/password: son parámetros opcionales; por defecto, si la opción demenú tiene activado el flag “Pasar usuario” tomará por defecto el usua-rio/password del que esté ejecutando la aplicación.

Si tras la etiqueta de la aplicación se escribe /?, se obligará a la petición deusuario password.

@SERVIDOR: parámetro opcional. Si no se especifica servidor, se tomará elServidor donde se esté ejecutando la aplicación actual.

• Cesta de la compra: esta pistola requiere una cesta de la compra defini-da en el proyecto. Como parámetro opcional (Segunda bala) podemosespecificar una rejilla del histórico, un formulario o un gráfico. En ejecu-

Page 216: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

ción esta pistola disparará una rejilla que contendrá todos los registrosalmacenados en la cesta de la compra especificada. Muy útil, por ejem-plo, si hemos creado un proceso de generar Pedidos a partir de una lis-ta de Artículos, si en la cesta de la compra vamos introduciendo aque-llos artículos que deseamos pedir, utilizando esta pistola de menú ob-tendremos la lista de todos los artículos a pedir y, sobre ella, podremosejecutar dicho proceso.

• Agenda tabla Completa: dispara el objeto Agendizador seleccionado co-mo primera bala. Éste es presentado en una ventana que contiene uncalendario en el que el usuario podrá seleccionar una fecha y una rejillapara presentar los registros encontrados.

• Casillero: esta pistola dispara un casillero (objeto visual que veremosmás adelante). Como primera bala se ha de especificar un proceso conorigen Ninguno y como segunda bala el casillero.

• NULA: se utiliza en los menús de tipo Formulario. Sirve para que un ob-jeto de tipo texto o de tipo dibujo no dispare una opción de un menú. Lousaremos cuando queramos poner títulos, adornos, observaciones, pa-ra el diseño, etc.

Segunda BalaCada opción de menú puede disparar una bala (un objeto) según la pistolaque hayamos seleccionado. Algunas pistolas admiten una segunda balaasociada a la primera que hemos elegido. Por ejemplo: supongamos unaopción de menú que se encarga de lanzar un árbol visor de tabla arbolada.La pistola será Árbol de tabla de datos, la primera bala será el árbol en par-ticular que queremos ver de entre los que se encuentran en la aplicación enejecución, y como segunda bala podríamos seleccionar una rejilla de histó-rico, de modo que al elegir un elemento del árbol, nos aparezcan en la reji-lla (segunda bala) todos los registros que sean históricos suyos.

Velázquez cuenta con las siguientes “segundas balas”:

• Menú: menú que se presentará en la parte derecha o inferior de la pan-talla, según sea el caso.

• Rejilla histórico: seleccionaremos una rejilla de un histórico de la tabla dedatos asociada al objeto disparado como primera bala.

• Formulario: formulario asociado a la misma tabla de datos del objeto dis-parado como primera bala.

• Gráfico: hoja de cálculo asociada a la misma tabla de datos del objetodisparado en la primera bala. En sus propiedades debemos seleccionartanto la hoja de cálculo a presentar como el tipo de gráfico a utilizar pa-ra su visualización.

• URL: la segunda bala será una URL (una página web). Para poder eje-cutar esta segunda bala, en la tabla de datos asociada al objeto a dis-

04 Desarrollo básicode una aplicación

Page 217: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

216 217 VELAZQUEZ VISUAL

parar en la primera bala debe existir un campo en el que almacenar unaURL. Seleccionaremos dicho campo en las propiedades de esta segun-da bala.

• Proceso: Para la pistola Ejecutar proceso tras búsqueda hemos de ele-gir uno que tenga origen Lista de la tabla asociada a la búsqueda de laprimera bala.

Ejemplo: Creación de un menú arbolado

Supongamos una aplicación para un videoclub en la que se incluye la tablaVIDEOS (contiene información acerca de los vídeos del negocio) y en la queya hemos creado las búsquedas por palabras y trozos de palabras del nom-bre, por duración y por idioma. Vamos a crear un menú arbolado en el quese incluyan esas búsquedas.

Comenzamos y pulsamos el botón Nuevo Objeto y en la Galería de Objetoselegimos Menú arbolado . Aparecerá la ventana de propiedades del me-nú arbolado, en la que hemos de escribir el nombre que queremos darle ala búsqueda. Escribimos Menú de búsquedas.

A continuación pulsamos el botón Añadir para crear las carpetas que vaa contener el árbol y en las que se organizarán las búsquedas.

Aparecerá la ventana Carpetas subgrupos de menú, en la que teclearemosel título de la primera carpeta, que será Búsqueda por palabras.

Menú arbolado

Añadir

e

Page 218: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

A continuación pinchamos en el botón Añadir y aparecerá la ventana Pro-piedades de una opción de menú, en la que escribimos como título opcio-nal: Búsqueda por palabras.

Como pistola elegimos Búsqueda, y como bala: POR-PALABRAS.

Estos pasos hemos de repetirlos con las tres búsquedas restantes de la ta-bla VIDEOS. Una vez hecho esto hemos de integrar el menú arbolado den-tro de uno de los menús formulario que usamos para lanzar las distintas op-ciones de la aplicación.

04 Desarrollo básicode una aplicación

e

Page 219: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

218 219 VELAZQUEZ VISUAL

Al seleccionar la opción Menú de búsquedas podríamos obtener un resul-tado parecido al de la figura anterior.

Propiedades de un menú tipo formularioPermiten que el diseñador utilice un formulario de pantalla completa paracolocar textos y gráficos que disparen las distintas opciones del menú.

Para crear un menú tipo formulario, abrimos la Galería de Objetos y selec-cionamos Menú tipo formulario, con lo que Velázquez Visual presenta unentorno de edición a pantalla completa donde podremos editar el menú.

e

Cuestiones1. Tenemos creada una agenda que cuenta con una tabla llamada

AGENDA y a la que añadimos los campos Dirección y Nº de tfno.(además de Código y Nombre). Hemos creado una búsqueda porpalabras del nombre, una rejilla para ver los registros y dos formula-rios: uno de altas y modificaciones y otro para eliminar las fichas.Ahora queremos que el menú consista en un árbol con una sola car-peta, que llamaremos Agenda, y de la que cuelguen los dos formu-larios, la búsqueda y la rejilla para ver los registros.

Page 220: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Señalando la opción del menú principal Edición / Propiedades o haciendodoble clic sobre el fondo de la pantalla del menú, aparece el cuadro de diá-logo Propiedades del menú.

Las propiedades del cuadro de diálogo son:

04 Desarrollo básicode una aplicación

Page 221: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

220 221 VELAZQUEZ VISUAL

• Nombre: nombre que llevará el menú.

• Privado: si lo marcamos éste no será incluido en la lista de menús quepuede escoger un usuario, sino que se ha de acceder a él por medio deotro menú.

• Suprimir Márgenes: sirve para suprimir los márgenes que están activospor defecto en tiempo de ejecución. Es muy útil cuando se está traba-jando con un control de tipo Búsqueda Rejilla o con un control de tipoÁrbol, cuando están definidos como alto variable o ancho variable.

• Proceso oninit: permite asociar un proceso para que se ejecute al abrir-se el menú. El proceso debe tener un origen nulo, es decir, no puede te-ner su origen en ninguna tabla de datos. Este proceso podría usarse, porejemplo, para permitir o denegar el acceso de un usuario a ese menú, olanzar algún proceso necesario para las opciones de ese menú.

• Barra de herramientas: si incluimos en el menú un objeto de búsquedarejilla o de árbol y hemos creado un objeto visual de tipo Barra de He-rramientas, especificaremos en esta opción la barra de herramientas quedeseemos utilizar.

• Aparcar barra: para situar la barra de herramientas en la parte superior,inferior, izquierda o derecha del menú.

• Si queremos utilizar un dibujo de fondo para un menú de tipo formulario,podremos elegir entre los modos de pintado de dibujo siguientes:

– Normal: el dibujo se situará en la parte superior izquierda del formu-lario.

– Mosaico: el dibujo se repetirá por todo el formulario a modo de mo-saico, ocupando todo el área del mismo. Si el dibujo ha sido definidocon fondo transparente, el mosaico también será de fondo transpa-rente.

– Centrado: se centrará horizontal y verticalmente con respecto al for-mulario.

– Estirado: el dibujo se adaptará para ocupar toda la extensión del for-mulario.

• Color de fondo: aquí podemos escoger el color que tendrá de fondo elformulario.

• Efecto Cristal: se refiere al color que deseamos que adopte el filtro o cris-tal que Velázquez Visual coloca delante de los dibujos o los textos está-ticos que componen el menú cuando el cursor se posiciona sobre ellos.Si no queremos utilizar el efecto cristal, bastará con desactivar la casillaCristal activo. El color negro es el que desactiva el cristal. Si deseamosactivar el cristal hemos cambiar dicho color por el que deseemos.

Page 222: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

• Timer: es un reloj que permitirá disparar automáticamente una o variasopciones de menú cada intervalo de tiempo que fijemos. Para ello tene-mos que especificar cada cuántos milisegundos debe activarse el timer.Tenemos que crear un objeto con timer: creamos un control de texto es-tático o un dibujo, con la opción autodisparable, en el que especificare-mos la pistola a disparar automáticamente después de pasado el tiem-po del timer x veces.

• Además, podemos hacer que dicho control continúe o paralice la ejecu-ción de la pistola cuando el usuario haga clic sobre él. Para ello, en laspropiedades de la opción, en el parámetro Título opcional, escribimosdos palabras separadas por un punto y coma (;). La de la izquierda serála palabra que aparecerá cuando esté parado el proceso y la otra será lapalabra que aparecerá cuando esté en marcha. Por ejemplo, en Títuloopcional podemos escribir: Continuar;Detener.

• Fuentes: fuentes de las que dispondremos en el formulario.

Controles de un menú tipo formulario y maquetaciónEn la parte superior del área del menú tipo formulario encontramos una ba-rra de herramientas con los diferentes controles de menús.

Puntero del ratón, Dibujo, Gif, Texto estático, Edición, Microescrollers, Calendario, Botón de radio, Check Box, Bús-queda de Rejilla, Búsqueda de Árbol, Árbol tabla completa, Ca-sillero, Película, Banda de mosaico, Región, Menú arbolado,

Html. Crear polígono de la región, Aumentar Zoom, ReducirZoom.

De entre estos controles, Dibujo, Texto estático, Película y Región puedendisparar opciones, abriéndose la ventana propiedades de una opción demenú:

04 Desarrollo básicode una aplicación

Puntero del ratón

Dibujo

Gif

Texto estático

Edición

Microescrollers

Calendario

Botón de radio

Check Box

Búsqueda de Rejilla

Búsqueda de Árbol

Árbol tabla completa

Casillero

Película

Banda de mosaico

Región

Menú arbolado

Html

Crear polígono de la región

Aumentar Zoom

Reducir Zoom

Page 223: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

222 223 VELAZQUEZ VISUAL

Podemos establecer una Condición de visibilidad de controles. Si queremosque, según una condición impuesta por nosotros, un control de menú seao no visible, lo seleccionamos y ejecutamos la opción del Menú Controles /Condición visible. Se abrirá el Asistente para la edición de fórmulas, en elque especificaremos la fórmula de la condición.

Las Estilos de los controles son:

Borde: pone un borde al objeto.

Hundido: efecto de tres dimensiones en que el objeto parece hundido.

Sombreado: el objeto aparece con sombra del color elegido.

Fondo opaco: el objeto aparece con fondo del color elegido, anulando lasombra.

Multilíneas: en el caso de que el objeto tenga texto, permite que éste ocu-pe varias líneas.

Ocultar si no entra: si activamos esta propiedad a un control, en tiempo deejecución, si éste no va a caber debido al tamaño de la ventana, no se mos-trará. Es muy útil para controlar que el menú va a verse completo, trabaje ala resolución sobre la que se trabaje. Obviamente, esta opción sólo se usa-rá con controles que no disparen opciones (dibujos, bandas de mosaico,etc.).

En la parte superior de la pantalla se encuentra la barra de maquetación decontroles. Ésta funciona igual que con los formularios:

Los cuatro primeros botones alinean los controles seleccionadospor los bordes izquierdo, derecho, superior e inferior, respectivamente, delcontrol seleccionado en último lugar.

Los dos siguientes centran los controles horizontal y verticalmente,respectivamente, dentro del menú.

Los dos siguientes espacian tres o más controles a la misma distan-cia horizontal y vertical entre ellos, respectivamente.

Estos dos distribuyen los controles seleccionados horizontal o verti-calmente con respecto al que haya sido seleccionado en último lugar.

Alineaciones

Centrados

Repartos

Adjuntar

Page 224: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Los tres últimos dan a varios controles el mismo ancho, el mismoalto y el mismo ancho y alto, respectivamente, del control seleccionado enúltimo lugar.

Además de estas formas de maquetación, existen dos opciones en menúMaquetar/Alinear, que son:

Vertical: centra verticalmente todos los controles seleccionados con res-pecto a la posición del último.

Horizontal: centra horizontalmente todos los controles seleccionados conrespecto a la posición del último.

Por último, Tamaño del contenido F7 nos redimensionará el control al ta-maño de lo que contiene.

La posición y las dimensiones de un control se mostrarán en la barra de es-tado.

Explicación completa de los controlesPuntero del ratón: no tiene más función que señalar o desactivar la se-

lección de otro control.

Dibujo: permite seleccionar uno de los dibujos incluidos en el proyectode Velázquez Visual para utilizarlo como un elemento del menú.

04 Desarrollo básicode una aplicación

EJEMPLO DE CONTROL DIBUJO

Misma altura, an-chura y tamaño

Puntero del ratón

Dibujo

Page 225: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

224 225 VELAZQUEZ VISUAL

Se puede asociar un Tool Tip a un dibujo. Un Tool Tip es un pequeño men-saje que se visualiza cuando el cursor pasa por encima de un control. Paraincluir un tool tip basta con activar la casilla de verificación correspondien-te en el cuadro de propiedades. El texto que se mostrará será el incluido enla opción Título Opcional, que aparece al editar la opción del control. Es útilcuando se ha incluido un control de tipo dibujo que dispara una opción, pa-ra que el usuario sepa qué opción se va a disparar desde dicho control.

El botón Editar Opción permite que se elija la opción del menú que desea-mos disparar utilizando el mismo sistema de cuadros de diálogo que en losmenús arbolados.

El parámetro Posición contiene las opciones siguientes:

La del control: el dibujo se verá, en ejecución, en la posición que se haya si-tuado en la creación del menú.

Derecha: el dibujo se verá, en ejecución, pegado a la derecha del menú.

Abajo: el dibujo se verá, en ejecución, pegado al borde inferior del menú.

Derecha y abajo: el dibujo se verá, en ejecución, pegado al borde inferiorderecho del menú.

Estas tres últimas opciones son útiles para que el menú pueda tener buenaapariencia independientemente de la resolución del monitor del usuario.

Page 226: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Acelerador de teclado: permite asociar al objeto un acelerador de teclado.Podremos escoger entre:

Todos los números del 0 al 9.

Todas las letras de la A a la Z (Ñ excluida).

Todas las teclas de función desde F1 a F12.

Además, podremos hacer combinaciones con estas teclas más las teclasShift y Ctrl.

Estos aceleradores tienen preferencia sobre los aceleradores del menú e inclu-so sobre los aceleradores de Windows, así que si utilizamos la combinación deteclas Ctrl+F4 para disparar una opción desde un objeto de este tipo, se dis-parará la opción pero no podremos cerrar la ventana con dicha combinaciónde teclas (que es el comando de Windows que permite cerrar una ventana),pues tiene preferencia la combinación de teclas especificada para el objeto.

Gif: con este control podemos incluir una imagen gif, estática o anima-da, seleccionándola en la ventana de propiedades del control. Esta imagengif debemos seleccionarla de entre los objetos visuales GIF que tengamosincluidos en el mapa.

04 Desarrollo básicode una aplicación

EJEMPLO DE CONTROL GIF

VENTANA DE PROPIEDADES DEL CONTROL GIF

EJEMPLO DE TEXTO ESTÁTICO

Gif

Page 227: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

226 227 VELAZQUEZ VISUAL

Texto estático: permite seleccionar uno de los objetos visuales del pro-yecto de Velázquez Visual para dispararlo y ejecutarlo. La descripción delobjeto se usará como texto estático del menú. Si no hemos seleccionadoningún tipo de fuente para un control de este tipo, se tomará por defecto lafuente System y, al tratar de cambiar a posición vertical, no será pintado, nien edición ni en ejecución; así que debemos asignarle un tipo de letra dis-tinto.

Edición: permite editar en el menú una variable global.

Sus parámetros son:

Variable: identificador de la variable que se desea editar. Abriremos el com-bo box para seleccionarla.

PROPIEDADES DEL CONTROL TEXTO ESTÁTICO

EJEMPLO DEL CONTROL EDICIÓN

Texto estático

Edición

Page 228: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Fuente: tipo y tamaño de fuente a utilizar. Podremos elegir entre las que ha-yamos incluido en las propiedades del menú.

Color texto / Color fondo: color que se desea aplicar al texto y al fondo delcontrol.

Borde: activaremos esta opción para que el control se pinte con un rebor-de negro.

Hundido: lo activaremos para que el control se muestre con este efecto.

Multilíneas: lo activaremos si deseamos que la variable se presente en va-rias líneas. Tendremos que darle el alto suficiente para que puedan cabervarias líneas.

Selección con Tab: lo activaremos para que el control pueda ser seleccio-nado con la pulsación del tabulador.

Sólo lectura: lo activamos para que el contenido del control no pueda sermodificado por el usuario.

Separador de miles: para visualizar el separador de miles si la variable edi-tada es de tipo numérico.

Tamaño: éste podrá ser Fijo (invariable), de Ancho variable (el ancho variará enfunción del tamaño de la ventana del menú), de Alto Variable (el alto del controlvariará en función del tamaño de la ventana del menú) o con Ambos variables.

04 Desarrollo básicode una aplicación

Page 229: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

228 229 VELAZQUEZ VISUAL

Botones arriba/abajo: para variables de tipo Numérico o de tipo Fecha. Loactivaremos si deseamos que dentro del control se incluyan microescro-llers. Éstos permiten aumentar o disminuir de uno en uno el número o la fe-cha editada pulsándolos con el ratón o simplemente utilizando las teclas delcursor arriba/abajo. Si el control está definido como multilíneas, entonces elusuario tendrá que mantener pulsada la tecla Alt mientras pulsa las teclasdel cursor arriba/abajo.

Timer: si en las propiedades de un menú tipo formulario hemos activado el ti-mer, en esta opción especificaremos cada cuántos timers se ha de ejecutar labala que dispara el texto. Para que se dispare sin que tenga que intervenir elusuario, tendremos que activar en las propiedades de la opción el estilo Auto-disparable. Por ejemplo: en las propiedades de un menú hemos activado unTimer de 5.000 milisegundos (5 segundos). Hemos incluido en dicho menú dostextos estáticos, autodisparables, que disparan sus pistolas correspondientes.A uno le hemos especificado 2 timers y a otro 1. En tiempo de ejecución el pri-mero se ejecutará cada 10 segundos (2 timers) y el segundo cada 5 (1 timer).

Asimismo, podremos alinear el contenido del control a la izquierda, a la de-recha o centrado.

Microescrollers: permite incluir en el menú unos microescrollers pa-ra poder aumentar o disminuir el contenido de una variable global de tipoNumérico o de tipo Fecha.

En la ventana de propiedades del control: Microescrollers hemos de espe-cificar la Variable y por el valor a incrementar. Por ejemplo, si editamos unavariable de tipo numérico y como valor especificamos el 10, en tiempo deejecución, cuando pulsemos el botón hacia arriba la cantidad se decre-mentará en 10 unidades, si pulsamos el botón hacia abajo, se incrementa-rá en 10 unidades. Si la variable fuese de tipo fecha, ésta aumentará o dis-minuirá 10 días con cada pulsación de botón.

Calendario: permitirá incluir en el menú un calendario. Al seleccionar enel mismo una fecha, se modificará con esa fecha el valor de la variable glo-bal que edite.

Microescrollers

Microescrollers

Calendario

Page 230: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Sólo podremos editar en este tipo de control una variable global de tipo fe-cha. En la ventana propiedades del control: Calendario seleccionamos lavariable a editar y damos los atributos que queramos al control calendario(tipo de letra, con o sin borde, tamaño…).

Botón de radio: controles que se agrupan para que una misma variabletome diversos valores dependiendo del Botón de Radio seleccionado.

04 Desarrollo básicode una aplicación

EJEMPLO DEL CONTROL CALENDARIO

Botón de radio

Page 231: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

230 231 VELAZQUEZ VISUAL

Variable: seleccionamos en esta opción la variable global que deseamosasignar al control.

• Dato fijo: a cada botón de radio se asocia la misma variable global, lacual será modificada con el contenido que especifiquemos en este cua-dro de edición. Basta con que uno de ellos tenga seleccionada la pro-piedad.

Selección con Tab: para que el cursor se posicione sobre el seleccionado.Una vez seleccionado, podemos usar las flechas de desplazamiento delcursor para movernos entre los botones de radio y seleccionarlos. Se hade especificar una cadena de formato y podremos utilizar constantes o va-riables.

Texto: texto que se visualizará junto al control. Es una cadena de formato ypodemos usar tanto una constante como el contenido de una variable glo-bal. Podemos utilizar aceleradores de teclado, situando el símbolo & delan-te de la letra que desee emplear como acelerador. Los aceleradores son di-námicos, es decir, pueden utilizarse con variables globales, pudiendo acep-tar expresiones tales como &$IVA1$.

Check Box (Casilla de verificación): mediante un control de este tipo po-demos editar variables de tipo booleano en un menú de tipo formulario.

En el cuadro de propiedades seleccionamos la variable global de tipo boo-leano que deseemos, y en el parámetro Texto, escribimos el texto que de-be salir junto a la casilla de verificación.

EJEMPLO DEL CONTROL CHECK BOX O CASILLA DE VERIFICACIÓN

Check Box

Page 232: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Búsqueda de Rejilla: permite incluir en el mismo menú una rejilla con elresultado de una búsqueda concreta. En tiempo de ejecución aparecerá enel menú una rejilla con todos los registros resultantes de la búsqueda reali-zada. Para ver sus posibilidades de uso remitimos al apartado dedicado ala Sincronización de controles.

Se puede imprimir un informe asociado a la rejilla utilizada para la creaciónde este control. Si hay más de un control de rejilla en la misma pantalla seimprimirá el informe de la que tenga el foco.

04 Desarrollo básicode una aplicación

EJEMPLO DEL CONTROL BÚSQUEDA DE REJILLA

Búsqueda de rejilla

Page 233: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

232 233 VELAZQUEZ VISUAL

El cuadro de propiedades presentará una lista con todas las búsquedas delproyecto que tengan asociado como objeto de salida una rejilla. Selecciona-mos la que necesitemos y en tiempo de ejecución, se lanzará desde el me-nú, mostrando la rejilla asociada a la misma con los registros encontrados.

El parámetro Tamaño tiene las siguientes opciones:

Fijo: en ejecución, la rejilla se visualizará con el tamaño dado al control.

Ancho Variable: si activamos esta opción, en tiempo de ejecución la rejilla seexpandirá o se reducirá según sea el tamaño de la ventana y de la resolucióndel monitor. Si el ancho de la ventana es menor que el ancho del control delmenú, entonces quedará truncada la rejilla y aparecerán las barras de scroll.

Alto Variable: funciona igual que el anterior pero adaptando el alto.

Ambos Variables: aumentará o reducirá el alto y el ancho del control en fun-ción del tamaño de la ventana. Se seguirá reduciendo la rejilla hasta que laventana sea menor que el tamaño del control definido en el menú.

Si hemos creado otro control en el formulario que esté por debajo del bor-de inferior de la rejilla y hemos seleccionado Alto Variable o Ambos Varia-bles, en ejecución se verá un pequeño margen desde la parte inferior delmenú y el borde inferior del menú (la distancia entre el control que está si-tuado más abajo y la rejilla).

Para evitar este efectoprocuraremos situar elcontrol de Búsqueda Rejillamás abajo que el resto delos controles.

TRUCO

Page 234: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Búsqueda de Árbol: permite incluir, en el mismo menú, un árbol visor detablas arboladas con el resultado de una búsqueda concreta. En tiempo deejecución aparecerá en el menú un árbol con todos los registros resultantesde la búsqueda realizada. Para ver sus posibilidades de uso remitimos alapartado dedicado a la Sincronización de controles.

En la ventana de propiedades se presentará una lista con todas las bús-quedas del proyecto que tengan asociado como objeto de salida un árbol,de ellas seleccionamos la que necesitemos.

El parámetro Tamaño tiene las siguientes opciones:

Fijo: en ejecución, el árbol se visualizará con el tamaño dado al control.

Ancho Variable: activada esta opción, en tiempo de ejecución el árbol se ex-pandirá o se reducirá según sea el tamaño de la ventana y de la resolucióndel monitor. Si el ancho de la ventana es menor que el ancho del control delmenú, entonces quedará truncado el árbol y aparecerán las barras de scroll.

Alto Variable: funciona igual que el anterior pero adaptando el alto.

Ambos Variables: aumentará o reducirá el alto y el ancho del control en fun-ción del tamaño de la ventana. Se seguirá reduciendo el árbol hasta que laventana sea menor que el tamaño del control definido en el menú.

04 Desarrollo básicode una aplicación

Búsqueda de Árbol

Page 235: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

234 235 VELAZQUEZ VISUAL

De igual modo que las rejillas de búsqueda, si se ha creado otro control enel formulario que esté por debajo del borde inferior del árbol y se ha selec-cionado Alto Variable o Ambos Variables, en ejecución se verá un pequeñomargen desde la parte inferior del control y el borde inferior del menú (la dis-tancia entre el control que está situado más abajo y la rejilla). Para evitar es-to procuremos situar el control de Búsqueda de Árbol más abajo que el res-to de los controles.

Asimismo podemos especificar la fuente que utilizará el control.

Árbol tabla completa: permite incluir en el mismo menú un árbol visor detablas arboladas que presentará todos los registros de la tabla. Sus posibi-lidades de uso se exponen en el apartado Sincronización de controles.

Veamos sus propiedades:

El parámetro Tamaño tiene las siguientes opciones:

Fijo: en ejecución, el árbol se visualizará con el tamaño dado al control.

Ancho Variable: si activamos esta opción, en tiempo de ejecución el árbol seexpandirá o se reducirá según sea el tamaño de la ventana y de la resolucióndel monitor. Si el ancho de la ventana es menor que el ancho del control delmenú, entonces quedará truncada la rejilla y aparecerán las barras de scroll.

Alto Variable: funciona igual que el anterior pero adaptando el alto.

Árbol tabla completa

Page 236: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Ambos Variables: aumentará o reducirá el alto y el ancho del control en fun-ción del tamaño de la ventana. Se seguirá reduciendo el árbol hasta que laventana sea menor que el tamaño del control definido en el menú.

Igualmente, si se ha creado otro control en el menú que esté por debajo delborde inferior del árbol y se ha seleccionado Alto Variable o Ambos Varia-bles, en ejecución se verá un pequeño margen desde la parte inferior delcontrol y el borde inferior del menú (la distancia entre el control que está si-tuado más abajo y el árbol). Para evitar esto procuremos situar el control deBúsqueda de Árbol más abajo que el resto de los controles.

También podemos especificar la fuente que utilizará el control.

Casillero: permite incluir en el menú un casillero. Éste consiste en unconjunto de celdas, en cada una de las cuales se presentan los campos quequeramos de los registros de una tabla.

En las propiedades de un casillero debemos especificar qué proceso va aalimentarlo y cuál será el casillero a presentar. El proceso ha de tener origennulo. El casillero, al igual que los árboles y las búsquedas rejilla, puede serobjeto de sincronización.

Película: permite seleccionar un fichero de vídeo, con formato AVI, paraincluirlo como un elemento del menú.

04 Desarrollo básicode una aplicación

Casillero

Película

Page 237: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

236 237 VELAZQUEZ VISUAL

En el cuadro de diálogo de propiedades del control multimedia hay que es-pecificar el nombre del fichero AVI y la vía completa de donde se encuentreen el caso de que no esté incluido en la carpeta del proyecto.

Las opciones de la caja Estilos son:

Borde: para visualizar el borde del control.

Barra de reproducción y parada: para activar o desactivar la barra de re-producción y parada.

Barra de menú: para activar o desactivar la barra de menú del AVI.

Barra de estado: para activar o desactivar la barra de estado del AVI.

Autorrepetición: para repetir la película una vez que haya llegado a su fin.

Este tipo de controles multimedia son ejecutados en multitarea, por lo tan-to, no detienen la ejecución de la aplicación.

Podemos especificar una opción a lanzar desde este tipo de controles quese ejecutará cuando finalice la visualización de la película, para lo cual he-mos de marcar la opción de autodisparable. Si hemos incluido la barra dereproducción y parada, la opción se lanzará cuando se pulse para que pa-re, aunque no hayamos marcado la opción autodisparable. Esto es útil pa-ra realizar presentaciones de programas en vídeo que al terminar lancen elmenú principal. Si hemos activado la casilla de Autorrepetición y hemos in-cluido una opción a disparar desde este control, el programa disparará di-cha opción e ignorará la autorrepetición.

Podemos incluir tantos controles de película como queramos en un mismo menú.

Banda de mosaico: permite incluir en un menú bandas horizontales overticales utilizando un dibujo que se repetirá como un mosaico.

Banda de mosaico

Page 238: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Veamos las propiedades del control:

La Orientación puede ser:

Horizontal: el ancho de la banda será todo el menú y el alto será la altura deldibujo elegido como mosaico. Podemos variar la altura de la banda.

Vertical: el alto de la banda será la altura del menú y el ancho será el del di-bujo que se haya seleccionado como mosaico. Podemos cambiar la an-chura de la banda.

En Posición tenemos dos opciones:

04 Desarrollo básicode una aplicación

Page 239: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

238 239 VELAZQUEZ VISUAL

La del control: se mostrará en ejecución dicha banda en la posición en laque se ha definido en el menú.

Derecha/abajo: si la banda de mosaico se quiere visualizar en la parte de-recha del menú (si es vertical) o en la parte inferior del mismo (si es hori-zontal). Esto viene motivado por las distintas resoluciones de los monitores.Activada esta opción, sea cual sea la resolución de un monitor, se asegura-rá que la banda salga en la posición deseada (en la parte inferior o bien enla derecha de la pantalla).

Si se utiliza un dibujo con color de fondo transparente, las bandas de mo-saico también tendrán el color de fondo transparente.

Región: una región es una zona del menú que, en ejecución, se activa alpasar el puntero del ratón sobre la misma. Este control permite al progra-mador establecer los límites de una región.

Las regiones pueden lanzar o no opciones, como cualquier otro control deun menú de tipo formulario.

La ventana de propiedades del control contiene los siguientes parámetros:

Región

Page 240: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Tipo: geometría de la región que vamos a crear. Contamos con las siguien-tes posibilidades:

Rectángulo: para crear una región de selección rectangular. Ésta podrá re-dimensionarse con el ratón arrastrando los manejadores de la misma, obien, con la tecla shift + los cursores (arriba, abajo, izquierda, derecha).

Círculo: para crear una región de selección circular o elíptica. Esta regiónpodrá redimensionarse del mismo modo que la anterior.

Polígono: para crear una región de selección irregular. Al ser una región irre-gular, tendremos que ir definiendo los distintos puntos de la misma a travésde la subopción Polígono Región de la opción del menú Controles, o pul-sando el botón una vez seleccionado dicho control. Podremos definirlaen la zona que deseemos del menú, no hace falta que lo hagamos en la zo-na en la que hayamos situado el control. Una vez seleccionada la opciónPolígono Región, veremos que el cursor cambia, esto quiere decir que yapodemos empezar a definir los puntos de la misma. Basta con hacer cliccon el ratón para ir creando los puntos que la compondrán. Para terminarcon la creación de la región, bastará con hacer doble clic sobre la zona enla que deseemos insertar el último punto.

Esta opción es útil cuando estamos utilizando dibujos; podemos crear la re-gión siguiendo el contorno de un dibujo, de modo que a la hora de ejecutarel proyecto, sólo se activará cuando el cursor se sitúe dentro de la región.

Para facilitar la creación del polígono región, podemos aplicar un Zoom so-bre el menú para ampliar el dibujo. En la barra de herramientas del editor demenús encontraremos los botones , el primero aumenta el zoom y elsegundo lo reduce.

Por ejemplo, un proyecto que incluya un mapa de España y en el que ca-da provincia cuente con una región poligonal que siga su contorno. Al ha-cer clic en una provincia, dispararemos una búsqueda de los clientes de lamisma.

Tool tips: activada esta casilla de verificación, cuando, en ejecución, se pa-sa con el ratón sobre la región, se muestra un mensaje con un texto expli-cativo. El texto será el que se especifique como Título Opcional en las op-ciones de la región.

Efecto a seleccionar: son los efectos de visualización que tienen lugar en laregión cuando pasamos el cursor por ella.

04 Desarrollo básicode una aplicación

Una región de seleccióncircular es muy útil, porejemplo, cuando sepresenta un mapa en elmenú en el que las distintasciudades están marcadaspor un punto. Si creamosuna región circular deltamaño de cada punto, alpasar por el mismo con elratón podremos hacer quese dispare una opción, porejemplo, ver los clientes deesa ciudad.

TRUCO

Crear polígono de la regiónAumentar y reducirzoom

Page 241: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

240 241 VELAZQUEZ VISUAL

Ninguno: en ejecución, al pasar con el cursor sobre la región, cambiará elmodo del cursor a modo de selección.

Invertir colores: en ejecución, al pasar con el cursor sobre la región, cam-biará el modo del cursor a modo de selección y se invertirá el color o los co-lores que estén dentro del área de la misma.

Opaco: en ejecución, al pasar con el cursor sobre la región, cambiará el mo-do del cursor a modo de selección y se verá la región con el color que sehaya elegido en el editor de proyectos.

Si hemos creado varias regiones en un mismo formulario y se superponenunas a otras, la que prime será la última en el orden de tabulación.

Aceleradores de teclado: ver la explicación sobre los aceleradores de te-clado en los controles de tipo dibujo.

Menú arbolado: permite incrustar como control dentro de un menú for-mulario un menú arbolado existente en el proyecto.

Las propiedades del control son:

Menú: identificador del menú arbolado que se desea incrustar.

Fuente: la que vamos a utilizar de entre las especificadas en las propieda-des del menú tipo formulario.

Menú arbolado

Page 242: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Html: permite incrustar como control dentro de un menú formulario unaURL.

La Fórmula URL es una expresión fórmula de la URL a presentar. Puede seruna constante, una variable global, etc. Por ejemplo: “http://velazquezvi-sual.com”.

En el Navegador de Velázquez Visual la barra de navegación web actúa so-bre el control cuando éste tiene el foco (atrás, adelante, actualizar...), perono la barra de direcciones URL (ésta sigue actuando como siempre, al es-cribir una URL presenta el resultado en una nueva ventana).

Ejemplo: creación de un menú tipo formulario

Supongamos una aplicación para una librería en la que incluimos la tablaLIBROS. Vamos a realizar el menú correspondiente a dicha tabla. Paraello pulsamos el botón Nuevo Objeto, y de la Galería de Objetos elegimosmenú tipo formulario. Entraremos directamente en la pantalla de ediciónde menús. Pulsando el botón derecho del ratón aparecerá la ventanaPropiedades del menú en la que escribimos el nombre del formulario, de-finimos las fuentes que vamos a usar en él y establecemos el resto depropiedades.

04 Desarrollo básicode una aplicación

Html

e

Page 243: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

242 243 VELAZQUEZ VISUAL

Salimos de la ventana aceptando, y podemos salir de la pantalla de ediciónde menús para cambiar el identificador del menú por libros (pulsando la te-cla F2).

Pinchamos sobre el objeto menú tipo formulario que acabamos de crear yvolvemos a entrar en la pantalla de edición de menú. Pinchamos sobre elcontrol texto estático , arrastrándolo hacia la zona del menú donde que-remos que se encuentre. Con el botón derecho sobre el control obtenemosla ventana de propiedades del control.

Texto estático

e

Page 244: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Definimos las propiedades del control que queramos y a continuación pul-samos el botón Editar Opción, apareciendo la ventana Propiedades de unaopción de menú. Como Título opcional escribimos LIBROS (es el texto queva a presentar el control), como Pistola elegimos NULA.

04 Desarrollo básicode una aplicación

e

Page 245: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

244 245 VELAZQUEZ VISUAL

Al aceptar aparecerá en la pantalla del editor de menús el siguiente texto.

Ahora vamos a ir metiendo en el menú los controles que dispararán cadauno de los objetos que construimos en la tabla libros. Por ejemplo, la bús-queda de libros por palabras del nombre. Para ello, en el menú volvemos aseleccionar el control texto estático, arrastrándolo con el ratón a la zona delmenú en la que queremos situarlo. Hacemos clic sobre él con el botón de-recho del ratón, de modo que en la ventana de propiedades del control queaparece fijamos sus propiedades.

Pulsamos a continuación el botón Editar Opción, apareciendo la ventanaPropiedades de una opción de menú. Como título opcional escribimos Bus-car por Palabras. De entre las pistolas (es decir, funciones a disparar) elegi-mos Búsqueda, y como bala elegimos la búsqueda LIBROS-PAL.

e

Page 246: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Procedemos de este modo con todos los objetos de la tabla LIBROS quequeremos disparar desde el menú, eligiendo en cada caso las pistolas y lasbalas adecuadas. Por ejemplo, si queremos un control que lance un locali-zador, la pistola será localizador, y la bala será el localizador en particularque queremos lanzar, mientras que si queremos dar de alta un libro, la fun-ción será Formulario (Alta) y la pistola será el formulario que nos permita darde alta un libro (LIBROS-ALTA).

Al final obtendremos un menú para la tabla LIBROS.

04 Desarrollo básicode una aplicación

e

Page 247: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

246 247 VELAZQUEZ VISUAL

Menús Autoexec y OncloseCuando a uno de los objetos menú de un proyecto de Velázquez Visual sele asigna el identificador AUTOEXEC, dicho menú pasa a ser el menú dearranque del proyecto, convirtiéndose en la primera pantalla que verá apa-recer el usuario de la aplicación. Por otro lado, si asignamos el identificadorONCLOSE a un menú, éste se convierte en el menú de cierre del proyecto,con lo que será la última pantalla que verá aparecer el usuario al cierre dela aplicación. El menú ONCLOSE será autodisparable cuando se cierre laaplicación, pudiendo disparar desde él procesos y otras opciones que de-seemos ejecutar automáticamente al finalizar la aplicación.

Ejemplo: Creación de menús Autoexec y Onclose

A continuación vamos a crear el menú de arranque y el de cierre de una apli-cación. Para ello continuamos con la aplicación de libros del ejemplo ante-rior. En dicho ejemplo creamos el menú correspondiente a la tabla LIBROS,pero la aplicación cuenta con dos tablas más: AUTORES y EDITORES.

e

Page 248: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Vamos a agrupar las opciones a disparar de las tres tablas en dos menús:el de libros y otro que reúne autores y editores.

Vamos a crear a continuación un menú que llamaremos General y en el queincluiremos cuatro controles de texto. El primero va a ser el título del menú,de modo que pinchamos sobre el control texto estático en la barra de he-rramientas del editor del menú, lo arrastramos a la zona del menú en la quequeremos que aparezca, hacemos clic con el botón derecho del ratón y pul-samos el botón Editar opción. Como título opcional escribimos “Menú”, ycomo pistola elegimos NULA.

Creamos otro texto estático con el que vamos a lanzar el menú Libros, pro-cediendo de igual modo: como título opcional escribimos “Libros”, comopistola elegimos incluir carpetas menú y como bala elegimos el menú Libros.

Con el siguiente texto estático, que va a lanzar el menú Autores-Editores,escribimos el título opcional “Autores y Editores”, como pistola elegimos in-

04 Desarrollo básicode una aplicación

e

Page 249: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

248 249 VELAZQUEZ VISUAL

cluir carpetas menú y como bala el menú Autores-Editores. Por último in-cluimos un cuarto texto estático, que servirá para cerrar la aplicación, quellevará el título opcional “Salir” y con la pistola Cerrar aplicación.

El siguiente paso es el de crear el menú Autoexec. Para ello pulsamos el bo-tón Nuevo Objeto y de la Galería de objetos elegimos menú tipo formulario.En la pantalla de edición de menús pinchamos sobre el control texto está-tico, arrastrándolo con el ratón hasta la posición que queramos que ocupeen el menú.

e

Page 250: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Con el botón derecho sobre el control aparece la ventana de propiedadesdel control, en la que pinchamos sobre el botón Editar opción. En Titulo op-cional escribimos “Arrancando aplicación”, como pistola elegimos Menú,como primera bala elegimos el menú General y como segunda bala elegi-mos el menú Autores-Editores. También hemos de marcar la casilla auto-disparable. Este menú ha de tener como identificador AUTOEXEC para queal ejecutarse el mapa sea el menú que Velázquez Visual lo identifique comoel menú que ha de arrancar en primer lugar.

El menú Autoexec es el que va a disparar los menús de la aplicación, demodo que el menú General siempre se dispondrá en la zona izquierda de lapantalla y desde él podremos elegir que a la derecha aparezca el menú Li-bros o el Autores - Editores, así como salir de la aplicación.

04 Desarrollo básicode una aplicación

e

Page 251: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

250 251 VELAZQUEZ VISUAL

Ya sólo nos falta por crear el menú ONCLOSE. Para ello pulsamos el botónNuevo Objeto y de la Galería de objetos elegimos Menú tipo formulario. Enel editor de menús pinchamos con el ratón sobre el botón texto estático yarrastramos hasta el punto del menú en el que queremos que se encuentreel texto. Hacemos clic con el botón derecho sobre el control y aparecerá laventana Propiedades del control. Pulsamos el botón Editar opción y comoTítulo opcional escribimos “Gracias por usar la aplicación”, como pistolaelegimos NULA. Volvemos a pinchar sobre el botón texto estático, arras-trándolo hacia el menú. Pulsamos con el botón derecho sobre el control,volvemos a pulsar sobre el botón Editar opción y como Título opcional es-cribimos “Salir”. Como pistola elegimos Cerrar aplicación.

De este modo, cuando pulsemos la opción “Salir” del menú General, apa-recerá el menú Onclose, en el que debemos pulsar la opción “Salir” paraque se cierre la aplicación definitivamente.

SincronizaciónEn el menú Controles encontraremos la opción Sincronizar, mediante lacual podremos realizar la sincronización de controles (para ello haremosclic con el ratón sobre un control y seleccionaremos esta opción, con loque en el cuadro de diálogo se mostrarán los controles sincronizables conéste y los que ya han sido sincronizados. Seleccionando un control y pul-sando la opción del menú Controles / Sincronizar aparece la ventana desincronización.

e

Page 252: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Seleccionamos entonces con qué control queremos sincronizarlo activandola casilla de verificación.

Sincronización de rejillasLo que se pretende es utilizar en los menús una o varias rejillas en las queal cambiar un registro en la rejilla de la tabla maestra, cambie automática-mente el contenido de otro u otros controles de rejillas históricas de la mis-ma. También queremos que se puedan Disparar opciones de menú relacio-nadas con el registro marcado en la rejilla. Por ejemplo, si tenemos en elmenú una rejilla de pintores y por otro lado una opción de búsqueda deobras de un pintor, nos puede interesar que la opción de búsqueda se dis-pare cuando seleccionamos uno de los registros de la rejilla. Para que estosea posible necesitamos los siguientes objetos:

Una variable en memoria.

Un proceso.

Una rejilla de maestro.

Una rejilla de histórico.

Dos búsquedas.

Tendremos que seguir los siguientes pasos:

Crear una variable en memoria del mismo tipo y longitud que el campo có-digo de la tabla maestra.

04 Desarrollo básicode una aplicación

Page 253: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

252 253 VELAZQUEZ VISUAL

Crear un proceso con origen de lista (de la tabla maestra, PINTORES) en elque en primer lugar se lea la ficha seleccionada y posteriormente se asignea la variable anteriormente creada el contenido del campo código de dichaficha, es decir, el código del pintor.

Al crear la rejilla correspondiente a la tabla de datos maestra (PINTORES),activamos la casilla La selección ha cambiado y le asociamos el procesoque acabamos de crear. De este modo, cada vez que seleccionamos unpintor en la rejilla, se lanza el proceso y la variable se alimenta con el códi-go del pintor que esté seleccionado.

Crear una búsqueda en la tabla maestra, por ejemplo, por el índice NOM-BRE (Todo el fichero).

Crear la rejilla de la tabla de datos histórica (la de OBRAS del pintor).

Crear una búsqueda en la tabla de datos histórica (OBRAS) en la que el ín-dice de la misma sea el de la tabla de datos maestra (es decir, una bús-queda de obras por el índice autor). Como modo de búsqueda elegimosparte izquierda de la clave, sin pedir formulario, y finalmente, en los datosiniciales de la búsqueda como contenido inicial del campo se escribirá elnombre de la variable creada anteriormente.

Una vez realizados estos pasos, en el menú de tipo formulario se crearándos controles Búsqueda rejilla , uno correspondiente al de la tabla maes-tra y otro al de la tabla histórica, haciendo doble clic sobre el de la tablamaestra, y ejecutando la opción Controles/Sincronizar, se indicará a Veláz-quez con qué control habrá que sincronizarlo.

Obviamente, la sincronización puede realizarse entre más de dos rejillas detablas de datos.

Sincronización de un control texto o dibujo con una rejillaBásicamente serán los mismos pasos que en el punto anterior. El control detexto o de dibujo habitualmente disparará un proceso que influya sobre losregistros de la rejilla sincronizada.

Sincronización de árboles con controles de búsqueda rejillaSu funcionamiento es el mismo que el de la sincronización de rejillas.

Sincronización de casillerosEs similar a la sincronización de rejillas. Podemos verlo con un caso parti-cular en el que el casillero principal tenga asignado un proceso al hacer clicsobre él, de modo que se pase el código de la ficha a una variable global.El otro casillero (el sincronizado) debe ser alimentado por un proceso de ori-gen nulo en el que se cargará la lista por el índice del campo maestro, encuya resolución se utilizará esa variable global en memoria.

Búsqueda rejilla

Page 254: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Ejemplo: sincronización de controles en un menú tipo formulario

Con esta aplicación vamos a visualizar las ventas realizadas de un artículoentre unas determinadas fechas, previa selección de su correspondiente fa-milia, y un cliente.

En primer lugar debemos crear el esquema de tablas. Para ello seguimoslos siguientes pasos:

• Abrimos el Editor de Proyectos de Velázquez Visual.

• Una vez dentro del Editor de Proyectos, pulsamos el botón Esquemade tablas para crear las tablas y sus enlaces. En este caso el esquemaestá formado por tres tablas maestras y una maestra arbolada. Dichastablas se crean utilizando los botones Nueva tabla maestra y Nue-va tabla arbolada, situados en la parte derecha de la ventana del Esque-ma de Tablas.

• Una vez creadas las tablas debemos establecer los enlaces entre ellas.Para ello suponemos que un artículo sólo puede pertenecer a una fami-lia, mientras que a una misma familia pueden pertenecer muchos artícu-los: ARTÍCULOS es histórico de FAMILIAS. Por otro lado, un artículopuede aparecer en muchas ventas, mientras que una venta va a ser deun solo artículo, es decir, VENTAS es histórico de ARTÍCULOS. Por últi-mo, un cliente puede aparecer en muchas ventas, pero una venta se re-fiere a un solo cliente, luego VENTAS es histórico de CLIENTES.

04 Desarrollo básicode una aplicación

Esquema de tablas

Nueva tabla maestra

Nueva tabla arbolada

e

Cuestiones1. En la aplicación de libros que hemos desarrollado en los ejemplos

anteriores, podemos añadir al menú Autoexec un control texto conpistola nula cuyo Título opcional sea “Aplicación de librería”. ¿Cómoharíamos que el menú Autoexec se mantenga durante 3 segundosen pantalla?

2. Añadimos el campo Materia a la tabla LIBROS de nuestro proyectode librería y creamos una tabla arbolada que llamaremos MATERIAS,maestra de LIBROS. De este modo tendremos organizados los librospor materias.

3. Queremos que en el menú General aparezca una opción que sea“Materias”, de modo que, al seleccionarla, nos aparezca el árbol dematerias y con la opción de que al pinchar sobre un elemento del ár-bol, nos salga una rejilla con todos los libros correspondientes a esamateria.

Page 255: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

254 255 VELAZQUEZ VISUAL

Ahora vamos a crear los campos que deberá tener cada una de las tablas.Para ello seguimos los pasos siguientes:

Dentro del Editor de Esquemas hacemos doble clic sobre la tabla CLIEN-TES. Velázquez Visual mostrará la ventana con los componentes corres-pondientes a dicha tabla.

• Para introducir un nuevo campo, seleccionamos la carpeta Campos queestá dentro de la ventana anterior, y pulsamos el botón Nuevo cam-po. Velázquez Visual creará un nuevo campo. Editamos las propiedadesdel campo NOMBRE y sustituimos el nombre del campo por RAZON-SO-CIAL (para modificarlo pulsamos el botón F2) y pulsamos la tecla Intro.

• Debemos repetir los pasos para crear otro campo en la tabla CLIENTES.Las propiedades de dicho campo se presentan en la siguiente tabla (No-ta: ID se refiere al identificador del campo: el texto que podemos modi-ficar pulsando la tecla F2 y que se muestra en la ventana donde creamoslos nuevos campos):

Repetimos los pasos anteriores para crear el resto de campos en las otrastablas. En la tabla FAMILIAS no hay que añadir ningún campo, mientras queen ARTICULOS añadimos los campos siguientes.

ID Nombre Tipo Longitud

DNI CIF Alfa64 9

Nuevo campo

e

Page 256: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

En la tabla VENTAS añadimos los campos siguientes:

A continuación vamos a crear los objetos visuales para las distintas tablas:

• La tabla CLIENTES: contiene la rejilla CLIENTES que sólo mostrará loscampos Código y Nombre comercial, y el formulario CLIENTE-NUE-VO/MOD, que mostrará todos los campos creados en la tabla.

• La tabla FAMILIAS contiene la rejilla FAMILIAS que mostrará todos loscampos de la tabla, el árbol visor tabla arbolada FAMILIAS, el formularioFAMILIA-NUEVA/MOD que incluye todos los campos de la tabla, y adi-cionalmente en la tabla se incluye el objeto multi-icono ICOS-FAMILIASpara el árbol visor de tabla arbolada.

• En la tabla ARTICULOS incluimos la rejilla ARTÍCULOS, que muestra loscampos Código, Nombre, Familia y PVP, el formulario ARTÍCULOS -NUEVO/MOD que incluye todos los campos de la tabla y la búsquedaARTÍCULOS-COD.

La tabla LINEAS contiene la rejilla LINEAS-FECHA, que muestra todos loscampos de la tabla, el formulario LINEA-NUEVA/MOD que contiene todoslos campos de la tabla, y la búsqueda LINEAS-COD.

• También creamos una carpeta dibujo en la que se incluirán los dibujosFONDO y SALIR.

El siguiente paso consiste en crear el menú sincronizado. Dicho menú, queserá el de inicio de la aplicación (AUTOEXEC), va a tener las siguientes pro-piedades.

04 Desarrollo básicode una aplicación

ID Nombre Tipo Longitud

PVP Precio Numérico 4 (2 decimales)

FOTO Foto Objeto Dibujo

ID Nombre Tipo Otras propiedades

FECHA Fecha Fecha Contenido inicial: fHoy()

CANT Cantidad Numérico Longitud: 4, Decimales: 2, Contenidoinicial: %ARTICULO.PVP%

IMP Importe Numérico Longitud: 4, Decimales: 2, Contenidoinicial:fRedondear(%CANT%*%PRECIO%, 2 )

e

Page 257: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

256 257 VELAZQUEZ VISUAL

Vamos a describir los diferentes elementos que va a incluir y sus correspon-dientes propiedades. Los iremos incluyendo desde la ventana de Edición delmenú formulario (accedemos a ella haciendo doble clic sobre el menú).

e

Page 258: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Mosaico: será usado para el fondo del menú.

Texto estático: este texto presentará el título del menú. Entramos en laventana de propiedades del control, donde pulsamos el botón Editar Op-ción. Aparecerá la ventana propiedades de una opción de menú y en ellaescribimos como Título opcional “Informática Market” y como pistola elegi-mos Nula.

04 Desarrollo básicode una aplicación

Mosaico

Texto estático

e

Page 259: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

258 259 VELAZQUEZ VISUAL

Texto estático: lanzará las altas de los elementos de FAMILIAS. Si en elcuadro pulsamos el botón Editar Opción aparece la ventana de propieda-des, en la que escribimos FAMILIAS como Título opcional, mientras que lapistola será Formulario (Alta). La bala a usar es el formulario FAMILIA-NUE-VA/MOD.

Texto estático: se encargará de lanzar las altas de Clientes. Para ello,en las propiedades del control, pulsamos el botón Editar Opción. Apare-cerá entonces la ventana de propiedades de una opción de menú en lacual escribimos CLIENTES en Título opcional, elegimos como pistola laopción formulario (alta), mientras que la bala es el formulario CLIENTE-NUEVO/MOD.

Texto estático

e

Page 260: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Texto estático: este control se va a encargar de lanzar el formulario dealta correspondiente a Artículos. Procedemos igual que antes, eligiendo eneste caso como bala el formulario ARTÍCULOS-NUEVO/MOD.

Texto estático: control que lanzará el formulario de altas de Ventas. Eneste caso hemos de elegir como bala el formulario VENTA-NUEVA/MOD.

El resto de etiquetas del menú tienen la misma ventana de propiedades,mientras que los Títulos opcionales que hemos de escribir al pulsar el bo-tón Editar opción son los siguientes:

1) Seleccione una familia haciendo clic.

2) Seleccione un artículo haciendo clic o pulse en.

3) Seleccione la fecha desde.

4) Seleccione la fecha hasta.

5) Esta rejilla muestra las ventas según las condiciones seleccionadas.

6) Seleccione un cliente haciendo clic o pulse en.

Árbol tabla completa: control para visualizar el árbol de la tabla FAMI-LIAS.

04 Desarrollo básicode una aplicación

Texto estático

Árbol tabla completa

e

Page 261: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

260 261 VELAZQUEZ VISUAL

Calendario: en nuestro menú vamos a incluir dos controles calendario.Para ello debemos crear primeramente dos variables, utilizadas para definirlas dos fechas entre las que se acotarán las ventas. Procedemos del si-guiente modo:

En el Editor de Proyectos, pulsamos la tecla Insert dentro de la zona blan-ca correspondiente al área denominada Variables. Velázquez Visual mostra-rá la ventana Propiedades de la variable global, en la que creamos las va-riables FECHA DESDE y FECHA HASTA.

PROPIEDADES DE LA VARIABLE GLOBAL FECHA DESDE

Calendarioe

Page 262: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

• Una vez creadas las variables globales podemos crear los dos controlescalendario, que tendrán las siguientes propiedades:

04 Desarrollo básicode una aplicación

PROPIEDADES DE LA VARIABLE GLOBAL FECHA HASTA

e

Page 263: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

262 263 VELAZQUEZ VISUAL

Búsqueda con rejilla: con este control vamos a incluir una rejilla cuyoselementos sean el resultado de una búsqueda concreta. En el cuadro depropiedades del control aparecen todas las búsquedas del proyecto quetengan asociada una rejilla como objeto de salida.

Búsqueda con rejilla

e

Page 264: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Casillero alimentado por proceso: previamente a la creación de estecontrol debemos crear el casillero y el proceso. En primer lugar, vamos acrear dos procesos: uno que nos almacene en una variable el artículo queseleccionemos (ARTICULOS-CLIC), y otro que permita visualizar en el casi-llero los artículos (CASILL-ARTIC-FAM).

Proceso ARTICULOS-CLIC:

Creamos una variable (ARTICULO-CURSO) que tengan las siguientes pro-piedades.

Creamos el proceso (objeto Proceso, dentro de la ventana Galería de obje-tos), que tendrá las siguientes propiedades.

04 Desarrollo básicode una aplicación

Casillero alimentado por pro-ceso

e

Page 265: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

264 265 VELAZQUEZ VISUAL

El proceso almacena el contenido del campo CODIGO de la tabla ARTICU-LOS (es decir, el registro seleccionado) en la variable creada anteriormente(ARTICULO-CURSO).

Proceso CASILL-ARTIC-FAM

Creamos una variable global (FAMILIA-CURSO) que almacenará la familia se-leccionada en un momento determinado. Tendrá las siguientes propiedades.

e

Page 266: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Vamos a realizar una sincronización entre el árbol tabla completa de FAMI-LIAS y el casillero de ARTICULOS, de modo que crearemos una búsquedadentro de la tabla ARTICULOS (denominada CASILL-ARTICULOS-FAM)que tendrá las siguientes propiedades.

El índice FAMILIAS que vamos a utilizar en la búsqueda tiene las propieda-des que se presentan a continuación.

Vamos a seleccionar como Modo a buscar la opción Entre límites. Ahora sepretende sincronizar el árbol tabla completa FAMILIAS con el casillero de

04 Desarrollo básicode una aplicación

e

Page 267: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

266 267 VELAZQUEZ VISUAL

ARTICULOS, para que cada vez que en el árbol se selecciona una familiaaparezcan los artículos pertenecientes a dicha familia. Lo que ocurre es queel control árbol visor no permite la herencia, es decir, si por ejemplo tene-mos la familia Monitores, y en un segundo nivel tenemos la familia de Mo-nitores de 17” y la familia de Monitores de 19”, cuando hagamos clic en Mo-nitores no aparecerán los monitores de 17” y de 19” debido a la falta de he-rencia en el árbol.

Para solucionar este inconveniente se crea la búsqueda por el índice FAMI-LIAS, y como límite inicial tendrá el valor de la variable FAMILIA-CURSO(que gracias al proceso FAMILIA-CURSO tendrá el valor de la familia en laque estemos) y como límite final tendrá el valor de la variable más la cade-na ZZZZZZZ, para indicarle que incluya todos los pertenecientes a la fami-lia. De esta manera se consigue la herencia.

El proceso tendrá el siguiente aspecto:

En él se llama a la búsqueda creada antes, y se añade un retorno para quedevuelva al resultado (aunque realmente no lo vamos a visualizar en la reji-lla de ARTICULOS, sino en el casillero, es obligatorio especificar un recur-so para que el proceso funcione correctamente, aunque no sea el que use-mos realmente).

Ya podemos crear el casillero, que tendrá las siguientes propiedades:

e

Page 268: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Ahora creemos el control Casillero alimentado por proceso, para lo cual,dentro del menú formulario AUTOEXEC, hacemos clic sobre el control Ca-sillero alimentado por proceso, que tendrá estas propiedades:

Búsqueda con rejilla: vamos a crear el control que nos mostrará la reji-lla de ventas.

04 Desarrollo básicode una aplicación

Búsqueda con rejilla

e

Page 269: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

268 269 VELAZQUEZ VISUAL

• En primer lugar creamos, dentro de la tabla de VENTAS, una búsqueda lla-mada VENTAS-FECHAS-ART-CLI, que tiene las siguientes propiedades:

La búsqueda se compone de los siguientes índices:

a) Índice Fecha: que tiene el Modo a buscar Entre límites. Como límite ini-cial la variable FECHA-DESDE y como límite final la variable FECHA-HASTA.

b) Índice ARTICULO: se cruzará con el índice anterior. Como Modo a bus-car tiene Parte izquierda clave por el campo ARTICULO, y como condi-ción activa tiene la variable ARTICULO-CURSO.

c) Finalmente se cruza el índice CLIENTE que como Modo a buscar tieneParte izquierda clave por el campo CLIENTE, y como condición activatiene la variable CLIENTE-CURSO.

De esta manera se pretende condicionar la búsqueda de las ventas a la se-lección de un artículo y un cliente, además del intervalo de fechas.

• Procesos adicionales: necesitamos dos procesos (ARTICULOS-TODOSy CLIENTES-TODOS), que tendrán las siguientes propiedades:

e

Page 270: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Estos procesos irán asociados, dentro del menú formulario AUTOEXEC, ados etiquetas.

04 Desarrollo básicode una aplicación

e

Page 271: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

270 271 VELAZQUEZ VISUAL

Estas etiquetas van a continuación de las etiquetas “Seleccione un artículohaciendo clic o pulse en” y “Seleccione un cliente haciendo clic o pulse en”,que ya habíamos creado antes.

Con estos procesos se consigue que, en ejecución, si el usuario pulsa so-bre alguna de esas opciones, aparezcan todas las ventas de todos los artí-culos y todos los clientes.

Finalmente, realizaremos las distintas sincronizaciones entre controles. Pa-ra ello, dentro de la ventana de edición del menú tipo formulario, debemosseguir los siguientes pasos:

a) Seleccionamos el control que vamos a sincronizar.

b) Pulsamos la opción de menú Controles/Sincronizar…, apareciendo laventana Sincronizar a.

c) Dentro de la ventana Sincronizar a, seleccionamos el check del controlque va a sincronizarse.

e

Page 272: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Los controles que se van sincronizar son los siguientes:

Con esto podemos dar por terminado el ejemplo.

ResumenLos menús son los objetos encargados de mostrar al usuario las opciones deuna aplicación, de modo que, cuando el usuario elige una de las opcionesmostradas, el menú dispara el objeto asociado, provocando su ejecución.

Cada opción de menú consta de una pistola y una o dos balas. La pistolaestablece el tipo de acción a realizar, mientras que las balas son los obje-

04 Desarrollo básicode una aplicación

Control Sincroniza a

Árbol tabla completa: FAMILIAS Casillero: ARTICULOS

Calendario: FECHA-DESDE Búsqueda: VENTAS-FECHAS-ART-CLI

Calendario: FECHA-HASTA Búsqueda: VENTAS-FECHAS-ART-CLI

Búsqueda rejilla: CLIENTES-COD Búsqueda: VENTAS-FECHAS-ART-CLI

Casillero: ARTICULOS Búsqueda: VENTAS-FECHAS-ART-CLI

e

Page 273: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

272 273 VELAZQUEZ VISUAL

tos que protagonizan la acción. Por ejemplo, al elegir la pistola Búsqueda,podremos elegir como bala cualquiera de las búsquedas definidas en elproyecto.

Hay dos tipos de menús: arbolados y tipo formulario. Los arbolados pre-sentan las opciones de la aplicación con apariencia de árbol de directorios,mientras que los menús tipo formulario permiten usar la pantalla completapara colocar controles que disparen las distintas opciones del menú.

En los menús disponemos de controles que nos permiten editar el conteni-do de variables, ver rejillas, árboles, casilleros, etc.

La sincronización permite actualizar el contenido de controles en función delos cambios realizados en el contenido de otros controles.

Velázquez Visual necesita un menú de arranque: el menú Autoexec. En elcaso de que la aplicación pida usuario, podemos definir un menú para ca-da usuario, sin que necesite ser el Autoexec. También podemos incluir en elproyecto un menú de finalización: el menú Onclose.

4.4.6. Localizador

El localizador es un objeto que permite, en tiempo de ejecución, encontrarun registro de una tabla de datos. En ejecución, se presenta una rejilla, uncombo box con índices por los que se puede realizar la búsqueda y un con-trol de edición en el que, a medida que el usuario vaya escribiendo una ca-dena, el cursor en la lista se sitúa en el registro que contenga dicha cade-na, en el campo del índice por el que se realice la búsqueda. Un ejemplo esen la que se presenta un localizador de libros en el que podemos encontrarun registro (libro) por cualquiera de los índices de la tabla LIBROS que que-ramos (más adelante haremos una matización al respecto).

Page 274: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

El localizador se puede disparar desde una opción de menú, desde un bo-tón de formularios o desde un proceso.

Desde una opción de menú, al seleccionar un registro nos abre el formula-rio de modificación asociado a la rejilla usada en el localizador.

Desde un botón de formularios nos trae el registro al formulario que esta-mos editando y que debía tener un campo enlazado al de la tabla del re-gistro.

Desde un proceso no aparece ni el combo del índice ni el edit para escribirel dato a buscar, sino que lo tenemos que seleccionar directamente.

Para crear un localizador en nuestro proyecto, pinchamos en el botón Nue-vo objeto y dentro de la Galería de objetos elegimos Localizador. Ob-tendremos el siguiente cuadro de propiedades:

Las propiedades del localizador son las siguientes:

Nombre: nombre que damos al localizador.

Tabla de datos: tabla de datos sobre la que va a actuar.

Rejilla: identificador de la rejilla que se desea presentar en el localizador. Só-lo aparecerán las rejillas definidas para la tabla de datos especificada en elparámetro anterior (la tabla sobre la que trabaja el localizador).

04 Desarrollo básicode una aplicación

Nuevo objeto

Page 275: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

274 275 VELAZQUEZ VISUAL

Estilos:

Privado: el localizador sólo estará disponible donde el programador lo esti-me oportuno.

Todos los índices: en tiempo de ejecución el usuario podrá localizar regis-tros por cualquiera de los índices creados en la tabla de datos. Si desacti-vamos esta opción, se activarán los botones de selección de índices.

Memorizar último índice: si se activa esta propiedad, en ejecución, el índicede búsqueda que se presente por defecto en el localizador será el que ha-ya sido seleccionado la última vez que se hubiese disparado dicho locali-zador.

Botón para altas: activada esta opción, en la ventana del localizador apare-cerá un botón que abre el formulario de altas asociado a la rejilla del locali-zador.

Los botones que se encuentran sobre la lista de índices cuando desactiva-mos la opción Todos los índices son:

Añadir : permite añadir a la lista un índice de la tabla de datos. Se abriráuna ventana con aquellos índices que no estén incluidos en la lista de índi-ces del localizador. Para seleccionar uno, haremos doble clic sobre él o loseleccionamos y pulsamos el botón Aceptar.

Eliminar : quita de la lista de índices el que esté seleccionado.

Mover hacia arriba : desplaza una posición hacia arriba el índice selec-cionado.

Mover hacia abajo : desplaza una posición hacia abajo el índice selec-cionado.

El índice que se encuentre en la primera posición de la lista será el que sepresente por defecto en el combo box en tiempo de ejecución, si el usua-rio abre dicho combo, el resto de los índices aparecerán en el orden defini-do por el programador.

Tenemos también manera de crear automáticamente un localizador a partirde una rejilla. Seleccionamos la rejilla de la tabla que nos interese y elegi-mos la opción del menú Objetos/Crear localizador con rejilla.

Nos creará entonces un localizador con el mismo identificador que la rejillade partida, que tiene asignado ésta para presentarlo y con todos los índicesincluidos por defecto.

Además, los localizadores ofrecen la posibilidad de subindexar. Veamos loque es con un ejemplo. Supongamos que tenemos un mapa con dos ta-blas: PROVINCIAS y POBLACIONES. Es claro que el diseño debe ser el si-guiente:

Añadir

Eliminar

Mover hacia arriba

Mover hacia abajo

Page 276: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

En nuestra aplicación, la tabla POBLACIONES es submaestra de PROVIN-CIAS. El índice CODIGO de la tabla POBLACIONES está compuesto por loscampos PROVINCIAS y CÓDIGO.

En el mapa vamos a incluir una variable global en la que almacenamos elcódigo de la Provincia por defecto con la que trabaja el usuario. La llama-remos PROVINCIA.

Creamos a continuación un localizador, asociándolo a la tabla POBLACIO-NES y desactivamos el check Todos los índices. En la lista de índices de latabla POBLACIONES hacemos doble clic sobre el índice CODIGO, abrién-dose el cuadro siguiente.

04 Desarrollo básicode una aplicación

Page 277: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

276 277 VELAZQUEZ VISUAL

Lo que pretendemos es restringir el campo PROVINCIAS, de modo quecuando escribamos un código de población en el localizador nos busquesólo en la Provincia por defecto (en la provincia de la población y no entodas).

Para que Velázquez sepa cuál es la Provincia por la que tiene que buscar,le pasamos el código de la misma mediante la variable $PROVINCIA$. To-do esto lo hacemos pinchando en el botón Ampliar . Entonces nos apa-recerá el Asistente para edición de fórmulas, en el que seleccionamos la va-riable global $PROVINCIA$.

La subindexación no podrá ser utilizada en índices de palabras o de apro-ximación alfabética ternaria.

Ampliar

Page 278: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

ResumenEl localizador es un objeto que permite, en tiempo de ejecución, encontrarun registro de una tabla de datos por cualquiera de los índices de la tabla.

Los localizadores ofrecen la posibilidad de subindexar, recurso que nos per-mite encontrar registros haciendo uso de índices formados por dos o máscomponentes.

4.5 Ejecución (VRunner)

4.5.1. Interfaz del Ejecutor (VRunner)

ArchivoCuando ejecutamos un mapa de Velázquez Visual con VRunner, además delos menús creados por nosotros dentro de la aplicación, tenemos otras op-ciones accesibles sin necesidad de programarlas.

En el menú Archivo tenemos las siguientes opciones:

Abrir (Ctrl+A) un mapa. Ya sabemos que hay dos maneras de guardar unproyecto, el formato .MAP y el formato .VAM. Con VRunner podremos abrirlos dos.

La opción Registro ficheros... nos muestra una ventana donde podemos verlos ficheros de los mapas que tenemos abiertos. Nos dice en qué estadoestán y en qué directorios hay archivos de la aplicación.

04 Desarrollo básicode una aplicación

Page 279: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

278 279 VELAZQUEZ VISUAL

Si seleccionamos uno de los archivos y pulsamos Ver fichero, nos sale unaventana en la que se nos indica el estado del fichero (correcto o incorrec-to) y el tipo de archivo que es (si es un fichero de datos, índices, variables,etc.).

Partir contenedor: el contenedor es un archivo donde se guardan camposde tipo objeto de tablas (campos de tipo texto, texto enriquecido, dibujo,objeto OLE y e-mail). A partir de la versión 5.0 se genera un contenedor porcada tabla que contenga campos objeto. En versiones anteriores esto noera así, pues existía un único contenedor por aplicación. Esta opción seusará para convertir aplicaciones de versiones anteriores, es decir, para quese genere, a partir del único contenedor que tienen, uno por cada tabla. Es-ta opción solamente estará activada si el usuario tiene un nivel de privilegioigual o superior a 92.

Podemos desactivar la opción Transacciones, que veremos ampliamentemás adelante, aumentando la velocidad de la aplicación pero disminuyen-do la seguridad de los datos. Desactivar esta opción puede ser peligrosopara la integridad de los datos.

Page 280: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Procesos en ejecución presenta un cuadro de diálogo con los procesos queVelázquez Visual está realizando en segundo plano. Esta opción estaráinactiva si no se están ejecutando procesos en segundo plano.

Podemos abortar un proceso desde esta ventana pulsando el botón abor-tar. Si hay fichas bloqueadas las desbloqueará pero no realizará modifica-ción alguna a partir de este punto. Solamente pueden ser abortados losprocesos en los que así se haya programado. Para ello, deben tener la fun-ción de proceso: Punto donde se puede abortar.

Configurar impresora: al pinchar en esta opción aparece el cuadro de diálo-go configurar impresión. Podemos seleccionar una impresora, el tamañodel papel, su orientación y las propiedades de la impresora seleccionada.

Asignar impresoras: pinchando en esta opción aparece la ventana Configu-rar impresoras: en ella se conectan las impresoras lógicas con sus corres-pondientes impresoras físicas y sus características especiales de impresión(orientación del papel, tamaño del mismo, número de copias, etc.).

El programador asigna, a cada informe, un tipo de impresora adecuado. Es-ta etiqueta con la que se realiza la asignación se llama impresora lógica. Porejemplo, el programador puede haber creado una impresora lógica para do-cumentos que se vayan a imprimir en formato DIN-A4, otra para facturas,etc.

Al ejecutar esta opción tendremos que asignar la impresora física corres-pondiente a cada impresora lógica definida por el programador, e inclusopodemos seleccionar la calidad en la que va a ser impreso, el número decopias, etc.

Estas conexiones podemos cambiarlas siempre que lo deseemos y si que-remos que sean permanentes sólo tendremos que activar la opción Esta-blecer las nuevas conexiones la próxima vez que se ejecute el programa.Así, cada vez que vayamos a imprimir un informe no tendremos que andarcambiando de impresora según el tipo de informe de que se trate.

Cuando se ha conectado una impresora lógica a una física, al lanzar el in-forme éste será enviado directamente a la impresora, no presenta el cuadrode diálogo de selección de impresora de Windows (tm).

04 Desarrollo básicode una aplicación

Page 281: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

280 281 VELAZQUEZ VISUAL

Preparar página: en el cuadro de diálogo mostrado en esta opción podemosdefinir los márgenes de impresión, centrar el informe y elegir las unidadesde medida para los documentos (pulgadas o centímetros).

OpcionesEn este menú podremos configurar los menús, los usuarios y ejecutar elproyecto.

Minimizar menús: permite minimizar el menú activo cuando el usuario selec-ciona una opción del mismo. Cuando un menú es minimizado, la ventana deéste quedará reducida solamente a una pequeña porción de la barra de títu-los del mismo, y se situará en la parte inferior izquierda de la pantalla.

Configuración: en esta opción se declaran los caracteres para formatear va-lores numéricos. El sistema propone para el separador de miles el símbolopunto (.) y para los decimales una coma (,).

La opción Milisegundos retardo autocompletar permite, en campos NOM-BRE de una tabla maestra, que al escribir en el control una cadena trans-curridos los milisegundos establecidos en esta opción el programa presen-te automáticamente el primer registro de la tabla maestra cuyo campo nom-bre comience por dicha cadena. La parte añadida quedará seleccionada,con lo que, si el usuario prosigue la escritura, la parte seleccionada serásustituida por los nuevos caracteres que el usuario escriba.

Esto sólo funcionará así si hemos activado la propiedad Autocompletar enel control de edición del maestro.

Usuarios: pinchando esta opción aparece la ventana Edición de usuarios, enella se crean, modifican y eliminan usuarios y grupos de usuarios. En la lis-

Page 282: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

ta de la izquierda Velázquez Visual crea un grupo llamado supervisores enel que incluye a la persona que arranca el Proyecto por primera vez. Estarádesactivada si la aplicación tiene configurado no pedir usuario.

En la lista de la derecha aparecen los usuarios que pertenecen a un grupoconcreto. En cada grupo puede haber un número ilimitado de usuarios. Lossupervisores del Proyecto pueden dar de alta nuevos grupos y nuevosusuarios, y en los casos que consideren oportunos pueden modificar aotros usuarios, reconstruir el sistema, crear otros supervisores, etc.).

El usuario que tenga la casilla supervisor activada podrá crear nuevos gru-pos y nuevos usuarios, además serán los únicos que puedan reconstruir elsistema tras haberse producido una caída del mismo. Un usuario no podrádar de alta, modificar o borrar a otros usuarios con un nivel privilegio mayoro igual al suyo.

Las opciones de la ventana Usuario son:

04 Desarrollo básicode una aplicación

Page 283: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

282 283 VELAZQUEZ VISUAL

Nombre: nombre del usuario.

Palabra clave: “contraseña” que va a utilizar dicho usuario para entrar en elprograma.

Privilegio: nivel de privilegio que tendrá el usuario para acceder a la informa-ción del sistema. Será un número entre 1 y 100. En el Navegador existenciertas opciones de listas ya preprogramadas que estarán activadas o de-sactivadas según el nivel de privilegio de los usuarios. Éstas son: Modificarcampo, Modificar campo si..., Fundir fichas, Activar/Desactivar transaccio-nes, Partir contenedor por tabla, Exportar ASCII, Supervisor: un usuario nun-ca podrá crear usuarios con un nivel de privilegio superior al suyo.

Grupo de usuarios: grupo al que pertenece el usuario.

Menú inicial: menú a ejecutar cuando el usuario arranque la aplicación. Po-dremos crear uno para cada usuario o para cada grupo de usuarios. Estoes muy útil cuando tenemos diferentes tipos de usuarios: gestores, opera-dores de copia, supervisores, usuarios finales, público general, etc. Sólo es-tarán disponibles aquellos menús que el programador haya creado comopúblicos, es decir, que no haya activado la propiedad de menú Privado.

Estilos: si el programador ha creado estilos de usuario éstos se mostraránen esta parte de la ventana, pudiendo el usuario administrador asignar losestilos que desee a cada usuario. Gracias a los estilos y mediante condi-ciones, un usuario podrá o no tener acceso a determinadas opciones delprograma, como poder dar de alta, eliminar o modificar registros, ver rejillaso determinadas columnas de rejillas, tener acceso a opciones de menú, etc.

Perfiles: éstos se definen en el personalizador y determinan la presentaciónespecífica de objetos personalizables para cada usuario final o para todoslos usuarios de la aplicación. De este modo, por ejemplo, personalizamosuna misma aplicación a distintas empresas. Para tener acceso a esta op-

Page 284: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

ción, la aplicación debe ser ejecutada por cualquier usuario que haya sidodado de alta como Administrador que tenga nivel de privilegio suficiente co-mo para poder modificar a otros usuarios.

Si se ha creado alguna personalización, aparecerá listada en el control. Portanto, cada usuario puede tener sus propios informes y dibujos personali-zados. A cada usuario de la aplicación se le puede asignar solamente unapersonalización, pero una misma personalización puede ser asignada a di-ferentes usuarios. Además, cuando al usuario se le asigna un perfil, tendráa su disposición tanto los objetos que se han creado para todos los usua-rios como los que se hayan creado en la personalización asignada.

Si existe alguna personalización con el mismo nombre que el proyecto (el fi-chero .MAP o .VAM) ésta será cargada automáticamente para todos losusuarios. Si se han creado personalizaciones con nombre diferente al de laaplicación, habrá que, una vez ejecutada la aplicación por un usuario quetenga privilegio de administrador, ejecutar la opción del menú Opciones /Usuarios y a cada usuario que se le quiera asignar la personalización indi-cárselo en el apartado Perfiles.

Ejemplo: Estilos de usuario

Supongamos una aplicación para una librería, en la que tenemos tres ta-blas: LIBROS, AUTORES y EDITORES, con sus correspondientes objetosvisuales (rejillas, formularios, búsquedas, menús, etc.). Vamos a crear un es-tilo de usuario que no permita dar de alta libros a los usuarios que figurencon ese estilo.

Abrimos el mapa de la aplicación, y en el menú Edición/Propiedades delproyecto pinchamos en la pestaña Estilos y seleccionamos el check Pedirusuario.

04 Desarrollo básicode una aplicación

Si se han creadopersonalizaciones durante laejecución de la aplicación,para que éstas puedan sercargadas hay que cerrar laaplicación, estandodisponibles al volver aejecutarla. Esto esimportante, por ejemplo, si laaplicación se ejecuta desdeun servidor (aplicacionesque suelen estarcontinuamente enfuncionamiento); no bastasalir de la aplicación comousuario para que aparezcanlos nuevos perfiles, sino quese ha de reiniciar laaplicación.

ADVERTENCIA

e

Page 285: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

284 285 VELAZQUEZ VISUAL

Una vez hecho esto, en el menú Edición / Estilos de usuario elegimos conel ratón el número que queramos para el estilo y pulsamos el botón Modifi-car. En la zona de edición que aparece escribimos el nombre que queramosdarle al estilo, en nuestro caso escribimos “no puede dar de alta libros”.

El siguiente paso es introducir la condición por la cual el formulario para al-tas de libros no estará activo si el usuario tiene el estilo “No puede dar dealta libros”. Tal condición la fijamos en la condición activo del formulario,para lo cual en la ventana propiedades del formulario activamos la casillaCondición activo.

e

Page 286: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Aparecerá entonces el Asistente de Edición de Fórmulas, en el que introdu-cimos la condición.

La condición es fUserFlag(1)!1. La función fUserFlag() devuelve el estilo deusuario cuyo número sea x. En nuestro caso, fUserFlag(1) devuelve el esti-lo “No puede dar de alta libros”. Entonces, el formulario estará activo (con-dición de activo) si el estilo de usuario “No puede dar de alta libros” es dis-tinto (distinto de se simboliza con !) a 1 (1 es verdadero, 0 es falso), es de-cir, si el estilo de usuario no es “No puede dar de alta libros”.

Aceptamos todo y ejecutamos la aplicación. En el ejecutor vamos a la op-ción de menú Opciones/Usuarios, apareciendo la ventana de Edición deusuarios, en la que elegimos el usuario al que vamos a darle el estilo. Apa-rece entonces la ventana Usuario en la que hemos de seleccionar la casillacorrespondiente al estilo que acabamos de crear y que queremos darle alusuario.

Cuando ahora el usuario intente dar de alta un libro en el menú de libros, elbotón Aceptar del formulario estará inactivo, es decir, el usuario no puededar de alta libros.

VerSi la opción Barra de Herramientas está seleccionada, se muestra la barrade herramientas, con sus botones correspondientes, en la parte superior dela pantalla.

Si la opción Barra de Estado está seleccionada, se muestra la barra de es-tado en la parte inferior de la pantalla.

04 Desarrollo básicode una aplicación

e

Page 287: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

286 287 VELAZQUEZ VISUAL

Si la opción Pantalla completa (F11) está seleccionada, no se verá ni el mar-co del Ejecutor ni el menú de opciones del mismo.

Si en nuestra aplicación se ejecutan funciones de Correo electrónico, po-dremos activar la opción Display Out (o pulsar el botón Bandejas Emailde la barra de herramientas) para ver los mensajes enviados y recibidos.Una vez ejecutada, aparecerá una ventana como la siguiente:

En ella se informa sobre los mensajes enviados y recibidos, número demensajes que no han podido ser enviados y sobre el estado de la conexión.

VentanaDesde este menú podemos organizar la distribución en la pantalla de lasventanas que tengamos abiertas. Además de los modos típicos de organi-zación de ventanas de Windows (cascada, mosaico horizontal, mosaicovertical) incluye otra forma de visualización, llamada Organizador.

Mediante esta forma de visualización todas las ventanas que estén abiertasse organizarán a modo de separadores (en la parte inferior izquierda de lasmismas). Así, para cambiar de ventana, simplemente haremos clic con el ra-tón sobre la pestaña correspondiente.

Otra forma de activar el organizador es pulsando el botón Organizadorde la barra de herramientas.

Bandejas E-mail

Organizador

Page 288: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Así es como se ve un programa ejecutado con el organizador:

? (Ayuda)

Esta ventana, además de los datos de Ática Software y el copyright, nos dainformación de la aplicación que se encuentra en ejecución, en qué Versiónse encuentra ésta, el nombre de su desarrollador y su Nº de Licencia.

4.5.2. Navegación en el ejecutor

El Navegante es una utilidad que Velázquez Visual ofrece a los usuarioscuando se encuentran utilizando una rejilla. El diseñador del proyecto no tie-ne que realizar ni configurar nada para que esté disponible.

04 Desarrollo básicode una aplicación

Page 289: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

288 289 VELAZQUEZ VISUAL

Como su nombre indica, permite navegar por la información contenida enlas distintas tablas de datos a través de los enlaces declarados. Partiendode una rejilla origen se puede ir obteniendo información asociada de formarápida y simple.

Las opciones del Navegante se dispararán desde el menú Navegante. Tam-bién disponemos de tres botones en la parte inferior de la rejilla que reali-zan la misma función: Maestros..., Históricos… e Históricos detodos... Con ellos podemos cargar los maestros de los registros de la reji-lla, podemos movernos a históricos de un registro de la rejilla o a históricosde todos los registros de la rejilla.

Los resultados de las operaciones realizadas con el Navegante son visuali-zados en una nueva rejilla.

El Navegante puede utilizarse múltiples veces sin ninguna limitación. Pode-mos combinar varias listas y utilizar de nuevo el Navegante con los resulta-dos obtenidos, y así sucesivamente. Sin embargo, sí podemos condicionarla navegación a históricos en la programación, limitando con condicionesimpuestas por nosotros impidiendo o permitiendo al usuario navegar haciaciertas tablas.

Opciones del Navegante

Maestros

Al seleccionar la opción Maestros… o al pulsar el botón correspondienteaparece un cuadro de diálogo donde podemos elegir una de las tablasmaestras de la lista actual y una rejilla para poder ver los registros de la ta-bla maestra que están siendo apuntados por los registros de la lista actual.

Por ejemplo, si nos encontramos en una lista de modelos de automóviles(histórico de marcas de automóviles), podemos obtener mediante esta op-ción una lista con las marcas (nos movemos al maestro). Al navegar haciamaestro aparecerán todos los maestros de todos los registros de la rejillade la que partimos.

Sólo aparecen en elnavegador las rejillas quehemos creado comopúblicas. Si todas las rejillasde una tabla fuesenprivadas, los usuarios nopodrían usar la navegaciónpara ir a esa tabla. Esto esaplicable tanto a lanavegación a maestroscomo a históricos.

ADVERTENCIA

Maestros

Históricos

Históricos de todos

Page 290: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

HistóricosAl seleccionar la opción Históricos… o al pulsar el botón correspondienteaparece un cuadro de diálogo donde se puede elegir una de las tablas his-tóricas de la lista actual y una rejilla donde poder ver los registros de la tablahistórica que están siendo apuntados por el registro seleccionado de la listaactual. Si no está seleccionado un registro, esta opción no estará disponible.

Por ejemplo, si nos encontramos en una lista con países (maestro), pode-mos obtener gracias a esta opción todas las ciudades (histórico) del paísque tengamos seleccionado.

Históricos de todosAl seleccionar la opción Históricos de todos…, o al pulsar el botón correspon-diente, aparece un cuadro de diálogo donde se puede elegir una de las tablashistóricas de la lista actual y una rejilla donde poder ver todos los registros dela tabla histórica que están siendo apuntados por los registros de la lista actual.

04 Desarrollo básicode una aplicación

Page 291: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

290 291 VELAZQUEZ VISUAL

Por ejemplo, si nos encontramos en una lista de Provincias (maestro), po-demos ver todas las ciudades (histórico) de todas las Provincias de la lista.

4.5.3. Transacciones

Velázquez Visual trabaja en modo transaccional, tanto en su versión basa-da en servidor de disco (ejecución con VRunner) como en su versión clien-te-servidor.

Podríamos definir una transacción como una operación que le pedimos anuestra aplicación, que implica escritura en disco, por ejemplo, si llevamosa cabo un proceso de facturación, estaríamos llevando a cabo una tran-sacción. Para realizarla hemos de leer registros, ¿pero qué ocurriría si en mi-tad de una transacción se modifica un registro implicado en el proceso?:obtendríamos un resultado incorrecto. Para asegurarnos de que esto noocurra se bloquean las fichas durante la transacción.

La ejecución de aplicaciones con el fichero VRunner está basada en un ser-vidor de disco (arquitectura de red local), es decir, en un sistema de fiche-ros compartidos; lo que implica que no existe un servidor de bases de da-tos que gestione las operaciones.

Los servidores de disco admiten un número muy limitado de bloqueos con-currentes, por lo que en Velázquez Visual con arquitectura VRunner éstosson puntuales: no se puede mantener un bloqueo durante toda la transac-ción, pues saturaríamos las limitaciones del servidor de disco. Entonces,cuando trabajamos en la arquitectura de servidor de disco (VRunner), sebloquea una ficha, se modifica y se le quita el bloqueo (una a una). Pero, pa-ra que las transacciones sean totalmente independientes entre estacionescliente, hay que mantener por cada transacción todos sus bloqueos. En laarquitectura cliente-servidor se mantienen todos los bloqueos hasta que latransacción haya finalizado.

Asimismo, indicar que otros sistemas de bases de datos basados en servi-dor de disco carecen de un sistema capaz de deshacer transacciones pen-dientes que garantice la integridad de los datos tras la reconstrucción delsistema. Como mucho, simplemente reindexan, con lo que los datos de losficheros implicados pueden no ser reales.

Para comprenderlo mejor pongamos un ejemplo de cliente-servidor: unusuario realiza cierta operación a un campo (sumar o restar una cantidad,por ejemplo), y a continuación otro usuario realiza otra operación a ese mis-mo campo. Si al primer usuario se le corta la transmisión, todas las opera-ciones sobre ese campo dependen de la realizada por el primer usuario y,junto a todas las que se realicen después, quedarán invalidadas. Debe en-tonces deshacerse esa primera operación antes de validarlas. Tenemos dosopciones, o bien deshacemos todas las operaciones (al arrancar la aplica-ción por un administrador, éste podrá hacerlo), o bien eliminamos el fichero.TRN que se ha generado y revisamos las operaciones que se han realizado.Esta última opción no garantiza que los datos sean correctos y habría que

Page 292: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

regenerar índices. Sin embargo, deshaciendo las operaciones, garantizamosla integridad de los datos, quedando éstos como estaban antes del fallo.

Con el botón Reparar, desharemos la transacción pendiente. Si cancela-mos, no se podrá acceder a las tablas dañadas, pero podrá repararlas eladministrador la siguiente vez que entre en la aplicación. Con Editar Log,podremos añadir comentarios al archivo que documenta los sucesos.

En la ejecución de aplicaciones de Velázquez Visual no se pierden datos, si-no que se da opción al supervisor del sistema de deshacer solamente lastransacciones sin validar para así garantizar la veracidad de la informaciónque contienen.

En la ejecución de aplicaciones de Velázquez Visual en arquitectura cliente-servidor, al existir un módulo servidor, el sistema de transacciones es indi-vidualizado por cliente, es decir, un usuario jamás puede perjudicar a otro.Si durante la ejecución de una aplicación Velázquez en modo cliente-servi-dor se produjese una caída del sistema en un cliente, esta caída solamentele afectaría a él, el servidor desharía la transacción generada por éste, sinque afecte en ningún momento a las realizadas desde el resto de las esta-ciones cliente.

ResumenVRunner es el módulo que ejecuta, en arquitectura de red local, los proyec-tos diseñados en Velázquez Visual.

Con las opciones de menú del ejecutor podemos ver los ficheros del mapaabierto, ver los procesos en segundo plano, asignar impresoras lógicas, do-tar de estilos y perfiles al usuarios, etc.

El ejecutor presenta una serie de opciones ya programadas, entre las quedestaca la posibilidad de navegar hacia maestros y hacia históricos desdelos registros de una lista.

04 Desarrollo básicode una aplicación

Page 293: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

292 293 VELAZQUEZ VISUAL

Una transacción es una operación que realiza nuestra aplicación que impli-ca escritura en disco, siendo necesario que se produzca un bloqueo de re-gistros.

4.6 Agenda de tareas

4.6.1. Exposición del problema

En este ejemplo vamos a diseñar una agenda de tareas. Contendrá infor-mación acerca de tareas a realizar, de las que consideraremos los siguien-tes datos:

• Persona que debe realizar la tarea.

• Cliente al que se refiere la tarea.

• Tipo de tarea.

• Pequeña descripción de la tarea (asunto).

• Fechas de inicio y final de la tarea.

• Aviso días antes del vencimiento de la tarea.

• Hora de inicio y fin de la tarea.

• Descripción larga (documentación de la tarea).

• Estado de la tarea (realizada o no).

• Fecha y hora de realización.

• Descripción de la realización (documentación de la tarea).

Page 294: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Podremos visualizar la información de dos maneras:

Presentando una tarea en concreto mediante un formulario. Separaremos lainformación mediante pestañas: una con los datos de configuración, otraque contendrá la descripción larga y una tercera que contendrá los datosde la realización.

A través de listados de tareas organizados en filas (fichas) y columnas (da-tos de las fichas), que son las rejillas.

04 Desarrollo básicode una aplicación

Page 295: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

294 295 VELAZQUEZ VISUAL

La aplicación nos permitirá seleccionar el cliente mediante un código pro-pio (numérico), o tecleando las primeras letras de su nombre.

Podremos escoger el tipo de tarea de entre una lista preestablecida por eldiseñador de la aplicación (llamada telefónica, enviar fax, enviar correoelectrónico, visita, programar, analizar, otras tareas).

Una vez fijada la fecha inicial tendremos tres maneras de seleccionar la fe-cha final:

Teclearla directamente en el control (o casilla) correspondiente.

Fijar los días que dura, de modo que la aplicación calcule automáticamen-te la fecha de fin.

En el caso de que la tarea sea permanente, es decir, a realizar todos losdías del año, la fecha de fin será calculada automáticamente.

Las fechas de inicio y final serán, por defecto, las del día de creación de latarea. Además, al marcar una tarea como realizada se tomarán la fecha yhora del momento como fecha y hora de realización.

Además del cliente aparecerá, de manera automática, el usuario de la apli-cación que crea la tarea.

Seremos capaces de buscar una tarea concreta por la descripción corta dela misma, por palabras o por trozos. También podremos buscar tareas pen-dientes, tareas a realizar en el día, entre fechas y también habrá una bús-queda avanzada en la que podamos discriminar por Cliente, si la tarea es-tá realizada o no y entre fechas.

Seleccionando una fecha concreta, veremos toda la información de las ta-reas, realizadas, pendientes, permanentes, con la información de los díasque faltan para que termine el plazo de realización de la tarea.

Según la situación en que se encuentre la tarea (realizada, pendiente o per-manente), la información será presentada en la rejilla con un color identifi-cativo.

Estando en el formulario, podremos abrir la tarea anterior o la siguiente enel tiempo.

4.6.2. Esquema de Tablas

Tablas y EnlaceEl primer paso es ver cómo organizamos la información. Dependiendo de loque queramos conseguir, podemos dividir la información en una, dos o mástablas, enlazándolas de una cierta manera. Éste es el punto más importan-te a la hora de diseñar una aplicación, ya que un buen diseño dará mayorpotencia y versatilidad a la aplicación.

Page 296: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

En este caso es fácil darse cuenta de que necesitamos al menos tres tablas:CLIENTES, cuyos registros contendrán la información acerca de cada clien-te; TAREAS, en la que tendremos datos de cada tarea; y TIPOS DE TAREA,que contiene los distintos tipos de tarea que podremos seleccionar en laaplicación.

¿Qué tipo de relación mantienen las tablas entre sí? Centrándonos enCLIENTES y TAREAS el análisis a realizar es el siguiente:

Podemos tener varias tareas referidas a un solo cliente, pero no tenemosvarios clientes para una tarea. Por tanto, podríamos formar las frases: “UnCliente puede tener muchas Tareas” (de ahora en adelante diremos que TA-REAS es un histórico de CLIENTES), y “Una Tarea pertenece a un Cliente”(por tanto CLIENTES es maestro de TAREAS).

Con esto llegamos a la conclusión de que hay que establecer un enlace ahistórico (plural) desde CLIENTES a TAREAS, y por tanto un enlace a maes-tro (singular) desde TAREAS a CLIENTES. Éste es el enlace más común quepodemos encontrar al analizar un problema (más adelante veremos un tipode tabla que se denomina histórica. No debemos confundirnos: el que unatabla sea histórica de otra no implica que sea una tabla de tipo histórico.Una tabla puede ser histórica de otra debido al enlace que las une, o ser de-finida de tipo histórico).

Vamos a definir las dos tablas como tipo maestro normal con clave numéri-ca ya que necesitamos que cada tarea y cada cliente puedan ser identifica-dos con un código único, que nos lleve a cada registro en concreto, y queserán los que relacionen cada tarea con cada cliente.

Una vez definidas las frases en las que nos apoyamos para establecer el en-lace y qué tablas queremos crear, entramos en el editor y creamos un nue-vo mapa.

Seleccionamos la opción de menú Archivo/Nuevo o pulsamos el botón situado en la barra de herramientas del Editor de Proyectos. Guardemos elarchivo con el botón y llamémoslo agenda.map. Acordémonos de guar-dar a menudo la aplicación según la vayamos creando para no perderla poralgún problema de continuidad.

Pasemos entonces a la ventana del Esquema de Tablas, a través de Venta-na/Esquema de Tablas o el botón situado en la barra de herramientas.

Como estamos en un nuevo mapa, al pasar al Esquema de tablas nos sal-drá el asistente de creación de tablas. En él elegimos Maestro normal conclave numérica.

04 Desarrollo básicode una aplicación

Nuevo proyecto

Guardar proyecto

Esquema de tablas

Page 297: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

296 297 VELAZQUEZ VISUAL

Aceptando, nos aparecerá la ventana de propiedades de la tabla:

Aquí tendremos que rellenar los datos de Nombre plural, nombre singulary, si queremos, un comentario. El resto de datos nos sirven los que vienendados.

Al aceptar aparecerá el icono de la tabla CLIENTES en el esquema de ta-blas. Para crear la tabla TAREAS podemos, o bien ir al menú Tablas/CrearNueva tabla (Ctrl+T), con lo que nos saldría de nuevo el asistente, o bienpulsamos el botón Nueva tabla maestra en la barra de herramientas delpanel derecho, con lo que nos saldría el siguiente cuadro de diálogo:

Nueva tabla maestra

Page 298: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Escribimos nombre plural (Tareas) y nombre singular (Tarea). Para el restoaceptamos lo que nos pone por defecto. De este modo nos va a crear uncampo llamado Nombre, con varios índices: uno alfabético, otro por pala-bras y un tercero por trozos de palabras. Esto también lo hizo Velázquez Vi-sual al crear la tabla anterior.

Veremos cómo, en el esquema de tablas, Velázquez representa los iconoscorrespondientes a las dos tablas maestras recién creadas.

Ahora ya estamos en condiciones de establecer el enlace entre las dos ta-blas. Para ello pinchamos con el ratón sobre el enlazador de la tabla maes-tra (CLIENTES) y arrastramos hasta la tabla histórica (TAREAS).

04 Desarrollo básicode una aplicación

Page 299: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

298 299 VELAZQUEZ VISUAL

Velázquez Visual representa este tipo de enlace con una flecha roja (enlaceplural a histórico) y una flecha azul (enlace singular a maestro).

De momento vamos a trabajar con estas tablas. Más adelante veremos untipo nuevo relacionado con el campo Tipo de Tarea.

Campos de la tabla CLIENTESEl siguiente paso es la creación de campos dentro de las tablas. En el casode CLIENTES es suficiente el campo Nombre, aparte del Código, que secreó automáticamente al generar la tabla. También se creó en esta tabla elenlace a histórico cuando realizamos el enlace.

Page 300: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Campos de la tabla TAREASEn la tabla TAREAS hemos de crear varios campos aparte de los que hici-mos que Velázquez Visual creara por defecto. Por un lado tenemos los cam-pos CODIGO y NOMBRE, y los índices CODIGO, NOMBRE, PALABRAS yTROZOS, que Velázquez Visual creó, por defecto, con la tabla. Por otro la-do tenemos el campo CLIENTES y el índice correspondiente CLIENTES,que se crean al establecer el enlace.

En el campo NOMBRE, sustituiremos el nombre por Descripción, y usare-mos éste como la descripción corta que exponíamos. Así, los índices crea-dos para el campo NOMBRE serán los de Descripción Corta. Lo que no he-mos de hacer es cambiar el identificador, ya que perderíamos algunas delas ventajas que ofrece Velázquez Visual para éste.

En el índice CLIENTES añadimos dos componentes: Fecha y Hora de inicio.De esta manera, si tenemos varias tareas para un mismo cliente, éstas pue-den ser ordenadas además por la fecha y hora de inicio.

PersonaComenzamos creando el campo Persona, para lo cual podemos teclear in-sertar o pulsar el botón Nuevo campo. Velázquez Visual crea un nuevocampo al que hemos de dar un identificador, que será el que se use parareferenciarlo en funciones, procesos, fórmulas, etc. Aceptamos el identifi-cador (PERSONAS en este caso) y aceptamos de nuevo (o doble clic del ra-tón) para que nos aparezca el cuadro Propiedades del campo.

04 Desarrollo básicode una aplicación

Nuevo campo

Page 301: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

300 301 VELAZQUEZ VISUAL

Hemos de rellenar el Nombre del campo, que será el que aparezca despuésen las etiquetas, rejillas, formularios, etc. Le asignaremos el Tipo Alfa 40, yaque para el nombre del usuario nos basta con mayúsculas. Para el Conte-nido inicial de este campo usaremos la variable de sistema u, que devuelveel nombre del usuario de la aplicación. La función de este campo será la deguardar qué usuario crea la tarea.

FechaA continuación crearemos el campo Fecha, que será el encargado de guar-dar la fecha de inicio de la tarea. Su identificador será FECHA y haciendodoble clic veremos la ventana Propiedades del campo.

Page 302: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

El Nombre del campo será Fecha, elegiremos el tipo Fecha y en Contenidoinicial vamos a hacer que por defecto aparezca la fecha del día en el quedamos de alta la tarea. Para ello abrimos el Asistente, pulsamos el botónfunciones y de la carpeta fecha elegimos la función Hoy.

DíasAhora vamos a crear un campo al que daremos el identificador DIAS. En laventana de Propiedades del campo le asignamos el Nombre: Días, Tipo nu-mérico y Longitud 2.

La función de este campo es la de indicar el número de días que tenemospara realizar una tarea, comenzando a contar desde el día que damos de al-ta la tarea.

04 Desarrollo básicode una aplicación

Funciones

Page 303: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

302 303 VELAZQUEZ VISUAL

Días de AvisoCreamos otro nuevo campo, al que le damos el identificador DIAS-AVISO.En la ventana Propiedades del campo le damos el Nombre: Avisar cuántosdías antes, mientras que su tipo será numérico de Longitud 2.

Queremos que nuestra aplicación nos avise anticipadamente de que una ta-rea va a vencer, de modo que es en este campo DÍAS-AVISO donde espe-cificamos con cuántos días de antelación queremos que salte el aviso.

Días que faltanCreamos ahora otro campo, al que damos el identificador DIAS-FALTAN. Enlas Propiedades del campo le asignamos el Nombre: Cuántos días faltanpara terminar la tarea, su tipo será Fórmula numérica.

Para el contenido inicial necesitamos crear una variable. Vamos al panel delas variables e insertamos una . Como nombre pone-mos Fecha de la agenda, la persistencia será En memoria (independientecada tarea 2º plano) y de tipo Fecha. Como identificador usaremos AGEN-DA-FECHA.

Page 304: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

En el Contenido inicial del campo escribimos la fórmula (%FECHA-HASTA%- $AGENDA-FECHA$) + 1. Para ello abrimos el asistente y con ayuda de lasopciones del menú campos y variables, respectivamente, construi-mos la fórmula.

Nuestra agenda va a tener un objeto llamado Agendizador, que consta deun calendario (en el que podemos seleccionar una fecha) y de una rejilla en

04 Desarrollo básicode una aplicación

Campos y variables

Page 305: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

304 305 VELAZQUEZ VISUAL

la que visualizamos las tareas correspondientes. La fecha que seleccione-mos en el calendario será guardada en la variable AGENDA-FECHA. En es-te campo que acabamos de crear queremos que se guarde el número dedías que faltan para que venza una tarea, contando desde la fecha que in-dicamos en el calendario. Ahora ya se entiende que su contenido inicial seael día de vencimiento menos la fecha marcada en el calendario más un día,que son justo los días que faltan.

Hora de inicio y finalAñadimos un nuevo campo a la tabla TAREAS y le damos identificador HO-RA-INICIO. En las Propiedades del campo le damos el Nombre: Hora de ini-cio, le asignamos el tipo Hora y en la ventana Contenido inicial pinchamosen el Asistente y elegimos la función Ahora de la carpeta Horas, la cual nosdevuelve la hora del instante en el que rellenamos el campo.

Este campo se usará para guardar la hora correspondiente al momento enel que se da de alta una tarea.

Creamos otro campo al que damos el identificador HORA-FIN. En las Pro-piedades del campo le damos el Nombre Hora de finalización y su tipo se-rá Hora.

Descripción largaCreamos otro campo al que damos el identificador DESC-LARGA. En lasPropiedades del campo le damos el Nombre Descripción larga, su Tipo se-rá Objeto Texto. La finalidad de este campo es la de guardar una descrip-ción larga de cada tarea.

El contenido de un campotipo objeto texto puede sertan largo como se quiera, noestá limitado ni determinadocomo un campo alfabético,alfa-128, alfa-64, etc. Peroha de usarse cuando sesabe que los textos seránlargos, porque ocupa comomínimo 512 Bytes tenga eltexto que tenga (a no serque esté vacío). Si sucontenido, en general, va aser de menor tamaño, espreferible usar un alfa-128,alfa-64, etc.

ADVERTENCIA

Page 306: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Tarea realizadaCreamos otro campo al que le damos el identificador REALIZADA. En lasPropiedades del campo especificamos que el Nombre sea Realizada y suTipo sea booleano.

En este campo guardaremos si la tarea está realizada o no, de ahí que sutipo sea booleano.

Tipo de tareaEntramos ahora en un campo especial. Según decíamos en la exposicióndel problema, queríamos definir cada tarea por un tipo que tuviera diseña-

04 Desarrollo básicode una aplicación

Page 307: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

306 307 VELAZQUEZ VISUAL

do el programador (llamada telefónica, enviar fax, enviar correo electrónico,visita, programar, analizar, otras tareas).

Vamos a introducir un nuevo tipo de tabla específica para datos concretos,listas de información que el diseñador del proyecto define y el usuario finalno puede alterar: las tablas estáticas. Cada registro de una tabla estáticaconsta de un Código y una Descripción. Pueden ser, por ejemplo, los díasde la semana, las estaciones del año o cualquier información que sea decontenido invariable y no modificable. El código sólo puede tener un dígito,que puede ser tanto un número como una letra; así que si vamos a crearuna tabla estática con más de nueve elementos, tendremos que utilizar nú-meros y letras o solamente letras. Posteriormente, dentro de un formularioserá posible usar una lista desplegable (list box) o un combo box para mos-trar los datos de la tabla estática apuntada.

Este campo, Tipo de Tarea, va a estar entonces enlazado a una tabla está-tica, que contendrá cada uno de los tipos de tarea que hemos tenido encuenta con un código. En el campo se guardará ese código cuando traba-jemos con la aplicación.

Creamos en primer lugar la tabla estática. Para ello, nos situamos en la ven-tana principal y creamos un nuevo objeto (usando el botón , o en el me-nú Objetos/Nuevo/Objeto. Seleccionamos el objeto Tabla Estática, apare-ciéndonos un cuadro de diálogo con las opciones:

En esta ventana de Propiedades de la tabla estática debemos introducir losdatos que van a pertenecer a la tabla de tipos de tarea.

Nuevo objeto

Page 308: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Usando el botón Añadir, vamos introduciendo el código y la descripción,hasta completar la lista de tipos de tarea.

Aceptamos, y ya tenemos creada la tabla estática, que aparecerá en la ven-tana principal, en el panel izquierdo, en la zona de Estructura de datos, adonde podremos volver siempre a editarla. Nada más aceptar nos apare-cerá como identificador TABLEST1. Es preferible cambiarlo por uno másclaro, al igual que el resto de identificadores. Pondremos de nombre TIPOS-TAREAS.

04 Desarrollo básicode una aplicación

Añadir

Page 309: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

308 309 VELAZQUEZ VISUAL

Ahora vamos a crear el campo que estará enlazado con esta tabla. Nos va-mos a editar la tabla TAREAS y añadimos un nuevo campo. Le pondremoscomo identificador TIPO-TAREA y entraremos a sus propiedades.

Como Nombre pondremos Tipo de Tarea. Y pasaremos a la caja de Enlace.Donde nos pregunta ¿Enlazado?, tenemos que elegir de entre toda la listael elemento Tabla Estática.

Page 310: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Entonces Velázquez Visual nos dejará escoger un identificador, es decir, elnombre con que conocemos la tabla estática que queremos enlazar conese campo. Al abrir el control, nos aparecerán todas las tablas estáticas quetengamos en el proyecto. Una misma tabla estática puede estar enlazada acampos pertenecientes a tablas distintas, e incluso a varios campos de unamisma tabla (por ejemplo, podríamos escoger dos tipos de tareas para elmismo registro). Escogemos la que necesitamos para este campo: TIPOS-TAREAS.

En este campo guardaremos, por tanto, el código del tipo de tarea, que en-lazará en ejecución con la tabla estática TIPOS-TAREAS.

RealizadaPara este campo usaremos de nuevo el tipo booleano.

Aquí recogeremos si la tarea fue realizada y la usaremos como condiciónpara el proceso que cogerá la fecha y hora en que se active como datos dela realización de la tarea.

04 Desarrollo básicode una aplicación

Page 311: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

310 311 VELAZQUEZ VISUAL

Fecha y Hora de RealizaciónCrearemos ahora dos campos, que llamaremos Fecha realizado (identifica-dor FECHA-REALIZADO) y Hora de Realizado (HORA-REALIZADO), natu-ralmente de tipo fecha y tipo hora, respectivamente.

Para que cuando marquemos que ha sido realizada la tarea nos recoja enestos campos la fecha y hora del momento y los guarde, tenemos que aña-dirles un contenido inicial. Empezamos por el campo Fecha realizado yarrancamos el asistente de fórmulas del contenido inicial.

Arrancado el asistente, vamos a usar una función de Velázquez Visual. Pa-ra ello pulsamos el botón Funciones F4 con el que desplegamos el me-nú de funciones y escogemos la función fDecidirDato() dentro de la carpe-ta de Funciones Varias.

Funciones

Page 312: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Aquí tenemos tres campos a rellenar. Una fórmula condición y qué resulta-rá si se cumple o si no se cumple. Como queremos que al marcar Realiza-da se tome el valor de la fecha, empezaremos por la condición. VelázquezVisual trabaja con booleanos, con lo que la fórmula que pongamos comocondición debe ser 1 o mayor que uno para que dé verdadero, y 0 para quedé falso. En este caso, la condición es que el booleano Realizada esté acti-vado, es decir, igual a 1. Por tanto si %REALIZADA%=1, entonces tendre-mos un resultado, sino, el otro. Por otro lado, queremos, si se cumple, to-me la fecha de hoy, pero que si no se cumple, el campo quede vacío, no to-me ningún valor.

Vamos a ver cómo se hace esto en Velázquez Visual: lo primero establecerla condición. Para ello abrimos el Asistente 1, que nos sacará un asistentede fórmulas como el anterior. %REALIZADA%=1 es lo mismo que poner%REALIZADA%. La función evalúa si es uno o más de uno (en este caso,como el campo es booleano únicamente tomará valores 1 o 0), o si es ce-ro y la resuelve.

04 Desarrollo básicode una aplicación

Page 313: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

312 313 VELAZQUEZ VISUAL

Por tanto, pulsamos en el botón Campos F5, escogemos el campo Rea-lizada y damos al botón , dejándonos de nuevo en el asistente de la fun-ción fDecidirDato().

Ahora vamos al resultado que daría si se cumple la condición: datoSI. Pul-samos el Asistente 2. Para tomar la fecha del día que marcamos realizadousaremos la función fHoy(), de la carpeta de Funciones de Fechas.

Campos

Aceptar (intro)

Page 314: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Por fin ya tenemos la función con todos los parámetros completos, ya quesi la condición no se cumple, no hay que dar ningún valor al campo, con loque el último parámetro se deja vacío.

Entonces aceptamos, apareciendo la fórmula en el editor de fórmulas. Pul-samos de nuevo y la fórmula queda en el contenido inicial del campo.

Esto mismo hay que hacerlo para la hora, pero usando la función fAhora()en vez de fHoy().

04 Desarrollo básicode una aplicación

Page 315: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

314 315 VELAZQUEZ VISUAL

Descripción realizadoVamos a crear de nuevo un campo tipo objeto texto para incluir un comen-tario sobre la realización, al igual que en el caso de Descripción Larga. Da-mos como identificador DESC-REALIZADA y como nombre DescripciónRealizado.

Enlace a hermano contiguo e ÍndicesAquí vamos a introducir un nuevo tipo de enlace, que es el que nos servirápara pasar de una tarea a otra al visualizar un formulario. Este enlace se rea-liza a través de un índice de la tabla y será el que nos lleve de un registro aotro de la misma tabla, es decir, a otra Tarea de la misma tabla, en función

Page 316: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

de los componentes de ese índice. Nosotros queremos que, una vez abier-to un formulario de una tarea, apretando un botón vayamos a la anterior osiguiente tarea en el tiempo. Esto quiere decir que tenemos que usar un ín-dice del campo Fecha.

Creamos, pues, un índice cuyo componente sea Fecha con identificadorFECHA. Para ello podemos pulsar el botón de crear Nuevo índice, o Nuevoíndice del campo una vez tenemos seleccionado el campo Fecha: .Este índice ha de contener, además del campo Fecha, como componenteHora de Inicio, ya que puede haber varias tareas para una misma fecha, yde esta forma las ordenamos primero por fecha y luego por la hora.

Para este tipo de enlace, como para cualquier otro, su resolución siempreha de ser de por un índice de Clave única.

Si pueden coincidir dos tareas con la misma fecha y hora, podemos añadircomo componente del índice el campo Código que ya es seguro que es úni-co para cada tarea.

Ahora vamos a establecer el enlace a hermano contiguo y para hacerlo, obien creamos los campos y los enlazamos, o bien usamos el asistente. Va-mos a utilizar este último. Pulsamos el botón Crear punteros y escoge-mos Crear puntero hermano.

04 Desarrollo básicode una aplicación

Nuevo índice e índicedel campo

Crear punteros

Page 317: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

316 317 VELAZQUEZ VISUAL

Nos saldrá entonces la ventana de Creación de campo puntero: Hermano.En ella completamos el nombre, que será Tarea, el identificador, que seráTAREA (Velázquez Visual ya se encarga de ponerlo en mayúsculas).

Page 318: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

El control Nº de Partes Comunes lo dejaremos a cero ya que queremos quenos aparezcan todas las tareas ordenadas por fecha. Si tuviéramos comovalor uno, eso querría decir que a partir de la tarea abierta sólo podríamosir a las de igual fecha, ordenadas por hora de inicio (esto podría ser intere-sante si quisiéramos movernos sólo por las tareas del día), y si pusiéramoscomo valor dos, eso querría decir que nada más veríamos las que tuvieranigual fecha e igual hora de inicio, cosa que no parece útil en esta aplicación.Por último está la caja Dirección. Escogemos Ambos para que nos cree her-manos en las dos direcciones, de modo que podamos movernos a las ta-reas siguiente y anterior.

Aceptamos esta pantalla y entonces Velázquez Visual nos crea dos cam-pos, añadiendo los sufijos PREV (enlace al anterior) y NEXT (enlace al si-guiente) al identificador que hemos propuesto.

04 Desarrollo básicode una aplicación

Page 319: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

318 319 VELAZQUEZ VISUAL

Vemos que usar el asistente ha sido lo mismo que crear un campo nuevo,dándole un identificador y un nombre. Eligiendo en el control ¿Enlazado? laopción Hermano Contiguo y pulsando a continuación resolución, podemosescoger el índice. Si probamos con el que hemos hecho con el asistentepodremos ver que, al igual que antes, podemos escoger el Índice, Nº dePartes Comunes, Dirección (esta última solo una, ya que hay que crear unhermano en cada dirección).

Si en vez de escoger el índice de fecha hubiéramos escogido el de Cliente,podríamos haber añadido los componentes de FECHA y HORA, añadido el

Page 320: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

CÓDIGO, y puesto de Clave única. De esta manera, poniendo partes co-munes 1, al abrir el formulario de una tarea, podríamos desplazarnos a otrastareas a realizar para el mismo cliente.

Con esto, hemos acabado la creación de campos, pero para realizar otrasoperaciones dentro de la aplicación necesitaremos un índice más. Comonecesitaremos saber qué tareas están pendientes, vamos a crear un índi-ce que nos lo resuelva. Pulsamos Nuevo índice, ponemos como nom-bre Pendientes, el tipo de índice será Acepta Repetidas, y vamos a usaruna condición para indexar. Tal como planteamos la aplicación, las tareasrealizadas están marcadas con un booleano que llamamos Realizada. Siéste es cero es que la tarea está pendiente, y si vale uno estará realizada.Entonces, en el control Campo condición para indexar seleccionamosREALIZADA y, muy importante, en Estado del campo para indexar, lo de-jamos sin activar. Esto quiere decir que REALIZADA tiene que estar a ce-ro para ser indexada, si estuviera activada indexaría las que ya estuviesenrealizadas, y nosotros queremos las pendientes. Como identificador po-nemos PDTES-FECHA. Añadimos como componentes del índice la FE-CHA y HORA-INICIO, para que las tareas aparezcan ordenadas por estosíndices.

Esta manera de indexar tiene dos ventajas: si queremos saber las tareaspendientes, simplemente basta sacar una lista por este índice, no hay querealizar ninguna búsqueda. Si queremos buscar las que ya están realizadas,basta quitar a la lista total las que tenemos en este índice. La otra ventajaes el tamaño del índice, ya que sólo pasan a formar parte de éste las fichasque cumplan la condición, con lo que éste pasa a ser menor. En esta apli-cación puede o no ser muy importante, pero cuando se trabaja con grancantidad de datos, reducir los índices sí que puede serlo.

04 Desarrollo básicode una aplicación

Nuevo índice

Page 321: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

320 321 VELAZQUEZ VISUAL

Con esto ya tenemos creado el Esquema de Tablas, los campos que inter-vienen y sus índices.

4.6.3. Objetos Visuales

En primer lugar vamos a elegir las fuentes por defecto que vamos a usar enel proyecto, para lo cual vamos a la opción de menú Edición/Fuentes pordefecto, apareciendo la ventana fuentes por defecto. En ella podemos se-leccionar las fuentes que podremos usar en rejillas, formularios, menús, in-formes y casilleros, para lo que hemos de pinchar en la pestaña correspon-diente, pulsar el botón Añadir , y seleccionar la fuente en la ventanaFuente.

Lo segundo será crear carpetas y subcarpetas para los objetos visuales quevamos a ir creando. Usando los botones (Nueva carpeta y nueva sub-carpeta) creamos una principal que se llame Clientes para los objetos vi-suales de esta tabla.

Añadir

Nueva carpeta y nuevasubcarpeta

Page 322: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Dentro de esta carpeta creamos cinco subcarpetas, también llamadasClientes, pero con los iconos correspondientes a rejillas, formularios,búsquedas, informes y menús, que son los objetos visuales que van acontener.

04 Desarrollo básicode una aplicación

Page 323: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

322 323 VELAZQUEZ VISUAL

El resultado final será una carpeta con subcarpetas donde iremos incluyen-do los objetos visuales. Para que al crear los objetos sean incluidos en lacarpeta correspondiente debemos situarnos en ella antes de pulsar el bo-tón Nuevo objeto.

Clientes

RejillaEmpezaremos a trabajar con la tabla CLIENTES, creando una rejilla donderepresentaremos los datos del cliente. En la Ventana Principal del Proyectonos posicionamos en la carpeta de rejillas de Clientes y creamos un nuevoobjeto , seleccionando rejilla visor de tablas.

Nuevo objeto

Page 324: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Tenemos que asignarle entonces a qué tabla pertenece (CLIENTES), ydando tabulador o posicionándonos con el ratón, Velázquez Visual nospondrá el nombre directamente. Como tenemos configuradas las fuentespor defecto, ya nos aparecen en su apartado, aunque podríamos añadirmás para esta rejilla en concreto. De momento no vamos a tocar más enesta ventana. Aceptamos y cambiamos el identificador por uno más claro(CLIENTES).

04 Desarrollo básicode una aplicación

Para que la tabla a la quepertenece el objeto seasigne automáticamente,hay que posicionarseprimero con el ratón en latabla (en el panel izquierdo),de modo que al seleccionar

Nuevo Objeto ya estaráasignado a esa tabla.Entramos entonces en larejilla aceptando o con dobleclic del ratón.

TRUCO

Page 325: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

324 325 VELAZQUEZ VISUAL

Como la rejilla es nueva, nos aparece el asistente de creación de rejillas.Aquí seleccionamos qué campos veremos en ella. Si pulsamos doble clicsobre los campos seleccionables, éstos irán pasando a los campos selec-cionados. Podemos también cambiar el aspecto de la cabeza, cuerpo y piede la rejilla (color del texto, del fondo, tipo de letra de entre los tipos quehabía en la lista que teníamos en la anterior ventana de propiedades) y siserá Tipo botón, es decir, con cabeceras de aspecto tridimensional. Pul-sando Crear según selección tendremos creada la rejilla con aquellos cam-pos seleccionados. Sin embargo, si queremos crearla con todos los cam-pos de la tabla, no hace falta seleccionar ninguno, simplemente definimosel aspecto que queremos para la rejilla y pulsamos Crear con todos loscampos. En este caso usaremos esta última opción sin modificar nada encuanto al aspecto.

Nos aparece entonces la ventana de diseño de rejillas, en donde haremosvarios cambios. Lo primero que haremos será cambiar los colores, usandopara ello el asistente. Pulsamos el botón , y elegimos, por ejemplo, Azulpastel. En este menú tenemos una serie de paletas estándar que nos pue-den servir para homogeneizar las rejillas de toda la aplicación.

Coloreado rápido

Page 326: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Pero hay otra característica que es muy interesante de cara a una mejor vi-sualización, y es la posibilidad de que las líneas pares lleven otro color. Pa-ra escogerlo, pulsamos el botón Propiedades del objeto, o ALT+Intro.Nos aparece de nuevo la ventana de propiedades de la rejilla y modificamosen la caja Cuerpo, el color de fondo par.

04 Desarrollo básicode una aplicación

Propiedades del objeto

Page 327: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

326 327 VELAZQUEZ VISUAL

De este modo, en la rejilla las líneas pares tendrán un color distinto, facili-tando la lectura (y haciendo más vistosa la rejilla). Las rejillas impares, sinembargo, conservarán el color de fondo.

Esta rejilla, al presentarse en pantalla, y si no modificamos nada, aparecerátal cual la estamos viendo ahora, es decir, con el mismo ancho. Vamos a for-zar que la columna código tenga el ancho sea el del contenido o el del títu-lo. Esto podemos hacerlo con cualquier columna. Si pulsamos el botón Ancho del contenido y pulsamos en la cabecera de la columna Código ve-mos que no cabe el título, así que pulsamos el botón ancho del título yde nuevo en la cabecera.

Con la columna Nombre haremos que aumente su ancho hasta completarla pantalla, para lo cual pulsaremos en la cabecera, apareciendo la ventanaPropiedades de Columna de rejilla con la pestaña Cuerpo abierta, y en ellaactivamos la casilla de Ancho variable.

Ancho del contenido

Ancho del título

Page 328: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Al pie de la columna nos muestra los píxeles que ocupa el contenido (Ve-lázquez Visual lo calcula teniendo en cuenta el tipo de letra que se ha es-cogido para esa columna, y si lo cambiamos hay que volver a darle el an-cho). Para la columna Nombre, sin embargo, nos añade >>, lo que signifi-ca que el ancho es variable y en ejecución se ampliará hasta completar laventana.

04 Desarrollo básicode una aplicación

Page 329: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

328 329 VELAZQUEZ VISUAL

Formulario

Creación del formularioComo pudimos ver en la ventana propiedades de rejilla, a cada rejilla se lepuede asignar un formulario de edición: alta, baja y modificación. Puede serun solo formulario con las tres funciones, o bien un formulario específicopara cada función. En este ejemplo optamos por la primera opción.

Nos posicionamos en la carpeta de formularios y creamos uno nuevo.

Page 330: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

En la ventana que nos aparece de Propiedades formulario especificamos latabla a la que pertenece (en este caso CLIENTES) apareciendo automática-mente el nombre al llegar con el tabulador o posicionarnos con el ratón enel Nombre. Éste lo coge de las propiedades de la tabla, y como el formula-rio sirve para editar una sola ficha nos toma el singular.

Aceptamos y cambiamos el identificador por uno más nemotécnico (CLIEN-TES), y entramos en él. Según entramos, sólo aparecen dos botones: acep-tar y cancelar. Ahora tenemos que insertar los controles.

04 Desarrollo básicode una aplicación

Page 331: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

330 331 VELAZQUEZ VISUAL

Tenemos dos maneras de hacerlo: introduciendo control a control y editán-dolos, o usar el asistente. Ahora vamos a usar este último, seleccionandoen el menú Controles/Campos automáticos.

Aparecerá una ventana de configuración en la que debemos elegir quécampos queremos que nos cree en el formulario. Usaremos el botón Todos,para que nos los seleccione él y aceptamos.

De este modo, añade cuatro controles al formulario. Por un lado dos eti-quetas (texto estático) y dos controles de edición.

Page 332: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Los nombres de las etiquetas de texto estático los coge del nombre delcampo.

Y los controles de edición apuntan al campo también. Podemos ver enton-ces que en Velázquez Visual, asociando el campo al control, y dependien-do del tipo de este último, éstos ya saben qué deben hacer: coger el nom-bre para la etiqueta, guardar lo que haya en el edit correspondiente al cam-po, etc. El tipo de dato que recogen, el tamaño, etc. No hay que hacer na-da más.

04 Desarrollo básicode una aplicación

Page 333: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

332 333 VELAZQUEZ VISUAL

Ahora podemos ordenar un poco el formulario. Con ayuda de los botonesde maquetación que tenemos a la izquierda de la ventana hacemos que loscontroles se alineen.

Seleccionamos el fondo y lo ampliamos un poco para poder trabajar bien.Colocamos los controles más o menos donde deberían estar.

Ahora seleccionamos el control de edición de Código y después, mante-niendo la tecla Ctrl pulsada, seleccionamos el de Nombre, ahora pulsamos

Alinear superior, y procedemos igual con los textos estáticos de Códigoy Nombre.

Ahora alineamos la etiqueta Código con su control de edición por la dere-cha pulsando Alinear derecha. Y Nombre con el suyo por la izquierda.

Podemos cambiar los tipos de letra a los controles, pulsando con el botónde la derecha del ratón sobre uno de ellos o con ALT-ENTER. Elegimos lapestaña de Aspecto y cambiamos el tipo de letra y el alineamiento.

Alinear superior

Alinear derecha

Page 334: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

También, en la pestaña de Estilos, cambiamos la forma de los controles deedición. Le quitamos el borde y ponemos al control de edición del Nombreancho variable para que se estire cuando hagamos más grande el formula-rio en ejecución.

Vamos a añadir una característica a estos controles y es que, cuando este-mos en ellos, en ejecución el color de fondo cambie. Para ello, vamos a lapestaña de Aspecto y en color de fondo foco ponemos aquel que quera-mos. Desde luego, para que se vea bien, tiene que ser un color cercano alque usamos como fondo. Si éste es blanco, y el texto negro, cualquier co-lor claro puede quedar bien.

04 Desarrollo básicode una aplicación

Page 335: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

334 335 VELAZQUEZ VISUAL

BotonesAhora vamos con los botones. Tenemos ya creados uno de aceptar y otrode cancelar. Vamos a ver qué propiedades tienen.

Tanto el botón Aceptar como Cancelar cuentan con una pestaña en las pro-piedades llamada Comando. En el control Función a disparar escogemos loque debe pasar cuando pulsamos el botón. Aprovechamos a cambiar el ti-po de letra en la pestaña Aspecto.

Crearemos ahora dos botones nuevos. Uno va a tener la función de acep-tar pero sin cerrar el formulario, con lo que limpiará de datos éste y nos per-mitirá meter otro cliente sin cerrarlo y volverlo a abrir. Además, como esteformulario va a servir para alta, baja y modificación, necesitaremos un bo-tón para eliminar.

Pulsamos con el ratón sobre el control botón con texto, llevándolo hastala zona del formulario donde queremos que permanezca. Pulsando con el bo-tón derecho sobre el control aparece la ventana de propiedades del botón.

Independientemente de laetiqueta que tenga unbotón, lo que realizadepende única yexclusivamente del comandoque le hayamos asignado.

ADVERTENCIA

Botón con texto

Page 336: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

En la pestaña de General ponemos la etiqueta que llevará el botón. En Tex-to Tool tip podríamos poner una Información que aparecería al pasar por en-cima del botón con el cursor del ratón.

Ahora vamos a la pestaña de Comando y buscamos entre las funciones laque nos interesa.

Una vez hecho, lo colocamos junto al resto. Ahora vamos a crear el que nosqueda pero de una manera diferente. Como con el botón de eliminar hay quetener cuidado, vamos a crear un botón menú, del que cuelgue la opción deeliminar. Este eliminar será además de tipo controlado, es decir, cuando se-leccionemos el botón eliminar, nos preguntará si estamos seguros.

Comenzamos con el botón menú , al que llamaremos Opciones.

04 Desarrollo básicode una aplicación

Opciones

Page 337: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

336 337 VELAZQUEZ VISUAL

Este botón no tiene ninguna pestaña Comando, pues en sí, el botón sólosirve para mostrar otros. Lo que vamos a hacer ahora es crear otro, igualque creamos el botón Aceptar y seguir. Lo llamaremos Eliminar y pondre-mos como función Eliminar controlado.

Pero en la pestaña Aspecto vamos a activar la casilla de menú desplegable.Eso quiere decir que el botón desaparecerá y quedará asociado al que es-té por encima de él en el panel de la derecha, donde tenemos todos los ele-mentos creados.

Page 338: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Seleccionamos Menú desplegable y vemos cómo en el panel de la derechase convierte y desaparece del formulario. Queda asociado al botón menú(en este caso Opciones). Puede haber varios botones menú en el mismoformulario, pero nuestro botón eliminar sólo aparecerá en el botón menú enel que está pegado. En este caso, como lo creamos justo después del bo-

tón menú, ya está bien colocado, pero podríamos usar las flechas de la

barra de herramientas de la izquierda para ponerlo después del botón quenos interese. Si hubiera más botones para añadir, se pondrían a continua-ción del eliminar, o antes, conservando ese orden al mostrarlos, pero siem-pre juntos y justo detrás del botón menú.

En los botones que hemos creado (Aceptar, Aceptar y seguir, Cancelar, Op-ciones/Eliminar) en el control nombre de la pestaña General, podemos aña-dir el símbolo & delante de una letra, por ejemplo: &Aceptar, Aceptar y &se-guir, &Cancelar, &Opciones/&Eliminar. De esta manera accederemos a esosbotones con la tecla ALT y la letra posterior al símbolo &. Por ejemplo:ALT+A activaría el botón Aceptar.

Ahora que ya tenemos los controles para introducir el campo Código delCLIENTE, su Nombre, y tenemos los botones creados, vamos a añadir unnuevo elemento.

Separador de subformulariosUsaremos un separador de subformularios para ver cómo funciona y cómogracias a ellos podemos añadir funciones a un formulario sin tocar lo queya hemos creado. En esta pestaña, añadiremos un subformulario que lla-maremos CLIENTES-TAREAS y en el que mostraremos las tareas que elcliente tiene asignadas. Como al ver un formulario nos encontramos en unaficha de cliente, si añadimos un control de Rejilla de histórico nos mostrarálos históricos que cuelgan de esa ficha. Históricos de un cliente son las ta-reas, luego nos mostrará las tareas del cliente. Para ver esas tareas delcliente, hemos de crear una rejilla para tareas, que llamaremos Tareas deClientes para que se vea en la ficha del cliente.

Vamos a la carpeta de formularios de clientes (no hace falta que cerremosel formulario que estamos haciendo) y creamos una subcarpeta para losSubformularios. Allí creamos un formulario al que damos como identificador

04 Desarrollo básicode una aplicación

Page 339: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

338 339 VELAZQUEZ VISUAL

CLIENTES-TAREAS, le asignamos la tabla CLIENTES y lo llamamos &1. Ta-reas. Con esto lo que conseguimos es que, como título de la pestaña en elseparador, aparezca 1. Tareas, con el 1 subrayado porque esa pestaña se-rá accesible pulsando ALT+1.

Para mostrar tareas, necesitaremos una rejilla para esta tabla. Así que crea-mos una nueva carpeta en raíz que se llame Tareas y le damos un color yun nombre. Creamos las subcarpetas para los distintos objetos de la tablay, dentro de la carpeta de rejillas, creamos una nueva. A la rejilla le asigna-mos la tabla TAREAS (aunque vayamos a usar la rejilla en CLIENTES, la re-jilla muestra datos de tareas) y la llamaremos Tareas de Clientes. Comoidentificador usaremos TAREAS-CLIENTES. Entramos y usamos de nuevoel asistente para crearla, pero esta vez no con todos los campos. Escoge-mos Fecha, Hora de Inicio, Hora finalización, Descripción, Tipo de Tarea->Descripción (para este último, si escogiéramos Tipo de Tarea nos mostra-ría sólo el código. Cogiendo Tipo de Tarea->Descripción mostramos elnombre que viene en la tabla estática).

No hace falta incluir el nombre del cliente, ya que esta rejilla la usaremos pa-ra mostrar las tareas en la ficha del cliente. Y pulsamos crear según selec-ción. Con el asistente de Coloreado rápido, escogemos el color y luego po-nemos el color para las líneas pares. Con esto hemos terminado con la re-jilla. Volvemos de nuevo al subformulario de clientes para su edición.

En él vamos a insertar un único control, por lo que borramos los botones (yaque aparecerán en el formulario principal) y pulsamos el botón Rejilla dehistórico.

Rejilla de histórico

Page 340: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Escogemos como histórico el que tenemos TAREAS—>CLIENTE y comorejilla la que acabamos de crear TAREAS-CLIENTE.

En la pestaña de estilos ponemos Tamaño: ambos variables, y ajustamos larejilla dejando un margen. De esta manera tomará el tamaño que tenga elformulario en cualquier momento.

Ahora retornamos al formulario del cliente. En él creamos un separador desubformularios con el botón , y lo añadimos al subformulario . En lalista sólo aparecerán aquellos formularios asignados a la tabla CLIENTES,estando únicamente CLIENTE-TAREAS en este momento. Lo selecciona-mos y con esto ya aparece en ejecución, en edición no. En la pestaña deEstilos ponemos el tamaño ambos variables.

Por último maquetaremos el formulario. Colocaremos los controles de edi-ción arriba, el separador de subformularios en medio y los botones abajoordenados. Para esto último usamos el botón Botones al pie de la barrade herramientas de la izquierda, escogiendo, en primer lugar, los botonesen el orden que queremos que aparezcan y pulsando luego el botón. Vere-mos que nos lleva todos los botones excepto el Botón menú. Ajustamos es-te último con los demás y los colocamos a la derecha.

04 Desarrollo básicode una aplicación

Separador de subformularios

Añadir

Botones al pie

Page 341: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

340 341 VELAZQUEZ VISUAL

Ya tenemos el formulario terminado. Pero hay un problema de maquetación:aunque hemos puesto el control de edición de Nombre y el separador conancho variable, si hacemos más grande el formulario, los botones se que-darán donde están.

Page 342: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Como veíamos antes, en el panel de la derecha de edición del formulario te-nemos la lista de todos los controles y su orden. Este orden es también elorden de tabulación, es decir, en ejecución, cuando pulsemos el tabuladorpasaremos de un control a otro según este orden. Una vez terminado unformulario debemos comprobar que el orden es el correcto. Para corregirlo

podemos usar las flechas subir y bajar después de seleccionar el con-

trol (panel derecho), o bien usar el comando del menú Controles/Cambiar elorden tab (eje z), con lo que hay que ir seleccionando con el ratón y segúnel orden de tabulación que queramos, uno a uno todos los controles sobreel formulario, incluyendo aquellos que no son de edición (según los pincha-mos éstos van desapareciendo). La desventaja de esta última manera esque no vemos los botones que pertenecen a controles desplegables, demodo que, cuando terminamos de pinchar sobre el formulario, todos loscontroles contenidos en botones desplegables aparecen en la ventana dela derecha, agrupados al final, y hemos de indicar su orden de tabulacióncon las flechas.

Cuando indicamos el orden de tabulación pinchando sobre el formulario,los controles van desapareciendo, para volver a aparecer cuando pincha-mos sobre el último o sobre una zona vacía del formulario. Esto no es asícuando se incluyen controles desplegables, ya que, una vez pinchado el úl-timo control, hemos de volver a pinchar sobre el formulario (que ahora seencuentra vacío) para que aparezcan los controles de nuevo (no reaparecenautomáticamente).

Con esto ya tenemos el formulario terminado. Ahora bien, comenzamos di-ciendo que las rejillas pedían formularios para editar los datos. Cabía la po-sibilidad de asociar tres tipos de formulario: altas, bajas y modificaciones.Nosotros sólo hemos hecho uno que sirve para las tres funciones, así quevamos a introducirlo en la rejilla. Para ello volvemos a la ventana de propie-dades de la rejilla (ALT+INTRO después de seleccionarla), seleccionamos elformulario en los tres controles.

Con esto también tenemos la rejilla terminada.

04 Desarrollo básicode una aplicación

Podemos crear un controlcualquiera que admita anchovariable, por ejemplo untexto estático, quecolocaremos a la izquierdade los botones. De estemodo, al crecer el formularioel control empuja hacia laderecha a los botones y nose quedan en su posiciónoriginal.

Le daremos tamaño anchovariable y, en la pestaña deEstilos de las propiedades,seleccionaremos CondiciónVisible. Ya comentamos queVelázquez Visual trabaja conbooleanos. ¿Cuál sería lacondición para que nuncase viera el control? Puessería 0. Simplemente conponer 0 como condición enun objeto, Velázquez Visualevalúa el dato como falso, yesto hace que no se cumplanunca la condición. Luegoeste control estático nuncaserá visible. Sin embargo,aunque no es visible, existey cuando el formulariocrezca, empujará losbotones hacia la derecha.Para empujar los botoneshacia abajo podríamos hacerlo mismo, pero ya tenemosel separador de pestañasque será el que lo haga.

TRUCO

Page 343: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

342 343 VELAZQUEZ VISUAL

BúsquedasAhora diseñaremos las búsquedas. Comenzaremos con una búsqueda porcódigo del cliente. Nos vamos a la carpeta de búsquedas del cliente y crea-mos un nuevo objeto Búsqueda en la base de datos. Le asignamos la tablaCLIENTES y le ponemos de nombre Clientes por Código.

La rejilla es la única que tenemos creada: CLIENTES (si tuviéramos más nosaparecerían todas en el combo, pero sólo las pertenecientes a la tabla dedatos a la que está asignada la búsqueda). Añadimos un índice con el bo-tón Añadir, y en este caso escogemos el índice código.

Esta búsqueda nos servirá para listar a los clientes por código, de modoque, en la ventana Índices, hacemos doble clic sobre el índice código, apa-reciendo la ventana Componente de búsqueda. En el control Modo de Bus-car seleccionamos Todo el fichero. Aceptamos la ventana y aceptamos labúsqueda, cambiando a continuación el identificador por uno más nemo-técnico: CLIENTES-CODIGO.

Añadir

Page 344: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Creamos otra búsqueda igual pero para el índice Nombre, que nos servirápara listar los clientes por orden alfabético.

La siguiente que creemos será aprovechando el índice de palabras: seráuna búsqueda por palabras del campo Nombre del cliente. La creamos aligual que las anteriores, excepto que en la ventana Componente de Bús-queda, al haber seleccionado el índice de palabras, nos salen varias opcio-nes. Escogemos Todas las palabras, para que al buscar por el nombre, nosencuentre todos aquellos clientes que coincidan con todas las palabras quetecleamos en la búsqueda. Además activamos Pedir Formulario, para queVelázquez Visual se encargue de mostrarnos un formulario para pedir datossin tener que programarlo nosotros.

04 Desarrollo básicode una aplicación

Page 345: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

344 345 VELAZQUEZ VISUAL

Hacemos lo mismo para la búsqueda por trozos. Sin embargo, en este ca-so no nos da más opción que Pedir formulario.

Ahora crearemos un localizador, objeto que nos servirá para buscar uncliente desde cualquier formulario de otra tabla histórica (es decir, para bus-car un cliente a la hora de asignarlo a una tarea), o desde un menú.

Insertamos un nuevo objeto visual, que será el localizador e indicamosNombre: Clientes, Tabla de datos: CLIENTES, Rejilla: CLIENTES. Escoge-mos Todos los índices y Botón para altas.

Page 346: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

De esta manera, en el localizador tendremos disponibles todos los índicespara buscar un cliente, y si no está, crearlo con el botón para altas. La re-jilla debe tener asociado un formulario de altas para que esta opción fun-cione.

MenúsAhora vamos a crear el menú para clientes, para lo que usaremos un menúdel tipo Arbolado. Entramos en la galería de objetos y pulsamos sobre elicono de menú arbolado, apareciendo la ventana de edición de menús ar-bolados. En ella le ponemos el nombre Clientes. Ésta será la raíz del menúde Clientes.

04 Desarrollo básicode una aplicación

Page 347: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

346 347 VELAZQUEZ VISUAL

Ahora vamos a trabajar con iconos en menús, y a usar el almacén de obje-tos. Pulsamos el botón Almacén de objetos y escogemos Ática/1. Bási-co (Objeto Único)/Imágenes/Multi-iconos/Multi icono con opciones de me-nú arbolado.

Elegimos Importar, y nos crea una carpeta, que borraremos después de lle-var los iconos a otra que llamaremos, por ejemplo, Recursos.

Si al pulsar este botón nosda un mensaje de error,entonces debemos buscaren el disco local la carpetaalmacén (que por defectoestará en c:\Archivos deprograma\Atica\Velazquez\Programa\Almacén).Ejecutamos entonces laopción de menúVer/Personalizar y en lapestaña Entorno especificarla senda del almacén.

ADVERTENCIA

Almacén de objetos

Page 348: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Con esto ya tenemos iconos para suministrar al menú arbolado. Pulsamosel botón Árbol/Iconos y seleccionamos el que acabamos de importar.Usaremos el primer icono para la opción de menú Nuevo Cliente, el segun-do para búsquedas en clientes, el tercero para listados, etc.

Crearemos entonces una nueva Carpeta subgrupos de menú, con el botónAñadir y le pondremos como título Clientes. Ésta será una subcarpeta

que contendrá las opciones a disparar del menú de clientes. Seleccionamospara ella el séptimo de los iconos ( ) y activamos el check Abrir al inicio,para que el árbol aparezca extendido cuando entremos al menú. El paso si-guiente es el de añadir opciones al menú, con el botón que aparece.

04 Desarrollo básicode una aplicación

Árbol/Iconos

Añadir

Icono de menú

Page 349: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

348 349 VELAZQUEZ VISUAL

Pulsamos el botón para crear la opción de nuevo cliente. Aparece en-tonces la ventana propiedades de menú, en la que escribimos Nuevo clien-te como Título opcional, como pistola seleccionamos la opción Formulario(Alta), y como bala el formulario de CLIENTES.

Usando los botones Icono anterior/siguiente, podemos escoger elicono más conveniente de la lista de multi-iconos para la opción. Elegimosel primero ( ), aceptamos y ya tenemos una opción de menú.

Ahora podemos añadir las búsquedas al menú arbolado. Empezaremos conCLIENTES-NOMBRE. En realidad va a ser un listado, así que podemos aso-ciar el tercero de los dibujos ( ). Como título ponemos Por nombre, comopistola usaremos la opción Búsqueda (Permite Vacío) para que la rejilla semuestre aunque no haya datos (dando la posibilidad de añadir entonces), ycomo bala la búsqueda CLIENTES-NOMBRE que habíamos creado.

Hacemos lo mismo con el resto de búsquedas, pero esta vez usando elicono correspondiente ( ), porque éstos sí que van a pedirnos qué bus-car. Y ya por fin tenemos el menú completo con todas las opciones paraclientes. Salimos y ya estamos preparados para hacer lo mismo con la ta-bla TAREAS.

Añadir

Icono anterior/siguiente

Icono de alfa

Icono de carpetas

Icono de búsqueda

Page 350: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Tareas

RejillaPara Tareas ya tenemos creada una rejilla que usamos en el formulario deClientes. Ahora vamos a crear una específica que usaremos para ver las ta-reas.

Vamos a la carpeta de rejillas de Tareas y creamos una rejilla visor de tablascon los campos que nos interesen, por ejemplo: Fecha, Hora de Inicio y Fin,Tipo de Tarea y Cliente. Podemos crearla con el asistente como en anterio-res ocasiones, o podemos copiar y pegar la que ya tenemos, de tal mane-ra que únicamente tenemos que alterar un poco la ya creada. Cambiamosprimero el identificador y llamamos a la rejilla TAREAS, pues va a ser la prin-cipal que usemos para ver tareas. Entramos en ella y seleccionamos Des-cripción en la cabecera y cambiamos el campo al que se refiere por el Nom-bre de Cliente.

04 Desarrollo básicode una aplicación

Page 351: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

350 351 VELAZQUEZ VISUAL

Podemos diferenciar las tareas ya realizadas de las pendientes, de modoque éstas se presenten de distinto color en la rejilla. Para ello entramos denuevo en la rejilla que acabamos de crear y pulsamos sobre una de las ca-beceras de columna cualquiera.

Page 352: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Veremos que podemos escoger Fuente y color y Otros. Si activamos estaúltima opción, tendremos la posibilidad de poner colores a los datos segúnuna condición.

En este caso, si la tarea está realizada (o sea, %REALIZADA%=1) queremosque se presente el texto de color gris. Ya explicamos que no hace falta es-cribir %REALIZADA%=1, basta con %REALIZADA%, ya que Velázquez Vi-sual evalúa el valor y lo usa como condición directamente.

04 Desarrollo básicode una aplicación

Page 353: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

352 353 VELAZQUEZ VISUAL

Tal y como lo tenemos ahora, sólo la columna que hemos seleccionado ac-tuará de esa manera, pero con ayuda de los botones Copiar condicio-nes colores-fuente y Pegar condiciones colores-fuente podemos llevar-las al resto de columnas. Pulsamos el botón de copiar, seleccionamos la co-lumna que tiene las condiciones y las pegamos en el resto con el botón co-rrespondiente.

FormularioAhora vamos a diseñar el formulario que asignaremos a las dos rejillas quetenemos creadas para TAREAS. Éste va a ser más complejo que el que hi-cimos para CLIENTES, ya que lleva muchos más datos, de ahí que usemosel separador de pestañas. En una de ellas pondremos los datos sobre laconfiguración de la tarea, en otra la descripción larga y, en la última, la des-cripción de la realización.

Creamos un formulario y le asignamos la tabla TAREAS. Éste va a contenerelementos iguales y análogos al formulario de Clientes: un separador depestañas, los botones Acepta y Sigue, Aceptar, Cancelar y Opciones/Elimi-nar. El campo Código será el de la ficha de cada Tarea, y Persona será don-de guardemos el nombre del usuario que la crea. El contenido inicial de am-bos campos es automático: por un lado el código tiene como contenido ini-cial siguiente al último y el campo Persona toma como valor la variable desistema u, que nos devuelve el nombre con el que se entra en VRunner.

Por tanto vamos a hacer que esos campos no sean editables. Para ello hayque marcar la casilla Sólo Lectura de la pestaña Estilos.

Copiar condiciones colores-fuente

Pegar condiciones colores-fuente

Page 354: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Pero además, para que el usuario sepa que esos campos no son editables,pondremos como color de fondo de los controles el que tenga como fondo3D de Windows. Para ello vamos a la pestaña de Aspecto y en Fondo y Fon-do Foco, cambiamos el color eligiendo Modo Windows y Objetos 3D: Fondo.

Antes de ponernos a hacer los subformularios de las pestañas vamos acompletar el formulario. En el enunciado del problema se establecía que,viendo una tarea concreta, se pudiera pasar a la anterior o posterior en eltiempo. Para ello habíamos creado un puntero a hermano contiguo con ín-dice por Fecha. Ahora es el momento de usarlo.

Crearemos dos botones que en la pestaña General tendrán por contenidodel texto los símbolos menor (<) y mayor (>), que en este caso simbolizaránel moverse hacia una tarea anterior y siguiente, respectivamente. En la pes-taña Comando especificamos qué hacer cuando pulsamos el botón: Mo-verse a hermano contiguo. Introducimos a continuación qué campo ha de

04 Desarrollo básicode una aplicación

Page 355: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

354 355 VELAZQUEZ VISUAL

usar para moverse. Los que habíamos creado se llamaban TAREA-PREV,para el anterior y TAREA-NEXT para el siguiente.

Podemos añadir además una tecla aceleradora. Pulsando en el botón ,escogemos F8, con lo que, estando en el formulario y pulsando esa tecla,nos moveremos hacia atrás. Hacemos lo mismo para el otro botón, esco-giendo F9.

Finalmente, usando el truco que vimos al hacer el formulario de Clientes,ponemos una etiqueta de texto entre los botones normales y éstos que he-mos creado, que sea invisible en ejecución (condición de visible=0), con an-cho variable, para que si ampliamos el formulario los botones se muevanhacia la derecha.

Tecla aceleradora

Page 356: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Subformularios del separador: ConfiguraciónAhora vamos a hacer los subformularios que llevará el separador. Creamosun formulario y ponemos como identificador TAREAS-CONFIG, le asigna-mos la tabla TAREAS y ponemos como nombre &1. Configuración.

En este subformulario incluiremos los controles para editar el Cliente, el Ti-po de tarea, la Descripción corta, Fecha, Fecha hasta, Días de duración,Avisar a falta de, Hora de inicio y finalización.

04 Desarrollo básicode una aplicación

Page 357: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

356 357 VELAZQUEZ VISUAL

Para ello usaremos cajas, que creamos pulsando el botón Caja de gru-po, que nos servirán para agrupar los controles y organizar el formulario.

Controles Código de Cliente y Nombre de ClienteEs necesario crear una caja para cliente, de modo que pulsamos sobre elcontrol caja de grupo de la barra de herramientas, llevándolo sobre la posi-ción que queramos del formulario. En texto contenido de la pestaña Gene-ral (propiedades de la caja) introducimos el título Cliente. Pulsando el botón

Edición creamos los controles de edición de campo para Código deCliente y Cliente.

Les damos el tamaño adecuado y marcamos en Más estilos de la ventanapropiedades del objeto: Botones arriba/abajo y Autocompletar. Esto haceque en ejecución podamos, pulsando los botones, subir y bajar por la listade clientes y que, escribiendo las primeras letras de uno, Velázquez Visualnos lo complete.

Vamos a añadir a los dos controles de edición un botón desplegable. Éstepermitirá que busquemos, demos de alta o modifiquemos un cliente.

Empezamos con el control de Código. Al igual que habíamos hecho para elbotón Opciones/Eliminar del formulario de Clientes, detrás de este control(recordemos que en el panel derecho podemos ver el orden) creamos tresbotones, en los que añadimos en la pestaña de Aspecto de la ventana depropiedades la opción Menú desplegable, con lo que desaparecerán lostres botones.

Caja de grupo

Edición

Page 358: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Ahora, en el control de edición de Código, marcamos la misma opción, loque hará que asuma esos tres botones como propios, mostrando el botónde menú desplegable. Vamos a editar ahora uno por uno los botones.

Hacemos doble clic sobre el primero de ellos en el panel de la derecha,puesto que ya no los podemos ver en la maquetación del formulario.

En la pestaña Comando, elegimos como función a disparar Localizar maes-tro, especificamos en qué campo buscamos (CLIENTES), que es el que nosenlaza con la tabla correspondiente, y finalmente, el localizador que usa-mos, CLIENTES, creado anteriormente.

04 Desarrollo básicode una aplicación

Page 359: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

358 359 VELAZQUEZ VISUAL

Podemos añadir una tecla aceleradora, igual que en el caso de los botonesadelante y atrás del formulario, que puede ser F5.

En la pestaña General, añadimos como texto contenido y texto tool tip Lo-calizar. El texto Tool Tip es el que aparece en el botón desplegable indicán-donos qué hace la opción.

Al siguiente control le asignamos como función a disparar Alta ficha demaestro. Asignándole como campo CLIENTE y el formulario CLIENTES nospermitirá dar de alta un cliente desde este formulario. En la pestaña Gene-ral, añadimos como contenido y tool tip: Alta.

Page 360: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

El último botón servirá para editar el cliente localizado. Así que la función adisparar será Edición ficha de maestro, el campo será CLIENTE y el formu-lario CLIENTES. En la pestaña General, añadimos como contenido y tooltip: Editar.

Estos tres botones desplegables nos sirven también para el control de edi-ción de campo del nombre de Clientes, así que los copiamos y pegamos acontinuación de éste. Tenemos que marcar, en la pestaña Estilos de pro-piedades del control, la opción de Menú desplegable para que asuma losbotones.

Por último, al igual que habíamos hecho con el formulario de clientes cam-biamos el color fondo foco, para que al editarlo aparezca reflejado. Esto mis-mo lo hacemos en todos los controles que creemos en los subformularios.

Control de Tipo de TareaCreamos primero una caja y la llamamos Tipo de Tarea. Para este controlusaremos el Combo box, pulsando el botón y situándolo dentro la caja

04 Desarrollo básicode una aplicación

Combo box

Page 361: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

360 361 VELAZQUEZ VISUAL

como en el caso anterior. Este tipo de control se usa cuando tenemos unatabla estática, como es el caso, y para asignarle el campo debemos de se-leccionar, dentro de la pestaña General de propiedades, el campo TIPO-TA-REA que enlaza con la tabla estática. De esta manera, en ejecución, el con-trol nos mostrará la lista de tareas para poder elegir la que nos interese.

Cambiamos ahora el color de fondo foco por el que hayamos elegido.

Control de la Descripción cortaEn el control de edición que se encuentra dentro de la caja Descripcióncorta, para búsquedas, editamos el contenido del campo Descripción, quees el nombre de la tarea (es decir, aquí realmente estamos poniendo nom-bre a las tareas). Para este campo usaremos un control de edición de cam-po normal, que pondremos dentro de una caja. El título de la caja será Des-cripción corta, para búsquedas. Aquí editamos este campo, que contendráuna descripción escueta de la tarea por la que posteriormente podremoshacer búsquedas.

Page 362: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Controles de los campos Fecha, Fecha hasta, avisar cuántosdías antes, días de duración y permanente; hora de inicio yhora de finalizaciónEstos cinco controles los vamos a agrupar también mediante una caja;creamos esta última y la llamamos Calendario. Dentro de ella colocaremoslos cuatro controles de edición de fechas y días.

Activamos a los cuatro la característica Botones arriba/abajo de la pestañaMás estilos, lo que permitirá en ejecución, cambiar la fecha, día a día, o elnúmero de días con esos botones.

Para los controles de calendario vamos a crear un botón desplegable quenos permita escoger la fecha desde un calendario. Para ello creamos, co-mo en casos anteriores, un botón de texto. Lo situamos en el orden de ta-bulación detrás de cada uno de los controles y les asignamos como funcióna disparar subformulario ficha actual. Esto nos lanzará un subformulariocuando pulsemos el botón, pero para ello tendremos que crear primero elsubformulario.

Sin cerrar este formulario, vamos a la carpeta Subformulario Tareas, dondecreamos el que estamos editando, y creamos dos nuevos formularios. Lesasignamos la tabla tareas y al primero lo identificaremos como TAREAS-FE-CHA y al segundo como TAREAS-FECHA-HASTA.

Entramos dentro del primero de los dos y eliminamos los botones creados,ya que no los vamos a necesitar. Insertamos un control calendario con el

04 Desarrollo básicode una aplicación

Page 363: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

362 363 VELAZQUEZ VISUAL

botón Calendario, que nos permite asignar éste a un campo o variabletipo fecha, y ajustamos el fondo del formulario al tamaño de éste.

Le asignamos el campo FECHA de tal manera que, al seleccionar una fechadel calendario, ésta queda recogida en el campo.

Salimos del formulario y creamos otro igual pero apuntando el control a FE-CHA-HASTA.

Entonces cerramos los dos y volvemos al subformulario de configuración.

Volvemos al botón desplegable en el panel derecho, damos doble clic paraque salgan las propiedades y completamos entonces, en la pestaña de Co-

Calendario

Page 364: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

mando, la función a disparar Subformulario ficha actual con el Formularioque asignamos a cada uno.

Nos falta por tanto el control para activar Permanente. En este caso usamosun control de casilla de verificación check box. Lo colocamos a un ladoen la caja y elegimos el campo PERMANENTE (veremos que únicamentenos aparecen aquellos campos que sean booleanos) y el texto que quere-mos que aparezca. El título por defecto viene a la derecha de la casilla, pe-ro podemos cambiarlo en la pestaña Aspecto.

Creamos etiquetas para cada uno de los controles creados aprovechan-do los Textos estáticos, recogiendo los nombres de los campos directa-mente.

Ya vimos que la casilla de verificación de PERMANENTE servía para hacerque una tarea estuviera activa todo el año. Para que esto sea así no hemosde hacer nada más, ya que el contenido inicial de Fecha hasta es modifica-do cuando marcamos permanente: fDecidirDato( %PERMANENTE%, fFe-cha( 31, 12, fAño( %FECHA% ) ), %FECHA% + %DIAS% ). Este contenidoinicial no se almacenará hasta que aceptamos el formulario; hasta que lohagamos, si marcamos o desmarcamos PERMANENTE, el valor que mues-tre Fecha Hasta se refrescará, mostrando el de final de ese año (si marca-mos la casilla), o el de la fecha del momento más el número de días que in-troduzcamos (si no la marcamos). Esto se debe a que Velázquez Visual cal-cula y presenta en todo momento el valor que toma un contenido inicialhasta el momento en que aceptamos, a partir del cual el contenido inicialno variará aunque editemos de nuevo el campo, a no ser que en la fórmulaincluya otros campos.

Ya sólo nos quedan los controles de horario que agruparemos en una cajaque llamaremos Horario. Creamos dos controles de edición de campo a losque les añadimos la opción de botones arriba/abajo de la pestaña Más es-tilos, y las etiquetas para ellos.

04 Desarrollo básicode una aplicación

Un campo fórmula seactualiza automáticamentecon los datos que hay entodo momento, es decir, sicreamos una tarea, laeditamos de nuevo ymodificamos en ejecuciónalguno de los componentesde esa fórmula numérica, elresultado cambia. Sinembargo, en un campo concontenido inicial, una vezque éste es introducido yaceptado no cambia, a noser que volvamos a editarlo ycambiemos el valor dealguno de los campos queinfluían en su valor. Pero si elcontenido inicial estácompuesto únicamente porconstantes, funciones ovariables, no se recalcularáel contenido inicial aleditarlo. En el caso de uncontenido inicial en el que lafórmula incluya campos,funciones, variablesglobales, etc., al editar laficha recalculará también lasfunciones y tendrá encuenta los valores quetengan las variables en esemomento. Si no hay camposen la fórmula del contenidoinicial, las funciones ovariables no seránrecalculadas y el campomantendrá su valor.

ADVERTENCIA

Check box

Page 365: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

364 365 VELAZQUEZ VISUAL

Maquetación y toques finalesPor último, para que al ampliar el cuadro de diálogo estos controles agru-pados queden mejor y no se descoloquen, hemos de dar ancho variable alos controles de edición de Nombre de Cliente (no al control de Código deCliente, ya que, al estar en la misma línea, se solaparían), Tipo de Tarea yDescripción corta, y a las cajas correspondientes.

Entre las cajas de Calendario y Horario vamos usar de nuevo el truco paraque se muevan los controles al ampliar el formulario. Para ello insertamosun texto estático con condición de visibilidad 0 y que sea de ancho varia-ble. El resto, las cajas y los controles, serán de ancho fijo.

Tenemos que acordarnos también de poner como color de fondo foco aquelque hallamos elegido.

Subformularios del separador de subformularios: DescripciónLargaCreamos otro subformulario al que pondremos como identificador TAREAS-DESC-LARGA, asignado a la tabla TAREAS con el nombre &2. Descripciónlarga. Al entrar, borramos de nuevo los botones. Aquí, únicamente vamos acolocar un control de objeto texto, pulsando el botón correspondiente . Objeto texto

Page 366: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

En la pestaña General le asignaremos el campo DESC-LARGA (en la lista só-lo nos aparecerán los objetos tipo texto pertenecientes a la tabla TAREAS),y pondremos como tamaño ambos variables en la pestaña de Estilos.

Subformularios del separador de subformularios: RealizadoCreamos otro subformulario para los datos de la realización, con identifica-dor TAREAS-DESC-REALIZADO y como nombre &3. Realización, asignadoa la tabla TAREAS.

Usamos el control de casilla para marcar la tarea como realizada, y dos con-troles de edición de campo para Fecha realizado y Hora realizado que, co-mo no van a poder ser editados, les activamos Sólo Lectura en la pestañade Estilos y cambiamos el color de fondo y fondo foco por el de fondo 3Dde Windows.

04 Desarrollo básicode una aplicación

Page 367: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

366 367 VELAZQUEZ VISUAL

Por último hacemos una caja con el título de Descripción de la realización,donde irá el control de objeto tipo texto para el campo Descripción realizado.

Terminando el separador de subformulariosPara terminar con el separador de pestañas, añadimos los subformulariosen el separador que habíamos creado, y en el orden que prefijamos. Paraello pulsamos sobre el separador con el botón derecho del ratón, apare-ciendo la ventana de propiedades. Con el botón insertar seleccionamos lossubformularios asociados, en el mismo orden en el que aparecen las pes-tañas. Si tenemos que cambiar el orden, usamos las flechas para co-locar las pestañas.

Con esto ya tenemos terminado el formulario para Tareas.

BúsquedasAhora vamos a crear las búsquedas que necesitamos. Por un lado están lasbúsquedas sencillas, Tareas por código, por nombre, por palabras o por tro-zos de palabras, que hacemos igual que para clientes. Construimos tam-bién el localizador, incluyendo los cuatro índices que usamos para las bús-quedas anteriores.

En la exposición del enunciado ya comentamos que queríamos búsquedaspor la descripción corta de la tarea, ahora bien, como el campo NOMBREde la tarea es la Descripción (lo que hasta ahora estamos llamando Des-cripción corta), las búsquedas recién creadas son en realidad las búsque-das por la descripción corta.

Subir y bajar

Page 368: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Pero necesitamos también una lista de las tareas pendientes, otra de las ta-reas a realizar en el día, otra entre fechas y también habrá una búsquedaavanzada en la que podamos discriminar por Cliente, si la tarea está reali-zada o no y entre fechas. Pongámonos con ellas.

Búsqueda de pendientesPara esta búsqueda usamos como componente el índice PDTES-FECHAque creamos anteriormente, y que nos da una lista de todos aquellos regis-tros que tengan a cero la casilla de REALIZADO, es decir, que estén pen-dientes.

En Modo de buscar, pondremos todo el fichero ya que el índice, como diji-mos, sólo recoge las que estén pendientes, luego no tenemos que discri-minar nada más.

Búsqueda de Tareas de HoyPara buscar las tareas que tenemos para hoy, aprovecharemos el índice FE-CHA, que tenemos ya creado.

04 Desarrollo básicode una aplicación

Page 369: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

368 369 VELAZQUEZ VISUAL

La búsqueda en este caso la haremos entre límites. Esto es así porque eneste índice tenemos dos componentes y hay que resolver las dos. Si úni-camente hubiera una sola componente (Fecha), podríamos buscar por laparte izquierda de la clave la fecha de hoy, pero como tenemos dos com-ponentes, si sólo resolviéramos el primero buscaría una hora de inicio enblanco con la segunda componente y no encontraría ninguna tarea, puestodas tienen hora de inicio.

Así pues, buscamos entre límites y usamos la función fHoy() que nos de-vuelve la fecha del momento, poniéndola como límite inicial y final. De igual

Page 370: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

manera podríamos concretar la hora, desde “00:00:00” hasta “23:59:59”,pero en este caso no hace falta. Si ponemos un límite final, pero no el ini-cial, nos buscará todas aquellas tareas que tengan una hora de inicio ante-rior, con lo que nos aparecerán todas las del día.

Búsqueda entre fechasPara esta búsqueda tenemos que introducir un nuevo elemento, un formu-lario específico de búsqueda. Lo elegimos en la Gale-ría de objetos, y veremos que la forma de editarlo es igual que un formula-rio normal, sólo que en este caso no aparece ningún botón. Velázquez Vi-sual pone esos botones en ejecución (uno de Buscar y otro para Cancelarel formulario).

Antes que nada, como la búsqueda la vamos a realizar entre fechas, nece-sitamos dos variables para recoger las fechas límite. Vamos entonces al pa-nel de variables e insertamos dos, bien pulsando la tecla Insertar o con elbotón de la derecha sobre el fondo y pulsando .Creamos la primera, a la que ponemos como identificador BUS-FECHA-DESDE, como nombre Fecha desde y como tipo de dato el que es: fecha.La persistencia (dónde queremos que se guarde y quién accede a ella) se-rá En memoria (independiente cada tarea 2º Plano). Esto es lo normal cuan-do usamos variables para una búsqueda entre límites. De esta manera, elmismo formulario de búsqueda puede ser usado al tiempo por varias per-sonas, o la misma persona varias veces, sin que se compartan los valores.

04 Desarrollo básicode una aplicación

Page 371: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

370 371 VELAZQUEZ VISUAL

De igual manera creamos otra para Fecha hasta, con identificador BUS-FE-CHA-HASTA. Podemos ordenar las variables que creamos con carpetas, taly como hacemos con los objetos visuales.

En estas variables recogeremos los valores de los límites de búsqueda através del formulario de búsqueda.

Page 372: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

En el formulario de búsqueda incluiremos dos controles de edición de cam-po, que servirán para cada una de las variables, con sus respectivos con-troles de calendario, asignados cada uno a una variable.

Tal y como está el diseño, cambiando el valor de la fecha en un control deedición, cambiará también en el calendario respectivo, y viceversa. Veláz-quez Visual se encarga de refrescar ambos en ejecución.

Ahora sí, vamos a la carpeta de Búsquedas de Tareas y creamos un formu-lario para búsquedas, asignamos la tabla TAREAS, y le ponemos una des-cripción acorde a cómo se usará: Búsqueda entre fechas. Aceptamos y co-mo identificador ponemos TAREAS-ENTRE-FECHAS.

Una vez que tenemos creado el formulario, vamos a hacer el objeto visualde búsqueda completo. Vamos a la Galería de Objetos y seleccionamosBúsqueda en la base de datos. Asignamos la tabla de datos TAREAS y co-mo nombre ponemos Tareas entre fechas. La rejilla que usaremos para pre-sentar el resultado de la búsqueda será la de TAREAS que venimos usandosiempre y el formulario inicial, el que acabamos de crear ahora: TAREAS-ENTRE-FECHAS.

04 Desarrollo básicode una aplicación

Page 373: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

372 373 VELAZQUEZ VISUAL

Usaremos para resolver la búsqueda el índice que tenemos creado de FE-CHA. Pero éste tiene dos componentes: FECHA y HORA-INICIO y debemosresolver ambos. Pulsando doble clic sobre FECHA, usamos como dato lí-mite inicial la primera de las variables que creamos: $BUS-FECHA-DESDE$(un identificador, como ya sabemos, entre símbolos $ es una variable) y co-mo dato límite final la otra: $BUS-FECHA-HASTA$. Para ello podemos usarel asistente de fórmulas que, a través de la opción del menú Variablesglobales (F6), nos permite escoger las variables de una lista.

Variables globales

Page 374: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Para resolver el componente HORA-INICIO hemos de tener en cuenta unaparticularidad de los campos tipo Hora. Si no resolviéramos este compo-nente (si no pusiéramos límites), podríamos pensar que, tal y como pasaríasi fuese de tipo alfabético en cualquiera de sus modalidades, nos buscaríatodas las tareas que resolviera por el primer componente (fecha) y luego noslas ordenaría por el segundo componente (hora de inicio). Pero he aquí quelas horas pueden ser nulas, esto es, una hora válida son las 00:00h, y dejarlos límites en blanco equivale a indicar que el límite es cero. Por lo tanto, sino ponemos límites a las horas estamos buscando tareas que empiecen yterminen a las 00:00, lo que es un error.

Hay tres maneras de tratar esto. Podemos crear otro índice que tenga co-mo componente únicamente FECHA. También podríamos dar a escoger através del formulario y con ayuda de otras dos variables los límites de ho-ras. La tercera (que será por la que obtenemos ya que, por un lado evita-mos crear un índice redundante y por otro, complicar el formulario pidien-do más datos) será la de poner unos contenidos iniciales fijos para los lí-mites.

04 Desarrollo básicode una aplicación

Page 375: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

374 375 VELAZQUEZ VISUAL

Velázquez Visual permite en las búsquedas con límites hacer dos cosas: po-demos poner un límite inicial y uno final, o bien poner sólo uno de los dos.En este último caso buscará todos aquellos hasta el que pongamos comolímite final o todos aquellos desde el que demos como límite inicial.

Nosotros usaremos “23:59:59” como contenido inicial del campo para lími-te final, lo que hará que busque todos los que tengan una hora anterior aesa (que serán todos los de ese día).

Con esto ya tenemos preparada la búsqueda entre fechas. Posteriormente,en ejecución, podremos seleccionar en el formulario de búsqueda las fe-chas que marcan los límites inicial y final de ésta.

Búsqueda AvanzadaEn la exposición de la aplicación habíamos hablado de una búsqueda avan-zada en la que pudiéramos escoger un cliente, el estado de la tarea (reali-zada, pendiente) y entre qué fechas.

Crearemos un formulario para búsqueda con identificador TAREAS-AVAN-ZADA, con nombre Búsqueda avanzada de tareas asignado a la tabla TA-REAS. Podemos copiar los controles para cliente que creamos en el formu-lario de edición de una TAREA. Junto con los controles también traemos losbotones desplegables que teníamos hechos. También podemos aprovecharlos controles que usamos en la búsqueda entre fechas, tanto los de tipo Ca-lendario como los de edición, y las mismas variables que usamos antes.

Como no hemos visto procesos, no podemos inicializar las variables paralimpiar los valores que hayamos usado en búsquedas anteriores. Para so-lucionar este problema hemos de crear una casilla de verificación en la queindicamos si vamos a buscar entre fechas o no. La casilla irá asociada a unavariable de tipo booleano que llamaremos Búsqueda entre fechas, con iden-tificador BUS-ENTRE-FECHAS y persistencia en memoria independiente decada tarea en 2º plano. A la hora de realizar la búsqueda comprobaremosque la casilla asignada a la variable esté activada. A la casilla de verificaciónle ponemos como título Filtrar el período de fechas seleccionado.

Page 376: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Ya tenemos preparados los controles para cliente y entre fechas. Nos faltaúnicamente el estado de la tarea. Para ello usaremos botones de radio y unavariable. La variable será de tipo numérico, con identificador TAREAS-ES-TADO, y de nombre tareas estado: 0-Todas, 1-Pendientes, 2-Realizadas,que indica los estados que puede tener. Tendrá persistencia en memoria in-dependiente de cada tarea en 2º plano, y longitud 1 byte.

04 Desarrollo básicode una aplicación

Si tenemos estados consólo dos posibilidadesusamos booleanos:activado, desactivado;verdadero o falso, sí o no.Pero cuando tenemosestados con más de dosposibilidades y usamosvariables para éstos, nos esinteresante documentar loscasos en la descripción deéstas. Podemos indicar paracada estado cuál ha de serel valor de la variable, seaésta numérica o alfabética,de tal manera que cada vezque la usemos de nuevosigamos la misma norma sinconfundir el convenio. Sitrabajamos con variablesnuméricas, como pordefecto el valor que toma es0, es interesante que elcaso más general sea el quetenga este valor. Así, si enun formulario tenemos laposibilidad de escoger unestado, como por defecto elvalor de la variable será 0,estará escogido el estadomás generalautomáticamente.

TRUCO

Page 377: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

376 377 VELAZQUEZ VISUAL

Los botones de radio tendrán asignados esta variable. Como texto Todas,Pendientes y Realizadas, y como dato fijo 0, 1 y 2, respectivamente. De es-te modo, si marcamos el botón de radio Todas, le estaremos pasando a lavariable el valor 0, lo que se traduce en que la búsqueda la llevará a cabosobre todas las tareas (estén realizadas o no).

Agrupamos los controles en una caja y la titulamos Estado. Tenemos en-tonces terminado el formulario de búsqueda avanzada.

Page 378: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Ahora tenemos que diseñar el objeto visual Búsqueda en la base de datos,seleccionándolo en la Galería de Objetos y con identificador TAREAS-AVAN-ZADA, de nombre Avanzada y asignada a la tabla TAREAS. El formulario debúsqueda es el que acabamos de crear y la rejilla asociada será TAREAS.

Veamos cuáles son los componentes para la búsqueda y cómo vamos atrabajar con ellos. Tenemos tres elementos para la búsqueda: Cliente, Esta-do y Fechas. Los tres serán opcionales, es decir, podremos elegir uno, doso los tres elementos para la búsqueda, luego los componentes de ésta ten-drán que tener una condición.

En el caso de Clientes, la condición para que se busque por este campo hade ser que esté elegido uno, luego el código será distinto de cero. Por tanto,el componente de la búsqueda Cliente ha de tener como condición %CLIEN-TE%!0, o lo que es lo mismo, %CLIENTE%. No necesitamos especificar con-tenido inicial, pues Velázquez Visual ya lo toma directamente del control deedición del formulario. Por otro lado, si usamos este componente, ha de sercruzando con el resto de los datos obtenidos por el resto de componentes.

Para Estado tenemos una situación particular. Teníamos tres opciones, to-das las tareas, pendientes y realizadas, en los que la condición era 0, 1 o 2,respectivamente. Usaremos los índices CODIGO y PDTES-FECHA para re-solver esta búsqueda. Por un lado usaremos como componente el índiceCODIGO, con modo de buscar: Todo el fichero, con lo que tendremos la lis-ta completa de tareas. Para las pendientes, usaremos la componente PD-TES-FECHA: si queremos las pendientes, se cumplirá que la variable TA-REAS-ESTADO será igual a 1, luego cruzaremos la lista completa con lasque están pendientes. Esta componente ha de tener entonces como carac-terísticas Mezcla: Cruzar, Modo de buscar: Todo el fichero, y de CondiciónActiva: $TAREAS-ESTADO$=1.

04 Desarrollo básicode una aplicación

Page 379: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

378 379 VELAZQUEZ VISUAL

En el caso contrario, que no queramos más que las realizadas, tenemos queagregar de nuevo el índice PDTES-FECHA, pero esta vez con la opción deMezcla: Quitar y con Condición activa: $TAREAS-ESTADOS$=2.

De esta manera si queremos todas, el estado de la variable $TAREAS-ES-TADOS$ será 0, luego a la lista de tareas por código no cruzará la siguien-te componente para sacar las pendientes, ni quitará éstas porque no secumplirá la condición activa de ninguna de las otras dos componentes. Siel estado de la variable es 1, entonces de la lista por código cruzará las queestén pendientes y se quedará con esas, ya que se cumplirá la condiciónactiva, pero no se cumplirá la condición activa para quitar las pendientes.En el último caso, con el valor 2 en la variable, sí se cumplirá la condiciónactiva para quitar las pendientes, quedando entonces de la lista por códigosólo las realizadas, pero no se cumplirá la otra.

Por último, la búsqueda entre fechas será activada si se cumple que el boo-leano BUS-ENTRE-FECHAS, sea igual a 1, es decir, hayamos activado lacasilla. El índice que usaremos será FECHA y lo resolveremos igual que enel caso de la búsqueda entre fechas, con modo de buscar: entre límites, conlos mismos contenidos iniciales.

El orden de los componentes de la búsqueda es importante también. En es-te caso el orden sería: CODIGO, FECHA, PDTES-FECHA (Cruzar), PDTES-FECHA (Quitar), CLIENTE. Sabemos qué orden deben llevar CODIGO y PD-TES-FECHA, sin embargo, no importa tanto el orden de FECHA y CLIENTEal ser el modo de Mezcla cruzar o quitar. El problema surge si tenemos co-

Page 380: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

mo modo de mezcla añadir, caso en el que hay que tener cuidado dónde seponen los componentes.

Con esto terminamos las búsquedas. Podríamos crear un localizador, perode momento no vamos a usarlo.

AgendizadorVamos a usar un elemento nuevo: el agendizador. Es muy fácil de configu-rar al estar especialmente diseñado para el caso que nos ocupa, una agen-da. El funcionamiento es muy sencillo: al seleccionar una fecha en el calen-dario del agendizador, ésta será asignada a una variable de tal manera quepresentará las tareas cuyo intervalo (fecha de inicio - fecha de fin) conten-ga la fecha que hemos marcado. En una rejilla mostraremos las tareas jun-to con los días que faltan para terminar la tarea (contando desde el día se-leccionado), dato que se calculará en función del valor que toma la variabledel agendizador, y que usamos en el campo tipo fórmula numérica: Días quefaltan ((%FECHA-HASTA%-$AGENDA-FECHA$)+1). Por lo tanto será diná-mico, irá cambiando según el día que seleccionemos en el calendario de laagenda. Añadiremos otra funcionalidad más a la rejilla, de modo que éstapresentará en rojo las tareas cuya fecha entre dentro del período de losdías de aviso, y en verde las permanentes.

Comenzaremos entonces creando la rejilla. Para ello podemos usar la queya tenemos: TAREAS, copiando y pegando, o hacer una nueva. Como enrealidad lo que haremos será añadir una o dos columnas y cambiar condi-ciones de texto y color, usaremos la que teníamos. Le ponemos como iden-tificador TAREAS-AGENDA y como nombre Agenda.

Pulsando el botón Nueva columna, añadimos los campos que nos fal-tan: Fecha Hasta, Días que faltan y Descripción corta. Modificamos las ca-beceras para poner las etiquetas que nos parezcan más convenientes, yajustamos los anchos de las columnas, mirando aquellas que nos intereseque tengan ancho variable.

Una vez hecho esto, pulsamos en la cabecera de una cualquiera de las co-lumnas para editar nuevas condiciones de texto y color. Como habíamos

04 Desarrollo básicode una aplicación

Nueva columna

Page 381: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

380 381 VELAZQUEZ VISUAL

comentado, queremos que nos aparezcan con fondo rojo aquellas tareasque entren en el período de aviso que marcamos, y con fondo verde las quesean permanentes. Pulsamos Otros en la caja de Fuente y color y añadimosa la condición ya establecida, por la que si una tarea está realizada se ve enun color más claro (%REALIZADA%), las nuevas condiciones.

Mediante la primera condición nos avisará con unos días de antelación dela finalización de la tarea, y consiste en que el número de días que faltan pa-ra que finalice la tarea sea menor o igual que los días de aviso. Como en Ve-lázquez Visual no existen los símbolos £, menor o igual, ni ≥, mayor o igual,usamos lógica booleana resultando que para que nos avise «los días quefaltan no han de ser mayores que los días de aviso», esto es: !( %DIAS-FAL-TAN% > %DIAS-AVISO% ). Insertamos la condición y elegimos un fondo ro-jo y un color claro para el texto.

Para las tareas que son permanentes, al igual que hicimos con las realiza-das, usamos el campo booleano como condición, de manera que si es ver-dadero, es decir, igual a uno, entonces se activarán los colores condiciona-dos. Elegimos para éste el color verde de fondo y un color también claro pa-ra el texto.

Ahora vamos con el agendizador. Lo seleccionamos en la Galería de obje-tos y ponemos como identificador TAREAS, así como lo asignamos a lamisma tabla y ponemos como nombre Tareas. Tenemos dos posibilidadescon el agendizador: usar un intervalo de fechas (ambas inclusive) o fechaúnica. Trabajaremos en este caso con el primer modo, con lo que nos apa-recerán las tareas en cuyo intervalo de fechas se encuentra la fecha queseleccionamos en el calendario (en el segundo caso, sólo nos apareceríanlas tareas en que coincida la fecha de inicio con la que estemos mirando).El campo fecha inicial es el que creamos con nombre FECHA, que es la fe-cha en que se inicia la tarea, mientras que campo fecha final es FECHA-HASTA, el día que finaliza la tarea. Usaremos la rejilla que acabamos decrear y variable fecha seleccionada es la que creamos para el campo tipofórmula numérica: Días que faltan y la que hará dinámicos los resultados enla rejilla. Luego podemos cambiar el tipo de letra y los colores de texto yfondo.

Page 382: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Para que la agenda funcione no necesitamos hacer nada más.

MenúAhora vamos a hacer el menú que lance todas las opciones que hemoscreado para la tabla TAREAS. Nos situamos en la carpeta Menú de Ta-reas y seleccionamos el objeto Menú arbolado de la Galería de Obje-tos.

Como siempre, le ponemos el nombre Tareas y como identificador TAREAS,y en Árbol/Iconos seleccionamos el mismo conjunto de multi-iconos quehabíamos usado para Clientes (sólo nos aparecerá ese).

04 Desarrollo básicode una aplicación

Page 383: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

382 383 VELAZQUEZ VISUAL

Al igual que hicimos en el menú de Clientes, añadimos una carpeta subgru-po de menú, con la característica de Abrir al inicio y vamos añadiendo lasdistintas opciones con su icono correspondiente. Añadimos en primer lugarel alta de una tarea con formulario y las búsquedas. En estas últimas, va-mos a contar con una opción más.

Además de la rejilla resultado de la búsqueda, vamos a presentar un for-mulario en el que podamos ver un registro determinado de la tabla y edi-tarlo. Este formulario será el que hemos creado para Tareas. Para ello, enlas propiedades de una opción de menú, además de la pistola que dis-pare la opción de búsqueda, y escoger ésta en la primera bala, activa-mos la 2ª bala y escogemos formulario. Al pulsar en Cambiar 2ª bala, nosaparecerán las opciones (todos los formularios y subformularios de la ta-bla Tareas) y escogemos TAREAS, que es el que habíamos creado paraeditarlas.

Page 384: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

De esta manera, con la primera bala abre la rejilla, y con la segunda bala nosabre adyacente el formulario.

Nos queda por incorporar un último elemento: el agendizador. Para dispa-rar esta opción tenemos que hacer uso de la pistola Agenda tabla comple-ta, y como bala Agendizadores el que creamos TAREAS.

Éste, al contrario que los anteriores, no admite una segunda bala, por lo queno podemos ver el formulario adyacente, pero sí podemos editar los regis-tros por medio de éste.

04 Desarrollo básicode una aplicación

Page 385: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

384 385 VELAZQUEZ VISUAL

Menú GeneralPor último sólo nos queda crear el menú general por el que accederemostanto al menú de Clientes como al menú de Tareas.

Velázquez Visual arranca siempre en un menú tipo formulario denominadoAUTOEXEC, así que sobre la base de éste vamos a montar el menú general.

Creamos en primer lugar una carpeta que llamaremos $Comunes, en la queirán todos los objetos generales de la aplicación. Sabemos además que elalmacén no repetirá objetos que estén en esa carpeta.

Al editar las propiedades del menú tipo formulario, veremos que éste no tie-ne que ser asignado a ninguna tabla, al igual que los menús arbolados. Es-to es así porque tiene que lanzar objetos asignados a distintas tablas.

Menú general arboladoDentro de la carpeta $Comunes creamos una que se llame Menús con el di-bujo correspondiente y dentro creamos un Menú Arbolado, seleccionándo-lo de la Galería de Objetos. Usaremos este menú para aunar los dos que yatenemos de Clientes y Tareas. Pondremos como identificador de este me-nú GENERAL-ARBOLADO y como nombre Menú general. Incluiremos doscarpetas subgrupo, a la primera la llamaremos Menú general de nuevo y ala segunda Salir.

En la carpeta subgrupo Menú general incluiremos dos opciones con pisto-la Incluir Carpetas Menú, una para cada menú. Esto hará que en el menúgeneral arbolado aparezcan como ramas de éste los menús de Clientes yTareas.

En GENERAL-ARBOLADO añadiremos la segunda carpeta subgrupo, queserá Salir, con título opcional Cerrar la aplicación y pistola: Cerrar la aplica-ción.

Page 386: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Si activamos Abrir al inicio, tendremos esta opción abierta al abrir la aplica-ción. Por último, vamos a montar el menú arbolado sobre el menú tipo for-mulario.

Menú general tipo formulario AUTOEXECDesde la galería de objetos creamos un menú tipo formulario, apareciendouna ventana de edición similar a la de los formularios. Elegimos los pará-metros que queramos: color de fondo, dibujo de fondo, etc., en las propie-dades del menú (botón de la derecha sobre el fondo o ALT-ENTER). A con-tinuación pulsamos el botón Menú arbolado y lo arrastramos hasta elcentro del formulario. En las opciones del menú (botón de la derecha), ele-gimos el menú que queremos presentar, que será el GENERAL-ARBOLA-DO, ponemos los estilos que nos parezcan mejores (borde, sombra, etc.) yelegimos ancho variable, para que se adapte el tamaño del menú en funciónde la ventana que lo contenga.

Podemos añadir algún dibujo para hacer más atractivo el menú. Para ellocerramos el formulario y creamos un objeto dibujo seleccionándolo en lagalería de objetos. Podemos, o bien introducir un dibujo gif (que puede ser

04 Desarrollo básicode una aplicación

Menú arbolado

Page 387: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

386 387 VELAZQUEZ VISUAL

animado), o cualquier otro formato (dibujo). Sea del tipo que sea funcionaigual. Elegimos crear el objeto dibujo, y cuando entremos en la pantalla deedición podemos pegar uno que tengamos en memoria o escoger en el me-nú Edición/Pegar desde uno que tengamos en el disco duro.

Ese dibujo lo podemos aprovechar para que aparezca cuando iniciamos laaplicación. Para ello vamos al menú Comunes/Convertir en/Splash quedan-do renombrado y con esa función.

Ahora, volvemos al formulario y pulsando el botón Dibujo o Gif, se-gún lo hayamos creado, posicionamos el dibujo donde queramos y elegi-mos en las propiedades del control el dibujo que hemos llamado SPLASH.

Finalmente, añadimos un título pulsando el botón Texto estático. Pul-sando con el botón derecho sobre él, podemos elegir el texto (Editar op-ción), color, sombra, etc.

De esta manera ya tenemos completo el menú. Ahora salimos, y converti-mos este menú tipo formulario que acabamos de terminar en el menú deautoarranque. Para ello vamos a la barra de menú y escogemos la opciónComunes/Convertir en/Menú inicial, que sería lo mismo que renombrarlocomo AUTOEXEC.

Con esto damos por finalizada la aplicación. Pasamos a hora a ejecutarla.

EjecuciónNada más arrancar la aplicación, aparece el menú tipo formulario con elmenú arbolado incrustado, además del dibujo y el título que hemos in-cluido.

Dibujo o Gif

Texto estático

Page 388: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Podemos ir probando a crear un nuevo cliente:

Aceptamos y creamos una nueva tarea:

04 Desarrollo básicode una aplicación

Page 389: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

388 389 VELAZQUEZ VISUAL

Creamos varias tareas para este cliente y algún cliente más, para luego rea-lizar búsquedas por trozos o palabras de la descripción:

Podemos probar a buscar entre fechas con el formulario que habíamoscreado:

Page 390: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

También tenemos a nuestra disposición la búsqueda avanzada:

Para todas estas búsquedas nos mostrará la rejilla con el formulario de edi-ción adyacente:

04 Desarrollo básicode una aplicación

Page 391: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

390 391 VELAZQUEZ VISUAL

Situados en la rejilla podremos movernos de una tabla a otra con ayuda delnavegador y lanzar el resto de funciones que Velázquez Visual nos da pordefecto.

El agendizador nos mostrará el calendario junto a la rejilla de datos:

Page 392: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

05Inspectores

Page 393: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf
Page 394: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Los Inspectores son unas herramientas muy prácticas a la hora de progra-mar en Velázquez Visual. Los hay de análisis de objetos, de localización delos mismos y, por último, de errores. A continuación iremos viéndolos unopor uno.

5.1 De tablas y campos… (F10)

Este inspector sirve para ver y localizar los campos que contiene una tabla.Se muestra una ventana en la que se incluye un control para seleccionar latabla y otro control que muestra los campos que contiene la tabla seleccio-nada. El campo lo elegimos en función del nombre que le pusimos al crear-lo (no del identificador con el que lo referenciamos).

Haciendo doble clic sobre un campo, o seleccionándolo y pulsando el bo-tón Aceptar, Velázquez se posicionará sobre él, es decir, abrirá en la zonadel Editor de Proyectos de Estructura de datos la tabla correspondiente, yse posicionará sobre el campo elegido.

05 Inspectores

Inspector de campos

Page 395: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

394 395 VELAZQUEZ VISUAL

Por defecto, la tabla que se presenta inicialmente en la pantalla de búsque-da si no hay ninguna seleccionada es la primera que se encuentre en el pa-nel izquierdo del Editor, si está seleccionada alguna presentará esa. Pero sise ejecuta, por ejemplo, desde el editor de informes o el editor del formula-rios, es decir, editando un objeto, se presentará la tabla asociada a dichoobjeto y los campos correspondientes a esa tabla.

5.2 Dónde se usa el objeto (F9)

Con este inspector podremos localizar en qué objetos se utiliza el objeto vi-sual seleccionado. Podemos utilizarlo tanto en el panel izquierdo con las ta-blas de datos, campos, enlaces históricos, índices y las variables globales,como en el panel derecho con los objetos visuales creados.

• Panel izquierdo: marcando una tabla de datos y utilizando esta op-ción, el programa mostrará una ventana en la que se verá qué objetosdel panel derecho la utilizan, y seleccionando uno de ellos nos lo lo-calizará automáticamente en el panel derecho o en el izquierdo si esuna tabla.

Dónde se usa

Page 396: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Seleccionando una variable global podremos ver en qué tablas y en quéobjetos visuales del panel derecho se utiliza y, al seleccionar estos últi-mos, se puede ver en el control que aparece en la parte inferior de laventana en qué parte del objeto se usa.

Si lo que seleccionamos es un campo, un índice o un enlace histórico, podre-mos ver en qué tablas del panel izquierdo y en qué objetos visuales del panelderecho se usa, y al seleccionarlos en qué parte en concreto de esos objetos.

05 Inspectores

Page 397: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

396 397 VELAZQUEZ VISUAL

Estos objetos estarán agrupados según del tipo que sean. Seleccionan-do un objeto y haciendo doble clic sobre él, o pulsando el botón Locali-zar, Velázquez se posicionará sobre él.

• Panel derecho: seleccionando un objeto determinado, el programa nosmostrará una ventana con el nombre de todos los objetos visuales quelo utilizan y, al igual que en los anteriores inspectores, en qué parte con-creta del objeto. Marcando el objeto deseado y haciendo doble clic so-bre él, o pulsando el botón Localizar, Velázquez nos lo localizará auto-máticamente en el panel derecho.

Page 398: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

5.3 Qué objetos usa

Este inspector se usa para objetos visuales del panel derecho del Editor.Sirve para localizar los objetos que utiliza el objeto seleccionado. Marcan-do un objeto del panel derecho el programa mostrará una ventana con elnombre de todos los objetos visuales que utiliza. En la ventana inferior,cuando seleccionamos uno de los objetos, aparece información acerca deluso que se hace del objeto. Seleccionando el objeto deseado y haciendodoble clic sobre él, o pulsando el botón Localizar, Velázquez Visual lo loca-lizará automáticamente en el panel derecho.

05 Inspectores

Qué objetos usa

Page 399: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

398 399 VELAZQUEZ VISUAL

5.4 Objetos no usados

Presenta una lista con los objetos, tanto públicos como privados (en ca-so de que en sus propiedades exista la posibilidad de definir estos esti-los), que no están siendo utilizados por ningún objeto del proyecto. Estaopción es muy útil para eliminar objetos que no son necesarios en el pro-yecto. Debemos tener en cuenta que en el proyecto pueden existir obje-tos tales como informes, procesos, rejillas, etc. que sean públicos, lo quequiere decir que, aunque no están siendo utilizados directamente por otroobjeto, han sido creados y están disponibles para que el usuario final pue-da utilizarlos en tiempo de ejecución. Por eso, recomendamos que antesde proceder al borrado de un objeto debemos asegurarnos de que searealmente innecesario.

Objetos no usados

Page 400: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

5.5 Por tipo de objeto (Ctrl + F9)

Permite localizar objetos por su tipo (formularios de edición, menús tipo for-mulario, búsquedas…). Se muestra un cuadro de diálogo dividido en dospartes: en la izquierda se muestran todos los tipos de objetos de Velázquezy, en la derecha, todos los objetos del tipo del que esté seleccionado utili-zados en el proyecto actual. También nos da cierta información de cada ob-jeto. La información variará en función del tipo de objeto seleccionado. Pa-ra saber qué objetos de un cierto tipo estamos utilizando en un proyecto,basta con marcar en la parte izquierda del cuadro de diálogo el tipo de ob-jeto para que en la parte derecha se muestren todos los existentes en dichoproyecto.

05 Inspectores

Objetos por tipo

Page 401: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

400 401 VELAZQUEZ VISUAL

Si seleccionamos uno de ellos y hacemos clic dos veces, o pulsamos el bo-tón , nos localiza el objeto en el panel correspondiente.

5.6 Objetos de un color (F3)

Este inspector permite localizar objetos por el color de su identificador (elcolor del identificador podemos elegirlo al pulsar con el botón derecho delratón sobre el identificador, seleccionando la opción Cambiar color, F3).Por ejemplo, si hemos personalizado un proyecto activando un color de-terminado para el identificador de los nuevos objetos que se añadan alproyecto, podremos localizarlos fácilmente con este inspector. Para ellobasta con ejecutarlo y seleccionar el color de los objetos a buscar. Asimis-mo se podrá ordenar la lista de objetos resultante por alguno de los crite-rios siguientes: Sin ordenar, por orden alfabético o por tipo de objeto. Pul-sando Shift+F3.

Localizar objeto

Objetos por color

Page 402: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

De igual manera que en casos anteriores, seleccionando uno de los objetosnos lo localiza en el panel correspondiente.

5.7 Contenido de fórmulas

Permite buscar objetos en los que se utilice una fórmula determinada. Alejecutar este inspector se abrirá el cuadro de diálogo siguiente:

05 Inspectores

Objetos por fórmulas

Page 403: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

402 403 VELAZQUEZ VISUAL

En el primer control se escribirá la expresión a buscar. Los tres primeros bo-tones de la barra de herramientas permiten seleccionar funciones de fór-mulas , variables globales y variables locales . Una vez escrito elcontenido a buscar en las fórmulas del proyecto, pulsamos el botón de lalupa de la barra de botones de este inspector. En el caso de haberse en-contrado algún objeto, para localizarlo hacemos doble clic sobre él con elbotón izquierdo del ratón, o lo seleccionamos y pulsamos el botón Locali-zar objeto en el cuadro de diálogo del inspector. Al igual que en los otrosinspectores, además del objeto en el que aparece la fórmula, nos dice enqué parte de este objeto aparece.

5.8 Errores del proyecto

Mediante este inspector podremos localizar aquellos errores que tenga enel proyecto, como campos inexistentes en partes de índices; declaración defunciones, campos, variables, etc., inexistentes en las fórmulas; declaraciónde objetos inexistentes, errores en informes, etc. En esta ventana aparece-rá en qué objeto hay errores y cuál es la naturaleza de éstos.

Funciones de fórmulas

Variables globales

Variables locales

Lupa

Objetos con errores

Page 404: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

ResumenVelázquez Visual cuenta con unas herramientas que nos permiten analizar ylocalizar objetos, así como detectar errores; son los inspectores.

Inspector de tablas y campos: para ver y localizar los campos que contieneuna tabla.

Dónde se usa el objeto: localiza en qué objetos se utiliza el objeto visual se-leccionado.

Qué objetos usa: localiza los objetos que utiliza el objeto seleccionado.

Objetos no usados: presenta una lista con los objetos que no están siendoutilizados por ningún objeto del proyecto.

Por tipo de objeto: permite localizar todos los objetos del tipo seleccionado.

Objetos de un color: localiza objetos por el color de su identificador.

Contenido de fórmulas: busca objetos en los que se utilice una fórmula de-terminada.

Errores del proyecto: localiza los errores del proyecto, indicando en qué ob-jetos hay errores y cuál es la naturaleza de éstos.

05 Inspectores

Page 405: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf
Page 406: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

06Asistentes

Page 407: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf
Page 408: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

6.1 Asistente para edición de fórmulas

Las fórmulas pueden utilizarse en cualquier cuadro de edición que permitaintroducir expresiones de tipo fórmula. Normalmente haremos uso delAsistente para edición de fórmulas, disponible en el botón Asistente, aun-que también podemos introducirlas manualmente. Se aconseja el uso delasistente ya que detecta errores.

El asistente está presente en todos los controles de edición donde se per-mite emplear fórmulas, de manera que al pulsar el botón Asistente apare-cerá la ventana:

La parte principal es un cuadro de edición donde escribimos la expresiónde la fórmula. En este área del asistente insertaremos identificadores, sím-bolos y funciones a medida que los seleccionamos en las diversas opcio-nes. De igual forma podemos insertar manualmente datos como paréntesis,operadores, campos, etc.

Los botones de la barra permiten acceder a una lista de:

Operadores (F3).

Funciones (F4).

Funciones de dll.

Funciones (objeto visual).

06 Asistentes

ASISTENTE PARA EDICIÓN DE FÓRMULAS

Operadores

Funciones

Funciones de dll

Funciones (objeto visual)

Page 409: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

408 409 VELAZQUEZ VISUAL

Campos (F5).

Variables Globales (F6).

Variables Locales (F7).

Variables del Sistema (F8).

Cortar (Control + X), Copiar (Control + C) y Pegar (Control + V).

Deshacer (Control + Z).

Verificar (F9): este botón comprueba que la sintaxis de la fórmula sea co-rrecta. En caso contrario presentará una ventana con el error cometido.También se verifica al aceptar la fórmula con el botón OK o al pulsar intro.

Ayuda (F1).

Aceptar (Intro): guarda los cambios realizados en la fórmula.

Cancelar (Esc): cancela los cambios llevados a cabo en la fórmula.

6.1.1. Sintaxis de las fórmulas. Operadores y funciones

En una fórmula se permiten expresiones tanto aritméticas (suma, resta, di-visión...) como booleanas (lógicas). Disponemos de una lista de operadores,funciones, accesos a los campos de la tabla de datos en curso y a susmaestros, acceso a las variables globales del proyecto, a las variables lo-cales y a las variables del sistema para poder crear las fórmulas.

OperadoresPulsando el botón operadores aparecerá en pantalla un asistente en elque podremos seleccionar el operador necesario de entre los siguientes:

Expresiones aritméticas: por ejemplo ((4 + 5 + 1) / 2) - (45 / 8). Aquí se hanusado constantes, pero podemos operar con campos y variables globales,además de otras funciones.

Expresiones condicionales:

OPERADORES

Campos

Variables Globales

Variables Locales

Variables del Sistema

Cortar, Copiar yPegar

Deshacer

Verificar

Ayuda

Aceptar

Cancelar

Operadores

Page 410: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

4 > 2 condición cierta.

4 < (2+2) condición falsa.

4 = (2+2) condición cierta.

4 ! 3 condición cierta

Expresiones booleanas (lógicas):

(4 > 1) & (4 = 5)

En el ejemplo anterior, la primera condición (4>1) es cierta, pero la segunda(4=5) no lo es. El operador & es verdadero si sus condiciones (izquierda yderecha) también lo son, por lo tanto, la condición en su conjunto es falsa.

(4 > 1) | (4 = 5)

En el ejemplo anterior la primera condición (4>1) es cierta pero la segunda(4=5) no lo es. El operador | (ó) es verdadero si una de sus condiciones (iz-quierda y derecha) lo es, por lo tanto, la condición en su conjunto es cierta.

Expresiones unarias

- X: la expresión devuelve el valor negativo de la variable X.

!X: indica NO X. Se trata de la negación de la variable X. Si poseía algún va-lor, lo evalúa como cero, mientras que si poseía el valor 0, lo evalúa como 1.

Es recomendable el uso de los paréntesis en las expresiones de fórmulas,sobre todo cuando no se conoce la forma de evaluación de los operadores,ya que fuerzan a realizar primero las operaciones incluidas en ellos.

Las funcionesPulsando el botón funciones, aparecerá el asistente de funciones. En elanexo II del manual encontraremos un listado con todas las funciones delAsistente de edición de fórmulas de Velázquez Visual. El asistente para laedición de fórmulas puede volver a abrirse por cada parámetro de la fun-ción, de esta manera resultará más fácil su composición.

06 Asistentes

Funciones

Page 411: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

410 411 VELAZQUEZ VISUAL

El cuadro Ayuda del Asistente de funciones indica cómo trabaja la función,en Sintaxis vemos cuál es la sintaxis para esa función en particular y en Pa-rámetros aparecen los parámetros que lleva la función. Para introducir esosparámetros podemos recurrir de nuevo al Asistente (botones a la derechade los controles de edición correspondientes a parámetros).

Velázquez Visual presenta los siguientes tipos de funciones:

Numéricas: funciones que trabajan sobre datos numéricos, como Absoluto(devuelve el valor absoluto de un número) o Redondear (devuelve el núme-ro entero o decimal más próximo al valor).

Funciones de cadenas y de conversión de cadenas: trabajan sobre cadenasde caracteres, como es el caso de la función Len (devuelve el número decaracteres de una expresión) o la función Mayúsculas (convierte una funciónalfabética a mayúsculas).

Funciones de fecha: trabajan sobre datos con carácter de fecha, como lafunción Edad (devuelve la diferencia en años entre dos fechas).

Funciones de hora: trabajan con datos de carácter hora, por ejemplo la fun-ción Ahora (que devuelve la hora del sistema).

Funciones Varias: aquí se incluyen funciones de diverso tipo, como puedeser DecidirDato (elige un dato de acuerdo con una condición), o CampoVa-cío (devuelve 1 si el campo que se le pasa como parámetro está vacío y 0si no lo está).

Funciones de cliente-servidor: específicas para la ejecución de aplicacio-nes en arquitectura cliente-servidor. Por ejemplo GetWebAplicación (de-

VENTANA ASISTENTE DE FUNCIONES

Page 412: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

vuelve la url correspondiente a la aplicación que se esté ejecutando en esemomento).

Funciones de códigos: trabajan sobre códigos que les pasamos como pa-rámetros. Un ejemplo es EsEan13, que devuelve 1 si el código es un EAN13y 0 en caso contrario.

Funciones de juegos de caracteres: devuelven los códigos o caracteres co-rrespondientes a los parámetros que se le haya pasado, por ejemplo Get-CharAlfa40 (devuelve el carácter correspondiente al número que se le hayapasado como parámetro en la tabla de caracteres Alfa40).

Funciones de directorios: realizan operaciones sobre directorios y ficheros,como la función AjustaSenda (convierte una senda para que sea interpreta-da correctamente).

Funciones científicas: incluyen las funciones científicas clásicas, como Ar-coSeno (devuelve el arcoseno del argumento).

Funciones Api de Velázquez: devuelven información acerca de aplicacionesde Velázquez. Un ejemplo es GetProyectoNombre (devuelve el nombre deun proyecto de Velázquez).

Las funciones de dllSi en el proyecto se ha creado algún objeto dll con funciones, éstas podránser seleccionadas pulsando el botón funciones de dll de la barra de bo-tones del asistente. Aparecerá el Asistente de funciones de dll.

Las funciones proceso Si en el proyecto hemos creado alguna función, ésta podrá ser selecciona-da pulsando el botón funciones proceso de la barra de botones delasistente. Obtendremos la ventana del Asistente de funciones proceso.

06 Asistentes

ASISTENTE DE FUNCIONES DE DLL

Funciones de dll

Funciones proceso

Page 413: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

412 413 VELAZQUEZ VISUAL

Una función habitualmente usa parámetros. Éstos aparecerán entre parénte-sis tras el nombre de la función, por ejemplo: FuncionNombre( parametro1,parametro2, parámetro3 ). Una vez seleccionada debemos sustituir las cade-nas parámetro1, parámetro2, parámetro3 por los parámetros que vayamos asuministrar a la función, éstos podrán ser constantes o variables, por ejemplo:

Constantes: FunciónNombre( 12, 1, 4 )

Variables: FunciónNombre( %CAMPO-1%, $VARIABLE-1$, ‘VARIABLE1’ )

Para ello hemos de seleccionar la función en el Asistente de funciones pro-ceso, y mediante el Asistente de edición de fórmulas le pasamos los pará-metros necesarios.

Uso de los camposPara incluir manualmente en una fórmula un campo de la tabla de datos encurso hemos de escribir en mayúsculas el identificador del campo, prece-dido y seguido de un símbolo %. Por ejemplo, para calcular el 16 por cien-to del campo Precio que tiene por identificador PRECIO, escribimos en lafórmula el texto siguiente: (%PRECIO% * 16) / 100.

Es posible usar campos de una tabla de datos enlazada ascendentementecon la primera. En este ejemplo se han usado dos operadores; el operador(*) para la multiplicación y el operador (/) para la división.

Veamos otro ejemplo: para obtener el valor del campo Nombre de la pro-vincia de la población del cliente del albarán en curso, escribimos en la fór-mula el texto siguiente:

ASISTENTE DE FUNCIONES PROCESO (OBJETO VISUAL)

Page 414: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

%CLIENTE.POBLACION.PROVINCIA.NOMBRE%

Todo el texto va entre símbolos de tantos por ciento, mientras que los cam-pos enlazados se separan con un punto (.). Para Velázquez Visual el campoNombre de la tabla de datos enlazada, es tratado como si fuera de la pro-pia tabla de datos. No hay limitación en el número de enlaces.

También podemos movernos por los campos enlazados pinchando en elbotón campos , de modo que se presentará una ventana en la que po-demos seleccionar el campo a incluir en el asistente sin necesidad de es-cribirlo a mano.

Al pulsar las letras del teclado el foco se situará en el campo que comien-ce por las mismas. En el caso de la figura anterior, si pulsáramos P, el focose situaría sobre el campo Perfil.

6.1.2. Operaciones avanzadas

Acceso a campos de otra tabla de datosEn un proceso, para obtener un campo de un registro de una tabla de da-tos que no está en curso ni está enlazada, habiendo guardado anterior-mente el registro en el proceso con la función Guardar ficha, se utiliza la si-guiente sintaxis:

:ID_VAR%CAMPO%

Como prefijo se introduce : (dos puntos), a continuación el identificador dela variable en la que se ha guardado la ficha con la función Guardar ficha, yentre tantos por ciento, el campo de donde se quiere obtener el dato.

De este modo también podemos acceder a los campos de las tablas enla-zadas a la tabla a la que pertenece la ficha que hemos guardado en el pro-ceso con la función Guardar ficha. Por ejemplo, supongamos las tablas en-lazadas PAISES y PROVINCIAS. En un proceso guardamos un registro de la

06 Asistentes

Esta operación sólo puedeser utilizada en un Proceso.

ADVERTENCIA

Campos

Page 415: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

414 415 VELAZQUEZ VISUAL

tabla PROVINCIAS con la función Guardar ficha, utilizando la variable ID_FI-CHA. Desde una tabla no enlazada podemos acceder al nombre del país dela provincia de la ficha que hemos guardado; la sintaxis sería:

:ID_FICHA%PAIS.NOMBRE%

Si existen los mismos identificadores para una ficha guardada y una tablade datos, tendrá prioridad el identificador de la ficha.

Uso de las variables globalesPara introducir manualmente variables globales que estén declaradas en elproyecto hemos de escribir su identificador entre dos símbolos $. Tambiénpodemos introducirlas haciendo uso de la Lista de Variables: Globales queaparece cuando pulsamos el botón variables globales del asistente pa-ra edición de fórmulas.

Por ejemplo: para hacer un cálculo con la variable global IVA y el campoPRECIO, escribimos en la fórmula el texto siguiente: (%PRECIO% * $IVA$)/ 100

Advirtamos que el identificador del campo va entre tantos por ciento (%),mientras que el de la variable global va entre símbolos de dólar ($).

Es posible combinar campos de una tabla de datos enlazada con variablesglobales. Por ejemplo, para hacer un cálculo con la variable global IVA y elcampo PRECIO de la tabla de datos enlazada ARTICULOS, escribimos enla fórmula el texto siguiente: (%ARTICULOS.PRECIO% * $IVA$) / 100

Uso de las variables localesPara introducir manualmente variables locales escribimos su identificadorentre dos apóstrofes (‘). También podemos acceder a ellas mediante el bo-tón variables locales (F7).

Los ámbitos más corrientes de las variables locales son los procesos y los in-formes, aunque también se usan en componentes html, pies de rejilla... Al ter-minar se destruyen, y su uso no es posible desde fuera del proceso o informe.

VENTANA LISTA DE VARIABLES GLOBALES

Variables globales

Variables locales

Page 416: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

No es necesario declarar el tipo de las variables locales ya que éste será elde su contenido. Por ejemplo, una misma variable puede ser en un mo-mento dado alfabética y luego numérica.

Uso de las variables de sistemaPara introducir manualmente variables de sistema escribimos el identifica-dor de la variable en minúsculas, sin prefijos ni sufijos, o hacemos clic en elbotón variables de sistema, obteniendo en este caso la ventana Lista deVariables: Sistema en la que se da un listado de todas las variables de sis-tema.

ConstantesLas constantes tienen un valor fijo predefinido por el programador. Depen-diendo del tipo constante se especificarán de una u otra forma:

• Constantes numéricas: se escribirá el número, precedido por el signo -si es negativo, y utilizando el punto (.) como separador decimal. Porejemplo, para pasar a una fórmula el número -1.231,35 hemos de escri-bir: -1231.35

• Constantes alfabéticas: se escribirá el contenido entrecomillado. Porejemplo, si se desea tener el texto Pesetas como constante, la fórmulasería: “Pesetas”.

• Constantes de tipo hora: su contenido se especificará separando las ho-ras, minutos y segundos por un espacio en blanco o un carácter comopuede ser un punto (.), dos puntos (:), etc. Por ejemplo para especificarlas 3:04:30 como constante, la fórmula sería: 3 4 30 o 3:4:40 o 03:04:40.

• Constantes de tipo fecha: su contenido puede especificarse de variasformas. Por ejemplo, para la fecha 1-enero-1999 podemos escribir co-mo fórmula: 010199 o 1-1-1999 o 1-ene-1999.

• Constantes de tipo booleano: su contenido puede especificarse con unnúmero o con un texto: 1 Sí, 0 No.

06 Asistentes

VENTANA LISTA DE VARIABLES: SISTEMA

Variables de sistema

Page 417: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

416 417 VELAZQUEZ VISUAL

Subcadenas de formatoLas subcadenas de formato ajustan la visualización de la información (porejemplo, forzar a que un campo numérico se visualice con cinco caracteres,alineado a la derecha y rellenando con ceros por la izquierda, como 00021).

¿Cómo se pueden usar desde el Asistente de edición de fórmulas? Supon-gamos una línea de proceso en la que mandamos un mensaje que incluyeel contenido de un campo del proyecto (no nos preocupemos por no habervisto aún los procesos; esto es solo un ejemplo).

Queremos incluir el mensaje “El precio del libro es PVP”, donde PVP es elprecio, guardado en el campo P.V.P. En el control de edición Mensaje escri-bimos “El precio del libro es” y pulsamos el botón Asistente, apareciendo elasistente para edición de fórmulas. En él pulsamos el botón Campos y ele-gimos el campo P.V.P. En esta última ventana (Seleccione campo de:) esdonde damos formato al campo (controles Justificar y longitud).

VENTANA DE EDICIÓN PARA LA FUNCIÓN DE PROCESOS MENSAJE

Page 418: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Al final obtendremos la siguiente ventana de línea de proceso:

06 Asistentes

Page 419: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

418 419 VELAZQUEZ VISUAL

Conversión automática de datosCuando pasamos datos de un tipo a otro, Velázquez realiza una conversiónautomática de los mismos. Así tenemos:

• Dato numérico en una cadena de texto: cuando en una expresión de tex-to utilizamos un dato numérico, éste se toma con el signo y con los de-cimales. Por ejemplo, el número -26.125,55 al incluirlo en una fórmula detexto se convertirá a -26125.55. Cuando en una fórmula intervienen da-tos numéricos y el operador +, la operación a realizar (suma o concate-nación) dependerá del primero de los valores especificados. Si es un nú-mero, se tomará como una suma, si es una cadena, como una concate-nación. Por ejemplo, si en un campo o variable de tipo alfabético se es-cribe la fórmula: 1+1, puesto que el primer dato es numérico, se tomarácomo una suma, por lo que se devolverá 2. Si lo que queremos es con-catenar ambas cifras, para indicar que se trata de una concatenaciónbasta con que al principio de la expresión se escriba “ ” (comillas - co-millas) con lo que la fórmula sería “”+1+1, lo que devolvería 11. En am-bos casos el resultado es una cadena de texto, aunque en el primer ca-so se devuelve como cadena la suma de ambas cifras y en el segundola concatenación de las mismas.

• Fecha en una cadena de texto: cuando en una cadena de texto incluimosun dato de tipo fecha, lo devuelve en formato de día-nombre del mesabreviado-año completo. Por ejemplo, 12/12/1998 es incluido en la ca-dena de texto como 12-dic-1998.

Page 420: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

• Hora en una cadena de texto: cuando se pasa un dato de tipo hora a unacadena de texto, se convierte automáticamente en formato hh:mm:ss.Por ejemplo: 12:15:33.

• Hora en numérico: al pasar un dato de tipo hora a un campo o variablenumérico, este último convierte la hora en segundos. Así, por ejemplo:10:44:01 pasa a ser 38641.

Secuencias de escape en cadenas de caracteresPara introducir en el interior de una cadena de caracteres algunos caracte-res especiales imposibles de representar mediante texto, utilizamos lo quecomúnmente se denominan secuencias de escape. Todas ellas comienzancon una barra invertida seguida de otro carácter. Las secuencias de esca-pe se sustituyen en tiempo de ejecución por los caracteres adecuados. És-tas son las secuencias de escape aceptadas:

\a Campana: es el pitido del sistema.

\b Retroceso: produce el mismo efecto que pulsar la tecla de Retrocesodestructivo.

\c Comilla: provoca la introducción de una comilla.

\f Salto de página: provoca el salto de una página.

\n Nueva línea: provoca el salto a la línea siguiente.

\r Retorno de carro: provoca el retroceso al comienzo de la línea.

\t Tabulador: produce el mismo efecto que pulsar la tecla del Tabulador.

\v Tabulador Vertical.

\\ Barra invertida.

Las secuencias de escape \r y \n pueden ser utilizadas en textos estáticosmultilíneas (menús, formularios, etc.).

06 Asistentes

Cuestiones1. Supongamos una aplicación en la que tenemos una tabla que con-

tiene los campos valor1 y valor 2 (numéricos). También tenemos de-finidas dos variables globales: variable1 y variable2 (numéricas).Queremos que el contenido inicial del campo valor1 sea variable1 sise cumple que valor2 > 10. En caso contrario el contenido inicial devalor1 debe ser la variable2. Usar para ello la función DecidirDato(dentro de la carpeta Varias).

2. Supuesto el siguiente esquema de tablas, ¿cuál sería la sintaxis pa-ra obtener el nombre de la región a la que pertenece el lugar de in-terés en el que se encuentra la casa rural en curso?

Page 421: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

420 421 VELAZQUEZ VISUAL

ResumenPodemos utilizar fórmulas en cualquier cuadro de edición que admita ex-presiones de tipo fórmula. Aunque se pueden introducir a mano se reco-mienda utilizar el Asistente para edición de fórmulas.

En las fórmulas se admiten expresiones tanto aritméticas como booleanas.Para construirlas disponemos de una lista de operadores, funciones, acce-sos a los campos de la tabla de datos en curso y a sus maestros, acceso alas variables globales del proyecto, a las variables locales, a las variables delsistema y a constantes.

En el asistente encontramos funciones numéricas, de cadenas, de conver-sión de cadenas, de fecha, de hora, varias, Api de Velázquez, cliente - ser-

3. Supongamos una aplicación con tres tablas: CLIENTES, ARTÍCULOS yLÍNEAS DE VENTA. En la tabla CLIENTES hemos incluido el campoDescuento, que guarda el descuento a aplicar según el cliente. La tablaARTÍCULOS contiene el campo Precio, y además hemos incluido en elproyecto la variable global IVA. En la tabla LÍNEAS DE VENTA hemosañadido el campo Total (lo que finalmente debe pagar el cliente). Que-remos que el contenido del campo Total sea el precio del artículo me-nos el descuento por cliente, sin olvidarnos de aplicar el IVA. Escribir elcontenido inicial del campo Total usando las funciones del asistente.

Page 422: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

vidor, de códigos, de juegos de caracteres, de directorios y científicas, to-das ellas con un asistente de funciones. También podemos introducir fun-ciones de dll y de procesos si éstas han sido creadas en el proyecto.

Gracias a las subcadenas de formato podemos ajustar la visualización de lainformación.

Cuando pasamos datos de un tipo a otro, Velázquez realiza una conversión auto-mática de los mismos. Podemos convertir: datos numéricos en cadenas de tex-to, fechas en cadenas de texto, horas en cadenas de texto y horas en numérico.

Gracias a las secuencias de escape introducimos, en el interior de cadenasde caracteres, algunos caracteres especiales que no se pueden represen-tar mediante texto (retrocesos, comillas, saltos de página, etc.).

6.2 Uso de las cadenas de formato

Las cadenas de formato pueden usarse en ciertos controles, y sirven paraconcatenar textos y campos sin utilizar operadores aritméticos, formateandola visualización de la información. Los controles donde se pueden usar son:

• Rejillas: cuando se activa la casilla de verificación Manual en las propie-dades de cuerpo (ventana Columna de rejilla).

• Tubos de ficha y tubos de lista: en los Capilares de campos alfabéticos.

• Formularios: cuando se activa la casilla de verificación Manual en loscontroles de edición de campo.

• En la especificación del texto en controles de casilla de verificación deformularios y menús formulario.

• En la especificación del texto y del dato fijo en controles de botones deradio de formularios y menús formulario.

6.2.1. Sintaxis de las cadenas de formato

En las cadenas de formato todos los caracteres que no estén posicionadosentre tantos por ciento son interpretados como texto a concatenar. Losidentificadores de los campos se escriben como en las fórmulas, es decir,entre tantos por ciento. Por ejemplo:

Tel.: %CLIENTE.TELEFONO% Fax: %CLIENTE.FAX%

Da como resultado la cadena siguiente: Tel.: TTT Fax: FFF, donde TTT seríael teléfono del cliente y FFF el fax del cliente. Advirtamos que no se utilizael operador +. El equivalente a una expresión fórmula sería:

06 Asistentes

Page 423: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

422 423 VELAZQUEZ VISUAL

“Tel.: “+%CLIENTE.TELEFONO%+” Fax:”+%CLIENTE.FAX%.

6.2.2. El asistente para la edición de cadenas6.2.2. de formato

El asistente de cadenas de formato está presente en todos los controles deedición donde está permitido emplear cadenas de formato. Al pulsar el bo-tón Asistente visualizaremos la ventana del asistente.

Principalmente se compone de un cuadro de edición donde se escribe laexpresión de la cadena de formato. En este área el asistente insertará iden-tificadores de campo, de variables globales, etc. Los botones Operadores yFunciones no están activos, pues para las cadenas de formato no se pue-den utilizar ni los operadores ni las funciones de fórmulas.

Los botones de la barra del asistente permiten acceder a una lista de:

Campos (F5).

Variables Globales (F6).

Variables Locales (F7).

Variables del Sistema (F8).

Cortar (Control + X), Copiar (Control + C) y Pegar (Control + V).

Deshacer (Control + Z).

ASISTENTE PARA EDICIÓN DE CADENAS DE FORMATO

Campos

Variables Globales

Variables Locales

Variables del Sistema

Cortar, Copiar yPegar

Deshacer

Page 424: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Verificar (F9): este botón comprueba que la sintaxis de la fórmula sea co-rrecta. En caso contrario presentará una ventana con el error cometido.

Ayuda (F1).

Aceptar (Intro): guarda los cambios realizados en la fórmula.

Cancelar (Esc): cancela los cambios llevados a cabo en la fórmula.

6.2.3. Subcadenas de formato

Mediante las subcadenas de formato ajustamos la visualización de la infor-mación. Para ello disponemos de unos formateadores que son utilizadosconjuntamente con el identificador del campo, precedidos del símbolo # (AltGr + 3). La sintaxis es la siguiente:

%ID_CAMPO#F%

ID_CAMPO: es el identificador del campo.

F: es el formateador.

Para crear una subcadena de formato tenemos dos opciones: escribirla direc-tamente o a través de la opción correspondiente que aparece al seleccionar uncampo, tanto en el asistente para la edición de fórmulas como en el asistente pa-ra la edición de cadenas de formato. En función del tipo de campo selecciona-do se presentarán las opciones de subcadenas de formato que correspondan.

Cuando se hace a través de la opción del asistente, al ir seleccionando lasdistintas subcadenas de formato, Velázquez irá componiendo la fórmulaque corresponda.

En el anexo I del manual encontraremos una relación de los formateadorescon los que podemos trabajar en Velázquez Visual.

Ejemplo: Subcadenas de formato

Queremos visualizar en un formulario el campo CODIGO (numérico), con unalongitud de 8 caracteres, alineado a la derecha y rellenando con ceros por laizquierda (ej.: 00000158). Para ello habrá que seguir los pasos siguientes:

06 Asistentes

Verificar

Ayuda

Aceptar

Cancelar

e

Cuestiones1. En una aplicación queremos ver un precio en tres monedas distintas: eu-

ros, libras y dólares. Para ello creamos un formulario en el que introdu-cimos el precio en euros, de modo que los campos precio en libras yprecio en dólares sean de tipo fórmula y se calculen directamente al me-ter el precio en euros. En el formulario queremos que aparezcan los tresprecios en tres cadenas de formato que nos indiquen la moneda que es.

Page 425: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

424 425 VELAZQUEZ VISUAL

Insertamos un control de edición de campo en el formulario.

En las propiedades de dicho control de edición seleccionamos la opciónManual.

Pulsamos el botón Asistente para abrir el asistente de creación de cadenasde formato.

Una vez abierto, pulsamos el botón Campos de la barra de botones pa-ra acceder a la lista de campos.

Seleccionamos el campo %CODIGO%. En la parte inferior de la ventana sepresentan las distintas opciones para formatear campos numéricos.

Campos

e

Page 426: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

En Justificar seleccionamos la opción Derecha con ceros a la izquierda.

En Longitud escribimos 8.

06 Asistentes

e

Page 427: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

426 427 VELAZQUEZ VISUAL

Al aceptar, la fórmula se habrá convertido en %CODIGO#C8%.

Con esto, el campo código aparecerá en el formulario con el formato querequeríamos.

e

Page 428: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

6.2.4 Conversión automática de datos y secuenciasde escape en cadenas de caracteres

Velázquez Visual realiza una conversión automática cuando pasamos datosde un tipo a datos de otro tipo (dato numérico en una cadena de texto, fechaen una cadena de texto, hora en una cadena de texto, hora en numérico).

Por otro lado, para introducir en el interior de una cadena de caracteres al-gunos caracteres especiales imposibles de representar mediante texto, uti-lizaremos las secuencias de escape. En tiempo de ejecución, éstas se sus-tituyen por los caracteres adecuados.

ResumenLas cadenas de formato sirven para concatenar textos y campos sin utilizaroperadores aritméticos, formateando la visualización de la información. Sepueden usar en rejillas, en tubos de lista, tubos de ficha, formularios, etc.

Para editar las cadenas de formato contamos con el Asistente para ediciónde cadenas de formato. Desde él tenemos acceso a campos de la tabla yde tablas enlazadas, variables globales, variables locales y variables de sis-tema del proyecto.

Con las subcadenas de formato ajustamos la visualización de la informa-ción, para lo que disponemos de formateadores. Podemos escribirlas di-rectamente o al seleccionar un campo, tanto en el asistente para la ediciónde fórmulas como en el asistente para la edición de cadenas de formato.

Velázquez Visual cuenta con formateadores alfabéticos, numéricos, de fe-chas y de horas. También hay subcadenas específicas para informes.

Cuando pasamos datos de un tipo a datos de otro tipo, Velázquez realizauna conversión automática de los mismos.

Gracias a las secuencias de escape introducimos, en el interior de cadenasde caracteres, algunos caracteres especiales que no se pueden represen-tar mediante texto (retrocesos, comillas, saltos de página, etc.).

06 Asistentes

Cuestiones1. Escribir la subcadena de formato necesaria para ver el contenido de

un campo Precio con dos decimales, separador de miles, de modoque aparezca pegado a la derecha y rellenando con ceros a la iz-quierda hasta llegar a diez caracteres.

2. Escribir la cadena de formato para que un campo Fecha de un re-gistro, que contiene la fecha 2-8-1998 (domingo), se vea en una reji-lla como “La fecha es dom 2 de agosto de ‘98”.

Page 429: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf
Page 430: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

07Variables

Page 431: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf
Page 432: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

7.1 Variables globales

7.1.1. Definición

Las variables se utilizan para almacenar datos individuales en disco o enmemoria. Son datos globales a la aplicación y comunes, en el ámbito dered, para todos los usuarios si son en disco, mientras que su carácter es lo-cal si están en memoria. Si un usuario modifica una variable global en dis-co, ésta será modificada para el resto de los usuarios, si modifica una va-riable global en memoria, el cambio sólo le afectará a él.

Las variables globales se agrupan en el panel inferior izquierdo del Editorde Proyectos. Para facilitar su distribución podemos agruparlas dentro decarpetas.

Podemos crear una variable global mediante el botón Nuevo objeto, eli-giendo la opción Variable, o desde el menú de contexto que se presenta alpulsar el botón derecho del ratón en algún punto de este panel, donde apa-rece la opción insertar variable.

Cuando creamos una variable global aparece el cuadro de diálogo Propie-dades de la variable global.

07 Variables

PANEL DE VARIABLES DEL EDITOR

Page 433: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

432 433 VELAZQUEZ VISUAL

En el cuadro definimos las siguientes propiedades:

• Nombre: nombre que le damos a la variable.

• Persistencia: caja con las opciones para guardarla en disco o en memo-ria. También se encuentra aquí la casilla de verificación Grupo de usua-rios. Si activamos esta casilla de verificación, en tiempo de ejecución po-dremos establecer un valor diferente a la misma para cada grupo deusuarios definido.

• Accesible Web: hemos de activar este estilo si deseamos utilizar una va-riable global en una página web para pasar parámetros a un proyecto delservidor. El estilo Accesible web, por cuestiones de seguridad, se acti-vará solamente en aquellas variables globales que se desee sean acce-sibles vía web, es decir, que puedan ser utilizadas desde una página weben la pasarela cgi.

• Longitud: número de bytes para la variable. Como máximo podemos es-pecificar seis bytes.

• Decimales: número de decimales para la variable.

• Signo: casilla de verificación que define si la variable tiene signo.

• Rango: límites válidos de entrada de valores para el usuario.

• Caracteres válidos: son los caracteres válidos que puede contener unavariable tipo alfa.

VENTANA PROPIEDADES DE LA VARIABLE GLOBAL

Page 434: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

• Tipo de dato: para una variable podemos elegir entre los siguientes ti-pos: numérico, alfabético, Alfa 128, Alfa 64, Alfa 40, fecha, hora, tiempoy booleano.

7.1.2. Tipos de variables globales (en memoria y endisco)

Los tipos de persistencia de las variables son:

En disco: el valor de la variable será común para todos los usuarios de laaplicación; si un usuario modifica su valor, este cambio afectará al resto delos usuarios. Si se activa la opción Por grupos de usuarios, el valor de la va-riable será común para todos los usuarios de un mismo grupo; por tanto,tendrá un valor diferente por cada grupo de usuarios que haya sido defini-do. Se guardará en la aplicación su valor aun cuando salgamos de ésta. Pe-se a ser en disco, por ejemplo en el caso de cliente-servidor, eso no quieredecir que esté continuamente llamando al servidor para pedir el valor, sinoque éste se encargará de refrescar el valor cuando algún usuario lo cambia.

En memoria (independiente cada tarea en 2º plano) y En memoria (compar-tida por todas las tareas): el valor de la variable tiene carácter local, es de-cir, si un usuario modifica su valor, el cambio solamente le afectará a él. Elcomportamiento de estos dos tipos de variables en memoria es el mismotratándose de procesos en primer plano. La diferencia radica en su com-portamiento en procesos ejecutados en multitarea (en 2º plano). Por ejem-plo, si se ejecutan dos tareas en 2º plano en las que se modifica el valor dela misma variable global, si ésta es del tipo Independiente cada tarea en 2ºplano, al inicio de cada proceso se crea una copia de la variable (ambospartirán del mismo valor inicial) pero las modificaciones que se hagan en lavariable serán independientes para cada proceso. Por el contrario, si la va-riable es del tipo Compartida por todas las tareas, no se realiza una copiade variables, por lo que cualquier cambio que se haga a la variable afecta-rá a ambas tareas en 2º plano.

A pesar del carácter local de las variables globales en memoria, en la versióncliente-servidor de Velázquez Visual es posible utilizarlas en cualquier punto(eventos de tablas, fórmulas, etc.), pues en esta arquitectura se contempla unsistema de replicación entre cliente y el servidor para este tipo de variables.

Un ejemplo de conflicto en aplicaciones multiempresa es el siguiente: unaaplicación guardaba en una variable el código de la empresa seleccionada.El funcionamiento era correcto hasta que dos usuarios del mismo grupo ac-cedían a empresas distintas. Entonces, la selección del último afectaba alprimero. Con las variables en memoria cada usuario podría guardar el valorde su empresa seleccionada en memoria y no entraría en conflicto con otrosusuarios de su grupo de trabajo.

Las variables globales pueden ser usadas en cualquier rejilla, formulario oinforme, incluso en expresiones fórmula para realizar cálculos con ellas.

07 Variables

La utilización de las variablesen memoria es útil, entreotras cosas, para lasincronización entrecontroles en menús de tipoformulario. También sonútiles para evitar conflictosen aplicacionesmultiempresa.

TRUCO

Page 435: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

434 435 VELAZQUEZ VISUAL

También pueden ser usadas en los campos de las tablas como contenidoinicial.

Para usar las variables globales en una expresión fórmula se usa, como pre-fijo - sufijo del identificador, el símbolo $, por ejemplo: $VARIABLE$.

Podemos imprimir el identificador, nombre, tipo y bytes (longitud) de las va-riables globales del proyecto. Para lanzar el informe con la lista de variablesglobales seleccionamos la carpeta Variables globales del panel izquierdodel Editor o cualquiera de las variables y pulsamos la opción de menú Ar-chivo/Imprimir o el botón Imprimir .

7.2 Variables de sistema

7.2.1. Definición y propiedades

Velázquez Visual posee una serie de variables a las que él mismo se encar-ga de asignar un valor. Éstas son las llamadas variables de sistema.

Accedemos a ellas a través del asistente para edición de fórmulas. Pin-chando en el botón variables de sistema (F8) obtendremos el cuadro dediálogo Lista de variables: Sistema, en el que podremos elegir la que nece-sitemos.

Imprimir

Variables de sistemaCuestiones1. Supongamos una aplicación de Velázquez Visual para una empresa

naviera. Quieren realizar una búsqueda que nos devuelva todos losbuques cuya carga se encuentre entre un valor máximo y otro míni-mo, ambos a fijar en el momento de lanzar la búsqueda. Crear labúsqueda (usando variables).

Page 436: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

Dependiendo del lugar en el que estemos utilizando el editor de fórmulas,unas estarán disponibles y otras no. Por ejemplo, si estamos en una líneade proceso cuyo origen es una ficha, no estarán disponibles en el editor lasvariables del sistema referentes a listas (n, s y m).

7.2.2. Variables de sistema de Velázquez Visual

Para introducir manualmente variables de sistema hemos de escribir elidentificador de la variable en minúsculas, sin prefijos ni sufijos. A conti-nuación veremos las variables de sistema de Velázquez Visual y su utiliza-ción con varios ejemplos. En estos ejemplos las variables aparecen en pro-cesos, que todavía no han sido introducidos. De todos modos las senten-cias de los procesos que vamos a ver son muy sencillas y no nos plantea-rán problemas.

n (número de elementos de la lista): esta variable devuelve el número de ele-mentos de una lista. Por ejemplo, se puede usar para comprobar en un pro-ceso si una lista que se ha cargado tiene o no registros. La sintaxis sería ifn > 0. Si es mayor que 0 quiere decir que tiene algún registro, en el casocontrario no hay registros.

u (nombre del usuario actual): esta variable devuelve el nombre del usuarioactual.

07 Variables

VARIABLES DE SISTEMA

Page 437: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

436 437 VELAZQUEZ VISUAL

v (privilegio del usuario actual): devuelve el privilegio del usuario actual. Po-demos usarla en un proceso que compruebe el privilegio del usuario actual,y que no le deje continuar si es inferior a 90. La sintaxis podría ser:

if v < 90

“Lo siento “+ u + “, no tiene privilegio para acceder a este formulario”.

Set retorno proceso = NO

s (elemento en curso): esta variable devuelve el elemento en curso de unarejilla. Funcionará de diferente forma según se utilice en un proceso o enuna condición color en las propiedades del cuerpo de una columna de unarejilla. En el primer caso, devolverá la posición del registro sobre el que seesté actuando en ese momento. En el segundo, se irá evaluando a medidaque se vayan pintando las filas. Por ejemplo, si en una línea de proceso que-remos asignar a una variable local (ver punto siguiente), que llamamos “Re-gistro Actual”, la posición del registro actual la sintaxis sería:

Set -> Registro Actual, s

Es decir, si en la ejecución del proceso se estaba sobre la posición 3, eseserá el valor que devuelva s.

c (directorio actual): nos devuelve el directorio actual. Por ejemplo, en unaespecificación de fórmula de un proceso queremos asignar a una variablelocal (que llamamos “Senda”) la senda para llegar a un fichero que se en-cuentra en el directorio actual. La sintaxis sería:

Set -> Senda, c +”\\fichero”

d (directorio de la aplicación): devuelve el directorio de la aplicación. Porejemplo, si en un formulario queremos ejecutar un fichero AVI, llamado Peli-cula.avi, que se encuentra en el directorio de la aplicación, la sintaxis sería:

d+ “\\Pelicula.avi”

e (¿está dada de alta una ficha?): esta variable devuelve 1 si la ficha existey 0 si no existe. Por ejemplo, si utilizamos un mismo formulario para altas ymodificaciones, se puede poner como condición visible del control Alta quee= 0, es decir, la ficha aún no existe, la estamos creando, y para el controlmodificación la condición sería e= 1, es decir, se activa cuando la ficha síexiste (la vamos a modificar).

m (estado (0/1) del elemento en curso en la multiselección): devuelve el es-tado del elemento en curso en rejillas con multiselección (0: no está selec-cionado, 1: sí está seleccionado). Su uso es exclusivo de la condición decolor del cuerpo de las rejillas. Por ejemplo, en el cuerpo de la columna delcampo %NOMBRE% de una rejilla queremos establecer una condición decolor para cuando el registro esté seleccionado. La sintaxis de la fórmulasería:

Page 438: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

m

Es decir, la condición de color se activará cuando m= 1 (escribir la variablees lo mismo que igualarla a uno).

Si queremos establecer la condición cuando un registro no esté seleccio-nado, la fórmula sería:

!m

La sentencia !m equivale a escribir m ≠1, es decir, m= 0.

z (¿es supervisor el usuario actual?): devuelve 1 si el usuario en curso es elusuario administrador y 0 si no lo es.

w (¿estamos en presentación preliminar de un informe?): devuelve 1 si seestá realizando una presentación preliminar de un informe, y 0 en el casocontrario. La existencia de esta variable de sistema viene motivada por loseventos que pueden ser disparados en las secciones de informes. Un even-to asociado a una sección del informe se disparará tanto en la salida a pa-pel como en las salidas por pantalla; por tanto, si no deseamos que ciertasfunciones de un proceso de este tipo se ejecuten en las salidas por panta-lla, utilizaremos esta variable de sistema.

7.3 Variables locales

Estas variables son usadas en procesos, de modo que mediante la funciónset podemos declararlas y asignarles valores calculados por una expresiónfórmula. Si la variable local no existe, ésta es creada automáticamente. Porejemplo, en una línea de proceso podemos asignar a la variable local posi-ción un campo Código.

07 Variables

Page 439: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf

438 VELAZQUEZ VISUAL

ResumenUna variable es un espacio que podemos reservar y al que podemos asig-nar diferentes valores según nos convenga. Ésta debe tener un nombre oetiqueta, que será el que apunte a ese espacio reservado.

Hay dos tipos de persistencia de variables: en disco y en memoria.

Si la persistencia es en disco, el valor de la variable será común para todoslos usuarios de la aplicación.

Si la persistencia es en memoria, el valor de la variable tendrá carácter lo-cal, es decir, si un usuario modifica su valor el cambio solamente le afecta-rá a él.

Si se ejecutan dos tareas en 2º plano en las que se modifica el valor de lamisma variable global, teniendo ésta persistencia en memoria (Indepen-diente cada tarea en 2º plano), al inicio de cada proceso se crea una copiade la variable (ambos partirán del mismo valor inicial), pero las modificacio-nes que se hagan en la variable serán independientes para cada proceso.

Si la variable tiene persistencia en memoria (Compartida por todas las tare-as), no se realiza una copia de variables, por lo que cualquier cambio quese haga a la variable afectará a ambas tareas en 2º plano.

Velázquez Visual posee una serie de variables a las que él mismo se encar-ga de asignar un valor. Éstas son las llamadas variables de sistema.

Las variables locales son usadas en procesos, de modo que mediante lafunción set podemos declararlas y asignarles valores calculados por unaexpresión fórmula.

Page 440: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf
Page 441: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf
Page 442: Libro de Programación en Velneo - Tomo I - Calidad alta.pdf