Вы находитесь на странице: 1из 646

Edita:

tica Software, S.L.


Plaza Nicanor Piole, 1 - Esc. Izq. - 1 dcha.
33205 Gijn (Asturias)
Tels.: 985 35 64 60 - 985 35 34 64 Fax 985 35 44 09
Correo electrnico: comercial@velazquezvisual.com
Web: www.velazquezvisual.com
No est permitida la reproduccin total o parcial de este libro, ni
su tratamiento informtico, ni la transmisin de ninguna forma o
por cualquier medio, ya sea electrnico, mecnico, por fotocopia,
por registro u otros mtodos, sin el permiso previo y por escrito de
los titulares.
Agradecemos la inestimable colaboracin de los compaeros de
tica Software, de los equipos de programacin y soporte, en
especial el gran esfuerzo realizado por Rafael Cueto-Felgueroso
Sols, y a los equipos de comercial y administracin por su
contribucin a que llegara a buen puerto este manual.
ndice
01. INTRODUCCIN ............................................................................................................... 15
1.1. NACIMIENTO Y EVOLUCIN DE VELZQUEZ VISUAL............................................................ 17
1.2. MODELO REAL ............................................................................................................ 19
02. INSTALACIN DE VELZQUEZ VISUAL......................................................................... 21
2.1. OBTENER VELZQUEZ VISUAL........................................................................................ 23
2.2. REQUISITOS MNIMOS.................................................................................................... 23
2.3. INSTALACIN DE VELZQUEZ VISUAL............................................................................... 23
2.4. EJECUTABLES DE VELZQUEZ VISUAL ............................................................................. 23
2.5. MODOS DE GUARDAR UN PROYECTO. ARCHIVOS GENERADOS POR VELZQUEZ VISUAL.......... 24
03. INTERFAZ DEL EDITOR DE PROYECTOS...................................................................... 27
3.1. VENTANA PRINCIPAL DEL EDITOR DE PROYECTOs............................................................. 29
3.1.1. Barra de Mens .......................................................................................... 30
3.1.2. Barra de Herramientas................................................................................ 32
3.1.3. Mens de Contexto .................................................................................... 34
3.2. VENTANA ESQUEMA DE TABLAS...................................................................................... 35
3.2.1. Barra de Mens .......................................................................................... 39
3.2.2. Barra de herramientas y opciones.............................................................. 39
3.2.3. Mens de Contexto .................................................................................... 41
3.3. PERSONALIZACIN DEL ENTORNO DE TRABAJO ................................................................. 42
3.3.1. Personalizacin de Barras de Herramientas............................................... 43
3.3.2. Personalizacin del Entorno ....................................................................... 44
3.3.3. Personalizacin del Proyecto ..................................................................... 45
3.3.4. Personalizacin del Esquema de Tablas..................................................... 47
04. DESARROLLO BSICO DE UNA APLICACIN.............................................................. 49
4.1. EXPLICACIN BSICA Y GENERAL.................................................................................... 51
4.1.1. Anlisis de la informacin........................................................................... 51
4.1.2. Principales elementos que componen una aplicacin............................... 51
4.2. INICIANDO EL PROYECTO ............................................................................................... 53
4.2.1. Editor de Proyectos.................................................................................... 53
4.2.2. Fuentes por defecto ................................................................................... 54
4.2.3. Propiedades del Proyecto .......................................................................... 55
4.2.4. Tareas pendientes....................................................................................... 60
4.3. ESQUEMA DE TABLAS.................................................................................................... 61
4.3.1. Tablas de datos........................................................................................... 61
4.3.2. Tablas de datos: maestras.......................................................................... 61
4.3.3. Enlace a tabla de datos maestra (enlace singular y plural)......................... 96
4.4. OBJETOS VISUALES...................................................................................................... 108
4.4.1. Galera de objetos....................................................................................... 108
4.4.2. Rejilla visor de tablas .................................................................................. 110
4.4.3. Formulario de Edicin Fichas ..................................................................... 134
4.4.4. Bsquedas.................................................................................................. 190
4.4.5. Mens ......................................................................................................... 208
4.4.6. Localizador.................................................................................................. 272
4.5. EJECUCIN (VRUNNER) ................................................................................................ 277
4.5.1. Interfaz del Ejecutor (VRunner) ................................................................... 277
4.5.2. Navegacin en el ejecutor .......................................................................... 287
Indice
10 11 VELAZQUEZ VISUAL
4.5.3. Transacciones ............................................................................................. 290
4.6. AGENDA DE TAREAS ..................................................................................................... 292
4.6.1. Exposicin del problema ............................................................................ 292
4.6.2. Esquema de Tablas..................................................................................... 294
4.6.3. Objetos Visuales ......................................................................................... 320
05. INSPECTORES .................................................................................................................. 391
5.1. DE TABLAS Y CAMPOS (F10) ................................................................................ 393
5.2. DNDE SE USA EL OBJETO (F9)................................................................................ 394
5.3. QU OBJETOS USA ................................................................................................ 397
5.4. OBJETOS NO USADOS ............................................................................................. 398
5.5. POR TIPO DE OBJETO (Ctrl + F9)............................................................................. 399
5.6. OBJETOS DE UN COLOR (F3) ................................................................................... 400
5.7. CONTENIDO DE FRMULAS ....................................................................................... 401
5.8. ERRORES DEL PROYECTO ......................................................................................... 402
06. ASISTENTES...................................................................................................................... 405
6.1. ASISTENTE PARA EDICIN DE FRMULAS.......................................................................... 407
6.1.1. Sintaxis de las frmulas. Operadores y funciones ..................................... 408
6.1.2. Operaciones avanzadas.............................................................................. 413
6.2. USO DE LAS CADENAS DE FORMATO................................................................................ 421
6.2.1. Sintaxis de las cadenas de formato............................................................ 421
6.2.2. El asistente para la edicin de cadenas de formato .................................. 422
6.2.3. Subcadenas de formato ............................................................................. 423
6.2.4. Conversin automtica de datos y secuencias de escape en cadenas
de caracteres .............................................................................................. 427
07. VARIABLES........................................................................................................................ 429
7.1. VARIABLES GLOBALES ................................................................................................... 431
7.1.1. Definicin.................................................................................................... 431
7.1.2. Tipos de Variables Globales (en memoria y en disco)................................ 433
7.2. VARIABLES DE SISTEMA................................................................................................. 434
7.2.1. Definicin y propiedades............................................................................ 434
7.2.2. Variables de sistema de Velzquez Visual .................................................. 435
7.3. VARIABLES LOCALES..................................................................................................... 437
TOMO II
08. DESARROLLO COMPLETO DE UNA APLICACIN....................................................... 15
8.1. TIPOS DE TABLA........................................................................................................... 17
8.1.1. Tabla Submaestra ....................................................................................... 17
8.1.2. Tabla Arbolada............................................................................................ 20
8.1.3. Tablas histricas ......................................................................................... 24
8.1.4. Maestro de segundo nivel con clave numrica.......................................... 32
8.1.5. Histrico doble ........................................................................................... 37
8.1.6. Creacin de una tabla igual a una base de datos externa......................... 39
8.2. TIPOS DE ENLACE......................................................................................................... 40
8.2.1. Asistentes para la creacin de enlaces ...................................................... 40
8.2.2. Enlace a hermano contiguo........................................................................ 41
8.2.3. Singular de plural por posicin................................................................... 45
8.2.4. Singular de plural por ndice....................................................................... 46
8.2.5. Enlace a tabla de datos indirecta real y virtual .......................................... 49
8.2.6. Las actualizaciones..................................................................................... 54
8.2.7. Componente de actualizacin a un hermano contiguo.............................. 58
8.2.8. Enlace a maestro de una tabla contra s misma......................................... 62
8.3. ANLISIS DE LA INFORMACIN: EJEMPLOS....................................................................... 64
8.3.1. Un centro de enseanza............................................................................. 64
8.3.2. Empresa de instalacin de cristalera para vehculos................................. 65
8.3.3. Aplicacin de anlisis para obras literarias................................................. 67
8.3.4. Una galera de arte ..................................................................................... 68
8.3.5. Gestin de un colegio................................................................................. 69
8.3.6. Gestin de una librera................................................................................ 71
8.3.7. Aplicacin para turismo rural ...................................................................... 73
8.3.8. Gestin de un Quiosco............................................................................... 78
8.3.9. Pedidos de compras................................................................................... 86
8.3.10. Aplicacin para control de existencias en almacenes (caso de compras) .. 91
8.3.11. Tienda de discos......................................................................................... 96
8.3.12. Hotel ........................................................................................................... 98
8.3.13. Base de datos de cine................................................................................ 104
8.3.14. Gestin comercial ....................................................................................... 113
8.4. EL ALMACN DE OBJETOS ............................................................................................ 127
8.5. MS OBJETOS VISUALES ............................................................................................... 136
8.5.1. La Lupa ................................................................................................. 136
8.5.2. Encarpetado de Histrico ..................................................................... 141
8.5.3. Cesta de la compra ............................................................................... 149
8.5.4. Hoja de Clculo ..................................................................................... 155
8.5.5. Base de datos externa ODBC-DAO ...................................................... 159
8.5.6. Dibujo .................................................................................................... 164
8.5.7. Multi-Iconos ........................................................................................ 169
8.5.8. Imagen Gif ............................................................................................. 170
8.5.9. Barras de Herramientas ...................................................................... 170
8.5.10. Impresora Lgica .................................................................................. 183
8.5.11. Comunicacin Serie .............................................................................. 184
8.5.12. rbol Visor de Tablas .......................................................................... 186
Indice
12 13 VELAZQUEZ VISUAL
8.5.13. Casillero ................................................................................................ 189
8.5.14. Agendizador .......................................................................................... 205
8.5.15. Informe .................................................................................................. 207
8.5.16. Pgina Html ........................................................................................... 253
8.5.17. Componente Html ................................................................................ 256
8.5.18. Editor de Pginas Html ............................................................................... 258
8.5.19. Procesos ............................................................................................... 279
8.5.20. Demonios .............................................................................................. 287
8.5.21. Funcin ............................................................................................... 288
8.5.22. Funciones de Procesos .............................................................................. 289
8.5.23. Ejecucin de procesos en primer, segundo y tercer plano en la arquitectura
VRunner y la arquitectura cliente-servidor de Velzquez Visual ................. 404
8.5.24. Tubos .......................................................................................................... 406
8.5.25. Librera de Funciones DLL ................................................................... 419
8.5.26. Directorio de Tablas ............................................................................ 424
09. EJECUTAR UNA APLICACIN......................................................................................... 431
9.1. CMO EJECUTAR UN PROYECTO..................................................................................... 433
9.2. INICIO DE UNA APLICACIN, CLAVE Y NOMBRE DE USUARIO ................................................ 433
9.3. EL MEN DEL USUARIO Y SUS OPCIONES......................................................................... 435
9.4. QU OPCIONES NOS DAN LA REJILLA, EL FORMULARIO Y LOS VISORES DE TABLAS ARBOLADAS.... 436
9.4.1. Formas de llamar a una rejilla..................................................................... 437
9.4.2. Formas de llamar a un formulario............................................................... 437
9.4.3. Eliminacin temporal de un elemento en una rejilla................................... 439
9.4.4. Invertir el orden de una lista dentro de una rejilla ...................................... 439
9.4.5. Seleccin mltiple de registros en una rejilla (Multiseleccin) ................... 440
9.4.6. Edicin directa de rejillas............................................................................ 442
9.4.7. Exportacin Ascii ........................................................................................ 443
9.4.8. La Cesta de la Compra............................................................................... 444
9.4.9. Guardar y recuperar listas virtuales en disco ............................................. 448
9.4.10. Imprimir desde una rejilla o un formulario.................................................. 448
9.4.11. Cmo introducir los datos .......................................................................... 449
9.4.12. Fundir una ficha con otra............................................................................ 452
9.4.13. Cambiar aspecto de la rejilla ...................................................................... 453
9.4.14. Cambio de visualizacin de las hojas de clculo ....................................... 454
9.4.15. Imgenes dinmicas ................................................................................... 454
9.4.16. Rejillas encarpetadas en formularios (encarpetados de histrico) ............. 459
9.4.17. Usos avanzados de una rejilla .................................................................... 462
9.4.18. Utilidades.................................................................................................... 471
9.4.19. Ejecucin de procesos desde una rejilla.................................................... 473
9.4.20. Conmutador de herencia de histricos para arbolados............................. 476
9.4.21. Altas desde un Localizador Arbolado......................................................... 478
9.5. EXPLORADOR WEB....................................................................................................... 479
9.6. CORREO ELECTRNICO ................................................................................................. 480
9.7. INCORPORACIN DE UN MANUAL DE AYUDA PROPIO PARA UNA APLICACIN........................... 480
10. INSTALACIN DE APLICACIONES ................................................................................. 483
10.1. VERSIN DE VELZQUEZ VISUAL BASADA EN SERVIDOR DE DISCO (MONOPUESTO) ................ 485
10.2. VERSIN CLIENTE-SERVIDOR DE VELZQUEZ VISUAL ......................................................... 486
10.3. CREACIN DE APLICACIONES PARA EJECUTAR DESDE CD-ROM......................................... 487
11. SERVIDOR DE APLICACIONES....................................................................................... 489
11.1. INSTALACIN DEL SERVIDOR .......................................................................................... 492
11.2. INTERFAZ DEL SERVIDOR ............................................................................................... 493
11.3. BARRA DE MENS ........................................................................................................ 495
11.3.1. Aplicaciones................................................................................................ 495
11.3.2. Editar........................................................................................................... 496
11.3.3. Servicios ..................................................................................................... 497
11.3.4. Utilidades.................................................................................................... 497
11.3.5. Ver............................................................................................................... 498
11.3.6. Ventana ....................................................................................................... 499
11.3.7. Ayuda.......................................................................................................... 500
11.4. BARRA DE HERRAMIENTAS ............................................................................................. 500
11.5. CONFIGURACIN DEL SERVIDOR..................................................................................... 502
11.5.1. Pestaa Estilos............................................................................................ 503
11.5.2. Pestaa VATP ............................................................................................. 504
11.5.3. Pestaa HTTP............................................................................................. 505
11.5.4. Pestaa iRunner.......................................................................................... 506
11.5.5. Pestaa Licencia......................................................................................... 507
11.5.6. Configuracin bsica.................................................................................. 507
11.6. REA DE CONFIGURACIONES.......................................................................................... 508
11.6.1. Pestaa Aplicaciones.................................................................................. 508
11.6.2. Pestaa Usuarios........................................................................................ 510
11.6.3. Pestaa Enganches .................................................................................... 513
11.6.4. Pestaa Transacciones ............................................................................... 514
11.6.5. Pestaa Archivos ........................................................................................ 516
11.7. CONFIGURACIN DE USUARIOS...................................................................................... 519
11.8. CONFIGURACIN DE GRUPOS DE USUARIOS..................................................................... 527
11.9. CONFIGURACIN DE GRUPOS DE MENSAJERA.................................................................. 532
11.10. CONFIGURACIN DE TAREAS.......................................................................................... 534
11.10.1. Pestaa Tareas programadas............................................................... 534
11.10.2. Pestaa Tareas ejecucin .................................................................... 536
11.11. HISTORIAL DEL SERVIDOR .............................................................................................. 537
11.11.1. Opciones de men .................................................................................... 538
11.11.2. Configuracin bsica del Historial del servidor ......................................... 543
11.12. CONFIGURACIN DE LOS DOMINIOS WEB ......................................................................... 544
11.13. NAVEGADOR VELZQUEZ VISUAL.................................................................................... 547
11.13.1. Instalacin del Navegador ......................................................................... 547
11.13.2. Interfaz del Navegador .............................................................................. 548
11.13.3. Barra de mens ......................................................................................... 549
11.13.4. Barra de herramientas ............................................................................... 560
11.14. OPTIMIZACIN DE APLICACIONES EN CLIENTE-SERVIDOR ................................................... 563
11.14.1. Sockets TCP: retardos y optimizacin ...................................................... 563
11.14.2. Optimizar el tamao del mapa .................................................................. 564
11.14.3. Elementos que retardan una aplicacin.................................................... 564
11.14.4. Transacciones............................................................................................ 566
11.14.5. Optimizaciones para el rendimiento ptimo en ejecucin........................ 567
Indice
14 15 VELAZQUEZ VISUAL
11.14.6. Efectos negativos no deseados ................................................................ 572
11.15. INCORPORACIN DE UN MANUAL DE AYUDA PROPIO PARA UNA APLICACIN........................... 575
12. EDITOR DE PERSONALIZACIONES............................................................................... 577
12.1. INTRODUCCIN.............................................................................................................. 579
12.2. INTERFAZ DEL EDITOR..................................................................................................... 580
12.2.1. Partes de la ventana del editor .................................................................... 580
12.2.2. Barra de Mens ........................................................................................... 581
12.2.3. Barra de Herramientas................................................................................. 583
12.2.4. Personalizacin del entorno de trabajo ....................................................... 584
12.3. CREACIN DE PERSONALIZACIONES................................................................................. 586
12.3.1. Designacin de objetos como personalizables (Editor de Proyectos) ........ 586
12.3.2. Nueva personalizacin (Editor de Personalizaciones).................................. 587
12.4. PERSONALIZAR OBJETOS DE UN MAPA DE VELZQUEZ VISUAL ............................................ 589
12.4.1. Personalizar un informe ............................................................................... 589
12.4.2. Personalizar un dibujo.................................................................................. 591
12.4.3. Crear informes y dibujos.............................................................................. 592
12.5. CARGAR LAS PERSONALIZACIONES EN LA APLICACIN........................................................ 593
13. IMPORTADOR XBASE ...................................................................................................... 609
13.1. INICIO DEL IMPORTADOR XBASE...................................................................................... 611
13.2. IMPORTAR UNA BASE DE DATOS ASCII ............................................................................ 612
13.3. IMPORTAR UNA BASE DE DATOS DE DBASE....................................................................... 615
ANEXO I: FORMATEADORES DE VELZQUEZ VISUAL....................................................... 617
ALFABTICOS ......................................................................................................................... 619
NUMRICOS ........................................................................................................................... 619
DE FECHAS ............................................................................................................................ 619
DE HORAS ............................................................................................................................. 620
ANEXO II: FUNCIONES DEL ASISTENTE DE EDICIN DE FRMULAS
ANEXO II: DE VELZQUEZ VISUAL ....................................................................................... 623
ANEXO III: PALETA DE COLORES.......................................................................................... 641
08
Desarrollo
completo de
una aplicacin
8.1 Tipos de tabla
Ya hemos visto cmo las tablas son los objetos que usamos para almace-
nar la informacin de manera organizada. Tambin hemos introducido las
tablas de tipo maestro de clave numrica y las de tipo esttico. A continua-
cin vamos a ver el resto de tipos de tablas de datos con los que cuenta
Velzquez Visual.
8.1.1. Tabla Submaestra
Son tablas que necesitan de una tabla padre para completarse, estando su
cdigo constituido por la unin del cdigo del padre, o padres (no hay lmi-
te en el nmero de niveles) ms el suyo propio. De esta forma la tabla sub-
maestra tendr un subcdigo propio por cada cdigo padre. Pueden exis-
tir dos fichas con el mismo subcdigo mientras la ficha de la tabla padre sea
diferente.
Ejemplos de tablas submaestras pueden ser: PROVINCIA, siendo su padre
PAIS. POBLACIN, siendo su padre PROVINCIA, etc.
Para crear una tabla submaestra debemos pulsar el botn Nueva tabla sub-
maestra , en la barra de herramientas situada a la derecha en la ventana
Esquema de tablas del Editor. Aparecer la ventana correspondiente a las
propiedades de la tabla submaestra.
08
Desarrollo completo
de una aplicacin
Nueva tabla submaestra
18 19 VELAZQUEZ VISUAL
Como podemos ver, las propiedades son similares a las vistas para la tabla
maestra, con el aadido de que debe indicarse cul va a ser la tabla de da-
tos padre de la tabla submaestra.
La Longitud-rango que especificamos no es el nmero mximo de registros
de la tabla, sino de registros por cada maestro de la tabla padre.
Ejemplo: creacin de una tabla submaestra
En este ejemplo vamos a crear una tabla maestra y a continuacin otra tabla,
submaestra de la anterior. Para ello debemos seguir los siguientes pasos:
Entramos en el Editor de proyectos y creamos un nuevo proyecto.
Creamos una tabla maestra (desde el Editor de Esquemas pulsamos sobre
el botn Nueva tabla maestra ) con las siguientes propiedades: nombre
plural: Pases. Nombre singular: Pas. Pulsamos el botn Aceptar.
A continuacin pulsamos el botn Nueva tabla submaestra y creamos
una tabla submaestra con las siguientes propiedades: Tabla de datos padre:
PAISES. Nombre plural: Provincias. Nombre singular: Provincia. Pulsamos
el botn Aceptar.
VENTANA CREACIN DE MAESTRO
e
Nueva tabla maestra
Nueva tabla submaestra
Si observamos el Editor de Esquemas podremos ver cmo hay dos tablas:
PAISES y PROVINCIAS. Tambin se puede apreciar cmo Velzquez Visual
ha enlazado directamente las tablas PAISES y PROVINCIAS. Esto siempre
lo hace al crear una tabla submaestra, crendose automticamente dicho
enlace porque la relacin que existe entre una tabla submaestra y su tabla
padre es muy fuerte (recuerde que el cdigo de la tabla submaestra est
compuesto por el cdigo de la tabla padre ms el suyo propio).
08
Desarrollo completo
de una aplicacin
CREACIN DE SUBMAESTRO
e
20 21 VELAZQUEZ VISUAL
Se pueden crear tantos niveles de tablas submaestras como se quiera, es de-
cir, en nuestro caso se podra crear otra tabla submaestra que tenga como ta-
bla padre a PROVINCIAS (por ejemplo una tabla CIUDADES), y a su vez la ta-
bla submaestra creada ahora sera la tabla padre de otra submaestra y as in-
definidamente. El ndice CODIGO de cada una estara formada como se pue-
de suponer, por el campo CODIGO de la tabla padre ms el campo CODIGO
de la propia tabla. Por lo general, a la hora de realizar un desarrollo con Velz-
quez Visual, no suelen realizarse ms de dos niveles de tablas submaestras, no
por limitacin tcnica ni de rendimiento, sino por simplificar la programacin.
8.1.2. Tabla Arbolada
Las tablas arboladas son en realidad tablas maestras que se visualizan con
una estructura arbolada (al estilo de un rbol de directorios), de modo que su
campo CODIGO se abre en nuevas ramas por cada carcter o grupo de ca-
NDICE CDIGO DE LA TABLA SUBMAESTRA
e
Cuestiones
1. Crear dos tablas: una de tipo maestro y otra submaestra de la ante-
rior. Ver cmo el ndice cdigo de la tabla submaestra est com-
puesto por el cdigo propio y el de su tabla padre.
2. Crear una tabla de tipo maestro: PAISES, otra submaestra de PAI-
SES: COMUNIDADES, y otra submaestra de COMUNIDADES: PRO-
VINCIAS. Comprobar cmo Velzquez Visual no slo enlaza PAISES
con COMUNIDADES y COMUNIDADES con PROVINCIAS, sino que
tambin enlaza PAISES con PROVINCIAS. Comprobar tambin c-
mo el ndice cdigo de PROVINCIAS est compuesto por el cdigo
propio ms el de COMUNIDADES y PAISES.
racteres que aadimos. Es el campo CODIGO el que determina la ramificacin,
representando cada carcter o grupo de caracteres un piso o nivel del rbol.
Vemoslo con un ejemplo de Astronoma: en el Universo encontramos muchos
tipos de objetos, por ejemplo galaxias. Pero las galaxias a su vez se clasifican
en espirales, barradas, irregulares... y cada uno de estos grupos presenta ms
subdivisiones an, y esto ocurre para casi todos los tipos de objeto del Uni-
verso, sean galaxias, estrellas, nebulosas... Claramente, si queremos organizar
los tipos de objeto del Universo en una tabla, sta ha de ser de tipo arbolado.
Para introducir un registro en la tabla arbolada hemos de especificar su c-
digo y su nombre, lo que se hace en ejecucin mediante un formulario.
Por ejemplo, para el registro galaxia especificamos G, y ya tenemos un
tipo de objeto: un registro de la tabla.
Metamos ahora otro registro, por ejemplo, galaxia espiral. Las galaxias es-
pirales son un subgrupo de las galaxias y esto queremos que se refleje en
la estructura de la tabla. Para ello asignamos el cdigo GS al tipo gala-
xia espiral: ya tenemos dos registros, este ltimo colgando del anterior, de
modo que las galaxias espirales heredan todas las caractersticas de las ga-
laxias. De igual modo, al registro galaxia irregular podramos asignarle el
cdigo GI, reflejando as que las irregulares son un subgrupo de las gala-
xias. Ya tenemos tres registros, colgando los dos ltimos del primero.
El rbol puede seguir creciendo (el lmite est en la longitud del cdigo de
la tabla), por ejemplo, asociamos el cdigo GSA a las galaxias espirales
de tipo A (y ya tendramos cuatro registros en la tabla).
08
Desarrollo completo
de una aplicacin
ASPECTO QUE PODRA TENER EL RBOL DE TIPOS DE OBJETOS DEL UNIVERSO
22 23 VELAZQUEZ VISUAL
Hasta ahora hemos construido cada nivel con un solo carcter del campo
cdigo, pero tambin puede hacerse con ms de uno, por ejemplo asig-
nando GAL a las galaxias, ES a las espirales, A a las de tipo A...
Al igual que el resto de tablas, cada registro de una tabla arbolada est or-
ganizado en campos. Por seguir con este ejemplo, los tipos de objeto del
Universo podran tener los campos Ao de descubrimiento, Investigado ?
(booleano), Naturaleza del objeto, etc.
Gracias a las tablas arboladas podemos definir el tipo al que pertenecen los
registros de otra tabla, histrica de la arbolada. Por ejemplo, supongamos
la tabla LIBROS, en la que cada registro se refiere a un volumen en particu-
lar. En una tabla arbolada que llamaremos MATERIAS cada registro har re-
ferencia a una materia en particular (historia, historia del siglo XX, historia
del siglo XIX, historia militar del siglo XX, historia de la monarqua del siglo
XX... es decir, una estructura claramente arbolada). Estableciendo que LI-
BROS sea histrica de MATERIAS, podemos capturar desde LIBROS la ma-
teria a la que pertenece el libro (la materia no es ms que un registro de la
arbolada MATERIAS).
Cuando presentamos los histricos de una tabla arbolada, podemos hacer
que, dado un tipo o nivel de la arbolada, nos presente todos los histricos
de todas las ramas contenidas en l. A esto se le denomina herencia arbo-
lada y se consigue activando el botn . Si desactivamos la herencia ar-
bolada y pedimos que nos muestre los histricos a un nivel determinado,
slo nos mostrar los registros definidos con el tipo correspondiente a ese
nivel (y no todos los contenidos en niveles inferiores).
Cuando introducimos un nuevo registro en una tabla arbolada hemos de te-
ner cuidado a la hora de meter el cdigo. Si un registro tiene por cdigo A,
y otro tiene AB, el de cdigo AB se ver incluido en la rama iniciada por el
de cdigo A. Ahora bien, si usamos nmeros tengamos cuidado, ya que to-
dos los registros cuyo cdigo empiece por 1 (10, 119, 1031...) se vern in-
cluidos dentro de la rama iniciada por el de cdigo 1, todos aquellos cuyo
cdigo comience por 2 se incluirn en la rama iniciada por el de cdigo 2 y
as sucesivamente. Lo ms usual es definir el campo cdigo como alfanu-
mrico.
Se recomienda utilizar un
Alfa40 para el campo
cdigo, con el fin de ahorrar
espacio en disco.
TRUCO
Herencia arbolada
Las propiedades de la tabla arbolada son las mismas que las de la tabla
maestra. Especial mencin merece el apartado Longitud-Rango: se refiere
al nmero de niveles que va a tener la tabla arbolada. Por ejemplo, si una
tabla arbolada tiene de longitud 2 bytes, el rbol tendr 3 niveles, si tiene 4
bytes tendr 6 niveles, etc.
Ejemplo: creacin de una tabla arbolada
Vamos a crear una tabla arbolada a la que llamaremos FAMILIAS. ste es
un ejemplo clsico, ya que una familia est compuesta de subfamilias, que
a su vez pueden presentar ms subniveles.
Dentro del Editor de Esquemas, pulsamos el botn Nueva tabla arbolada .
Aparecer la ventana creacin de maestro con clave arbolada, en la que es-
cribimos Nombre plural: Familias. Nombre singular: Familia.
Segn el nmero de pisos que vaya a tener el rbol seleccionamos la LON-
GITUD-RANGO. En este caso marcamos el radio botn 8 bytes, lo que nos
permite alcanzar hasta 12 subniveles.
Pulsamos el botn Aceptar.
En el Editor de Esquemas aparecer el icono de la tabla arbolada FAMILIAS.
08
Desarrollo completo
de una aplicacin
CREACIN DE MAESTRO CON CLAVE ARBOLADA
e
Nueva tabla arbolada
24 25 VELAZQUEZ VISUAL
8.1.3. Tablas histricas
La caracterstica principal de una tabla histrica es que no tiene campo CO-
DIGO que permita apuntar a un registro concreto, pero s puede tener otros
ndices de clave nica. Se utilizan para almacenar las lneas de una tabla
maestra. Las tablas histricas suelen tener un campo enlazado a una tabla
maestra y un ndice que ser usado para declarar el enlace histrico de la
tabla maestra.
Sus propiedades son fundamentalmente las vistas hasta ahora para el
resto de tablas. Incorpora adems la posibilidad de que Velzquez Visual
cree automticamente un campo llamado FECHA y su correspondiente n-
dice. Tambin es posible indicar cul o cules van a ser sus tablas maes-
tras (lo normal es no enlazar la tabla a sus maestros desde esta ventana
de propiedades).
El rbol, adems del cdigo,
siempre presenta (y slo
presenta) el campo Nombre.
Para incluir ms datos
definimos el campo Nombre
como frmula alfabtica, o
con un contenido inicial en
funcin de otros campos, y
as podremos mostrar lo que
queramos.
TRUCO
Cuestiones
1. Encontrar distintos casos que presenten una estructura arbolada
(clasificaciones biolgicas, materias de libros, habitaciones de un
hotel, estructura de los captulos de un libro...).
2. Crear una tabla arbolada y construir el rbol de las galaxias espirales.
3. Crear una tabla histrica de la arbolada que hemos creado en la
cuestin 2. Dar de alta una serie de registros con distintos tipos de-
finidos en la tabla arbolada. Una vez hecho esto comprobar cmo
funciona la herencia arbolada.
Ejemplo: creacin de una tabla tipo histrico
Vamos a crear dos tablas: una maestra y otra de tipo histrico, y vamos a
establecer un enlace entre ambas.
En el Editor de Proyectos creamos una nueva tabla maestra con las
siguientes propiedades: Nombre plural: Albaranes. Nombre singular: Al-
barn.
Dentro del Editor de Esquemas, pulsamos el botn Nueva tabla hist-
rica .
Aparecer la ventana Propiedades de la tabla histrica en la que aadi-
mos las siguientes propiedades: Nombre plural: Lneas de Albaranes.
Nombre singular: Lnea de Albarn. Pulsamos el botn Aceptar.
08
Desarrollo completo
de una aplicacin
e
Nueva tabla maestra
Nueva tabla histrica
26 27 VELAZQUEZ VISUAL
Ya tenemos la tabla ALBARANES, que almacenar los datos correspon-
dientes a la cabecera del Albarn (nmero de albarn, fecha, cdigo de
cliente, etc.) y la tabla LNEAS DE ALBARN que contendr las lneas de
un albarn (artculo, cantidad, precio, etc.). Hemos de enlazar ambas ta-
blas mediante un enlace singular-plural. Con el ratn pinchamos sobre el
enlazador (botn superior izquierdo) del maestro (ALBARANES) y arras-
tramos hasta LNEAS DE ALBARAN.
Consideremos ahora la situacin siguiente: queremos una aplicacin con la
que llevar el registro de los artculos que tenemos en varios almacenes, de
modo que para un almacn sepamos todos los artculos que se guardan en
l, mientras que para un artculo sepamos todos los almacenes en los que
se guarda. Est claro que en nuestro diseo vamos a contar con dos tablas:
ARTCULOS y ALMACENES. Ahora bien, cmo las enlazamos? Ya sabe-
mos que hemos de enunciar dos frases que nos ayuden, stas son: En un
almacn podemos tener muchos artculos y un artculo podemos tenerlo
en muchos almacenes. Vemos que este caso difiere de los que nos haba-
mos encontrado hasta el momento, ahora tenemos un plural en los dos sen-
tidos o plural mltiple.
Para resolver estos casos hacemos uso de una tabla de tipo histrico que
haga de intermediaria. Vemoslo con un ejemplo.
Ejemplo: resolucin de un doble plural
El planteamiento es el siguiente: tenemos dos tablas, ALMACENES y ARTCU-
LOS, que como ya hemos visto estn relacionadas mediante un doble plural.
Dado un almacn queremos saber todos los artculos que se guardan en l, y
dado un artculo queremos saber todos los almacenes en los que est.
Comenzamos el diseo de la aplicacin creando dos tablas de tipo maes-
tro normal con clave numrica: ALMACENES y ARTCULOS. Nos es sufi-
e
e
ciente con los campos CODIGO y NOMBRE que Velzquez crea por defec-
to en ellas. En ARTCULOS llevaremos recuento de todos los artculos que
tenemos, mientras que ALMACENES har recuento de nuestros almacenes.
A continuacin vamos a crear una tabla de tipo histrico que resuelva el do-
ble plural. Para ello pulsamos el botn Nueva tabla histrica , aparecien-
do la ventana Creacin de Histrico.
En Plural escribimos Existencias, mientras que en Singular escribimos Existen-
cia. Tambin quitamos el check Campo fecha y pulsamos el botn Aceptar.
Ahora que ya tenemos creada la tabla de tipo histrico el siguiente paso es
crear un enlace a histrico desde las dos tablas maestras creadas anterior-
mente. Para ello pulsamos con el ratn sobre el enlazador en la tabla AL-
MACENES y arrastramos hasta la tabla histrica. Repetimos el proceso con
la tabla ARTCULOS.
Al establecer estos enlaces contra la tabla EXISTENCIAS, Velzquez ha
creado en ella los campos Almacenes y Artculos, junto con sus correspon-
dientes ndices, es decir, los registros de la tabla histrica constan de dos
campos: Almacenes y Artculos.
08
Desarrollo completo
de una aplicacin
e
Nueva tabla histrica
28 29 VELAZQUEZ VISUAL
Hacemos ahora doble clic sobre uno de los dos ndices de la tabla EXIS-
TENCIAS, hagmoslo sobre el ndice Almacenes, por ejemplo. Le aadimos
el componente Artculos y le damos el tipo Clave nica. As conseguimos
que en esta tabla no se repitan registros (es decir, nunca se repite una mis-
ma pareja almacn - artculo).
e
Este diseo ya nos resuelve el doble plural. Para verlo hemos dado de alta
los siguientes registros de la tabla ARTCULOS:
Tambin hemos dado de alta los siguientes registros de la tabla ALMACENES:
En EXISTENCIAS cada registro que damos de alta liga un binomio almacn-
artculo, de modo que se registran, para cada almacn, todos los artculos
que contiene (o visto de otro modo, para cada artculo, todos los almace-
nes en los que ste se encuentra).
En nuestro ejemplo hemos creado un formulario para dar de alta los regis-
tros de la tabla ALMACENES-ARTCULOS.
Supongamos entonces que en la tabla ARTCULOS elegimos un artculo
determinado, por ejemplo camisetas. Podemos navegar hacia histrico
con la opcin Navegante/Histricos del men del ejecutor.
08
Desarrollo completo
de una aplicacin
e
30 31 VELAZQUEZ VISUAL
Al pulsar sobre la opcin del men Navegante/Histricos, Velzquez mues-
tra la ventana Navegante: Seleccin de Histrico. En ella hemos de especifi-
car hacia qu histrico de la tabla ARTCULOS nos vamos a mover. En este
caso slo aparece EXISTENCIAS por ser su nico histrico. A la derecha
hemos de seleccionar la rejilla en la que vamos a ver los registros histricos.
Le damos al botn Aceptar y aparecern en la rejilla todos los registros de
la tabla EXISTENCIAS que son histricos del artculo.
Una vez obtengamos estos registros de histrico, podemos navegar hacia el
maestro ALMACENES, obteniendo todos los almacenes en los que se en-
cuentra el artculo. Para ello hemos de seleccionar la opcin Navegante/Maes-
tros, apareciendo la ventana Navegante: Seleccin de Maestro, en la que he-
mos de indicar hacia qu maestro nos movemos, en este caso Almacn.
e
Al aceptar obtendremos una lista de todos los almacenes en los que se en-
cuentra el artculo. Ya tenemos uno de los sentidos del plural: los almace-
nes del artculo.
Con el otro sentido del plural el proceso es idntico: partimos ahora de un
registro de la tabla ALMACENES, un almacn en concreto, y navegamos
hacia histrico obteniendo todos los registros de la tabla EXISTENCIAS en
los que aparece el almacn. Si navegamos hacia el maestro ARTCULOS
obtendremos todos los artculos que se guardan en el almacn (ste es el
otro sentido del plural, los artculos del almacn).
08
Desarrollo completo
de una aplicacin
e
Cuestiones
1. Sugerir distintos ejemplos en los que aparezca el doble plural (AUTO-
RES-LIBROS, ALUMNOS-PROFESORES, LADRONES-ROBOS).
2. Siguiendo el ejemplo anterior resolver el doble plural AUTORES-LI-
BROS (caso particular de que un libro tenga ms de un autor). Dar
de alta registros en las tablas AUTORES, LIBROS y LIBROS-AUTO-
RES. Movindose por las tablas encontrar todos los libros de un au-
tor y todos los autores de un libro.
32 33 VELAZQUEZ VISUAL
8.1.4. Maestro de segundo nivel con clave numrica
Supongamos una aplicacin en la que tenemos dos tablas: POBLACIONES
y CLIENTES, ambas de tipo maestro normal con clave numrica, siendo
CLIENTES histrica de POBLACIONES. A la tabla CLIENTES, que se en-
cuentra jerrquicamente por debajo de la tabla POBLACIONES, se la deno-
mina maestro de segundo nivel con clave numrica.
Podemos relacionar ambas tablas como es habitual: creando POBLACIO-
NES y CLIENTES y enlazndolas a continuacin, pulsando sobre el enlaza-
dor de la maestra y llevando el puntero del ratn hasta la histrica. Pero Ve-
lzquez nos ofrece otra posibilidad: si ya tenemos creada la tabla POBLA-
CIONES y queremos crear CLIENTES, podemos usar el asistente para la
creacin de maestros de segundo nivel con clave numrica, para lo cual en
la Galera de objetos seleccionamos tabla de datos, apareciendo la ventana
Asistente: Creacin de una tabla de datos.
Seleccionamos Maestro 2 nivel con clave numrica y aparecer la ventana
de creacin de maestro 2 nivel con clave numrica. Declaramos las pro-
piedades de la tabla CLIENTES, as como las tablas maestras a las que
apunta.
Pulsamos el botn Aceptar, crendose automticamente la tabla CLIEN-
TES, enlazada a su maestro POBLACIONES. En CLIENTES se ha creado un
campo de enlace por cada una de las tablas maestras apuntadas, con su
ndice correspondiente (Poblaciones).
08
Desarrollo completo
de una aplicacin
34 35 VELAZQUEZ VISUAL
Si alguna de las tablas maestras enlazadas es submaestra de otra, Velz-
quez Visual genera un nuevo campo de enlace para completar el cdigo de
enlace. De hecho, generar tantos campos de enlace como sean necesa-
rios, hasta llegar al padre de una relacin Maestro - Submaestro multinivel.
Vemoslo con un ejemplo:
Ejemplo: creacin de un maestro de 2 nivel, histrico de una tabla submaestra
Supongamos una estructura en la que la tabla POBLACIONES es sub-
maestra de PROVINCIAS y sta, a su vez, es submaestra de PAISES.
Si ahora aadimos la tabla CLIENTES, seleccionando como maestro de la
misma POBLACIONES, en CLIENTES se crear automticamente un
campo enlazado a la tabla de PAISES, otro a la de PROVINCIAS y otro a
la de POBLACIONES. Asimismo, se crea un ndice de POBLACIONES,
que estar compuesto por el cdigo del pas, el de la provincia y el de la
poblacin.
e
CREACIN DE MAESTRO DE 2 NIVEL
08
Desarrollo completo
de una aplicacin
e
36 37 VELAZQUEZ VISUAL
Tambin quedan establecidos los enlaces histricos que relacionan cada
una de las tablas maestras con el Maestro de 2 nivel recin creado.
Si ahora redefinimos la tabla CLIENTES como submaestra de POBLA-
CIONES, se modificar su ndice Cdigo, aadiendo la clave de POBLA-
CIONES.
Tambin hemos de tener en cuenta la longitud del campo cdigo de la ta-
bla. Por ejemplo, si cambiamos el tipo de una tabla maestra por submaes-
tra, ya que la longitud del cdigo de las submaestras suele ser menor que
el de las maestras.
Cuando cambiamos una
tabla de un tipo a otro
hemos de ser cuidadosos
con las propiedades del
campo cdigo. Por ejemplo,
al cambiar del tipo maestro
arbolado (que tiene un
cdigo de tipo alfanumrico)
a cualquier otro tipo de tabla
(con cdigo numrico),
Velzquez no cambia
automticamente el tipo,
sino que hemos de
cambiarlo nosotros.
ADVERTENCIA
PROPIEDADES DEL NDICE POBLACIONES
e
8.1.5. Histrico doble
A la hora de disear una aplicacin es habitual encontrarse con la estructu-
ra cabecera-lneas. La llamamos as ya que un ejemplo representativo se da
en aplicaciones de gestin, en las que las facturas se detallan en dos tablas:
CABECERAS (de las facturas) y LINEAS (de una factura), LINEAS es hist-
rica de CABECERAS. Cada registro de CABECERAS guarda datos genera-
les acerca de una factura, siendo histrica de CLIENTES, mientras que en
cada registro de LNEAS se hace referencia a un artculo, luego LINEAS es
histrica de ARTICULOS.
08
Desarrollo completo
de una aplicacin
El asistente para la creacin
de maestros de 2 nivel slo
aparece cuando
seleccionamos tabla de
datos en la Galera de
objetos.
ADVERTENCIA
e
38 39 VELAZQUEZ VISUAL
Velzquez Visual cuenta con un asistente gracias al que podemos crear di-
rectamente estructuras del tipo cabecera-lneas. Para acceder a l selec-
cionamos tabla de datos en la Galera de objetos, apareciendo la ventana
Asistente: Creacin de una tabla de datos. En ella seleccionamos Histrico
doble-> Cabeceras y Lneas.
Aparecer entonces la ventana Creacin de histrico con cabeceras y l-
neas, en la que hemos de declarar el nombre de la tabla que hace las ve-
ces de cabecera, en este caso FACTURAS. Tambin hemos de seleccio-
nar la tabla que hace las veces de maestro de la cabecera, en este caso
CLIENTES, as como el maestro de las lneas de la cabecera, en este ca-
so ARTCULOS.
El asistente para la creacin
de histrico con cabeceras y
lneas slo aparece cuando
seleccionamos tabla de
datos en la Galera de
objetos.
ADVERTENCIA
Aceptamos y Velzquez nos crea el esquema que hemos presentado antes.
El asistente ha creado automticamente los campos de enlace entre las ta-
blas FACTURAS y LINEAS DE FACTURA, as como los ndices correspon-
dientes. Tambin genera los campos de enlace con los maestros.
8.1.6. Creacin de una tabla igual a una base
8.1.6. de datos externa
En un proyecto de Velzquez Visual es posible declarar Bases de datos
externas, a las que podemos hacer referencia tanto para importar como
para exportar informacin. Adems, podemos crear tablas de datos de
Velzquez Visual con la misma estructura de campos y tipos de campos
que esas bases de datos externas que hayamos declarado en el pro-
yecto. Posteriormente, con ayuda de otro objeto, el Tubo de lista, po-
dremos importar y exportar datos entre nuestra aplicacin y la base de
datos externa.
Como todava no hemos visto las bases de datos externas ni los tubos, de-
jaremos para ms adelante la creacin de tablas iguales a bases de datos
externas.
Resumen
Las tablas submaestras necesitan de una tabla padre para completarse, es-
tando su cdigo constituido por la unin del cdigo del padre ms el suyo
propio.
Las tablas arboladas se usan para guardar registros que presentan una es-
tructura arbolada, como en las distintas materias de los libros en una bi-
blioteca. Gracias a ellas podemos definir el tipo al que pertenecen los re-
gistros de una tabla histrica de la arbolada.
Las tablas de tipo histrico no necesitan campo CODIGO, utilizndose pa-
ra almacenar los registros histricos de una tabla maestra.
Al analizar un problema es frecuente encontrarse con tablas relaciona-
das por un doble plural. Para resolverlo hacemos uso de tablas de tipo
histrico.
Velzquez Visual cuenta con asistentes para la creacin de tablas maestras
de 2 nivel (tablas maestras que son histricas de otras tablas), y para la
creacin de histricos dobles (estructuras del tipo cabecera-lneas).
En Velzquez Visual podemos declarar una tabla de datos igual a una base
de datos externa que hayamos definido en el proyecto.
08
Desarrollo completo
de una aplicacin
Para esquemas de facturas
con lneas, albaranes con
lneas, etc., se suele usar
tambin la estructura
Maestro-Submaestro, ya
que posibilita la cuenta y
ordenacin de las lneas
pertenecientes a una
cabecera (Maestro).
ADVERTENCIA
40 41 VELAZQUEZ VISUAL
8.2 Tipos de enlace
Hasta ahora hemos visto los enlaces ms sencillos: el enlace a tabla de da-
tos maestra (singular y plural) y el enlace a tabla de datos esttica. En este
captulo vamos a centrarnos en el resto de enlaces que podemos estable-
cer en Velzquez Visual, y que son un poco ms complejos que los vistos
hasta ahora.
8.2.1. Asistentes para la creacin de enlaces
Para facilitar la creacin de enlaces el editor incorpora una serie de asis-
tentes que podemos ejecutar desde el men de contexto que se presenta
al hacer clic con el ratn sobre el panel de estructura de datos de la Venta-
na principal del editor de proyectos.
En este caso la tabla que tomemos como referencia ser sobre la que ha-
yamos obtenido el men de contexto.
Tambin estar disponible en la Ventana de esquemas en el men de con-
texto que se presenta al pulsar el botn derecho del ratn sobre una tabla.
Otra posibilidad es seleccionar una tabla en el esquema y pulsar el botn
Crear punteros.
8.2.2. Enlace a hermano contiguo
Permite crear un enlace a un registro de la misma tabla de datos, de modo
que podemos obtener los valores de sus campos o movernos por los re-
gistros a travs de un ndice determinado. En ese ndice no slo podemos
indicar los campos por los que queremos establecer el orden de movimien-
to, sino que tambin podemos forzar a que slo nos podamos mover por
registros que contengan un valor determinado en un campo. Desde un re-
gistro podemos obtener los valores de los campos del anterior o del si-
guiente, lo que podemos usar para inicializar campos, clculos a partir del
valor del registro anterior, etc. Se trata de un puntero virtual, que no ocupa
espacio en disco.
Veamos con un ejemplo cmo funciona este enlace:
08
Desarrollo completo
de una aplicacin
Crear punteros
42 43 VELAZQUEZ VISUAL
Ejemplo: Creacin de un enlace a hermano contiguo
Supongamos una tabla en la que guardamos registros de personas, tenien-
do cada registro los campos nombre, primer apellido y edad. Queremos que
nuestra aplicacin nos d la posibilidad de fijar una edad y recorrer aque-
llos registros cuyo campo edad coincida con el que nosotros hayamos fija-
do. Adems queremos que la ordenacin se realice por apellido y nombre.
Para ello seguimos los siguientes pasos:
Creamos otros dos campos en nuestra tabla de datos: anterior y siguiente,
y creamos un ndice en el que aadimos los campos edad, apellido y nom-
bre en el cuadro Frmula partes. El ndice podemos definirlo de tipo acep-
ta repetidas, por si hay ms de una persona en la que coincidan los tres
campos. Al ndice lo hemos llamado Hermano.
Pinchamos en el campo siguiente y seleccionamos el enlace dentro del
apartado Enlazado? en la ventana de Propiedades de campo. En este ca-
so seleccionaremos el enlace Hermano contiguo.
e
Veremos cmo al seleccionar el enlace Hermano contiguo se activa el bo-
tn Resolucin. Esto se debe a que hemos de indicarle a Velzquez Visual
una serie de parmetros que necesita conocer para que pueda utilizar di-
cho enlace.
Si pulsamos el botn Resolucin nos aparecer una ventana correspon-
diente a la Resolucin de puntero a hermano: Las propiedades que apare-
cen en dicha ventana son las siguientes:
ndice por el cual va a realizar el enlace. En nuestro caso es el ndice que
hemos llamado Hermano.
N de partes comunes del ndice que tienen los registros a enlazar. Ser el
campo o los campos que tendrn en comn los registros por los que nos
queremos mover. En nuestro caso nos movemos por registros que tienen
una edad fija, luego el nmero de partes comunes es uno (si quisiramos fi-
jar edad y nombre, entonces sera dos). Si quisiramos movernos por los re-
gistros sin fijar una edad, sino segn el orden de edad, el nmero de partes
comunes sera cero.
Direccin: Anterior/Siguiente: Marcaremos una de las dos opciones, sirve
para indicar si se enlazar con el registro anterior o con el siguiente. En
nuestro caso esta opcin determina si los registros por los que nos move-
mos se ordenan por orden alfabtico de apellidos y nombre hacia la Z o ha-
cia la A.
Este proceso que hemos hecho con el campo siguiente, hemos de repetir-
lo con el campo anterior, con la diferencia de que la direccin es Anterior.
Llegados a este punto, el enlace ya est hecho. Ahora nos vamos a un for-
mulario y creamos dos botones, llammoslos por ejemplo Anterior Persona
08
Desarrollo completo
de una aplicacin
e
44 45 VELAZQUEZ VISUAL
y Siguiente Persona. Para el botn Siguiente Persona, en las propiedades
del botn le especificamos que el comando asociado al pulsar el botn sea
moverse a hermano contiguo, y le decimos que el campo es siguiente. Re-
petimos la operacin con el botn Anterior Persona, siendo en este caso el
campo anterior. De este modo, una vez que estemos viendo un registro de-
terminado en el formulario, podremos movernos a los registros siguiente y
anterior que coincidan en edad con la de la ficha que estemos viendo.
Podemos agilizar el proceso de creacin de enlace a hermano usando el
asistente Creacin de campo puntero: Hermano, presentndose el siguien-
te cuadro de dilogo:
En el asistente encontramos la opcin Direccin: Ambas, que nos crea los
dos enlaces, anterior y siguiente, de una sola vez.
e
Cuestiones
1. Rehacer el diseo del ejemplo anterior. Para el ndice hermano indi-
car que el nmero de partes comunes sea cero: cmo nos move-
mos por los registros?
2. Siguiendo con el ejemplo anterior. Rehacer el ndice hermano, de modo
que se componga de las partes Nombre, Apellidos y Edad (por este orden).
8.2.3. Singular de plural por posicin
Permite crear un enlace singular a una tabla histrica de la tabla actual (es
decir, elegimos un solo registro entre varios, de ah singular de plural: uno
entre muchos). Tendremos que elegir entre los distintos enlaces histricos
definidos en la tabla maestra y se resolver la posicin fija del histrico con
el que establecemos el enlace (de ah por posicin).
En el esquema, el enlace aparecer dibujado como una flecha verde
.
Por ejemplo, supongamos una aplicacin en la que tenemos la tabla ma-
estra TRABAJOS y la tabla TRABAJADORES, histrica de la anterior. En la
tabla maestra podemos aadir un campo llamado ltimo trabajador enla-
zado a la tabla TRABAJADORES mediante un enlace singular de plural por
posicin.
Para realizar este enlace basta con seleccionar el enlace Singular de plural
por posicin y en el campo Identificador elegir el histrico al que queremos
08
Desarrollo completo
de una aplicacin
Indicar que el nmero de partes comunes sea uno. De qu modo
nos movemos por los registros?
3. Tenemos una aplicacin para la gestin de presupuestos, con una tabla de
las distintas cuentas presupuestadas (PGC) y otra de presupuestos anua-
les (PRESUPUESTOS). Cmo haramos para que al crear una ficha nue-
va, al elegir la cuenta presupuestada nos inicialice el campo del importe
con el valor que tuvo el presupuesto de esa misma cuenta el ao anterior?
Cmo haramos para que, a partir de los presupuestos del ao anterior y
con un proceso, el valor del importe sea el del ao anterior de esa misma
cuenta incrementado en un tanto por ciento escogido por nosotros?
46 47 VELAZQUEZ VISUAL
apuntar. Como contenido de Frmula escribimos n, que es el identificador
que Velzquez Visual da a la variable de sistema nmero de elementos de
la lista. De este modo, desde el campo ltimo trabajador de la tabla TRA-
BAJOS podremos atrapar el registro que se encuentra en la posicin n de
la tabla histrica TRABAJADORES, es decir, el ltimo trabajador de la lista.
Tambin podemos construir un enlace a hermano usando el asistente, el
cual nos presenta el siguiente cuadro de dilogo en el que definir las pro-
piedades del enlace:
8.2.4. Singular de plural por ndice
Permite crear un enlace singular a una tabla histrica de la tabla actual,
usando para su resolucin el ndice utilizado en el enlace histrico. El pro-
gramador nicamente tendr que resolver aquellas partes del ndice utiliza-
do en enlace histrico que no sean el campo enlazado a la tabla actual. Ve-
moslo con un ejemplo:
Ejemplo: singular de plural por ndice
Supongamos una aplicacin de gestin en la que llevamos registro de las
facturas de nuestros clientes. Queremos saber cul es la ltima factura de
un cliente determinado.
Para resolver este problema necesitamos dos tablas, una maestra que lla-
maremos CLIENTES, y otra histrica de la anterior que llamaremos FACTU-
RAS. Al enlazar ambas tablas con un enlace a tabla maestra, en la tabla
e
Cuestiones
1. Disear una aplicacin que lleve el registro de los ganadores de ca-
da etapa del Tour de Francia.
CLIENTES se crear el histrico facturas, mientras que en la tabla FACTU-
RAS se crea un campo llamado cliente, as como el ndice cliente.
En la tabla FACTURAS vamos a aadir el campo fecha, que nos indicar
cul es la fecha correspondiente a cada registro. Queremos saber cul ha
sido la ltima factura que le hemos hecho a un cliente determinado. Para
ello aadimos el campo fecha al ndice cliente de la tabla FACTURAS.
Una vez hecho esto, en la tabla CLIENTES aadimos un campo llamado l-
tima factura. A este campo le asociamos un enlace singular de plural por n-
dice, escogemos el histrico que vamos a usar (facturas-clientes) y pincha-
mos en el botn Resolucin para resolver el enlace.
08
Desarrollo completo
de una aplicacin
e
48 49 VELAZQUEZ VISUAL
Al pinchar en el botn Resolucin se muestra el enlace histrico seleccio-
nado; en el apartado Resolucin partes se muestran aquellas partes del n-
dice utilizado en el enlace histrico que el programador debe resolver. Pa-
ra ello basta con hacer doble clic sobre cada una y, a travs del Asistente
para la edicin de frmulas, establecer la frmula de su resolucin. En
nuestro caso, el ndice que usa es cliente creado por Velzquez en la tabla
FACTURAS cuando hicimos el enlace a tabla de datos maestra. A ese n-
dice le aadimos el campo Fecha de la factura, siendo esa fecha la parte
que hemos de resolver, cosa que hacemos con el Asistente para edicin
de frmulas, especificando que el contenido debe rellenarse con la funcin
fHoy().
Por ltimo, hemos de especificar el modo de bsqueda del registro histri-
co (modo buscar), que podr ser: Igual, Igual o mayor, Igual o menor, Mayor,
Menor, Primero y ltimo. En nuestro caso, como nos interesa saber la lti-
ma factura, el modo de buscar ser igual o menor, ya que la fecha de la l-
tima factura puede ser hoy o algn da ya pasado.
De este modo, en el campo ltima factura de la tabla CLIENTES podemos
capturar la ltima factura que le hemos hecho a un cliente determinado.
Como en los casos anteriores, tambin podemos crear este enlace me-
diante el asistente, presentndose el siguiente cuadro de dilogo:
Cuando entre dos tablas existe un enlace singular de plural, ste se visua-
liza en el esquema de tablas como una flecha de color verde .
e
Cuestiones
1. Trabajando sobre el esquema del ejemplo anterior, obtener la factura
de un cliente cuyo importe sea igual o inmediatamente superior a una
cantidad determinada.
8.2.5. Enlace a tabla de datos indirecta real
y virtual
Los punteros indirectos se utilizan para relacionar la tabla de datos en cur-
so con otra tabla que no es maestra de la actual. Habitualmente se trata de
tablas que carecen de campo CODIGO y que por tanto no pueden ser de-
finidas como maestras de otras tablas.
Existen dos tipos de enlaces a tabla datos indirecta: el enlace indirecto
real y el enlace indirecto virtual . La diferencia entre el
enlace real y virtual radica en que el primero ocupa espacio en disco y el
segundo no, es decir, el real tiene persistencia en disco y el virtual en me-
moria. Adems, si es virtual no permite actualizar la tabla apuntada, ha de
ser un enlace indirecto real para ello.
Veamos mediante un ejemplo cmo crear un enlace a tabla de datos indirecta.
Ejemplo: creacin de un enlace a tabla de datos indirecta
Con el siguiente ejemplo de gestin veremos cmo se establecen los enla-
ces a tablas de datos indirectas en Velzquez Visual. Para entender este
ejemplo, sepamos que al realizar una venta o una compra, la operacin se
detalla en un albarn. ste consta de una cabeza en la que se indica el
cliente o el proveedor, fecha, nmero del documento, importe total, etc., y
de una serie de lneas de albarn, en cada una de las cuales indicamos el
artculo y la cantidad, precio, descuento, importe, etc., de ste.
En ARTCULOS cada registro hace referencia a un artculo en particular
mientras que ALMACENES lleva recuento de cada uno de nuestros alma-
cenes. Ambas tablas estn enlazadas por un doble plural (los artculos del
almacn, los almacenes del artculo) que resolvemos mediante una tabla de
08
Desarrollo completo
de una aplicacin
e
50 51 VELAZQUEZ VISUAL
tipo histrico, EXISTENCIAS, en la que incluiremos un campo que llevar
las existencias de un artculo en cada almacn.
Cada vez que hacemos una venta en un almacn, sta se ver reflejada en
un albarn, luego en la tabla ALBARANES llevamos recuento de todas las
cabezas de albarn de un almacn en particular. Por lo tanto, ALBARANES
es histrica de ALMACENES.
Cada albarn constar de una serie de lneas en cada una de las cuales in-
dicamos el nmero de artculos vendidos de cada tipo. Estas lneas se
guardan en la tabla LNEAS DE ALBARANES, que lgicamente es histrica
de ALBARANES (las lneas del albarn).
Por otro lado, LNEAS DE ALBARANES tambin es histrica de ARTCU-
LOS, ya que un mismo artculo puede repetirse en varias lneas.
Ahora bien: nuestro objetivo es crear en LINEAS DE ALBARANES un pun-
tero enlazado a la tabla EXISTENCIAS.
En nuestra aplicacin hemos creado una rejilla para cada tabla, formula-
rios de altas, bajas y modificaciones, bsquedas completas para cada ta-
bla y un men, llamado AUTOEXEC, que es el que se presenta al ejecutar
el mapa.
Adems, se han incluido botones para acceder a campos enlazados desde
los formularios de altas y modificaciones de las tablas: EXISTENCIAS, AL-
BARANES y LINEAS DE ALBARAN, as como rejillas de histrico en formu-
larios de modificaciones maestros.
e
La tabla EXISTENCIAS recoger las existencias de cada artculo en cada al-
macn, por ello hemos aadido el campo Stock de tipo numrico, mientras
que al ndice Artculos de la tabla EXISTENCIAS hemos aadido el compo-
nente almacenes y hemos definido como de clave nica. Esto ser necesa-
rio para la resolucin del puntero indirecto desde la tabla LINEAS DE AL-
BARANES.
A la tabla de datos LINEAS DE ALBARANES hemos aadido el campo Can-
tidad (numrico) para anotar las cantidades vendidas de cada artculo.
Lo que se quiere es que, cada vez que se d de alta una nueva lnea de al-
barn, se acumule en negativo el campo Stock de la tabla EXISTENCIAS,
con la Cantidad de unidades anotadas en la tabla LINEAS DE ALBARANES
(es decir, si en una lnea se indica la venta de dos camisetas, las existencias
de camisetas deben reducirse en dos unidades).
Como podemos observar en el esquema de tablas, EXISTENCIAS es una
tabla histrica y no est relacionada con la tabla LINEAS DE ALBARANES,
tenemos que crear un puntero indirecto que enlace las dos tablas. Para ello
08
Desarrollo completo
de una aplicacin
e
52 53 VELAZQUEZ VISUAL
aadimos un campo a la tabla LINEAS DE ALBARAN que llamaremos Pu-
nexist (puntero a EXISTENCIAS). Editamos el cuadro de propiedades del
campo y especificamos que ste debe estar enlazado a tabla de datos in-
directa, siendo EXISTENCIAS el identificador de la tabla enlazada.
Nos aparecer el siguiente mensaje: Los punteros indirectos a tablas de
datos deben ser resueltos. Para resolver el puntero, en el cuadro de pro-
piedades de campo pulsamos el botn Resolucin. Como ndice de la tabla
EXISTENCIAS seleccionamos ARTICULOS (el ndice al que antes aadimos
el artculo del almacn).
Tras seleccionar el ndice aparecern los campos a resolver de la tabla
EXISTENCIAS. Esta resolucin la haremos desde la tabla LINEAS DE AL-
BARANES. Seleccionamos el primero de los campos a resolver (Artculo), y
de la lista de campos que aparece bajo el epgrafe Resolucin desde origen
actual (lneas de albarn) pinchamos en el campo ARTICULO. Con esto le
estamos diciendo que el artculo es el que aparece en el campo Artculo de
la tabla LINEAS DE ALBARANES.
Seleccionamos el segundo campo a resolver (Almacn), y de la lista de
campos de EXISTENCIAS pinchamos en el campo Albarn. Tendremos ac-
ceso de este modo a los campos de la tabla ALBARANES y elegimos el
campo Almacn (hemos seleccionado el almacn del albarn de la lnea).
e
Por ltimo, en el cuadro de propiedades del campo activamos la opcin Dar
alta si no existe, as, si damos de alta un albarn de un almacn que con-
tenga un artculo en las lneas que no estuviese dado de alta en la tabla
EXISTENCIAS, lo crear automticamente.
Ahora ya tenemos creado el enlace con la tabla EXISTENCIAS. ste se vi-
sualiza en el esquema de tablas como una flecha ondulada que
une ambas tablas.
Para crear un puntero indirecto podemos hacer uso del asistente de crea-
cin de campo puntero. Para ello hacemos clic con el botn derecho es-
tando seleccionada la tabla en la que queremos crear el campo. Se pre-
sentar la siguiente ventana con las propiedades del puntero.
08
Desarrollo completo
de una aplicacin
e
54 55 VELAZQUEZ VISUAL
Ya hemos comentado cmo la opcin Dar de alta si no existe permite que,
si el registro con el que se ha de enlazar el registro actual no existe en la
tabla indirecta, sea dado de alta. Si queremos que sea el propio usuario el
que confirme o no el alta del registro en la tabla indirecta, seleccionamos
un formulario de altas en el parmetro Formulario para dar alta. Esta op-
cin no estar disponible para los enlaces virtuales, y no funcionar si al-
guno de los campos a resolver en el ndice tiene valor 0 (por ejemplo, un
campo booleano cuyos valores posibles son 0 o 1); el motivo radica en que
si el campo tiene valor 0, se toma como campo vaco y, por tanto, no es
resuelto.
Si el proyecto va a ser ejecutado con la versin cliente-servidor, no es
posible la especificacin del formulario de altas, el motivo es que este ti-
po de operaciones son realizadas en el Servidor, no en el Cliente, y, si se
tuviese que mostrar el formulario, ste aparecera en el Servidor. Por es-
te motivo, si en un enlace de este tipo se hubiese especificado la peti-
cin de formulario, en tiempo de ejecucin, esta peticin sera obviada
por el Servidor.
8.2.6. Las actualizaciones
Se encargan de modificar el contenido de los campos de un registro de una
tabla enlazada, cada vez que se produce un alta, una baja o una modifica-
cin en la tabla de origen, donde estn definidas. Por ejemplo, desde una
tabla de LINEAS DE ALBARAN (histrico) podemos actualizar el contenido
del campo STOCK de su maestro ARTICULOS.
Se crean pulsando el botn Nueva actualizacin de la barra de he-
rramientas. Al pulsarlo se muestra la ventana Actualizacin desde. En la
lista desplegable Campo enlazado seleccionaremos un campo enlazado
a la tabla de datos donde se quiere actualizar. Una vez seleccionado, en
el control Tabla a actualizar se mostrar el nombre de la tabla de datos
que va a ser actualizada. Si el campo enlazado seleccionado fuese un
campo enlazado a un hermano contiguo, en el control Campo hermano
contrario se mostrar el campo enlace a hermano contrario al seleccio-
nado.
Nueva actualizacin
Los distintos componentes de actualizacin que se vayan creando se mos-
trarn en el control situado bajo la barra de botones de la actualizacin. Las
funciones de estos botones son:
Crear un nuevo componente de actualizacin.
Eliminar el componente de actualizacin seleccionado.
Mover una posicin hacia arriba el componente de actualizacin selec-
cionado.
Mover una posicin hacia abajo el componente de actualizacin selec-
cionado.
Editar el componente de actualizacin seleccionado.
Asimismo, se incluyen botones para cortar, copiar y pegar componentes de
actualizacin.
En el cuadro de dilogo Componente de actualizacin define qu campo
de la tabla de destino ha de ser actualizado, en funcin o no de una con-
dicin, y cmo va a ser actualizado. Simplemente se definir lo que debe
hacerse en caso de alta, ya que el programa automticamente sabe lo
que se debe hacer en una baja o en una modificacin de ficha. El cuadro
aparece cuando pinchamos en el botn insertar de la ventana Actualizar
desde.
08
Desarrollo completo
de una aplicacin
Crear un nuevo componente
Eliminar el componente
Mover una posicin hacia arriba
Mover una posicin hacia abajo
Editar el componente
56 57 VELAZQUEZ VISUAL
Cada componente de actualizacin consta de los parmetros siguientes,
excepto para los enlaces a Hermanos contiguos:
Comentarios: comentario para el diseador.
Frmula condicin para modificar: expresin frmula condicional que
debe cumplirse para realizar la actualizacin. Disponemos del asistente
de frmulas para simplificar el uso de stas.
Campo: campo de la tabla de datos a modificar.
Frmula: expresin frmula de donde se obtiene el contenido a actualizar.
Modo de modificar: se refiere a cmo vamos a actuar sobre el campo a
modificar. Puede ser de uno de los dos modos siguientes:
Acumular: acumula en el campo destino el contenido del cuadro de edi-
cin Frmula, siempre que se cumpla la condicin dada en el cuadro de
edicin Frmula condicin para modificar.
Absoluto: sustituye en el campo destino el contenido del cuadro de edi-
cin Frmula, siempre que se cumpla la condicin dada en el cuadro de
edicin Frmula condicin para modificar.
Las actualizaciones son disparadas cuando se crean, modifican o eliminan
registros. En el caso de modificar o de eliminar registros, Velzquez Visual
deduce el tipo de modificacin que ha de realizar la actualizacin. Por ejem-
plo, se puede declarar una actualizacin en la tabla de lneas de albarn de
venta para que, al crear una lnea de albarn de venta, se descuenten las
unidades vendidas de las existencias del artculo. Al borrar una lnea del al-
barn se actualizar, automticamente, las unidades de la lnea borrada a
las existencias del artculo.
Tambin podemos borrar un registro sin desactualizar (p. e. lneas de alba-
rn con ms de 5 aos), para ello hemos de usar la funcin de Procesos Re-
correr lista eliminando fichas sin desactualizar.
Ejemplo: Creacin de una actualizacin
Continuaremos con el ejemplo anterior, de modo que vamos a actualizar las
existencias de un artculo (campo Stock de EXISTENCIAS) con el conteni-
do del campo Cantidad de las lneas de venta de la tabla LINEAS DE AL-
BARANES. Es decir, si en una lnea de venta se indica que la cantidad ven-
dida de un artculo es de cinco unidades, el stock de ese artculo debe dis-
minuir en cinco unidades. Para ello aprovechamos el puntero que hemos
creado en la tabla LINEAS DE ALBARANES.
Nos situamos en la carpeta Actualizaciones de la tabla LINEAS DE ALBA-
RANES. Con la tecla Insertar nos aparecer la ventana de propiedades de
la actualizacin, en la que seleccionaremos como Campo enlazado el cam-
po Punexist (el campo enlazado a la tabla EXISTENCIAS).
Pulsamos el botn Aadir para crear el componente de actualizacin, mos-
trndose la ventana Componente de actualizacin. En ella especificamos:
Comentarios: Acumula el stock de las existencias, es una explicacin de
la actualizacin.
Frmula condicin para modificar: condicin para que se produzca actuali-
08
Desarrollo completo
de una aplicacin
Tengamos en cuenta la
siguiente nota para la versin
cliente - servidor: no hemos
de incluir en componentes
de actualizacin nada que
implique la intervencin del
usuario, por ejemplo,
visualizar un mensaje,
mostrar un formulario, una
pregunta, peticin de un
dato, etc. El motivo es que
este tipo de operaciones se
llevan a cabo en el Servidor,
por lo que el mensaje o el
formulario no seran
presentados en el Cliente,
sino en el propio Servidor.
Para evitar esto, el mensaje,
formulario, etc. a presentar,
ser obviado por el Servidor.
ADVERTENCIA
e
58 59 VELAZQUEZ VISUAL
zacin. En este caso no habr que especificar condicin para que acumule
el stock, pues ste debe acumularse siempre que entre nueva mercanca.
Campo: Stock (campo de EXISTENCIAS que vamos a modificar).
Modo de modificar: acumular (pues ha de acumular las existencias de cada
artculo en cada almacn en tantas unidades como se especifica en el cam-
po Cantidad de los albaranes).
Frmula: aqu se ha de utilizar el campo de la tabla LINEAS DE ALBARAN que
va a acumular el campo Stock en la tabla EXISTENCIAS. Es el campo Cantidad.
8.2.7. Componente de actualizacin a un hermano
contiguo
Las actualizaciones a hermano contiguo nos permiten ir recorriendo los re-
gistros de una tabla que estn relacionados por un enlace de hermano con-
e
Cuestiones
1. En el ejemplo anterior, qu diferencia hay entre el modo de modifi-
car Acumular y Valor Absoluto?
2. Siguiendo con el ejemplo anterior, cmo haremos para que la ac-
tualizacin del campo Stock tenga lugar slo cuando la cantidad de
la lnea sea superior a cinco unidades?
3. Cmo haramos para pasar de un albarn a otro del mismo distri-
buidor?
tiguo, de modo que podemos obtener un acumulado final con el valor de un
determinado campo de cada registro.
Al crear la actualizacin a un enlace a Hermano contiguo, se activar el
combo box de Campo hermano contrario. En el mismo slo aparecern
campos que haya definido en esta tabla de datos que sean contrarios al
campo enlazado. Por ejemplo, si en una tabla de facturas hemos creado
los campos FACTURA-ANTERIOR y FACTURA-SIGUIENTE, enlazados a
hermano anterior y siguiente, respectivamente, seleccionando como cam-
po enlazado FACTURA-ANTERIOR, slo aparecer en la lista de campos a
actualizar el campo FACTURA-SIGUIENTE. Cuando aadimos un compo-
nente a una actualizacin de este tipo, se presentar el siguiente cuadro de
dilogo:
Los parmetros del cuadro Componente de Actualizacin son:
Campo valor acumulable: campo numrico que contendr el valor a acu-
mular de cada registro (por ejemplo, el importe total de cada una de las
facturas).
Campo a modificar (acumulador): campo en el que se va a acumular el
valor del campo especificado en el parmetro anterior (aqu se ira acu-
mulando el total de cada una de las facturas).
Contenido inicial del acumulador: es un control de solo lectura y muestra
la frmula resultante de la especificacin de los dos campos anteriores.
Comentarios: texto explicativo acerca de lo que realiza la actualizacin.
En el contenido inicial del campo a modificar se crear automticamente la
frmula a ejecutar para llevar a cabo la actualizacin.
08
Desarrollo completo
de una aplicacin
60 61 VELAZQUEZ VISUAL
Este tipo de enlaces, con sus correspondientes actualizaciones, son muy
tiles en programas de contabilidad para llevar en un campo determinado
el arrastrado de los movimientos de una cuenta.
Ejemplo: Actualizacin a hermano contiguo
Tenemos una aplicacin de gestin con dos tablas: CLIENTES y FACTU-
RAS. Buscamos el acumulado total de los importes de las facturas.
En la tabla FACTURAS tenemos los campos Factura-Anterior y Factura-Si-
guiente, que estn enlazados a hermano contiguo y que son los que usare-
mos para realizar la actualizacin. El campo Total guarda el importe de ca-
da factura, mientras que en el campo Total-Ventas acumularemos el total de
cada factura.
Pinchamos en el botn Nueva Actualizacin , apareciendo la ventana Ac-
tualizacin desde: FACTURAS. En ella especificamos que el campo enlaza-
do es Factura-Siguiente y automticamente Velzquez Visual toma Factura-
Anterior como campo hermano contrario.
A continuacin pinchamos en el botn insertar , apareciendo la ventana
Componente de Actualizacin. Como Campo valor acumulable elegimos
Total (es el importe de cada factura), el Campo a modificar (modificador) es
Total-Ventas.
e
Nueva Actualizacin
Insertar
Pulsamos el botn Aceptar y en la ventana Actualizacin desde: FACTURAS
aparecer Total-Ventas como campo a modificar. Pulsamos Aceptar de nue-
vo y ya tenemos terminada la actualizacin a hermano contiguo. sta apa-
recer dentro de la carpeta Actualizaciones de la tabla FACTURAS.
08
Desarrollo completo
de una aplicacin
e
62 63 VELAZQUEZ VISUAL
8.2.8 Enlace a maestro de una tabla contra s misma
En todas las ocasiones en las que hemos hablado del enlace singular-plu-
ral, lo hemos establecido entre dos tablas: una histrica y otra maestra.
Ahora bien, es posible que una misma tabla sea maestra e histrica de s
misma. Vemoslo con un ejemplo:
Supongamos una tabla que se encarga de llevar el registro de socios de una
agrupacin, de modo que para ingresar es necesario que un socio avale al
solicitante. Cuando se acepta al nuevo socio, su ficha llevar el campo So-
cio principal, que apunta al registro del socio que lo avala.
De este modo un registro de la tabla puede ser maestro de una serie de so-
cios a los que ha avalado (sus histricos). ste sera el enlace a histrico. Por
otro lado, cada registro de la tabla apuntar a un nico registro de la misma
tabla (el que lo avala), que ser su maestro. ste es el enlace a maestro.
Ejemplo: Enlace de una tabla contra s misma
A continuacin veremos los pasos a seguir para enlazar la tabla SOCIOS
contra s misma mediante un enlace a maestro.
En la tabla SOCIOS, que ser en la que guardemos el registro de socios,
creamos el campo Socio Principal, declarndolo en sus propiedades como
enlazado a tabla de datos maestra, siendo SOCIOS la tabla enlazada. Este
campo ser el que apunte al registro correspondiente al socio que avala.
e
A continuacin creamos el ndice correspondiente al campo, para ello si-
tuamos el foco sobre el campo Socio Principal y pulsamos el botn Nuevo
ndice del campo .
Ahora nos falta declarar el enlace a histrico en la tabla SOCIOS. Para ello
pulsamos el botn Nuevo enlace histrico , apareciendo la ventana En-
lace a histrico desde SOCIOS. En ella especificamos que la tabla enlaza-
da es SOCIOS, mientras que el ndice es Socio Principal.
Con esto ya tendramos enlazada la tabla SOCIOS contra s misma.
08
Desarrollo completo
de una aplicacin
e
Nuevo ndice del campo
Nuevo enlace histrico
64 65 VELAZQUEZ VISUAL
Resumen
El enlace a hermano contiguo permite acceder a los valores de los registros
anterior y siguiente de una tabla o movernos a esos registros, de modo que
podemos recorrer los registros a travs de un ndice determinado. No slo
podemos indicar los campos por los que queremos establecer el orden de
movimiento, sino que tambin podemos forzar a movernos por registros
que contengan un valor determinado en esos campos.
Mediante el enlace singular de plural por posicin podemos crear un enla-
ce una tabla histrica de la tabla actual y elegir uno de los registros del his-
trico resolvindolo por su posicin.
El enlace singular de plural por ndice permite crear un enlace singular a una
tabla histrica de la actual, capturando uno de los registros del histrico.
Para su resolucin se usa el ndice utilizado en el enlace histrico y slo de-
ben resolverse aquellas partes del ndice que no sean el campo enlazado a
la tabla actual.
Mediante los punteros indirectos podemos enlazar la tabla de datos en cur-
so con otra tabla que no guarda una relacin directa. Existen dos tipos: el
enlace indirecto real (con persistencia en disco) y el virtual (con persistencia
en memoria).
Las actualizaciones modifican el contenido de los campos de un registro de
una tabla enlazada, cada vez que se produce un alta, una baja o una modi-
ficacin en la tabla de origen, donde estn definidas.
Con las actualizaciones a hermano contiguo recorremos los registros de una
tabla que estn relacionados por un enlace de hermano contiguo, obte-
niendo un acumulado final con el valor de un determinado campo de cada
registro hermano.
8.3 Anlisis de la informacin: ejemplos
8.3.1. Un centro de enseanza
Conceptos a tratar
Enlace singular y plural.
Descripcin
Buscamos una aplicacin para un centro de enseanza que se encargue de
gestionar sus alumnos y los cursos que realizan, con la condicin de que
cada alumno slo puede estar matriculado en un curso.
Esquema de la aplicacin
Este ejemplo se resuelve de forma sencilla creando dos tablas: ALUMNOS
y CURSOS, ambas de tipo maestro normal con clave numrica. Ahora bien:
Cmo las enlazamos? Para verlo hemos de enunciar las siguientes frases:
Varios alumnos pueden pertenecer a un curso, Un alumno pertenece a
un nico curso. Est claro que ALUMNOS (plural) va a ser un histrico de
CURSOS (singular), de modo que enlazaremos ambas tablas mediante un
enlace singular - plural.
Al establecer el enlace, Velzquez crea automticamente el campo Cursos
y el ndice Cursos en la tabla ALUMNOS, mientras que en la tabla CURSOS
crea el histrico Alumnos.
8.3.2. Empresa de instalacin de cristalera
8.3.2. para vehculos
Conceptos a tratar
Doble plural
Tablas submaestras
Tablas histricas
Descripcin
Necesitamos una aplicacin de gestin para una empresa que se dedica a
instalar cristales en automviles. Hemos de tener en cuenta los siguientes
puntos:
Un vehculo se identifica por una marca, una serie y un modelo. Por
ejemplo: marca Opel, serie Corsa, modelo 2000.
La empresa dispone de diversos tipos de cristales que son suministra-
dos por distintos fabricantes.
Un determinado tipo de cristal puede ser suministrado por ms de un fa-
bricante.
Un tipo concreto de modelo puede tener varios tipos de cristales.
08
Desarrollo completo
de una aplicacin
66 67 VELAZQUEZ VISUAL
Esquema de la aplicacin
Empezaremos por crear las tablas MARCAS, SERIES y MODELOS, ya que
stas identifican inequvocamente a un vehculo. Est claro que una serie no
puede existir sin una marca, de igual modo que un modelo no puede exis-
tir sin una serie. Es por esto que definimos la tabla MARCAS como maes-
tro normal con clave numrica, SERIES ser submaestra de MARCAS y
MODELOS ser submaestra de SERIES.
Al crear las tablas, Velzquez Visual crea directamente los enlaces entre
ellas por haber definido SERIES y MODELOS como submaestras: SERIES
ser histrica de MARCAS, mientras que MODELOS ser histrica tanto de
SERIES como de MARCAS.
Por otro lado, la empresa dispone de diversos tipos de cristales que son su-
ministrados por diversos fabricantes. Esto justifica la creacin de las tablas
ARTCULOS y FABRICANTES. Ahora bien, cmo las enlazamos? Volva-
mos a enunciar las frases: los artculos del fabricante, los fabricantes del
artculo. En este caso nos encontramos con un plural en los dos sentidos,
lo que nos impide enlazar directamente ambas tablas mediante un enlace
singular - plural.
Para resolver un doble plural creamos una tabla en medio de las otras dos.
En este caso crearemos una tabla de tipo histrico que llamaremos ARTIFAB.
Cada uno de los registros de la tabla ARTIFAB consistir en una pareja Ar-
tculo - Fabricante, de modo que en ella guardamos todos los artculos de
cada fabricante (o de otro modo, todos los fabricantes de cada artculo). En-
tonces, dado un fabricante podemos navegar hacia sus histricos, que son
todos los registros de la tabla ARTIFAB, y una vez cargados stos, obtener
todos sus maestros de la tabla ARTCULOS. De este modo obtenemos to-
dos los artculos del fabricante de partida. De igual modo procederamos
para obtener todos los fabricantes de un artculo.
An nos queda por integrar en el diseo un detalle: en un modelo pueden
instalarse distintos artculos (cristales), y un cristal puede instalarse en dis-
tintos modelos. Nos encontramos de nuevo con doble plural, luego hemos
de enlazar las tablas ARTCULOS y MODELOS mediante una tabla inter-
mediaria de tipo histrico a la que llamaremos ARTIMODEL.
8.3.3. Aplicacin de anlisis para obras literarias
Conceptos a tratar
Doble plural
Descripcin
Supongamos un estudiante que, haciendo un estudio acerca de Lope de
Vega, necesita saber todas las obras en las que aparece un determinado
personaje y todos los personajes que aparecen en una obra determinada.
Este problema es de resolucin inmediata en Velzquez Visual.
Esquema de la aplicacin
Declararemos dos tablas principales: PERSONAJES y OBRAS. Tanto las
obras como los personajes necesitan estar identificados uno a uno de forma
inconfundible, por lo que deben tener una clave de acceso nica, es decir,
deben declararse como tablas de tipo maestro normal con clave numrica.
Ahora bien: cmo las enlazamos? Volvemos a enunciar las dos frases: En
una obra aparecen varios personajes, y en el caso ms general, la segun-
da frase es: Un personaje puede aparecer en varias obras. Es decir, nos
encontramos con un plural en los dos sentidos que resolvemos con una ta-
bla histrica que haga de intermediaria: REPARTOS.
08
Desarrollo completo
de una aplicacin
68 69 VELAZQUEZ VISUAL
Los registros de la tabla REPARTOS consisten en parejas Obra-Personaje,
de manera que asociamos todas las obras con cada uno de sus persona-
jes (o visto de otro modo, todos los personajes con cada una de las obras
en las que aparece). Entonces, si nos situamos en la tabla OBRAS (por
ejemplo), movindonos hacia histrico obtendremos todos los registros
Obra-Personaje en los que la obra es la seleccionada de la tabla OBRAS.
Una vez cargadas todos esas parejas, nos movemos hacia maestro en la di-
reccin de PERSONAJES, de modo que cargamos todos los personajes
que aparecen en la obra. El mismo procedimiento seguiremos para, dado
un personaje, obtener todas las obras en las que aparece.
8.3.4. Una galera de arte
Conceptos a tratar
Enlace singular y plural
Doble plural
Descripcin
El siguiente esquema de tablas gestionar una galera de arte bajo los si-
guientes supuestos:
Un artista de la galera puede tratar distintos temas, mientras que un te-
ma en particular puede ser tratado por distintos artistas. Adems, una
obra de un artista puede ser expuesta en distintas exposiciones, mientras
que varias obras del artista pueden exponerse en la misma exposicin.
Cada artista tiene un representante (contacto), mientras que un repre-
sentante puede trabajar para distintos artistas.
Esquema de la aplicacin
Comenzaremos creando las tablas ARTISTAS, TEMAS y OBRAS y enlazn-
dolas.
Tal y como se expuso el problema, entre TEMAS y ARTISTAS existe un do-
ble plural. Para resolverlo introducimos una tabla intermedia: OBRAS. De
este modo no slo resolvemos el doble plural, sino que aprovechamos pa-
ra guardar en la tabla intermedia las obras de cada artista (claro, una obra
pertenecer a un artista y tratar un tema en particular). En la tabla OBRAS
aadimos los campos Foto, Precio, Ttulo, etc.
Las tres tablas se han definido con el tipo maestro normal con clave num-
rica. En este caso OBRAS tambin ha sido definida as (y no de tipo hist-
rico) ya que nos interesa que cada obra tenga una clave nica e irrepetible.
Creamos ahora la tabla EXPOSICIONES, en la que incluimos los campos
Fecha inicio, Fecha fin, Motivo, etc. Nos encontramos con otro plural en los
dos sentidos entre esta tabla y OBRAS, de modo que hemos de crear otra
tabla intermedia que lo solucione: OBRAS EXPUESTAS.
Por ltimo, aadimos la tabla CONTACTOS, en la que guardaremos los da-
tos de los representantes. Esta tabla es maestra de ARTCULOS.
8.3.5. Gestin de un colegio
Conceptos a tratar
Enlace singular-plural.
Tablas arboladas.
Tablas estticas.
Descripcin
Supongamos que nos piden el diseo de una aplicacin que gestione la or-
ganizacin de un colegio. Dicha aplicacin debe relacionar los aspectos
fundamentales de un colegio: alumnos, profesores, materias, asignaturas,
cursos, secciones, aulas, das lectivos y horarios.
08
Desarrollo completo
de una aplicacin
70 71 VELAZQUEZ VISUAL
Esta aplicacin debe responder, entre otras muchas, a consultas como:
cul es el cuadro semanal de clases de un alumno?, y el de un profe-
sor?, cules son los alumnos de un profesor?, y los profesores de un
alumno?, etc.
Esquema de la aplicacin
Hemos de crear las tablas siguientes: ALUMNOS, PROFESORES, MATE-
RIAS, ASIGNATURAS, CURSOS, SECCIONES y AULAS.
Los registros de las tablas CURSOS, ALUMNOS, MATERIAS, PROFESO-
RES, AULAS y ASIGNATURAS necesitan identificarse uno a uno de for-
ma inconfundible, de modo que las tablas han de definirse como maes-
tras de tipo normal con clave numrica, con la salvedad de la tabla MA-
TERIAS.
MATERIAS podra recoger, por ejemplo, el ciclo educativo, la materia en s
y el curso de imparticin de una asignatura. Para este fin son ideales las ta-
blas arboladas, en las que el campo cdigo se comporta del siguiente mo-
do: el primer dgito del cdigo acta como dgito raz. Cada uno de los va-
lores que recibe el primer dgito abre nuevas ramas del rbol. De igual mo-
do, los nuevos dgitos que aadimos al cdigo abren nuevas subramas del
rbol (por ejemplo, el cdigo PL2 podra indicar: ciclo primario, materia li-
teratura, 2 curso del ciclo).
Puesto que una seccin no puede existir si no es perteneciendo a un cur-
so, declararemos la tabla SECCIONES como submaestra de CURSOS.
An nos falta por introducir en el anlisis los das lectivos y los horarios.
Para ello haremos uso de dos tablas estticas, una en la que guardaremos
los das de la semana (tabla DIAS) y otra en la que cada registro indicar el
horario del colegio (tabla HORARIO) con un formato del tipo 8:15 a 9:00,
9:15 a 10:00, etc. Una vez introducidas las tablas estticas crearemos dos
campos en la tabla ASIGNATURAS, uno llamado Da, enlazado a la tabla
esttica DIAS, y otro al que llamaremos Hora, enlazado a la tabla esttica
HORAS.
8.3.6. Gestin de una librera
Conceptos a tratar
Plural finito
ndice de mltiples claves
Descripcin
Vamos a establecer el esquema de tablas de una aplicacin que gestione
los libros de una librera. Para ello hemos de tener en cuenta los siguientes
puntos:
Un libro puede tener ms de un autor (vamos a poner un lmite de cua-
tro autores).
La bsqueda de libros por autor mostrar todos los libros pertenecientes
a un autor independientemente del orden en el que ste aparezca (es de-
cir, si es el primer autor, el segundo, el tercero o el cuarto).
Esquema de la aplicacin
En primer lugar est claro que hemos de crear dos tablas: AUTORES y LI-
BROS, ambas de tipo maestro normal con clave numrica. Ahora bien:
Cmo las enlazamos? Vamos a enunciar las dos frases habituales: Un au-
tor puede escribir varios libros y un libro puede ser escrito por varios au-
tores. Nos encontramos de nuevo con un doble plural.
Este problema podra ser resuelto creando una tabla histrica intermediaria
entre AUTORES y LIBROS, pero como sabemos que un libro va a tener un
mximo de cuatro autores vamos a usar otra tcnica: el plural finito. Para
ello unimos las dos tablas mediante un enlace singular-plural, de igual mo-
do que haramos si un libro fuera escrito por un solo autor.
Al establecer este enlace Velzquez Visual crea el campo Autores y el ndi-
ce Autores en la tabla LIBROS, mientras que en la tabla AUTORES crea el
histrico Libros.
08
Desarrollo completo
de una aplicacin
72 73 VELAZQUEZ VISUAL
Ahora creamos en la tabla LIBROS tres enlaces ms a la tabla AUTORES,
para lo cual podemos copiar en LIBROS tres veces el campo Autores, mo-
dificando posteriormente sus identificadores y descripciones.
Acabamos de crear un plural finito. Plural ya que la tabla LIBROS est en-
lazada varias veces a la tabla AUTORES, y finito ya que el nmero de enla-
ces est limitado a cuatro.
A continuacin editamos las propiedades del ndice Autores, y en la frmu-
la de partes le aadimos los campos Autor 1, Autor 2, Autor 3, Autor 4, ade-
ms del campo NOMBRE (que en este caso sera el Ttulo del libro). Le po-
nemos al ndice el tipo Mltiples claves y como nmero de claves ponemos
cuatro.
Al poner como cuatro el nmero de claves, solamente buscar por las cua-
tro primeras partes del ndice, es decir, los cuatro autores de cada libro, y
ordenando por la otra parte que queda, el ttulo del libro.
De este modo podemos realizar bsquedas de todos los libros de un de-
terminado autor, independientemente del campo en el que se encuentre,
ahorrndonos el tener que realizar una bsqueda por cada campo autor que
hemos creado. Adems, los ndices de mltiples claves evitan que un autor
sea dado de alta ms de una vez, lo que ocurrira si un mismo autor fuera
dado de alta en un libro como Autor 1 y en otro como Autor 2 y no estuvi-
ramos usando un ndice de mltiples claves.
8.3.7. Aplicacin para turismo rural
Conceptos a tratar
Enlace singular de plural por posicin.
Enlace singular de plural por ndice.
Descripcin
Expondremos un diseo con el que gestionar las actividades de turismo ru-
ral en una regin. Para ello vamos a trabajar al nivel de municipios, reflejn-
dose cmo cada municipio cuenta con una serie de poblaciones.
Cada poblacin nos ofrece una serie de servicios (que sern de distintos ti-
pos), pero cada servicio puede ofrecerse en distintas poblaciones. Adems,
cada servicio puede ser ofertado por distintas entidades, y cada entidad
puede ofertar distintos servicios.
08
Desarrollo completo
de una aplicacin
74 75 VELAZQUEZ VISUAL
Esquema de la aplicacin
Comenzaremos creando dos tablas: MUNICIPIOS y POBLACIONES. Como
una poblacin pertenece siempre a un municipio, es decir, no puede haber
una poblacin que no pertenezca a un municipio, definiremos POBLACIO-
NES como de tipo submaestro, siendo su maestro MUNICIPIOS, que ser
de tipo maestro normal con clave numrica.
El siguiente paso es crear dos nuevas tablas. La primera es TIPOS DE
SERVICIO, arbolada, y cuyos registros podran ser: 1) Turismo activo,
descenso de caones, 2) Turismo activo, escalada, 3) Gastronoma, res-
taurantes, 4) Gastronoma, tradicional, etc. La segunda tabla ser ENTI-
DADES, y en ella guardaremos las empresas o comerciantes que ofer-
tan los distintos tipos de servicio. Por ejemplo: Restaurante Puente Ro-
mano, Casa de Aldea Miravalles, Casa Rural Incs, Turismo Activo Urrie-
llu, etc.
Ahora bien, una entidad puede trabajar en varias poblaciones (un restau-
rante con varios locales, por ejemplo), mientras que en una misma pobla-
cin pueden trabajar distintas entidades (doble plural). Por otro lado, una
entidad puede ofertar distintos tipos de servicios, mientras que un tipo de
servicio puede ser ofertado por distintas entidades (otro doble plural). Ade-
ms una poblacin puede contar con distintos tipos de servicio, mientras
que un tipo de servicio se ofrecer en distintas poblaciones (tercer doble
plural).
Qu hacemos para romper estos tres plurales dobles?: la solucin pa-
sa por crear una tabla histrica intermediaria, a la que llamaremos SER-
VICIOS.
A continuacin vamos a crear un enlace singular de plural por posicin des-
de la tabla MUNICIPIOS contra POBLACIONES con el que podamos atra-
par la ltima poblacin (por cdigo) del municipio. Para ello, en MUNICI-
PIOS creamos el campo Ult-pob. Editamos sus propiedades:
Ahora vamos a crear un enlace singular de plural por ndice desde MUNICI-
PIOS contra POBLACIONES que nos permitir obtener la primera poblacin
del municipio cuyo nmero de habitantes sea menor o igual a 20.000. An-
tes de nada, creamos el campo Habitantes en la tabla POBLACIONES.
08
Desarrollo completo
de una aplicacin
76 77 VELAZQUEZ VISUAL
Creamos un nuevo ndice en POBLACIONES: Municipios, en el que inclui-
mos el campo enlazado a tabla de datos maestra, Municipios, y el campo
Habitantes. Le asignamos el tipo Clave nica ya que al final este ndice va a
apuntar a un solo registro de la tabla, lo que es necesario para el enlace sin-
gular de plural, pero para asegurarnos que sea as incluimos el Cdigo, ya
que puede darse la posibilidad de que haya dos registros con el mismo
nombre e igual nmero de habitantes.
Ahora, en la tabla MUNICIPIOS creamos un nuevo histrico contra la tabla
POBLACIONES con el ndice recin creado.
Una vez hecho esto, creamos un campo en la tabla MUNICIPIOS: Pob-lim,
enlazado con enlace singular de plural por ndice. Le asignamos el histri-
co recin creado y resolvemos el enlace.
Hecho esto ya tenemos montado el diseo por el cual Velzquez nos da la pri-
mera poblacin con nmero de habitantes menor o igual a 20.000. Hemos te-
nido que resolver tambin el Cdigo, pero en realidad con nmero muy alto
(suponemos que un municipio no va a tener casi cien millones de poblaciones).
08
Desarrollo completo
de una aplicacin
78 79 VELAZQUEZ VISUAL
8.3.8. Gestin de un quiosco
Conceptos a tratar
Actualizaciones.
Descripcin
En nuestro quiosco vendemos una serie de artculos, de modo que cada ar-
tculo pertenece a una sola marca, mientras que a cada marca pertenecen
distintos artculos. Adems, cada artculo nos lo surte un solo proveedor,
mientras que cada proveedor nos surte de ms de un artculo. Por otro la-
do, cada marca es surtida por varios proveedores, mientras que cada pro-
veedor nos surte varias marcas.
Para cada artculo especificaremos cul es su IVA entre dos valores posi-
bles que hay para este impuesto y qu cantidad tenemos de cada artculo.
Tambin queremos llevar recuento de los tickets de venta, cada uno con
sus correspondientes lneas de venta, de modo que en cada lnea del ticket
indicaremos el artculo al que se refiere, la cantidad de artculos vendidos,
el importe total con IVA y el importe total sin IVA.
Queremos que el stock (existencia) de un artculo se actualice con la canti-
dad vendida, que aparece en la lnea. Es decir, si una lnea refleja la venta
de tres artculos, el stock del artculo debe disminuir en tres unidades.
Tambin queremos el valor acumulado de los importes sin IVA de las lneas
con IVA 1 de un ticket, as como el valor acumulado de los importes sin IVA
de las lneas con IVA 2 del mismo ticket (IVA 1 e IVA 2 son los dos posibles
valores para el IVA).
Otra cosa que nos interesa es saber el nmero total de lneas que hay en un
ticket. Tambin necesitamos obtener la suma de los importes con IVA de to-
das las lneas de un ticket.
Esquema de la aplicacin
Para resolver la primera parte de la aplicacin vamos a crear las tablas
ARTCULOS, PROVEEDORES y MARCAS, las tres de tipo maestro normal
con clave numrica. Ahora bien: cmo las enlazamos? Sabemos que ca-
da artculo pertenece a una sola marca, mientras que a cada marca perte-
necen distintos artculos, luego ARTCULOS es histrico de MARCAS. De
igual modo, cada artculo nos lo surte un solo proveedor, mientras que ca-
da proveedor nos surte de varios artculos, luego ARTCULOS tambin es
histrico de PROVEEDORES.
Por otro lado, un proveedor nos surte de distintas marcas y una marca es
surtida por distintos proveedores, de modo que hay un doble plural entre
MARCAS y PROVEEDORES, que resolveremos mediante una tabla de tipo
histrico que haga de intermediaria: DISTRIBUCIONES.
Esta primera parte del diseo quedar del siguiente modo:
En la tabla ARTCULOS hemos de aadir el campo Stock para llevar las
existencias de cada artculo. Tambin incluimos el campo IVA, cuyo conte-
nido se lo pasamos a travs de una variable que alimentamos al dar de al-
ta cada artculo. Otros dos campos ms a incluir son PVSI (precio de venta
sin IVA) y PVP (precio de venta al pblico, con IVA). El campo PVSI se cal-
cula a partir de PVP y de IVA.
Aadiremos a continuacin las tablas que faltan, referidas a los tickets y a
sus lneas. stas van a ser dos: TICKETS, que viene a ser la cabecera del
ticket y que contiene datos generales como la fecha o el total, y LNEAS DE
TICKET, en la que cada registro hace referencia a una lnea de venta de un
ticket. Cada ticket contiene varias lneas, mientras que cada lnea pertene-
ce a un solo ticket, de modo que LNEAS DE TICKET es histrico de TIC-
KETS. Por otro lado, en cada lnea de ticket aparece un solo artculo, mien-
tras que cada artculo puede aparecer en muchas lneas de ticket, luego LI-
NEAS DE TICKET es histrico de ARTICULOS.
08
Desarrollo completo
de una aplicacin
80 81 VELAZQUEZ VISUAL
Adems, como cada lnea de ticket pertenece exclusivamente a un ticket,
creamos la tabla LNEAS DE TICKET de tipo submaestro, siendo su padre
TICKETS, la cual es maestro normal con clave numrica.
En la tabla LINEAS DE TICKETS incluimos los siguientes campos:
El campo IVA tiene como contenido inicial el valor del IVA del artculo que
aparece en la lnea: %ARTICULO.IVA%, lo mismo para el campo PVP con
el valor del PVP del artculo. El campo PVSI se calcula para cada lnea a par-
tir de los valores de los campos IVA y PVP de la lnea.
Los campos Importe con IVA e Importe sin IVA se calculan multiplicando
PVP*Cantidad y PVSI*Cantidad, respectivamente, donde Cantidad guarda
el nmero total de artculos vendidos que aparece en la lnea.
Veamos ahora los campos que hemos incluido en la tabla TICKETS:
IVA1 es un campo al que pasamos como valor inicial el contenido de la va-
riable $IVA1$ (recordar que los artculos admiten dos posibles valores para
el IVA, de modo que al dar de alta un artculo elegiremos entre uno u otro.
Si elegimos el primer valor, ste se guarda en la variable $IVA1$, si selec-
cionamos el segundo se guarda en $IVA2$), lo mismo ocurre para IVA2 e
$IVA2$. BASE1 es un campo cuya finalidad es la de acumular el Importe sin
IVA de todas las lneas de un ticket cuyo artculo tenga IVA1, mientras que
en BASE2 acumularemos el Importe sin IVA de todas las lneas de un ticket
cuyo IVA sea IVA2.
En el campo Total sumaremos el valor del campo Importe con IVA de todas
las lneas de un ticket, mientras que en el campo Lneas guardaremos el n-
mero total de lneas que componen un ticket.
Estas modificaciones en los campos de las tablas ARTCULOS y TICKETS
08
Desarrollo completo
de una aplicacin
82 83 VELAZQUEZ VISUAL
que han de hacerse en funcin del contenido de los campos de la tabla LI-
NEAS DE TICKETS las realizaremos mediante actualizaciones.
La primera actualizacin es la del campo Stock de la tabla ARTICULOS. Pa-
ra ello abrimos la carpeta Actualizaciones de la tabla LINEAS DE TICKETS
y aadimos una actualizacin. El campo enlazado es Artculos, el campo a
modificar es el Stock de la tabla ARTCULOS. Modificamos acumulando, y
la frmula es -%CANTIDAD%. De este modo restamos al contenido del
campo Stock el valor del campo Cantidad de la lnea, es decir, restamos el
nmero de artculos vendidos.
Nos quedan cuatro actualizaciones. Como las cuatro van contra la tabla
TICKETS, el campo enlazado es Tickets. En la primera acumulamos el valor
del campo Importe sin IVA de la tabla LINEAS DE TICKETS en el campo Ba-
se1 de la tabla TICKETS, con la condicin de que el IVA del artculo de la l-
nea sea igual al contenido del campo IVA1 de la tabla TICKETS.
La segunda actualizacin a TICKETS:
08
Desarrollo completo
de una aplicacin
84 85 VELAZQUEZ VISUAL
La tercera actualizacin a TICKETS consiste en acumular el contenido del
campo Importe con IVA de todas las lneas de la tabla LINEAS DE TICKETS
en el campo Total de la tabla TICKETS.
La ltima actualizacin consiste en acumular el valor 1 en el campo Lneas
de la tabla TICKETS, de modo que por cada lnea de la tabla LINEAS DE
TICKETS se ir sumando una unidad, resultando al final el nmero total de
lneas que hay en un ticket.
08
Desarrollo completo
de una aplicacin
86 87 VELAZQUEZ VISUAL
Con esto terminamos el diseo de la aplicacin para gestin de un quiosco.
8.3.9. Pedidos de compras
Conceptos a tratar
Punteros indirectos.
Actualizaciones.
Descripcin
Supongamos que un comerciante necesita una aplicacin para gestionar
sus pedidos a determinados proveedores bajo los siguientes supuestos:
Cada artculo que compra va a pertenecer a una sola marca y a una mar-
ca pertenecern distintos artculos. Adems cada proveedor va a surtir
al comerciante de distintos artculos, mientras que un mismo artculo lo
pueden surtir distintos proveedores.
Los pedidos que realiza el comerciante se reflejan en las lneas de pedi-
dos, de modo que en cada lnea va a aparecer un solo artculo, pero los
artculos pueden repetirse en distintas lneas. Una lnea de pedido va a
pertenecer inequvocamente a una cabecera de pedidos.
El punto fuerte es el siguiente: si el comerciante compra a un proveedor un
artculo que no le ha pedido antes, Velzquez crear directamente la pare-
ja artculo-proveedor junto con el descuento correspondiente que el pro-
veedor hace al comerciante para ese artculo. Posteriormente, si en una l-
nea de pedido indicamos la misma pareja artculo-proveedor pero con dis-
tinto descuento, Velzquez cambiar en los posteriores pedidos en los que
se repita la pareja el valor del descuento por el indicado la ltima vez.
Esquema de la aplicacin
En principio necesitamos el siguiente esquema:
En la tabla DISTRIBUCIONES aadimos el campo Descuento, encargado
de guardar el descuento que un proveedor hace al comerciante para un ar-
tculo determinado.
En ARTCULOS aadimos el campo Precio del artculo, mientras que en LI-
NEAS DE PEDIDOS aadimos los campos Descuento, Cantidad e Importe,
este ltimo es un campo frmula que se calcula aplicando la expresin:
(%CANTIDAD%*%ARTICULOS.PRECIO%)-fPorcentaje(%ARTICULOS.PRE-
CIO%*%CANTIDAD%, %DESCUENTO% ).
Esta frmula podemos simplificarla usando la funcin fNeto(), quedando de
la siguiente manera:
fNeto( %CANTIDAD% * %ARTICULOS.PRECIO% , %DESCUENTO%)
08
Desarrollo completo
de una aplicacin
88 89 VELAZQUEZ VISUAL
Otro campo a aadir en LINEAS DE PEDIDOS es el campo Pun-dist (pun-
tero a distribuciones), enlazado a tabla de datos indirecta a la tabla DISTRI-
BUCIONES. Lo resolvemos como se indica:
Para resolver el puntero hemos aadido al ndice Marcas de la tabla DIS-
TRIBUCIONES el campo Proveedores.
Hecho esto aparecer el puntero que enlaza la tabla LINEAS DE PEDIDOS
con DISTRIBUCIONES. Ahora bien, una vez creado el puntero hemos de
ponerle como contenido inicial al campo Descuento de la tabla LINEAS DE
PEDIDOS el valor del Descuento de la tabla DISTRIBUCIONES (es decir,
%PUN-DIST.DESCUENTO%).
Ahora vamos a realizar la actualizacin desde LINEAS DE PEDIDOS contra
DISTRIBUCIONES:
08
Desarrollo completo
de una aplicacin
90 91 VELAZQUEZ VISUAL
Toda esta estructura que hemos diseado funciona del siguiente modo: su-
pongamos que en una lnea de pedido aparece una pareja artculo-provee-
dor nueva (en ella el comerciante tambin indica el valor del descuento que
le hace el proveedor para ese artculo). En las propiedades del puntero he-
mos marcado la casilla de verificacin Dar alta si no existe, por lo cual se
dar de alta la nueva pareja artculo-proveedor en la tabla DISTRIBUCIO-
NES. Adems, en la lnea de pedido el comerciante introduce un valor para
el descuento. Fijmonos en la condicin para que se produzca la actualiza-
cin: el valor del descuento de la lnea debe ser distinto al del descuento de
la tabla DISTRIBUCIONES. Como el campo descuento de la tabla DISTRI-
BUCIONES est vaco ya que se est creando la pareja, la condicin se
cumple, lo que provoca la actualizacin. Es decir, Velzquez asigna al cam-
po Descuento de la tabla DISTRIBUCIONES el valor del descuento que se
ha puesto en la lnea.
En posteriores pedidos del mismo artculo que el comerciante haga al pro-
veedor, Velzquez tomar por defecto el descuento que haya indicado por
primera vez, a no ser que indique otro descuento distinto. Esto es as ya que
el contenido inicial del campo Descuento de la tabla LINEAS DE PEDIDOS
es el valor del Descuento de la tabla DISTRIBUCIONES.
Si posteriormente el comerciante vuelve a pedir el mismo artculo al mismo
proveedor pero indicando un descuento distinto, la condicin se vuelve a
cumplir, volviendo Velzquez a actualizar el contenido del campo Descuen-
to de la tabla DISTRIBUCIONES con el valor que el comerciante ha indica-
do en la lnea. Ojo, esto es peligroso ya que pudiera ser que el proveedor
hiciera este descuento distinto slo en este pedido (por la razn que fuera)
y que para pedidos posteriores el descuento fuera el que haba antes. Para
solucionar esto podramos avisar de que el descuento va a ser actualizado,
teniendo que aceptar el comerciante para que se modifique el descuento de
la tabla DISTRIBUCIONES.
El diseo para un mdulo de ventas es idntico al de un mdulo de com-
pras, slo hemos de renombrar las tablas PROVEEDORES por CLIENTES y
DISTRIBUCIONES por DESCUENTOS. En este caso LNEAS DE PEDIDOS
se refiere a pedidos que un cliente nos hace a nosotros, mientras que en
DESCUENTOS guardamos el descuento que aplicamos a un cliente cuan-
do nos compra un artculo determinado.
El esquema del mdulo de ventas:
8.3.10. Aplicacin para control de existencias
8.3.10. en almacenes (caso de compras)
Conceptos a tratar
Punteros indirectos.
Actualizaciones.
Enlace a hermano contiguo.
Descripcin
El diseo que se presenta a continuacin gestiona las existencias de artcu-
los que un comerciante tiene en sus almacenes, de modo que las existen-
cias se actualizarn segn el comerciante realiza pedidos a sus proveedores.
Supondremos que el comerciante tiene varios almacenes, de modo que en
cada almacn se guardan distintos artculos, a la vez, un mismo (tipo de) ar-
tculo puede encontrarse en distintos almacenes.
Cada albarn de compra del comerciante consta de una cabeza y una se-
rie de lneas, adems cada albarn se refiere a un solo almacn, pero a un
mismo almacn se referirn muchos albaranes.
Como en los casos anteriores, en cada lnea de albarn aparece un solo ar-
tculo, pero cada artculo puede aparecer en muchas lneas.
Adems, cada albarn se refiere a un solo proveedor, mientras que a cada
proveedor pueden hacer referencia muchos albaranes.
Esquema de la aplicacin
Siguiendo los puntos expuestos, un diseo vlido es:
08
Desarrollo completo
de una aplicacin
92 93 VELAZQUEZ VISUAL
La tabla EXISTENCIAS se encarga de resolver el doble plural entre ARTCU-
LOS y ALMACENES. En EXISTENCIAS aadimos el campo Stock, que se-
r el que guarde las existencias que el comerciante tiene de un artculo en
un almacn.
ALBARANES es histrica tanto de ALMACENES como de PROVEEDORES,
mientras que LINEAS DE ALBARAN es histrica de ALBARANES y de AR-
TICULOS.
En la tabla LINEAS DE ALBARN hemos de aadir dos campos: el primero
es Cantidad, que guardar cuntos artculos se piden en cada lnea. El otro
campo es Punexist, puntero a la tabla EXISTENCIAS con el que actualiza-
remos el campo Stock.
Para resolver el puntero hemos aadido al ndice Artculos de la tabla EXIS-
TENCIAS el campo Almacn.
08
Desarrollo completo
de una aplicacin
94 95 VELAZQUEZ VISUAL
Ahora tenemos que realizar la actualizacin desde LINEAS DE ALBARANES
contra la tabla EXISTENCIAS, de modo que el contenido del campo Stock
de la tabla EXISTENCIAS cambie segn el contenido del campo Cantidad
de las lneas de albarn (por ejemplo, si en una lnea de albarn de un al-
macn se indica la compra de tres camisetas, el stock de camisetas en ese
almacn debe aumentar en tres unidades). La actualizacin:
En la actualizacin el campo enlazado es el que apunta a la tabla EXIS-
TENCIAS: Punexist. El campo a modificar es Stock, en el que acumulare-
mos el campo Cantidad de la tabla LINEAS DE ALBARANES.
Vamos a darle al diseo una funcionalidad ms: el comerciante ser capaz
de recorrer todos los albaranes de un proveedor determinado, ordenados
por fecha. Para ello vamos a crear un ndice en la tabla ALBARANES al que
llamaremos Hermano. Editamos sus propiedades:
Al ndice le hemos metido los campos Proveedores y Fecha, y lo hemos
declarado del tipo Acepta repetidas para contemplar la posibilidad de que
existan varios albaranes correspondientes al mismo proveedor con igual
fecha.
Ahora creamos dos campos en la tabla ALBARANES: Anterior y Siguiente.
Editamos las propiedades del campo Anterior.
08
Desarrollo completo
de una aplicacin
96 97 VELAZQUEZ VISUAL
Al campo Anterior lo hemos declarado como enlazado a Hermano contiguo,
para su resolucin le decimos que el ndice por el que se tiene que mover
es Hermano, el N de partes comunes es 1, es decir, al pasar de un albarn
a otro debe fijar el proveedor. La Direccin es Anterior.
Para el campo Siguiente hacemos lo mismo, con la salvedad de que la Di-
reccin es Siguiente.
Ahora el diseo cuenta con todo lo necesario para que el comerciante pue-
da moverse por los albaranes de un proveedor determinado.
8.3.11. Tienda de discos
Conceptos a tratar
Enlace singular y plural.
Tablas arboladas.
Tablas submaestras.
Descripcin
Vamos a desarrollar un esquema de tablas que pueda organizar el material
de una tienda de discos. Para ello establecemos las siguientes bases:
Un disco va a tener un nico autor (sea solista, banda, orquesta...), mien-
tras que un autor podr serlo de varios discos. De igual modo, un disco
habr sido editado por una sola discogrfica, mientras que una disco-
grfica editar varios discos.
Por otro lado, un disco se incluir en un solo gnero musical, mientras
que en un mismo gnero podrn incluirse varios discos.
Por ltimo, un disco contendr varias canciones, mientras que una can-
cin pertenecer a un disco en exclusiva.
Esquema de la aplicacin
Comenzaremos creando la tabla DISCOS, de tipo maestro normal con cla-
ve numrica. En ella incluimos los campos Ao, Descripcin, Portada, etc.
Ahora bien, en base a lo expuesto anteriormente, necesitamos las tablas si-
guientes: CANTANTES, DISCOGRFICAS, GNEROS y CANCIONES.
Nos conviene definir la tabla GNEROS de tipo arbolado debido a la es-
tructura de sus registros (solistas espaoles de los 80, solistas espaoles
de los 90, solistas franceses de los 80, solistas franceses de los 90, etc.),
mientras que las tablas CANTANTES y DISCOGRFICAS sern maestras
normales con clave numrica.
CANTANTES, DISCOGRFICAS y GNEROS son maestros de DISCOS.
Por ltimo, como una cancin pertenece exclusivamente a un disco, es
conveniente declarar la tabla CANCIONES de tipo submaestro, siendo DIS-
COS su padre.
08
Desarrollo completo
de una aplicacin
98 99 VELAZQUEZ VISUAL
8.3.12. Hotel
Conceptos a tratar
Creacin de punteros indirectos.
Enlace singular de plural por posicin.
Descripcin
A continuacin expondremos un diseo que podra gestionar el funciona-
miento de un hotel bajo los siguientes supuestos:
Cada vez que un cliente va a un hotel realiza una reserva, de modo que un
cliente puede realizar varias reservas pero cada reserva es de un solo
cliente. En la reserva se apunta una sola habitacin: la que va a usar el
cliente, pero una misma habitacin puede aparecer en diferentes reservas.
Por otro lado, en la reserva tambin se apuntan los tipos de servicio que
solicita el cliente, de modo que en una reserva se pueden apuntar dis-
tintos tipos de servicio, mientras que un mismo tipo de servicio puede
aparecer en distintas reservas.
Al cliente se le pueden presentar varias facturas, pero cada factura per-
tenecer a un solo cliente. Por su parte, cada factura contendr una se-
rie de lneas, perteneciendo cada lnea a una sola factura.
En cada lnea aparecer un solo tipo de servicio, mientras que un mismo
tipo de servicio podr aparecer en distintas lneas.
Esquema de la aplicacin
Comenzaremos creando la tabla RESERVAS, de tipo maestro normal con
clave numrica. En ella creamos los campos Fecha de entrada, Fecha de
salida, etc.
Creamos ahora dos tablas: CLIENTES, tambin maestra normal con clave
numrica, y HABITACIONES, de tipo arbolado. La declaramos arbolada por
la forma habitual de referirse a las habitaciones en un hotel (habitacin 441,
442, 451, 452...).
Tanto CLIENTES como HABITACIONES son maestras de RESERVAS.
Creamos a continuacin la tabla TIPOS DE SERVICIOS, la cual mantiene un
doble plural con RESERVAS, de modo que hemos de crear una tabla de ti-
po histrico, SERVICIOS, que haga de intermediaria.
En la tabla SERVICIOS incluimos los campos Fecha, Hora, Duracin, etc.,
todos ellos refirindose al servicio prestado.
Ahora creamos las tablas FACTURAS, de tipo maestro normal con clave nu-
mrica, histrica de RESERVAS y de CLIENTES, y LINEAS, de tipo sub-
maestro con padre FACTURAS (ya que cada lnea pertenece exclusivamen-
te a una FACTURA). LINEAS es histrica de FACTURAS y de TIPOS DE
08
Desarrollo completo
de una aplicacin
100 101 VELAZQUEZ VISUAL
SERVICIOS, de modo que el primer enlace lo crea Velzquez por defecto,
pero el segundo hemos de crearlo nosotros. En la tabla LINEAS incluimos
el campo Importe.
Ahora vamos a crear el campo Pun-serv en la tabla LINEAS, que ser un
puntero a la tabla SERVICIOS. La idea es la siguiente: cada vez que se rea-
liza un servicio, su duracin se refleja en el campo Duracin de la tabla SER-
VICIOS, de modo que mediante el puntero vamos a atrapar el contenido de
ese campo, usndolo para calcular el campo Importe de cada lnea (ser un
campo frmula). Para resolver el puntero hemos aadido el campo Tipos de
servicios al ndice Reservas de la tabla SERVICIOS, declarando el ndice co-
mo de clave nica. La creacin del puntero:
Ahora crearemos en la tabla HABITACIONES el campo Ult-res, que enlaza-
remos con un plural de singular por posicin contra la tabla RESERVAS, de
modo que en l se guardar la ficha correspondiente a la ltima reserva de
la habitacin.
08
Desarrollo completo
de una aplicacin
102 103 VELAZQUEZ VISUAL
Ahora vamos a aadir al ndice Habitaciones de la tabla RESERVAS el cam-
po Fecha de entrada. Una vez hecho esto, creamos el campo Sig-Res en la
tabla RESERVAS. Lo declaramos enlazado a hermano contiguo, de modo
que lo resolvemos con el ndice Habitacin, indicando partes comunes 1 y
Direccin Siguiente.
De este modo, al movernos por el campo Sig-res, mantenemos fijo el con-
tenido del campo Habitacin, movindonos por la Fecha de entrada.
Igualmente podemos crear otro campo, Ant-res, por el que movernos a la
anterior reserva de una habitacin.
08
Desarrollo completo
de una aplicacin
104 105 VELAZQUEZ VISUAL
8.3.13. Base de datos de cine
Conceptos a tratar
Plural finito.
Enlace singular de plural por posicin.
Actualizaciones.
Creacin de histricos.
Descripcin
Con esta aplicacin vamos a gestionar una base de datos de cine. Para su
diseo hemos establecido los puntos siguientes:
Una persona puede participar en muchas pelculas, mientras que en una
pelcula, una persona slo participar una vez ejerciendo la misma fun-
cin (sea actor, director, guionista, etc.). Lo anterior no excluye que en
una misma pelcula una persona realice dos trabajos distintos (por ejem-
plo, guionista y actor). Adems, en una pelcula puede haber varios di-
rectores, varios guionistas, varios actores, etc.
Una persona puede recibir varios premios por haber participado en una
pelcula, mientras que un mismo premio puede otorgarse a distintas per-
sonas. Anlogamente, una pelcula puede recibir distintos premios,
mientras que un mismo premio puede otorgarse a distintas pelculas.
Una pelcula puede incluirse en varios gneros, mientras que a un mis-
mo gnero pertenecen distintas pelculas. Lo mismo ocurre con las pro-
ductoras: una pelcula puede ser una colaboracin entre distintas pro-
ductoras, mientras que a una productora pertenecen distintas pelculas.
Una pelcula puede ser estrenada en varios pases, mientras que en un
pas pueden estrenarse muchas pelculas.
Esquema de la aplicacin
Comenzaremos creando la tabla central de la aplicacin: PELICULAS, que
declararemos de tipo maestro normal con clave numrica. En ella incluimos
los campos Ttulo original, Duracin, Ao, Sntesis, Foto, scars, etc.
A continuacin crearemos la tabla PERSONAS, de tipo maestro normal con
clave numrica. En ella incluiremos los campos Nombre real, Sexo, Foto,
scars, etc.
En cada registro de la tabla PELICULAS vamos a guardar los actores de la
misma. Como stos son un nmero limitado, usaremos la tcnica del plural
finito. Para ello en PELICULAS creamos el campo Actor1, declarndolo en-
lazado a la tabla de datos maestra PERSONAS. Copiamos y pegamos este
campo tantas veces como actores queramos incluir. Despus creamos el
ndice Actores, lo declaramos de mltiples claves y lo componemos con to-
dos los campos Actor que acabamos de crear, aadiendo el campo Ao pa-
ra que cuando busquemos todas las pelculas de un actor Velzquez nos las
ordene por el ao de la pelcula.
Ahora nos vamos a la tabla PERSONAS, en la que declaramos un histrico
contra PELICULAS usando el ndice Actores.
08
Desarrollo completo
de una aplicacin
106 107 VELAZQUEZ VISUAL
De igual modo que con los actores, una pelcula puede tener ms de un di-
rector y ms de un guionista. Para solucionar este problema repetimos la
tcnica del plural finito, creando varios campos Director y varios campos
Guionista en la tabla PELICULAS, incluyndolos en su correspondiente n-
dice de clave mltiple y declarando los histricos correspondientes en la ta-
bla PERSONAS.
Hasta el momento, nuestra aplicacin tiene el siguiente esquema:
Hasta el momento hemos declarado tres histricos en PERSONAS contra
PELICULAS, en virtud de los cuales obtenemos todas las pelculas en las
que una persona ha trabajado como director, todas en las que su trabajo fue
de actor y todas en las que fue guionista. Pero nos interesara conocer to-
das las pelculas en las que una persona trabaj, independientemente de lo
que hiciera. Para ello declaramos, en la tabla PELICULAS, el ndice Perso-
na-Ao, declarndolo de mltiples claves y componindolo por todos los
campos Actor, Director y Guionista, adems del Ao. A continuacin de-
claramos en PERSONAS un histrico contra PELICULAS mediante el ndi-
ce Persona-Ao.
Ahora creamos dos campos en PERSONAS: Pelcula-primera y Pelcula-l-
tima, los dos enlazados mediante plural de singular por posicin usando el
histrico recin creado (Pelculas/Persona-Ao). Para el primero introduci-
mos como frmula 1, para el segundo n. Mediante estos campos podremos
atrapar las pelculas primera y ltima en las que haya participado la perso-
na, independientemente de su trabajo.
Vamos a ir un poco ms lejos. Para ello aadimos en la tabla PERSONAS
los campos Pelis-actor, Pelis-guionista y Pelis-director. Sern de tipo nu-
mrico y su cometido va a ser el de guardar el nmero de pelculas en las
que una persona ha participado como director, actor o guionista.
Se alimentarn gracias a actualizaciones declaradas en PELICULAS, de
modo que creamos una actualizacin para cada campo Actor, Director y
Guionista de PELICULAS. El funcionamiento es el siguiente: cada vez que
una persona aparece en algunos de los campos Actor, Director o Guionista
de una pelcula, la actualizacin correspondiente sumar una unidad al
campo Pelis-actor, Pelis-guionista o Pelis-director, segn corresponda (o a
ms de uno, si la persona realiza ms de un trabajo).
Por ejemplo, la actualizacin correspondiente al campo Actor 1 sera:
08
Desarrollo completo
de una aplicacin
108 109 VELAZQUEZ VISUAL
Para agilizar las bsquedas y reflejar los trabajos que ha desarrollado una
persona creamos los campos Director, Guionista y Actor, los tres de tipo
booleano, y los ndices por nombre correspondientes asociados al boolea-
no. Es decir, creamos un ndice para cada uno por nombre y en el Campo
condicin para indexar usamos Director, Actor o Guionista, respectivamen-
te, y marcamos Estado del campo para indexar, para que indexe aquellos
cuyo booleano respectivo est a uno. Esto nos servir para cargar listas o
realizar bsquedas de directores, actores o guionistas. Para que estos cam-
pos se pongan a uno, por ejemplo el campo Actor, usamos los campos que
acabamos de crear, Pelis-Actor, por ejemplo. Cuando este campo sea ma-
yor que 0, entonces el booleano se pondr a uno, condicin que ponemos
como contenido inicial del booleano: %PELIS-ACTOR%>0.
Vamos a aadir otras dos tablas al diseo: MATERIAS, que declararemos de
tipo arbolado (los gneros de las pelculas se adaptan a una estructura ar-
bolada) y PRODUCTORAS, de tipo maestro normal con clave numrica.
Vamos a contemplar el caso de que una pelcula pueda pertenecer a ms
de un gnero y a ms de una productora. De nuevo aparece un plural en los
dos sentidos que resolveremos con la tcnica del plural finito. Enlazamos
las tablas PRODUCTORAS y PELICULAS mediante un enlace singular-plu-
ral (PELICULAS haciendo de histrico). Hecho esto copiamos y pegamos el
campo Productora de la tabla PELICULAS, apareciendo Productora2, y
componemos con estos dos campos el ndice Productoras, declarndolo
de mltiples claves (hemos contemplado el caso de que hubiera slo dos
productoras). Con la tabla PELICULAS actuaremos de modo idntico.
08
Desarrollo completo
de una aplicacin
110 111 VELAZQUEZ VISUAL
Creamos ahora la tabla PAISES, que declararemos maestro normal con cla-
ve numrica. Cmo la encajamos en el esquema? Veamos: una pelcula
puede estrenarse en mucho pases, mientras que en un pas se estrenan
muchas pelculas. Este doble plural lo resolvemos intercalando una tabla de
tipo histrico que llamaremos TITULOS, pues aprovecharemos para guar-
dar en ella el ttulo de cada pelcula en el idioma de cada pas.
Tambin aprovecharemos la tabla PAISES para capturar desde PELICU-
LAS los pases participantes en la cinta. Aqu surge de nuevo un plural en
los dos sentidos que solucionaremos mediante la tcnica del plural finito,
ya que el nmero de pases coproductores no va a ser grande. Para ello
enlazamos las tablas PAISES y PELICULAS con un enlace singular-plural,
a continuacin copiamos y pegamos el campo Pas que se ha creado en
PELICULAS al enlazar, apareciendo Pas2, y aadimos estos dos campos
y el campo Ao en el ndice Pases de PELICULAS, que declararemos de
mltiples claves.
Slo nos queda por aadir una tabla: PREMIOS. La manera usual de es-
tructurar los premios justifica que la definamos de tipo arbolado (Goya al
mejor actor, Goya a la mejor actriz, Goya al mejor actor secundario, Goya a
la mejor actriz secundaria, etc.).
En base a lo expuesto en el apartado Descripcin, PREMIOS mantiene una
relacin de doble plural con PELICULAS y PERSONAS, lo que justifica la in-
troduccin de una tabla intermedia de tipo histrico, PREMIADAS, que re-
suelva el problema. En PREMIADAS creamos el campo Ao.
Desde PREMIADAS vamos a actualizar el contenido de los campos scars
de las tablas PERSONAS y PELICULAS. La actualizacin para PELICULAS
es:
Con esta actualizacin sumamos una unidad al campo scars de PELICU-
LAS, siempre que el premio otorgado a la pelcula sea un scar. Esto se
comprueba en la Frmula condicin para modificar, en la que se verifica que
la primera parte del cdigo del premio sea 1, que precisamente es el co-
08
Desarrollo completo
de una aplicacin
112 113 VELAZQUEZ VISUAL
rrespondiente a los scars (si la condicin no se cumple, no se realiza la ac-
tualizacin).
Por ltimo, vamos a actualizar el contenido del campo scars de PER-
SONAS. En el caso ms general, dos personas podran recibir el mismo
premio, por la misma pelcula, por el mismo trabajo y el mismo ao: se-
ra el caso de una pelcula con dos directores, ganadora del scar al me-
jor director. Se nos plantea entonces un doble plural (las personas del
premio, los premios de la persona), que resolvemos por la tcnica del
plural finito.
En la tabla PREMIOS copiamos y pegamos el campo Persona, apareciendo
Persona2, que tambin estar enlazado a tabla de datos maestra. Ahora
componemos el ndice Personas con los dos campos anteriores, le aadi-
mos el campo Ao y el campo Premio y lo declaramos de clave mltiple,
con lo que ya est resuelto el doble plural.
Ahora declaramos la primera actualizacin (la que usa el campo Persona)
del contenido del campo scars de PERSONAS del siguiente modo:
Ahora nos faltara otra actualizacin, idntica a la anterior, pero que usara el
campo Persona2.
8.3.14. Gestin comercial
Conceptos a tratar
Creacin de punteros indirectos (reales y virtual).
Enlaces singular de plural por ndice.
Actualizaciones.
Triggers (procesos de tabla).
Descripcin
El ejemplo siguiente muestra el diseo del mdulo de ventas de una gestin
comercial. Se van a tener en cuenta las siguientes consideraciones:
Crearemos unos contadores, tanto de albaranes como de facturas, para
que se vayan incrementando a medida que se crean nuevos albaranes y
facturas.
Cada cliente tendr un descuento particular para cada familia de artculos.
Cada artculo tiene una tarifa concreta.
Si cambiamos la fecha de un albarn, sta deber modificarse en todas
las lneas de ese albarn.
La aplicacin ser multialmacn, es decir, existirn diversos almacenes
que generarn sus propios albaranes y existencias de artculos.
Esquema de la aplicacin
En este caso, al ser un diseo con muchas tablas, iremos creando diferen-
tes sub-esquemas o mdulos del esquema de tablas general de la apli-
cacin. Es decir, en vez de tener todas las tablas del proyecto y sus res-
pectivos enlaces en un nico esquema de tablas como se vena haciendo
hasta ahora, iremos creando ms esquemas de tablas dentro del proyecto
para as poder trabajar ms cmodamente.
Comenzamos por la creacin del esquema correspondiente a los contado-
res para los albaranes, las facturas y las series de facturacin. Dentro del
rea correspondiente al esquema de tablas creamos las siguientes tablas:
AOS, SERIES DE FACTURACIN, CONTADORES, CLIENTES, ALBARA-
NES y FACTURAS, todas de tipo maestro normal con clave numrica, ex-
cepto CONTADORES, que ser de tipo histrico.
Cmo las relacionamos? Comencemos con la tabla SERIES DE FACTU-
RACIN. Sus registros constan de un cdigo y una letra y se usan para cla-
sificar las facturas.
Por otro lado, en la tabla FACTURAS guardaremos los datos generales de
cada factura. Una factura estar compuesta por albaranes, mientras que
cada albarn estar compuesto por lneas, es decir, la tabla ALBARANES
08
Desarrollo completo
de una aplicacin
114 115 VELAZQUEZ VISUAL
ser histrica de FACTURAS, mientras que LNEAS ser histrica de AL-
BARANES (LINEAS la crearemos ms adelante).
En CLIENTES guardamos informacin acerca de cada cliente, siendo
CLIENTES maestra de ALBARANES. Por otro lado, haciendo SERIES DE
FACTURACIN maestra de CLIENTES podremos obtener todos los clientes
con los que hemos trabajado un ao determinado.
Entre las tablas AOS y SERIES DE FACTURACIN tenemos un doble plu-
ral (los aos de la serie de facturacin, la serie de facturacin del ao), que
resolvemos gracias a una tabla histrica intermedia: CONTADORES.
FACTURAS y ALBARANES tambin sern histricas de AOS y de SERIES
DE FACTURACIN.
Seleccionamos la opcin de men Esquema > Cambiar nombre (o pulsamos
la tecla F2) y en el cuadro de dilogo que se muestra, llamado Esquema, sus-
tituimos en la propiedad Descripcin la denominacin Esquema de tablas
por Esquema contadores. En dicho cuadro de dilogo podemos incluir den-
tro de la propiedad Observaciones una serie de comentarios que permitan al
programador interpretar ms fcilmente el esquema en sucesivas ocasiones:
En la tabla CONTADORES creamos dos campos numricos de longitud 3:
CONTADOR-ALB y CONTADOR-FAC, que sern los que almacenen los va-
lores de los contadores de albaranes y facturas, respectivamente.
En la tabla FACTURAS creamos el campo NUM-FAC (Nmero de factura,
numrico de longitud 3) que almacenar el nmero de factura.
En la tabla ALBARANES aadimos el campo BASE (Base total, numrico de
longitud 3, con 2 decimales y con signo) que almacenar el importe total del
albarn, y el campo NUM-ALB (N Albarn, numrico de longitud 3) que al-
macenar el nmero de albarn.
En la tabla CLIENTES creamos el campo ACUM-VENTAS (Acumulado de
ventas, numrico de longitud 5, con 2 decimales y con signo) que ser el
encargado de guardar el total de ventas del cliente.
Con este esquema de tablas es posible crear dos punteros indirectos. Di-
chos enlaces se crean en esquemas que contienen tablas unidas por bra-
zos de pulpo. Por ejemplo, si observamos las tablas FACTURAS y CON-
TADORES podremos ver dos brazos (uno sera FACTURAS/AOS/CONTA-
DORES, y otro FACTURAS/SERIES DE FACTURACIN/CONTADORES).
Por tanto es posible crear un enlace a tabla de datos indirecta desde FAC-
TURAS a CONTADORES. Como en otras ocasiones, debemos modificar un
ndice de la tabla CONTADORES, de modo que abrimos el ndice Ao y le
aadimos el campo Seriesdefact.
Tambin podemos abrir el ndice Seriesdefact y aadirle el campo Ao.
08
Desarrollo completo
de una aplicacin
116 117 VELAZQUEZ VISUAL
A continuacin creamos el campo PUNT-CONTADORES en la tabla FAC-
TURAS, que tiene las siguientes propiedades:
Pulsando el botn Resolucin se resuelve uno de los ndices para crear el
enlace, hagmoslo con el ndice Ao. La parte Ao del ndice se resuelve
con el Ao de la factura, mientras que la parte Series de facturacin se re-
suelve con la Serie de facturacin de dicha factura.
De la misma manera, entre la tabla ALBARANES y la tabla CONTADORES
se puede establecer otro enlace indirecto, ya que estn unidas por los bra-
zos CLIENTES/FACTURAS/AOS/CONTADORES y CLIENTES/SERIES DE
FACTURACIN/CONTADORES, respectivamente.
En este caso, como ya hemos modificado los ndices de la tabla CONTA-
DORES, slo queda crear en la tabla ALBARANES un nuevo campo, llama-
do PUNT-CONTADORES, que ser el del enlace indirecto y tendr las mis-
mas propiedades que el campo de igual nombre declarado en la tabla FAC-
TURAS. Pulsamos el botn Resolucin, resolviendo el Ao con el Ao del
albarn y la Serie de facturacin con la Serie de facturacin del albarn.
Con esto tenemos creado el segundo puntero indirecto, quedando comple-
to el Esquema contadores definido anteriormente:
08
Desarrollo completo
de una aplicacin
118 119 VELAZQUEZ VISUAL
Para acumular el valor de los contadores de albaranes y facturas creamos
dos triggers (procesos de tabla) dentro de la tabla FACTURAS. Para ello se-
leccionamos, dentro de la tabla FACTURAS, la subcarpeta Procesos y pul-
samos el botn Insert. Aparecer el cuadro de dilogo Nuevo manejador de
evento de: Facturas, en el que seleccionamos la opcin Anterior a un alta de
ficha:
Al pulsar el botn Aceptar se crea en la subcarpeta Procesos el trigger in-
dicado.
Si hacemos doble clic sobre el trigger recin creado aparecer el cuadro de
dilogo Proceso: Facturas->Anterior a un alta de ficha. En l escribiremos el
proceso a realizar cuando se cree una nueva factura.
El funcionamiento del proceso es el siguiente: si no existe un valor en el
campo NUM-FACT, modificamos la ficha de maestro a travs del puntero
indirecto a la tabla CONTADORES, para incrementar en uno el campo CON-
TADOR-FAC (el contador de facturas) y a continuacin almacenar dicho va-
lor del contador en la variable local Contador, que es la que dar su valor
almacenado al campo NUM-FAC de la tabla FACTURAS.
De igual manera, pulsamos de nuevo la tecla insert en la subcarpeta Pro-
cesos de la tabla FACTURAS. Aparecer otra vez el cuadro de dilogo
Nuevo manejador de evento de: Facturas y seleccionamos la opcin An-
terior a una modificacin de ficha. Al hacer doble clic sobre el trigger crea-
do aparece el cuadro de dilogo Proceso: Facturas-> Anterior a una mo-
dificacin de ficha, en el que escribimos un proceso igual al creado en el
trigger anterior al alta de ficha. De esta manera los contadores podrn ser
modificados tanto en el alta como en la modificacin de una ficha de FAC-
TURAS.
Ahora crearemos una actualizacin en ALBARANES, de modo que sobre la
subcarpeta Actualizaciones de la tabla ALBARANES pulsamos la tecla In-
sert, apareciendo el cuadro de dilogo Actualizacin desde Albaranes. Co-
mo Campo enlazado seleccionamos el campo CLIENTES de la tabla:
Pulsamos el botn Aadir y aparecer el cuadro de dilogo Componen-
te de Actualizacin. En l declaramos las siguientes propiedades:
08
Desarrollo completo
de una aplicacin
Aadir
120 121 VELAZQUEZ VISUAL
Este componente de actualizacin incrementa el valor del acumulado de
ventas de un cliente (campo ACUM-VENTAS de la tabla CLIENTES) con el
valor del importe de la base del albarn (campo BASE-TOT) de la tabla AL-
BARANES.
Las actualizaciones presentan una gran ventaja frente a los triggers: slo in-
dicamos qu hacer en el alta. La propia actualizacin se encarga de resol-
ver lo que tiene que hacer en la modificacin y en la baja.
En la misma tabla de ALBARANES crearemos tres triggers: Anterior a un al-
ta de ficha, Anterior a una modificacin de ficha y Posterior a una modifica-
cin de ficha. Los dos primeros triggers, que son iguales, tienen una es-
tructura parecida a la de los triggers correspondientes a la tabla FACTU-
RAS, con la salvedad de que en este caso trabajamos con el contador de
albaranes:
El tercer trigger (Posterior a una modificacin de ficha) es un proceso que
modifica la fecha de las lneas del albarn con la fecha correspondiente al
campo FECHA del albarn:
Desde la tabla ALBARANES realizamos la facturacin, para lo cual hacemos
uso de procesos y de tubos.
Ahora crearemos un nuevo subesquema de tablas, que llamaremos Es-
quema ventas.
08
Desarrollo completo
de una aplicacin
122 123 VELAZQUEZ VISUAL
Dentro del Esquema ventas, crearemos las siguientes tablas: DESCUEN-
TOS, FAMILIAS, ARTCULOS y LINEAS. A estas tablas aadimos las tablas
ALBARANES y CLIENTES, creadas anteriormente. Para ello hacemos doble
clic con el botn izquierdo del ratn sobre los iconos que aparecen en el
rea Tablas no usadas, situada en la parte inferior izquierda ( ).
Dicho panel muestra las tablas del proyecto que no estn siendo utilizadas
en el Esquema de tablas actual. Al hacer doble clic aparecern las tablas
ALBARANES y CLIENTES en el esquema de tablas Esquema ventas, sien-
do su diseo el siguiente:
En la tabla FAMILIAS guardaremos los distintos tipos o familias de artculos
(stos presentan una estructura arbolada, por ejemplo: tornillos de hierro de
mtrica 6, tornillos de hierro de mtrica 10, tornillos de aluminio de mtrica
6, tornillos de aluminio de mtrica 10, etc.).
Para cada pareja cliente - artculo aplicaremos un descuento distinto, de
modo que entre FAMILIAS y CLIENTES hay un doble plural que resolvemos
mediante la tabla histrica DESCUENTOS.
CLIENTES ser maestro de ALBARANES, mientras que FAMILIAS lo ser de
ARTCULOS. Entre ALBARANES y ARTICULOS tenemos un doble plural
que resolvemos aprovechando la tabla histrica LINEAS.
Ahora aadiremos un puntero indirecto que enlace LINEAS y DESCUEN-
TOS, tablas que se relacionan por los brazos LNEAS/ALBARANES/CLIEN-
TES/DESCUENTOS y LNEAS/ARTCULOS/FAMILIAS/DESCUENTOS.
Creamos el campo PUNT-DTOS en la tabla LINEAS, enlazado a tabla de da-
tos indirecta y lo resolvemos. Seguidamente aadimos el campo PORC-
DTO en la tabla DESCUENTOS (numrico de longitud 2, con 2 decimales) y
en la tabla LINEAS el campo PORC-DTO (Porcentaje de descuento, num-
rico de longitud 2, con 2 decimales y con signo, y que tiene como conteni-
do inicial el campo PORC-DTO de la tabla DESCUENTOS obtenido a travs
del enlace indirecto).
Tambin creamos una actualizacin desde LINEAS a la tabla DESCUENTOS
que, utilizando el campo enlazado PUNT-DTOS de la tabla LINEAS, pasa el
valor del campo PORC-DTO de la lnea al PORC-DTO del descuento.
Ahora crearemos otro sub - esquema: Esquema Almacenes, en el que de-
claramos las tablas ALMACENES y EXISTENCIAS y aadimos las tablas AL-
BARANES, LNEAS y ARTCULOS (que ya existan). Tambin hemos de es-
tablecer un enlace indirecto desde la tabla LINEAS a la tabla EXISTENCIAS.
08
Desarrollo completo
de una aplicacin
124 125 VELAZQUEZ VISUAL
Ahora creamos el Esquema Tarifas, en el que mantenemos las tablas del
Esquema ventas, incluimos la tabla CLIENTES y aadimos las tablas TARI-
FAS y TARIFAS DE VENTA:
Entre las tablas TARIFAS y ARTICULOS hay un doble plural, que resolvemos
mediante la tabla TARIFAS DE VENTA, adems CLIENTES ser histrica de
TARIFAS.
Creamos tambin un enlace indirecto entre LINEAS y TARIFAS DE VENTA,
para lo cual en TARIFAS DE VENTA modificamos uno de sus ndices (TARI-
FAS o ARTICULOS), declarndolo de clave nica y aadindole el campo
contrario:
Ahora, en la tabla LINEAS, creamos el campo PUNT-TARIFAS-VTA que tie-
ne las siguientes propiedades:
Resolvemos el enlace:
08
Desarrollo completo
de una aplicacin
126 127 VELAZQUEZ VISUAL
De esta manera tenemos definido en enlace indirecto. Al ser virtual Velz-
quez lo representa con un color gris oscuro. Lo hemos definido virtual ya
que no es necesario permanentemente (es una lectura puntual).
El aspecto final que tiene el esquema de tablas es el siguiente:
8.4 El almacn de objetos
Esta utilidad nos ahorrar mucho tiempo en la creacin de nuestros pro-
yectos, en tareas tales como la creacin de rejillas, formularios, mens, etc.,
e incluso tablas de datos y variables globales.
El almacn es una carpeta que se encuentra en el directorio del progra-
ma de Velzquez Visual y que contiene una serie de proyectos que se po-
drn utilizar en cualquier aplicacin que nosotros creemos, y donde po-
dremos guardar los nuestros para volver a usarlos. El almacn se en-
cuentra situado en c:\Archivos de Programa\Atica\Velazquez\program\Al-
macen, donde podemos aadir nuestros mapas o crear nuevas carpetas
para ellos.
Si cambiamos la ubicacin del almacn o al abrirlo da un mensaje de
aviso de que no se encuentra, ejecutaremos la opcin Ver/Personalizar
y en la pestaa Entorno indicaremos la senda donde est ubicada la
carpeta.
Para acceder a un mapa del Almacn, pulsaremos el botn Almacn de
Objetos (F8).
08
Desarrollo completo
de una aplicacin
Almacn de Objetos
128 129 VELAZQUEZ VISUAL
Una vez pulsado el botn, se abrir un cuadro de dilogo donde se pre-
sentar la lista de mapas disponibles en el almacn. Seleccionaremos el
que queramos incluir y pulsaremos el botn Importar. Si el mapa seleccio-
nado del almacn no tiene objetos asociados a tablas (por ejemplo un ma-
pa que nicamente contiene dibujos) los objetos sern importados en el
mapa abierto en el editor. En caso contrario se presentar un cuadro de di-
logo en cuyo panel izquierdo se mostrarn las tablas de datos del almacn
y en el derecho las tablas de datos del proyecto actual.
Podremos realizar las siguientes operaciones:
Importar: importaremos tablas del proyecto seleccionado del almacn al
proyecto actual, con sus correspondientes objetos visuales (rejillas, formu-
larios, mens, informes, etc.). Para ello seleccionaremos la tabla de datos a
importar del panel izquierdo y pulsaremos el botn Importar, de modo que
la tabla, junto con sus objetos visuales, se incorporar a nuestro proyecto.
Asignar: asignaremos una tabla de datos del proyecto seleccionado del al-
macn a una tabla de datos del proyecto actual. De este modo, se crearn
en el proyecto actual todos los objetos visuales definidos para la tabla del
almacn, realizndose una metamorfosis al vuelo. Con la metamorfosis se
reasocian los objetos a la tabla de datos que se ha asignado del proyecto
actual. Para ello seleccionaremos la tabla del almacn en el panel izquier-
do, seleccionamos la tabla a la que la asignaremos en el panel derecho, y
pulsaremos el botn Asignar. Si queremos desactivar una asignacin, la
marcamos y pulsamos el botn Liberar.
Si el nombre de una tabla de las del proyecto seleccionado del almacn
coincide con el nombre de una tabla del proyecto actual, sta es asignada
automticamente por el programa. Lo mismo suceder con los campos que
coincidan en ambas.
Campos: podremos asignar e importar campos de una tabla del Almacn a
la tabla de destino. Para ello, seleccionamos la tabla del proyecto del al-
macn del panel izquierdo y la de destino del panel derecho, pulsamos el
botn Campose importamos a la tabla de destino y asignamos los cam-
pos que deseemos de la de origen.
Tendremos en el cuadro de dilogo informacin de cada una de las tablas.
En la parte izquierda se mostrarn todas las tablas del proyecto del alma-
cn, el modo de incorporacin al proyecto (asignacin o importacin), y las
tablas a las que se ha asignado cada tabla del proyecto del almacn. En el
panel derecho se mostrarn todas las tablas del proyecto actual que no se
hayan asignado a ninguna del proyecto del almacn.
Una vez asignadas las tablas o marcadas para importar, pulsaremos el
botn Finalizar para que se incorporen al proyecto tanto las tablas impor-
tadas como los objetos visuales, tanto de las asignadas como de las im-
portadas.
Si el proyecto tuviese variables globales definidas, stas tambin sern im-
portadas en el proyecto actual.
La verdadera utilidad del almacn es que nos permite crear nuestros
propios proyectos para incluirlos en l, por ejemplo, si desarrollamos el
mdulo de ventas en una gestin comercial y lo incorporamos al alma-
cn, para generar el mdulo de compras, que en muchos casos es
prcticamente igual, bastar con pulsar el botn de Almacn o la tecla
F8 y asignar a las tablas de ventas su correspondencia en compras
(Clientes -> Proveedores, Pedidos de venta -> Pedidos de compra,
etc.). De este modo tendremos generado en pocos segundos el mdu-
lo de compras.
Todos los objetos de una tabla del proyecto del almacn asignada a una ta-
bla del proyecto actual se metamorfosearn, es decir, aparte de crearse to-
dos los objetos asignados a la tabla de destino, incluso sus identificadores
y nombres donde apareca el nombre de la tabla del almacn sern modifi-
cados por los de la tabla asignada.
08
Desarrollo completo
de una aplicacin
130 131 VELAZQUEZ VISUAL
Si queremos incluir nuevos proyectos en el almacn de objetos para adap-
tarlos a nuestras necesidades tendremos que crear un proyecto de datos
con el editor de Velzquez y guardarlo en la carpeta almacn, que se en-
cuentra dentro de la carpeta del programa.
Los proyectos se crean como cualquier otro proyecto de Velzquez Visual
en el Editor de Proyectos. En ellos incluiremos las tablas de datos y los ob-
jetos visuales que creamos necesarios.
Si queremos incluir algunos objetos visuales (como por ejemplo los dibujos
de los botones de alta, ver y localizar) o variables globales que puedan ser
comunes a otros proyectos, los incluiremos en una carpeta cuyo nombre
comience por el signo $, por ejemplo: $Comunes, de esta forma, si inclui-
mos alguno de los proyectos del almacn en un proyecto que estemos
creando, Velzquez Visual comprobar si los objetos o variables globales de
dicha carpeta ya los contiene nuestra aplicacin; si es as, no los incluir,
en el caso de no contenerlos, los importar.
Ejemplo: uso del Almacn de Objetos
Primero expongamos qu es lo que queremos hacer en este ejemplo:
Diseamos una aplicacin en Velzquez que nos permita llevar el registro de
nuestros clientes. sta va a contar slo con una tabla (CLIENTES) y algunos
objetos (rejillas, formularios, bsquedas, etc.).
Guardamos el proyecto en el almacn de objetos.
En este punto queremos disear una aplicacin para llevar el registro de nues-
tros distribuidores. Cuando slo hemos creado una tabla (DISTRIBUIDORES)
nos damos cuenta de que esta aplicacin es idntica a la de clientes, slo que
donde antes deca clientes, ahora tiene que decir distribuidores.
En el almacn, aprovecharemos el mapa correspondiente a la aplicacin de
clientes y asignaremos la tabla CLIENTES a DISTRIBUIDORES. De este mo-
do podemos aprovechar todos los objetos que ya tenamos creados.
El almacn de objetos es una utilidad que nos ahorrar mucho tiempo en el
desarrollo de aplicaciones. Por lo tanto, un almacn bien estructurado es
dar un valor aadido a la herramienta.
El almacn es una carpeta que se encuentra en el directorio del programa
de Velzquez (C:\Archivos de programa\Atica\Velzquez\Program) y que
contiene una serie de proyectos con todos los objetos incluidos en los mis-
mos, que se podrn utilizar en cualquier aplicacin que creemos. Para ello,
slo tendremos que pulsar el botn . Con Velzquez ya vienen incluidos
unos cuantos proyectos en el almacn, pero podremos crear los que que-
ramos e incluirlos. Adems, podremos especificar un directorio diferente
para ubicar el almacn. En caso de cambiarse o si al pulsar el botn co-
rrespondiente da un mensaje de aviso de que no se encuentra, hemos de
Debemos de tener cuidado
con los nombres e
identificadores que ponemos
a las tablas y objetos
visuales, ya que sern los
que permitan la
metamorfosis al vuelo. As, si
tenemos una tabla que
llamamos MARCAS, a la
que asignamos una tabla del
almacn FAMILIAS, all
donde aparezca familias o el
singular familia, tanto en el
nombre como en el
identificador, ser sustituido
por marcas o marca,
respectivamente, con lo que
los nuevos objetos y tablas
quedarn asignados
correctamente.
ADVERTENCIA
e
Almacn de objetos
ejecutar la opcin Ver/Personalizar y en la pestaa Entorno indicamos la
senda (path) donde est ubicada esta carpeta.
Como ya hemos indicado, lo primero es disear el mapa correspondiente a
la aplicacin de clientes. ste va a contar con una sola tabla, CLIENTES, de
tipo maestro normal con clave numrica y que constar de los campos
Nombre, Telfono, Fax, Email y Observaciones.
Tambin hemos de crear los siguientes objetos visuales: una rejilla con los
campos CDIGO y NOMBRE del cliente, formulario de altas, modificacio-
nes y bajas, una bsqueda ordenada alfabticamente (por el ndice NOM-
BRE) de toda la tabla, una bsqueda por palabras, una bsqueda por tro-
zos de palabras y un localizador de CLIENTES.
08
Desarrollo completo
de una aplicacin
e
132 133 VELAZQUEZ VISUAL
Por ltimo, para especificar las propiedades del proyecto ejecutamos la op-
cin Edicin/Propiedades proyecto, o pulsamos el botn de la barra de
herramientas y en el parmetro Nombre del Proyecto escribimos el nombre,
por ejemplo Clientes (nombre descriptivo por el que reconoceremos el
mapa creado cuando utilicemos el almacn de objetos en cualquiera de
nuestras aplicaciones).
Llegados a este punto, guardamos ya el proyecto en disco, para lo cual
ejecutamos la opcin Archivo/Guardar. Seleccionamos en la ventana
Guardar la carpeta Almacn que, como ya hemos dicho antes, se en-
cuentra en el directorio del programa Velzquez y como nombre especifi-
camos Clientes.
Llegados a este punto decidimos disear la aplicacin que lleve el registro
de los distribuidores. Vamos a crear un nuevo proyecto con una nica tabla:
DISTRIBUIDORES (maestra con clave numrica).
Pulsamos el botn y dentro del almacn encontraremos el mapa del
proyecto Clientes que habamos guardado con anterioridad.
Pinchando en el mapa del proyecto Clientes nos saldr la ventana Asig-
nacion de tablas. En el panel izquierdo de la ventana aparecen las tablas co-
rrespondientes al proyecto que acabamos de abrir, mientras que en el de-
recho estn las tablas del proyecto actual.
e
Propiedades del proyecto
Almacn de objetos
Con el almacn podemos importar la tabla Clientes, lo que ocasiona traer
directamente a nuestro proyecto la tabla y todos sus objetos visuales. Para
ello seleccionamos la tabla CLIENTES en la ventana izquierda del cuadro de
dilogo del almacn y pinchamos en el botn Importar. Posteriormente pin-
chamos en Finalizar y veremos cmo Velzquez ha trado a nuestro mapa la
tabla CLIENTES y todos sus objetos visuales.
Si el nombre de una tabla de las del proyecto seleccionado del almacn
coincide con el nombre de una tabla del proyecto actual, sta es asignada
automticamente por el programa. Lo mismo suceder con los campos que
coincidan en ambas. De hecho, ahora que ya hemos importado la tabla
CLIENTES a nuestro proyecto, si volvemos a pulsar el botn de almacn de
objetos , la tabla CLIENTES del mismo y la de nuestro proyecto, apare-
cern asignadas automticamente.
08
Desarrollo completo
de una aplicacin
e
134 135 VELAZQUEZ VISUAL
Pero volvamos a nuestro proyecto original en el que slo tenamos la tabla
DISTRIBUIDORES. Queremos asignar la tabla CLIENTES a nuestra tabla
DISTRIBUIDORES, para ello pinchamos en el botn , seleccionamos la
tabla CLIENTES en la ventana izquierda, a continuacin seleccionamos la
tabla DISTRIBUIDORES en la ventana derecha y pinchamos en el botn
Asignar.
Ahora pulsamos el botn Campos y podremos importar los campos de la
tabla CLIENTES que queremos en nuestra tabla DISTRIBUIDORES. Hemos
de notar cmo los campos CODIGO y NOMBRE son asignados automti-
camente, puesto que ambos ya existen en los dos proyectos.
e
Almacn de objetos
En todo momento, tendremos informacin en el cuadro de dilogo acerca
de cada una de las tablas del proyecto del almacn, el modo de incorpora-
cin al proyecto (asignacin o importacin), y la tabla a la que se ha asig-
nado cada tabla del proyecto del almacn. En el panel derecho se mostra-
rn todas las tablas del proyecto actual que no se han asignado a ninguna
del proyecto del almacn.
Si queremos deshacer la asignacin, la marcamos y pulsamos el botn Li-
berar (la tabla DISTRIBUIDORES aparecer de nuevo en el panel derecho).
Una vez asignadas las tablas y sus campos, pulsamos el botn Salir y a
continuacin el de Finalizar, para que los campos seleccionados y todos los
objetos visuales de la tabla CLIENTES del almacn se incorporen a la tabla
DISTRIBUIDORES de nuestro proyecto.
Observemos adems cmo todos los identificadores y nombres de los ob-
jetos visuales han sido metamorfoseados; es decir, donde antes apareca
el nombre de la tabla del almacn (CLIENTES), ahora aparece el de la tabla
a la que han sido asignados (DISTRIBUIDORES). Por ejemplo: la rejilla
CLIENTES ahora ha pasado a llamarse DISTRIBUIDORES; la bsqueda
CLIENTES-ALFA se llama ahora DISTRIBUIDORES-ALFA, y as sucesiva-
mente con cada uno de ellos.
08
Desarrollo completo
de una aplicacin
e
136 137 VELAZQUEZ VISUAL
Otro detalle: si el proyecto tiene variables globales definidas, stas tambin
sern importadas en el proyecto actual.
Resumen
En el almacn guardamos proyectos de Velzquez Visual que podremos
aprovechar en aplicaciones posteriores. Esta utilidad nos ahorrar mucho
tiempo en la creacin de rejillas, formularios, mens, etc., e incluso tablas
de datos y variables globales.
Podemos importar o asignar los objetos. En el primer caso incorporamos a
nuestro proyecto las tablas, junto con sus objetos visuales, del proyecto se-
leccionado en el almacn. En el segundo caso se produce una metamorfo-
sis en vuelo: se crean en el proyecto actual los objetos visuales definidos
para la tabla del almacn, adaptndose al nuevo proyecto.
8.5 Ms objetos visuales
8.5.1. La lupa
Con la lupa creamos, en el Editor de Proyectos, condiciones de filtrado de
listas para que puedan ser ejecutadas directamente por el usuario final.
Al seleccionar este objeto de la Galera de objetos se abrir el cuadro de
propiedades de la lupa:
Sus parmetros son:
Nombre: nombre de la opcin de filtrado. ste ser el que el programa uti-
lice para visualizarla como opcin en el men de contexto de listas.
e
Lupa
Privada: si activamos esta casilla de verificacin, la lupa de filtrado no apa-
recer en el men de contexto de listas, sino que tendr que ser llamada
especficamente por un proceso, un botn de la barra de herramientas, etc.,
pero no aparecer por defecto.
Tabla de datos: identificador de la tabla de datos sobre la que va a actuar la
lupa.
Formulario: si queremos que sea el usuario el que pueda establecer los pa-
rmetros del listado, debemos especificar aqu cul ser el formulario para
introducir los parmetros de la lupa, teniendo en cuenta que el tipo de for-
mulario ha de ser especial para bsquedas. Si no queremos que utilice un
formulario seleccione la opcin No pedir formulario.
Frmula Filtro: expresin frmula del filtrado. Para su composicin, pode-
mos ayudarnos del Asistente para la edicin de frmulas, pulsando el botn
correspondiente.
Las lupas pueden ser ejecutadas o bien desde un botn de una barra de he-
rramientas que hayamos creado, o bien, desde el men de contexto de lis-
tas que aparece pulsando el botn derecho del ratn sobre una lista. En di-
cho men aparecern todas aquellas lupas que no hayamos definido como
privadas para la tabla de datos de la lista.
Ejemplo: Lupa
Supongamos una aplicacin de gestin para un videoclub en la que nece-
sitamos filtrar las pelculas por el tipo de vdeo (VHS, DVD) para ello va-
mos a usar una lupa.
Asociamos lupa con filtrado de datos, por lo tanto, si queremos filtrar datos
tendremos que tener una bsqueda previa para esos datos.
Nosotros vamos a crear una lupa, que se encargar de filtrar los datos
segn tipo de vdeo (VHS, DVD, etc.); para ello lo primero que vamos a
hacer es una bsqueda por cdigo con la que obtener todos los registros
que tenemos en la tabla VIDEOS. La llamaremos VIDEOS-TODOS. Pre-
viamente hemos creado una rejilla, TODOS-VIDEOS, con todos los cam-
pos, para mostrar todos esos registros. La asociaremos a la bsqueda
VIDEOS-TODOS.
08
Desarrollo completo
de una aplicacin
e
138 139 VELAZQUEZ VISUAL
Una vez creadas la bsqueda y su rejilla correspondiente, crearemos la lu-
pa, pero nuestra lupa tendr asociado un formulario de bsqueda para in-
dicarle el tipo por el que debe filtrar.
e
Dicho formulario slo llevar un campo, el cual estar asociado a una va-
riable global en memoria, que llamaremos Formato, del mismo tipo que el
campo Tipo (de vdeo) de la tabla VIDEOS (un Alfa 40).
A continuacin creamos el formulario asociado a la lupa, que llamaremos
FILTRA-VIDEOS.
08
Desarrollo completo
de una aplicacin
e
140 141 VELAZQUEZ VISUAL
Hemos de asociar el control de edicin del formulario a la variable Formato
que hemos creado.
Por ltimo creamos la lupa, a la que llamamos TIPO-DE-VIDEOS, asocin-
dole el formulario de bsqueda FILTRA-VIDEOS. Si activamos la casilla de
verificacin Privada, slo ser utilizada para bsquedas de la tabla VIDEOS.
e
En Frmula Filtro de la ventana de propiedades de la lupa especificamos que
busque aquellos registros cuyo campo Tipo (de vdeo) coincida con el con-
tenido de la variable FORMATO, la cual tomar valor en el formulario de bs-
queda. Para ello podemos hacer uso del Asistente de edicin de frmulas.
Ahora slo nos quedar hacer la llamada desde un MENU, usando la pisto-
la BUSQUEDA y asocindole la bsqueda que hemos creado.
Si como frmula filtro usamos el atributo :0 (dos puntos, cero) para comparar
un campo, podremos filtrar por ese campo usando un formulario asociado a
esa tabla, y no tendremos la necesidad de usar variables, permitindonos ade-
ms aprovechar las caractersticas del objeto formulario (localizadores, etc.).
%IDENTIFICADOR-CAMPO%=:0%IDENTIFICADOR-CAMPO%
Ejemplo: Filtrar por un maestro
Tenemos una tabla de ALBARANES histrica de CLIENTES. Queremos una
lupa que filtre albaranes por el campo CLIENTE que escojamos en un for-
mulario. En este formulario usamos dos campos edit con estilos Botones
Arriba/abajo y Autocompletar y botn que nos lance un localizador, y lo aso-
ciamos a la lupa, a la que adems damos un nombre y lo asociamos a la ta-
bla de datos ALBARANES.
Como frmula filtro ponemos lo siguiente:
%CLIENTE% =:0%CLIENTE%
Al filtrar, dejar en la rejilla aquellos albaranes que tengan como cliente el
que hayamos elegido en el formulario.
8.5.2. Encarpetado de histrico
Los encarpetados de histricos se utilizan en los formularios para ver la in-
formacin de forma clasificada dentro de una rejilla de histrico segn los va-
lores de un determinado campo de la tabla de datos (campo subclasificador).
Es necesario que el campo subclasificador sea la segunda parte (o compo-
nente) del ndice por el que se accede a los registros de la tabla histrica.
En el cuadro de dilogo Propiedades del encarpetado se establecen las si-
guientes propiedades:
Descripcin: ser la que aparezca al usarlo.
Tabla de datos maestra: la tabla de datos maestra del histrico.
Histrico: es el histrico a encarpetar, pudiendo elegir de entre los que po-
damos tener creados, segn el ndice.
08
Desarrollo completo
de una aplicacin
e
e
Encarpetado de histrico
142 143 VELAZQUEZ VISUAL
Si se trata de un encarpetado automtico es Velzquez Visual quien lo crea,
tomando los valores del campo subclasificador. Quedar ms claro con un
ejemplo: supongamos que queremos ver los libros encarpetados por mate-
rias en una ficha de editoriales. El usuario vera una rejilla con una Lista des-
plegable en la parte superior donde estaran todas las materias de todos los
libros de la editorial. Para crear este encarpetado habra que aadirle al n-
dice EDITORIALES de la tabla LIBROS el campo MATERIAS. Al crear el ob-
jeto, en su definicin, especificaremos como maestro EDITORIALES y co-
mo histrico Libros -> Editoriales. Automticamente, se mostrar como
campo subclasificador MATERIAS. Activamos la casilla Encarpetado auto-
mtico. En el formulario de edicin de EDITORIALES creamos un control de
rejilla de histrico, activamos la casilla Encarpetado y seleccionamos el en-
carpetado que hemos creado.
En caso de no ser automtico, o sea, encarpetado manual, el encarpetado
ser creado por el usuario de la aplicacin y ser guardado en el disco pa-
ra su posterior uso. Por ejemplo, se quieren ver las facturas de venta en-
carpetadas por fechas en la ficha de artculos. El usuario vera una rejilla con
una Lista desplegable en la parte superior y un botn titulado Carpetas don-
de podra establecer los perodos adecuados para encarpetar las facturas.
Para crear este encarpetado habr que aadirle al ndice ARTICULOS de la
tabla FACTURAS el campo FECHA. Al crear el encarpetado, en su defini-
cin, especificamos como maestro ARTICULOS y como histrico Facturas
-> Artculos. En el formulario de ARTICULOS crearemos un control de reji-
lla de histrico, activamos la casilla Encarpetado y seleccionamos el encar-
petado de facturas por fecha. En tiempo de ejecucin, Velzquez Visual nos
lanza un formulario en el que establecemos los lmites del perodo de tiem-
po para el encarpetado.
Como norma general, si el campo subclasificador apunta a un maestro, lo
normal es utilizar encarpetado automtico. Velzquez Visual se encarga de
averiguar la lista de posibles valores del campo y de realizar el encarpeta-
do. Si el campo subclasificador no apunta a maestro alguno, lo normal es
utilizar encarpetado manual y dejar que el usuario establezca los valores de
encarpetado.
Por ejemplo, si tenemos una tabla de Tareas enlazada a maestro a dos ta-
blas, una de Clientes y otra de Tipos de Tareas, y queremos presentar en un
formulario las Tareas de un Cliente (es decir, los histricos de una ficha), po-
demos con un encarpetado histrico elegir de qu Tipo de Tarea sern las
Tareas que mostremos. Tipos de Tareas sera el campo subclasificador, y el
encarpetado sera automtico, pudiendo elegir de qu tipo ser la tarea de
una lista que se genera en ejecucin de forma automtica.
Si queremos, sin embargo, mostrar las Tareas segn otro campo que no es-
t enlazado como por ejemplo la Fecha de la Tarea, no declararemos el en-
carpetado como automtico y dejaremos que sta sea elegida por el usua-
rio en ejecucin, pudiendo incluso buscar entre lmites.
Ejemplo: Encarpetado de Histrico Automtico
Mediante este ejemplo veremos cmo utilizar los encarpetados de histrico
de Velzquez Visual.
Los encarpetados de histricos se utilizan en los formularios para ver la in-
formacin de forma clasificada dentro de una rejilla. La clasificacin se rea-
liza encarpetando los registros segn los valores de un determinado cam-
po de la tabla de datos al que llamamos campo subclasificador. Para que
pueda encarpetarse la lista de registros, el campo subclasificador debe ser
el segundo componente del ndice por el que se accede a los registros de
la tabla histrica.
Como norma general, si el campo subclasificador apunta a un maestro, lo
normal es utilizar encarpetado automtico. Velzquez Visual se encarga de
averiguar la lista de posibles valores del campo y de realizar el encarpeta-
do. Si el campo subclasificador no apunta a maestro alguno, lo normal es
utilizar encarpetado manual y dejar que el usuario establezca los valores de
encarpetado.
Para este ejemplo se ha creado un mapa de datos con la siguiente es-
tructura:
08
Desarrollo completo
de una aplicacin
e
144 145 VELAZQUEZ VISUAL
Ahora vamos a crear los encarpetados: pretendemos incluir en el formula-
rio de modificacin de MARCAS una rejilla de histrico de ARTICULOS, en
la que se pueda visualizar los registros de la misma segn la familia a la que
pertenezcan, de modo que el campo subclasificador ser Familias. Este
campo est enlazado a una tabla de datos maestra, as que en este caso el
encarpetado ser automtico.
Para realizar el encarpetado automtico seguimos los siguientes pasos:
Modificamos el ndice MARCAS de la tabla ARTICULOS para aadir el cam-
po subclasificador, que ser FAMILIAS, como segundo componente.
Seleccionamos el objeto Encarpetado de Histrico de la Galera. Sus pro-
piedades son:
Maestro: MARCAS
Histrico: ARTICULOS -> MARCA
e
Campo subclasificador: Familias (lo detecta el programa automticamente).
Encarpetado automtico: Activado
A este encarpetado lo hemos llamado ARTICULOS-MARCA-FAMILIA.
En el formulario de modificacin de MARCAS incluiremos un control de Re-
jilla de histrico. Sus propiedades son:
Encarpetado: Activado
Histrico/Carpetas: ARTICULOS-MARCA-FAMILIA
Rejilla: ARTICULOS
08
Desarrollo completo
de una aplicacin
e
146 147 VELAZQUEZ VISUAL
En tiempo de ejecucin, al editar un registro de la tabla MARCAS, se ver
en la rejilla de ARTICULOS todos los artculos que se hayan dado de alta de
dicha marca. Al abrir el combo box que se encuentra encima de la rejilla, se
mostrar una lista que contendr todas las familias de los artculos dados
de alta de dicha marca, as como una opcin para ver la lista completa de
los artculos de la marca. Cada vez que se seleccione una familia de dicho
combo box, en la rejilla slo se visualizarn aquellos artculos de la marca
que pertenezcan a dicha familia.
Ejemplo: Encarpetado de Histrico Manual
Mediante este ejemplo veremos cmo utilizar los encarpetados de histrico
de Velzquez Visual del tipo encarpetado manual.
En este caso vamos a encarpetar los albaranes de un cliente por el campo
Fecha del albarn; y para ello, el ndice Cliente de la tabla ALBARANES de-
ber tener como segunda parte el campo Fecha. Se ha creado un mapa con
la siguiente estructura:
Ahora vamos a crear el Encarpetado de Histrico Manual:
Incluimos, en el formulario de modificaciones de CLIENTES, una rejilla de
histrico de ALBARANES DE VENTAS que permita visualizar los registros
e
e
de la misma, clasificados segn la fecha de emisin. De esto se deduce que
el campo subclasificador ser la FECHA del albarn.
Modificamos el ndice Clientes de la tabla ALBARANES DE VENTAS para
aadir el campo subclasificador, que ser Fecha. Este ndice es el que se
utiliza para generar el enlace histrico de CLIENTES a ALBARANES.
Creamos el objeto Encarpetado de Histrico de la Galera de Objetos. Sus
propiedades son:
Maestro: CLIENTES
Histrico: VALBARANES -> CLIENTES (como ya hemos dicho, aqu es don-
de se utiliza el ndice Fecha para resolver el enlace histrico y que es el
compuesto por cliente + fecha).
Campo subclasificador: Fecha (lo detecta el programa automticamente).
Encarpetado automtico: Desactivado.
08
Desarrollo completo
de una aplicacin
e
148 149 VELAZQUEZ VISUAL
A este encarpetado lo hemos llamado ENCARPETADO-VALBARANES.
En el formulario de modificacin de CLIENTES incluiremos un control de
Rejilla de histrico. Sus propiedades son:
Encarpetado: Activado
Histrico: ENCARPETADO-VALBARANES
Rejilla: VALBARANES-SIN-CLIENTE
En tiempo de ejecucin, al editar un registro de la tabla CLIENTES, se ver
en la rejilla ALBARANES VENTAS el listado completo de todos los albara-
nes del cliente editado. Junto al combo box que aparece encima de la reji-
lla se incluye un botn, llamado Carpetas, que ser el que permita crear y
modificar las carpetas al usuario.
e
Para crear una carpeta tendremos que, en ejecucin, pulsar el botn men-
cionado anteriormente, pasando a la ventana de creacin de carpetas. Por
ejemplo: queremos crear una con todos los albaranes de todos los meses
del 2000. Tendramos que pulsar el botn Aadir y rellenar los siguien-
tes controles:
Ttulo: Enero 2000
Lmites: Fecha
Inicial: 01-Ene-2000
Final: 31-Ene-2000
Tras aceptar esta entrada, en el combo box ya tendr Lista Completa de Al-
baranes de Ventas y Enero 2000.
Tendremos que repetir la operacin con el resto de los meses. De esta ma-
nera podremos ver, de un Cliente, aquellos albaranes que se incluyan en las
fechas dadas, o la lista completa.
Con los botones podemos Aadir, Insertar, Eliminar, Orde-
nar arriba y abajo y Editar los distintos encarpetados, y si queremos modi-
ficar una carpeta, simplemente habr que seleccionarla en el combo box y
pulsar el botn Propiedades.
8.5.3. Cesta de la compra
ste es uno de los objetos ms potentes y sin embargo muy sencillo de
crear. Se utiliza, en tiempo de ejecucin, para guardar una serie de registros
de una tabla de datos para su posterior uso en otras partes de la aplicacin.
El contenido de las cestas se almacena en memoria y, por tanto, se borra-
r una vez finalice la ejecucin del mismo.
08
Desarrollo completo
de una aplicacin
e
Aadir
Propiedades
Eliminar
Subir
Bajar
150 151 VELAZQUEZ VISUAL
Para crear una cesta habr que seleccionar el icono de la Galera de Ob-
jetos, tras lo cual se presentar el cuadro de propiedades. En la ventana he-
mos de especificar la tabla de datos a la que se va a asociar, la rejilla con
que presentaremos su contenido (los registros que vamos guardando) y si
queremos que sea privada o no.
Podemos crear tantas cestas como deseemos para una misma tabla. Por
ejemplo, en una gestin de libreras podemos crear una para incluir libros
pendientes, otra para los ms vendidos, etc.
Si una cesta est definida como privada, el usuario no tendr acceso a ella.
Se utilizan cestas privadas, por ejemplo, en procesos.
Por ejemplo, podemos crear una cesta para una tabla de datos de Artcu-
los, de modo que el usuario pueda introducir en ella los artculos que vaya
a vender. Posteriormente, en un formulario de altas de Tickets de venta
creamos un botn que dispare una instruccin de proceso para Localizar en
cesta de la compra, con lo cual, en ejecucin, el usuario obtendr una reji-
lla que contenga slo los artculos metidos en la cesta, de los que quere-
mos los tickets de venta.
Ejemplo: Cesta de la compra
Tenemos una aplicacin de compra de libros. El esquema de tablas est
compuesto por LIBROS, cuyo maestro es AUTORES, que compondrn el
artculo a vender, y tres tablas ms: LINEAS con su maestra ALBARANES,
que a su vez es histrica de CLIENTES.
e
Cesta de la compra
Adems de rejillas, formularios, etc., creamos una cesta de la compra para
libros. Para ello vamos a la Galera de Objetos pulsando el botn y es-
cogemos Cesta de la Compra. En el cuadro de dilogo que nos apare-
ce, los datos que debemos cumplimentar son muy pocos, simplemente el
nombre que le daremos a la cesta (Cesta de Libros), la tabla de datos a la
que est asignada (LIBROS) y la rejilla que usaremos para presentar los da-
tos, que de nuevo ser la de LIBROS. Aceptamos y ponemos como identi-
ficador LIBROS.
Ahora, en ejecucin, podemos ir haciendo bsquedas de libros, e ir ano-
tando en la Cesta de Libros aquellos que nos interesen:
08
Desarrollo completo
de una aplicacin
e
Galera de objetos
Cesta de la Compra
152 153 VELAZQUEZ VISUAL
Por ejemplo, buscamos por trozos de palabras del nombre un autor, y ano-
tamos en la cesta los que nos interesen. Para ello pulsamos con el botn
de la derecha del ratn sobre la rejilla, mostrndonos el men de contexto.
Ah tenemos la opcin de Anotar en cesta: elemento seleccionado F2, Ano-
tar en cesta: Todos (Shft+F2), y con Abrir la cesta (Ctrl+F2) podemos ir vien-
do qu libros hemos incluido.
Elegimos, por ejemplo, Anotar en cesta: elemento seleccionado F2, salimos
y realizamos otra bsqueda, esta vez por Trozos de palabras del ttulo.
e
Anotamos en la Cesta de Libros aquellos que queramos, o todos, o los se-
leccionados. En este caso nos sale uno solo, y lo anotamos en la cesta.
Si ahora miramos lo que hay en la cesta...
08
Desarrollo completo
de una aplicacin
e
154 155 VELAZQUEZ VISUAL
... veremos que estn los dos libros que hasta ahora hemos introducido. Po-
demos llevar los registros que tenemos en la cesta a la lista de la rejilla en
que result la bsqueda. Para hacer esto tenemos dos maneras: o bien
Mover todos los elementos de la lista o el seleccionado borrndolos de
la cesta, o bien con los botones Selec. permaneciendo en sta.
Con el botn de la derecha podemos llamar tambin al men de contexto y
Traer la cesta completa.
De esta manera podemos imprimir todos los registros usando un Informe.
Si queremos generar un albarn, podemos tener una opcin de men que
lance un proceso que nos lo cree. Para ello creamos un formulario de AL-
BARANES, en el que aparezca una rejilla de histrico de LNEAS, y en el
que un proceso que nos dio de alta un nuevo albarn haya incluido en sus
lneas los libros que incorporamos a la cesta.
e
Mover todos
Mover
Seleccionar todos
Seleccionar
8.5.4. Hoja de clculo
Mediante las hojas de clculo generamos una rejilla de valores, de modo que
las filas se crean automticamente cuando, en tiempo de ejecucin, se ana-
liza la informacin. A una hoja de clculo se le asocia un nombre Descrip-
cin, un Identificador, una Tabla de datos y un Campo generador de filas.
Las hojas de clculo trabajan de dos formas:
Columnas automticas: las columnas se crean en tiempo de ejecucin de-
pendiendo de los diferentes valores que tenga un campo. En este modo he-
mos de definir el campo generador de columnas en la Lista desplegable Co-
lumnas y la Frmula acumulable para el acumulado de la columna.
Columnas no automticas: en este modo la hoja de clculo trabaja con unas
columnas fijas definidas por el diseador. Las columnas se definen en el
Cuadro de lista Columnas, donde se crean y se borran con los botones Nue-
va y Eliminar. Al pulsar el botn Nueva se establece una Etiqueta para la co-
lumna, una Frmula condicional donde se introducir una expresin de tipo
frmula, que tiene que cumplir el registro en curso para ser utilizado por la
hoja, y la Frmula acumulable donde se define la frmula para el acumula-
do de la columna.
08
Desarrollo completo
de una aplicacin
e
Hoja de clculo
156 157 VELAZQUEZ VISUAL
Las hojas de clculo pueden ser visualizadas en diversos modos grficos:
Lneas, Barras verticales, Barras Horizontales, Barras 3Dverticales, 3D Ho-
rizontales, Gant vertical, Gant horizontal, Tartas y Rejilla de valores. Para ello
el usuario debe pulsar, en ejecucin, el botn derecho del ratn sobre el
grfico y obtendr la lista de opciones de visualizacin.
Este objeto podemos usarlo en un Formulario de edicin de fichas o un In-
forme disponiendo de un control especializado en la visualizacin de hojas
de clculo, o como Segunda bala de una opcin de men.
Ejemplo: Hoja de clculo con columnas automticas
Supongamos un proyecto en el que existen dos tablas maestras, ARTICU-
LOS y ALMACENES, y un histrico de ambas que recoge las existencias de
artculos en cada almacn al que hemos llamado EXISTENCIAS. Queremos
crear una hoja de clculo que presente las existencias que se tiene de ca-
da artculo en cada almacn.
Al campo de la tabla Existencias que recoge el stock de un artculo en un
almacn le damos el identificador STOCK.
Puesto que una hoja de clculo se plantea como una serie de filas y co-
lumnas, stas seran:
Almacn 1 Almacn 2 Almacn 3 Almacn 4
Artculo 1
Artculo 2
Artculo 3

Desde la tabla de Existencias se conoce tanto el Artculo como el Almacn


de un registro, por lo que las columnas de la hoja de clculo sern autom-
ticas. Para crear la hoja de clculo seleccionamos en la galera de objetos
e
el objeto Hoja de Clculo , abrindose la ventana de propiedades, en la
que especificamos los parmetros siguientes:
Descripcin: Stock de artculos por almacn.
Tabla de datos: EXISTENCIAS.
Campo generador de filas: ARTCULO.
Activamos la propiedad Columnas automticas.
En Columnas seleccionamos el campo ALMACENES.
Habr que especificar qu campo se ha de acumular en cada columna, s-
te ser el Stock, por lo que la frmula a acumular en cada columna ser el
campo %STOCK%.
Esta hoja de clculo puede ser utilizada como segunda bala de una bs-
queda en la tabla de Existencias disparada desde un men.
Ejemplo: Hoja de clculo manual
Supongamos un proyecto en el que existe una tabla de FACTURAS en la
que se incluye el campo Total, encargado de recoger el total de la factura y
el campo Fecha de la factura. Esta tabla es histrica de la tabla CLIENTES.
Crearemos una hoja de clculo para presentar el total mensual facturado a
cada Cliente.
En la tabla de facturas se conoce el Cliente de cada factura y la fecha de la fac-
tura, pero no se incluye ningn campo que recoja el mes de la misma, por lo
que las columnas tendr que crearlas el programador en tiempo de edicin, es
decir, las columnas sern manuales. Para crear esta hoja de clculo habr que
seleccionar en la galera de objetos el objeto Hoja de Clculo y especificar:
Descripcin: Ventas mensuales por cliente.
Tabla de datos: FACTURAS.
08
Desarrollo completo
de una aplicacin
e
e
Hoja de Clculo
158 159 VELAZQUEZ VISUAL
Campo generador de filas: Clientes.
Columnas: puesto que las columnas han de ser manuales no activaremos
la casilla de columnas automticas. Crearemos una columna para cada mes
del ao, obteniendo de la fecha de la factura en qu mes se acumulan los
totales. Comenzaremos por la columna correspondiente al mes de enero,
para lo cual pulsamos el botn Nueva y especificamos las siguientes pro-
piedades:
Etiqueta: Enero
Frmula condicional: en este parmetro se ha de especificar la frmula que
se ha de cumplir para que se acumule el total de la factura en dicha colum-
na, es decir, que el mes de la factura sea enero. Para ello la frmula sera:
FMes (%FECHA%) = 1
Se utiliza la funcin del asistente de frmulas fMes(fecha), que devuelve el
mes de la fecha pasada como parmetro.
Frmula acumulable: en este parmetro se ha de especificar el campo que
se acumular en esa columna; en este ejemplo, el campo TOTAL.
Aceptamos la columna de hoja de clculo que acabamos de crear.
A continuacin hemos de crear la columna correspondiente al mes de fe-
brero. El proceso ser igual al de creacin de la columna anterior (enero),
e
variando nicamente la etiqueta de la columna y la frmula condicional. La
etiqueta ser Febrero y la frmula ser: FMes (%FECHA%) = 2. Seguimos
de esta manera con el resto de columnas para todos los meses del ao.
Esta hoja de clculo podemos utilizarla como segunda bala de una opcin
de men que dispare como primera bala una bsqueda en la tabla de FAC-
TURAS. Para ver una grfica de las ventas hechas en el ao actual, basta
con disparar una bsqueda en la tabla de FACTURAS que solamente pre-
sente las realizadas el ao en curso.
8.5.5. Base de datos externa ODBC-DAO
Velzquez Visual permite que el diseador declare, dentro del proyecto, ba-
ses de datos externas a las que puede hacer referencia, tanto para impor-
tar como para exportar informacin.
Para que Velzquez Visual pueda acceder a la informacin contenida en las
bases de datos externas, debe existir un motor de bsqueda que contenga
las tablas y consultas. Velzquez Visual ataca la informacin del motor de
bsqueda por medio de los dispositivos ODBC (Open DataBase Connecti-
vity) y DAO (Data Access Objects).
Velzquez Visual es capaz de interpretar la informacin descriptora de ta-
blas y consultas del motor de bsqueda, y puede importar datos usando un
Tubo de importacin, desde una opcin de men.
Tambin es capaz de dar de alta nuevas fichas en las tablas externas me-
diante un Tubo de exportacin, desde un proceso.
08
Desarrollo completo
de una aplicacin
e
Base de datos externa ODBC-
DAO
160 161 VELAZQUEZ VISUAL
Al sealar el icono Base de datos externa ODBC-DAO , Velzquez Visual
muestra un cuadro de dilogo para que sealemos el archivo .MDB que la
contiene. Al sealarla, Velzquez Visual lee e interpreta toda la informacin
guardada en el motor de bsqueda. A partir de ese instante, el diseador
puede acceder a las tablas externas para exportar datos y a las consultas
para importarlos.
Creacin de una tabla de datos igual a una base de datos externa
La opcin Objeto/Crear tabla igual a externa permite crear una tabla de da-
tos de Velzquez igual una base de datos externa incorporada al proyecto.
Para ello hemos de seguir los siguientes pasos:
Posicionamos el cursor sobre la base de datos externa a copiar.
Ejecutamos la opcin Objeto/Crear tabla igual a externa.
Se abrir la ventana Crear nueva tabla interna desde una externa en la que
tenemos las siguientes opciones:
Nombre plural: especificaremos el nombre plural de la tabla.
Nombre singular: el nombre singular de la tabla.
No es posible importar datos
directamente de una tabla
externa, han de importarse
de una consulta.
ADVERTENCIA
Base de datos externa ODBC-
DAO
Maestro: si activamos esta opcin la tabla que vamos a generar va a ser de
tipo maestro normal con clave numrica, si no la activamos la tabla ser de
tipo histrico.
Campo cdigo: especificaremos, de la lista de campos de la tabla de ori-
gen, cul ser el correspondiente al campo Cdigo de la tabla de nuestro
proyecto. Esta opcin estar inactiva si no hemos activado la casilla
Maestro.
Tiene nombre: activaremos esta opcin si la tabla de datos de origen tiene
un campo Nombre.
Campo nombre: aqu se especifica, de la lista de los campos de la tabla ex-
terna, cul es el correspondiente al campo Nombre de la tabla de nuestro
proyecto. Estar desactivada si no se ha activado la opcin anterior.
ndice alfabtico: para crear el ndice alfabtico del campo Nombre en la
nueva tabla.
ndice palabras: para crear el ndice por palabras del campo Nombre en la
nueva tabla.
Una vez aceptado el formulario ya tendremos creada una tabla interna de
Velzquez a partir de la base de datos externa seleccionada. Si ahora qui-
siramos importar los datos de la base de datos externa a la tabla recin
creada, tendramos que hacer uso de los tubos de importacin, que vere-
mos ms adelante.
Ejemplo: creacin de una tabla de datos igual a una base de datos externa
Supongamos un proyecto de Velzquez en el que hemos declarado una ba-
se de datos externa, en la que tenemos dos tablas: CLIENTES Y PEDIDOS.
08
Desarrollo completo
de una aplicacin
Aunque Velzquez Visual
nos permite importar el
cdigo desde una tabla
externa, muchas veces no
podemos conocer la
integridad de los datos que
importamos (cdigos
repetidos, falta de cdigos,
no congruente con el tipo
de cdigo, etc.). Es mejor
que el campo cdigo de
nuestra tabla sea generado
automticamente por
Velzquez Visual y que
guardemos el cdigo que
importamos en otro campo,
que podemos usar para
buscar los enlaces que
tienen los registros.
ADVERTENCIA
e
162 163 VELAZQUEZ VISUAL
Queremos crear una tabla en nuestro proyecto que tenga la misma estruc-
tura de campos y tipos de campos que la tabla CLIENTES de la base de da-
tos externa (supongamos que hacemos esto para, posteriormente, importar
los datos de la tabla CLIENTES de la base de datos externa a la tabla que
vamos a crear).
Para ello seleccionamos la tabla CLIENTES de la base de datos externa y
ejecutamos la opcin de men objetos/crear tabla igual a externa, apare-
ciendo la ventana Crear nueva tabla interna desde una externa.
Rellenamos las propiedades, indicamos que su nombre ser CLIENTES,
que va a ser de tipo maestro (en caso contrario nos creara una tabla de ti-
po histrico), que el campo Cdigo de la tabla de nuestro proyecto se co-
rresponder con el campo Cdigo de la tabla origen, que la tabla de origen
tiene campo Nombre, correspondindose el campo Nombre de la tabla de
nuestro proyecto con el campo Nombre de la tabla origen. Tambin le de-
cimos que nos cree los ndices alfabtico y por palabras.
Si le dijramos que el campo Cdigo de la tabla de nuestro proyecto se co-
rresponde con el campo Nombre de la tabla origen, Velzquez creara en la
tabla CLIENTES de nuestro proyecto un campo Cdigo con las propieda-
des del campo Nombre de la tabla origen (de tipo alfabtico).
Aceptamos la ventana anterior y vemos cmo Velzquez ha creado en
nuestro proyecto la tabla CLIENTES.
e
La tabla CLIENTES tiene los mismos campos que la tabla de origen, longi-
tud, tipo, etc., as como el ndice por el campo cdigo, por el nombre y por
palabras del nombre.
08
Desarrollo completo
de una aplicacin
e
Cuestiones
1. Supongamos que el esquema siguiente es parte de una aplicacin
para una agencia de viajes:
En la tabla COMPAIAS AEREAS guardamos informacin acerca de la
compaa que oferta el vuelo, en VUELOS tenemos informacin acer-
ca de los vuelos que oferta la compaa (hora de salida, hora de llega-
da, precio, etc.), mientras que en PAISES DE DESTINO se indica el
pas al que pertenece la ciudad de destino. Incluir, en un formulario de
164 165 VELAZQUEZ VISUAL
Resumen
Velzquez Visual cuenta con una serie de objetos gracias a los que podemos
trabajar con los datos. stos son: la lupa, el encarpetado de histrico, la ces-
ta de la compra, la hoja de clculo y bases de datos externas ODBC-DAO.
La lupa : Objeto con el que se pueden establecer condiciones de filtrado
en listas.
Encarpetado histrico : los encarpetados de histricos se utilizan en los
formularios para ver la informacin de forma clasificada dentro de una reji-
lla de histrico. Esta clasificacin se realiza encarpetando los registros se-
gn los valores de un determinado campo de la tabla de datos al que lla-
mamos campo subclasificador.
Cesta de la compra : este objeto se utiliza, en tiempo de ejecucin, para
guardar una serie de registros de una tabla de datos para su posterior utili-
zacin en otras partes del programa.
Hoja de clculo : las hojas de clculo generan una rejilla de valores, cren-
dose las filas automticamente cuando, en tiempo de ejecucin, se analiza la
informacin.
Bases de datos externas ODBC-DAO : nos permiten acceder a ficheros
de otras bases a travs del enlazador de bases de datos ODBC-DAO.
8.5.6. Dibujo
Son objetos que contienen un dibujo. Tales dibujos podrn ser incluidos en
distintas partes de un proyecto como son los formularios, los mens de ti-
po formulario, mens arbolados e informes.
El dibujo no puede ser modificado por el usuario final. ste es el motivo por
el que a veces se les denomine dibujos estticos. Los dibujos dinmicos
son los dibujos que el usuario incorpora a la aplicacin en tiempo de eje-
cucin formando parte de sus datos.
Lupa
Encarpetado histrico
Cesta de la compra
Hoja de clculo
Base de datos externas
ODBC-DAO
Dibujo
modificacin de COMPAIAS AEREAS, una rejilla de histrico en la
que podamos ver los vuelos de la compaa segn el pas de desti-
no del vuelo.
2. Crear una cesta de la compra para la tabla VUELOS (de la cuestin
anterior), que nos sirva para ir seleccionando todos los vuelos que
nos interesen de entre los que oferte la compaa area.
3. Tenemos una aplicacin de cine con unas bsquedas en la que se
presentan las pelculas de un cierto director, actor, realizador, etc.
Una vez presentada la rejilla con el resultado de la bsqueda, quere-
mos ser capaces de discriminar entre pelculas en color, en blanco y
negro y mudas. Resolver el problema mediante una lupa.
Una vez que se selecciona un objeto de este tipo en la Galera de Objetos,
aparece la pantalla de edicin. Debemos obtener entonces el dibujo, para
lo que tenemos cuatro maneras: bien crearlo directamente va OLE, bien a
travs del portapapeles, bien importar un fichero o bien va Twain (Escner).
Importacin de dibujos
A travs de OLE: debemos hacer doble clic sobre el rea del editor de di-
bujos, abrindose el programa asociado a Mapa de bits (Bitmap, .BMP) pu-
diendo realizarlo en l. Una vez terminado salimos del programa (sin nece-
sidad de guardar el resultado en un archivo) quedando incrustado en el ob-
jeto. Salimos y este dibujo ya puede ser utilizado en la aplicacin.
Portapapeles: en el caso del portapapeles, usando la opcin del men Edi-
cin/Pegar, tambin podemos importar la imagen. Claro est que el dibujo
debe ser previamente copiado desde otra aplicacin.
08
Desarrollo completo
de una aplicacin
166 167 VELAZQUEZ VISUAL
Una vez ejecutada la opcin se muestra un cuadro de dilogo en el que se
ha de seleccionar la forma en que la imagen va a ser guardada en el pro-
yecto. Tiene las opciones N de bit de color por pxel: 1 (monocromo), 4 (16
colores), 8 (256 colores), 24 (16,7 millones de colores) y Comprimido.
Cuanto mayor sea el nmero de bits de color por pxel, mayor ser la
ocupacin de la imagen en disco, por ello es aconsejable que, si inclui-
mos dibujos en el proyecto, tratarlos previamente con algn programa
de tratamiento de imgenes para guardarlos con una paleta de, al me-
nos, 256 colores antes de incorporarlos al proyecto de Velzquez; la di-
ferencia de calidad es inapreciable, pero el tamao del proyecto dismi-
nuir considerablemente. Adems, si activamos la casilla Comprimido
cuando la imagen tenga una paleta de 8 bits (256 colores) o menos, ha-
remos que el dibujo ocupe menos espacio en disco sin prdida percep-
tible de calidad.
Importacin desde archivo: la tercera opcin se ejecuta desde la opcin del
men Edicin/Pegar desde. La imagen es importada leyendo el fichero se-
leccionado en el cuadro de dilogo Abrir, el cual muestra el contenido de
las unidades de disco del sistema o de la red. Los formatos de archivo po-
sibles son: Mapa de bits (*.bmp, *.dib), Jpeg (*.jpg, *.jpeg), *.pcx y Targa
(*.tga).
Va twain: el cuarto mtodo que hay es va twain, de manera que podremos
obtener imgenes de un escner, una cmara fotogrfica digital y de cier-
tas cmaras de vdeo (para capturar un fotograma). Si tenemos instalados
varios, ejecutamos la opcin Archivo/Seleccionar escner para especificar
el que vamos a utilizar. Para obtener la imagen ejecutamos la opcin Archi-
vo/Digitalizar, y se ejecutar el programa de obtencin de imgenes que
tengamos asignado al dispositivo seleccionado.
Propiedades del dibujo
Una vez obtenida la imagen, si pulsamos la tecla Intro o hacemos doble clic,
editaremos el cuadro de propiedades del dibujo, en el que podremos darle
una descripcin, activarle o desactivarle la Transparencia, asignar el color
de transparencia en el caso de que est activada, y los atributos de la ima-
gen: alto, ancho y bits por pxel.
08
Desarrollo completo
de una aplicacin
Una vez que incluimos un
dibujo como objeto de
Velzquez a partir de un
fichero, ste puede ser
borrado del disco, pues ya
queda almacenado dentro
del proyecto.
TRUCO
Si queremos que un usuario
final de una aplicacin de
Velzquez pueda obtener
imgenes va twain hemos
de ejecutar la opcin
Edicin/Seleccionar fuente
twain para especificar el
dispositivo que va a utilizar; y
para obtener la imagen
ejecutar la opcin
Edicin/Obtener imagen va
twain. Adems para
controles de campos tipo
dibujo de un formulario, el
formulario no puede estar
definido en modo cuadro de
dilogo, slo pueden
obtenerse desde formularios
en modo vista (a pantalla
completa).
ADVERTENCIA
168 169 VELAZQUEZ VISUAL
Velzquez permite visualizar los dibujos con fondo transparente y para ello
habr que utilizar como color de fondo del dibujo uno que no se haya utili-
zado en el mismo. Una vez importado a Velzquez, si activamos la casilla
Transparencia, a continuacin se ha de especificar el color de fondo de
transparencia, apareciendo una ventana con la paleta de colores del siste-
ma. As, cuando se utilice dicho dibujo en un formulario no se ver el fondo
del mismo.
La casilla de Precarga est pensada para la ejecucin de aplicaciones con
el Servidor de Aplicaciones de Velzquez Visual, para que los dibujos sean
cargados o no en el momento de servir la aplicacin a un Cliente. Si no tie-
nen activada la casilla de precarga no sern enviados en el mapa, hacien-
do que pese menos y sea ms rpida su ejecucin, siendo enviados los di-
bujos restantes en tercer plano, sin ralentizar la transferencia de datos. En
el Inspector de objetos por tipo podremos ver la lista de objetos dibujo y si
tienen activada la casilla de Precarga o no.
Si hacemos doble clic con el botn izquierdo del ratn o seleccionamos la
opcin Edicin/Objeto OLE, dicha imagen ser cargada en el programa de
edicin de imgenes que tenga el sistema por defecto.
Identificadores especiales para dibujos
Dibujo ONPASSWORD: si le damos este identificador a un dibujo, Velz-
quez lo utilizar para sustituir al que presenta el Ejecutor por defecto en
el formulario de peticin de Nombre de Usuario y Palabra Clave.
As podemos utilizar nuestro propio logotipo o el de la empresa para la que
se desarrolle una aplicacin final. Para una ptima visualizacin del mismo
es aconsejable utilizar un dibujo de 48x48 pxeles.
Otra forma de convertir un dibujo en ONPASSWORD es seleccionndolo en
el panel derecho y ejecutando la opcin Comunes/Convertir en/Icono usua-
rios. Si deseamos localizar el dibujo creado con este identificador ejecuta-
mos la opcin Comunes/Localizar/Icono usuarios.
Es aconsejable utilizar el
magenta como color de
fondo, pues es un color que
raras veces se utiliza.
TRUCO
Dibujo ONPASSWORD
Dibujo SPLASH: si se da este identificador a un dibujo, Velzquez lo pre-
sentar al ejecutar la aplicacin tras aceptar la ventana de peticin de usua-
rio, antes de presentar el men principal de la misma, mientras se estn ini-
cializando las tablas del proyecto.
Otra forma de convertir un dibujo en SPLASH es seleccionando el objeto en
el panel derecho del editor y ejecutando la opcin Comunes/Convertir en
splash. Para localizar un dibujo que hayamos definido como splash en la
aplicacin ejecutamos la opcin Comunes/Localizar splash.
8.5.7. Multi-Iconos
Es un objeto de tipo dibujo, pero permite editar iconos individuales, aadir
o insertar nuevos iconos, para su posterior utilizacin en objetos tales co-
mo barras de herramientas, rboles visores de tablas arboladas o tablas es-
tticas. Cada dibujo que componga el objeto podr ser tratado de modo in-
dividual, es decir, al hacer doble clic sobre un icono se editar solamente un
icono y no todos los que contengan el dibujo.
Una vez seleccionado el objeto de la Galera de Objetos se pasar autom-
ticamente al Editor de Imgenes, en el que podremos crear los distintos ico-
nos que contendr. Para ello seleccionamos la opcin del editor
Iconos/Aadir y utilizamos alguno de los mtodos para importar un objeto
tipo Dibujo. Cada icono estar numerado, y haciendo doble clic sobre l se
ejecutar el programa de edicin de imgenes que, por defecto, tengamos
definido en nuestro ordenador. Los dibujos que importemos, dependiendo
del objeto para el que se usen, deben tener 4 u 8 bits por pxel y un color
que usaremos como transparencia. Velzquez Visual cambiar la profundi-
dad de color de la imagen y buscar un color de transparencia automtica-
mente, pero si damos Intro sobre el icono veremos las propiedades del ico-
no y podremos modificar ese color.
Tenemos que usar 4 bits por pxel para los mens arbolados y visores de ta-
blas arboladas, separadores de pestaas e imgenes de tablas estticas,
pudiendo importarlas tal y como hacamos con los dibujos. Sin embargo,
para barras de herramientas podemos usar 8 bits por pxel, por lo que no
podremos usar el portapapeles para importarlos, ya que ste nos los con-
vierte automticamente a 4 bits.
08
Desarrollo completo
de una aplicacin
Multi-Iconos
170 171 VELAZQUEZ VISUAL
Para cambiar el tamao de los iconos ejecutamos la opcin Iconos/Tama-
o. Hemos de especificar tanto el ancho como el alto del dibujo. Si ya te-
nemos iconos creados, se redimensionar el espacio que ocupan, ya que
todos tienen el mismo ancho y alto.
Con la tcnica de arrastrar y soltar (drag and drop) podremos mover o du-
plicar un icono dentro del editor de dibujos. Arrastrando con el ratn se mo-
ver la imagen y pulsando la tecla Ctrl mientras se arrastra haremos una co-
pia. Para borrar un icono ejecutamos la opcin Iconos/Eliminar. Tambin
podemos usar los botones cortar, copiar y pegar, para duplicar o
eliminar iconos.
Este objeto podremos usarlo en mens arbolados, visores de tablas arbo-
ladas, barras de herramientas, etc.
Si queremos convertir un objeto de tipo dibujo en un objeto multi-icono, en
el editor de dibujos ejecutamos la opcin Convertir/A multi-iconos. Pode-
mos convertir un objeto multi-icono en un objeto dibujo si ejecutamos la op-
cin Convertir/En dibujo normal.
8.5.8. Imagen Gif
Es un objeto de tipo Dibujo especfico para archivos con formato gif. Para
importar una imagen tenemos que ejecutar la opcin Pegar desde del men
Edicin y buscar en el disco el archivo. La razn de que se pueda guardar
una imagen Gif en un tipo objeto distinto es que permite las imgenes Gif
animadas, pudiendo usar este tipo de objetos en mens o en formularios. Si
importamos una imagen Gif que no sea animada, puede que nos interese
ms hacerlo como objeto dibujo, ya que este tipo de objeto no permite con-
vertir en multi-iconos ni editar las propiedades de transparencia y dems.
8.5.9. Barras de herramientas
Este objeto se utiliza para crear un barra de herramientas personalizada. Es-
tas barras de herramientas se utilizarn en Mens de tipo formulario con
controles de tipo bsqueda rejilla y de rbol. En las bsquedas, sustituyen-
do a la barra de herramientas del ejecutor al presentar la rejilla de resultado.
Y en los procesos, en la funcin Aadir retorno (Lista). En stos asociamos
una barra de herramientas que aparecer en la rejilla que llevan asociada.
No se puede incluir un
objeto de este tipo en un
men que tenga como
identificador AUTOEXEC (es
decir, si es el men que se
autoejecuta al arrancar una
aplicacin de Velzquez
Visual)
ADVERTENCIA
Cortar, copiar y
pegar
Imagen Gif
Barras de herramientas
Propiedades de la barra de herramientas
Cuando se edita un objeto de este tipo aparece un cuadro de propiedades,
en el que especificamos:
Ttulo: el ttulo que tendr la barra de herramientas.
Dibujo botones: muestra el identificador del dibujo multi-iconos que contie-
ne los diferentes iconos para cada botn de la barra de herramientas. Para
cambiarlo tenemos que pulsar el botn , lo que permitir seleccionar el
dibujo multi-iconos que contenga las imgenes de cada uno de los botones
de la barra de herramientas. El color de fondo de dichas imgenes debe ser
gris, como el de todos los botones en Windows.
Comandos: en esta ventana se mostrarn todos los comandos que hayan
sido aadidos a la barra de herramientas. A travs de la barra de botones
de este cuadro de dilogo podremos aadir,
borrar, mover (ordenar arriba y abajo), modificar, cortar, copiar y pegar, y ha-
cer y deshacer comandos.
El botn Propiedades sirve para editar el cuadro de propiedades del co-
mando seleccionado. Cuando se crea un nuevo comando, se abrir el cua-
dro de Propiedades Comando.
Propiedades del comando
En l especificaremos las siguientes opciones:
08
Desarrollo completo
de una aplicacin
Examinar
Propiedades
172 173 VELAZQUEZ VISUAL
Texto Tool Tip: permite al programador personalizar el texto que se ver en
ejecucin al pasar el puntero del ratn encima del botn.
Funcin: podremos seleccionar una de las incluidas en la lista. stas son:
Nula (Separador): incluye un separador en el lugar que se haya especifi-
cado de la lista de comandos.
Formulario Alta: para dar de alta un nuevo registro.
Formulario Baja: para eliminar un registro.
Formulario Modificacin: para editar un registro.
Navegante Maestros: para acceder a los maestros de los registros de la
rejilla actual.
Navegante Histricos de uno: para acceder a los histricos de un regis-
tro determinado de la rejilla actual.
Navegante Histricos de todos: para acceder a los histricos de todos
los registros de la rejilla actual.
Cambiar rejilla: para poder visualizar los registros de la rejilla actual en cualquier
otra rejilla, de la misma tabla de datos, que se haya definido como pblica.
Proceso: para ejecutar un proceso contra todos los registros de la rejilla.
Proceso sobre multiseleccin: para rejillas con multiseleccin. Ejecuta
un proceso que slo actuar sobre los registros que el usuario final ha-
ya seleccionado en la rejilla. Activando una opcin podemos hacer que
se quiten de la rejilla los registros seleccionados una vez ejecutado el
proceso (los quita de la lista, pero no los borra, a no ser, claro est, que
el proceso dispare una funcin de borrado de los registros selecciona-
dos) o que sean desmarcados.
Tubo de ficha: para ejecutar un tubo de ficha desde la rejilla actual.
Tubo de lista: para ejecutar un tubo de lista desde la rejilla actual.
Lupa: permite ejecutar una lupa que hayamos creado en el proyecto (mapa).
Men desplegable: mediante esta opcin podemos disparar otra barra
de herramientas desde un botn. Todos los comandos de la barra in-
cluida sern visualizados en forma de men desplegable.
Comando estndar: permite disparar desde un botn cualquier coman-
do estndar del ejecutor de aplicaciones. Los comandos se mostrarn
ordenados por categoras (archivo, listas, etc.).
Objeto: es el objeto visual que vamos a lanzar. Esta opcin slo estar ac-
tivada en el caso de que la funcin seleccionada sea un proceso, un tubo
de ficha, un tubo de lista, una lupa, un men desplegable o un comando es-
tndar. En ella se especificar el nombre del objeto que usaremos en el co-
mando.
Necesita un Elemento Seleccionado para estar Activo: esta opcin sola-
mente estar activada cuando la funcin seleccionada sea un proceso. Si
se trata de un proceso cuyo origen sea de lista, habr que marcar esta ca-
silla de verificacin para que, en tiempo de ejecucin, el botn est desac-
tivado hasta que el usuario seleccione un registro de la rejilla. Los botones
correspondientes al resto de las funciones sern activados o desactivados
automticamente por Velzquez.
Condicin Activo: este comando permite establecer una condicin para que el
botn que estemos editando se encuentre activo. Para ello, debemos especi-
ficar una frmula pudiendo utilizar el asistente para la edicin de frmulas.
Acelerador de Teclado: permite especificar un acelerador de teclado pa-
ra simular la pulsacin de cada botn. Podremos seleccionar cualquiera
de las siguientes teclas:
Ninguna, retroceso, tabulador, return (intro), escape y espacio.
Todos los nmeros del 0 al 9.
Todas las letras de la A a la Z, excepto la .
08
Desarrollo completo
de una aplicacin
174 175 VELAZQUEZ VISUAL
Todas las teclas de funcin desde F1 a F12.
Shift pulsado: el acelerador ser la tecla Shift ms la tecla seleccionada.
Control pulsado: el acelerador ser la tecla Control ms la tecla seleccio-
nada.
Los aceleradores de teclado que se incluyan en los comandos de la barra
de herramientas prevalecern sobre los del men y sobre los propios de
Windows.
Ejemplo: Barra de Herramientas
Tenemos una base de datos para libros, en la que podemos elegir un autor
y un editor para cada libro. Por tanto, tenemos tres tablas, LIBROS que se-
r histrica tanto de AUTORES como de EDITORES.
Para cada tabla creamos todos los objetos necesarios: rejillas, formularios
de edicin, bsquedas, mens, etc.
Vamos a centrarnos ahora en las Barras de herramientas. Para que las ba-
rras de herramientas que creemos aparezcan a la hora de visualizar las re-
jillas, tienen que ser asignadas en las bsquedas que realicemos. En las
Propiedades de la bsqueda, en Barra de herramientas, elegiremos Perso-
nal, pudiendo escoger una entre las que hayamos creado. Adems, pode-
mos especificar dnde queremos aparcar sta, pudiendo aparecer en eje-
cucin, arriba o abajo, a la izquierda o a la derecha.
e
Vamos a crear una barra de herramientas para esta bsqueda. La barra de
herramientas consta de varios elementos que se componen de: un icono
que ser el que vea el usuario junto con un texto, y una funcin a disparar.
Estas funciones a disparar se realizarn sobre los elementos de la lista, bien
sobre todos ellos o sobre uno seleccionado.
Estas funciones pueden ser tambin nuevas barras de herramientas, pero
stas ya no se mostrarn como dibujos, sino como textos, como un men
contextual del botn.
Vamos a crear una barra de herramientas que denominaremos BASICA
y que tendr cuatro botones con un icono cada uno. A su vez, cada
uno de ellos mostrar, al ser pulsado, un men desde el que podremos
lanzar las funciones, esta vez visualizando los ttulos de stas y no los
iconos.
Tendremos un botn para las funciones de ficha, con las que podremos dar
de alta, modificar o eliminar stas. Tendremos otro botn para las de lista,
en la que podremos cambiar la rejilla con que la vemos, filtrar por cualquier
campo, rebuscar entre los registros de la tabla y multipartir una lista por un
campo. En otra tendremos las funciones de navegacin, pudiendo ir al
maestro de los elementos, a los histricos de stos o a los del selecciona-
do. Por ltimo, podremos con otro botn, imprimir la rejilla en que est in-
crustada la barra.
Creamos primero las cuatro barras que irn en la principal. Se llamarn FI-
CHA, LISTA, NAVEGAR e IMPRIMIR, respectivamente.
08
Desarrollo completo
de una aplicacin
e
176 177 VELAZQUEZ VISUAL
En primer lugar seleccionamos en la Galera de Objetos la Barra de he-
rramientas , aparecindonos un cuadro de dilogo en el que podremos
dar un Ttulo a la barra, por ejemplo Opciones de Ficha.
A continuacin vamos aadiendo las funciones que se dispararn desde es-
te men. Para ello pulsamos el botn Aadir con lo que nos aparecern
la ventana Propiedades Comando. Por ttulo ponemos Alta (Insert), como
Funcin escogemos Formulario Alta y el resto de opciones las dejamos co-
mo estn. No hace falta especificar un acelerador de teclado puesto que
por defecto ya tiene uno que es la tecla Insert (por eso hemos aadido al t-
tulo Insert).
e
Galera de Objetos
Barra de herramientas
Aadir
Aceptamos la ventana y ya tenemos aadido el primer comando. Ahora vol-
vemos a pulsar el botn Aadir e introducimos los otros dos comandos
de ficha que necesitamos: Formulario Modificacin, Formulario Baja. Tam-
poco necesitamos designar una tecla aceleradora ya que tienen por defec-
to una: Espacio o intro, y Suprimir, respectivamente, que aadiremos al t-
tulo del men. Estas funciones Formulario lo que hacen es llamar al formu-
lario que est asignado a la rejilla en sus propiedades, para altas, bajas y
modificaciones.
08
Desarrollo completo
de una aplicacin
e
Aadir
178 179 VELAZQUEZ VISUAL
Ya tenemos, por tanto, la barra FICHA. Vamos ahora con la barra LISTA. A
esta barra aadiremos como funciones la de Cambiar de Rejilla usando co-
mo tecla aceleradora Ctrl+R. Como vamos a aadir tres comandos ms de
naturaleza distinta, aadimos un separador que se incrusta en la barra al
elegir Nula (Separador) como funcin.
Algunos comandos necesitan especificar un objeto a usar como los que
vamos a utilizar a continuacin. Aadimos a la lista dos comandos estn-
dar: Lista: Filtrar y Lista: Rebuscar a los que ponemos como nombres Fil-
trar por cualquier campo (Ctrl+F) y Buscar en los registros de la lista
(Ctrl+B), respectivamente, y como teclas aceleradoras las que indicamos
en el nombre.
e
Introducimos otro separador y por ltimo aadimos otro Comando estn-
dar: Lista: Multi-partir, con lo que completamos la barra de herramientas
LISTA.
08
Desarrollo completo
de una aplicacin
e
180 181 VELAZQUEZ VISUAL
En la barra de herramientas NAVEGANTE incluiremos las funciones: Nave-
gante Maestros, Navegante histricos de todos, Navegante histricos de
uno.
En la barra de herramientas IMPRIMIR incluiremos las funciones: Comando
estndar: Archivo: Especificar informe, Comando estndar: Archivo: Prepa-
rar pgina, Comando estndar: Archivo: Presentar Informe.
Ahora, vamos a crear la barra BSICA. Aqu hemos de escoger un multi-
icono, ya que cada funcin coger un icono de ste para mostrarlo en el bo-
tn de la barra. Podemos crear el multi-icono o traerlo del Almacn. A con-
tinuacin hemos de especificar las funciones que lanzar cada uno de los
botones.
Pulsamos el botn Dibujo botones para cargar un multi-icono que ha-
yamos creado.
De este multi-icono podemos usar uno, varios o todos los dibujos que vie-
nen. Nosotros usaremos los cuatro primeros. Asignaremos estos iconos a
los botones de las barras de FICHA, LISTA, NAVEGAR e IMPRIMIR que
tenemos.
Con el botn Aadir, incluimos la primera barra que ser FICHA, se-
leccionando como Funcin: Men desplegable y escogiendo como obje-
to FICHA.
e
Dibujo botones
Aadir
Al aceptar, vemos que nos coge el primer dibujo para esta opcin. Velz-
quez Visual se encarga de dar un dibujo a cada opcin en orden, de acuer-
do a como fue creado el multi-icono. De esta misma manera aadimos las
otras tres barras de herramientas.
08
Desarrollo completo
de una aplicacin
e
182 183 VELAZQUEZ VISUAL
Ahora ya podemos asignarla a una bsqueda, a un retorno, etc. Por ejem-
plo, la utilizaremos en todas las bsquedas de LIBROS de nuestro mapa. Pa-
ra ello, en el apartado Barra de herramientas escogemos la opcin Personal
y como Barra personal: BASICA que ser la que llame a las otras cuatro.
En la rejilla en que se muestra el resultado de la bsqueda podremos hacer
uso de la barra de herramientas que hemos creado. Pulsando cada uno de
los iconos nos mostrar el men desplegable correspondiente.
En la barra de herramientas podemos llamar a funciones directamente o
bien, como en este ejemplo, a otras barras de herramientas. Estas funcio-
nes, adems de las estndar, podemos ampliarlas llamando a procesos, lo
que hace de stas una herramienta muy potente.
e
Resumen
Velzquez Visual cuenta con una serie de objetos visuales que nos permiten
acceder a elementos o recursos que usaremos a lo largo de la aplicacin. s-
tos son: el dibujo, los Multi-iconos, la imagen gif y la barra de herramientas.
Dibujo : son objetos que contienen un dibujo. Tales dibujos podrn ser
incluidos en distintas partes de un proyecto, como son los formularios, los
mens de tipo formulario, mens arbolados e informes.
Multi-Iconos : es un objeto de tipo dibujo pero que permite editar ico-
nos individuales, aadir o insertar nuevos iconos para su posterior utiliza-
cin en barras de herramientas, rboles visores de tablas arboladas o tablas
estticas.
Imagen Gif : es un objeto de tipo dibujo especfico para archivos con for-
mato gif. Son objetos estticos, es decir, no modificables por el usuario, pe-
ro permiten que la imagen no lo sea ya que admiten gif animados.
Barras de herramientas : este objeto se utiliza para crear un barra de
herramientas personalizada que permita acceder a las opciones por defec-
to o a nuevas funcionalidades.
8.5.10. Impresora lgica
Las impresoras lgicas son objetos que usamos en edicin para imprimir in-
formes y que asociamos a impresoras fsicas en tiempo de ejecucin.
Al pulsar el icono Impresora lgica de la Galera de Objetos, aparece el cua-
dro de dilogo de propiedades de las impresoras lgicas, donde se asigna
un nombre descriptivo a la misma.
En las propiedades de un informe se puede declarar el uso de una impre-
sora lgica. Al hacerlo, se consigue que el informe se imprima siempre, de
forma automtica, a travs de la impresora lgica seleccionada.
Las impresoras lgicas tienen que ser asignadas a una impresora fsica en
tiempo de ejecucin. En ese momento se declara tambin el resto de las ca-
ractersticas asociadas, es decir, la calidad de impresin, el tamao o la
orientacin del papel, el nmero de copias, etc. Estas conexiones son al-
macenadas en un archivo con extensin .VPU.
08
Desarrollo completo
de una aplicacin
Dibujo
Multi-Iconos
Imagen Gif
Barras de herramientas
Impresora lgica
184 185 VELAZQUEZ VISUAL
Tendremos dos opciones, o bien tener impresoras conectadas, es decir, im-
presoras fsicas asignadas a la impresora lgica, con lo que cada vez que
imprimamos un documento que est asociado a esa impresora lgica, au-
tomticamente ser impreso en la impresora conectada; o bien estar des-
conectada, con lo que cada vez que imprimamos el documento nos pre-
guntar por la impresora fsica por la que debe imprimir el documento.
En la ejecucin con VRunner los archivos .VPU son almacenados en el di-
rectorio de la aplicacin; en el entorno cliente-servidor son almacenados en
las carpetas de cach local de cada cliente.
8.5.11. Comunicacin Serie
Este objeto permite establecer comunicaciones va puerto serie a una apli-
cacin de Velzquez Visual.
Sus propiedades son:
Nombre: nombre que deseemos dar al puerto.
Modo Entrada/Salida: podemos elegir entre uno de los tres modos siguien-
te: Sncrono, Asncrono y Asncrono Ex; este ltimo no est soportado por
Windows 95.
Comunicacin Serie
Puerto: nmero del puerto.
Baudios: seleccionamos el nmero que queramos de la lista desplegable.
Bits: nmero de bits a transmitir.
Stop Bits: bits de parada 1; 1,5 o 2).
Paridad: tenemos las opciones Ninguna, Impar, Par, Marca o Espacio.
Apretn de manos (handshake):
0 - No
1 - Xon/Xoff
2 - RTS/CTS (Request-To-Send/Clear-To-Send).
3 - RTS, Xon/Xoff
Estilo Hardware: podremos activar las siguientes opciones:
Destacar bytes nulos
RTS permitido
DTR permitido
Tamao Buffer: tendremos que definir tanto el tamao del buffer de entrada
como de salida.
Sustituir Bytes errneos: si activamos esta opcin podremos especificar a
continuacin el carcter con el que vamos a sustituirlos.
Eventos: si deseamos manejar eventos activamos la opcin Manejar even-
tos, por defecto el Carcter de seal es K.
El manejo de este objeto debemos realizarlo a travs de un proceso, con
ayuda de las funciones que tenemos disponibles en el asistente de creacin
de frmulas. De esta manera podremos abrir y cerrar un puerto, saber cun-
tos bytes hay para leer en el buffer, y leer y escribir en el puerto.
Resumen
Los objetos visuales Impresora lgica y Comunicacin serie de Velzquez
Visual nos permiten comunicarnos con dispositivos perifricos.
Impresora lgica : las impresoras lgicas son objetos que asociamos a
informes para posteriormente indicar qu impresora fsica queremos utilizar
para cada documento. En las propiedades de un informe podemos decla-
rar el uso de una impresora lgica, con el fin de que el informe se imprima
siempre, de forma automtica, a travs de la impresora lgica selecciona-
da y por lo tanto por la impresora fsica a la que est conectada.
08
Desarrollo completo
de una aplicacin
Impresora lgica
186 187 VELAZQUEZ VISUAL
Comunicacin Serie : este objeto permite a la aplicacin establecer co-
municaciones va puerto de serie usando instrucciones de proceso.
8.5.12. rbol Visor de Tablas
Los rboles visores de tablas arboladas se emplean para presentar, en dis-
tintos niveles, la informacin de una tabla de datos Maestra con clave ar-
bolada. Gracias a los rboles vemos la informacin contenida en este tipo
de tablas de una forma grfica (se incluyen lneas, imgenes...), visualizan-
do de forma clara los niveles en los que se encuentra estructurada la infor-
macin.
A este tipo de objetos tambin podemos asignarles formularios para reali-
zar altas, modificaciones y bajas en la tabla de datos con la que se en-
cuentran asociados. Son utilizados en los siguientes objetos:
Formulario: en el control Rama de rbol y en la funcin de botn Localizar
maestro arbolado.
Men: como control rbol y como primera bala en la pistola rbol de tabla
de datos.
Propiedades del rbol Visor de Tablas
Para crear un rbol visor, seleccionamos la tabla de datos arbolada y pul-
samos el botn Nuevo objeto. De la Galera de Objetos seleccionamos
rbol visor de tablas arboladas y aparecer el cuadro de dilogo de Propie-
dades del rbol:
Comunicacin Serie
rbol Visor de Tablas
Sus propiedades son:
Nombre, identificador y tabla de datos: asignamos el nombre y la tabla de
datos asociada al nuevo objeto rbol. Velzquez Visual genera un identifi-
cador por defecto, que aparece en la barra de ttulos del cuadro de dilogo
y en el panel derecho del editor de proyectos junto a su icono correspon-
diente.
Estilo: en el grupo de estilos se definen, mediante unas casillas de verifica-
cin, los tipos de visualizacin para el rbol. Son los siguientes:
Ver lneas: si est activado se visualiza la lnea de puntos que une las ramas
del rbol.
Ver lneas en la raz: si est activado se visualiza la lnea de puntos en el no-
do raz.
Ver botones: si est activado se visualizan los botones + y - que permiten
abrir y cerrar las ramas.
Ver imgenes: si est activado se visualiza en cada nivel los iconos del di-
bujo multi-iconos asignado al rbol.
Ver campo cdigo: si est activado se visualiza el contenido del campo CO-
DIGO del registro en curso.
Eventos: marcando la casilla La seleccin ha cambiado lanzamos un proce-
so (evento) cada vez que pasamos de un registro del rbol a otro. Activan-
do esta opcin habr que especificar un proceso mediante el cual se asig-
ne el valor del campo cdigo de la tabla a una variable en memoria. Esto es
til para la sincronizacin de Controles en mens de tipo formulario. Imagi-
nemos, por ejemplo, una aplicacin en la que tenemos un rbol asociado a
la tabla arbolada MARCAS (de coches), de modo que al seleccionar un ele-
mento del rbol nos aparezca un casillero (sincronizado) con imgenes de
todos los modelos de la marca.
Formularios e Informe:
Formulario alta: formulario asociado para dar altas en la tabla de datos (a la
que est asociada el rbol). En el ejecutor esta opcin se dispara con la te-
cla + (con el foco en la rejilla) o con la tecla Insert.
Formulario modificacin: formulario asociado para modificar un registro en
la tabla de datos. En el ejecutor esta opcin se dispara pulsando la tecla In-
tro sobre la lnea seleccionada.
Formulario bajas: formulario asociado para dar la baja a un registro de la ta-
bla de datos. En el ejecutor esta opcin se dispara pulsando la tecla Supr
sobre la lnea seleccionada.
Informe: informe por defecto que imprime la lista.
08
Desarrollo completo
de una aplicacin
188 189 VELAZQUEZ VISUAL
Cambiar imgenes: al pulsar esta opcin, aparece el cuadro de dilogo Pro-
piedades de una lista de imgenes.
A un rbol se le puede asignar un dibujo multi-iconos, eligindolo de entre
los incluidos en el proyecto que aparecen en la lista desplegable Dibujo. Ca-
da icono que compone el dibujo se visualizar en el nivel respectivo del r-
bol. Si hay ms niveles que iconos se repite el ltimo en cada uno de los ni-
veles que carecen de icono propio.
Uso del rbol Visor de Tablas
Los rboles se disparan desde las opciones de men con la pistola rbol
tabla de datos, o como objeto en un men de tipo formulario. Al ir aadien-
do elementos al rbol, stos se irn colocando segn la clave asignada en
la rama que le corresponde. Si no hay un elemento en el nivel superior si-
gue mostrndose en el nivel que le toca.
Los multi-iconos tienen que
estar formados por
imgenes de 4 bits por pxel.
ADVERTENCIA
8.5.13. Casillero
Es un objeto que sirve para ver listas de registros de las tablas de datos. En
tiempo de ejecucin cada registro es presentado en una celda (casilla),
siendo cada casilla un botn que permite disparar un proceso al hacer clic
sobre l. Adems, podemos asignar otros procesos que sern disparados,
en tiempo de ejecucin, a travs de un men contextual al pulsar con el bo-
tn de la derecha del ratn.
Cuando un objeto de este tipo es incluido como control en un men, en
un formulario o como pistola de men, se solicitar un proceso en el que
determinaremos los registros que se van a presentar. As, por ejemplo,
si lo vamos a utilizar como control o como pistola en un men, el pro-
ceso tendr su origen como NINGUNO. Si lo utilizamos como control de
formulario, el origen del mismo ha de ser una FICHA de la tabla del for-
mulario.
Propiedades
Cuando creamos un casillero se presenta el cuadro de dilogo Propiedades
casillero con las siguientes opciones:
08
Desarrollo completo
de una aplicacin
Casillero
190 191 VELAZQUEZ VISUAL
Nombre: nombre del casillero.
Tabla: identificador de la tabla del casillero.
Fuentes: con la barra de botones de fuentes (en orden de izquierda a dere-
cha) podremos:
Aadir una nueva.
Sustituir la fuente seleccionada por otra.
Eliminar la fuente seleccionada (si la fuente seleccionada est siendo uti-
lizada por algn control del casillero no podremos eliminarla).
Suprimir las fuentes no utilizadas en el casillero.
Desplazar una posicin hacia arriba la fuente seleccionada.
Desplazar una posicin hacia abajo la fuente seleccionada.
Si en Edicin/Fuentes por defecto hemos se-
leccionado algunas para los casilleros, stas estarn disponibles al crear
uno nuevo.
Estilos:
Horizontal: por defecto, en ejecucin, se crean las casillas por columnas.
Si activamos esta propiedad, las casillas sern creadas por filas.
Automtico: si activamos esta propiedad, en tiempo de ejecucin, Velz-
quez distribuir automticamente las casillas en filas y columnas. Si esta
propiedad no es activada, en el proceso que se ha de seleccionar al in-
cluir un casillero como control de men o de formulario, o como pistola de
men, se tendr que establecer un criterio para determinar el nmero de
filas (estilo Horizontal activado) o columnas (estilo Horizontal desactivado).
Pintar lneas: si activamos esta opcin, se pintar una lnea negra para
delimitar los lmites de cada casilla.
Pintar estilo botn: si activamos esta propiedad, cada casilla ser pinta-
da como un botn, si no se mostrar de forma plana.
Color de fondo: en esta propiedad se selecciona el color de fondo que
tendrn las casillas.
Proceso al hacer clic en una celdilla: en esta propiedad seleccionamos el pro-
ceso que ser disparado, en tiempo de ejecucin, cuando un usuario haga
clic en una celdilla. El proceso podr tener su origen tanto en una ficha como
en una lista de la tabla de datos del casillero. Si el proceso tiene su origen en
una FICHA ser alimentado por la ficha de la celda sobre la que se hace clic
y si tiene su origen en una LISTA estar alimentado por toda la lista presen-
tada en el casillero. Para seleccionar o cambiar un proceso hacemos clic so-
bre el botn Seleccionar proceso del cuadro de propiedades del casillero.
08
Desarrollo completo
de una aplicacin
192 193 VELAZQUEZ VISUAL
Men de contexto: adems del proceso a ejecutar al hacer clic en una cel-
dilla, podemos seleccionar otros procesos. stos, en ejecucin, sern pre-
sentados en un men de contexto que se desplegar al hacer clic con el bo-
tn derecho del ratn sobre una celdilla. Para disparar uno bastar con se-
leccionarlo en dicho men contextual. El texto que se presente en el men
de contexto ser la descripcin que hayamos escrito en el mismo. Al igual
que el proceso al hacer clic en una celdilla, stos podrn tener su origen
tanto en una ficha como en una lista de la tabla del casillero. Los procesos
sern presentados en el men de contexto en el orden en que se encuen-
tren en la lista de procesos seleccionados. Para la seleccin de procesos se
incluye la barra de herramientas , en la que podemos:
Aadir: permite aadir un proceso o un separador a la lista. Para aadir
un separador bastar con seleccionar la opcin del mismo nombre que
aparece en primer lugar en la lista de procesos seleccionables.
Suprimir: suprime el proceso o separador seleccionado de la lista de
procesos.
Subir: desplaza una posicin hacia arriba el proceso o separador seleccionado.
Bajar: desplaza una posicin hacia abajo el proceso o separador seleccionado.
Cambiar proceso: permite cambiar el proceso seleccionado por otro.
Frmula condicin: aqu establecemos la frmula que se ha de cumplir
para que este proceso pueda ser disparado desde el men contextual.
Un proceso podr ser editado directamente desde la ventana de edicin de
procesos que se abre cuando lo aadimos o sustituimos en un proceso de
la lista. Para ello basta con seleccionar uno y pulsar el botn Editar.
Para editar las propiedades de un casillero hay que seleccionarlo en el pa-
nel derecho y pulsar la combinacin de las teclas Alt+Intro o pulsar el bo-
tn Propiedades de la barra de herramientas del Editor de Proyectos.
Tambin podremos editar dichas propiedades desde el Editor de Casilleros,
haciendo doble clic o pulsando Intro sobre cualquier parte del rea del Edi-
tor de Casilleros.
Editor de casilleros
Una vez creado el casillero, modificamos el identificador y hacemos doble
clic sobre el mismo para entrar en el Editor de casilleros. Es similar al Edi-
tor de Formularios: consta de una barra de herramientas para la creacin de
controles, una barra de maquetacin y el rea de edicin del casillero.
Lo que hemos de crear es una casilla. El rea de la casilla se muestra con
el color de fondo definido en el cuadro de propiedades del casillero. Para
modificar sus dimensiones basta con hacer clic sobre cualquier punto de la
misma donde no se encuentre ningn control, y arrastrando los manejado-
res o con Shift y las teclas de movimiento del cursor, al igual que con los
formularios.
Propiedades
Controles
Los distintos controles que encontramos en un casillero son:
Modo de edicin: restaura el puntero del ratn para cancelar la selec-
cin de un control. Este modo se usa para mover los controles o cambiar
sus tamaos.
Dibujo esttico: sirve para insertar un dibujo en la casilla. En sus Pro-
piedades slo habr que seleccionar el dibujo que queramos de la lista de
dibujos incluidos en el proyecto. El dibujo podr presentarse con o sin bor-
de, pudiendo escoger, adems, el efecto hundido o a nivel. Para redimen-
sionar el dibujo a su tamao original pulsamos la tecla F7. Tambin pode-
mos asignarle una Condicin visible. Si activamos esta opcin se abrir el
asistente para la edicin de frmulas, donde escribiremos la frmula que se
ha de cumplir para que el control sea visible.
Texto esttico: sirve para insertar un texto en la casilla. Sus propiedades
son:
Texto: texto que se incluir en la casilla.
Fuente: fuente, de las seleccionadas en las propiedades del casillero, con
la que se presentar el texto.
Color texto: color con el que se presentar el texto.
Color fondo: color de fondo del control del texto esttico. Si activamos el
estilo Fondo transparente, esta opcin estar desactivada.
08
Desarrollo completo
de una aplicacin
Modo de edicin
Dibujo esttico
Texto esttico
194 195 VELAZQUEZ VISUAL
Alineamiento del texto: el texto podr estar alineado, con respecto a los
mrgenes del control, a la Izquierda, Centrado, a la Derecha o Justificado.
Tamao: ste podr ser Fijo (invariable), de Ancho variable (el ancho variar
en funcin del tamao de la casilla), de Altura Variable (el alto del control va-
riar en funcin de la altura de la casilla) o con Ambos variables.
Estilos: al control podremos activarle las siguientes propiedades:
Borde: en tiempo de ejecucin se pintar un borde alrededor del control.
Hundido: si activamos esta propiedad se presentar el control con un efec-
to de hundido.
Fondo transparente: no se pintar el color de fondo del control.
Condicin visible: si activamos esta opcin se abrir el asistente para la edi-
cin de frmulas, en ella tendremos que escribir la frmula que se ha de
cumplir para que el control sea visible.
Campo: visualiza el contenido de un campo en la casilla. Sus propieda-
des son:
Campo: aqu seleccionamos el campo a visualizar en el control, para lo que
pulsamos el botn Cambiar: dependiendo del campo seleccionado, pode-
mos formatear su salida utilizando el asistente para la creacin de subca-
denas de formato.
Fuente: fuente, de las seleccionadas en las propiedades del casillero, con
la que se presentar el texto.
Color texto: color con el que se presentar el texto.
Color fondo: color de fondo del control. Si activamos el estilo Fondo trans-
parente, esta opcin estar desactivada.
Alineamiento del texto: el contenido del campo podr estar alineado, con
respecto a los mrgenes del control, a la Izquierda, Centrado, a la Derecha
o Justificado.
Tamao: ste podr ser Fijo, de Ancho variable, de Altura Variable o con
Ambos variables.
Estilos: al control podremos activarle las siguientes propiedades:
Borde: en tiempo de ejecucin se pintar un borde alrededor del control.
Hundido: si activamos esta propiedad se presentar el control con un efec-
to de hundido.
Fondo transparente: no se pintar el color de fondo del control.
Campo
Condicin visible: si activamos esta opcin se abrir el asistente para la edi-
cin de frmulas, en ella tendremos que escribir la frmula que se ha de
cumplir para que el control sea visible.
Variable global: sirve para visualizar el contenido de una variable global.
Sus propiedades son:
Variable: aqu seleccionamos la variable global a visualizar en el control. Pa-
ra seleccionar la variable pulsamos el botn Cambiar.
Fuente: fuente, de las seleccionadas en las propiedades del casillero, con
la que se presentar el texto.
Color texto: color con el que se presentar el texto.
Color fondo: color de fondo del control. Si activamos el estilo Fondo trans-
parente, esta opcin estar desactivada.
Alineamiento del texto: el contenido de la variable podr estar alineado, con
respecto a los mrgenes del control, a la Izquierda, Centrado, a la Derecha
o Justificado.
Tamao: ste podr ser Fijo, de Ancho variable, de Altura Variable o con
Ambos variables.
Estilos: al control podremos activarle las siguientes propiedades:
Borde: en tiempo de ejecucin se pintar un borde alrededor del control.
Hundido: si activamos esta propiedad se presentar el control con un efec-
to de hundido.
Fondo transparente: no se pintar el color de fondo del control.
Condicin visible: si activamos esta opcin se abrir el asistente para la edi-
cin de frmulas, en ella tendremos que escribir la frmula que se ha de
cumplir para que el control sea visible.
Objeto Dibujo: este control visualiza el contenido de un campo de tipo
objeto Dibujo. Sus propiedades son:
Campo: aqu seleccionamos el campo de tipo objeto dibujo a visualizar en
el control. Para seleccionar el campo pulsamos el botn Cambiar. Sola-
mente se presentarn aquellos que sean de tipo dibujo.
Tamao: ste podr ser Fijo (invariable), de Ancho variable (el ancho va-
riar en funcin del tamao de la casilla), de Altura Variable (el alto del
control variar en funcin de la altura de la casilla) o con Ambos varia-
bles.
Estilos: al control podremos activarle las siguientes propiedades:
08
Desarrollo completo
de una aplicacin
Variable global
Objeto Dibujo
196 197 VELAZQUEZ VISUAL
Borde: en tiempo de ejecucin se pintar un borde alrededor del control.
Hundido: si activamos esta propiedad se presentar el control con un efec-
to de hundido.
Condicin visible: si activamos esta opcin se abrir el asistente para la edi-
cin de frmulas, en ella tendremos que escribir la frmula que se ha de
cumplir para que el control sea visible.
Icono: sirve para visualizar el icono de un campo enlazado a una tabla es-
ttica a la que se le haya asignado un dibujo Multi-iconos. Sus propiedades son:
Campo: aqu seleccionamos el campo enlazado con una tabla esttica pul-
sando el botn Cambiar. Solamente se presentarn aquellos que estn en-
lazados con una tabla esttica a la que se le haya asignado un dibujo mul-
ti-iconos en sus propiedades.
Estilos: al control podremos activarle las siguientes propiedades:
Borde: en tiempo de ejecucin se pintar un borde alrededor del control.
Hundido: si activamos esta propiedad se presentar el control con un efec-
to de hundido.
Condicin visible: si activamos esta opcin se abrir el asistente para la edi-
cin de frmulas, donde escribimos la frmula que se ha de cumplir para
que el control sea visible.
Maquetacin de controles
Para maquetar los controles de un casillero hay que tener seleccionados,
dependiendo de los casos, uno, dos o ms controles.
En la parte superior de la pantalla se encuentra la barra de maquetacin de
controles, cuyo funcionamiento es igual que con los formularios:
Los cuatro primeros botones alinean los controles seleccionados
por los bordes izquierdo, derecho, superior e inferior, respectivamente, del
control seleccionado en ltimo lugar.
Los dos siguientes centran los controles horizontal y verticalmente,
respectivamente, dentro del men.
Los dos siguientes espacian tres o ms controles a la misma distan-
cia horizontal y vertical entre ellos, respectivamente.
Estos dos alinean los botones seleccionados horizontal o vertical-
mente con respecto al que haya sido seleccionado en ltimo lugar.
Los tres ltimos dan a varios controles el mismo ancho, el mismo
alto y el mismo ancho y alto, respectivamente, del control seleccionado en
ltimo lugar.
Icono
Alinear
Centrar
Espaciar
Adjuntar
Dimensionar
Adems de estas formas de maquetacin, existen dos opciones en men
Maquetar/Alinear, que son:
Vertical: centra verticalmente todos los controles seleccionados con res-
pecto a la posicin del ltimo.
Horizontal: centra horizontalmente todos los controles seleccionados con
respecto a la posicin del ltimo.
Por ltimo, Tamao del contenido F7 nos redimensionar el control al ta-
mao de lo que contiene. Adems, la posicin y las dimensiones de un con-
trol se mostrarn en la barra de estado.
Ejemplo: Casilleros
En proyecto tenemos una tabla ARTICULOS cuyos registros queremos
mostrar en un casillero. Vamos a ver dos formas de hacerlo: lanzarlo a tra-
vs de un men arbolado y en un formulario de su maestro FAMILIAS. En
los dos casos usaremos Casilleros alimentados por un proceso. El proceso
es el que ser distinto ya que, en el segundo caso, dependiendo de la Fa-
milia los registros que presentar sern distintos.
En el primer caso partimos de un men arbolado. En l incluiremos una op-
cin que llamaremos Casillero alimentado por proceso. El proceso es el que
describimos a continuacin y que llamaremos ARTICULOS-CASILLERO:
El origen ser nulo, como obliga el hecho de lanzarlo desde un men. Car-
gamos la lista de ARTICULOS por FAMILIAS y a continuacin, mediante
una funcin Aadir Retorno, devolvemos los resultados al casillero final-
mente. As tendremos un casillero en el que se vern ordenados por Fami-
lia (su maestra) los Artculos.
08
Desarrollo completo
de una aplicacin
e
198 199 VELAZQUEZ VISUAL
Ahora vamos a disear el Casillero: seleccionamos el objeto de la Gale-
ra de Objetos , entrando entonces en la ventana Propiedades Casilleros.
Daremos un nombre al casillero (Artculos) y lo asignaremos a su tabla (AR-
TICULOS). Si tenemos unos tipos de letra elegidos por defecto para los ca-
silleros, podremos escogerlos al editarlo, si no, debemos aadir los tipos
que necesitemos. Aqu tambin debemos seleccionar los procesos asocia-
dos al casillero. Podemos asociar un proceso a una pulsacin con el botn
izquierdo del ratn, o bien una serie de procesos al men contextual que se
despliega al pulsar con el botn derecho.
En este ejemplo haremos que al pulsar con el botn izquierdo del ratn nos
aparezca un formulario de edicin del artculo. Pero de momento vamos a
editar el casillero, luego volveremos con el proceso. Aceptamos y nos en-
contramos con un editor parecido al del formulario.
e
Casillero
Galera de Objetos
En la celda que tenemos que disear insertamos un control para mostrar
el nombre del artculo, otro para mostrar una foto de ste y por ltimo uno
con el precio. Podemos incluir los que queramos, pero debemos tener en
cuenta que ser una celda de un cierto tamao, y que su contenido debe
ser legible.
Salimos para crear el proceso que asociaremos al botn izquierdo del ratn
sobre una celda, que es bien sencillo. Entramos en la Galera de Objetos y
seleccionamos un proceso. Ponemos como descripcin Editar celda de
casillero de artculos, el origen del proceso ser Ficha (el Artculo que pul-
samos) y la tabla asociada Artculos.
Como lnea de proceso nicamente incluimos: Pedir formulario. Como Iden-
tificador formulario de edicin de Artculos escogeremos uno que hayamos
08
Desarrollo completo
de una aplicacin
e
Proceso
200 201 VELAZQUEZ VISUAL
creado y que sea de solo lectura, pues tal y como lo estamos haciendo no
vamos a editar la ficha. No necesitamos cumplimentar el otro parmetro ya
que no vamos a realizar nada ms en el proceso.
Salimos del proceso, y ponemos un identificador a ste, por ejemplo, AR-
TICULOS-CAS-EDIT. Volvemos al casillero y asociamos el proceso a ste
pulsando el botn Seleccionar proceso.
e
Al pulsar el botn nos aparece una ventana en la que seleccionamos el pro-
ceso que acabamos de crear.
Ahora ya tenemos el proceso que alimenta el casillero, el casillero y un pro-
ceso que se dispara al pulsar un casillero. No necesitamos nada ms.
Vamos al men arbolado de Artculos que tengamos creado (tambin po-
dramos hacerlo en un men tipo formulario), editamos la Carpeta subgru-
po y pulsamos Aadir.
08
Desarrollo completo
de una aplicacin
e
Aadir
202 203 VELAZQUEZ VISUAL
En esta nueva Opcin de men tendremos que poner un Ttulo (Casillero), usar
la Pistola Casillero que ser la que nos lance el objeto, como Bala usaremos el
proceso que hemos creado para alimentar el casillero (ARTICULOS-CASILLE-
RO) y por ltimo especificamos la 2 Bala que ser el Casillero que hemos hecho.
e
No necesitamos modificar ninguna propiedad ms. Ahora, aceptamos, y en
la ventana Carpetas subgrupos de men escogemos el icono que usaremos
para esta opcin usando los botones Icono anterior, Icono siguiente.
Aceptamos todas las ventanas y probamos la aplicacin.
En ejecucin, en el men arbolado tendremos, bajo el ttulo de Artculos, las
diferentes opciones, entre ellas Casillero. Pulsamos dos veces sobre la op-
cin para que sta se despliegue.
El casillero aparecer ocupando toda la ventana del ejecutor, siendo Velz-
quez Visual el que se encargue de dimensionar las celdas y el nmero de
ellas para que encajen en ella.
08
Desarrollo completo
de una aplicacin
e
Icono anterior, Icono
siguiente
204 205 VELAZQUEZ VISUAL
Vamos ahora con el segundo caso: lanzar el casillero desde un formulario.
Para usar un casillero en un formulario de Familias que es maestro de Art-
culos, el proceso que alimenta el casillero debe tener como origen la ficha
de Familias.
En el proceso cargamos el histrico de la ficha de Familias (Cargar histri-
co -> ARTICULOS, FAMILIAS) y devolvemos la informacin por medio de la
funcin de proceso: Aadir Retorno > ARTICULOS,.Ninguna,. Lo llamare-
mos FAMILIAS-CASILLERO.
En el formulario de Familias podemos aadir un separador de pestaas que
incluya un subformulario con un Casillero alimentado por proceso. ste ten-
dr como parmetros en la pestaa General: Procesos: FAMILIAS-CASI-
LLERO (el proceso que acabamos de crear), Tablas: ARTICULOS (la tabla
e
de la que mostrar registros el casillero) y por ltimo Casilleros: ARTICULOS
(el casillero que vamos a mostrar).
En la pestaa Estilos podemos elegir las opciones de Ancho y alto variables
para que se adapten al tamao del formulario y ya lo tenemos listo.
En ejecucin, el casillero mostrar los artculos de la familia en el subfor-
mulario de la pestaa, adaptando el tamao de las celdas y el nmero de
stas en funcin de su tamao.
8.5.14. Agendizador
Este objeto permite agendizar una tabla de datos de Velzquez Visual, esto
es, en tiempo de ejecucin se presentar un calendario y una rejilla, de mo-
08
Desarrollo completo
de una aplicacin
e
Agendizador
206 207 VELAZQUEZ VISUAL
do que cuando el usuario seleccione una fecha en el calendario se presen-
tarn en la rejilla los registros encontrados que tengan dicha fecha. Lgica-
mente, la tabla de datos de Velzquez deber tener al menos un campo de
tipo FECHA.
Si, por el contrario, los registros tienen dos campos tipo Fecha que repre-
sentan un intervalo de tiempo, el Agendizador puede presentar todos aque-
llos registros en cuyo intervalo de fechas dado est incluida la fecha que se-
leccionamos en el calendario.
Sus propiedades son:
Nombre: nombre que damos al agendizador.
Tabla de datos: tabla de datos a agendizar (debe tener al menos un campo
de tipo fecha).
Modo: los diferentes modos ya estn predefinidos en Velzquez. stos son:
Fecha nica: para localizar los registros que contengan la fecha seleccionada.
Intervalo de fechas (ambos inclusive): para localizar los registros entre lmi-
tes de fechas. Para ello la tabla necesitar, al menos, dos campos de tipo
fecha, uno que contenga la fecha inicial y otro que contenga la fecha final.
Por ejemplo una tabla de Reservas de hoteles; si un cliente reserva una ha-
bitacin del 1 al 3 de enero de 1999, al consultar la agenda el usuario final,
dicha reserva aparecer cuando, en el calendario, seleccione el 1, el 2 o el
3 de enero de 1999.
Campo fecha inicial: sea cual sea el modo seleccionado siempre habr que
especificarlo. Presenta todos los campos de tipo fecha de la tabla de datos
del agendizador. Hemos de seleccionar uno.
Campo fecha final: esta opcin solamente estar activada cuando hayamos
seleccionado el modo Intervalo de fechas (ambas inclusive). Presenta todos
los campos de tipo fecha de la tabla de datos del agendizador. Selecciona-
mos uno de ellos, obviamente, tendr que ser diferente del seleccionado en
el parmetro anterior.
Rejilla: presenta todas las rejillas de la tabla de datos del agendizador. Se-
leccionamos la necesaria.
Variable Fecha Seleccionada: en este parmetro elegimos la Variable Global
de tipo fecha que hemos creado para mover a ella la fecha seleccionada en
el calendario.
Fuente del calendario: esta opcin permite especificar la fuente a utilizar pa-
ra presentar el calendario.
Color Texto / Color fondo: aqu especificamos el color del texto y del fondo
del calendario.
8.5.15. Informe
Los informes se utilizan para presentar en papel una lista de registros de
una tabla de datos. Los registros a imprimir son los que forman parte de la
lista en curso, los cuales pueden haber sido obtenidos como resultado de
una bsqueda simple o de una compleja combinacin de consultas, filtra-
dos, reordenaciones, etc.
En el Ejecutor, en la opcin Archivo/Especificar informe, disponemos de to-
dos los informes asociados a la tabla de datos en curso, de modo que po-
demos utilizarlos para imprimir la lista de la rejilla actual o bien podemos
asignar un informe por defecto para cada rejilla, que se lanzara automti-
camente al mandar imprimir la rejilla. Tambin podemos lanzar informes
desde un Proceso, pudiendo encadenar unos con los siguientes sin que el
usuario lo note.
Iniciando el Asistente para informes
Para la creacin de informes empezaremos usando el asistente. Para ello
pulsamos el botn Nuevo objeto y de la Galera de Objetos elegimos Infor-
08
Desarrollo completo
de una aplicacin
Informe
208 209 VELAZQUEZ VISUAL
me para impresora. Aparecer un cuadro de dilogo en el que tendremos
tres opciones:
Ninguno: se ejecutar directamente el Editor de informes.
Asistente para informes: para crear de forma rpida y sencilla un informe.
Incluye diferentes plantillas.
Asistente para etiquetas: para crear de forma rpida y sencilla un informe de
etiquetas.
Asimismo, hemos de seleccionar la tabla para la que queremos generar el
informe, y especificar el nombre que tendr.
Elegimos Asistente para informes, apareciendo la primera ventana del
asistente. La forma de crear uno es muy sencilla, basta con seguir los pa-
sos que el propio asistente va indicando.
Seleccin de campos
En este primer paso hemos de seleccionar los campos que vamos a incluir
en el informe.
Para aadir campos al informe hacemos doble clic sobre los mismos en la
lista de Campos disponibles, o bien pulsamos el botn de la barra de
botones. Cuando hacemos esto Velzquez Visual nos lleva al siguiente
campo. Para borrar un campo de la lista de Campos seleccionados usare-
mos el botn y para ordenar un campo de cara al informe usaremos los
botones . Debemos recordar que cuando escogemos un campo en-
lazado, lo que presentamos es el cdigo en la tabla enlazada, pero pode-
mos presentar datos de ese campo enlazado abriendo el rbol.
Una vez hayamos terminado pulsamos el botn Siguiente , apare-
ciendo la segunda ventana del asistente.
08
Desarrollo completo
de una aplicacin
Aadir
Suprimir
Subir, bajar
210 211 VELAZQUEZ VISUAL
Agrupar y Ordenar
Supongamos que hace falta un informe para presentar los registros de la ta-
bla LINEAS DE ALBARAN del siguiente esquema de tablas:
Entramos en el asistente de creacin de informes y en la primera ventana
seleccionamos los campos de la tabla LINEAS DE ALBARAN que van a
aparecer en el informe (esto se correspondera con el punto anterior). Pul-
samos el botn siguiente, y en la segunda ventana seleccionamos el cam-
po Cliente. De este modo podemos generar cambios de seccin en el in-
forme cada vez que Velzquez se encuentre con un cambio en el conteni-
do del campo, es decir, lneas de distintos clientes. Se dice que estamos
agrupando las lneas por el campo Clientes (esto no quiere decir que se pro-
duzca un salto de pgina). Al agrupar por el campo podemos forzar a que
en la siguiente seccin, en la que aparecen las lneas del siguiente cliente,
se creen nuevos encabezados o pies con el nombre del nuevo cliente. Si
queremos que adems se produzca un salto de pgina, hemos de selec-
cionar ste en un pie de grupo.
Por otro lado, tambin establecemos el orden de aparicin de los clientes
en el informe. En este caso, irn apareciendo los clientes ordenados por el
campo Cdigo. Si queremos que, para cada cliente, las lneas aparezcan
ordenadas por el cdigo de la lnea, agruparamos tambin el campo cdi-
go de la lnea, indicando el orden que queramos (puede ser el campo cdi-
go, importe, cantidad...).
Para aadir un agrupamiento pulsaremos el botn , para editarlo pulsa-
remos el botn , para borrarlo pulsaremos el botn y para desplazar
un agrupamiento usaremos los botones .
Una vez hayamos terminado pulsar el botn Siguiente.
Distribucin y Orientacin
En este paso debemos especificar la distribucin de los campos en el in-
forme y la orientacin del papel.
Las distribuciones pueden ser:
08
Desarrollo completo
de una aplicacin
Aadir
Propiedades
Suprimir
Subir, bajar
212 213 VELAZQUEZ VISUAL
En columnas: presentar los registros como si fuera una rejilla, en la que las
filas sern los registros y las columnas los campos.
Ficha: los datos se presentarn como un formulario, por medio de fichas en
las que en cada una irn todos los campos de un cierto registro.
La orientacin del papel puede ser vertical u horizontal, segn deseemos.
Una vez especificados ambos, pulsamos el botn Siguiente.
Estilos
El asistente presenta una serie de estilos, cada uno aplica diferentes fuen-
tes a ttulos, detalle y pies del informe.
Tenemos los estilos Compacto, Corporativo, Formal, Gris, Informal, Negrita,
Tebeo, que usan fuentes que suelen venir por defecto.
Finalizacin del asistente
Tras la seleccin del estilo pulsamos el botn Finalizar para terminar con el
Asistente de Informes. En el panel derecho del Editor de proyectos apare-
cer el informe que acabamos de crear. Para cambiar su identificador, pul-
samos la tecla F2.
Para editarlo pulsamos Intro o hacemos doble clic con el botn izquierdo
del ratn, apareciendo la pantalla de edicin de informes.
Para borrar un informe basta con seleccionarlo y pulsar la tecla Supr o pul-
sar el botn de la barra de herramientas.
Ms adelante veremos cmo funciona el Editor de Informes.
Asistente para la creacin de etiquetas
La forma de crear el informe es muy sencilla, basta con seguir los pasos que
el propio asistente va indicando. En primer lugar hemos de seleccionar el
formato del papel de etiquetas a utilizar.
08
Desarrollo completo
de una aplicacin
En un informe se pueden
incluir datos de la tabla
seleccionada y de sus tablas
maestras, pero no de sus
tablas histricas. Por
ejemplo, para imprimir un
encabezado de factura y sus
lneas, el encabezado es
maestra de lneas, por lo
que la tabla del informe ha
de ser la de lneas de
factura. O si estamos
listando los libros de un
autor, la tabla del informe ha
de ser la de los libros,
siendo el encabezado, el
autor, maestro de libros.
ADVERTENCIA
Suprimir objeto
214 215 VELAZQUEZ VISUAL
Se presenta una lista con diferentes tipos de papel de etiquetas, donde se
indica la marca y nmero de referencia, el alto y ancho de una etiqueta y el
nmero de columnas por fila.
Si no encontramos el tamao de etiqueta adecuado, seleccionaremos en la
lista de etiquetas Personalizar y definiremos el alto y ancho de la misma.
Si queremos guardar nuestras etiquetas personalizadas, iremos al archivo
metrica.ave que se encuentra en el directorio donde tenemos instalado Ve-
lzquez Visual: Atica\program y donde podemos aadirlas. El archivo es de
tipo texto, y podemos editarlo con cualquier herramienta simple de texto.
Debemos escribir entre comillas, y separados por una coma, el nombre de
la etiqueta, el ancho en milmetros, el alto en milmetros y el nmero de co-
lumnas.
Por ejemplo, tenemos una etiqueta que llamaremos Personalizada 1, con
ancho de 50.5 mm, alto 30 mm y 4 columnas de etiquetas. Escribiremos en
una lnea del archivo: Personalizada 1, 50.5, 30, 3. De esta manera,
cuando abramos de nuevo el Asistente para creacin de etiquetas nos mos-
trar la nuestra.
Seleccionamos la que vamos a usar y pulsamos Siguiente.
Seleccin de la fuente y el color
En este paso hemos de seleccionar una fuente, su tamao y el color con el
que va a ser impresa. Se incluye una muestra en pantalla de la fuente se-
leccionada con el tamao y color seleccionados.
Al presentarnos las fuentes, nos muestra todas las que tenemos nosotros
en nuestro sistema, pero debemos tener en cuenta que no tienen por qu
08
Desarrollo completo
de una aplicacin
216 217 VELAZQUEZ VISUAL
ser las que tenga el usuario final. Por eso tenemos que escoger un tipo de
letra que sea estndar o proveer al usuario de las fuentes que usemos al
instalar la aplicacin final.
Seleccin de campos
En este paso hemos de seleccionar los campos que vamos a incluir en la
etiqueta al igual que hacamos con el Asistente para informes. A la derecha
de la ventana se muestra una simulacin de una etiqueta, en la que, con las
teclas del cursor arriba y abajo, podremos seleccionar la fila donde quere-
mos incluir cada campo. En una misma fila podremos incluir ms de un
campo o un texto.
Para aadir un campo basta con hacer doble clic sobre el mismo en la lis-
ta de Campos disponibles, o seleccionarlo y pulsar el botn de la barra
de botones. ste ser incluido en la fila seleccionada en la etiqueta. Para
eliminar una fila ya creada pulsamos el botn .
Para desplazar un campo lo seleccionamos en la lista de Campos seleccio-
nados y pulsamos los botones para desplazarlo una posicin arriba
o abajo.
Si queremos incluir un texto en la etiqueta, seleccionamos en la etiqueta la
posicin donde queremos aadir y pulsamos el botn . Se abrir un pe-
queo cuadro de dilogo, en el que hemos de escribir el texto.
Una vez hayamos terminado pulsamos el botn Siguiente.
Agrupar y Ordenar
De nuevo podemos agrupar y ordenar las etiquetas segn alguno de los
campos que tengamos en la tabla asignada. Al igual que antes, los agrupa-
mientos fuerzan rupturas en el informe por el cambio del contenido de un
campo. Estas rupturas pueden provocar nuevos encabezados o pies.
Aadir
Suprimir
Subir, bajar
Aadir texto
Para aadir un agrupamiento pulsaremos el botn , para editarlo pulsa-
remos el botn , para borrarlo pulsaremos el botn y para desplazar
un agrupamiento usaremos los botones .
Finalizacin del asistente
Una vez creados los agrupamientos pulsamos el botn Finalizar para termi-
nar con el Asistente de Etiquetas. En el panel de objetos aadidos apare-
cer el informe que acabamos de crear. Para cambiar su identificador, pul-
samos la tecla F2.
Para editarlo pulsamos Intro o hacemos doble clic con el botn izquierdo del
ratn, apareciendo la ventana de edicin. Veremos ms adelante cmo editar.
Propiedades del Informe
Una vez tenemos creado un informe o unas etiquetas, ejecutando la opcin
de men Objetos/Propiedades, o las teclas Alt+Intro o el botn correspon-
diente de la barra de herramientas, se presenta un cuadro de dilogo con
las propiedades del informe.
08
Desarrollo completo
de una aplicacin
Aadir
Propiedades
Suprimir
Subir, bajar
218 219 VELAZQUEZ VISUAL
Velzquez Visual genera un identificador por defecto, que aparece en la ba-
rra de ttulos del cuadro de dilogo y en el panel derecho del editor de pro-
yectos. Este identificador puede ser modificado por el diseador.
Las propiedades del informe se presentan a continuacin:
Nombre: nombre que queremos dar al informe. Ser el que aparezca a la
hora de elegirlo en las rejillas.
Columnas de detalle: especificamos el nmero de columnas que tiene la
seccin de detalles.
Tabla: tabla de datos asociada al informe.
Impresora lgica: permite seleccionar una de las impresoras lgicas defini-
das en el proyecto para que el informe siempre sea lanzado a la impresora
fsica que el usuario final conecte a la misma en tiempo de ejecucin.
Privado: si activamos esta opcin, en tiempo de ejecucin el informe no
estar visible en la lista de la opcin Especificar informe del men Ar-
chivo.
Diluir resto pgina: cuando se imprime un informe, si una seccin o los con-
troles a imprimir son demasiado altos y no caben en el espacio disponible
en la pgina, pasan a ser impresos en la pgina siguiente, lo que puede pro-
vocar que en la pgina anterior quede un gran espacio en blanco desde la
ltima lnea impresa hasta el final de la misma. Si activamos esta opcin se
espaciar verticalmente lo que se va a imprimir en la pgina anterior con el
fin de evitarlo.
Papel apaisado: si activamos esta propiedad, cuando el informe sea lanza-
do ser impreso de forma apaisada. Si no activamos, el informe ser im-
preso en formato de papel vertical.
Encolumnar vertical: para imprimir informes con varias columnas de detalle
(etiquetas, por ejemplo). En vez de imprimir los registros por filas los impri-
me por columnas.
Mrgenes:
Por defecto: al informe que le hayamos aplicado esta propiedad se le
aplicarn los mrgenes que el usuario haya definido por defecto en el
ejecutor.
Ninguno: en este caso slo se le aplicarn los mrgenes mnimos de la im-
presora. Estos mrgenes son invariables y el usuario final no podr modifi-
carlos en el Ejecutor de proyectos.
Fijos: de este modo se aplicarn los mrgenes que hayamos definido en la
creacin del informe. Son invariables y el usuario final no podr modificar-
los en el Ejecutor.
En la parte inferior de la ventana de propiedades figuran las fuentes que uti-
lizaremos en el informe. Disponemos de botones para aadir, sustituir o eli-
minar fuentes.
Editor de Informes
Las partes fundamentales de un informe son: uno o varios Encabezados, la
seccin de Detalle (que obligatoriamente ha de aparecer, aunque no se use)
y uno o varios Pies.
Podemos establecer una condicin para que una seccin determinada se
imprima. Para ello seleccionamos el informe, entrando en el editor de infor-
mes. Ahora seguimos los siguientes pasos:
Marcamos la seccin del informe en la que queremos incluir la condicin.
Seleccionamos la opcin Seccin de la barra de men.
Seleccionamos la subopcin Condicin.
Se abrir la ventana del Asistente de Frmulas, en la que escribiremos la
frmula de condicin.
Tambin podemos asociar un proceso a una seccin. ste ser disparado
cada vez que la seccin sea impresa. El proceso ha de tener su origen en
una ficha de la tabla de datos asociada al informe.
Encabezados
Hay tres tipos de Encabezados: Encabezado del informe, Encabezado de
pgina y Encabezado de Agrupamiento.
08
Desarrollo completo
de una aplicacin
La presentacin preliminar
de un informe es tambin
una impresin, por lo tanto,
los procesos asignados a las
secciones tambin sern
ejecutados en el momento
de presentar el informe en
pantalla.
ADVERTENCIA
220 221 VELAZQUEZ VISUAL
Para declarar cualquiera de estas cabeceras, la seleccionamos en la opcin
Secciones del men principal.
El Encabezado del informe se imprime, si existe, al inicio del informe. En l
detallaremos los datos que queramos imprimir en el encabezado de la pri-
mera hoja del informe. Podemos forzar un salto de pgina tras la salida del
encabezado del informe, haciendo doble clic sobre el punto que aparece a
la izquierda del texto indicador Encabezado del informe. El punto es susti-
tuido por una letra P.
El Encabezado de pgina se imprime al comienzo de cada una de las pginas.
El Encabezamiento de agrupamiento se imprime cuando cambia el conteni-
do del campo por el que hayamos declarado el agrupamiento.
Lneas de Detalle
En la seccin Detalle se especifica la manera de presentar la informacin de
un registro de la tabla de datos de origen. Se imprimirn tantas lneas como
registros tenga la lista. Si el total de las lneas de detalle a imprimir es ma-
yor que el tamao del papel, se forzar un salto de pgina continuando en
la hoja siguiente.
En esta seccin es posible forzar un salto de pgina en cada lnea de deta-
lle, haciendo igual que en el Encabezado de informe: pulsamos en el cua-
dro que est a la izquierda del ttulo de seccin.
Pies
Hay tres tipos de pies: Pie de informe, Pie de pgina y Pie de agrupamien-
to. Para declarar cualquiera de estos pies, lo seleccionamos en la opcin
Secciones del men principal.
El Pie de informe se imprime, siempre que est declarado, al final del infor-
me. En l detallaremos los datos que queramos imprimir en el pie de la l-
tima hoja del informe.
El Pie de pgina se imprime al final de cada una de las pginas.
El Pie de agrupamiento aparece al imprimir la ltima lnea de detalle de un
agrupamiento. Aqu podemos forzar para que se produzca un salto de p-
gina haciendo doble clic en el cuadro a la izquierda del ttulo del Pie de
Agrupamiento, momento en el que aparecer una P.
Regla
08
Desarrollo completo
de una aplicacin
222 223 VELAZQUEZ VISUAL
La Regla se encuentra en la parte superior de la pantalla, bajo la barra de
controles. Por defecto se presenta en pulgadas, pero podemos visualizarla
en centmetros seleccionando la opcin Ver/Regla en centmetros. Para vi-
sualizar de nuevo la regla en pulgadas, ejecutamos la misma opcin.
Podemos ayudarnos con ella para establecer la anchura del informe. Para
ello hacemos clic sobre la lnea que representa el margen derecho de la p-
gina y, sin soltar el botn del ratn, la arrastramos hacia la posicin que de-
seemos.
A travs de la marca de alineacin de la regla , y con ayuda de los boto-
nes de maquetacin que veremos ms adelante, podremos alinear entre s
controles de distintas secciones.
Propiedades comunes de los controles
En el Editor de informes, si hacemos doble clic sobre cualquier control del
mismo se abrir el cuadro de Propiedades control de informe.
Alineacin de la regla
Este cuadro tiene tres pestaas que son comunes a todos los controles: Es-
tilos, Aspecto y Fuentes informe, en las que encontraremos una serie de op-
ciones que podrn ser activadas segn el tipo de control de que se trate. Ade-
ms, contiene una o dos pestaas adicionales especficas de cada control.
Veamos las pestaas comunes:
Estilos: existen las opciones siguientes:
08
Desarrollo completo
de una aplicacin
224 225 VELAZQUEZ VISUAL
Altura variable: activada esta opcin no tendremos que controlar la altu-
ra del control para que se impriman todas las lneas, sino que el nmero
de lneas se calcular automticamente al imprimir el informe.
Puede partirse: activada esta propiedad, si el contenido del control a im-
primir no va a caber entero en una pgina, ser partido, es decir, se im-
primir parte en la pgina actual y parte en la pgina siguiente. til para
controles de tipo objeto texto, objeto dibujo y texto o rejilla de histrico.
Actualmente es una opcin no operativa.
Condicin visible: si activamos esta opcin se abrir el asistente para la
edicin de frmulas, donde escribiremos la frmula que se ha de cum-
plir para que el control sea visible.
Cadena de formato de la fecha: podremos determinar el formato de la fe-
cha por medio de etiquetas que iremos aadiendo con el botn Aadir
formato. Tenemos todas las opciones que explicamos en el Asistente pa-
ra la creacin de cadenas de formato.
Aspecto: esta pestaa contiene las opciones:
Fuente: elegimos el tipo y tamao de letra de entre los que hayamos es-
pecificado en las propiedades del informe.
Alineamiento: tenemos Horizontal y Vertical del control con respecto a su
marco. En el primero podemos alinear el contenido a la Izquierda, a la
Derecha, al Centro o Justificado. En el segundo podemos ajustar el tex-
to a la parte Superior, Inferior, en la Lnea base, Multilneas (obligatorio si
queremos que se presenten varias lneas, ajustando entonces a la parte
superior) y centrado Vertical.
Separador de miles: si se trata de un campo numrico activaremos esta
opcin si queremos que sea impreso con separador de miles.
N decimales: si se trata de un campo numrico, nos permitir especifi-
car el nmero de decimales que deseemos imprimir.
Borde: nos permite establecer bordes superior, inferior, izquierdo y/o de-
recho a un control, con el grosor de lnea que se especifique.
Colores: tanto para el fondo como para el texto del control.
Fondo transparente: el control que tenga esta propiedad activada ser
impreso con fondo transparente; es decir, los controles que se encuen-
tren bajo el fondo del control sern visibles. As podremos, por ejemplo,
superponer texto sobre dibujos.
Fuentes de informe: en esta pestaa podremos modificar las fuentes que
son accesibles para los controles del informe. Con los botones de la barra
podremos:
Aadir una nueva fuente.
Sustituir la fuente seleccionada.
Suprimir la fuente seleccionada.
Suprimir las fuentes que no estn siendo utilizadas en el informe.
Subir y Bajar la fuente una posicin.
Controles
Los controles se encuentran situados bajo la barra de herramientas. Para si-
tuar un control en un informe hacemos clic sobre el botn correspondiente,
arrastramos el ratn hasta la posicin del informe donde queremos situarlo
y pulsamos el botn izquierdo del ratn para soltarlo. Haciendo doble clic
sobre un control podremos especificar sus propiedades. Disponemos de
los siguientes controles:
Modo de edicin: restaura el puntero del ratn para cancelar la selec-
cin de un control. Este modo se usa para mover controles o cambiar sus
tamaos.
Dibujo esttico: sirve para insertar un objeto dibujo en el informe. En
la pestaa Dibujo tendremos que seleccionar el dibujo que queramos de
la lista de identificadores de dibujos incluidos en el proyecto, pudiendo
previsualizarlo en la parte derecha de la ventana. Para redimensionar el di-
bujo una vez incrustado en el informe a su tamao original pulsamos la te-
cla F7.
08
Desarrollo completo
de una aplicacin
Aadir
Sustituir
Suprimir
Suprimir
Subir y Bajar
Modo de edicin
Dibujo esttico
226 227 VELAZQUEZ VISUAL
Figura: sirve para insertar figuras, lneas, curvas, etc., en el informe. En
la pestaa Figura, especfica de este control, podremos seleccionar:
Tipo de figura: las figuras predeterminadas son: lnea vertical, lnea horizon-
tal, rectngulo, rectngulo redondeado y crculo.
Grosor de lnea: especificaremos un nmero que indicar el grosor (en pun-
tos) de la lnea.
Colores de Lnea: color que tendr la lnea de la figura. Por defecto es el negro.
Figura
Relleno?: activaremos la opcin de que el control tenga un color de relleno.
Color de Relleno: por defecto el color de relleno de la figura es blanco (nin-
guno), para cambiarlo activamos esta opcin y seleccionamos un color pa-
ra el relleno.
Texto esttico: sirve para aadir texto esttico al informe. En las propie-
dades generales slo hemos de escribir el texto que queremos presentar.
Hemos de escribir directamente, sin utilizar comillas ni operadores para
concatenar, pues se trata de una cadena de formato.
Pgina-Fecha: permite concatenar textos y variables para mostrarlas en
el informe. Incluye formateadores de fechas, horas, nmero de pginas, n-
mero de elementos, etc. Las propiedades que podemos escoger son:
Texto: podremos escribir un texto y aadir las variables de sistema que que-
ramos. Para obtenerlas, elegimos en el combo la que queremos poner y
pulsamos el botn Aadir. Se trata de una cadena de formato, as que no
tendremos que escribir el texto entrecomillado ni utilizar el signo + para
concatenarlo a los formateadores.
08
Desarrollo completo
de una aplicacin
Texto esttico
Pgina-Fecha
228 229 VELAZQUEZ VISUAL
Ejemplo
Si queremos que en el pie de pgina aparezca Pgina 1 de 8, en este con-
trol tendramos que escribir: Pgina %P de %T. Cada vez que necesitemos
aadir una nueva variable, la seleccionamos de la lista desplegable y pul-
samos el botn Aadir, de modo que si necesitamos que aparezca la hora
(por ejemplo), pulsamos la variable del combo Hora (0-23), apareciendo en
el texto %H.
Campo: este control imprime el contenido de un campo del registro en
curso. Una vez que situamos el control en el informe, slo tendremos que
especificar el Campo a imprimir de la lista de campos que se presenta. Una
vez seleccionado pulsamos el botn Aceptar.
e
Campo
Objeto texto: este control imprime el contenido de un campo tipo Obje-
to Texto del registro en curso.
Una vez que situamos el control en el informe, se abrir un cuadro de di-
logo en el que se mostrar la lista de los campos de este tipo de la tabla de
datos a la que est asociada el informe y de sus tablas enlazadas. Selec-
cionamos el que queramos incluir y pulsamos el botn Aceptar. Una vez he-
cho esto, podemos volver a editar las propiedades del control y cambiar el
que hemos elegido por otro.
08
Desarrollo completo
de una aplicacin
Objeto Texto
230 231 VELAZQUEZ VISUAL
En la pestaa Aspecto, puesto que este control ha de imprimirse en varias
lneas, tendr que ser definido como Multilneas en Alineamiento del texto:
Vertical.
Activando la opcin Altura variable en la pestaa Estilos no tendremos
que controlar la altura del control para que se impriman todas las lneas,
sino que el nmero de lneas se calcular automticamente al imprimir el
informe.
Objeto Dibujo: este control imprime el contenido de un campo tipo Ob-
jeto Dibujo del registro en curso. Una vez situado el control en el informe,
se abrir un cuadro de dilogo en el que se mostrarn todos los campos de
este tipo de la tabla de datos a la que est asociada el informe. Seleccio-
namos el campo que queramos y pulsamos el botn Aceptar.
Un Objeto Dibujo tiene dos pestaas en el cuadro de dilogo de propieda-
des, una para cambiar el objeto al que est referido y otra que nos permite
activar las siguientes opciones:
08
Desarrollo completo
de una aplicacin
Objeto Dibujo
232 233 VELAZQUEZ VISUAL
Modo de visualizacin: podemos elegir entre Encoger/Estirar rea comple-
ta (ocupa todo el rea que asignemos al objeto), Tamao original, Tamao
original centrado, Encoger/Estirar proporcionado (asigna todo el rea que
pueda pero sin distorsionar la imagen) o Mosaico.
% Zoom: tanto por ciento de zoom.
Alineamiento del dibujo: puede ser Horizontal (Izquierda, Centrado, Dere-
cha) y Vertical (Superior, Centrado, Inferior).
Cuando diseamos un informe en el que incluiremos campos de tipo Obje-
to Texto y campos de tipo Objeto Dibujo con la propiedad Altura variable ac-
tiva, Velzquez Visual actuar de forma inteligente en su composicin, en
funcin de la altura que vaya a tener cada uno de los controles.
Objetos Dibujo y Texto: este control permite agrupar un control de tipo
Objeto Dibujo y otro de tipo Texto. Es decir, crea un control nico con am-
bos objetos, lo que permitir una ptima presentacin de los mismos en el
informe.
Al crearlo nos pide seleccionar el campo tipo Objeto Dibujo que queremos
imprimir. Una vez situado el control sobre el informe, al editar sus propie-
dades, aparecer el cuadro de Propiedades de controles de informes en el
que podremos elegir el Objeto Texto queremos incluir.
08
Desarrollo completo
de una aplicacin
Objetos Dibujo y Texto
234 235 VELAZQUEZ VISUAL
Para seleccionar el campo de tipo Objeto Texto tenemos que pulsar el bo-
tn Cambiar, que se encuentra bajo el control que muestra el identificador
del campo de tipo objeto texto. De la lista de campos de tipo objeto texto
que aparece escogeremos el que necesitemos.
En funcin de la anchura del control y del propio dibujo cambiar la forma
en que se vayan a presentar ambos controles en el informe:
Si hay anchura suficiente para imprimir el dibujo y el texto, se imprimir el
texto a la izquierda y el dibujo a la derecha.
Si no hay anchura suficiente para imprimir el dibujo y el texto, el dibujo se
presentar centrado y el texto debajo.
Clculo: este control permite imprimir el resultado de un clculo defini-
do en el informe. Seleccionaremos uno de la lista de clculos que se mues-
tra al crear un control de este tipo.
Variable global: este control permite imprimir el contenido de una varia-
ble global definida en el proyecto. Una vez situado el control sobre el infor-
me tendremos que seleccionar qu variable global queremos imprimir de
las de la lista que se muestra en pantalla.
El resto de las propiedades
no estn disponibles en la
versin actual. Velzquez
Visual compone
automticamente la forma en
que ambos controles van a
ser impresos (el texto a la
izquierda y el dibujo a la
derecha). Por tanto, aunque
se muestra la pestaa
Objeto Dibujo, no estn
activas sus opciones.
ADVERTENCIA
Clculo
Variable global
Una vez posicionado el control, pulsando con el botn de la derecha del ra-
tn podemos editar las propiedades.
Frmula: este control permite incluir una frmula en la seccin en la que
la utilicemos. Por ejemplo, en el detalle podemos realizar operaciones en-
tre campos, siendo stas realizadas por cada lnea de detalle. Podemos
08
Desarrollo completo
de una aplicacin
Frmula
236 237 VELAZQUEZ VISUAL
utilizar el Asistente para la edicin de frmulas pulsando el botn Asisten-
te frmula.
En el parmetro Tipo resultado especificaremos cul va a ser el resultado de
la operacin; podr ser un nmero, una fecha o una cadena (alfabtico).
Cdigo de barras: este control permite imprimir el contenido de un campo
o de una frmula utilizando uno de los tipos permitidos de cdigo de barras.
Sus propiedades son:
Cdigo de barras
Tipo de cdigo: seleccionaremos uno de los soportados por Velzquez Vi-
sual. stos son: Ean 13, Ean 8, UPC, Code 39, Code 39 Extend, Interleaved
2 of 5, Code 128 (Cdigo normalizado por los bancos y cajas de ahorros pa-
ra documentos financieros), Code 11, Codabar.
Color de barras: el color con el que queremos imprimir las barras (por de-
fecto es el negro).
Zoom: si queremos imprimir el cdigo de barras al 100% de su tamao o a
un tamao menor.
Para editar la frmula que calcula el cdigo de barras tenemos la pestaa
Frmula en las propiedades, desde la que podemos llamar al Asistente de
Edicin de frmulas.
Rejilla de histrico: esta funcin nos permite ver una rejilla de una ta-
bla histrica de la tabla asociada al informe. La primera pestaa del cua-
dro de propiedades del control es Histrico, que tiene las siguientes pro-
piedades:
Histrico: en este control seleccionamos la tabla de datos histrica de la
asociada al informe que queremos imprimir.
Seleccin: seleccin de los registros histricos a imprimir, pueden ser todos
o slo los que se encuentren entre los lmites que especifiquemos.
Todos: activada esta opcin se imprimirn todos los histricos del registro
en curso.
08
Desarrollo completo
de una aplicacin
Rejilla de histrico
238 239 VELAZQUEZ VISUAL
Para poder determinar los registros que aparecern, el ndice que enlaza las
dos tablas (y que se encuentra en la tabla histrica) debe tener un compo-
nente ms, que ser por el que discriminemos los registros. Tendremos que
establecer tanto el Lmite inicial como el Lmite final, pudiendo usar para ello
el Asistente para la edicin de frmulas.
Ejemplo
Tenemos una tabla de Clientes y una tabla de Tareas. Un Cliente tiene mu-
chas Tareas, y una Tarea tiene un Cliente. Clientes es Maestra y Tareas es
su histrica: la relacin singular-plural va de Clientes a Tareas. Por tanto, Ta-
reas tiene un ndice llamado CLIENTES que es el que enlaza la tabla con su
maestra. Aadimos al ndice un componente que puede ser, por ejemplo, el
campo Fecha de la Tarea. Ahora, al crear un informe asignado a la tabla de
Clientes, podemos presentar las tareas de un cliente, pero discriminadas
segn la fecha. Por ejemplo, podemos imprimir las tareas a realizar para el
cliente en la fecha de hoy, usando como Lmite Inicial y Lmite Final la fecha
del da, con ayuda de la funcin fHoy().
La segunda pestaa del cuadro de propiedades se denomina Rejilla y pre-
senta la propiedad Rejilla, control en el que seleccionamos la rejilla con la
que imprimiremos los registros de la tabla histrica seleccionada.
e
En el informe se imprime la rejilla seleccionada, por lo que se utilizarn los
colores de cabeceras de fondo y texto de cabeceras, cuerpo y pie, as co-
mo las fuentes definidas en la rejilla.
Grfico: este control permite que imprimamos una hoja de clculo de
una tabla de datos histrica de la tabla de datos asociada al informe. El
contenido del mismo cambiar en funcin de la seccin en la que est si-
tuado. Las propiedades de la pestaa Histrico son:
Histrico: tabla de datos histrica de la tabla de datos a la que hemos aso-
ciado el informe, para la que hemos definido con anterioridad un objeto Ho-
ja de clculo.
08
Desarrollo completo
de una aplicacin
En el caso de que
posicionemos este control
en el Detalle, nos mostrar
los histricos de la tabla a la
que est asignada el
informe. Sin embargo, si lo
llevamos al Encabezado o el
Pie de Pgina nos mostrar
una lista de registros del
maestro, por lo que nos
pedir una rejilla de ste
para mostrar los datos.
ADVERTENCIA
Para una correcta
presentacin del informe
daremos al control una altura
mnima y le activaremos la
opcin Altura variable. Esto
permite que el control ocupe
solamente la altura que
necesite.
TRUCO
Grfico
240 241 VELAZQUEZ VISUAL
Seleccin: podemos elegir Todo (todo el histrico del registro maestro que
se imprima), y si no un Lmite inicial (lmite a partir del cual se comenzar a
tomar en cuenta los datos del histrico para la generacin de la hoja de cl-
culo), y un Lmite final (lmite hasta el que se comenzar a tomar en cuenta
los datos del histrico para la generacin de la hoja de clculo).
En la pestaa Grfico tendremos que elegir la hoja de clculo que queremos
usar de las asignadas a la tabla histrica. Las propiedades de la pestaa
son:
Hojas de clculo: identificador de la hoja de clculo de la tabla histrica.
Tipo de grfico: que vamos a imprimir (lneas, gant, barras, etc.).
Fuente: la que vamos a usar de entre las especificadas en las propiedades
del informe.
Ver ttulos filas: si queremos que se impriman los ttulos de las filas.
Ver ttulos columnas: si queremos que se impriman los ttulos de las columnas.
Ejemplo: Grfico
Tenemos de nuevo una tabla de Clientes y una tabla de Tareas. Tareas es
histrica de Clientes y tenemos una Hoja de Clculo que nos dice cuntas
tareas fueron realizadas por cliente por mes. En un informe de clientes, in-
troducimos un control Grfico en el Detalle al que le asignamos como his-
trico TAREAS por el ndice CLIENTE. Decimos que los lmites sean dos va-
riables a las que daremos un valor en un proceso. En la pestaa Grfico es-
cogemos la hoja de clculo que habamos creado y elegimos el tipo de gr-
fico a presentar y si queremos ver los ttulos.
Ahora tenemos un informe para un cliente, en el que vemos en un grfico
las tareas por mes realizadas para ste, entre dos fechas escogidas a tra-
vs de un proceso.
Secuencias de escape: este control nos permite enviar secuencias de
escape directamente a la impresora, tales como, por ejemplo, apertura de
cajn. Como nico parmetro se solicita la secuencia de bytes. Segn la
impresora de que se trate, los bytes correspondientes a cada cdigo varia-
rn. Podremos especificar tantos bytes como necesitemos y para separar
los bytes podremos utilizar: coma (,), punto (.), dos puntos (:), punto y coma
(;) y la barra de divisin (/). Estos cdigos deben ser introducidos en base
10 (decimal).
08
Desarrollo completo
de una aplicacin
La situacin de un control
de este tipo en un informe
no determina el orden de
envo de datos a la
impresora. Windows manda
primero los cdigos de
escape y luego el informe,
con lo que no podemos
contar con que se lance
dependiendo del lugar en el
informe que lo pongamos.
Para situaciones en las que
necesitamos un corte de
papel, un cierto comando
de la impresora en cierta
parte del documento, etc.,
debemos usar las
propiedades del driver de la
impresora.
ADVERTENCIA
e
Secuencias de escape
242 243 VELAZQUEZ VISUAL
Para utilizar fuentes de impresora debemos ejecutar la opcin Archivo/Es-
pecificar impresora y seleccionar la impresora sobre la que vayamos a dis-
parar el informe. No todas las impresoras admiten fuentes de impresora. Sin
embargo, el uso de este tipo de fuentes es necesario, por ejemplo, para in-
formes lanzados en impresoras de ticket. Aunque no tengamos la impreso-
ra instalamos el controlador y con ste ya tenemos los datos necesarios pa-
ra usar sus tipos de letra.
Una vez seleccionada la impresora, podremos aadir al informe fuentes pro-
pias de dicha impresora. Se distinguirn por tener delante el smbolo .
Ejemplo: Secuencias de escape
Un informe, para una TPV marca BPM GIGANT, que abra el cajn e impri-
ma el informe. En el encabezado del informe situamos, en primer lugar, una
secuencia de escape para la apertura del cajn. A continuacin podemos
situar los dems controles del encabezado.
Para la impresora de este ejemplo los cdigos sern: 27, 80, 0.
Para el resto de los controles (textos estticos, campos, etc.) utilizaremos
un tipo de fuente estndar de la impresora.
Clculos
Se encuentran situados en el men Edicin/Clculos. Aqu podemos definir
todos los clculos que forman parte del informe. Tambin se dar el caso
de necesitar nuevos Agrupamientos, que podremos crear en el men Edi-
cin/Agrupamientos.
En el caso de trabajar con
un TPV (terminal punto de
venta: una expendedora de
tickets), el visor (pantalla de
la TPV) debe estar
conectado al mismo puerto
que la impresora.
ADVERTENCIA
El hecho de trabajar con las
fuentes propias de una
impresora de texto se
justifica en que la impresin
ser ms rpida. Pero con
stas tambin surge un
problema, que es el de la
tabulacin. El orden que han
de seguir los controles en un
informe, para que no d
problemas la impresora,
tiene que ser el orden de
tabulacin propio de la
impresora, es decir, de
izquierda a derecha y de
arriba abajo. Para
asegurarnos de que sea as
tenemos que ir cortando y
pegando de nuevo cada
uno de los controles en
orden.
ADVERTENCIA
e
Fuentes propias de la impresora
Los clculos se guardan en variables locales al informe y se realizan en tiem-
po de ejecucin empleando las expresiones frmula definidas. En estas ex-
presiones podemos incluir campos de la tabla de datos origen o de cual-
quiera de las enlazadas con sta. Suelen utilizarse para clculos en pies to-
talizadores.
Al aadir o modificar un clculo se presenta la ventana Definicin clculo de
informe, donde les asignaremos un nombre y un identificador al igual que el
resto de los objetos de Velzquez Visual.
En la opcin Inicializar en especificaremos dnde se debe inicializar el cl-
culo en tiempo de ejecucin. Podemos inicializarlo al principio del informe
(el clculo se pondr a 0 solamente al principio del informe) o, si hemos de-
finido agrupamientos, al principio de un agrupamiento, siendo aconsejable
08
Desarrollo completo
de una aplicacin
244 245 VELAZQUEZ VISUAL
en este caso incluir en el informe la seccin de Pie del Agrupamiento, aun-
que no se imprima ningn dato en ella. En Frmula introducimos cualquier
expresin algebraica o booleana. Para ms comodidad disponemos del
Asistente para la edicin de frmulas. El estilo puede ser Absoluto o no. Si
es Absoluto, el clculo tomar el resultado de la frmula para cada registro,
si no lo es, el clculo se har acumulando los resultados de todos los re-
gistros.
Para utilizar un clculo en el informe seleccionamos el control Clculo si-
tuado en la barra de controles, lo pegamos en la posicin deseada, hacien-
do doble clic sobre l para obtener sus propiedades y elegimos, en la lista
desplegable Clculo, el identificador correspondiente al clculo que quere-
mos incluir.
Un clculo puede ser utilizado en distintas secciones e incluso varias ve-
ces en la misma seccin. Cuando utilizamos los clculos en el pie de un
informe o de una seccin para totalizar una columna, el programa crea au-
tomticamente una nueva variable local, llamada igual que el clculo pe-
ro precedida de los caracteres T$. Estas variables locales podemos utili-
zarlas en las lneas de detalle del informe para realizar diversos clculos
estadsticos.
Ejemplo: creacin de un informe con clculos
Tenemos un proyecto para VENTAS de CLIENTES (CLIENTES es maestro
de VENTAS, y queremos presentar un informe como el que sigue:
VENTAS A CLIENTES
Fernando Fernndez Fernndez
1/1/97 100.000
2/5/97 50.000
Total: 150.000
Gonzalo Gonzlez Gonzlez
2/2/97 25.000
5/2/97 5.000
Total: 30.000
e
Enrique Enrquez Enrquez
22/10/97 200.000
26/12/97 250.000
Total: 250.000
1/1/97 100.000
2/5/97 50.000
Total: 150.000
TOTAL VENTAS: 430.000
Seleccionamos el objeto Informe para impresora de la Galera de objetos y
lo asociamos a la tabla de VENTAS.
Necesitaremos Encabezado de informe (para situar el ttulo del mismo) y un
Pie de informe (para incluir el total general de ventas) y un Encabezado de
agrupamiento. Ejecutamos la opcin Secciones/Cabecera de informe para
crear la seccin de Encabezado de Informe. Ejecutamos la opcin Seccio-
nes/Pie informe para crear la seccin de Pie de Informe.
08
Desarrollo completo
de una aplicacin
e
246 247 VELAZQUEZ VISUAL
Puesto que queremos agrupar las ventas por cliente, tendremos que crear
un agrupamiento. Ejecutamos la opcin Edicin/Agrupamientos.
Se abrir la ventana Ordenar y Agrupar. En ella pulsamos el botn Aadir y
seleccionamos, de la lista de campos, el campo NOMBRE del cliente
(%CLIENTES.NOMBRE%) y seleccionamos Orden ascendente (as se im-
primirn los clientes ordenados alfabticamente por su nombre). Puesto
que queremos imprimir por cada cliente su total de ventas correspondien-
te, activamos las opciones Encabezado y Pie.
e
Veamos ahora cmo hemos de crear los clculos:
Clculo del total general de ventas: ejecutamos la opcin Edicin/Clculos
y pulsamos el botn Aadir en la ventana Clculos de un informe. Como
Nombre escribimos Total ventas y como Identificador TOTAL VENTAS. Lo
iniciaremos en el principio del informe y como frmula especificamos sim-
plemente el campo %TOTAL% de la tabla. Dejaremos sin activar la opcin
Absoluto, con lo que acumular todas las cantidades de todas las ventas
de la lista. Si la activramos el resultado del clculo sera el contenido del
campo %TOTAL% de la ltima lnea del informe.
08
Desarrollo completo
de una aplicacin
e
248 249 VELAZQUEZ VISUAL
Clculo del total de ventas por cliente: ejecutamos la opcin Edicin/Cl-
culos y pulsamos el botn Aadir en la ventana Clculos de un informe. Co-
mo Nombre escribimos Ventas Cliente y como Identificador VENTAS
CLIENTE. Lo inicializamos en la seccin CLIENTES -> NOMBRE (porque as
el clculo se pondr a 0 cuando empiece a imprimirse un nuevo cliente) y
no activamos la opcin Absoluto (si la activsemos el resultado del clculo
sera el contenido del campo %TOTAL% de la ltima venta del ltimo clien-
te del informe). Como frmula especificamos simplemente el campo %TO-
TAL%. De esta forma acumular todos los totales de las ventas de cada
cliente.
e
Veamos ahora las secciones:
Encabezado del informe: situamos en el mismo un control de Texto estti-
co, y como texto escribimos: Listado de ventas a clientes, asignndole las
propiedades que veamos convenientes.
Encabezado de Cliente -> Nombre: situamos en esta seccin un control de
Campo y seleccionamos el campo NOMBRE de la tabla de CLIENTES
(%CLIENTES.NOMBRE%) y le asignamos las propiedades que veamos.
Detalle: situamos dos controles de Campo, uno con el campo %FECHA%y
otro con el campo %TOTAL%.
Pie de Cliente -> Nombre: situamos un control de Texto esttico con el tex-
to Total ventas cliente: y junto a ste el clculo VENTAS CLIENTE.
Pie del informe: situamos un control de Texto esttico con el texto Total ven-
tas: y junto a ste el clculo TOTAL VENTAS.
08
Desarrollo completo
de una aplicacin
e
250 251 VELAZQUEZ VISUAL
Asociamos este informe a una rejilla de la tabla VENTAS y ya estar listo pa-
ra ser ejecutado.
Ejemplo: Creacin de un informe
Vamos a crear un informe que presente los datos del modo siguiente:
ARTICULO PRECIO CANTIDAD TOTAL %VENTAS
Tuercas 7,5 10 75 75.00%
Tornillos 2,5 10 25 25.00%
TOTAL: 100
Las columnas ARTICULO, PRECIO, CANTIDAD y TOTAL corresponden a los
campos de la tabla de ventas. El total del pie es un clculo totalizador (que acu-
mula los totales de cada artculo) que hemos llamado TOT-VENTAS y en la co-
lumna %VENTAS se recoger otro clculo, que hemos llamado PORC-VENTAS.
e
e
Una vez que creamos el clculo totalizador del Pie del informe (TOT-VEN-
TAS), el programa generar automticamente una nueva variable local, que
llamar T$TOT-VENTAS.
Para la creacin del clculo del porcentaje creamos un nuevo clculo, que
llamaremos PORC-VENTAS, en el cual escribiremos la frmula siguiente:
100 * %CANTIDAD% / (T$TOT-VENTAS | 1)
La cantidad la dividimos por la variable o por 1 para evitar un error de divisin
por cero en el caso de que no se haya vendido ninguna unidad de un artculo.
08
Desarrollo completo
de una aplicacin
e
252 253 VELAZQUEZ VISUAL
Podemos, o bien agrupar por artculo y entonces inicializar en cada artcu-
lo, o bien usar el estilo Absoluto, para que el valor sea el de cada artculo.
En unos casos nos interesar ordenar las lneas, as que podremos usar ese
campo para cambiar de seccin, en otro no podremos y tendremos que
usar el estilo Absoluto (por ejemplo, si mostramos las ventas de artculos
por fecha, donde hay varios artculos, varias fechas y no podemos agrupar).
A este tipo de clculos conviene ponerles decimales, porque en muchas
ocasiones se da el caso de que el valor resultante es un nmero compren-
dido entre 0 y 1, de modo que si no hemos especificado el clculo con de-
cimales saldra simplemente 0.
Maquetacin
Al igual que en formularios y mens, tenemos una serie de herramientas pa-
ra maquetar los controles de un formulario.
Los cuatro primeros botones alinean los controles seleccionados
por los bordes izquierdo, derecho, superior e inferior, respectivamente, del
control seleccionado en ltimo lugar.
Los dos siguientes centran los controles horizontal y verticalmente,
respectivamente, dentro del men.
Los dos siguientes espacian tres o ms controles a la misma distan-
cia horizontal y vertical entre ellos, respectivamente.
Estos dos alinean los botones seleccionados horizontal o vertical-
mente con respecto al que haya sido seleccionado en ltimo lugar.
Estos tres dan a varios controles el mismo ancho, el mismo alto y
el mismo ancho y alto, respectivamente, del control seleccionado en ltimo
lugar.
Los dos ltimos botones Alinea izquierda con la marca y Alinea de-
recha con la marca hacen referencia a la marca de alineacin situada en la
regla. Podemos alinear controles de distintas secciones a travs de la mar-
ca de alineacin de la regla. Para ello situamos la marca en la posicin de la
regla que queramos, seleccionamos un control y lo alineamos a la derecha
o a la izquierda de la marca. Seleccionamos el control de otra seccin que
deseemos alinear con el anterior y de nuevo lo alineamos con la marca.
e
Alinear
Centrar
Repartir
Adjuntar
Dimensionar
Alinea izquierda con la marca
Alinea derecha con la marca
Adems de estas formas de maquetacin existen dos opciones en men
Maquetar/Alinear, que son:
Vertical: centra verticalmente todos los controles seleccionados con res-
pecto a la posicin del ltimo.
Horizontal: centra horizontalmente todos los controles seleccionados
con respecto a la posicin del ltimo.
Por ltimo, Tamao del contenido F7 nos redimensionar el control al ta-
mao de lo que contiene.
La posicin y las dimensiones de un control se mostrarn en la barra de
estado.
Adems tenemos otros dos controles que nos permiten alinear controles
entre distintas partes del informe.
Resumen
Los objetos visuales rbol visor de tablas, casillero, agendizador e informe
permiten presentar en pantalla o imprimir los registros de las tablas.
rbol Visor de Tablas : presentan en distintos niveles y de forma grfi-
ca la informacin de una Tabla de datos Maestra con clave arbolada.
Casillero : presenta cada registro en una casilla, siendo cada casilla un
botn que permite disparar un proceso al hacer clic sobre ella.
Agendizador : es un calendario sincronizado con una rejilla, de modo que
al seleccionar una fecha en el calendario, se presentan en la rejilla los re-
gistros que tengan dicha fecha.
Informes : se utilizan para presentar en papel una lista de registros de una
tabla de datos. Su estructura bsica consiste en Encabezado, Detalle y Pie,
pudiendo agrupar y ordenar por campos los datos contenidos en el informe.
Velzquez Visual cuenta con asistentes para la creacin de informes y etique-
tas, as como un editor de informes, en el que podemos seleccionar distintos
controles a incluir en el informe (dibujos, textos, campos, grficos, secuencias
de escape, rejillas de histricos, etc.), definir clculos, maquetar, etc.
8.5.16. Pgina Html
Este objeto nos permite generar una pgina HTML, que podr ser servida a
cualquier navegador de Internet (IExplorer, Netscape, etc.) con el Servidor
Http del Servidor de Aplicaciones de Velzquez Visual. Cuando selecciona-
mos este objeto de la Galera de Objetos, deberemos especificar las pro-
piedades siguientes:
08
Desarrollo completo
de una aplicacin
rbol Visor de Tablas
Casillero
Agendizador
Informe
Pgina Html
254 255 VELAZQUEZ VISUAL
Descripcin: nombre de la pgina Html.
Tabla de datos: tabla de datos a la que vamos a asociar la pgina Html.
Generador Html:
Permite especificar ciertos parmetros para la pgina Html que crearemos:
Ttulo: ttulo de la pgina.
Imagen de fondo: si queremos incluir alguna imagen de fondo en la pgina
hemos de especificarlo en este parmetro.
Colores: permite especificar los colores de fondo y de texto de los enlaces:
estado normal, cuando ya han sido ejecutados y cuando son pulsados. To-
dos los colores pueden ser marcados como por defecto o no en la pgina.
Una vez especificadas las propiedades del Generador Html, al entrar en el
Editor de Pginas Html, ya estarn creadas las secciones de cabecera y de
cuerpo de la pgina con los atributos especificados.
Podemos asociar una pgina Html a una Bsqueda, lo que permitir pre-
sentar el resultado de sta en una pgina web.
Para obtener de nuevo el cuadro de propiedades de una pgina Html, bas-
tar con seleccionarla en el panel derecho del Editor y pulsar la combina-
cin de las teclas Ctrl+Intro.
Para abrir el Editor de Pginas Html, nos situaremos sobre el control y pul-
saremos la tecla Intro o haremos doble clic sobre l con el botn izquierdo
del ratn.
Una vez creada la Pgina Html, si consultamos sus propiedades podremos
modificar su Nombre y la tabla de datos asociada.
Para una aplicacin, la pgina que se presenta por defecto ser aquella que
tenga como identificador INDEX. Para ello, o bien la renombramos noso-
tros, o bien usamos la opcin del men Comunes/Convertir en/Pgina Html
principal.
08
Desarrollo completo
de una aplicacin
Es aconsejable crear un
archivo HTML que incluya
enlaces a las diferentes
pginas Html generadas en
las aplicaciones de
Velzquez Visual que vayan
a ser servidas, y guardarlo
en la misma mquina en la
que se encuentre el Servidor
de Aplicaciones de
Velzquez Visual. En dicho
Servidor habr que
especificar que ese ser el
archivo Html por defecto.
Una vez hecho esto, para
acceder a la pgina Html
desde cualquier navegador
de Internet simplemente
bastar con escribir HTTP://
seguido de la IP o el nombre
de Servidor.
ADVERTENCIA
256 257 VELAZQUEZ VISUAL
Crear una Pgina Html a partir de una rejilla
Si seleccionamos una rejilla de nuestro mapa, pulsando en la opcin de me-
n Objetos/Crear pgina html del objeto nos generar un objeto Pgina Html
con una tabla de las mismas caractersticas que la que hemos seleccionado:
mismos campos, justificacin de los mismos, colores de las columnas, etc.
A continuacin de crearlo podremos editarlo igual que otra Pgina Html
cualquiera.
8.5.17. Componente Html
Este objeto nos permite crear trozos de cdigo html o pginas completas
que posteriormente podrn ser utilizados para generar pginas desde pro-
cesos a travs de la instruccin Html: Ejecutar componente.
Sus propiedades son las siguientes:
Componente Html
Nombre: nombre que tendr el componente.
Tabla de datos: en la lista desplegable seleccionaremos la tabla de datos de
origen del mismo; si no va a estar asociado a ninguna tabla seleccionare-
mos .Ninguna.
Parmetros: este objeto permite definir parmetros que podremos usar den-
tro del cdigo Html que escribamos. Dichos parmetros sern resueltos en
un proceso a travs de la instruccin Html: Ejecutar componente. Los par-
metros han de ir separados por comas (,). Ejemplo:param1param2,param3.
Una vez aceptado este cuadro de dilogo, podremos pasar al editor de c-
digo Html; para ello pulsaremos la tecla Intro o haremos doble clic con la te-
cla izquierda del ratn sobre el componente que hemos creado en el panel
de objetos visuales. El editor de cdigo html es el mismo que el de las p-
ginas html.
Crear un Componente Html a partir de una rejilla
Si seleccionamos una rejilla de nuestro mapa, pulsando en la opcin de me-
n Objetos/Crear componente html del objeto nos generar un objeto Pgi-
na Html con una tabla de las mismas caractersticas que la que hemos se-
leccionado: mismos campos, justificacin de los mismos, colores de las co-
lumnas, etc.
A continuacin de crearlo podremos editarlo igual que otro Componente
Html cualquiera.
Resumen
Existen dos objetos especficos para el uso Web de Velzquez Visual:
Pgina HTML : permite generar una pgina HTML, que podr ser servi-
da a cualquier navegador de Internet (IExplorer, Netscape, etc.) si se ha ad-
quirido el Servidor Http del Servidor de Aplicaciones de Velzquez Visual.
08
Desarrollo completo
de una aplicacin
Pgina HTML
258 259 VELAZQUEZ VISUAL
Componente HTML : este objeto permite crear trozos de cdigo html
o pginas completas que posteriormente podrn ser utilizados para gene-
rar pginas desde procesos a travs de una instruccin de proceso.
8.5.18. Editor de Pginas Html
El Editor de Proyectos de Velzquez Visual incluye un Editor de Pginas
Html. Para abrirlo basta con situarse sobre un objeto Pgina Html o Com-
ponente Html en el panel derecho del Editor de Proyectos y pulsar la tecla
Intro o hacer doble clic con el botn derecho del ratn sobre l.
En este editor podemos, por un lado, editar cdigo Html puro para la pre-
sentacin de pginas web estticas, pero, adems, podemos usar coman-
dos de Velzquez Visual, denominados AVP en el editor, lo que nos permi-
tir presentar pginas web dinmicas.
Controles y propiedades
El editor incluye una barra de botones, cuyas funciones son:
Pegar desde: para importar un fichero Html. Se abrir la ventana de se-
leccin de fichero en la que tendremos que seleccionar el archivo Html a im-
portar. Una vez seleccionado, aparecer el cdigo fuente de la pgina en el
Editor Html.
Insertar color: aparecer la ventana para la seleccin de colores, basta-
r con que seleccionemos el que queremos usar y el cdigo hexadecimal
del mismo ser insertado en el punto del texto donde estuviese situado el
cursor.
#006400
Componente HTML
Pegar desde
Insertar color
Insertar archivo:
Insertar fuente: al pulsar este botn se presentar el cuadro de dilogo
de seleccin de fuentes e insertar el cdigo fuente del tipo de fuente y atri-
butos seleccionados.
Por ejemplo:
<FONT face=Times New Roman size=3 color=#000000></FONT>
08
Desarrollo completo
de una aplicacin
Insertar archivo
Insertar fuente
260 261 VELAZQUEZ VISUAL
Insertar dibujo: incluye el cdigo Html para la insercin de una imagen en la
pgina web. Cuando ejecutamos esta opcin se presenta un cuadro de dilogo
en el que podemos seleccionar tanto una imagen Desde Archivo, almacenada
en un archivo externo al proyecto, como Desde Campo Dibujo, una imagen con-
tenida en un campo de tipo Objeto dibujo de la tabla de datos asociada a la p-
gina Html o de cualquiera de sus tablas maestras. En funcin del tipo, elegire-
mos un control u otro para rellenar, y pulsamos el botn Examinar.
Asimismo, permite seleccionar:
Alineacin: nos da a elegir entre Inferior, Medio, Superior, Inferior absoluto,
Medio absoluto, Texto Superior, Lnea de base, Izquierda y Derecha.
Grosor del Borde: tamao en pxeles de ste.
Espaciado Horizontal: distancia al borde lateral de la imagen en pxeles.
Espaciado Vertical: distancia al borde superior e inferior de la imagen en pxeles.
Un ejemplo del cdigo generado tras la seleccin de un archivo de imagen:
<IMG src=D:\Pruebas\Ver40\GALARTE\Galarte.jpg align=absbottom>
Otro ejemplo en el que el cdigo generado proviene de seleccionar un cam-
po dibujo:
<IMG src=#AVP%DIBUJO%>
Insertar dibujo
Examinar
Para trabajar con imgenes que serviremos en pginas web, Velzquez Vi-
sual tiene una serie de funciones muy interesantes de cara al programador.
Como ya vimos en el captulo dedicado a los campos, podemos crear unos
campos que llamaremos CX y CY, en los que almacenaremos las dimen-
siones de cada dibujo (Velzquez Visual se encarga de hacerlo de manera
automtica), que tambin se tendrn en cuenta a la hora de crear el cdigo
Html, haciendo ms veloz la presentacin.
<IMG src=#AVP%DIBUJO% width=#AVP%DIBUJO-CX% height=#AVP%DIBU-
JO-CY%>
Insertar tabla html: genera en la pgina Html el cdigo correspondiente
a una tabla con el nmero de filas, columnas y tamao del borde que espe-
cifiquemos.
Por ejemplo, para una tabla de dos filas, dos columnas y ancho de borde 1
generara el cdigo siguiente:
<table border=1>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>
Inicio y fin de repeticin: insertan un comando especfico de Velz-
quez (comandos AVP); lo que se encuentre entre esta marca y la marca de
fin de trozo a repetir ser repetido por cada registro resultante de la bs-
queda a la que hayamos asociado la pgina web, por ejemplo, presentar
campos, variables, etc.
08
Desarrollo completo
de una aplicacin
Insertar tabla html
Inicio y fin de repeti-
cin
262 263 VELAZQUEZ VISUAL
<HTML>
<HEAD>
<TITLE>Informe de Ventas</TITLE>
</HEAD>
<BODY bgcolor=#006400> <!Color>
<FONT face=Times New Roman size=3 color=#000000> <!Insertar
Fuente>
<IMG src=#AVP%DIBUJO% width=#AVP%DIBUJO-CX% height=#AVP%DIBU-
JO-CY%> <!Insertar Dibujo>
<AVPR> <!Marca de inicio>
<table border=1> <!Tabla de dos columnas y dos filas>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>
</AVPR> <!Marca de fin>
</FONT>
</BODY>
</HTML>
Paginador: es un comando especfico de Velzquez (comandos AVP)
que pegar en la pgina, en el caso de que el resultado de una bsque-
da ocupe ms de una, un paginador para facilitar al usuario el moverse
entre las pginas. Por defecto, el nmero de tem que se presentar por
pgina es de 20, pero podremos cambiarlo. Cuando se ejecuta esta op-
cin se presenta el cuadro de dilogo para establecer las propiedades
del paginador:
Paginador
En l podemos modificar los atributos que tiene por defecto el paginador.
El resultado final del mismo se presenta en la parte inferior de este cuadro
de dilogo. Podremos modificar su Ttulo por defecto, el smbolo para es-
tablecer el enlace con la pgina anterior, con la pgina siguiente, con las 20
pginas anteriores y con las 20 pginas siguientes.
<HTML>
<HEAD>
<TITLE>Informe de Ventas</TITLE>
</HEAD>
<BODY bgcolor=#006400> <!Color>
<FONT face=Times New Roman size=3 color=#000000> <!Insertar
Fuente>
<IMG src=#AVP%DIBUJO% width=#AVP%DIBUJO-CX% height=#AVP%DIBU-
JO-CY%> <!Insertar Dibujo>
<AVPR> <!Marca de inicio>
<table border=1> <!Tabla de dos columnas y dos filas>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>
08
Desarrollo completo
de una aplicacin
264 265 VELAZQUEZ VISUAL
</AVPR> <!Marca de fin>
<AVPG pag=Informes: ant=Anterior [-] sig=[+] Siguiente
ant20=20 Anteriores sig20=Siguientes 20> <!Paginador>
</FONT>
</BODY>
</HTML>
Campo: comando especfico de Velzquez (comandos AVP). Nos per-
mite insertar un campo en la pgina Html. Cuando insertamos un campo en
una pgina html, ste es insertado de la forma siguiente: #AVP%NOM-
BRE%, donde la cadena inicial #AVP nos indica que se trata de un coman-
do propio de Velzquez Visual.
<HTML>
<HEAD>
<TITLE>Informe de Ventas</TITLE>
</HEAD>
<BODY bgcolor=#006400> <!Color>
Campo
<FONT face=Times New Roman size=3 color=#000000> <!Fuente>
<IMG src=#AVP%DIBUJO% width=#AVP%DIBUJO-CX% height=#AVP%DIBU-
JO-CY%>
<AVPR> <!Marca de inicio>
<table border=1> <!Tabla de dos columnas y dos filas>
<tr>
<td>Fecha</td>
<td>Total</td>
</tr>
<tr>
<td>#AVP%FECHA%</td> <!Campo Fecha>
<td>#AVP%TOTAL%</td> <!Campo Total>
</tr>
</table>
</AVPR> <!Marca de fin>
<AVPG pag=Informes: ant=Anterior [-] sig=[+] Siguiente
ant20=20 Anteriores sig20=Siguientes 20> <!Paginador>
</FONT>
</BODY>
</HTML>
Variable global: comando especfico de Velzquez (comandos AVP). Nos
permite insertar una variable global en la pgina Html. Cuando insertamos
una variable global en una pgina html, se hace de la forma siguiente:
#AVP$PALABRAS$. la cadena inicial #AVP indica que se trata de un co-
mando propio de Velzquez.
08
Desarrollo completo
de una aplicacin
Variable global
266 267 VELAZQUEZ VISUAL
()
#AVP$EMPRESA-NOMBRE$ <!Variable Global>
<AVPR> <!Marca de inicio>
<table border=1> <!Tabla de dos columnas y dos filas>
<tr>
<td>Fecha</td>
<td>Total</td>
</tr>
<tr>
<td>#AVP%FECHA%</td> <!Campo Fecha>
<td>#AVP%TOTAL%</td> <!Campo Total>
</tr>
</table>
()
Variable local: solamente estar activo cuando el objeto editado sea un
Componente Html en el que hayamos definido parmetros. Para insertar un
parmetro concreto en las propiedades del componente, simplemente pul-
Variable local
saremos este botn y seleccionaremos el que corresponda, con lo que s-
te ser situado en el punto del editor donde est el cursor. En el editor se-
r presentado como #AVPa.
#AVPa
Insertar especial: nos permite insertar en el cdigo HTML otros comandos
especficos de Velzquez (comandos AVP) que insertan las siguientes variables:
08
Desarrollo completo
de una aplicacin
Insertar especial
268 269 VELAZQUEZ VISUAL
Senda completa de la aplicacin: inserta una variable que en tiempo de eje-
cucin ser sustituida por la senda de la aplicacin que se est ejecutando.
Al insertar esta variable, el cdigo que Velzquez Visual inserta es:
#AVP!SERVER!/cgi-vel/#AVP!APP!/, a lo que deber preceder el texto
Http://; es decir: HTTP://#AVP!SERVER!/cgi-vel/#AVP!APP!/
Aplicacin: inserta una variable que en tiempo de ejecucin devolver el
nombre de la aplicacin que se est ejecutando. Al insertar esta variable, el
cdigo que Velzquez Visual inserta es: #AVP!APP! (este comando AVP
tambin debera ir precedido de la cadena HTTP://).
Server: inserta una variable que en tiempo de ejecucin ser sustituida por
la IP del servidor donde est ejecutndose la aplicacin. Al insertar esta va-
riable, el cdigo que Velzquez inserta es: #AVP!SERVER! (este comando
AVP tambin debera ir precedido de la cadena HTTP://).
Insertar bsqueda: inserta en el cdigo Html el identificador de una bs-
queda. Para que podamos seleccionar una bsqueda, sta debe tener aso-
ciada en sus propiedades una Pgina Html que ser en la que se presenten
los datos. sta puede ser la misma desde la que se llama. Al seleccionar la
bsqueda, sta ser escrita en el editor de la forma siguiente: IDENTIFICA-
DOR-BUSQUEDA.BUS. La extensin .BUS es la extensin identificativa de
una bsqueda.
Lo que haremos entonces es usar una etiqueta <a href=IDENTIFICADOR-
BUSQUEDA.BUS>Texto</a>, que nos permitir lanzar la bsqueda, que
ser devuelta con la pgina asociada a sta.
(...)
#AVP$EMPRESA-NOMBRE$ <!Variable Global>
<a href=VENTAS-ARTICULO.bus>Ventas por artculo de la empresa
#AVP$EMPRESA-NOMBRE$</a> <!Bsqueda por artculo>
(...)
Insertar proceso: inserta en el cdigo Html el identificador de un proce-
so. Para usar un proceso en una pgina web, debe tener como origen nin-
guno y activado el estilo accesible web. Al seleccionar el proceso ste apa-
recer escrito en las fuentes de la forma siguiente: ID_PROCESO.PRO. La
extensin .PRO es la extensin identificativa de los procesos.
Insertar bsqueda
Insertar proceso
Al igual que ocurre con las bsquedas, el identificador del proceso acta
como enlace ste, que acabar devolviendo una Pgina Html.
#AVP$EMPRESA-NOMBRE$ <!Variable Global>
<a href=VENTAS-ARTICULO.bus>Ventas por artculo de la empresa
#AVP$EMPRESA-NOMBRE$</a> <!Bsqueda por artculo>
<a href=VENTAS1.pro>Seleccin de empresa</a> <!Proceso para
cambiar la seleccin de empresa>
Buscar: para buscar una cadena de texto en el cdigo Html de la pgi-
na. Tenemos la opcin de que coincidan palabras enteras, coincidan ma-
ysculas y minsculas.
08
Desarrollo completo
de una aplicacin
Buscar
270 271 VELAZQUEZ VISUAL
Sustituir: para buscar y reemplazar una cadena de texto por otra en el
cdigo Html de la pgina.
De nuevo tendremos opciones para que nos coincidan palabras enteras y
teniendo en cuenta maysculas y minsculas. Con los botones Buscar si-
guiente y Sustituir podemos ir buscando y reemplazando palabras, o reem-
plazar todas con Sustituir todos.
En el caso de que tengamos hecha una seleccin, nos da la posibilidad de
reemplazar todas las incluidas en sta.
Buscar siguiente, Buscar anterior: repiten la ltima bsqueda que ha-
yamos ejecutado en el Editor Html, hacia delante o hacia detrs.
Toggle Bookmark: adems de marcar cuando realizamos una bsqueda
en el texto, podemos nosotros insertar una marca en la lnea de cdigo Html
en la que se encuentre situado el cursor . Nos es muy til para editar p-
ginas en las que tenemos muchas lneas de cdigo, para marcar aquellas
que nos interese localizar con facilidad. Hemos de tener en cuenta, sin em-
bargo, que si cerramos el editor de Html todas las marcas sern eliminadas.
Con el mismo botn podemos quitar la marca, o bien pulsando con el bo-
tn derecho del ratn sobre ella.
Sustituir
Buscar siguiente,
Buscar anterior
Toggle Bookmark
Bookmark
Clear Bookmark: para borrar todas las marcas del cdigo.
Next Bookmark: con estos botones podremos situar el cursor sobre
la lnea siguiente o anterior ms prxima, con respecto a la posicin actual
del cursor, que tenga marca.
Opciones: podemos personalizar el entorno de trabajo del Editor Html
con ayuda de este botn. Podremos configurar lo siguiente:
Caracteres por tab: configuramos aqu el nmero de caracteres que ocupa-
r cada tabulacin.
Auto indentacin: cada nueva lnea comenzar con el mismo sangrado que
la lnea anterior, facilitndonos la edicin del texto.
Colorear sintaxis: con esta opcin activada podremos especificar un color
diferente para presentar las distintas partes del cdigo. Podemos definir un
color para la fuente por defecto, para los comandos propios de Velzquez
Visual: AVP, las etiquetas (tags), el color de la fuente de los atributos, las ca-
denas de texto, los nmeros y las constantes, adems de especificar el co-
lor de los comentarios.
08
Desarrollo completo
de una aplicacin
Clear Bookmark
Next Bookmark
Opciones
272 273 VELAZQUEZ VISUAL
Fuente: para cambiar la fuente del Editor Html.
Ejemplo
<html>
<head>
<title>LISTADO DE ARTICULOS</title>
</head>
<body>
<p><font face=Arial><strong>Listado de Artculos</strong></font></p>
<hr>
<AVPR>
<p><img src=#AVP%FOTO% width=#AVP%FOTO-CX% height=#AVP%FOTO-
CY%> #AVP%NOMBRE%</p>
</AVPR>
<hr>
</body>
</html>
ste es el cdigo Html de una pgina web de Velzquez para presentar un lista-
do de Artculos. Lo que interesa es lo que se encuentra entre los cdigos de ini-
cio y cierre de trozo de repeticin propios de Velzquez (<AVPR> y </AVPR>).
Observemos lo que se va a repetir por cada artculo encontrado en la bsqueda:
Campos de la tabla de artculos:
#AVP%FOTO%: campo de tipo objeto dibujo de la tabla.
#AVP%FOTO-CX%: campo generado a travs de la opcin del editor Cam-
pos/Crear campos dimensiones dibujo del Editor de proyectos (contiene la
anchura de la imagen).
#AVP%FOTO-CY%: campo generado a travs de la opcin del editor Cam-
pos/Crear campos dimensiones dibujo del Editor de proyectos (contiene la
altura de la imagen).
#AVP%NOMBRE%: campo %NOMBRE% del artculo.
Estos campos los hemos insertado con el botn Campo de la barra de he-
rramientas del Editor Html (observemos cmo automticamente se aade la
etiqueta #AVP antes del identificador del campo). Si alguien accede a tra-
e
vs de un explorador de Internet a esta pgina web y edita el cdigo fuen-
te, los controles de campo sern sustituidos por su contenido (una imagen
en el primero, dimensiones de la imagen en el segundo y en el tercero, y un
el texto del nombre del artculo en el cuarto).
Partiendo de la base de que en el proyecto se ha definido una bsqueda de
artculos, por el ndice palabras, en la que se resuelve el contenido inicial de
las palabras a buscar con la variable global en memoria $PALABRAS$, va-
mos a crear una pgina que contenga el texto Buscar artculos por palabras
y que dispare esta bsqueda:
<html>
<head>
<title>Formulario para la bsqueda de artculos por palabras</title>
<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1>
</head>
<body>
<p align=center><font face=Arial Rounded MT Bold size=6 co-
lor=#008000>Bsqueda de artculos por palabras</font></p>
<div align=center><center>
<table BORDER=4 WIDTH=800 BGCOLOR=A2COFF BORDERCOLOR=BLACK>
<tr>
<td>&nbsp;
<form ACTION=ARTICULOS-PAL.BUS MET-
HOD=GET>
<div align=center><center>
<p><font color=#800000 face=Arial
Black>Palabra(s) a buscar:</font> <in-
put type=TEXT NAME=PALABRAS si-
ze=49></p>
</center></div><div align=center><center><p><in-
put type=submit value=Enviar>&nbsp;&nbsp;
<input type=reset value=Restablecer></p>
</center></div>
</form>
</td>
</tr>
</table>
</center></div>
</body>
</html>
08
Desarrollo completo
de una aplicacin
e
274 275 VELAZQUEZ VISUAL
Observemos las lneas de cdigo que estn marcadas. En la primera, la que
indica la accin del formulario, se especifica que se dispare la bsqueda
ARTICULOS-PAL.BUS. Como podemos observar, no hace falta indicar ni la
IP del servidor, ni la pasarela cgi-vel, ni la aplicacin, pues esta bsqueda
pertenece a la misma aplicacin.
En la segunda, en la que se resuelven las palabras a buscar, se indica el
nombre de la variable global de Velzquez PALABRAS.
Pasarela CGI
Si queremos ejecutar una bsqueda, un proceso o una pgina Html de Ve-
lzquez desde una pgina web, la sintaxis de la pasarela CGI debe ser:
DOMINIO/CGI-VEL/ID_PROYECTO/ID_OBJETO.EXT
Donde:
DOMINIO: del servidor donde se encuentre instalado el Servidor de Aplica-
ciones de Velzquez Visual.
CGI-VEL: directorio virtual donde se buscarn las pginas, bsquedas y
procesos ubicados en el proyecto de Velzquez Visual. No es necesario que
exista, pues al indicarse el nombre del proyecto de Velzquez Visual, el Ser-
vidor de Aplicaciones ya sabe dnde buscar los objetos.
ID_PROYECTO: nombre del proyecto de Velzquez Visual (nombre del fi-
chero .MAP) o alias que le hayamos asignado al mismo en el Servidor de
Aplicaciones.
ID_OBJETO.EXT: identificador del objeto a ejecutar o del fichero a descargar.
La pasarela CGI est preparada para servir objetos de Velzquez Visual
(Bsqueda, Proceso o Pgina Html), que hemos de ubicar en el proyecto de
la aplicacin. En este caso, en funcin del objeto a disparar, hemos de es-
pecificar su identificador seguido de una extensin identificativa del tipo de
objeto que se trate:
Bsqueda: ID_BUSQUEDA.BUS
Proceso: ID_PROCESO.PRO
Pgina Html: ID_PAGINA.PAG
Adems de objetos propios de la aplicacin, podemos llamar a objetos ex-
ternos: dibujos, pginas Html estticas externas, etc.
Si debemos resolver ms variables globales, la sintaxis de la pasarela CGI
sera:
Dominio/cgi-vel/Id_Aplicacion/Id_Busqueda.bus/?Id_Variable1=dato1&Id_Va-
riable2=dato2
e
Ejemplo
En un proyecto llamado Libros.Map tenemos la bsqueda LIBROS-PAL, en
la que se realiza una bsqueda por palabras de libros. En dicha bsqueda
resolvemos las palabras a buscar con el contenido de la variable global PA-
LABRAS-TITULO. Creamos una pgina web en la que incluimos un control
para que el usuario escriba la palabra o palabras a buscar. Con la instruc-
cin <FORM ACTION> de HTML especificaremos como parmetro la pasa-
rela CGI para la ejecucin de la bsqueda. El dominio del servidor donde se
encuentra el proyecto de Velzquez se llama velazquezvisual.com. El for-
mato ser el siguiente:
<FORM ACTION=http://VELAZQUEZVISUAL.COM/CGI-VEL/LIBROS/LIBROS-PAL.BUS
METHOD=GET>
<INPUT TYPE=TEXT NAME=PALABRAS-TITULO>
Automticamente, Velzquez compondr la pasarela CGI correspondiente.
Asimismo, es posible ejecutar objetos externos a las aplicaciones de Velz-
quez. Conviene indicar que, de este mismo modo, tambin nos es posible
ejecutar pginas web externas a las aplicaciones de Velzquez.
Ejemplo
En el directorio donde se encuentra el proyecto Libros.map, que menciona-
mos en el ejemplo anterior, se ha incluido el fichero Logo.gif; para poder
abrirlo, el formato sera:
<img src=http://VELAZQUEZVISUAL.COM/CGI-VEL/LIBROS/LOGO.GIF>
Tambin podemos generar Enlaces dinmicos, es decir, ejecutar una bs-
queda o un proceso en la que se incluyan enlaces por cada registro encon-
trado que disparen otra bsqueda y otro proceso.
Ejemplo
En una base de datos de Libros, en la que se tiene una tabla de Autores y
su histrico Libros, para poder presentar el resultado de una bsqueda de
Autores en una pgina web en la que cada autor sea un enlace para dispa-
rar una bsqueda de sus libros habramos de seguir los siguientes pasos:
Una bsqueda de Autores (el ndice es irrelevante).
Una variable global, a la que llamaremos AUTOR, del mismo tipo y longitud
que el campo CODIGO de la tabla AUTORES.
Una bsqueda de LIBROS por el ndice AUTORES, por la Parte izquierda de
la clave, resolviendo el AUTOR con la variable global $AUTOR$. A dicha
bsqueda la llamaremos LIBROS-AUTOR. Y dicha bsqueda tendr aso-
ciada una pgina Html para presentar los datos.
08
Desarrollo completo
de una aplicacin
e
e
e
276 277 VELAZQUEZ VISUAL
En la pgina web asociada a la bsqueda de Autores, dentro de las marcas
de repeticin, incluiremos el comando html href para hacer que el nombre
del autor ejecute la bsqueda de libros de dicho autor:
<a href=#DOMINIO/CGI-VEL/LIBROS/LIBROS-AUTOR.BUS?AUTOR=#AVP%CODI-
GO%> #AVP%NOMBRE% </a>
Observemos cmo se especifica la pasarela CGI (tras la especificacin del
dominio, el cgi-vel y la aplicacin) la bsqueda a ejecutar seguida de la ex-
tensin identificativa de bsqueda (LIBROS-AUTOR.BUS), seguido de una
interrogacin (?) y el identificador de la variable global por la que se resuel-
ve la bsqueda (AUTOR), asignando como contenido de la misma el cam-
po CODIGO del autor (#AVP%CODIGO%). Hemos de tener en cuenta que,
aunque los nombres de las variables en Velzquez Visual se incluyan entre
smbolos de dlar ($), en una pasarela CGI no es necesario.
El incluir en esta instruccin href el campo nombre del autor (#AVP%NOM-
BRE%) es para que ste sea el texto que aparezca destacado para dispa-
rar el enlace.
Tenemos, adems, unos comandos que nos permiten aadir funcionalida-
des de cara a la presentacin de las pginas web:
_e: si al disparar una bsqueda desde una pgina Html queremos modificar
el nmero de tem a presentar por pgina, utilizaremos esta variable asig-
nndole el nmero de elementos a presentar por pgina. Por ejemplo:
<form ACTION=ARTICULOS-PAL.BUS?_e=10 METHOD=GET>
_p: nos permite especificar una pgina concreta para posicionarse tras pre-
sentar el resultado de la bsqueda. De igual forma que el anterior, habr que
asignarle un nmero. Si el nmero asignado es mayor que el nmero total
de pginas, se presentar automticamente la ltima pgina. Por ejemplo:
<form ACTION=ARTICULOS-PAL.BUS?_p=5 METHOD=GET>
_visd_: dice al Servidor de Aplicaciones que lo que servir a continuacin
es una imagen, y como tal ha de tratarla.
<img border=0 src=_visd_#AVPfoto.jpg>
Ejemplo
En un proyecto, entre otras, tenemos una tabla de Autores y otra de Libros
(con un enlace maestro a Autores), queremos realizar una bsqueda de auto-
res va web en la que se presente una pgina con el nombre de cada autor,
el ttulo y la portada de sus libros. Para ello crearemos cuatro componentes:
Uno para generar la cabecera de la pgina html.
Otro para la parte del cuerpo correspondiente a la informacin sobre el autor.
e
e
Otro para la parte correspondiente a los libros del autor.
Otro para la parte correspondiente al pie de la pgina.
Componente para generar la cabecera de la pgina html:
Aadir un nuevo componente, al que llamaremos CABECERA. No ir aso-
ciado a ninguna tabla de datos. Contendr el cdigo html siguiente:
<html>
<head>
<p><b><font size=6>LISTADO DE AUTORES</font></b></p>
<title>Listado de autores</title>
</head>
<body>
Observemos cmo la ltima lnea de cdigo es la marca de inicio del cuer-
po <body>.
Componente para generar la parte del cuerpo correspondiente a la infor-
macin del autor:
Aadir un nuevo componente, al que llamaremos AUTOR, asociado con la
tabla de Autores. Contendr el siguiente cdigo:
<hr size=8>
<p><b><font size=5>#AVP%NOMBRE%</font></b></p>
En l, entre otras cosas, hemos insertado el campo NOMBRE del autor
(#AVP%NOMBRE%).
Componente para generar la parte del cuerpo correspondiente a la infor-
macin sobre el libro:
Aadimos un nuevo componente, al que llamaremos LIBRO. Estar asocia-
do a la tabla de Libros. Contendr el cdigo siguiente:
<p><b>TTULO:</b>#AVP%NOMBRE%</p>
<p>
<img border=0 src=#AVP%FOTO%></p>
Entre otros, hemos insertado dos campos, el ttulo del libro (#AVP%NOM-
BRE%) y el campo objeto dibujo que contiene la portada (#AVP%FO-
TO%).
Componente para generar la parte del pie de la pgina:
08
Desarrollo completo
de una aplicacin
e
278 279 VELAZQUEZ VISUAL
Aadimos un nuevo componente, al que llamaremos PIE. No estar asocia-
do a ninguna tabla de datos. Contendr el cdigo siguiente:
</body>
</html>
Por ltimo habr que crear el proceso que ejecute todos los componentes
para presentar una pgina con los autores y sus libros. ste tendr origen
ninguno y activada la propiedad accesible va web. Sus lneas sern:
Set -> cuerpo,
Html: ejecutar componente -> cabecera, CABECERA
Cargar lista -> AUTORES, NOMBRE
Recorrer lista solo lectura
Html: ejecutar componente -> autor, AUTOR
Set -> cuerpo, cuerpo + autor
Cargar histrico -> LIBROS, AUTORES
Recorrer lista solo lectura
Html: ejecutar componente, libro, LIBRO
Set -> cuerpo, cuerpo + libro
Html: ejecutar componente -> pie, PIE
Aadir retorno texto -> cabecera + cuerpo + pie
Se inicializa una variable local donde se ir generando el cuerpo de la pgi-
na (autor + libros). Lo hemos llamado cuerpo.
Se ejecuta el primer componente (CABECERA) y el resultado del mismo es
almacenado en la variable local cabecera.
Se carga la lista de autores y se recorre en modo de solo lectura, por cada
autor se ejecuta el componente AUTOR y el resultado retorna a la variable
local autor.
Se concatena a la variable local cuerpo el retorno (autor).
Se cargan los libros de cada autor y se recorre la lista en modo de solo lec-
tura, por cada libro se ejecuta el componente correspondiente (LIBRO) y el
resultado se retorna en la variable local libro.
Se concatena a la variable local cuerpo el retorno (libro).
Se ejecuta el ltimo componente, PIE, y el retorno se almacena en la varia-
ble local pie.
e
Finalmente, se utiliza la instruccin que permite lanzar una pgina html des-
de un proceso: Aadir retorno Texto, concatenando las variables locales ca-
becera, cuerpo y pie.
Ejemplo
Partiremos del mismo ejemplo anterior, pero vamos a hacer una variacin, el
componente correspondiente al LIBRO lo vamos a generar con parmetros.
Centraremos la explicacin nicamente en ste, pues el resto no variara.
Componente para generar la parte del cuerpo correspondiente a la infor-
macin sobre el libro:
Aadimos un nuevo componente, al que llamaremos LIBRO. No es necesa-
rio que est asociado a ninguna tabla. En este caso s habra que definir pa-
rmetros, stos sern el ttulo y la portada (campo objeto dibujo), as que los
introduciremos de la forma siguiente:
titulo,portada
Contendr el cdigo siguiente:
<p><b>TTULO:</b>#AVPtitulo</p>
<p>
<img border=0 src=_visd_#AVPfoto.jpg></p>
Entre otras cosas hemos incluido las dos variables locales (los parmetros
definidos en las propiedades del componente).
Destacar tambin cmo se compone la parte correspondiente a la portada,
_visd_#AVPfoto.jpg
_visd_ es el prefijo que indica a Velzquez que lo que le sigue ser un dibu-
jo, a continuacin se aade la variable local correspondiente (_#AVPfoto) y
finalmente la extensin que tendr la imagen (.jpg).
En el proceso, la instruccin Html: Ejecutar componente, se resolvera de la
forma siguiente:
Html: ejecutar componente -> libro, LIBRO, %NOMBRE%,%FOTO%
Los parmetros han de resolverse en el mismo orden que en el que fueron
definidos en el componente, por lo que primero habr que pasar el libro y a
continuacin la portada: %NOMBRE%,%FOTO%.
8.5.19. Procesos
Son objetos que sirven para la realizacin de tareas diversas, definidas por
el diseador del proyecto. Se utilizan para llevar a cabo operaciones espe-
ciales que Velzquez Visual no hace de forma automtica.
08
Desarrollo completo
de una aplicacin
e
e
Procesos
280 281 VELAZQUEZ VISUAL
Al crear un proceso hay que especificar su origen, que puede ser ninguno,
una ficha o una lista de registros proveniente de una tabla de datos del pro-
yecto. A continuacin, se le aaden, de forma visual, las lneas de instruc-
ciones, que son funciones predefinidas por Velzquez Visual.
Durante la creacin del proceso, el diseador est conectado, en todo mo-
mento, con las tablas de datos y los tipos de funciones adecuadas, de for-
ma guiada y asistida por Velzquez Visual. Adems, desde un proceso se
pueden utilizar otros objetos del proyecto como las rejillas, los formularios
y los informes.
Podemos ejecutar procesos desde formularios, rejillas u otro proceso, de-
pendiendo de su origen (ficha o lista, y tabla de datos de origen). Por ejem-
plo, si el origen del proceso es una ficha de una tabla de datos, podremos
pegar un botn que lo dispare en cualquier formulario de la tabla. Tambin
pueden ejecutarse desde una rejilla en la que se haya seleccionado una fi-
la concreta de la lista.
Los procesos en los que se utilizan operaciones de escritura en disco ge-
neran transacciones. Para saber si un proceso genera transacciones basta
con editarlo y mirar si est activo el flag Escribe en disco.
Crear un proceso
Para crear un proceso, en el caso de que tenga origen, seleccionamos la ta-
bla de datos asociada y a continuacin pulsamos el botn Nuevo objeto de
la Galera de Objetos y elegimos Proceso.
Aparecer el Editor de procesos en el que editaremos las siguientes propiedades:
Descripcin e identificador: en la parte superior izquierda de la ventana del
proceso existe un cuadro de edicin titulado Descripcin en el que resumi-
EDITOR DE PROCESOS
remos el propsito del proceso. El identificador del proceso aparece en la
barra de ttulos del cuadro de dilogo y en el panel derecho del editor de
proyectos, donde podremos modificarlo al salir.
Origen del proceso: los procesos tienen tres posibles orgenes; dependien-
do de su origen pueden ser disparados desde uno u otro punto.
Origen Lista: el proceso tiene su origen en una lista de registros, por ejem-
plo, un proceso disparado desde una rejilla.
Origen Ficha: el proceso tiene su origen en un registro de una tabla de da-
tos, por ejemplo, un proceso disparado desde un formulario.
Origen Ninguno: el proceso no tiene origen en ninguna lista o ficha de nin-
guna tabla de datos. Por ejemplo, un proceso para modificar variables glo-
bales. Cuando ciertas variables globales se han de modificar desde distin-
tos puntos (fichas o listas de varias tablas) en vez de crear el mismo proce-
so para cada tabla y origen en el que se necesite disparar, lo creamos una
sola vez con origen nulo.
Tabla de datos: tabla a la que est asociado el proceso cuando ste tiene
origen ficha u origen lista. Para todo proceso que est asociado a una tabla
de datos, sta ser la misma desde la que se disparar. Por ejemplo, si va-
mos a disparar un proceso desde el formulario Alta de Albarn, el proceso
ser de origen ficha y la tabla de datos origen ser la misma del formulario,
es decir, ALBARANES.
Estilos:
En multitarea (procesos en 2 plano): la ejecucin en multitarea permite no
paralizar al usuario mientras se realiza el proceso. Esta opcin tiene senti-
do en casos donde la tarea a realizar requiere perodos de tiempo largos y
el usuario debe continuar con su rutina de trabajo. Para ello activaremos la
casilla de verificacin En multitarea.
Escribe en disco: si en el proceso utilizamos alguna funcin que modifique
la informacin en el disco, esta casilla de verificacin ser activada auto-
mticamente, ya que no es seleccionable por nosotros.
Es abortable: podemos hacer que un proceso ejecutado en multitarea pue-
da ser abortado por el usuario final. Esta casilla de verificacin se activar
automticamente si utilizamos en el proceso la funcin Punto donde se
puede abortar.
Privado: permite ocultar el proceso al usuario final, es decir, el proceso
slo podr ser disparado desde los puntos que establezca el progra-
mador.
Accesible web: por cuestiones de seguridad se activar solamente en aque-
llos procesos (con origen Ninguno) que queramos sean accesibles va web,
es decir, que puedan ser ejecutados desde una pgina web a travs de la
pasarela CGI.
08
Desarrollo completo
de una aplicacin
Los procesos en multitarea
no procesan retornos (como
Imprimir informe, por
ejemplo). En este tipo de
procesos tampoco es
conveniente el uso de
funciones que requieran la
intervencin del usuario,
como pedir formulario o
pedir dato. Esto es as ya
que no tiene sentido que un
proceso lanzado en 2 plano
requiera la intervencin del
usuario, adems el
formulario o mensaje
lanzado por el proceso
podra no ser visualizado por
el usuario, con lo que el
proceso se paralizara.
ADVERTENCIA
282 283 VELAZQUEZ VISUAL
Lneas de proceso
El rea de proceso est situada en la zona central de la ventana de edicin
de procesos y se destina a la presentacin de las lneas que forman parte
del mismo. Cada lnea de proceso ejecuta una funcin de la capa alta de
funciones de Velzquez Visual dependiendo de los parmetros que le pa-
semos.
Hay tres grupos bsicos de funciones: las funciones cuyo origen es una lis-
ta de registros, las que tienen como origen una ficha de una tabla y la que
pueden tener como origen una ficha, una lista o ninguno.
Al hacer doble clic sobre una lnea de proceso aparecer un cuadro donde
podremos editarla.
En el apartado Parmetros se presentarn el o los parmetros que necesi-
ta la funcin seleccionada.
Para seleccionar una funcin tenemos tres opciones:
Escritura directa sobre el combo box: Velzquez ir presentando la funcin
que comience por la cadena que escribamos en dicho control. Por ejemplo,
si escribimos Me aparecer la funcin Mensaje.
Abrir el combo box: se presentar una lista con todas las funciones dispo-
nibles, segn el origen de la lnea (ficha, lista o ninguno), ordenadas alfab-
ticamente.
Pulsando el botn se abrir un asistente que contiene todas las funcio-
nes de procesos clasificadas dentro de las carpetas correspondientes.
CUADRO DE EDICIN LNEA DE PROCESO
Asistente de funciones de
proceso
En las carpetas se muestran todas las funciones, independientemente del
origen de la lnea donde se va a incluir la funcin. Aquellas que por su ori-
gen puedan ser incluidas en la lnea se mostrarn destacadas en negrita.
Una vez seleccionada podremos ver cmo funciona pulsando el botn de
ayuda .
Algunas funciones generan subprocesos de lista o subprocesos de ficha
dependiendo del tipo de operacin que realizan y de los datos que gene-
ran. Para que quede clara la existencia del subproceso, Velzquez Visual
crea una rama que cuelga de la funcin que lo origina.
Edicin de lneas de proceso
Sobre el rea de procesos se muestran los siguientes botones:
Aade una nueva lnea al final del proceso actual a la misma altura que
la lnea seleccionada.
Inserta una nueva lnea de proceso en la posicin seleccionada.
Borra la lnea seleccionada. Si la lnea a borrar contiene un subproceso
ser eliminada la rama completa.
Edita la lnea seleccionada para su modificacin.
Desactiva/Activa una lnea: esto implica que cuando se ejecute el pro-
ceso la instruccin de dicha lnea no ser ejecutada. Si esa instruccin
genera un subproceso, todas las instrucciones del mismo sern desacti-
vadas tambin. Para desactivar una lnea nos situaremos sobre ella y pul-
saremos este botn o la tecla F6. Para desmarcarla, repetiremos la mis-
ma operacin.
Son los botones Cortar, Copiar y Pegar lneas de proceso.
Deshacer/rehacer.
Estos botones, por orden de izquierda a derecha, sirven para:
abrir todas las ramas del proceso, cerrar todas las ramas del proceso, abrir
una rama del proceso y cerrar una rama del proceso.
Acepta y cierra el cuadro de dilogo del proceso.
Desde el teclado es posible realizar las siguientes operaciones:
Cortar lneas: pulsando la combinacin de las teclas Ctrl+X.
Copiar lneas: pulsando la combinacin de las teclas Ctrl+C.
08
Desarrollo completo
de una aplicacin
SUBPROCESO DE LISTA
La primera vez que
entramos en un proceso, si
salimos pulsando Escape o
el aspa de Cerrar Ventana
perderemos todo lo
escrito y no se crear el
proceso. Para guardarlo
tendremos que pulsar el
botn Aceptar , con lo
que saldremos, pero
manteniendo lo escrito.
Cuando entremos de nuevo
a editar el proceso, al salir,
pulsemos uno u otro, las
lneas sern guardadas.
ADVERTENCIA
Ayuda
Aade una nueva lnea
Inserta una nueva lnea
Borra la lnea seleccionada
Edita la lnea seleccionada
Desactiva/Activa una lnea
Cortar
Copiar
Pegar
Deshacer/rehacer
Abrir/cerrar ramas
de proceso
Acepta
284 285 VELAZQUEZ VISUAL
Pegar lneas: pulsando la combinacin de las teclas Ctrl+V.
Borrar lneas: pulsando la tecla Supr.
Insertar lneas: pulsando la tecla Insert.
Abrir rama: tecla + del teclado numrico o cursor derecha.
Cerrar rama: tecla del teclado numrico o cursor izquierda.
Aadir lnea: pulsando la tecla * (no podemos utilizar la tecla + porque sta
tiene la funcin de abrir ramas del rbol de las lneas del proceso) o F5.
Editar lnea: pulsando la tecla Intro.
Proceso de inicio de una aplicacin
Es posible crear un proceso para que sea ejecutado al arrancar la aplica-
cin. Para que el sistema reconozca un proceso como tal ha de tener el
identificador ONINIT-MAP-SERVER; para ello habra que darle este identifi-
cador al proceso deseado, o bien manualmente, o bien a travs de la op-
cin Convertir en/Proceso de inicio del men Comunes del editor de pro-
yectos.
Para que un proceso pueda ser convertido en proceso de inicio de la apli-
cacin es necesario que el origen del mismo sea Ninguno.
En la versin cliente-servidor este proceso ser ejecutado al arrancar el ma-
pa en el servidor. Ejecutando con VRunner el proceso ser lanzado cada vez
que un usuario ejecute la aplicacin.
Mediante procesos aadimos aquellas funcionalidades que Velzquez Vi-
sual no da automticamente. Para ello tenemos la opcin de lanzar proce-
sos desde objetos visuales: en los formularios tenemos procesos previos
a la formacin del formulario, y posteriores; a sus botones podemos asig-
narles procesos; tambin tenemos procesos asignados a eventos en una
rejilla, a una pgina web, etc.; desde un men podemos lanzar un proceso
que nos permita realizar diferentes opciones, tanto automticamente al
abrirse el men, como desde controles del men que permiten lanzar pro-
cesos.
Procesos de Tabla (Triggers)
Adems de las Actualizaciones (que veamos antes), Velzquez cuenta con
una serie de procesos de tabla que usaremos para solucionar problemas no
resueltos por stas.
Los Eventos de tablas son procesos que definimos para que se ejecuten au-
tomticamente al producirse el evento al que hacen referencia. stos pue-
den ser:
Anterior o Posterior a un alta, Anterior o Posterior a una baja, Anterior o Pos-
terior a una modificacin de ficha.
Interno a un alta, Interno a una baja o Interno a una modificacin de ficha.
Estos ltimos son llamados despus del alta, baja o modificacin de una fi-
cha, respectivamente, y antes de disparar actualizaciones.
Los Eventos de tablas se crean pulsando el botn Nuevo evento de ta-
bla en la barra de herramientas del cuadro de propiedades de una tabla. Al
pulsarlo se muestra la ventana Nuevo manejador de evento de: Nombre de
la tabla.
Elegimos el tipo de evento que vamos a editar y ste se incorpora a la lista
de procesos de la tabla. Una vez que lo hemos creado, pulsamos Intro o ha-
cemos doble clic sobre el proceso y entramos en la ventana de edicin de
procesos, que llevar por ttulo Proceso:Nombre de la tabla -> Tipo de
evento.
La ventana es igual que la de un objeto Proceso, excepto por que el origen
ya est fijado (debe ser una ficha de la tabla que estamos editando) y el Es-
tilo Privado no es definible.
El orden que llevan los distintos eventos junto con las actualizaciones es el
siguiente:
Proceso Anterior
08
Desarrollo completo
de una aplicacin
PROPIEDADES DE UNA TABLA Y EVENTOS DE TABLA
Nuevo evento de tabla
286 287 VELAZQUEZ VISUAL
Alta, Modificacin o Baja de la ficha
Proceso Interno
Actualizacin
Proceso Posterior
En primer lugar, se produce el Proceso Anterior, en el que podemos com-
probar los campos para evitar el alta, modificacin o baja segn las condi-
ciones que pongamos, en caso de que no estn cumplimentados los cam-
pos que requerimos, etc.
Despus del alta, baja o modificacin se lanza el Proceso interno, que nor-
malmente usaremos para calcular y verificar las condiciones que luego de-
terminarn la actuacin de las actualizaciones. En este punto ya podremos
leer datos como el cdigo, campos calculados, etc., pero aqu ya no po-
dremos realizar modificaciones en los campos del registro. Por lo tanto, si
necesitamos modificar el contenido de un campo del registro actual, debe-
mos hacerlo en uno de los procesos asociados a los eventos anteriores a
Altas, Bajas o Modificaciones. Esto es as, porque en los procesos internos
ya se ha realizado el evento, luego no cabe modificacin alguna. Sin em-
bargo, en los procesos s tendremos disponibles funciones que provoquen
escritura en disco, pero para ello tendremos que cargar el registro que que-
ramos modificar antes de realizar la operacin.
Se produce entonces la Actualizacin, que realizar las modificaciones de-
finidas por el subobjeto en otras tablas enlazadas.
Por ltimo se produce el Proceso posterior. Cuando programamos debe-
mos tener en cuenta que en los procesos posteriores al evento no es posi-
ble modificar los datos del registro en curso, tal y como ocurre con el Pro-
ceso interno. La diferencia entre el Proceso posterior al evento y el interno
es que ya tenemos en cuenta las actualizaciones que se han producido en
otras tablas.
Ejemplo de procesos de tabla
Tenemos una tabla de CLIENTES y un contador de clientes. En la tabla te-
nemos clientes subsidiarios, es decir, clientes pertenecientes a una misma
compaa a la que consideramos como cliente nica en el contador. Ade-
ms, a los clientes no los damos de baja en el caso de que dejen de com-
prarnos, sino que permanecen en la base de datos para recibir informacin
y publicidad de la empresa, pero a efectos de contador y nuestras estads-
ticas dejan de ser clientes.
Por otro lado, cada vez que se produzca una modificacin en sus datos,
queremos recoger en un campo la fecha en que se produce, y que se le en-
ve al cliente un correo electrnico en el que se le informe de la modifica-
cin de sus datos y la fecha en que se realiza tal modificacin.
En arquitectura cliente-
servidor no debemos incluir
en este tipo de procesos
nada que implique la
intervencin del usuario, por
ejemplo mostrar un
formulario, una pregunta,
peticin de un dato, etc. El
motivo, como en otros
casos, es que este tipo de
operaciones se llevan a
cabo en el Servidor, por lo
que el mensaje o el
formulario no seran
presentados en el Cliente,
sino en el propio Servidor. Si
en un evento de tabla
incluysemos algo que
implicase la intervencin del
usuario, sera obviado por el
Servidor (hay una excepcin:
los mensajes, que aparecen
en la barra de salida de
mensajes del Servidor).
ADVERTENCIA
e
Veremos cmo podemos hacerlo para el caso de una Modificacin, con
ayuda de los distintos tipos de eventos y con actualizaciones:
Nos aparece el formulario, modificamos o rellenamos los distintos campos,
y lo activamos o desactivamos como cliente. Aceptamos y comienzan los
procesos:
Proceso anterior a la modificacin: comprobamos que el formulario del
cliente que modificamos tenga cubiertos los campos necesarios y no haya-
mos eliminado los que consideramos imprescindibles (para que una ficha
sea correcta debe tener cumplimentados algunos datos, por ejemplo: el
nombre, razn social, C.I.F., etc.). En el caso de que falten datos, aqu po-
dramos bloquear la modificacin y obligar a realizarla de nuevo, aunque
normalmente esa comprobacin se hara con un proceso asignado al botn
Aceptar, para que mantuviera el formulario abierto. Sin embargo, si estamos
en el caso de altas directas o modificaciones por procesos ejecutados en el
servidor, en los que no interviene el usuario, es til bloquear el alta, baja o
modificacin en este punto. En este proceso modificamos el campo en que
recogemos la fecha de actualizacin de los datos del cliente con la fecha de
hoy, para que conste en su ficha.
Modificacin: se guarda la modificacin.
Proceso interno a la modificacin: aqu lanzamos un proceso en el que de-
tectamos si el cliente es subsidiario o no, y guardamos la informacin en un
campo. Se produce despus de haberse hecho la modificacin, pero antes
de que salte la actualizacin, que va tener en cuenta este dato.
Actualizacin: ahora lanzamos una actualizacin (sumando un cliente) con
dos condiciones, la primera si es subsidiario o no y la segunda que est o
no marcado como cliente. Deber darse al tiempo que no sea subsidiario y
que est marcado como cliente para que sume uno al contador.
Posterior a la modificacin: enviamos un correo electrnico al cliente con
los nuevos datos y en el que especificamos la fecha de actualizacin.
Otros ejemplos de eventos de tablas podran ser:
Un proceso que realice una actualizacin imposible de definir con una Ac-
tualizacin.
Un proceso anterior a una baja de ficha que cargue y borre todos sus his-
tricos.
8.5.20. Demonios
Se trata de procesos nicamente vlidos para la versin cliente-servidor. Se
lanzan de forma continua, cada x milisegundos, mientras la aplicacin est
siendo ejecutada en el servidor de aplicaciones. Cada demonio genera en
el servidor un hilo de baja prioridad, que har que no interfiera en el traba-
08
Desarrollo completo
de una aplicacin
e
Demonios
288 289 VELAZQUEZ VISUAL
jo de los usuarios y su uso nos interesar cuando necesitemos la ejecucin
de un proceso continuo en la aplicacin.
El editor de demonios es muy similar al editor de procesos, aunque con fun-
cionalidad diferente:
Al tratarse de un proceso que va a ser ejecutado desde el servidor de aplicacio-
nes su origen no podr ser modificado; el origen del proceso ser NINGUNO.
El proceso ser siempre en multitarea (recordemos que no es posible aa-
dir retornos desde procesos en multitarea).
En sus propiedades debe especificarse cada cuntos milisegundos debe
ejecutarse. La ejecucin del proceso de forma continua no se solapar, es
decir, si hemos establecido que el proceso debe ser ejecutado cada 15.000
milisegundos, se ejecutar el proceso y una vez haya finalizado volver a
ser ejecutado despus de 15.000 milisegundos, y as sucesivamente.
8.5.21. Funcin
Este objeto permite definir funciones que podrn ser ejecutadas en diferen-
tes puntos de la aplicacin. Se trata de procesos ejecutables slo en primer
plano (en sus propiedades no se permite activar Multitarea) y a los que po-
demos pasar parmetros. El origen de estos procesos siempre es Ninguno.
El editor es muy similar al de procesos pero incorpora algo distinto: la po-
sibilidad de especificar parmetros; stos sern escritos en el control co-
rrespondiente separados por comas (Ejemplo: Parametro1, Parametro2,
Parametro3). En el proceso los parmetros definidos aparecern en la lista
de variables locales.
Dadas las caractersticas del
objeto, en los demonios no
debemos utilizar funciones
de procesos en las que se
requiera la intervencin del
usuario.
ADVERTENCIA
EDITOR DE DEMONIOS
Funcin
Ejemplo: funcin para controlar el NIF
Vamos a ver una funcin que ser usada en altas y modificaciones de las
tablas CLIENTES y PROVEEDORES para comprobar si es correcto el NIF
que introduzca el usuario.
En este caso el proceso, que se presenta a continuacin, tendr un nico
parmetro a declarar en la lista de parmetros: nif.
A lo largo del proceso se usa en distintas lneas la variable local nif, que no
es otra cosa que el parmetro definido en la funcin.
La ltima instruccin de la funcin, Set retorno funcin, es la que permite
establecer qu es lo que va a retornar la funcin cuando sea llamada. En
este ejemplo retornar o bien nada (querr decir que el NIF es correcto), o
bien el mensaje informativo de lo que est incorrecto en el nif.
8.5.22. Funciones de Procesos
Las funciones son las instrucciones con las que se construyen los proce-
sos. Pueden tener ninguno, uno o varios parmetros, dependiendo de cada
una.
stas pueden ser funciones propias de lista, funciones propias de ficha o
funciones comunes de ficha y de lista (estas ltimas funciones son las que
pueden usarse en lneas con origen ninguno). Dependiendo del origen que
tenga el proceso podremos usarlas o no. Adems, algunas funciones pro-
08
Desarrollo completo
de una aplicacin
FUNCIN CONTROL-NIF
e
290 291 VELAZQUEZ VISUAL
pias de lista generan subprocesos de ficha, de los que podremos colgar
funciones propias de ficha.
Al pulsar el botn Editar del cuadro de dilogo Proceso, o hacer doble
clic sobre las lneas del rea de proceso, aparece la ventana Lnea de Pro-
ceso, donde se informa del origen del subproceso actual y de las funciones
disponibles, las cuales dependen de que el origen sea ficha o lista. Tambin
hay funciones especficas segn sea Proceso, Demonio o Funcin.
Desde estas funciones podremos acceder al Asistente para la creacin de
frmulas. Podremos usar variables locales (sin necesidad de declararlas en
primer lugar), hacer uso de parmetros, elegir otros objetos visuales de Ve-
lzquez Visual como rejillas, formularios, otros procesos, etc.
Algunas funciones devuelven valores que podremos guardar en variables
locales, por ejemplo, si el proceso se ha realizado, el resultado, etc. Otras,
como los retornos, nos devuelven objetos.
Funciones Bsicas
En este apartado veremos las funciones bsicas que hay, en general, co-
munes a otros lenguajes informticos de alto nivel. stas son:
EDITOR DE PROCESOS Y VENTANA LNEA DE PROCESO
Editar
If
Esta funcin crea un subproceso de lista o de ficha en funcin del origen.
El subproceso se ejecuta si se cumple la expresin condicional. Es una Fun-
cin comn de lista y de ficha.
Hemos de pasarle el parmetro Frmula condicional, expresin algebraica
o booleana (lgica binaria). Para crear la frmula condicional podemos usar
el asistente.
Ejemplo
En este ejemplo se ejecutar el subproceso de lista o de ficha si se cumple
que el campo IVA del artculo es igual a la variable local iva, y (&) el cam-
po MARCA es igual a 2.
La condicin sera: (%IVA% = iva) & (%MARCA% = 2)
Si se tratara de un campo booleano, por ejemplo CASADO, la condicin se-
ra: if -> %CASADO%. De este modo comprobamos que el campo CASA-
DO sea igual a 1.
08
Desarrollo completo
de una aplicacin
FUNCIONES BSICAS
e
292 293 VELAZQUEZ VISUAL
Else If
Esta funcin, que siempre tiene que ir precedida de una funcin if, crea un
subproceso de lista o de ficha, en funcin del origen de la lnea. El subpro-
ceso se ejecuta si se cumple la expresin condicional. Es una Funcin co-
mn de lista y de ficha.
Le pasamos el parmetro Frmula condicional, expresin algebraica o boo-
leana (lgica binaria).
Ejemplo
if -> %CAMPO% = 1
Ejecutar proceso -> PROCESO1
else if -> %CAMPO% = 2
Ejecutar proceso -> PROCESO2
else if -> %CAMPO% = 3
Ejecutar proceso -> PROCESO3
Else
Funcin que ejecuta las instrucciones que tenga en su rama, siempre y
cuando no se cumpla el condicional previo (funcin If). La funcin Else tie-
ne que ir precedida de una funcin If a su misma altura. Es una Funcin co-
mn de lista y de ficha y no tiene parmetros.
Ejemplo
Si se dan las dos condiciones ejecutar el primer subproceso, en caso con-
trario ejecutar el segundo.
For
Repite las lneas contenidas en el bucle mientras se cumpla la condicin
declarada. La variable del bucle (especificada en el primer parmetro) es
de tipo local, de modo que para acceder a ella se utilizarn apstrofes, co-
mo en el resto de las variables locales. Es una Funcin comn de lista y de
ficha.
Los parmetros de la funcin son:
e
e
e
Id variable: identificador de la variable local (obligatorio).
Frmula valor inicial: expresin que se asignar a la variable local al iniciar
el bucle (obligatorio).
Frmula condicin: expresin que se deber cumplir para continuar con las
iteraciones del bucle (obligatorio).
Frmula valor a incrementar: expresin que incrementa la variable del bucle
en cada iteracin (obligatorio).
Ejemplo
Demos los siguientes valores a los parmetros de la funcin:
Id variable: VarLoc
Fr. Inicial: 47
Fr. Cond.: VarLoc < 73
Fr. Inc.: 2
Este ejemplo ejecuta las funciones (instrucciones) que cuelgan en el sub-
proceso del bucle inicindose la variable local VarLoc con el valor 47 y fi-
nalizando en el 73. La variable ser incrementada en pasos de dos en dos.
Ntese que en la frmula condicional la variable del bucle est entre aps-
trofes, indicando que es una variable local al bucle. El bucle ser ejecutado
para valores entre 47, 49, 51, 69 y 71.
Rem
Esta funcin permite incluir comentarios en los procesos, as nos resultar
mucho ms fcil su revisin. Es una Funcin comn de lista y de ficha.
Hemos de pasarle el parmetro Comentario, texto descriptivo de lo que se
va a realizar en las lneas posteriores del proceso. El comentario no tiene
que estar entrecomillado.
Ejemplo
Las lneas en las que se encuentra esta funcin se muestran destacadas en
08
Desarrollo completo
de una aplicacin
e
e
294 295 VELAZQUEZ VISUAL
negrita y con un icono de informacin al principio de las mismas, con lo que
nos ser ms fcil su localizacin.
Set
Con esta funcin declaramos una variable local del proceso y le asignamos
valores, almacenando en ella el dato calculado por la expresin frmula. Si
la variable local no existe se crea automticamente. Como la variable es lo-
cal slo es posible usarla en este proceso, siendo creada cuando aparezca
esta instruccin y destruida cuando finalice el proceso. Es una Funcin co-
mn de lista y de ficha.
Hemos de pasarle los siguientes parmetros:
Identificador: el de la variable local donde se almacena el resultado de la
frmula (obligatorio). No debemos usar en el identificador de una variable
local caracteres tales como % (se usa para identificar campos), $ (se usa
para identificar variables globales), , etc.
Frmula: expresin a evaluar (obligatorio).
Ejemplo
En este ejemplo guardamos en la variable local MARCAARTI el cdigo de
la marca del artculo. El origen de la lnea del proceso donde se incluye es-
ta funcin ser una Ficha de la tabla de Artculos. Los parmetros son:
Identificador: MARCAARTI
Frmula: %MARCA%
Modificar variable global
Modifica el contenido de una variable global declarada en el proyecto. Es
una Funcin comn de lista y de ficha a la que pasamos los siguientes pa-
rmetros:
Identificador: el de la variable global a modificar (obligatorio).
Frmula: expresin para calcular el nuevo contenido (obligatorio).
Id variable local resultado: el de la variable local donde se almacenar el re-
sultado. Ser el contenido de la variable global en el momento de ser
guardada en disco (opcional).
Ejemplo
Modificar variable global -> ULT-PEDIDO-C,%ULT-PEDIDO-C%+1, NuevoPedido
e
e
e
Pedir dato
Pide un dato al usuario y lo guarda en la variable local con el identificador
dado. Para usar esta variable local en las expresiones frmula, al igual que
todas las variables locales, su identificador debe ir entre apstrofes (). Es
una Funcin comn de lista y de ficha.
Hemos de pasarle los parmetros siguientes:
Descripcin: texto a presentar al usuario (opcional).
Identificador: identificador de la variable local donde se almacena el dato in-
troducido por el usuario (obligatorio).
Tipo: tipo de dato a guardar. Hay tres tipos: Numrico, Texto y Fecha (obli-
gatorio).
Identificador de la variable local que retorna SI/NO: variable que recoger si
el usuario ha pulsado aceptar o cancelar (opcional).
Ejemplo
Este ejemplo visualizar una ventana con el texto Escriba la fecha lmite y
un control de edicin para introducir dicha fecha, la cual ser guardada en
la variable local FECHAMAX. Los parmetros son:
Descripcin: Escriba la fecha lmite.
Identificador: FECHAMAX
Tipo: Fecha
Mensaje
Muestra en una ventana el contenido evaluado de una frmula junto con el
icono seleccionado. Es una Funcin comn de lista y de ficha a la que he-
mos de pasar los siguientes parmetros:
Mensaje: expresin frmula con el mensaje que aparecer en pantalla (opcional).
Icono: el que se mostrar junto con el mensaje (opcional). Hay tres: excla-
macin , stop e informacin .
Segundos Timeout: segundos transcurridos los cuales la ventana con el
mensaje ser cerrada automticamente. Si este parmetro es 0, la ventana
permanecer abierta hasta que intervenga el usuario. Muy til la utilizacin
de time out para evitar que, si se presenta el mensaje y no est presente el
usuario, no se paralice la ejecucin del proceso hasta que ste intervenga.
Ttulo: ttulo de la ventana en la que se presenta el mensaje (opcional).
08
Desarrollo completo
de una aplicacin
e
Exclamacin
Stop
Informacin
296 297 VELAZQUEZ VISUAL
Si presentamos un mensaje en un evento pierde foco de un formulario, pa-
ra que el foco no se pierda y vuelva al control en el que se encontraba he-
mos de aadir la funcin Set retorno proceso =no tras la funcin Mensaje.
Por ejemplo, supongamos que en la prdida de foco de un control de edi-
cin de un formulario asociamos un proceso que comprueba si el valor in-
troducido es vlido. Si no lo es se presenta un mensaje, pero el foco se per-
der si no aadimos Set retorno proceso=no. Si lo aadimos, el foco volve-
r al control de edicin y podremos introducir un valor de nuevo.
Ejemplo
Visualizaremos una ventana con el texto del mensaje personalizado para el
usuario que intenta ver un formulario para el que no tiene el nivel de privilegio
requerido. El texto est entre comillas puesto que se trata de una expresin
tipo frmula. La variable de sistema u devuelve el nombre del usuario actual.
Mensaje: Lo siento, + u + . No est Ud. autorizado a ver estos datos.
Ejemplo
Ahora presentaremos una ventana con el texto del mensaje personalizado,
en el que se muestra el nombre del Cliente.
Mensaje: El cliente + %NOMBRE% + no tiene albaranes para facturar.
Ejecutar proceso
Ejecuta el proceso dado en el primer parmetro y retorna cuando finaliza.
Es una Funcin comn de lista y de ficha a la que pasamos los parmetros
siguientes:
Identificador proceso: identificador del proceso hijo a ejecutar (obligatorio).
Variable retorno OK subproceso (S/No): inicializacin de una variable local
del proceso donde se recoger si el proceso ejecutado ha retornado co-
rrectamente o no.
Modo Cliente-Servidor: este parmetro es exclusivo para aplicaciones que
vayan a ser ejecutadas con la arquitectura cliente-servidor de Velzquez Vi-
sual (Servidor de Aplicaciones de Velzquez Visual). Existen dos modos po-
sibles de ejecutar los subprocesos:
Local ->: el subproceso ser ejecutado en el Cliente.
Servidor ->: el subproceso ser ejecutado en el Servidor (a estos procesos
los llamamos procesos en tercer plano).
Cuando desde un proceso principal ejecutamos un subproceso mediante
esta instruccin, la ejecucin del proceso principal no continuar hasta que
no termine el subproceso.
e
e
Ejemplo
En este ejemplo, la variable local bOK es inicializada a cero antes de eje-
cutar el subproceso MAILINGS-BAJA. Si el subproceso retorna con un
valor distinto de cero se ejecutarn las instrucciones que cuelgan de la
funcin. En este caso, la funcin set establece el valor 1 para la variable
local bOK.
Por ltimo, se comprueba el valor de la variable bOK. Si la variable contiene
el valor cero (!bOK), hacemos que el proceso principal retorne con un NO.
Ejecutar proceso sin origen
Ejecuta el proceso con origen ninguno dado en el parmetro y retorna cuan-
do finaliza. Es una Funcin comn de lista y ficha.
Hemos de especificar los parmetros siguientes:
Identificador del proceso: identificador del proceso con origen ninguno a
ejecutar (obligatorio).
Variable retorno OK subproceso (opcional): devolver 0 en el caso de que el
subproceso sin origen se haya ejecutado una instruccin Set retorno pro-
ceso = NO, o en el caso de que no se haya ejecutado correctamente. En ca-
so contrario devolver 1.
Modo Cliente-Servidor: este parmetro es exclusivo para aplicaciones que
vayan a ser ejecutadas con la arquitectura cliente-servidor de Velzquez Vi-
sual (Servidor de Aplicaciones de Velzquez Visual). Existen dos modos po-
sibles de ejecutar los subprocesos:
Local ->: el subproceso ser ejecutado en el Cliente.
Servidor ->: el subproceso ser ejecutado en el Servidor (a estos procesos
los llamamos procesos en tercer plano).
Deshacer transaccin
Deshace la transaccin en curso. Es una Funcin comn de lista y ficha a
la que no hemos de pasar parmetros. Slo es vlida para aplicaciones eje-
cutadas con la versin cliente-servidor, en aplicaciones ejecutadas con
VRunner no funcionar.
Finalizar proceso
Esta funcin nos permite finalizar la ejecucin del proceso en un punto de-
terminado. Es una Funcin comn de lista y de ficha y no tiene parmetros.
08
Desarrollo completo
de una aplicacin
e
298 299 VELAZQUEZ VISUAL
Punto donde se puede abortar
Esta funcin permite al usuario final interrumpir un proceso que se est eje-
cutando en segundo plano (en multitarea). Con esta funcin lo que se pre-
tende es minimizar los problemas que pueda generar una interrupcin del
proceso, hacindolo de una manera controlada. Para ello, en el Ejecutor
tendremos que acceder al cuadro de procesos en segundo plano y pulsar
el botn correspondiente. Es una Funcin comn de lista y de ficha.
Hemos de especificar la Frmula mensaje al abortar, expresin frmula que
se presentar en tiempo de ejecucin cuando el usuario haya abortado el
proceso.
En el ejecutor se puede abortar un proceso desde la ventana Procesos en
ejecucin, si tenemos alguna instruccin Punto donde abortar. Si pulsamos
el botn abortar, lanzamos al proceso seleccionado el mensaje abortar.
Cuando el proceso pase por una instruccin Punto donde abortar, lanzar
un mensaje si tenemos cubierto el parmetro mensaje, y abortar el proce-
so. Si hay fichas bloqueadas las desbloquear pero no realizar modifica-
cin alguna a partir de este punto.
Ejemplo
Imaginemos un proceso que realiza facturas y recibos. El lugar ideal para
poner un Punto donde abortar sera al finalizar una factura y sus recibos, de
modo que tenemos un modo de abortar limpio, con el que podremos deci-
dir dnde se detendr un proceso independientemente de donde est eje-
cutndose cuando el usuario decida abortar.
Funciones de Arrays
Un array es una matriz o vector, un grupo de variables que se denominan
con un mismo nombre y un nmero de posicin. No almacena un nico va-
lor, sino una lista ordenada de ellos. En Velzquez Visual estos valores pue-
den ser cadenas de texto, nmeros, fechas y horas, no siendo necesario
definir el tipo de dato que se almacenar a la hora de crear un array. Es ms,
podemos incluir datos de diferente tipo en un mismo array.
Para trabajar con arrays usaremos las siguientes funciones:
e
Array: Crear
Esta instruccin crea un array en un proceso. Es una Funcin comn de lis-
ta y de ficha a la que hemos de pasar el parmetro Identificador array: el
identificador que se dar al array en el proceso.
Array: Tamao
Con esta funcin obtenemos el nmero de tem de un array definido en el
proceso. Es una Funcin comn de lista y de ficha en la que especificamos
los parmetros siguientes:
Identificador array: en el men desplegable seleccionamos el array definido
en el proceso del que queremos conocer su tamao.
Variable retorno tamao: variable local donde se almacenar el tamao del
array seleccionado en el primer parmetro.
Array: Get tem
Con esta instruccin obtenemos un elemento de un array declarado en el
proceso. Es una Funcin comn de lista y de ficha. Los parmetros que he-
mos de especificar son:
Identificador array: en el men desplegable seleccionamos el array definido
en el proceso del que queremos obtener un tem.
08
Desarrollo completo
de una aplicacin
FUNCIONES DE ARRAYS
300 301 VELAZQUEZ VISUAL
Posicin: posicin del array en la que se encuentra el tem a obtener. En es-
te parmetro podremos especificar tanto una constante como una expre-
sin frmula. Ojo: la primera posicin es la nmero 0.
Variable retorno dato: variable local donde se guardar el tem obtenido.
Array: Set tem
Esta instruccin establece el valor de un tem de un array declarado en el
proceso. Es una Funcin comn de lista y de ficha. Los parmetros que he-
mos de pasarle son:
Identificador array: en el men desplegable seleccionaremos el array defini-
do en el proceso en el que queremos establecer el valor de un tem.
Posicin: es la posicin del array donde est el tem. En este parmetro po-
dremos especificar tanto una constante como una expresin frmula. La
primera posicin es la nmero 0.
Frmula dato: expresin frmula del valor a establecer en el tem.
Array: Aadir tem
Con esta instruccin aadimos un tem al final de un array declarado en el
proceso. Es una Funcin comn de lista y de ficha.
Los parmetros que necesita son:
Identificador array: en el men desplegable seleccionaremos el array defini-
do en el proceso en el que queremos aadir un tem.
Frmula dato: expresin frmula del valor del tem a aadir en el array.
Array: Insertar tem
Con esta instruccin insertamos un tem dentro de un array declarado en el
proceso. Es una Funcin comn de lista y de ficha.
Necesita los siguientes parmetros:
Identificador array: en el men desplegable seleccionaremos el array defini-
do en el proceso en el que queremos insertar un tem.
Posicin: posicin del array donde insertar el tem. En este parmetro po-
dremos especificar tanto una constante como una expresin frmula. La
primera posicin es la nmero 0.
Frmula dato: expresin frmula del valor del tem a insertar en el array.
Array: Suprimir tem
Con esta funcin eliminamos un tem de un array declarado en el proce-
so. Es una Funcin comn de lista y de ficha en la que hemos de espe-
cificar:
Identificador array: en el men desplegable seleccionaremos el array defini-
do en el proceso del que queremos suprimir un tem.
Posicin: posicin del tem a suprimir. En este parmetro podremos especi-
ficar tanto una constante como una expresin frmula. La primera posicin
es la nmero 0.
Array: Suprimir todos
Mediante esta instruccin eliminamos todos los tems de un array declarado en
el proceso. Es una Funcin comn de lista y de ficha en la que hemos de es-
pecificar el parmetro Identificador array: en el men desplegable selecciona-
mos el array definido en el proceso del que queremos eliminar todos los tems.
Array: Ordenar alfabtico
Esta instruccin ordena alfabticamente los tems de un array definido en el
proceso. Es una Funcin comn de lista y de ficha en la que especificamos:
Identificador array: en el men desplegable seleccionaremos el array defini-
do en el proceso cuyos tems se han de ordenar alfabticamente.
Orden: podremos optar entre dos modos, Ascendente o Descendente.
Array: Ordenar numrico
Esta instruccin ordena numricamente los tems de un array definido en el
proceso. Es una Funcin comn de lista y de ficha a la que pasamos los pa-
rmetros:
Identificador array: en el men desplegable seleccionamos el array definido
en el proceso cuyos tems se han de ordenar numricamente.
Orden: optamos entre dos modos, Ascendente o Descendente.
Array: Ordenar fechas
Esta instruccin ordena por fecha los tems de un array definido en el proceso.
Es una Funcin comn de lista y de ficha. Los parmetros que necesita son:
Identificador array: en el men desplegable seleccionaremos el array defini-
do en el proceso cuyos tems se han de ordenar por fecha.
Orden: de nuevo optamos entre modo Ascendente y Descendente.
Array: Ordenar horas
Esta instruccin ordena por hora los tems de un array definido en el proce-
so. Es una Funcin comn de lista y de ficha.
Los parmetros que necesita son:
Identificador array: en el men desplegable seleccionamos el array definido
en el proceso cuyos tems se han de ordenar por hora.
Orden: optamos entre dos modos, Ascendente o Descendente.
08
Desarrollo completo
de una aplicacin
302 303 VELAZQUEZ VISUAL
Retornos
Los Retornos son funciones que nos devuelven un objeto: un texto, una p-
gina web, un proceso. Estas funciones no se realizarn hasta que no se ha-
ya terminado la ejecucin del proceso. Esto es debido a que los retornos no
permiten devolver el control al proceso: los retornos que se lancen durante
la ejecucin de un proceso se van almacenando en memoria para que,
cuando termine la ejecucin del mismo, se disparen.
Esto implica que si despus de aparecer una funcin retorno en un proce-
so, a continuacin eliminamos registros o modificamos alguno de los cam-
pos, variables, etc., como lo que sta devuelve se evala en el momento
que se ejecuta, es decir, al final, los valores sern distintos de los que pudi-
mos tener en cuenta a la hora de enviar el retorno.
En la figura hemos aadido un retorno que nos presenta una rejilla con una
lista de registros. Sin embargo, a continuacin viene una funcin que reco-
rre la lista eliminando todas las fichas. Aunque cuando fue lanzado el retor-
no haba datos, como se evala al final del proceso, se encuentra con que
no hay registros y nos devuelve la rejilla vaca. Lo mismo ocurre si hemos
modificado algn campo, una variable global que est presente en un in-
forme, etc.
Los retornos no funcionan en procesos multitarea, por lo que en aquellos en
los que se incluya alguna de estas funciones tienen que ser lanzados en pri-
mer plano siempre. Si un proceso multitarea tiene retornos, stos sern ob-
viados y no se presentarn al usuario final.
Los retornos que podemos usar son:
Aadir retorno
Funcin comn de lista y de ficha que guarda el recurso declarado en los
parmetros para presentarlo al finalizar el proceso.
Utilizaremos esta funcin para presentar con un objeto visual los resultados
de un proceso. Por ejemplo, el filtrado de una lista presentado en una reji-
lla, el resultado de un tubo de ficha y de un tubo de lista, creando una ca-
becera y unas lneas de una factura, presentado en un formulario etc.
Podemos aadir conjuntamente retornos de ficha y de lista.
Todos los retornos son presentados en el orden en que fueron aadidos.
Los parmetros que hemos de pasarle a la funcin son:
Identificador del recurso: identificador del objeto visual de Velzquez Visual.
En el caso de que el origen sea una lista, el objeto ser una rejilla, y si el ori-
gen es una ficha, el objeto ser un formulario (obligatorio).
Identificador Toolbar: esta opcin slo estar disponible cuando el retorno
se efecte sobre una lista. Permite especificar la barra de herramientas con
la que se presentar la rejilla seleccionada en el parmetro anterior. sta po-
dr ser la estndar de Velzquez Visual, una barra de herramientas perso-
nalizada, o ninguna.
08
Desarrollo completo
de una aplicacin
FUNCIONES DE RETORNO
304 305 VELAZQUEZ VISUAL
Frmula ttulo: slo estar disponible cuando el retorno se efecte sobre una lis-
ta. Mediante una expresin frmula podremos establecer el ttulo de la ventana.
Ejemplo
Vamos a lanzar un proceso desde una lista de PROVEEDORES, de modo
que primero cargamos el histrico de ALBARANES de los proveedores de
la lista. A continuacin filtramos la lista de ALBARANES por su campo FAC-
TURADO (campo de tipo booleano). Como filtro hemos puesto !%FACTU-
RADO%, de modo que se cargarn todos los albaranes sin facturar de los
clientes de la lista.
El origen de la siguiente lnea es una lista de albaranes, luego la funcin
Aadir Retorno en su parmetro pedir una rejilla de ALBARANES, as que
visualizaremos una rejilla con todos los albaranes no facturados de los
clientes de la lista original.
Aadir retorno proceso
Esta funcin guarda el proceso declarado en los parmetros para ejecutar-
lo al finalizar el proceso desde el que se ha llamado. Es una Funcin comn
de lista y de ficha.
Podemos aadir conjuntamente procesos de ficha y de lista, siendo ejecu-
tados los procesos en el orden en que fueron aadidos como retorno.
Esta funcin se diferencia de la funcin Ejecutar proceso en que el proceso
que se ha aadido como retorno se ejecutar cuando finalice el proceso
llamador, independientemente del punto en el que se haya incluido la ins-
truccin. Por el contrario, la funcin Ejecutar proceso disparar el proceso
en el punto donde se haya incluido esta funcin.
Es necesario especificar el parmetro Identificador del proceso: identifica-
dor del proceso a ejecutar. En el caso de que el origen sea una lista, el pro-
ceso ser uno que tenga origen lista, y si el origen es una ficha, el proceso
ser uno que tenga origen ficha.
Aadir retorno texto
Guarda el recurso declarado en los parmetros para presentarlo al finalizar
el proceso. Es una Funcin comn de lista y de ficha pensada para la pre-
sentacin de Pginas Html; por tanto, el texto que se presente deber ser
cdigo Html. El proceso deber ser ejecutado por el servidor HTTP de Ve-
lzquez, que devolver al explorador web cliente la pgina creada.
Hemos de especificar el parmetro Frmula de texto a retornar, de modo
que el texto de la frmula deber ser cdigo Html o una variable local del
proceso que haya sido creada con la funcin Html: Ejecutar componente.
e
Ejemplo
En una aplicacin se tiene la tabla ARTISTAS y un histrico de las OBRAS
de dichos artistas. Desde un proceso se pretende generar una pgina web
en la que se presente el nombre de todos los artistas de la tabla y, tras ca-
da artista, todas sus obras (la fotografa y su ttulo). El proceso tendra ori-
gen ninguno y sera:
Rem -> Composicin de la cabecera de la pgina html
Set -> header, <html> <head> <title>Listado de Artistas</title> </head>
<body> <p align=\ccenter\c><font face=\cArial Rounded MT Bold\c si-
ze=\c6\c color=\c#800000\c>ARTISTAS</font></p><hr>
Set -> body,
Cargar lista -> ARTISTAS, NOMBRE
0Recorrer lista solo lectura
00Rem -> Composicin del cuerto del mensaje, en l se concatena el nom-
bre del artista y un salto de lnea
000Set -> artista, %NOMBRE% + <br>
000Set -> body, body + artista
000Cargar histrico -> OBRAS, ARTISTAS
0000Recorrer lista solo lectura
0000Rem -> Composicin de la parte del cuerpo del mensaje en la que se
incluir la fotografa y el nombre de la obra
0000Set -> obra, <p align=\ccenter\c><font face=\cAvantGarde Md BT\c size=\c3\c
color=\c#000080\c><strong> +%NOMBRE%+ </strong></font></p> <p
align=\ccenter\c><img src=\c_visd_+ %FOTO% + .jpg\c width=\c + %FO-
TO-CX% + \c height=\c + %FOTO-CY% + \c alt=\c+%FOTO%+\c></p>
0000Set -> body, body + obra
0000Rem -> Presentacin de la pgina Html, componiendo el texto con el
contenido de las variables locales header, body y el cdigo Html de
fin de cuerpo y de pgina
0000Aadir retorno texto -> header+body+</body></html>
A tener en cuenta en el proceso: para la especificacin de parmetros en Html
stos van entrecomillados (). Puesto en las frmulas la comilla est reservada
para inicio y fin de una frmula de texto, se utiliza la secuencia de escape \c,
que inserta una comilla. Para la especificacin de los campos no se utiliza un
comando AVP (los propios de Velzquez), pues stos solamente pueden ser
08
Desarrollo completo
de una aplicacin
e
306 307 VELAZQUEZ VISUAL
utilizados en los objetos Pgina Html y Componente Html. En este caso se es-
pecifica directamente el identificador del campo (por ejemplo %NOMBRE%).
Cuando presentamos una imagen externa conviene insertar el comando
_visd_ (propio de Velzquez Visual) detrs del atributo src. As informamos
al Servidor de Aplicaciones que lo que servir a continuacin es una ima-
gen, y como tal ha de tratarla.
Aadir retorno URL
Guarda una direccin URL para abrirla al finalizar el proceso con el Explo-
rador Web que incorporan tanto el Ejecutor de Proyectos (ejecutable VRun-
ner) como el Navegador de Velzquez Visual (ejecutable Irunner). Es una
Funcin comn de lista y de ficha en la que especificaremos la URL a dis-
parar en el parmetro Frmula URL.
Ejemplo
En una tabla CLIENTES se tiene un campo de tipo alfabtico, WEB, en el
que almacenamos la direccin web del cliente. Podemos disparar un pro-
ceso desde una ficha de CLIENTES que abra la pgina web del cliente edi-
tado en la misma. Para ello incluiramos la lnea:
Aadir retorno URL -> %WEB%
Ejemplo
El ejemplo que explicamos a continuacin es especfico para aplicaciones
ejecutadas en la versin cliente-servidor de Velzquez Visual, es decir, apli-
caciones abiertas en un Servidor de Aplicaciones de Velzquez Visual y ata-
cadas con el Navegador de Velzquez Visual. No es vlido para aplicacio-
nes ejecutadas con el ejecutor VRunner.
Se trata de atacar desde el Navegador de Velzquez Visual la aplicacin que
estamos ejecutando, pero va web. En el proyecto habremos creado pginas
html; una con el identificador INDEX, que ser la que se presente por defecto.
Dispararemos un proceso como el que sigue:
If -> fEsClienteServidor()
Aadir retorno URL -> fGetWebAplicacion()
Antes de lanzar la aplicacin se interroga al Servidor de Aplicaciones si tie-
ne arrancado el Servidor HTTP. Para ello se utiliza la funcin de frmulas fEs-
ClienteServidor(), que devuelve 1 si est arrancado el servidor Web y 0 si no.
Si el servidor web est arrancado, se dispara la pgina principal de la apli-
cacin que est siendo ejecutada en ese momento. sta la devuelve la fun-
cin de frmulas fGetWebAplicacion(). Esta funcin ya devuelve la pasarela
El ejemplo que acabamos
de desarrollar resulta mucho
ms sencillo trabajando con
componentes HTML.
ADVERTENCIA
e
e
e
cgi completa, de modo que si el Servidor tiene la IP: 212.155.155.155 y la
aplicacin se llama HOMERO, lo que devolver la funcin de frmulas
fGetWebAplicacion() ser: Http://212.155.155.155/cgi-vel/HOMERO/
En tiempo de ejecucin, al disparar este proceso, se lanzar el explorador
web que incorpora el Navegador de Velzquez Visual, con la pgina princi-
pal de la aplicacin.
La funcin Aadir retorno URL nos permite tener un potente generador de
informes en una aplicacin, slo que en vez de usar objetos Informe lo que
se crearan seran Pginas HTML con la informacin a presentar.
Set retorno proceso = NO
Con esta funcin cambiamos el valor de retorno de un proceso que por de-
fecto es SI. Cuando se ejecuta esta funcin el proceso llamador recibe un
NO, con lo que se inhibe su finalizacin. Es una Funcin comn de lista y
de ficha a la que no hemos de pasarle parmetros.
Ejemplo
En un formulario se ha declarado un proceso asociado al evento Pierde Fo-
co de un campo. Al recibir el mensaje de que va a perder el foco, se ejecu-
ta dicho proceso, entre cuyas instrucciones se encuentra Set retorno pro-
ceso = NO. Al finalizar el proceso y retornar NO, se cancela la prdida de
foco del control, permaneciendo el foco en l.
Ejemplo
En un formulario de CLIENTES se ha declarado un proceso previo al Alta de
una ficha en el que se evala si el campo nombre est vaco, en cuyo caso
no se dar el alta. Al recibir Velzquez Visual el mensaje de que se va a pro-
ducir un alta, ejecuta el proceso previo y, si se cumple la condicin, recibe
un Set retorno proceso = NO. La consecuencia es que Velzquez Visual no
realiza el Alta. Las lneas de cdigo seran:
if -> fCampoVacio( %NOMBRE% )
Mensaje -> Ha de escribir el nombre del cliente, 0
Set retorno proceso = No
El proceso evala si est vaco el campo NOMBRE del cliente, en cuyo ca-
so lanza un mensaje advirtindolo y cancela el alta.
Imprimir informe
Imprime el informe que especifiquemos con los registros de la lista actual.
Es una Funcin propia de lista a la que hemos de pasar los parmetros:
Identificador informe: identificador del informe a imprimir (obligatorio).
Impresora lgica: puede ser la asignada al informe o cualquiera de las que
tenemos definidas en el proyecto.
08
Desarrollo completo
de una aplicacin
e
e
e
308 309 VELAZQUEZ VISUAL
Esta funcin de informes ha de ser disparada desde una lnea cuyo origen
sea una Lista de una tabla de datos. Por tanto, si queremos imprimir una fi-
cha determinada, la lista que alimente esta funcin deber contener nica-
mente el registro a imprimir.
Ejemplo
Al dar de alta un proveedor queremos imprimir un informe con los datos del
mismo. Segn esto vemos que el origen del proceso ha de ser una ficha de
la tabla PROVEEDORES.
Este proceso carga la lista de Proveedores por su ndice CODIGO, utilizan-
do como resolucin 1 el cdigo de la ficha del formulario. El resultado se-
r una lista de Proveedores con un nico registro: el que ha sido dado de
alta en el formulario.
Por ltimo, tendramos que asociar este proceso como Posterior a la pulsa-
cin del botn Aceptar. No puede ser Anterior porque este evento es dis-
parado antes de que la ficha sea guardada en el disco y, por tanto, si la fi-
cha no existe, no puede ser impresa.
Set retorno funcin
Permite establecer un retorno de un objeto visual funcin ( ) de Velz-
quez Visual. Es una Funcin especfica para el objeto visual funcin y hemos
de pasarle el parmetro Frmula dato de retorno, expresin frmula con el
dato a retornar.
Ejemplo
Tenemos una funcin, a la que llamaremos FUNCION, que contiene la ins-
truccin siguiente:
Set retorno funcin -> Esto es el retorno de la funcin
Si un proceso introducimos la lnea:
Set -> RetornoFuncion, FUNCION()
Entonces la variable local RetornoFuncin devolver la cadena Esto es el
retorno de la funcin.
Ficha y campos
Las funciones pertenecientes a este grupo trabajan con fichas (registros), y
algunas concretamente con campos. El origen de todas ellas ha de ser, por
tanto, una ficha.
e
e
Funcin
Modificar campo
Esta funcin modifica el contenido de un campo que especifiquemos con el
resultado de una frmula. Es una Funcin propia de ficha a la que hemos
de pasar los parmetros:
Identificador campo: identificador del campo a modificar (obligatorio).
Frmula nuevo dato: expresin tipo frmula para calcular el nuevo conteni-
do del campo (obligatorio).
Ejemplo
Supongamos que queremos modificar el valor del campo PVM (Precio Ven-
ta al por Mayor) subindolo un 10%. Para ello introduciramos la siguiente
lnea de cdigo:
Modificar campo -> PVM, %PVM% * 1.1
Get campo
Devuelve el contenido de un campo sin que se evale la frmula que lo con-
tenga. Por ejemplo, para obtener la frmula escrita por un usuario en un
campo de tipo frmula dinmica o para obtener la etiqueta de un campo
objeto. Es una Funcin propia de ficha.
Hemos de especificar los siguientes parmetros:
08
Desarrollo completo
de una aplicacin
FUNCIONES DE FICHA Y CAMPOS
e
310 311 VELAZQUEZ VISUAL
Identificador campo: el identificador del campo del que queremos obtener
su contenido.
Variable donde retorna contenido campo: especificacin de la variable local
donde queremos almacenar el contenido del campo (no es necesario que la
declaremos primero).
Check frmula dinmica
Comprueba si una frmula dinmica escrita por un usuario es correcta o no.
Es una Funcin propia de ficha que necesita los parmetros:
Identificador campo: identificador del campo frmula dinmica a evaluar.
Variable retorno OK: variable local del proceso que recoger si la frmula
escrita por el usuario es correcta (1) o no (0).
Variable retorno mensaje: variable local del proceso que recoger, en caso
de ser incorrecta la frmula, un texto con el error generado.
Un proceso con esta instruccin podra ejecutarlo en un formulario, como
evento de prdida de foco de un control de edicin de un campo tipo frmu-
la dinmica, con lo que si el usuario ha introducido una frmula incorrecta, no
dejar continuar hasta corregir el error, devolvindonos al control de edicin.
Limpiar campo objeto
Esta funcin limpia el contenido de un campo de tipo objeto, es decir, lo de-
ja vaco. Es una Funcin propia de ficha en la que hemos de especificar el
Identificador Campo: el identificador del campo objeto cuyo contenido que-
remos limpiar.
Importar texto
Con esta funcin importamos el contenido de un fichero de texto en un
campo de tipo alfabtico (alfabtico, alfa128, alfa64 y alfa40) u objeto tex-
to. Es una Funcin propia de ficha en la que especificamos:
Identificador Campo: identificador del campo en el que queramos importar
el contenido del archivo de texto.
Senda fichero origen: senda completa del fichero que deseamos importar.
Variable local que retorna S/No Import: aqu declaramos una variable lo-
cal para recoger si se import el fichero (1) o no (0).
Este proceso, que tiene origen en una ficha, lanza la ventana de seleccin
del fichero para que el usuario pueda seleccionar el fichero a importar. Im-
porta el contenido del fichero de texto a un campo de tipo objeto texto de
la tabla, de modo que si no lo importa lanza un mensaje de aviso.
Exportar texto
Con exportar texto generamos un fichero de texto a partir del contenido de
un campo alfabtico (alfabtico, alfa128, alfa64 y alfa40), objeto texto o fr-
mula alfabtica. Es una Funcin propia de ficha en la que debemos especi-
ficar los parmetros:
Identificador campo: identificador del campo alfabtico, objeto texto o fr-
mula alfabtica que deseamos exportar.
Senda fichero de destino: senda en la que se va a exportar el fichero de texto.
Identificador variable de retorno S/No export: en este parmetro podre-
mos declarar una variable local del proceso que recoger si se ha exporta-
do (1) o no (0) el texto.
Este proceso, que tiene su origen en una lista de Proveedores, guarda la sen-
da en la que se van a generar los archivos de texto en una variable local (path).
A continuacin recorre la lista de proveedores en modo de solo lectura.
En la variable local fichero concatena la variable local que contena la sen-
da, el nombre del proveedor y le aade un punto y la extensin TXT. En la
siguiente lnea crea el fichero de texto con el nombre del proveedor con el
contenido de un campo de tipo objeto texto de la tabla. Si no pudo expor-
tar nos avisa con un mensaje.
Importar dibujo
Esta funcin importa un archivo de imagen a un campo de tipo Objeto di-
bujo. Es una Funcin propia de ficha que necesita la especificacin de los
parmetros siguientes:
Identificador campo: nombre del campo de tipo objeto dibujo que va a re-
cibir la importacin de la imagen (obligatorio).
Senda fichero origen: especificacin de la va de acceso al fichero de don-
de se va a importar (obligatorio). Aqu podemos utilizar las variables del sis-
tema c y d (directorio actual y de la aplicacin, respectivamente) y/o varia-
bles locales (o globales, o constantes) que contengan la senda del archivo
a importar.
Identificador variable de Retorno S/No import: variable en la que se va a
guardar si se import (1) o no (0) el dibujo (opcional).
08
Desarrollo completo
de una aplicacin
312 313 VELAZQUEZ VISUAL
Ejemplo
Para importar un dibujo que se llame DIBUJO.BMP y que se encuentre en
el directorio de la aplicacin introduciramos la siguiente lnea:
Importar dibujo -> FOTO, d + \\Foto.bmp, bOK
Esta funcin importar el contenido del archivo Foto.bmp (para incluir en
una cadena la barra de directorio hay que escribirla dos veces: \\), en el
campo FOTO de la ficha actual. En la variable local bOK guardar el valor
de si import (1) o no (0).
Exportar dibujo
Crea un archivo con la imagen contenida en un campo de tipo objeto dibu-
jo. Es una Funcin propia de ficha en la que hemos de especificar:
Identificador campo: nombre del campo de tipo objeto que va a producir la
exportacin de la imagen (obligatorio).
Senda fichero destino: especificacin de la va de acceso al fichero donde se
va a exportar (obligatorio). Aqu podemos utilizar las variables del sistema c
y d y/o variables locales que contengan la senda del archivo a exportar.
Identificador variable de Retorno SI/NO export: variable en la que se va a
guardar si se export (1) o no (0) el dibujo (opcional).
Ejemplo
En la tabla EMPLEADOS tenemos un campo, FOTO, que es de tipo Objeto Di-
bujo. Queremos crear un proceso asociado al formulario de modificaciones de
EMPLEADOS que exporte la fotografa del empleado editado a un archivo BMP.
El proceso debe tener su origen, por tanto, en una ficha de EMPLEADOS. Sera:
Mediante la funcin Set creamos una variable local del proceso, a la que he-
mos llamado archivo, y le asignamos como contenido el campo %NOM-
BRE%del empleado ms la extensin .bmp. As, al archivo de imagen crea-
do se identificar con el nombre del empleado.
Con la funcin Pedir dato pedimos al usuario que introduzca la senda com-
pleta del directorio donde queremos guardar el archivo a exportar. En una
e
e
variable local del proceso, que hemos llamado bOK, se guardar si el usua-
rio ha aceptado el formulario (1) o no (0). En otra variable local de tipo tex-
to, path, guardamos la ruta escrita por el usuario.
A continuacin se evala (if) si la variable local bOK contiene un 1. En caso
afirmativo continuar con el proceso, en caso negativo se parar la ejecu-
cin del mismo.
Se vuelve a asignar el valor 0 a la variable local bOK, pues la utilizaremos
de nuevo para realizar otra evaluacin.
La siguiente funcin es Exportar dibujo. Como primer parmetro especificamos
el nombre del campo de tipo Objeto Dibujo del cual se va a copiar la imagen
(FOTO). El siguiente parmetro es la ruta y el nombre del archivo donde se co-
piar: path + \\ + archivo , que se especificar a travs del Asistente para
la creacin de frmulas. Puesto que la ruta la tenemos en una variable local, la
primera parte de la frmula ser dicha variable local (path). A esta variable hay
que aadirle la barra de directorios (\), por lo que le concatenaremos los sm-
bolos \\ (en un texto para poder utilizar la barra \ como texto y no como modi-
ficador hemos de escribirla dos veces). Finalmente aadimos el nombre del fi-
chero, que se encuentra en la variable local archivo. El ltimo parmetro ser
la variable local en la que guardamos si se ha exportado o no el dibujo (bOK).
Se evala si el fichero ha sido o no exportado, con la funcin if. Si bOK =
1 (el fichero ha sido exportado) entonces se presenta el siguiente mensaje:
Mensaje: El fichero ha sido copiado en + path + \\ + archivo. Se tra-
ta de una frmula en la que incluimos una cadena de texto (El fichero ha
sido copiado en ), a la que concatenamos la variable local que contiene la
ruta del directorio (path), la barra de directorios (\\) y la variable local que
contiene el nombre del fichero (archivo).
Si no ha sido exportado (Else), entonces se presentar el mensaje siguien-
te: Compruebe si la ruta que ha escrito es correcta.
Refrescar dimensiones dibujo
Refresca los valores de los campos que almacenan las dimensiones de una
imagen. Es una Funcin propia de ficha.
Cuando una tabla tiene un campo de tipo Objeto Dibujo, Velzquez, a tra-
vs de la opcin del men del Editor Campos/Crear campos dimensiones
dibujo, nos da la opcin de crear dos campos para almacenar sus dimen-
siones. El valor de estos campos es actualizado automticamente cuando
se da de alta o modifica un dibujo en una ficha.
Si modificamos la estructura de una aplicacin que ya tiene datos y aadi-
mos los campos para guardar las dimensiones del dibujo, al ejecutar la apli-
cacin todos los registros que ya existan antes de la modificacin del pro-
yecto y que contuviesen dibujos tendrn ambos campos a 0. Para estos ca-
sos tendremos que ejecutar un proceso con esta funcin para darles el va-
lor que les corresponda.
08
Desarrollo completo
de una aplicacin
e
314 315 VELAZQUEZ VISUAL
De cara a la ejecucin de una aplicacin con el Servidor Web de Velzquez
Visual, si en una tabla que tiene un campo de tipo Objeto Dibujo se inclu-
yen los campos para guardar las dimensiones del mismo, las imgenes se
presentarn con mayor rapidez.
Hemos de especificar el parmetro Identificador Campo objeto dibujo: iden-
tificador del campo objeto dibujo del que se tomarn las dimensiones para
almacenar en los campos correspondientes.
Ejemplo
En un proyecto existe una tabla de Artculos que contiene un campo de ti-
po Objeto Dibujo llamado FOTO. Realizamos una modificacin en el pro-
yecto para aadir los campos de dimensiones del objeto, por lo que tras
ejecutar la opcin correspondiente, en la tabla aparecern los campos FO-
TO-CX y FOTO-CY. Con el fin de dar valor a estos campos en los registros
que ya existan antes de modificar el proyecto hemos de ejecutar un proce-
so con origen en una lista de artculos. ste ser:
Recorrer lista lectura / escritura
Refrescar dimensiones dibujo -> FOTO
Ha cambiado el campo?
Esta funcin devuelve, en una variable local al proceso, el resultado de
comprobar si el campo identificado ha sido modificado. Devuelve 1 si ha si-
do modificado y 0 en caso contrario. Es una Funcin propia de ficha.
Podemos utilizarla, por ejemplo, asociada a la prdida de foco de un cam-
po de un formulario de modificaciones. As, si el campo ha cambiado se eje-
cutar un proceso, si no, no se ejecutar. Ojo: esta funcin ha de ser usa-
da antes de grabar en disco, pues compara el valor actual del campo con
el valor almacenado en disco.
Especificaremos los parmetros:
Identificador campo: identificador del campo consultado (obligatorio).
Identificador variable de retorno S/No: identificador de la variable local donde
devuelve el valor S/No que indica si el campo ha sido modificado (opcional).
Ejemplo
Hemos creado un proceso que realiza una serie de clculos en funcin del
contenido del campo PRECIO de una tabla de ARTICULOS. A este proceso
lo hemos llamado CAMBIO-PRECIO. Para que no se ejecute el proceso siem-
pre que en un formulario de modificaciones de ARTICULOS pierda el foco el
campo PRECIO, crearemos un proceso y lo asociaremos a la prdida de fo-
co de dicho campo. El origen del mismo ha de ser una Ficha de ARTICULOS:
e
e
Ha cambiado el campo, PRECIO, bOK
if bOK
Ejecutar proceso -> CAMBIO-PRECIO
Este proceso comprueba si ha cambiado el valor del campo PRECIO, en
cuyo caso ejecuta el proceso CAMBIO-PRECIO.
Ha cambiado la ficha?
Esta funcin devuelve, en una variable local al proceso, el resultado de
comprobar si se ha modificado algn campo de la ficha. Devolver 1 si ha
cambiado la ficha y 0 en caso contrario. Es una Funcin propia de ficha.
Podemos usarla, por ejemplo, como proceso anterior a una modificacin de
ficha. As, si se ha modificado algn campo de la misma, se ejecutar un
proceso, si no, no se ejecutar. Del mismo modo que la funcin Ha cam-
biado el campo?, ha de usarse antes de grabar en disco, ya que tambin
comprueba el valor actual del campo con el almacenado en disco.
Hemos de especificar el parmetro Identificador variable de retorno S/No:
identificador de la variable local donde devuelve si el campo ha sido modi-
ficado o no (opcional).
Ya existe en el ndice?
Esta funcin devuelve, en una variable local al proceso, el resultado de
comprobar si en el ndice identificado, de clave nica, ya existe la clave ac-
tual. La funcin compone la clave adecuada al ndice en el que se realiza la
consulta tomndolo de la ficha origen de la funcin, por lo que nosotros no
tendremos que hacer nada. Es una Funcin propia de ficha.
Cuando damos de alta un registro a travs de formulario, Velzquez com-
prueba en todos los ndices de clave nica que no haya registros duplica-
dos, pero cuando damos de alta a travs de tubos o procesos (por ejemplo)
slo se comprueba que no est duplicado el ndice CODIGO. Entonces es
interesante crear triggers anteriores al alta en los que la funcin Ya existe en
el ndice? compruebe que no existan duplicidades en los dems ndices de
clave nica de la tabla. En el caso de existir el ndice, usaremos la funcin
Set retorno proceso = NO para cancelar el alta.
Los parmetros que hemos de especificar son:
Identificador ndice: identificador del ndice consultado (obligatorio).
Identificador variable de retorno S/No: identificador de la variable local don-
de devuelve el valor S/No que indica si la clave ya existe en ese ndice de
clave nica (opcional).
Ejemplo
08
Desarrollo completo
de una aplicacin
e
e
316 317 VELAZQUEZ VISUAL
El proceso anterior tiene su origen en una ficha y comprueba si el registro
ya est indexado por ese cliente. Se utilizar la variable local de retorno
S/No para evaluar el resultado y actuar en consecuencia.
Ya existe en alguno de sus ndices de clave nica?
Esta funcin comprueba todos los ndices de clave nica y devuelve, en una
variable local al proceso, el mensaje que nos indica por qu ndices de cla-
ve nica ya existe el registro actual (si es que ya existe por alguno). La fun-
cin compone la clave adecuada al ndice en el que se realiza cada una de
las consultas; nosotros no tenemos que ocuparnos de ello. Es una Funcin
propia de ficha.
Hemos de especificar los parmetros:
Identificador variable de retorno S/No: identificador de la variable local donde
devuelve el valor S/No que indica si la clave ya existe en ese ndice (opcional).
Identificador variable de retorno mensaje: identificador de la variable donde
se guardar el mensaje.
Ejemplo
Este proceso, lanzado antes de dar de alta un Proveedor, comprueba si el
registro ya existe por alguno de sus ndices de clave nica, en la variable lo-
cal bok almacenar si ya existe, y en la variable local mensaje se guarda-
r el ndice o ndices de clave nica duplicado. Si se cumple la condicin,
devuelve un mensaje indicando por qu clave nica ya existe y cancela el
alta (Set retorno proceso = NO).
Pedir Formulario
Visualiza el formulario indicado, parndose el proceso hasta que el usuario
cierre el formulario. Es una Funcin propia de ficha.
El formulario se rellena con el contenido de la ficha en curso, pudiendo el
usuario modificar los datos antes de aceptar. No podemos utilizar esta fun-
cin para dar altas, sino para realizar modificaciones.
Cuando modificamos una ficha de esta manera, Velzquez Visual nicamen-
te controla la clave primaria CODIGO, el resto de claves nicas deben ser
controladas por nosotros en triggers, mediante las funciones Ya existe en el
ndice? o Ya existe en alguno de sus ndices? Esto es as ya que Pedir for-
mulario se usa sobre todo para obtener datos en variables o campos para
bsquedas que no tengan formulario asignado, u otros casos parecidos.
Hemos de especificar los parmetros siguientes:
e
e
Identificador formulario: identificador del formulario a presentar (obligatorio).
Identificador de la variable local que retorna SI/NO: variable local en la que
se recoger si el usuario ha pulsado Aceptar o Cancelar (opcional).
Ejemplo
En la siguiente lnea pedimos el formulario de precios de un artculo.
Pedir Formulario -> ARTICULO-PRECIOS
Ventana dibujo tamao original
Presenta en una ventana el contenido del campo de tipo objeto dibujo se-
leccionado en su tamao original, o proporcionado si ste es mayor que el
tamao de la pantalla. Es una Funcin propia de ficha a la que hemos de
pasar los parmetros:
Campo objeto dibujo: identificador del campo tipo objeto dibujo a presen-
tar (obligatorio).
Ttulo ventana (opcional): frmula para la composicin del ttulo de la venta-
na que se presente. Si no especificamos ninguna frmula el ttulo ser 0.
Ejemplo
En un casillero de una tabla ARTICULOS queremos que, al hacer clic sobre
una casilla, se presente la foto del artculo con su tamao original. El pro-
ceso tendr su origen en una ficha de artculos y ser:
Ventana dibujo tamao original -> FOTO, %NOMBRE%
En el segundo parmetro se ha seleccionado el campo %NOMBRE% para
que se visualice el nombre del artculo como ttulo de la ventana.
Formulario Alta de Maestro
Esta funcin crea un nuevo registro en la tabla de datos maestra apuntada
por el campo enlazado, utilizando el formulario declarado en el otro par-
metro, y generando un subproceso de ficha con los datos del registro crea-
do. El proceso queda paralizado hasta que el usuario cierre el formulario. Es
una Funcin propia de ficha.
Necesita los siguientes parmetros:
Identificador campo: identificador del campo enlazado (obligatorio).
Identificador formulario: identificador del formulario a visualizar (obligatorio).
Ejemplo
En un proceso cuyo origen es una ficha de ARTICULOS queremos dar de
dar de alta la marca (maestro) del artculo.
08
Desarrollo completo
de una aplicacin
e
e
e
318 319 VELAZQUEZ VISUAL
El proceso anterior pide el formulario MARCA-ALTA para dar de alta una
nueva Marca de Artculos.
Leer ficha de maestro
Lee la ficha del maestro del campo enlazado y crea un subproceso de ficha
con los datos del registro ledo. Esta ficha es de solo lectura, por lo tanto,
ningn cambio ser guardado en la base de datos. El subproceso que ge-
nera esta funcin tendr su origen en la ficha del maestro editado. Es una
Funcin propia de ficha en la que especificamos el parmetro Identificador
campo: identificador del campo enlazado (obligatorio).
Ejemplo
Desde una ficha de ARTICULOS permitiremos la lectura de los datos de su
maestro MARCAS.
El proceso anterior lee la ficha de la marca del artculo actual, pero no po-
demos modificarla en el subproceso generado. La lnea de subproceso
creada por esta funcin tendr como origen una ficha de MARCAS.
Modificar ficha de maestro
Lee la ficha del campo enlazado y crea un subproceso de ficha con los datos del
registro ledo. Podemos modificar esta ficha en el subproceso, de modo que cual-
quier cambio ser guardado en la tabla de datos. Es una Funcin propia de ficha.
Hemos de especificar el parmetro Identificador campo: identificador del
campo enlazado (obligatorio).
Ejemplo
Leeremos la ficha de la marca del artculo actual y podremos modificar al-
gn campo de la misma en el subproceso generado.
API de Velzquez
La A.P.I. de Velzquez Visual (Aplication Program Interface o Interfaz de Apli-
cacin del Programa: conjunto de rutinas del sistema que se pueden usar en
un programa para la gestin de entrada/salida, gestin de ficheros, etc.) nos
permiten trabajar con campos y consta de las siguientes funciones:
e
e
e
APIVEL Nmero de campos
Esta funcin devuelve el nmero de campos que tiene una tabla determina-
da. Es una Funcin comn de lista y de ficha.
Hemos de especificar los parmetros:
Identificador tabla: de la lista de tablas de datos del proyecto indicamos
aquella de la que queremos obtener el nmero de campos.
Variable retorno dato: variable local del proceso que recoger el nmero de
campos de la tabla.
APIVEL Campo Get nombre por nmero
Esta funcin devuelve el nombre de un campo segn el nmero que le pa-
semos. Es una Funcin comn de lista y de ficha en la que hemos de indi-
car los siguientes parmetros:
Identificador tabla: de la lista de tablas de datos del proyecto selecciona-
mos aquella de la que queremos obtener el nombre del campo.
Nmero de campo: expresin tipo frmula con el nmero de campo del que
queremos obtener el nombre. El orden que se sigue es 0 para el primer
campo de la tabla, 1 para el segundo y as sucesivamente.
08
Desarrollo completo
de una aplicacin
FUNCIONES API DE VELZQUEZ VISUAL
320 321 VELAZQUEZ VISUAL
Variable retorno dato: variable local del proceso que recoger el nombre del
campo.
Ejemplo
Tenemos una tabla de artculos con los siguientes campos:
Si ejecutamos las instrucciones:
APIVEL Campo Get nombre por nmero -> , 0, retorno
La variable local retorno devolver: Cdigo.
APIVEL Campo Get nombre por nmero -> , 4, retorno
La variable local retorno devolver: Artculo suscripcin.
APIVEL Campo Get nombre por identificador
Esta funcin devuelve el nombre o descripcin de un campo segn el identi-
ficador de campo que le pasemos. Es una Funcin comn de lista y de ficha.
Hemos de pasarle los parmetros:
Identificador tabla: de la lista de tablas de datos del proyecto selecciona-
mos aquella de la que queremos obtener el nmero de campos.
Identificador de campo: de la lista de campos de la tabla seleccionamos el
que deseemos.
Variable retorno dato: variable local del proceso que recoger el nombre del
campo.
e
Ejemplo
Tenemos una tabla de artculos con los campos siguientes:
Si ejecutamos la instruccin:
APIVEL Campo Get nombre por identificador -> , CODIGO, retorno
La variable local retorno devolver: Cdigo.
APIVEL Campo Get nombre por identificador -> , ARTI-SUSCRIP, retorno
La variable local retorno devolver: Artculo suscripcin.
APIVEL Campo Get nmero por identificador
Esta funcin devuelve el nmero de orden de un campo segn el identifica-
dor de campo que le pasemos. Es una Funcin comn de lista y de ficha.
Hemos de pasarle los parmetros:
Identificador tabla: de la lista de tablas de datos del proyecto selecciona-
mos aquella de la que queremos obtener el nmero de campos.
Identificador de campo: de la lista de campos de la tabla seleccionamos el
que deseemos.
Variable retorno dato: variable local del proceso que recoger el nmero del
campo. Comienza a numerar por 0.
Ejemplo
Tenemos la tabla de artculos anterior:
08
Desarrollo completo
de una aplicacin
e
e
322 323 VELAZQUEZ VISUAL
Si ejecutamos la instruccin:
APIVEL Campo Get nmero por identificador -> , CODIGO, retorno
La variable local retorno devolver: 0.
APIVEL Campo Get nmero por identificador -> , ARTI-SUSCRIP, retorno
La variable local retorno devolver: 4.
APIVEL Modificar campo por nmero
Esta funcin modifica el contenido de un campo que especifiquemos con el
resultado de una frmula, escogindolo usando el nmero de campo en vez
del identificador. Es una Funcin propia de ficha a la que hemos de pasar
los parmetros:
Frmula nmero del campo: expresin tipo frmula para calcular el nmero
del campo (obligatorio).
Frmula nuevo dato: expresin tipo frmula para calcular el nuevo conteni-
do del campo (obligatorio).
APIVEL Get campo por nmero
Esta funcin obtiene el contenido de un campo que especifiquemos con el
resultado de una frmula. Es una Funcin propia de ficha a la que hemos
de pasar los parmetros:
Frmula nmero del campo: expresin tipo frmula para calcular el nmero
del campo (obligatorio).
Variable donde retorna contenido dato: variable local en la que guardaremos
el contenido del campo (obligatorio).
Internet
Con las siguientes instrucciones de Internet de Velzquez y el Servidor de
Aplicaciones WEB podremos presentar pginas web dinmicas:
e
Html: ejecutar componente
Esta funcin ejecuta un Componente Html. El resultado es almacenado en
una variable local que en otro punto del proceso llamaremos en la funcin
Aadir retorno texto para lanzar una pgina web. El proceso, por tanto, de-
ber ejecutarse por el servidor HTTP de Velzquez Visual. Es una Funcin
comn de lista y de ficha.
Hemos de pasarle los parmetros:
Variable retorno Html: especificar el nombre de la variable local del proce-
so que va a recoger el cdigo html del componente ejecutado.
Identificador componente: de la lista desplegable seleccionaremos el com-
ponente html a ejecutar.
Frmula parmetros: si en el componente html se hubiesen definido par-
metros, se resolveran aqu, separados entre comas y en el mismo orden en
el que fueron definidos en el componente.
Ejemplo
Tenemos tres parmetros en el Componente Html para poder pasarle el
nombre, direccin y telfono del usuario y presentarlo en una pgina web.
08
Desarrollo completo
de una aplicacin
FUNCIONES DE INTERNET DE VELZQUEZ
e
324 325 VELAZQUEZ VISUAL
En la casilla de parmetros los resolvemos separando cada uno con una co-
ma: %NOMBRE%,%DIRECCION%,%TELEFONO%. La variable local reco-
ger el componente Html con los parmetros ya sustituidos por sus valo-
res, con lo que al final del proceso, con una funcin retorno, mostraramos
la pgina web completa.
Aprovechamos para recordar que si en una frmula vamos a incluir una
constante decimal, hemos de usar el punto ( . ), no la coma ( , ).
Internet: Conectar
Esta funcin establece conexin con un servidor de Internet, un servidor
Proxy o una LAN desde una aplicacin de Velzquez. Si existen varias cone-
xiones, se presentar en primer lugar la que tengamos por defecto. Es una
Funcin comn de lista y de ficha en la que especificaremos el parmetro-
Variable retorno OK conexin: identificador de la variable local que retorna-
r si se ha realizado la conexin (1) o no (0).
Internet: Get estado conexin
Esta funcin devuelve el estado de la conexin a Internet y a travs de qu
se est realizando. Es una Funcin comn de lista y de ficha en la que es-
pecificamos los siguientes parmetros:
Variable retorno OK: identificador de la variable local que retornar el esta-
do de la conexin.
Variable retorno s/no Mdem: identificador de la variable local que devol-
ver si se est realizando una conexin va modem (1) o no (0).
Variable retorno s/no Lan: identificador de la variable local que devolver si
se est realizando una conexin LAN (1) o no (0).
Variable retorno sno Proxy: identificador de la variable local que devolver
si se est realizando una conexin a travs de un servidor Proxy (1) o no (0).
Internet: Desconectar
Esta funcin desconecta la conexin a Internet realizada desde un proceso
de Velzquez Visual. Es una Funcin comn de lista y de ficha en la que in-
dicamos el parmetroVariable retorno de desconexin: identificador de la
variable local que retornar si se ha realizado la desconexin (1) o no (0).
Get fichero de URL
Guarda en disco un fichero de una URL (una pgina html, un jpeg, etc.). Es una
Funcin comn de lista y de ficha a la que hemos de pasar los parmetros:
URL: expresin frmula con la URL de la que queremos obtener un objeto.
Fichero de destino: expresin frmula. Se especificar la senda, nombre y
extensin del fichero de destino.
Variable retorno OK: variable local que devolver si la instruccin se ha eje-
cutado satisfactoriamente (1) o no (0).
e
Ejemplo
Imaginemos que en la aplicacin permitimos la exploracin web y quere-
mos ejecutar un proceso que almacene en disco la ltima URL visitada; el
proceso sera:
En la instruccin Get fichero de URL los parmetros utilizados han sido:
URL: fGetLastWebURL(), funcin de frmulas que devuelve la URL de la l-
tima pgina web visitada.
Fichero destino: d+\\Webs + fGetLastWebTitle(), la senda donde guardar el
fichero de la URL ser en la carpeta Webs que se encuentra dentro del direc-
torio de la aplicacin (variable del sistema d). Como nombre de archivo se uti-
liza la funcin de frmulas fGetLastWebTitle(), que devuelve el ttulo de la l-
tima pgina visitada y se ha aadido a la cadena la extensin, el literal .htm.
E-mail
Para manejar correo electrnico desde un proceso contamos con una serie
de funciones de proceso que nos facilitan la tarea. stas se presentan en la
siguiente figura:
08
Desarrollo completo
de una aplicacin
FUNCIONES DE E-MAIL
e
326 327 VELAZQUEZ VISUAL
E-mail: Get Fecha/Hora
Esta funcin obtiene la fecha y la hora de un campo tipo objeto e-mail. Es
una funcin Funcin propia de ficha en la que seleccionamos los parme-
tros siguientes:
Identificador campo e-mail: identificador del campo e-mail del que quere-
mos obtener la fecha y la hora.
Fecha (variable donde retorna): identificador de la variable local del proce-
so donde se almacenar la fecha del e-mail.
Hora (variable donde retorna): identificador de la variable local del proceso
donde se almacenar la hora del e-mail.
E-mail: Set Fecha/Hora
Esta funcin establece la fecha y la hora en un campo tipo objeto e-mail. Es
una Funcin propia de ficha.
Hemos de pasarle los parmetros siguientes:
Identificador campo e-mail: identificador del campo e-mail en el que quere-
mos establecer la fecha y la hora.
Fecha: frmula con la especificacin de la fecha.
Hora: expresin frmula con la especificacin de la hora.
E-mail: Get Destinatario
Esta funcin obtiene el destinatario de un campo tipo objeto e-mail. Es una
Funcin propia de ficha en la que hemos de especificar:
Identificador campo e-mail: identificador del campo e-mail del que preten-
demos obtener el destinatario.
Destinatario (variable donde retorna): identificador de la variable local del
proceso donde queremos almacenar el destinatario.
E-mail: Set Destinatario
Esta funcin asigna un destinatario a un campo tipo objeto e-mail. Es una
Funcin propia de ficha en la que indicamos los parmetros:
Identificador campo e-mail: identificador del campo e-mail al que asigna-
mos el destinatario.
Destinatario: expresin frmula con la especificacin del destinatario.
E-mail: Get Cc
Esta funcin obtiene el destinatario de la carbon copy de un campo e-mail.
Es una Funcin propia de ficha en la que indicamos los parmetros:
Identificador campo e-mail: identificador del campo e-mail del que quere-
mos obtener el destinatario de la carbon copy.
Cc (Variable donde retorna): declaracin de una variable local del proceso
donde se recoger el destinatario de la carbon copy.
E-mail: Set Cc
Esta funcin asigna el destinatario de una carbon copy de un campo tipo
objeto e-mail. Es una Funcin propia de ficha.
Los parmetros a especificar son:
Identificador campo e-mail: identificador del campo e-mail en el que esta-
bleceremos el destinatario de la carbon copy.
Cc: expresin frmula con la especificacin del destinatario de la carbon
copy del e-mail.
E-mail: Get Bcc
Esta funcin obtiene el destinatario oculto de un campo tipo objeto e-mail.
Es una Funcin propia de ficha.
Indicaremos los parmetros siguientes:
Identificador campo e-mail: identificador del campo e-mail del que quere-
mos obtener el destinatario oculto del mensaje.
Bcc (Variable donde retorna): variable local del proceso donde se recoger
el destinatario oculto del mensaje.
E-mail: Set Bcc
Esta funcin especifica el destinatario oculto de un e-mail. Es una Funcin
propia de ficha y hemos de indicarle los siguientes parmetros:
Identificador campo e-mail: identificador del campo e-mail en el que espe-
cificamos el destinatario oculto del mensaje.
Bcc: expresin frmula con la especificacin del destinatario oculto del mensaje.
E-mail: Get Remitente
Esta funcin obtiene el remitente de un e-mail. Es una Funcin propia de fi-
cha en la que especificamos los parmetros siguientes:
Identificador campo e-mail: identificador del campo e-mail del que quere-
mos obtener el remitente.
Remitente (Variable donde retorna): variable local del proceso donde se re-
coger el remitente del mensaje.
E-mail: Get nmero de ficheros adjuntos
Esta funcin obtiene el nmero de ficheros adjuntos en un e-mail. Es una
Funcin de ficha que necesita los siguientes parmetros:
Identificador campo e-mail: identificador del campo e-mail del que quere-
mos conocer el nmero de ficheros adjuntos.
08
Desarrollo completo
de una aplicacin
328 329 VELAZQUEZ VISUAL
Variable donde retorna el nmero: variable local del proceso que recoger
el nmero de ficheros adjuntos.
E-mail: Salvar fichero adjunto
Esta funcin guarda en disco un documento adjunto en un e-mail. Es una
Funcin de ficha que necesita los parmetros:
Identificador campo email: identificador del campo e-mail del que queremos
extraer el archivo adjunto.
Frmula nmero de adjunto (del 1 al ): expresin frmula que resuelva el n-
mero del documento adjunto. Cuando visualizamos los archivos adjuntos en
un control de tipo e-mail, el primero comenzando por la izquierda ser el 1.
Variable donde retorna el nombre del fichero: variable local del proceso
donde se guardar el nombre del fichero adjunto.
Frmula senda para salvar: expresin frmula con la senda del archivo a guardar.
Ejemplo
Queremos ejecutar un proceso desde un formulario de una tabla que tiene
un campo tipo objeto e-mail, de modo que guarde en disco todos los do-
cumentos adjuntos dentro de la carpeta Adjuntos que cuelga del directorio
de la aplicacin. El proceso sera:
Primero comprueba el nmero de ficheros adjuntos del mensaje y ejecuta
un bucle for tantas veces como ficheros adjuntos tenga.
Dentro del bucle ejecutar la instruccin para salvar el fichero adjunto, los pa-
rmetros son: Identificador campo e-mail: EMAIL. Frmula nmero de adjun-
to: se resuelve con la variable local x, que es la que se incrementa en el bu-
cle for. Variable donde retorna el nombre del fichero: hemos inicializado una
variable local llamada NomFichero. Frmula senda para salvar: hemos com-
puesto la siguiente frmula: d + \\Adjuntos\\ + NomFichero, siendo d la
variable del sistema que devuelve el directorio de la aplicacin, \\Adjuntos\\
es la carpeta, dentro del directorio de la aplicacin, donde guardamos el fi-
chero y NomFichero es la variable local que contiene el nombre del fichero.
E-mail: Set Remitente
Esta funcin establece el remitente de un e-mail. Es una Funcin propia de
ficha en la que hemos de especificar los parmetros siguientes:
Identificador campo e-mail: identificador del campo e-mail en el que quere-
mos establecer el remitente.
Remitente: expresin frmula con la especificacin del remitente.
e
E-mail: Get Asunto
Esta funcin obtiene el asunto de un e-mail. Es una funcin Funcin propia
de ficha que necesita los parmetros:
Identificador campo e-mail: identificador del campo e-mail del que quere-
mos obtener el asunto.
Asunto (Variable donde retorna): variable local del proceso donde se alma-
cenar el asunto del mensaje.
E-mail: Set Asunto
Esta funcin especifica el asunto de un e-mail. Es una Funcin propia de
ficha.
Los parmetros necesarios son:
Identificador campo e-mail: identificador del campo e-mail del que estable-
cemos el asunto.
Asunto: expresin frmula con el asunto del mensaje.
E-mail: Get cuerpo mensaje
Esta funcin obtiene el cuerpo del mensaje de un e-mail. Es una Funcin
propia de ficha con los parmetros:
Identificador campo e-mail: identificador del campo e-mail del que quere-
mos obtener el cuerpo del mensaje.
Mensaje (Variable donde retorna): variable local del proceso donde se al-
macenar el cuerpo del mensaje.
E-mail: Set cuerpo mensaje
Esta funcin establece el cuerpo del mensaje de un e-mail. Es una Funcin
propia de ficha que necesita los parmetros siguientes:
Identificador campo e-mail: identificador del campo e-mail del que estable-
cemos el cuerpo del mensaje.
Mensaje: expresin frmula con la especificacin del cuerpo del mensaje.
Ejemplo
A continuacin expondremos un ejemplo de cmo componer un e-mail pa-
ra la realizacin de un pedido. El esquema de tablas sobre el que trabaja-
mos es el siguiente:
08
Desarrollo completo
de una aplicacin
e
330 331 VELAZQUEZ VISUAL
La tabla PROVEEDORES contiene un campo alfabtico (E-MAIL) donde se
almacena la direccin de correo electrnico del proveedor. En la variable
global $REMITENTE$ se almacena la direccin de correo electrnico de
nuestra empresa. El campo de tipo objeto e-mail de la tabla PEDIDOS se
llama MENSAJE. El proceso, con origen en una ficha de la tabla PEDIDOS,
ser:
E-mail: Set fecha/hora -> MENSAJE, fHoy(), fAhora()
E-mail: Set destinatario -> MENSAJE, %PROVEEDORES.NOMBRE% + <
+ %PROVEEDORES.E-MAIL% + >
E-mail: Set remitente -> MENSAJE, $REMITENTE$
E-mail: Set asunto -> MENSAJE, Pedido nmero: + %CODIGO%
E-mail: Set cuerpo -> Pedido nmero: + %CODIGO%+ \r\n + \r\n
+ \r\n+ fJustificarLeft( CODIGO, 10 ) + fJustificarLeft( NOMBRE, 40
) + fJustificarRight( CANTIDAD ) + \r\n + fRepiteCadena( _, 60 ) +
\r\n
Cargar histrico -> LINEASDEPEDI, CODIGO
Recorrer lista solo lectura
Set -> cuerpo, cuerpo + fJustificarRight( %ARTICULOS%,
10, 0 ) + + fJustificarLeft( %ARTICULOS.NOMBRE%,
40 ) + +fJustificarRight( %CANTIDAD#S%,5 ) + \r\n
E-mail: Set cuerpo mensaje -> MENSAJE, cuerpo
Este proceso en primer lugar establece fecha y hora del mensaje, el desti-
natario, el remitente y el asunto.
Inicializa la variable local cuerpo con una frmula que crea una cadena en la
que se incluye el nmero del pedido, y el encabezado de las lneas del pedido.
Carga las lneas del pedido y concatena a la variable local cuerpo cada l-
nea de pedido.
Finalmente, genera el cuerpo del campo MENSAJE con el contenido de la
variable local cuerpo. El resultado final del cuerpo del mensaje sera:
e
Pedido nmero: 1
CODIGO NOMBRE CANTIDAD
0000000001 Tuercas 250
0000000002 Tornillos 5.200
0000000003 Clavos 25
E-mail: Adjuntar fichero
Esta funcin adjunta un archivo en un e-mail. Es una Funcin propia de fi-
cha en la que hemos de especificar los parmetros siguientes:
Identificador campo e-mail: identificador del campo e-mail al que vamos a
adjuntar el fichero.
Frmula senda: en este parmetro se especificar una frmula con la sen-
da del fichero a adjuntar.
Ejemplo
En un formulario que contiene un control de edicin de un campo objeto e-
mail, queremos incluir un botn a travs del cual el usuario pueda seleccio-
nar documentos para adjuntar en el correo electrnico. Utilizaremos bsica-
mente tres instrucciones de procesos: Ventana seleccin de fichero, para
presentar la ventana de seleccin de fichero de Windows en la que selec-
cionar los archivos a adjuntar, For, instruccin que incluiremos en un bucle
for para que el usuario pueda estar seleccionando archivos a adjuntar hasta
que cancele la ventana de seleccin de fichero y E-mail: Adjuntar fichero.
El proceso ser:
El proceso inicializa la variable local bOK a 1; sta ser utilizada tanto en
la condicin de salida del bucle for como para determinar si el usuario ha
seleccionado algn fichero en la ventana de seleccin de fichero.
Repetir el bucle for mientras la variable bOK sea distinta de 0.
Mostrar la ventana de seleccin de fichero. El fichero seleccionado por el
usuario ser almacenado en la variable local fichero, y retornar si el usua-
rio ha aceptado o cancelado la ventana de seleccin de fichero en la varia-
ble local bOK.
Si la variable bOK es igual a 1, adjuntar el fichero seleccionado por el
usuario al campo e-mail; sino, no se har nada y finalizar la ejecucin del
bucle for y del proceso.
08
Desarrollo completo
de una aplicacin
e
e
332 333 VELAZQUEZ VISUAL
E-mail: Eliminar fichero adjunto
Esta funcin elimina un fichero adjunto de un e-mail. Es una Funcin de fi-
cha en la que indicamos los parmetros:
Identificador campo email: identificador del campo e-mail del que elimina-
remos un fichero adjunto.
Frmula nmero de adjunto (del 1 al ): expresin frmula que resuelva el
nmero del documento adjunto a eliminar. El primero por la izquierda ser
el 1.
Ejemplo
En un formulario donde estamos editando un objeto e-mail queremos incluir
un botn para eliminar un documento adjunto; el proceso podra ser:
E-mail: Iniciar conexin para enviar
Esta funcin inicia la conexin para el posterior envo de mensajes. Es una
Funcin comn de lista y de ficha en la que hemos de indicar el parmetro
Nombre del servidor, expresin frmula con la especificacin del servidor
utilizado.
E-mail: Enviar
Es una Funcin comn de lista y de ficha con la que enviamos e-mails. An-
tes habremos establecido conexin con Internet mediante la funcin Inter-
net: Conectar y con el servidor de correo, con la funcin Iniciar conexin pa-
ra enviar. Hemos de especificar los parmetros:
Identificador campo e-mail: campo e-mail a enviar.
Variable retorno Ok enviado: variable local del proceso que recoger si el e-
mail ha sido enviado (1) o no (0).
Ejemplo
Veamos un ejemplo de una aplicacin que contemple funciones de correo
electrnico. La aplicacin tiene tres tablas:
e
e
CLIENTES: contiene los datos del cliente, incluida su direccin de correo
electrnico (campo E-MAIL).
CARTAS TIPO: contiene un campo descripcin donde se especificar el te-
ma de la carta (campo NOMBRE) y un campo de tipo objeto texto que re-
coger el cuerpo de la carta (campo CARTA).
MENSAJES: tabla histrica de CLIENTES donde se irn almacenando los
mensajes de correo electrnico enviados a cada cliente. Contiene un cam-
po booleano que recoger si el mensaje est enviado o no, y un ndice que
utilizar este campo como campo condicin para indexar (para que slo in-
dexe los que tengan el campo booleano a 0). Esta tabla tiene un campo FE-
CHA que recoger la fecha de envo del mensaje, adems del campo tipo
objeto email (EMAIL) que contendr el correo.
Asimismo se han creado dos variables globales de tipo alfabtico; una en la
que se almacenar el Servidor por el que se va a establecer la conexin
(SERVIDOR) y otra que recoger el nombre de la empresa duea del pro-
grama.
Vamos a crear dos procesos: uno que en base a una carta tipo selecciona-
da genere los e-mails correspondientes en la tabla MENSAJES, y otro que
los enve.
El proceso para la creacin de e-mails tendr su origen en una ficha de la
tabla CARTAS, y ser:
El proceso comienza inicializando dos variables locales para almacenar el
contenido de los campos NOMBRE y CARTA de la tabla CARTASTIPO. s-
tas son asunto y cuerpo, respectivamente.
08
Desarrollo completo
de una aplicacin
e
334 335 VELAZQUEZ VISUAL
Carga la lista de clientes, la recorre y comprueba si el cliente actual tiene
especificada una direccin de correo electrnico. En caso de que dicho
campo no est vaco, el proceso almacenar en las variables locales
cliente y e-mail el cdigo y el contenido del campo e-mail del cliente en
curso.
Por cada cliente dar de alta un registro en la tabla MENSAJES, al que se
le asignar como cliente el almacenado en la variable local cliente.
Se utilizan las funciones de e-mail para establecer el destinatario (almace-
nado en la variable local e-mail), el remitente (almacenado en la variable glo-
bal EMPRESA), el asunto (almacenado en la variable local asunto) y el cuer-
po del mensaje. Fijmonos cmo la frmula del cuerpo del mensaje conca-
tena a la cadena Estimado el nombre del cliente, dos retornos de carro y
la carta (almacenada en la variable local cuerpo).
El resto de los parmetros del e-mail (fecha, hora, etc.) sern asignados
cuando se ejecute el proceso de envo de los e-mails. Este proceso tendr
su origen en una lista de la tabla MENSAJES y ser:
El proceso comienza conectndose a Internet, y si se ha logrado la cone-
xin, inicia la conexin con el servidor almacenado en la variable global
$SERVIDOR$ para enviar los mensajes.
Recorre la lista de mensajes y, si el mensaje no est enviado, modifica el
campo FECHA por la fecha actual (funcin fHoy() ), establece la fecha y ho-
ra de envo del mensaje y enva el mensaje.
Si el mensaje ha sido enviado, modificar el campo booleano ENVIADO de
la tabla MENSAJES.
Una vez enviados todos los mensajes se desconecta (si no se ha podido
desconectar el proceso lo advierte a travs de un mensaje). Si no se ha
podido establecer la conexin de Internet, se emitir un mensaje infor-
mativo.
e
E-mail: Iniciar conexin para recibir
Esta funcin inicia la conexin para la posterior recepcin de mensajes. Es
una Funcin comn de lista y de ficha en la que hemos de especificar los
parmetros siguientes:
Nombre del servidor: expresin frmula con la especificacin del servidor
de correo entrante utilizado.
Usuario: expresin frmula con el nombre de la cuenta de correo que se va-
ya a utilizar.
Password: contrasea de la cuenta de correo.
N de emails en servidor (variable donde retorna): inicializacin de una va-
riable local del proceso que devolver el nmero de mensajes recibidos en
esa cuenta en el servidor de correo entrante.
E-mail: Recibir uno
Esta funcin nos permite recibir un e-mail. Para recibir correo, al igual que
para enviarlo, primero debemos conectarnos a Internet con la funcin In-
ternet: Conectar, y luego al servidor de correo con la funcin Iniciar cone-
xin para recibir. Es una Funcin comn de lista y de ficha en la que espe-
cificamos los siguientes parmetros:
Nmero (1 -> N de emails): expresin frmula con la especificacin del n-
mero de e-mail a recibir (el nmero total de e-mails en el servidor de correo
entrante lo devuelve la funcin E-mail: Iniciar conexin para recibir).
Mensaje (variable donde retorna): inicializa una variable local del proceso en
la que se almacenar el mensaje recibido.
Variable retorno ok recibido: inicializa una variable local que recoger si el
mensaje ha sido recibido (1) o no (0).
Ejemplo
Veamos un proceso para recepcin de correo electrnico. Los mensajes re-
cibidos sern dados de alta en una tabla llamada MENSAJES.
Este proceso realiza la conexin a Internet, inicia la conexin para recibir es-
pecificando como parmetros el nombre del servidor de correo entrante, el
08
Desarrollo completo
de una aplicacin
e
336 337 VELAZQUEZ VISUAL
nombre de usuario y la contrasea de la cuenta de correo y una variable lo-
cal para fijar el nmero de mensajes a recibir.
Mediante un bucle for vamos recibiendo uno a uno los mensajes y dndo-
los de alta en la tabla correspondiente.
Listas
Conjunto de instrucciones que nos permiten trabajar con listas de tablas
para leer registros, escribir, eliminar, etc.
Recorrer lista solo lectura
Es una Funcin propia de lista que recorre la lista y ejecuta, con cada re-
gistro de la misma, las instrucciones que cuelgan en el subproceso.
El subproceso que cuelga es de ficha, pero al de solo lectura, los registros
no pueden ser alterados con funciones tales como Modificar campo (aun-
que s podemos leerlos). No tiene parmetros.
Recorrer lista lectura / escritura
Esta funcin recorre la lista y ejecuta, con cada registro de la misma, las ins-
trucciones que cuelgan en un subproceso (de ficha). En este caso, los re-
gistros de la lista pueden ser modificados por funciones como Modificar
campo. No tiene parmetros.
FUNCIONES DE LISTA
e
Ejemplo
Veamos un proceso que recorra una lista de ARTICULOS y suba un 10% el
precio de los mismos. El origen de la lnea de esta funcin tendr que ser
una Lista de ARTICULOS:
La funcin Modificar campo requiere que se le indique el campo a modifi-
car y el nuevo valor que va a tomar dicho campo.
Recorrer lista eliminando fichas
Recorre la lista borrando los registros de la misma. Antes de eliminar cada re-
gistro ejecuta las instrucciones que cuelgan en el subproceso de ficha. Eje-
cutar las actualizaciones declaradas en la tabla de datos asociada a la lista.
Es una Funcin propia de lista a la que no hemos de pasar parmetros.
Esta funcin es muy til para realizar un superborrado. Cuando se intenta
eliminar una ficha de maestro que tiene datos en tablas histricas, el pro-
grama no lo permite por tener datos en histricos. Para poder borrar dicha
ficha el usuario tendra que ir borrando uno a uno todos los registros hist-
ricos de dicho maestro. El peligro del superborrado est en que si se borra
el registro de maestro equivocado, ya no nos podemos volver atrs, por eso
es ms que aconsejable que pidamos confirmacin del borrado.
Ejemplo
Tenemos una tabla maestra AUTORES y su histrica LIBROS. Para permitir
que un usuario pueda borrar un autor y todos sus libros crearamos un pro-
ceso asociado al botn Eliminar del formulario de bajas de autores, con ori-
gen en una ficha de AUTORES y del tipo:
fPregunta() es una funcin que muestra un cuadro de dilogo con el literal
escrito entre parntesis, con los botones aceptar y cancelar. Si el usuario
pulsa aceptar, devolver 1, si no, 0. Al utilizar esta funcin con el mandato
IF, ste evaluar si la condicin es verdadera.
La funcin Set retorno proceso = No anula la pulsacin del botn Eliminar.
Recorrer lista eliminando fichas sin desactualizar
Esta funcin recorre la lista borrando cada uno de los registros que la com-
08
Desarrollo completo
de una aplicacin
e
e
338 339 VELAZQUEZ VISUAL
ponen y ejecutando un subproceso de ficha por cada uno de los registros
borrados. Es una Funcin propia de lista que no tiene parmetros.
Con cada ficha borrada no se realizan las actualizaciones declaradas en la
tabla de datos asociada a la lista.
Ejemplo
Esta funcin permite borrar las lneas de detalle de un albarn de compras.
Si la tabla tiene declaradas actualizaciones a una tabla de EXISTENCIAS,
dichas actualizaciones no sern anuladas. Esto tiene sentido si previamen-
te las lneas han sido copiadas con un tubo de lista y dadas de alta como
lneas de detalle de una factura.
Filtrado de lista
Quita de la lista los elementos que no cumplan la condicin de la frmula,
de modo que los elementos filtrados no son borrados en la tabla de datos,
slo son eliminados de la lista. Esta funcin no crea un subproceso, es sim-
plemente un paso que altera el contenido de la lista en curso. La siguiente
funcin del proceso obtendr la lista filtrada.
Es una Funcin propia de lista en la que especificamos el parmetro Fr-
mula condicional, frmula que establece la condicin del filtro (obligatorio).
Ejemplo
En un proceso con origen una lista de ARTICULOS queremos quitar de la lista
aquellos cuyo stock actual sea 0. Para ello incluimos la siguiente lnea de cdigo:
Filtrado de lista -> %STOCKTOTAL% ! 0
Filtramos la lista de ARTICULOS eliminando aquellos cuyo stock actual sea
0. De la tabla de datos no se borran, pero la lista con la que se trabaja en el
proceso no los incluir a partir de esta instruccin.
Ordenar lista
Funcin propia de lista que ordena la lista actual por los campos dados. Pri-
mero ordena por el campo del primer parmetro, si hay valores iguales en
el campo, vuelve a ordenar por el campo del segundo parmetro y si hay
coincidencias en el segundo campo, vuelve a ordenar por el campo del ter-
cer parmetro y as sucesivamente. La ordenacin no est limitada a los
campos de la tabla de datos en curso: podemos ordenar por cualquier cam-
po de una tabla de datos enlazada.
Esta funcin no crea ningn subproceso, es un simple paso. Hemos de pa-
sarle los parmetros siguientes:
Identificador campo 1: identificador del campo para ordenar el nivel 1 (obli-
gatorio).
Los filtrados ralentizan la
ejecucin por tratarse de
operaciones secuenciales.
Slo hemos de usarlos
cuando sea imprescindible,
sustituyndolos por
bsquedas siempre que nos
sea posible.
ADVERTENCIA
e
e
Identificador campo 2: identificador del campo para ordenar el nivel 2 (op-
cional).
Identificador campo 3: identificador del campo para ordenar el nivel 3 (op-
cional).
Identificador campo 4: identificador del campo para ordenar el nivel 4 (op-
cional).
Identificador campo 5: identificador del campo para ordenar el nivel 5 (opcional).
Identificador campo 6: identificador del campo para ordenar el nivel 6 (opcional).
Ejemplo
Supongamos que la tabla de datos de origen es ARTICULOS y los parme-
tros son los siguientes:
Identificador campo 1: %FAMILIA.NOMBRE%
Identificador campo 2: %MARCA.NOMBRE%
Identificador campo 3: %NOMBRE%
En este ejemplo se ordena por el Nombre de la familia, y dentro del nom-
bre, por el Nombre de su marca, y dentro del nombre de la marca, por el
nombre del artculo.
Invertir lista
Invierte el orden de la lista actual. La funcin Ordenar lista ordena de forma
ascendente, de modo que si queremos ordenar de manera descendente, or-
denaremos previamente la lista y despus utilizaremos la funcin Invertir lista.
Es una Funcin propia de lista a la que no hemos de pasar parmetros y que
no crea subproceso.
Ejemplo
Para ordenar una lista por nombre y de forma descendente usaramos el
proceso siguiente:
Cortar lista
Recorta el nmero de elementos de la lista al tamao dado en el parmetro
y desde la posicin especificada. El resto de los elementos no son borra-
08
Desarrollo completo
de una aplicacin
e
e
340 341 VELAZQUEZ VISUAL
dos de la tabla de datos, pero la lista con la que trabajaremos en el proce-
so desde esa instruccin no incluir los elementos eliminados.
Es una Funcin propia de lista que no crea ningn subproceso y a la que
pasamos los siguientes parmetros:
Nuevo tamao: frmula en la que indicamos el nmero de elementos para
la nueva lista (obligatorio).
Posicin inicial: posicin a partir de la cual queremos que se corte la lista.
La primera posicin de la lista ser la 0 (obligatorio).
Ejemplo
La siguiente lnea de proceso establece que la lista actual ha de tener un
mximo de 10 elementos, siendo el nmero dos el primero de la nueva
lista.
Cortar lista -> 10, 2
Quitar ficha de la lista
Quita de la lista el elemento que especifiquemos, pero sin borrarlo de la ta-
bla de datos. Es una Funcin propia de lista en la que hemos de indicar el
parmetro Posicin: expresin frmula en la que indicamos la posicin del
registro que queremos quitar de la lista (obligatorio).
Multi Partir Lista
Parte la lista actual por cada ficha encontrada en la que el valor del campo
de particin sea diferente al anterior. Debe ir precedida de la funcin Orde-
nar lista por el campo que posteriormente queramos realizar la particin.
Cuando se parte una lista, Velzquez Visual recorre los registros de la lista
en curso y compara el contenido del campo de cada uno de los registros
con su anterior. Si no son iguales, crea una nueva lista y sigue con la prxi-
ma comparacin hasta finalizar.
Es una Funcin propia de lista que origina un subproceso de lista a ejecu-
tar por cada lista generada y a la que hemos de especificar el parmetro
Identificador campo: identificador del campo por el que partimos la lista
(obligatorio).
Ejemplo
Desde una lista de ALBARANES queremos agrupar los albaranes de cada
cliente para generar una factura nica. Para ello creamos el proceso si-
guiente:
e
e
El proceso tiene su origen en una lista de ALBARANES, haciendo lo si-
guiente: ordena la lista de albaranes por el campo CLIENTE y multiparte la
lista por ese mismo campo. Como resultado obtendremos tantas listas de
albaranes como clientes hubiese en la lista de origen, de modo que ya ten-
dremos en cada lista todos los albaranes de cada cliente. Recordamos que
el subproceso que esta funcin genera ser ejecutado por cada lista, por lo
que simplemente queda ya generar la cabecera de la factura y sus lneas.
Para crear la cabecera se lee el primer albarn, se ejecuta un tubo de ficha
y se guarda en la variable local nFactura la factura generada, luego se car-
gan las lneas de todos los albaranes del Cliente y se generan las lneas de
la factura a travs de un tubo de lista con induccin, es decir, inducindole
como maestro (Cabecera de factura) la ficha guardada en la variable local
nFactura.
Listas: Ficha seleccionada
Gracias a las instrucciones de Listas: Ficha seleccionada, podremos traba-
jar con los registros de una tabla, leyndolos, modificndolos o eliminndo-
los una vez seleccionados.
08
Desarrollo completo
de una aplicacin
e
342 343 VELAZQUEZ VISUAL
Seleccionar ficha por posicin
Selecciona en la lista actual el elemento de la posicin indicada en el par-
metro. Podemos leer el registro seleccionado con las funciones Leer ficha
seleccionada o Modificar ficha seleccionada. Es una Funcin propia de lista
en la que indicamos el parmetro Posicin: nmero de elemento a seleccio-
nar dentro de la lista (obligatorio). El primer elemento de la lista es el nme-
ro 1. Puede tratarse tanto de un nmero como de una variable numrica.
Ejemplo
Seleccionaremos la primera ficha de la lista actual. Para ello introducimos la
siguiente lnea de cdigo:
Seleccionar ficha por posicin -> 1
La variable del sistema n contiene el nmero de elementos de una lista, as
que para seleccionar la ltima ficha de una lista podramos introducir:
Seleccionar ficha por posicin, n
Seleccionar ficha mediante Localizador
Presenta el Localizador que especifiquemos para que el usuario seleccione
el registro que le interese. El localizador se presentar sin el combo para la
seleccin de ndices ni el control de edicin para escribir la cadena a bus-
car. Esto es as ya que el localizador del proceso puede no estar alimenta-
e
do por la tabla completa, y si estuvieran activados ambos controles busca-
ra en toda la tabla y no solamente en la lista obtenida en el proceso.
Esta funcin genera un subproceso que ser ejecutado si el usuario pulsa
el botn Atrapar del localizador, pudiendo, por ejemplo, leer o modificar la
ficha seleccionada.
Es una Funcin propia de lista a la que hemos de pasar como parmetro el Iden-
tificador Localizador: identificador del localizador que usaremos (obligatorio).
Ejemplo
Con el siguiente proceso, de una lista de personas escogemos una y modi-
ficamos su ficha.
El proceso carga la tabla PERSONAS, presenta un localizador para que el
usuario seleccione una ficha, y si selecciona alguna, se presentar la ficha
en el formulario de modificaciones especificado.
Modificar ficha seleccionada con formulario
Modifica el registro seleccionado directamente desde un formulario. Es una
Funcin propia de lista a la que hemos de pasar los siguientes parmetros:
Identificador Formulario: identificador del formulario que utilizaremos para
editar la ficha seleccionada.
Identificador variable local que retorna S/No modificaron: esta variable lo-
cal devolver 1 si se ha modificado la ficha y 0 si no se ha modificado.
Existe una funcin de procesos similar llamada Modificar ficha selecciona-
da, pero sta no presenta formulario.
Leer ficha seleccionada
Lee la ficha seleccionada en la rejilla en curso, creando un subproceso de
ficha con dicho registro. El subproceso, que slo se ejecutar si tenemos
seleccionada una ficha, ser de solo lectura, es decir, los cambios que pre-
tenda hacer sern ignorados. Es til, por ejemplo, para copiar el contenido
de un campo en una variable local del proceso.
Es una Funcin propia de lista a la que no hemos de pasar parmetros. Se
ha de utilizar despus de las funciones Seleccionar ficha por posicin o Se-
leccionar ficha mediante localizador.
Ejemplo
El siguiente proceso asigna todos los artculos incluidos en una lista a un
mismo distribuidor, seleccionado por el usuario (en la estructura de tablas
08
Desarrollo completo
de una aplicacin
e
e
344 345 VELAZQUEZ VISUAL
DISTRIBUIDORES es maestro de ARTICULOS). El proceso tendr su origen
en una lista de la tabla ARTICULOS:
El proceso carga primero la tabla DISTRIBUIDORES y lanza un localizador
para que el usuario seleccione el distribuidor que deseemos asignar a los
artculos de la lista. Una vez seleccionado, se lee la ficha del Distribuidor y
se crea la variable local cdigo para almacenar su cdigo (la funcin Set
permite la creacin de variables locales de un proceso y asignar valores a
las mismas). Finalmente, recorre la lista de artculos, asignndole a cada
uno el distribuidor seleccionado por el usuario.
Modificar ficha seleccionada
Abre la ficha seleccionada en la lista en curso en modo lectura/escritura.
Crea un subproceso de ficha y lectura/escritura con la ficha seleccionada,
por lo tanto, cualquier cambio realizado en la ficha ser salvado en disco.
El subproceso no ser ejecutado si no hay ficha seleccionada.
Es una Funcin propia de lista a la que no hemos de pasar parmetros y
que debe utilizarse despus de las funciones Seleccionar ficha por posicin
o Seleccionar ficha mediante localizador. Es similar a la funcin Modificar fi-
cha seleccionada con formulario, vista anteriormente, slo que Modificar fi-
cha seleccionada no presenta formulario.
Ejemplo
Modificar ficha seleccionada
Pedir formulario -> ARTICULO-MOD, bOK
Ejemplo
Modificar ficha seleccionada con formulario -> ARTICULO-MOD, bOK
Aparentemente ambos procesos hacen lo mismo: presentar un formulario
para modificar la ficha seleccionada. La diferencia estriba en que en el pri-
mero de ellos la verificacin de claves duplicadas es menos exhaustiva, es
el proceso el que controla la modificacin. El segundo equivale a hacer do-
ble clic en una rejilla para modificar una ficha, por lo que es el propio for-
mulario el que controla la modificacin. Por tanto, cuando en un proceso
queremos modificar una ficha presentando un formulario debemos utilizar
la funcin Modificar ficha seleccionada con formulario.
e
e
e
Eliminar ficha seleccionada
Elimina la ficha seleccionada en la lista en curso. Si la tabla tiene declara-
da alguna actualizacin sta ser ejecutada. Crea un subproceso de ficha
con la ficha seleccionada, que se ejecutar despus de haber sido borra-
da la ficha. Si no hay ninguna ficha seleccionada, el subproceso no ser
ejecutado.
Esta funcin se utilizar despus de las funciones Seleccionar ficha por po-
sicin o Seleccionar ficha mediante localizador, es una Funcin propia de
lista y no tiene parmetros.
Ejemplo
El siguiente proceso lanza un localizador para que el usuario seleccione una
ficha. La ficha que haya seleccionado ser borrada.
Eliminar ficha seleccionada sin desactualizar
Elimina la ficha que est seleccionada en la lista en curso. Al contrario que
la funcin anterior, al eliminar la ficha no se realizan las actualizaciones.
Crea un subproceso de ficha con la ficha seleccionada, de modo que si no
hay ninguna ficha seleccionada el subproceso no ser ejecutado. Debe uti-
lizarse despus de las funciones Seleccionar ficha por posicin o Seleccio-
nar ficha mediante localizador.
Es una Funcin propia de lista en la que no hemos de especificar par-
metros.
Cestas
Dentro de los procesos podemos trabajar con Cestas de la compra, as co-
mo con cestas locales (estas cestas locales y los registros que contengan
permanecern nicamente dentro del proceso que las cre). Tienen las mis-
mas funciones que una cesta, solo que no se presentan al usuario, sino que
se usan para que el proceso trabaje con distintas listas.
08
Desarrollo completo
de una aplicacin
e
346 347 VELAZQUEZ VISUAL
Cesta: Crear cesta local
Con esta funcin crearemos una Cesta de la compra local (debe ser la pri-
mera del proceso para que funcione). Es una Funcin comn de lista y de
ficha en la que especificaremos:
Identificador tabla: nombre de la tabla para la que creamos la cesta.
Identificador cesta: identificador que vayamos a dar a la cesta que se utili-
zar a nivel local en el proceso.
Cesta: Limpiar
Esta funcin permite limpiar (vaciar) la cesta de la compra especificada en
el parmetro. Puede especificarse o bien un objeto Cesta de la compra
creado en el panel derecho del editor de proyectos o una cesta local del
proceso. Es una Funcin comn de lista y de ficha en la que especificamos
el parmetro Identificador cesta: identificador de la cesta de la que quere-
mos borrar su contenido.
Cesta: Procesar
Esta funcin genera un subproceso, de modo que todas las funciones que
se incluyan dentro de dicho subproceso se ejecutarn sobre la lista de re-
gistros contenidos en la cesta. El origen del subproceso ser una lista de la
tabla de datos de la cesta. Es una Funcin comn de lista y de ficha en la
que especificamos el parmetro Identificador cesta: identificador de la ces-
ta sobre la que trabajaremos.
FUNCIONES DE CESTAS
Cesta: Agregar ficha cesta
Esta funcin guarda la ficha procesada en la cesta de la compra especifi-
cada en su parmetro. Puede especificarse o bien un objeto Cesta de la
compra creado en el panel derecho del editor de proyectos, o una cesta lo-
cal del proceso. Es una Funcin propia de ficha en la que especificamos el
parmetro Identificador Cesta: identificador de una cesta de la compra.
Cesta: Quitar la ficha
Esta funcin quita la ficha actual de la cesta especificada en sus parme-
tros. Puede especificarse o bien un objeto Cesta de la compra creado en el
panel derecho del editor de proyectos o una cesta local del proceso. Es una
Funcin propia de ficha en la que especificamos el parmetro Identificador
Cesta: identificador de una cesta de la compra.
Ejemplo
Supongamos una cesta de clientes con identificador MAILING, que utiliza-
mos para la impresin de etiquetas. Vamos a recorrerla y quitar de ella
aquellos registros que no tengan la direccin y a los que no podremos aso-
ciar etiquetas vlidas.
Cesta: Procesar -> MAILING
Recorrer lista
If -> fCampoVacio ( %DIRECCION% )
Cesta: quitar ficha -> MAILING
Cesta: Tienes la ficha
Esta funcin devuelve la posicin de la ficha actual dentro de la cesta de la
compra especificada como parmetro. Puede especificarse o bien un obje-
to Cesta de la compra creado en el panel derecho del editor de proyectos
o una cesta local del proceso. Es una Funcin propia de ficha en la que in-
dicaremos los parmetros:
Identificador Cesta: identificador de una cesta de la compra.
Variable retorno posicin: aqu se declara una variable que retornar la po-
sicin de la ficha actual dentro de la cesta. Si no lo contuviese devolvera 0.
Cesta: Agregar lista
Esta funcin aade la lista actual a la cesta de la compra definida en el par-
metro. Puede tratarse tanto de una cesta local del proceso como de cualquier
objeto cesta creado en el panel derecho del editor de proyectos. Es una Fun-
cin propia de lista en la que indicamos el parmetro Identificador Cesta: iden-
tificador de un objeto Cesta de la compra o de una cesta local del proceso.
Cesta: Quitar lista
Quita de la cesta especificada como parmetro los registros que contenga
la lista actual. Puede tratarse de una cesta local del proceso o de cualquier
08
Desarrollo completo
de una aplicacin
e
348 349 VELAZQUEZ VISUAL
objeto cesta creado en el panel derecho del editor. Funcin propia de lista
en la que especificamos el parmetro Identificador Cesta: identificador de
un objeto Cesta de la compra o de una cesta local del proceso.
Ejemplo
Queremos ejecutar un proceso que quite de la cesta de la compra aquellos
registros que se hayan encontrado despus de la ejecucin de una bs-
queda. El proceso tendra su origen en una lista de la tabla de datos aso-
ciada a la cesta, y tendra como nica lnea:
Cesta: Quitar lista -> IDENTIFICADOR_CESTA
Cesta: Cruzar lista
Esta funcin Cruza la lista actual con los registros contenidos en una cesta,
conservando en la cesta los registros que coincidan en ambas listas. Puede
especificarse o bien un objeto Cesta de la compra creado en el panel dere-
cho del editor de proyectos o una cesta local del proceso. Es una Funcin
propia de lista en la que especificamos el parmetro Identificador Cesta: iden-
tificador de un objeto Cesta de la compra o de una cesta local del proceso.
Navegante y bsquedas
Al igual que el usuario final puede usar el navegante o realizar las bsque-
das que incorpore la aplicacin, nosotros tambin podemos echar mano de
estas funciones a lo largo de un proceso:
FUNCIONES DE NAVEGANTE Y BSQUEDAS
e
Cargar histrico
Si el origen es ficha, lee los histricos del registro actual de la tabla de datos
en curso. Si es lista, lee los histricos de todos los registros la lista. Crea un
subproceso de lista alimentado por todos los registros histricos cargados.
Es una Funcin comn de lista y de ficha en la que especificaremos el pa-
rmetro Identificador tabla de datos: identificador de la tabla de datos y del
enlace histrico a usar (obligatorio).
Ejemplo
En este ejemplo cargamos la lista de albaranes del cliente de la ficha en curso.
Cargar histrico -> VALBARANES, CLIENTES
A continuacin podramos recorrer la lista (Ver Recorrer lista lectura/escritu-
ra) y modificar los campos (Ver Modificar campo) de los albaranes de este
cliente.
Cargar maestros
Carga cada una de las fichas del archivo maestro que estn siendo apunta-
das por las fichas de la lista en curso a travs del campo enlazado. De es-
ta forma, se obtiene una lista, sin repeticiones, con las fichas maestras
apuntadas. Es una Funcin propia de lista en la que indicamos el parme-
tro Identificador Campo: identificador del campo enlazado (obligatorio).
Ejemplo
En un proceso en el que trabajamos sobre una lista de CLIENTES queremos
cargar todas las poblaciones a las que pertenecen dichos clientes. Para ello
habr que escribir:
Cargar maestros ->POBLACIONES
Devuelve una lista con todas las poblaciones a las que pertenecen los clien-
tes de la lista de origen del proceso.
Esta funcin genera un subproceso, cuyo origen ser la lista obtenida. En
este caso el origen del subproceso sera una Lista de POBLACIONES.
Bsqueda
Esta funcin ejecuta cualquiera de las bsquedas que tengamos declara-
das en el proyecto, generando un subproceso cuyo origen ser la lista re-
sultante de la ejecucin de la bsqueda. Es una Funcin comn de lista y
de ficha en la que especificamos el parmetro Identificador bsqueda: iden-
tificador de la bsqueda que queramos ejecutar.
Ejemplo
En este proceso en primer lugar se ejecuta una bsqueda de Albaranes en-
tre fechas (en la bsqueda definimos un formulario para la especificacin de
08
Desarrollo completo
de una aplicacin
La bsqueda siempre ser
realizada sobre todos los
registros de la tabla de datos
y no sobre una parte de ella.
ADVERTENCIA
e
e
e
350 351 VELAZQUEZ VISUAL
la fecha). A continuacin filtramos, quedndonos con los albaranes que no
estn facturados, y luego lanzamos el proceso Facturar-albaranes, encar-
gado de realizar su facturacin.
Cargar lista
Carga una lista de registros de la tabla de datos dada por un ndice.
Si no se resuelve ninguna de las partes del ndice, se carga la tabla de da-
tos completa. Si se resuelve la primera parte del ndice en los ndices com-
puestos son ledas todas las fichas que tengan esa parte en su clave, des-
preciando el resto de partes del ndice. Podemos afinar ms el resultado re-
solviendo, por el orden dispuesto, el resto de las partes del ndice.
Esta funcin es Funcin comn de lista y de ficha y crea un subproceso de
lista con los registros encontrados. Hemos de pasarle los parmetros si-
guientes:
Identificador tabla: identificador de la tabla de datos a cargar (obligatorio).
Identificador ndice: identificador del ndice por el que se va a buscar (obligatorio).
Resolucin 1: frmula para resolver la primera parte de la clave del ndice
(opcional).
Resolucin 2: frmula para resolver la segunda parte de la clave del ndice
(opcional).
Resolucin 3: frmula para resolver la tercera parte de la clave del ndice
(opcional).
Resolucin 4: frmula para resolver la cuarta parte de la clave del ndice
(opcional).
Ejemplo
Cargaremos la tabla de datos ALBARANES DE VENTAS por el ndice
CLIENTES con una resolucin. Por lo tanto, sern cargados los registros de
la tabla de albaranes cuyo campo CLIENTE sea igual a la variable local
cliente (los apstrofes indican variable local al proceso).
Cargar lista -> VALBARANES , CLIENTES , cliente ,
Los parmetros especificados son los siguientes:
Debemos resolver: ninguna
parte; la primera; la primera y
la segunda; la primera, la
segunda y la tercera; la
primera, la segunda, la
tercera y la cuarta. Si no lo
hacemos as, y dejamos sin
resolver una por el medio
(por ejemplo, resolvemos la
primera y la tercera, dejando
la segunda parte del ndice
sin resolver), toma estas
partes como nulas, y
cargar aquellos registros
que tengan asignado valor
nulo a ese campo.
ADVERTENCIA
e
e
Tabla de datos: VALBARANES
Identificador ndice: CLIENTES
Resolucin 1: cliente
Resolucin 2: (Vaco)
Ejemplo
Para saber si una lista contiene registros podemos utilizar la variable de sis-
tema n:
Cargar lista -> VALBARANES, CLIENTES, cliente,
if n =0
Mensaje -> Este albarn no tiene ninguna lnea, 0
Tubos
Otros dos de los objetos visuales con los que podemos trabajar desde un
proceso son el Tubo de ficha y el Tubo de lista. Con los procesos realiza-
mos gestiones de listas que luego exportaremos o llevaremos de una tabla
a otra. Las funciones que usaremos para ello son:
08
Desarrollo completo
de una aplicacin
FUNCIONES DE TUBOS
e
e
352 353 VELAZQUEZ VISUAL
Tubo de ficha
Lanza el tubo de ficha declarado en el parmetro, y antes de realizar el alta
de la ficha, pide validacin por parte del usuario mediante el formulario que
hayamos declarado en el tubo. Esta funcin deber usarse cuando se re-
quiera la peticin del formulario declarado en el tubo. Es una Funcin pro-
pia de ficha en la que indicaremos el parmetro Identificador Tubo: identifi-
cador del objeto tubo de ficha (obligatorio).
La funcin tubo de ficha crea dos subprocesos de ficha:
Pre: subproceso que se ejecuta antes de presentar el formulario de la ficha
de destino en la pantalla. Es de lectura/escritura, por lo tanto, todas las mo-
dificaciones realizadas en la ficha de destino sern grabadas en el disco.
Post: subproceso que se ejecuta despus de aceptar el formulario de la fi-
cha de destino. Si se pulsa el botn Cancelar, el subproceso Post no ser
ejecutado. Es de solo lectura, por lo tanto, ningn cambio realizado en la fi-
cha de destino ser guardado en el disco despus de grabarse la ficha.
Tubo de ficha sin pedir formulario
Lanza el tubo de ficha declarado en el parmetro sin pedir validacin por par-
te del usuario mediante formulario alguno. Es una Funcin propia de ficha
que crea dos subprocesos de ficha: Pre y Post. Hemos de especificar el pa-
rmetro Identificador Tubo: identificador del objeto tubo de ficha (obligatorio).
Tubo de lista
Es una Funcin propia de lista que lanza el tubo de lista especificado. Crea
un subproceso de lista con los registros dados de alta en la tabla de desti-
no. Hemos de pasarle el parmetro Identificador Tubo: identificador del ob-
jeto tubo de lista (obligatorio).
Ejemplo
En un proyecto de gestin tenemos las tablas CLIENTES y CONTACTOS. Si
queremos convertir un cierto nmero de contactos en clientes, entonces
creamos un proceso con origen lista de CONTACTOS y ejecutamos el tubo
CONTACTOS A CLIENTES.
Tubo de lista -> CONTACTOS-A-CLIENTES
Mediante este tubo aadimos a la lista de CLIENTES todos los CONTAC-
TOS que se encontraban en la lista.
Tubo de lista con induccin
Lanza el tubo de lista declarado y le induce la ficha guardada de una tabla
maestra a cada elemento de la lista a crear. La induccin consiste en que a
cada una de las fichas de la lista de destino se les introduce el cdigo de
su ficha de maestro. Crea un subproceso de lista con los registros creados
por el tubo y es una Funcin propia de lista en la que especificamos los si-
guientes parmetros:
Para ejecutar la funcin Tubo
de ficha, necesariamente
tenemos que haber
declarado un formulario en el
tubo a lanzar. Sin embargo,
con Tubo de ficha sin pedir
formulario podemos lanzar
un tubo de ficha con o sin
formulario especificado.
ADVERTENCIA
e
Identificador Tubo: identificador del objeto tubo de lista (obligatorio).
Identificador ficha maestro: identificador de una ficha guardada (obligatorio).
La ficha inductora ha tenido que ser guardada previamente con la funcin
Guardar ficha.
Ejemplo
Veamos un ejemplo tipo de facturacin de un albarn:
Es un proceso con origen una ficha de ALBARANES. En primer lugar gene-
ra la cabecera de la factura con la funcin Tubo de ficha, en el proceso Post
del tubo guardamos en la variable nFactura la ficha de la factura dada de al-
ta, para posteriormente asignrsela a las lneas de la factura.
A continuacin carga todas las lneas del albarn y ejecuta un tubo de lista
con induccin para generar las lneas de la factura, en l se utiliza la varia-
ble nFactura para inducir como maestro de cada lnea de factura la cabe-
cera de factura anteriormente declarada.
Tubo de exportacin
Lanza el tubo de exportacin que indiquemos. Es una Funcin propia de lis-
ta en la que especificamos el parmetro Identificador Tubo: identificador del
objeto tubo de exportacin (obligatorio).
Ejemplo
Con un proceso exportaremos todos los artculos que se encuentren en una re-
jilla de ARTICULOS a una base de datos externa declarada en el proyecto. El ori-
gen de la lnea que ejecute esta funcin tendr que ser una Lista de ARTICULOS.
Tubo de exportacin -> EXPOR-ARTICULOS
Este proceso copiar en la base de datos externa los registros que se en-
contraban en la lista de origen.
Los tubos de importacin no forman parte de las funciones de procesos. Se
ejecutan directamente desde una opcin de men.
08
Desarrollo completo
de una aplicacin
No es posible utilizar un tubo
de exportacin si el estilo del
proceso es en multitarea.
ADVERTENCIA
e
e
354 355 VELAZQUEZ VISUAL
Procesos: funciones de ficheros y directorios
Con estas funciones podemos crear, copiar y eliminar ficheros y directorios,
buscarlos y escribir en ficheros:
Existe fichero
Esta funcin comprueba si existe el fichero especificado en sus parmetros.
Es una Funcin comn de lista y de ficha en la que especificamos los par-
metros siguientes:
Senda: senda completa y nombre del fichero del que comprobar su exis-
tencia. Podemos utilizar el Asistente de edicin de frmulas para componer
dicha senda.
OK (S / NO) variable donde retorna: variable local donde se guardar si el
fichero existe (1) o no (0).
Tamao (variable donde retorna): variable local del proceso donde se guar-
dar el tamao en bytes del archivo.
Ejemplo
El siguiente proceso comprueba si existe un fichero llamado recibos.dat en
el directorio de la aplicacin. Si no existe, se avisa con un mensaje.
e
GetAtributosFile
Obtendremos con esta funcin los atributos del fichero que indiquemos. Es
una Funcin comn de lista y de ficha en la que especificamos:
Senda: senda completa y nombre del fichero del que queremos obtener sus
atributos.
Fecha (variable donde retorna): variable local donde se guarda la fecha de
la ltima modificacin del archivo.
Hora (variable donde retorna): variable local donde se guardar la hora de la
ltima modificacin del archivo.
Tamao (variable donde retorna): variable local donde se guardar el tama-
o en bytes del archivo.
Ejemplo
Con el siguiente proceso obtendremos los atributos del fichero bolsa.map,
situado en el directorio de la aplicacin. Si la ltima modificacin ha sido
realizada hoy, se lanza un mensaje.
Copiar fichero
Esta funcin nos permite copiar un fichero de una unidad de disco. Funcin
comn de lista y de ficha.
Los parmetros que debemos especificar son los siguientes:
Senda Origen: especificacin de la senda completa ms el nombre y ex-
tensin del fichero a copiar. Es de tipo frmula.
Senda Destino: especificacin de la senda completa ms el nombre y ex-
tensin del fichero destino de la copia. Puede especificar un nombre de ar-
chivo distinto al nombre del archivo de origen. Para la especificacin de la
va podremos utilizar constantes, variables, campos, etc., ya que, al igual
que en el caso anterior, es de tipo frmula.
Identificador de variable de retorno S/No copi: recoge en una variable lo-
cal del proceso si se ha copiado o no el fichero.
08
Desarrollo completo
de una aplicacin
e
e
356 357 VELAZQUEZ VISUAL
Ejemplo
Queremos copiar un fichero llamado Conta.ma_ en un directorio, que de-
penda del directorio de la aplicacin, llamado Empresa1. Queremos que el
nombre del archivo copiado sea Conta.map. El proceso sera:
Copiar fichero -> d + \\Conta.ma_, d + \\Empresa1\\Conta.map
Si el directorio Empresa1 no existe, el programa lo crear automticamen-
te. Como la senda es de tipo frmula, usamos la variable de sistema d que
nos da la senda de la aplicacin.
Eliminar fichero de disco
Borraremos un fichero de una unidad de disco. Funcin comn de lista y de ficha.
Debemos completar los siguientes parmetros:
Senda fichero: especificacin de la senda ms el nombre y la extensin del
fichero (obligatorio).
Identificador variable de Retorno SI/NO elimin: variable en la que se guar-
dar el valor de si se acept (1) o no (0) (opcional).
Ejemplo
Este proceso elimina el fichero Foto.bmp que se encuentra en el directorio
de la aplicacin.
Crear directorio
Con esta funcin crearemos un directorio desde un programa de Velzquez.
Funcin comn de lista y de ficha.
Los parmetros que debemos cumplimentar son los siguientes:
Senda: especificacin de la senda y del nombre del directorio a crear. Para
ello podremos utilizar una frmula que incluya las variables del sistema (d y
c), constantes, variables globales o locales del proceso, campos, etc.
Identificador de variable de retorno S/No cre: recoge en una variable local
del proceso si se ha creado o no el directorio.
Ejemplo
Imaginemos que estamos creando una aplicacin multiempresa y queremos
que, cuando se d de alta una empresa en el proyecto de empresas, se dis-
pare un proceso que genere un directorio llamado Empresa seguido del c-
digo de la empresa que se acaba de dar de alta. En este directorio copiar
un proyecto de contabilidad guardado en el directorio de la aplicacin y lla-
mado Conta.ma_, adems de los ficheros de datos correspondientes
(Pgc.da_ y Pgc.id_). El proceso sera posterior a un alta de ficha y sera:
e
e
e
set Directorio, d + \\Empresa+ %CODIGO%
Crear directorio -> Directorio, bOK
If bOK
Copiar fichero -> d + \\Conta.ma_ , Path + \\Conta.map, Copi
Eliminar directorio
Esta funcin borra un directorio desde un programa de Velzquez Visual.
Para que el directorio pueda ser borrado es condicin indispensable que
ste est vaco. Funcin comn de lista y de ficha.
Los parmetros son:
Senda: especificacin de la senda del directorio a borrar. Para su especifi-
cacin podremos usar tanto cadenas de texto como variables, ya que es de
tipo frmula.
Identificador de variable de retorno Si/No borr: recoge en una variable lo-
cal del proceso si se ha eliminado o no el directorio.
Ejemplo
En este ejemplo se borra el directorio llamado Nuevo que se encuentra den-
tro del directorio de la aplicacin.
DirSearch
Permite recorrer el directorio actual. Esta funcin genera un subproceso que
ser ejecutado por cada archivo o directorio encontrado segn el filtro es-
pecificado en el primer parmetro. En la variable especificada en el segun-
do parmetro se almacenar el nombre del archivo o directorio en curso.
Funcin comn de lista y de ficha.
Los parmetros son:
Filtro de archivos: filtro de archivos a tener en cuenta. Por ejemplo: *.*, *.TXT,
*.dat. Es de tipo frmula.
Senda en curso (Variable donde retorna): variable donde se retorna el nom-
bre del archivo o directorio en curso.
Es directorio? (Variable donde retorna): variable donde se retorna si lo ob-
tenido en la senda en curso es un directorio (1) o no (0).
Es de solo lectura? (Variable donde retorna): variable donde se retorna si
el archivo o directorio en curso es de solo lectura (1) o no (0).
Ejemplo
Este proceso copia todos los ficheros del directorio de la aplicacin en la
carpeta C:\Copias. Utilizamos la variable local que retorna la senda en
08
Desarrollo completo
de una aplicacin
e
e
e
358 359 VELAZQUEZ VISUAL
curso como especificacin del nombre del fichero de destino que se va
a crear.
Cambiar directorio por defecto
Esta funcin establece un nuevo directorio de trabajo durante la ejecucin
de un proceso. Por defecto, el directorio de trabajo es el de la aplicacin
(donde se encuentra el proyecto). Funcin comn de lista y de ficha.
Los parmetros que debemos especificar son los siguientes:
Senda: especificacin de la senda del nuevo directorio por defecto. Para su es-
pecificacin podremos usar tanto cadenas de texto como variables. Se trata de
una expresin frmula y, por tanto, si la senda la va a escribir como una cons-
tante, sta tendr que ir entrecomillada. Puede utilizar las variables del sistema
d (directorio de la aplicacin) y c (directorio actual) para componer la senda.
Identificador variable de retorno SI / NO cambi: aqu crear una variable lo-
cal que recoger si se ha cambiado el directorio por defecto (1) o no (2).
Ejemplo
En el directorio de la aplicacin hemos creado una carpeta que se utilizar
para que el usuario pueda abrir una serie de archivos a lo largo de un pro-
ceso. A este directorio lo hemos llamado Auxiliar. Podemos utilizarlo en
combinacin con la funcin de procesos Ventana seleccin de fichero.
En este proceso cambiamos el directorio por defecto por el directorio Auxi-
liar que se encuentra en el directorio de la aplicacin. Comprobamos si se
ha cambiado a dicho directorio: si es as, abre la ventana de seleccin de
fichero, en la que el filtro de archivos son los ficheros Bitmap de Windows
y, como nombre de archivo inicial, se propone el archivo Foto1.bmp. Si no
ha cambiado el directorio, se muestra un mensaje advirtindolo.
Ventana seleccin de fichero
Muestra el cuadro de dilogo de seleccin de fichero de Windows. Funcin
comn de lista y de ficha.
Los parmetros son:
Identificador de la Variable local que retorna Nombre fichero: nombre de la
variable que va a recoger el nombre de fichero que se abra (obligatorio).
e
e
Identificador de la Variable que retorna SI/NO aceptaron: nombre de la va-
riable que va a recoger el valor de si han aceptado (1) o no (0) (opcional).
Filtro de archivos: para mostrar en el cuadro de dilogo qu tipo de archi-
vos queremos que sean abiertos, por ejemplo, si son imgenes seran JPG,
BMP (opcional).
SINTAXIS Exp1 | [ Exp 2 [ | Exp N ] ] ||
Los parmetros que van entre corchetes son opcionales.
Exp1, Exp2 ExpN: distintas expresiones de filtro de archivos. Las expre-
siones se separan por el smbolo | (AltGr + 1). Los parmetros entre cor-
chetes son opcionales.
Una vez escritas todas las expresiones deseadas se finalizar la lnea con
dos smbolos |.
Cmo se construye una expresin:
Descripcin | *.ext1 [ ; *.ext2 [ ; *.extN) ] ]
Los parmetros que van entre corchetes son opcionales.
Descripcin: aqu se describir al usuario el tipo o tipos de archivo a abrir,
por ejemplo: Mapa de bits de Windows (*.bmp, *.dib, *.rle).
*.ext1 ( ; *.ext2 ; *.extN): las extensiones de los tipos de archivo mencio-
nados en la especificacin. Siguiendo con el ejemplo anterior sera: *.bmp;
*.dib; *.rle. stas sern las que indiquen al programa qu tipo de archivos
tendr que visualizar cuando se seleccione la opcin en el list box.
Si en una misma especificacin queremos incluir varias extensiones, ten-
drn que ir separadas por ; y sin espacios entre ellas. No podemos utili-
zar tampoco espacios en blanco antes y despus de escribir la extensin.
Fichero inicial: expresin frmula que recoger el nombre del fichero inicial.
Ejemplo
Queremos lanzar desde un proceso esta funcin y que como opcin de ti-
pos de ficheros a abrir en el list box correspondiente del cuadro de dilogo
se visualice:
Archivos de texto (*.txt)
Bitmap de Windows (*.bmp, *.dib, *.rle)
Todos los archivos (*.*)
Habra que escribir:
08
Desarrollo completo
de una aplicacin
e
360 361 VELAZQUEZ VISUAL
Archivos de texto (*.txt)|*.txt|Bitmap de Windows (*.bmp, *.dib; *.rle)|*.bmp;
*.dib; *.rle|Todos los archivos (*.*)|*.*||
Como podemos comprobar cada tipo de especificacin de archivos va se-
parada por el smbolo |.
Si queremos que en el control de edicin correspondiente al Nombre del ar-
chivo aparezca un nombre de fichero determinado, especifquelo en el pa-
rmetro Fichero inicial. Se trata de una frmula, as que si utilizamos una
constante tendremos que escribir el nombre del fichero entrecomillado.
Tambin podemos utilizar una variable local del proceso que lo contenga.
Ejemplo
Si queremos que como nombre de archivo aparezca Dibujo.bmp, en el pa-
rmetro Fichero inicial escriba Dibujo.bmp.
Tambin podemos utilizar esta funcin cuando queremos que el usuario es-
pecifique un directorio. Una vez ejecutada la instruccin, podremos aplicar
la funcin fSendaSinNombreExt() sobre la variable local para obtener sola-
mente la senda del directorio seleccionado.
Fichero: Abrir
Crea un fichero de texto o abre uno ya existente, para posteriormente leer
o escribir en l. Funcin comn de lista y de ficha.
Los parmetros son:
Manejador de fichero: nombre interno que daremos al fichero para identifi-
carlo a lo largo del proceso.
Frmula senda: senda, nombre y extensin del fichero de texto.
Modo apertura: los modos de apertura posible son:
Solo lectura: el fichero abierto podr ser ledo, pero no podremos escribir en
l.
Lectura/escritura: el fichero ser abierto de forma que podremos tanto leer,
como escribir en l.
Lectura/escritura crea o limpia: si no existe el fichero ser creado automti-
camente; si existe, ser borrado su contenido.
Lectura/escritura crea o agrega: si el fichero no existe ser creado, si exis-
te podremos aadir lneas al mismo.
Fichero: Leer lnea
Aadir una lnea a un fichero de texto abierto en modo lectura/escritura.
Funcin comn de lista y de ficha.
e
e
Los parmetros que debemos completar son:
Manejador de fichero: nombre interno que se dar al fichero para identifi-
carlo a lo largo del proceso. Esta instruccin ha de estar precedida de la ins-
truccin Fichero: Abrir y el manejador deber ser el mismo que el especifi-
cado en la misma.
Variable retorno info leda: variable local del proceso en la que se guardar
la lnea leda del fichero de texto.
Variable retorno OK: variable local del proceso donde se devolver si se ha
ledo una lnea (1) o no (0).
Ejemplo
En el directorio de la aplicacin existe el fichero Clientes.txt, fichero con re-
gistros de longitud fija, que en las tres primeras posiciones contiene el c-
digo y en las 40 siguientes el nombre del cliente. Se pretende leer dicho fi-
chero y si el registro ledo no existe en la tabla de clientes de Velzquez,
darlo de alta; el proceso sera:
Rem -> Apertura del fichero en modo solo lectura; damos fichero como
nombre de manejador
Fichero: abrir -> fichero, d + \\Clientes.txt, 0
Rem -> Se inicializa una variable local que se utilizar como condi-
cin de salida en un bucle for que se utilizar para recorrer el fiche-
ro de texto
Set -> bOK, 1
For -> x, 1, bOK, 1
Fichero: Leer lnea -> fichero, lnea, bOK
If -> bOK
Rem -> Si se ha ledo algo, se carga la tabla de clientes por
su ndice cdigo, resolvindolo con los tres primeros carac-
teres de la lnea de texto leda, si no se encuentran registros,
ser dado de alta
Cargar lista -> CLIENTES, CODIGO, fLeft( lnea, 3 )
If -> ! n
Alta directa -> CLIENTES
Pre
Modificar campo -> CODIGO, fLeft(l-
nea, 3 )
Modificar campo -> NOMBRE, fMid(l-
nea, 2, 40 )
Post
Libre
08
Desarrollo completo
de una aplicacin
e
362 363 VELAZQUEZ VISUAL
Fichero: Grabar lnea
Aade una lnea a un fichero de texto abierto en modo lectura/escritura.
Funcin comn de lista y de ficha.
Los parmetros son:
Manejador de fichero: nombre interno que se dar al fichero para identifi-
carlo a lo largo del proceso. Esta instruccin ha de estar precedida de la ins-
truccin Fichero: Abrir, el manejador deber ser el mismo que el especifi-
cado en la misma.
Frmula dato: frmula con la composicin la lnea a grabar en el fichero, al
final no hay que aadir un retorno de carro, ya lo hace automticamente es-
ta instruccin.
Variable retorno OK: variable local del proceso donde se devolver si se ha
grabado la lnea (1) o no (0).
Ejemplo
Queremos volcar en un fichero de texto el contenido de una lista de Clien-
tes. Si el fichero ya existe, sobreescribiremos los datos ya existentes. Cada
registro en el fichero de texto ha de tener una longitud fija; el cdigo 3 po-
siciones, rellenado con ceros por la izquierda y el nombre 40. El proceso
tendra su origen en una lista de clientes, y sera:
Fichero: Abrir -> manejador, d + \\Clientes.txt, 2
Recorrer lista solo lectura
Fichero: Grabar lnea -> fJustificarRight( %CODIGO%,
3, 0 ) + fJustificarLeft( %NOMBRE%, 40 ), bOK
If -> ! bOK
Mensaje -> No se ha podido escri-
bir el registro correspondiente al
cliente nmero + %CODIGO%
Servicios disco Velzquez
Para usar estas funciones debemos estar trabajando en arquitectura Clien-
te-Servidor. Nos permite trabajar con ficheros a travs del Servidor de Apli-
caciones de Velzquez. Los usuarios de la aplicacin podrn importar, ex-
portar y eliminar ficheros, que accedern a sta a travs del Navegador de
Velzquez Visual.
e
SDV: Importar fichero
Esta funcin importa un fichero de un servidor de disco de Velzquez Visual.
Funcin comn de lista y de ficha.
Los parmetros son:
VRL Origen: senda del fichero a importar y servidor de Velzquez Visual al
que conectarse. La senda comenzar por la carpeta compartida especifi-
cada en el servidor y ser relativa a sta. Podremos usar el asistente para
definirla, teniendo la posibilidad de usar campos, variables, etc.
Fichero destino: senda y nombre de fichero de destino. La senda puede re-
ferirse a la de una unidad de disco local o en red. Es un parmetro de tipo
frmula, por lo que, al igual que en el caso anterior, podremos usar campos,
variables, etc.
Variable de retorno OK: variable local del proceso donde se retornar si el
fichero ha sido importado (1) o no (0).
Sintaxis para la especificacin de la VRL de origen: Senda\Fichero.ext@ser-
vidor/usuario/contrasea
08
Desarrollo completo
de una aplicacin
FUNCIONES DE SERVICIOS DE DISCO DE VELZQUEZ VISUAL
364 365 VELAZQUEZ VISUAL
Ejemplo
Importar el fichero Texto.txt de la carpeta Carpeta\Otros, del servidor velaz-
quezvisual.com, el nombre del usuario de la aplicacin es carlos y su con-
trasea 123. La carpeta especificada en el servidor es Carpeta, siendo
Otros relativa a esta carpeta virtual y, por tanto, relativa a c:\Mis Documen-
tos. La especificacin de la VRL sera:
Carpeta\Otros\Texto.txt@velazquezvisual.com/carlos/123
SDV: Actualizar fichero
Esta funcin compara el fichero de origen y el de destino y, en el caso de
que ste haya cambiado, lo actualiza. Funcin comn de lista y de ficha.
Los parmetros que debemos cumplimentar son:
VRL Origen: senda del fichero a importar y servidor de Velzquez Visual al
que conectarse. La senda ha de comenzar por la carpeta que hemos espe-
cificado como compartida en el servidor.
Fichero destino: senda y nombre de fichero de destino. La senda puede re-
ferirse a la de una unidad de disco local o en red.
Variable de retorno OK: variable local del proceso donde se retornar si la
instruccin ha sido ejecutada correctamente (1) o no (0).
CARPETA COMPARTIDA EN UN SERVIDOR DE APLICACIONES DE VELZQUEZ VISUAL
e
Variable de retorno si ha importado: variable local del proceso donde se re-
tornar si el fichero ha sido actualizado (1) o no (0). Si devuelve 0 querr de-
cir que el fichero no ha cambiado.
Sintaxis para la especificacin de la VRL de origen: Senda\Fichero.ext@ser-
vidor/usuario/contrasea
SDV: Exportar fichero
Exporta un fichero a un servidor de disco de Velzquez Visual. Funcin co-
mn de lista y de ficha.
Los parmetros son:
Fichero origen: senda y nombre del fichero a exportar.
VRL Destino: VRL con senda y nombre del fichero a exportar.
Variable de retorno OK: variable local del proceso donde se retornar si el
fichero ha sido exportado (1) o no (0).
Sintaxis para la especificacin de la VRL de destino: Senda\Fichero.ext@ser-
vidor/usuario/contrasea
Ejemplo
Exportar el fichero Texto.txt de la carpeta c:\Mis documentos a la carpeta Ini-
cio\Documentos, del servidor velazquezvisual.com, el nombre del usuario de
la aplicacin es carlos y su contrasea 123; la especificacin de la VRL sera:
Inicio\Documentos\Texto.txt@velazquezvisual.com/carlos/123
La especificacin del fichero de origen sera: c:\\Mis documentos\\Texto.txt
SDV: Eliminar fichero
Con esta funcin podremos eliminar un fichero de un servidor de disco de
Velzquez Visual. Funcin comn de lista y de ficha.
Sus parmetros son:
VRL Destino: VRL con senda y nombre del fichero a eliminar, como en los
casos anteriores.
Sintaxis para la especificacin de la VRL de destino: Senda\Fichero.ext@ser-
vidor/usuario/contrasea
Variable de retorno OK: variable local del proceso donde se retornar si el
fichero ha sido eliminado (1) o no (0).
Ejemplo
Eliminar el fichero Texto.txt de la carpeta Inicio\Documentos, del servidor
velazquezvisual.com, el nombre del usuario de la aplicacin es carlos y su
08
Desarrollo completo
de una aplicacin
e
e
366 367 VELAZQUEZ VISUAL
contrasea 123; la especificacin de la VRL sera: Inicio\Documentos\Tex-
to.txt@velazquezvisual.com/carlos/123
SDV: Renombrar fichero
Esta funcin renombra un fichero de un servidor de disco de Velzquez Vi-
sual. Funcin comn de lista y de ficha.
Los parmetros de este proceso son:
VRL Destino: VRL con senda y nombre del fichero a renombrar, como en ca-
sos anteriores.
Sintaxis para la especificacin de la VRL de destino: Senda\Fichero.ext@ser-
vidor/usuario/contrasea
Nuevo nombre: expresin frmula del nuevo nombre.
Variable de retorno OK: variable local del proceso donde se retornar si el
fichero ha sido renombrado (1) o no (0).
Ejemplo
Renombrar el fichero Texto.txt de la carpeta Inicio\Documentos, del servidor
velazquezvisual.com, el nombre del usuario de la aplicacin es carlos y su
contrasea 123; como NOMBREUSUARIO.txt. La especificacin de la VRL
sera: Inicio\Documentos\Texto.txt@velazquezvisual.com/carlos/123
En el parmetro nuevo nombre especificaramos la frmula: u + .txt (u es
la variable del sistema que devuelve el nombre de un usuario).
Registro de Windows
Con ayuda de estas funciones podremos modificar el Registro de Windows
desde nuestra aplicacin. Debemos tener cuidado, ya que puede resultar
peligroso escribir en el Registro de Windows.
e
e
Registro de Windows: Leer nmero entero
Nos permite guardar en una variable local del proceso el nmero entero
contenido en la entrada del registro de Windows especificada en los par-
metros de la funcin. Funcin comn de lista y de ficha.
Los parmetros que debemos especificar son:
Clave raz: el nombre de la clave raz de donde queremos leer el nmero. No ten-
dremos que escribirla, sino que la seleccionaremos de entre las que se presen-
tan cuando despliega el combo box. Las claves son: HKEY_CLASSES_ROOT,
HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LOCAL_MACHI-
NE, HKEY_USERS.
Senda seccin: senda, dentro de la clave raz especificada, donde se en-
cuentra la seccin de donde queremos leer el nmero.
Entrada: nombre de la entrada de la seccin de donde queremos leer el n-
mero (en el panel derecho del editor del registro REGEDIT, en la columna
Nombre).
Identificador variable local del resultado: nombre de la variable local donde
queremos almacenar el nmero de la entrada especificada.
08
Desarrollo completo
de una aplicacin
FUNCIONES DE REGISTRO DE WINDOWS
368 369 VELAZQUEZ VISUAL
Registro de Windows: Escribir nmero entero
Esta funcin escribe un nmero entero en el registro de Windows. Debemos
tener en cuenta que escribir en el Registro de Windows puede resultar pe-
ligroso. Funcin comn de lista y de ficha.
Los parmetros son:
Clave raz: el nombre de la clave raz donde queremos escribir el nmero ente-
ro. No tendremos que escribirla, sino que la seleccionaremos de entre las que
se presentan cuando despliega el combo box. Las claves son: HKEY_CLAS-
SES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LO-
CAL_MACHINE, HKEY_USERS.
Senda seccin: senda, dentro de la clave raz especificada, donde se en-
cuentra la seccin donde queremos escribir el nmero entero.
Entrada: nombre de la entrada de la seccin donde queremos escribir el
nmero entero (en el panel derecho del editor del registro en la columna
Nombre).
Frmula valor: expresin frmula con el nmero entero que escribiremos.
Puede ser una constante o una variable.
Registro de Windows: Leer cadena de texto
Esta funcin nos permite guardar en una variable local del proceso el texto
contenido en la entrada especificada en los parmetros del Registro de
Windows. Funcin comn de lista y de ficha.
Los parmetros son:
Clave raz: el nombre de la clave raz de donde queremos leer la cadena de tex-
to. No tendremos que escribirla, sino que la seleccionaremos de entre las que
se presentan cuando despliega el combo box. Las claves son: HKEY_CLAS-
SES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LO-
CAL_MACHINE, HKEY_USERS.
Senda seccin: senda, dentro de la clave raz especificada, donde se en-
cuentra la seccin de donde queremos leer la cadena.
Entrada: nombre de la entrada de la seccin de donde queremos leer la ca-
dena (en el panel derecho del editor del registro REGEDIT, en la columna
Nombre).
Identificador variable local del resultado: nombre de la variable local donde
queremos almacenar la cadena de texto de la entrada especificada.
Registro de Windows: Escribir cadena de texto
Esta funcin escribe una cadena de texto en el registro de Windows. Fun-
cin comn de lista y de ficha.
Los parmetros son:
Clave raz: el nombre de la clave raz donde queremos escribir la cadena de tex-
to. No tendremos que escribirla, sino que la seleccionaremos de entre las que
se presentan cuando despliega el combo box. Las claves son: HKEY_CLAS-
SES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LO-
CAL_MACHINE, HKEY_USERS.
Senda seccin: senda, dentro de la clave raz especificada, donde se en-
cuentra la seccin donde queremos escribir la cadena.
Entrada: nombre de la entrada de la seccin donde queremos escribir la ca-
dena (en el panel derecho del editor del registro en la columna Nombre).
Frmula de texto: expresin frmula con la cadena de texto a escribir. Si se
trata de una constante debemos escribirla entrecomillada. Tambin podre-
mos utilizar variables que contengan dicha cadena.
Registro de Windows: Eliminar entrada
Elimina una entrada en el Registro de Windows. Funcin comn de lista y
de ficha.
Los parmetros que debemos completar son:
Clave raz: el nombre de la clave raz de donde queremos eliminar la entrada.
No tendremos que escribirla, sino que la seleccionaremos de entre las que se
presentan cuando despliega el combo box. Las claves son: HKEY_CLAS-
SES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LO-
CAL_MACHINE, HKEY_USERS.
Senda seccin: senda, dentro de la clave raz especificada, donde se en-
cuentra la seccin donde se encuentra la entrada a eliminar.
Entrada: nombre de la entrada a eliminar.
Sistema
Con esta serie de funciones realizaremos ciertos comandos del sistema
operativo que pueden ser tiles a la hora de trabajar en una aplicacin:
08
Desarrollo completo
de una aplicacin
370 371 VELAZQUEZ VISUAL
Ejecutar comando DOS
Ejecuta cualquier comando o aplicacin de MS-DOS. Funcin comn de lis-
ta y de ficha.
Los parmetros que debemos definir son los siguientes:
Comando: especificacin del comando DOS a ejecutar (obligatorio). No es
frmula.
Identificador variable donde dejar el valor de retorno del comando: variable
en la cual se va a dejar el valor que retorne el comando ejecutado (opcional).
Ejemplo
Este ejemplo restaura la copia de seguridad hecha en un disquete del fiche-
ro CONTACTOS.DAT, que se encuentra dentro del directorio C:\GESTION.
RESTORE A: C:\GESTION\CONTACTOS.DAT
Lanzar aplicacin
Con esta funcin podemos ejecutar la aplicacin de Windows que especi-
fiquemos en sus parmetros. Funcin comn de lista y de ficha.
FUNCIONES DE SISTEMA
e
Los parmetros son:
Modo: (obligatorio). Hay dos parmetros posibles:
En espera: se ejecutar la aplicacin especificada y el usuario no podr vol-
ver al programa de Velzquez hasta que no la haya cerrado.
No esperes: el usuario podr trabajar con su aplicacin de Velzquez y con
la aplicacin lanzada al mismo tiempo.
Comando: aqu se especificar la senda completa de la aplicacin que lan-
zaremos (obligatorio). Puede utilizar el asistente para su especificacin, ya
que se trata de una frmula.
Parmetros: se especificar la senda completa y el nombre de un archivo
que queramos abrir con el programa (opcional). Podr utilizar el asistente
para su especificacin, ya que tambin es tipo frmula.
Variable que retorna s/no: variable interna del proceso en la que queremos
que se guarde si el usuario ha pulsado aceptar o no (opcional).
Ejemplo
En este ejemplo se lanza el MSPAINT, en modo No esperes, y abriendo el
dibujo Foto.bmp que se encuentra en el directorio de la aplicacin.
Ejecutar documento
Esta funcin ejecuta un documento en concreto en la aplicacin que se ten-
ga asociada a l en Windows. Funcin comn de lista y de ficha.
Los parmetros que hemos de definir son:
Senda documento: especificacin de la senda completa de acceso del do-
cumento a ejecutar (obligatorio). Es de tipo frmula.
Identificador de variable de retorno S/No ejecut: variable en la que se
guardar si el documento se ejecut (1) o si no se lleg a ejecutar (0) (op-
cional).
Ejemplo
Este ejemplo ejecuta el documento Foto.bmp, que se encuentra en el di-
rectorio de la aplicacin.
Cambiar fecha/hora del sistema
Esta funcin nos permite cambiar la fecha y la hora del sistema desde una
aplicacin de Velzquez Visual. Funcin comn de lista y de ficha.
08
Desarrollo completo
de una aplicacin
e
e
372 373 VELAZQUEZ VISUAL
Los parmetros son:
Fecha: frmula con la especificacin de la nueva fecha del sistema.
Hora: frmula con la especificacin de la nueva hora del sistema.
Get estado memoria fsica
Esta funcin nos permite conocer el estado de la memoria fsica del orde-
nador donde sea ejecutado el proceso. Funcin comn de lista y de ficha.
Los parmetros son:
Variable de retorno del porcentaje ocupado: declaracin de una variable local
donde retornar qu porcentaje de la memoria fsica est siendo utilizado.
Variable de retorno del nmero total de bytes: declaracin de una variable
local donde retornar el nmero total de bytes de la memoria fsica.
Variable de retorno del nmero total de bytes libres: declaracin de una varia-
ble local donde retornar el nmero total de bytes libres de la memoria fsica.
Puerto serie
Para trabajar con puertos de serie tenemos este grupo de funciones, aun-
que debemos recordar que necesitamos el objeto visual Comunicacin Se-
rie para usarlas.
FUNCIONES DE PUERTO SERIE
Abrir puerto
Con esta funcin abrimos un puerto de serie. Si el puerto ya se encuentra
abierto esta instruccin no se ejecuta. Funcin comn de lista y de ficha.
Los parmetros que definimos son:
Identificador puerto: objeto de tipo Puerto serie creado en la aplicacin.
Variable de retorno S/No abri: en este parmetro se definir una variable lo-
cal del proceso para poder evaluar posteriormente si el puerto est abierto.
Cerrar puerto
Esta funcin nos permite cerrar un puerto de serie. Si en una aplicacin de
Velzquez Visual hemos abierto un puerto, pero no se ha cerrado por no ha-
ber incluido esta funcin en ningn proceso, cuando cerremos el ejecutor
de aplicaciones, ste cerrar automticamente los puertos abiertos. Fun-
cin comn de lista y de ficha.
Los parmetros son:
Identificador puerto: objeto de tipo Puerto serie creado en la aplicacin.
Nmero de bytes para leer en el puerto
Esta funcin devuelve el nmero de bytes que hay en el buffer de entrada
de un puerto serie. Funcin comn de lista y de ficha.
Los parmetros que debemos definir son:
Identificador puerto: objeto de tipo Puerto serie creado en la aplicacin.
Variable donde retorna dato: variable local del proceso donde se recoger el
nmero de bytes de la cadena que hay en el buffer de entrada del puerto.
Leer del puerto
Con esta funcin podremos leer de un puerto de serie. Funcin comn de
lista y de ficha.
Los parmetros son:
Identificador puerto: objeto de tipo Puerto serie creado en la aplicacin.
Variable donde retorna datos: en este parmetro definimos una variable lo-
cal del proceso donde almacenar la lectura obtenida del puerto.
Variable de retorno OK (S/No): en este parmetro definimos una variable lo-
cal del proceso en donde se almacenar si se ha llevado a cabo o no la lec-
tura del puerto.
Milisegundos de Time Out: tiempo que espera para leer. Por defecto, si no
lo cumplimentamos esperar durante 5.000 milisegundos, es decir, cinco
segundos.
08
Desarrollo completo
de una aplicacin
374 375 VELAZQUEZ VISUAL
Escribir en el puerto
Esta funcin nos permite escribir en el puerto serie. Funcin comn de lis-
ta y de ficha.
Parmetros:
Identificador puerto: objeto de tipo Puerto serie creado en la aplicacin don-
de queremos escribir.
Frmula a escribir: frmula con lo que queremos escribir en el puerto.
Variable de retorno OK (S/No): en este parmetro se define una variable lo-
cal del proceso en donde se almacenar si se ha llevado a cabo o no la es-
critura del puerto.
Ejemplo
Ejemplo de un proceso de comunicacin con un puerto serie (marcado de
telfono):
Como podemos observar, tras la especificacin de la cadena a escribir en
el puerto se introduce una secuencia de escape \r\n, que aade un retorno
de carro para que se lleve a cabo la escritura en el puerto.
Varios
En este apartado entran una serie de funciones bastante especficas pero
que no pertenecen a ninguno de los otros:
Hay que tener en cuenta
que si se trata de una
conexin asncrona, al
ejecutar esta instruccin si
se evala a continuacin si
ha escrito o no, debido a la
asincrona, puede devolver 0
(que no ha escrito), as que
para asegurarlo tendra que:
Escribir en el puerto, leer y
comprobar si lo ledo es lo
enviado. En Velzquez Visual
si definimos el puerto de
serie como sncrono aunque
sea asncrono, normalmente
funcionar mejor.
TRUCO
e
Emitir sonido
Emite un sonido del sistema. Funcin comn de lista y de ficha.
Los parmetros son:
Sonido: uno de los sonidos predeterminados por el sistema (obligatorio).
Puede ser uno de los siguientes:
Pitido con altavoz del sistema
Informacin
Exclamacin
Stop crtico
Pregunta
Predeterminado
Reproducir sonido
Esta funcin reproduce ficheros con extensin WAV. Funcin comn de lis-
ta y de ficha.
Los parmetros que debemos definir son:
Nombre de fichero Wav: especificacin de la senda ms el nombre y extensin
del fichero de sonido que queremos ejecutar. Se trata de un campo frmula.
08
Desarrollo completo
de una aplicacin
FUNCIONES VARIAS
376 377 VELAZQUEZ VISUAL
Si dicho fichero se encuentra en el mismo directorio que la aplicacin, po-
dremos utilizar la variable del sistema d (directorio actual). Por ejemplo, pa-
ra ejecutar el fichero Velazquez.wav, que se encuentra en el directorio de la
aplicacin, tendremos que especificar en la frmula: d + \\Velazquez.wav
Reproducir sonido -> d + \\Velazquez.wav
Si se encuentra en otro directorio distinto el archivo WAV, tendremos que
especificar la senda completa para llegar al mismo, entre comillas.
Esperar
Esta funcin realiza una pausa en el proceso. Funcin comn de lista y de
ficha.
Los parmetros son:
Milisegundos: el tiempo, en milsimas de segundo, que ha de durar la es-
pera.
Marcar telfono
Esta funcin realiza una marcacin de telfono sin que el usuario tenga que
escribir el nmero a marcar. Funcin comn de lista y de ficha.
Los parmetros son:
Frmula n telfono: especificaremos, mediante una expresin frmula, el
nmero de telfono a marcar. Podr ser un campo, una variable o una fr-
mula compuesta por nosotros.
Variable de retorno SI/NO marc: especificaremos el nombre de una varia-
ble local del proceso que recoger si se marc (1) o no (0) el telfono.
Ejemplo
Cmo hacer para llamar por telfono al cliente editado en una ficha. En la
tabla CLIENTES existe el campo TELEFONO (de tipo ALFA40). En primer lu-
gar crearemos un proceso asociado a la tabla de CLIENTES, cuyo Origen
sea una ficha de CLIENTES. En la primera lnea del mismo utilizaremos la
funcin Marcar telfono. Como frmula escribiremos el campo %TELEFO-
NO% (podremos obtenerlo de la lista de campos que aparece al pulsar el
botn Campos del Asistente para la edicin de frmulas). A este proceso lo
llamaremos MARCAR TELEFONO.
En el formulario de edicin de fichas de CLIENTES aadiremos un control
de tipo botn, cuya funcin a disparar ha de ser Ejecutar proceso -> ficha
actual. Como proceso seleccionaremos MARCAR TELEFONO.
Cuando el usuario final ejecute el proyecto, al editar la ficha de un cliente,
podr llamarlo por telfono desde el programa simplemente pulsando un
botn.
e
Redirigir database externa DAO-ODBC
Con esta funcin podremos redirigir la senda donde se encuentra una base
de datos DAO-ODBC incluida en el proyecto de Velzquez. Funcin comn
de lista y de ficha.
Los parmetros son:
Identificador database: nombre de la base de datos externa que va a ser re-
dirigida.
Frmula nueva senda: expresin frmula para especificar la nueva senda
donde se va a redirigir dicha base de datos externa.
Cuando incorporamos en un proyecto de Velzquez Visual una base de da-
tos externa DAO-ODBC, en tiempo de ejecucin el programa ir a buscar
dicha base de datos externa en la unidad y el directorio donde estaba si-
tuada dicha base de datos externa al incorporarla en el Editor.
Al instalar la aplicacin a un usuario final puede ser que queramos guardar
la base de datos externa en otra unidad o directorio distinto de donde lo te-
namos a la hora de disear la aplicacin, por lo que esta funcin nos per-
mitir especificar dnde tendr que ir a buscar el programa dicha base de
datos externa cuando el usuario vaya a trabajar sobre ella.
Si queremos redirigirla de forma permanente, podremos utilizar una variable
global.
Ejemplo
Vamos a disear una aplicacin en la que el usuario final pueda redirigir la si-
tuacin de una base de datos externa de forma permanente. Para ello son ne-
cesarios dos procesos, uno en el que se obtenga la nueva senda y la guarde
en una variable global en disco, y otro que redirija la base de datos externa.
Crearemos una variable global en disco, de tipo Alfabtico de 255 caracte-
res. Tiene que ser de tipo alfabtico porque la barra de directorios (\) no es
soportada por la tabla de caracteres de los Alfa128, Alfa64 y Alfa40.
Proceso para la seleccin de la senda:
Se declarar como origen Ninguno, para ejecutar desde un men y el pro-
ceso ser:
En primer lugar utilizamos la funcin Ventana seleccin de fichero, estable-
ciendo como filtro de archivos los de extensin MDB (extensin de las ba-
ses de datos externas de Velzquez Visual). Entre los parmetros, se crea la
08
Desarrollo completo
de una aplicacin
e
378 379 VELAZQUEZ VISUAL
variable local senda en la que se retorna el nombre del fichero selecciona-
do y su senda.
Si se ha seleccionado algn archivo, entonces se mover la senda del ar-
chivo seleccionado a la variable global. Puesto que en la variable local sen-
da se ha guardado tanto la senda como el nombre del archivo, hay que uti-
lizar la funcin de frmulas fSendaSinNombreExt(), que devuelve una senda
sin el nombre del fichero y la extensin.
Proceso para redirigir la base de datos externa:
Una vez ejecutado el proceso anterior, la variable global en disco ya con-
tendr la senda de la base de datos externa. Se especificar en el proceso
el origen Ninguno. Ser:
Este proceso simplemente redirige la base de datos especificada en el pri-
mer parmetro a la senda guardada en la variable global $SENDA$. Se uti-
liza la funcin fQuitarEspacios() para eliminar todos los espacios en blanco
que la cadena pueda contener al principio o al final y que aparecen al usar
una variable alfabtica.
Cambiar ttulo de la transaccin
Esta funcin nos crea un texto sustitutorio del texto descriptor del proceso.
Lo utilizaremos en los informes de incidencias que se presentan al detectar
transacciones no finalizadas, en los archivos .LOG (historial del servidor), y
en el cuadro de dilogo de tareas en segundo plano. Funcin comn de lis-
ta y de ficha.
Esta funcin tiene que estar situada antes que las funciones que realicen
operaciones de lectura/escritura si queremos que el cambio del ttulo se vea
reflejado en el momento de producirse en el servidor de aplicaciones o en
el ttulo del cuadro de dilogo de tareas en segundo plano, aunque ser
efectivo en el archivo .LOG que ste crea.
Los parmetros son:
Frmula del texto: expresin frmula que va a ser evaluada como texto
(obligatorio).
Cambiar porcentaje realizado del proceso
Nos permite pasar el dato del porcentaje de registros procesados a las ba-
rras de progreso del cuadro de dilogo de tareas en segundo plano del eje-
cutor, si no ste no se actualiza. Funcin comn de lista y de ficha.
Los parmetros son:
Frmula: expresin frmula que calcula el porcentaje de registros procesa-
dos por el subproceso actual (obligatorio). El valor que hemos de conseguir
ha de ser un nmero del 0 al 100, que ser el que represente el porcentaje.
e
Ejemplo
En el ejemplo que se muestra a continuacin hemos utilizado esta funcin
en un proceso de subida de precios de LIBROS de una EDITORIAL para
que se muestre, en la consulta de procesos en segundo plano en tiempo de
ejecucin, una barra de nivel con el porcentaje realizado del proceso. En la
estructura del proyecto, EDITORIALES es maestra de LIBROS. En el proce-
so tambin hemos utilizado la funcin Cambiar ttulo de la transaccin, pa-
ra determinar el proceso en que se realizan las transacciones. ste tendr
como origen una Lista de LIBROS.
Pedir dato -> Porcentaje de subida, Porce, 0
Seleccionar ficha por posicin -> 1
Leer ficha seleccionada
Set -> editor, %EDITORIALES NOMBRE%
Cambiar ttulo de la transaccin -> Subida de precios + Porcen + %
+ editor
Set -> nLibrosTotal, n
Set -> nLibrosProces, 0
Recorrer lista lectura/escritura
Modificar campo -> PVP, %PVP% * ( 100 + Porcen ) / 100
Set -> nLibrosProces, nLibrosProces + 1
Cambiar porcentaje realizado del proceso -> fRedondear ( 100 *
nLibrosProces / nLibrosTotal )
En primer lugar se pide al usuario que introduzca el dato del porcentaje a
subir de precio los libros de la lista, con la funcin Pedir dato. El nmero se-
r guardado en la variable local Porcen.
A continuacin se va a determinar a qu editorial pertenecen los libros de la
lista. Para ello se va a mirar la primera ficha de la lista (Seleccionar ficha por
posicin), a continuacin ser leda (Leer ficha seleccionada) para poder ob-
tener el nombre de la editorial y almacenarlo en la variable local editor (Set).
El siguiente paso ser cambiar el ttulo de la transaccin por el ttulo si-
guiente: Subida de precios + Porcen + % + editor. Esta frmula con-
catena a la cadena Subida de precios el tanto por ciento realizado del pro-
ceso (en la variable local Porcen), seguido del smbolo % y el nombre de
la editorial (almacenado en la variable local editor).
Para poder calcular el porcentaje realizado del proceso se necesita saber
cul es el total de libros de la lista y cul es el nmero de libros procesados,
por tanto se crean dos variables locales nLibrosTotal (a la que se le asigna
la variable de sistema n, que devuelve el nmero total de elementos de una
lista), y nLibrosProces, que se inicializa a 0 y funcionar como acumulador
durante el proceso.
08
Desarrollo completo
de una aplicacin
e
380 381 VELAZQUEZ VISUAL
El siguiente paso es recorrer la lista de libros y modificar el campo PVP.
En primer lugar se utiliza la funcin Recorrer lista lectura/escritura para ir
editando uno a uno los registros y cambiar el PVP. Las lneas que se inclu-
yan en el subproceso que esta funcin genera sern ejecutadas por cada
uno de los registros de la lista.
A continuacin se modifica el campo PVP, con la funcin Modificar campo.
El nuevo valor del campo PVP ha de ser el precio anterior ms el porcenta-
je de subida especificado por el usuario, por lo que la frmula ser: %PVP%
* (100 + Porcen) / 100.
En la siguiente lnea se acumula un 1 a la variable local que guardar el n-
mero de libros procesados (nLibrosProces). Para ello a esta variable se le
suma un 1 a su valor anterior: nLibrosProces + 1
A continuacin modificaremos el Porcentaje realizado del proceso. La fr-
mula ser: fRedondear( 100 * nLibrosProces / nLibrosTotal ). Devolver el
resultado redondeado de multiplicar 100 al nmero de libros procesados di-
vidido entre el nmero total de libros.
Cuando el proceso finalice se emitir un sonido para avisar al usuario.
Guardar ficha
Guarda la ficha, temporalmente, durante la ejecucin del proceso. Esta fi-
cha podemos, posteriormente, inducirla a un tubo de lista (ver funcin Tubo
de lista con induccin). Funcin propia de ficha.
Los parmetros son:
Identificador: identificador local para la ficha (obligatorio).
Ejemplo
En este ejemplo de facturacin de un albarn al generar la cabecera de la
factura se guarda la ficha en la variable NUEVA-FICHA. Al generar las l-
neas de la factura se utiliza dicha variable para inducir como maestro de
las lneas de factura la factura creada al principio del proceso.
Recuerde que podemos acceder a un campo de una ficha guardada de la for-
ma siguiente: :ID_FICHA%CAMPO%. Por ejemplo, en un proceso hemos guar-
dado una ficha con el identificador FICHA. Si posteriormente queremos obtener
el campo NOMBRE de la ficha guardada, la frmula ser: :FICHA%NOMBRE%
Tubo de ficha sin pedir formulario -> ALBARAN-A-FACTURA
Pre
Libre
Post
e
e
Guardar ficha -> NUEVA-FACTURA
Cargar histrico -> LINEAS-ALBARAN, ALBARANES
Tubo de lista con induccin -> LIN-ALBARAN-A-LIN-FACTURA
Formulario con subproceso
Esta funcin nos permite presentar al usuario un formulario con un mensa-
je, una animacin o lo que queramos, para entretener o informar al usuario
mientras se ejecuta el subproceso. Funcin comn de lista y de ficha.
Los parmetros son:
Identificador formulario: especificacin del nombre del formulario a visuali-
zar. Se visualizar dicho formulario mientras se ejecuta el subproceso que
genera esta funcin.
Ejemplo
En este ejemplo se dispara un proceso desde una lista de Proveedores pa-
ra facturar sus albaranes. Para entretener al usuario, se ha creado un for-
mulario en el que se ir mostrando el nombre del proveedor cuyos albara-
nes estn siendo facturados. En el formulario solamente se ha incluido el
texto esttico Facturando albaranes de y un control de edicin (solo lec-
tura) del campo NOMBRE de la tabla de Proveedores.
Cerrar ejecutor de aplicaciones
Esta funcin cierra el Ejecutor de Proyectos de Velzquez Visual. Funcin
comn de lista y de ficha.
No tiene parmetros.
Cerrar aplicacin
Esta funcin cierra la aplicacin actual; si hay otras aplicaciones abiertas en
la misma ventana, permanecern abiertas. Funcin comn de lista y de ficha.
No tiene parmetros.
Cerrar ventana
Esta funcin cierra la ventana actual. Funcin comn de lista y de ficha.
No tiene parmetros.
Eliminar todas las fichas de la tabla
Esta funcin elimina todos los registros de la tabla que se indique en sus
parmetros. Es muy til en aquellos casos en los que el cliente final debe
08
Desarrollo completo
de una aplicacin
Para esta funcin no
debemos utilizar nunca un
formulario que tenga
controles editables ni
botones.
ADVERTENCIA
e
e
382 383 VELAZQUEZ VISUAL
importar gran cantidad de datos diariamente de una base de datos externa
utilizando un tubo de importacin con la opcin No indexar y hacer Regen
al final. Durante la ejecucin de esta funcin el programa bloquear la tabla
objeto del borrado para que no se pueda trabajar con ella. Funcin comn
de lista y de ficha.
Parmetros:
Identificador tabla: nombre de la tabla de la que queremos borrar sus datos.
Identificador variable de retorno s/no: identificador de la variable local del pro-
ceso en la que se guardar el valor de si se han borrado los registros (1) o no (0).
Advertencia para la versin Cliente-Servidor:
Esta funcin de procesos no genera transaccin. Si en un proceso de un
proyecto que va a ser ejecutado en la versin cliente-servidor queremos eli-
minar las fichas de una tabla, generando una transaccin, deber incluir an-
tes de esta instruccin cualquier otra que implique escritura en disco (otra
instruccin que genere transaccin), o sustituirla por lo siguiente:
Cargar lista -> TABLA_DE_DATOS
Recorrer lista eliminando fichas
Ejemplo
Hemos creado una aplicacin para una empresa que debe importar y expor-
tar gran cantidad de datos diariamente. En vista de esto, hemos decidido uti-
lizar un tubo de importacin con la opcin No indexar y hacer Regen al final ac-
tivada. Esto supone un ahorro enorme en el tiempo de duracin de la impor-
tacin de datos desde la base de datos externa. Debido a que esta opcin no
comprueba la clave y no regenera los ndices hasta el final de la importacin,
es preceptivo que la tabla de datos de destino (la interna de Velzquez Visual)
no tenga ningn registro. Para ello, antes de ejecutar la importacin podemos
crear un proceso que dispare esta funcin. Imaginemos que todos los das se
han de realizar importaciones de una tabla externa a una tabla interna de
CLIENTES. Entonces crearamos un proceso que incluya esta funcin:
Eliminar todas las fichas de la tabla -> CLIENTES, bOK
Podemos crear en un men una opcin que sea Importar datos de clientes,
en esta opcin llamaremos a otro men que incluir los siguientes contro-
les autodisparables:
Uno que ejecute el proceso de borrado de datos de la tabla.
Otro que ejecute el tubo de importacin de datos de la tabla externa con la
opcin No indexar y hacer Regen al final activada.
Otro que cierre dicho men.
e
Los controles que disparen estas tres opciones deben seguir el orden de ta-
bulacin en el que los hemos explicado (borrar, importar y cerrar la ventana
del men).
Regenerar ndices
Esta funcin regenera todos los ndices de la tabla que indiquemos como
parmetro. Funcin comn de lista y de ficha.
Los parmetros que debemos especificar son los siguientes:
Identificador tabla: nombre de la tabla de la que queremos regenerar sus ndices.
Identificador variable de retorno S/No: identificador de la variable local del
proceso en la que se guardar el valor de si se han regenerado los ndices
(1) o no (0).
Regenerar ndices de todas las tablas
Esta funcin regenera todos los ndices de todas las tablas de datos de la
aplicacin. Funcin comn de lista y de ficha.
Los parmetros son:
Identificador variable de retorno S/No: identificador de la variable local del
proceso en la que se guardar el valor de si se han regenerado los ndices
de las tablas (1) o no (0).
Alta directa
Con esta funcin realizamos un alta de un registro de la tabla de datos es-
pecificada en sus parmetros desde cualquier punto de un proceso. El ori-
gen de la lnea donde usemos esta funcin puede tener su origen en cual-
quier ficha o lista de cualquier tabla de datos de la aplicacin, o bien no te-
ner origen ninguno. Funcin comn de lista y de ficha.
Los parmetros son:
Identificador Tabla: identificador de la tabla de datos en la que queremos
dar un alta.
Esta funcin crea dos subprocesos de ficha:
Pre: este subproceso se ejecuta antes de guardar la ficha creada. Este sub-
proceso es de lectura/escritura, por lo tanto, todas las modificaciones rea-
lizadas en la ficha de destino sern grabadas en el disco.
Ejemplo
En l podemos incluir la funcin Pedir formulario, para mostrar el formulario
de altas de la ficha. Si queremos que la ficha sea generada o no en funcin
de una condicin, utilizaremos una funcin if para evaluar la condicin y si
no se cumple, aadiremos una instruccin Else en la que se dispare un Set
retorno proceso = NO.
08
Desarrollo completo
de una aplicacin
e
e
384 385 VELAZQUEZ VISUAL
If -> CONDICION
Rem -> Proceso a ejecutar si se cumple la condicin
Else
Set retorno proceso = NO
Post: este subproceso se ejecuta despus de guardar la ficha de destino.
Este subproceso es de solo lectura, por lo tanto, ningn cambio realizado
en la ficha de destino ser guardado en el disco.
Ejemplo
En el proceso PRE se podra, por ejemplo, dar valor a los campos de la ficha
que se est dando de alta. Para ello habr que utilizar la funcin Modificar
campo. Y en el proceso POST recoger el valor que se le asign como cdigo.
Recorrer buffer
Esta funcin recorre una cadena, generando un subproceso que ser eje-
cutado por cada carcter que la cadena contenga. Funcin comn de lista
y de ficha.
Los parmetros que especificaremos son:
Cadena a recorrer: cadena que recorreremos con esta funcin.
Carcter en curso (variable donde retorna): variable local del proceso don-
de se retorna el carcter de la cadena que est siendo procesado.
Ejemplo
Este proceso obtiene las iniciales de un campo alfabtico, evitando que in-
cluya espacios en blanco. As, si el contenido del campo nombre es Luis
Enrquez Fernndez, la variable local del proceso iniciales devolver LEF.
e
e
e
Controlar Licencia
Esta funcin nos permitir conectar con nuestro Servidor de Licencias de
Velzquez Visual y conocer si la licencia es vlida o no. Funcin comn de
lista y de ficha.
Los parmetros que definiremos son:
Dominio o IP del servidor: especificacin del nombre o IP del servidor don-
de est alojado nuestro Servidor de Licencias de Velzquez Visual.
Clave aplicacin: clave que hayamos dado a la aplicacin en nuestro Servi-
dor de Licencias de Velzquez Visual.
Clave licencia: clave que hayamos asignado a esa licencia concreta de esa
aplicacin en nuestro Servidor de Licencias de Velzquez Visual.
Variable de retorno OK licencia: variable que devolver si la licencia es vli-
da (1) o no (0).
Array retorno parmetros: identificador de un array donde retornar parmetros.
Este array tendremos que haberlo creado con anterioridad en el proceso (fun-
cin Array: Crear). En el array guarda la informacin de la forma siguiente:
Posicin Retorno
0 Primer nmero del nmero de serie de la licencia.
1 Segundo nmero del nmero de serie de la licencia.
2 Tercer nmero del nmero de serie de la licencia.
3 Cuarto nmero del nmero de serie de la licencia.
4 Nmero de puestos de la licencia.
De la 5 en adelante presentar por este orden:
Datos numricos.
Datos de fechas.
Datos alfabticos.
Datos booleanos.
Todos estos parmetros retornados en el array los habremos definido en la
aplicacin del Servidor de Licencias de Velzquez Visual.
Esta instruccin nos ser de utilidad para proteger mapas de Velzquez que
comercialicemos a travs de un Servidor de Licencias de Velzquez Visual,
evitando as el uso de mochilas de proteccin hardware.
Oracle
Velzquez Visual nos permite, a travs de procesos y usando esta serie de
funciones, el acceso a bases de datos Oracle, tanto para lectura como pa-
ra escritura de registros.
08
Desarrollo completo
de una aplicacin
386 387 VELAZQUEZ VISUAL
Oracle: Logon
Esta funcin establece conexin con una base de datos de Oracle. La funcin
genera un subproceso, y una vez ejecutadas las funciones incluidas en el mis-
mo, el logoff ser ejecutado automticamente. Funcin comn de lista y de ficha.
Los parmetros son:
Usuario: especificacin del nombre del usuario.
Contrasea: especificacin de la contrasea del usuario.
Ambos parmetros pueden ser especificados directamente en el primero,
debiendo seguir para su especificacin la propia sintaxis de Oracle.
Ejemplo
Un usuario que se llame Kike, con contrasea 1234, escribira lo siguiente:
Oracle: Logon ->, KIKE, 1234
Si ha definido una conexin a una base de datos Oracle en SQL*NET 2, se
especificar, en el parmetro correspondiente al usuario, lo siguiente:
Usuario@INSTANCIA
FUNCIONES DE ORACLE
e
Donde:
Usuario: Usuario de Oracle
INSTANCIA: Nombre de la conexin definida en SQL*NET 2
Oracle: SQL
Esta funcin nos permite establecer la sentencia SQL a ejecutar. Funcin
comn de lista y de ficha.
Los parmetros son:
Comando SQL: expresin frmula con la especificacin de la sentencia
SQL a ejecutar. Podr ser una constante, una variable, etc.
Esta funcin genera dos subprocesos, uno Pre y otro Post. En el Pre la sen-
tencia select ya ha sido interpretada; en l se establecern todos los par-
metros de entrada, si los hubiera.
En el Post, si se ejecuta una query, habr que obtener los datos. Si se tra-
ta de un Update, Delete o Insert, no habr que especificar nada.
Ejemplo
En este proceso, la funcin ejecuta una select del campo ENAME de la ba-
se de datos de Oracle EMP, buscando aquellos cuya edad (campo EAGE)
sea mayor que la contenida en una variable global de Velzquez Visual, lla-
mada $EDAD$. Como podemos observar, en la sentencia SQL se ha esta-
blecido un parmetro (:EDAD): el valor de ste es resuelto en el subproceso
Pre de la instruccin, con la funcin Oracle: Set parmetro, donde se indica
que el parmetro se ha de resolver con el valor de la variable global $EDAD$.
Oracle: SQL -> SELECT ENAME FROM EMP WHERE EAGE > :EDAD
Pre
Oracle: Set parmetro -> 1, $EDAD$
Oracle: Set parmetro
Esta funcin establece los parmetros de entrada de la sentencia SQL. Se
utilizar en el subproceso Pre generado por la funcin Oracle: SQL. Funcin
comn de lista y de ficha.
Los parmetros son:
Nmero: nmero del parmetro en la sentencia SQL. El primero ser la 1. Si
el nmero introducido es menor que 1 o mayor que el nmero total de co-
lumnas, no se tendr en cuenta el valor del parmetro. El nmero de co-
lumna no es el nmero del campo en la tabla de datos, sino que depende-
r de la sentencia select efectuada.
Frmula dato: valor del parmetro que queremos pasar. Puede tratarse tan-
to de una constante como de una variable.
08
Desarrollo completo
de una aplicacin
Cada sentencia SQL se ha
de ejecutar de forma
independiente, no es posible
ejecutar una sentencia SQL
dentro del subproceso
generado por la instruccin
Oracle: SQL.
ADVERTENCIA
e
e
388 389 VELAZQUEZ VISUAL
Ejemplo
De una tabla de Oracle, llamada EMP, queremos obtener el nombre (ENA-
ME) de aquellos registros cuya fecha de nacimiento (EDATE) se encuentre
entre las fechas establecidas en las variables globales $FECHA-INI$ y $FE-
CHA-FIN$
Oracle: SQL -> SELECT ENAME FROM EMP WHERE EDATE > :INICIO AND
EDATE < :FIN
Pre
Oracle: Set parmetro -> 1, $FECHA-INI$
Oracle: Set parmetro -> 2, $FECHA-FIN$
Como podemos observar, en la sentencia SQL se identifica cada parme-
tro por el smbolo : delante (sintaxis de Oracle), y un identificador cualquie-
ra detrs. En el subproceso Pre de esta funcin se indica (con la funcin Set
parmetro) el valor por el que se ha de sustituir cada parmetro.
Oracle: Recorrer lista
Cuando se ha ejecutado una query en una base de datos de Oracle, se utili-
zar esta instruccin en el subproceso Post generado por la instruccin Ora-
cle: SQL, para recorrer la lista resultante. Funcin comn de lista y de ficha.
No tiene parmetros.
Oracle: Get dato
Esta instruccin nos permite obtener datos de una tabla de datos de Ora-
cle. Se utilizar en el subproceso generado por la instruccin Oracle: Reco-
rrer lista. Funcin comn de lista y de ficha.
Los parmetros que debemos definir son:
N columna: nmero de la columna de la que se va a obtener el dato. La pri-
mera columna ser la nmero 1. Si el nmero introducido es menor que 1 o
mayor que el nmero total de columnas, no har nada. El nmero de co-
lumna no es el nmero del campo en la tabla de datos de Oracle, sino que
depender de la sentencia select efectuada.
Variable donde retorna: variable local del proceso donde se guardar el re-
sultado.
Ejemplo
De una base de datos de Oracle (EMP) queremos obtener el nombre (ENA-
ME) de aquellos cuya edad (campo AGE en la tabla de Oracle) supere la in-
troducida por el usuario en la variable local edad:
Pedir dato -> Edad, edad, 0, bok
If bok
e
e
Oracle: Logon -> usuario/password@dbcone,
Oracle: SQL -> SELECT ENAME FROM EMP WHERE AGE > :EDAD
Pre
Oracle: Set parmetro -> 1, edad
Post
Oracle: Recorrer lista
Oracle: Get dato -> 1, dato
En el subproceso Pre de la instruccin Oracle: SQL la sentencia select ya
ha sido interpretada, por lo que en l habr que alimentar el parmetro de
entrada. En el subproceso Post se obtendrn los resultados si se trata de
una sentencia query; si se trata de un Update, Delete o Insert no habr que
hacer nada en el mismo.
En el subproceso Post de la instruccin Oracle: SQL de este ejemplo, se re-
corre la base de datos de Oracle para obtener los datos.
El Logoff close se ejecuta automticamente una vez haya finalizado el sub-
proceso que cuelga de la funcin Oracle: Logon.
Ejemplo de Procesos
En una aplicacin trabajamos con un campo donde guardaremos el N.I.F.
de los clientes. A la hora de rellenar los datos de un cliente en el formulario,
este proceso comprueba si el usuario ha escrito correctamente este campo
NIF. Comprueba la letra de ste y si el usuario ha escrito un guin para se-
pararla del nmero. El mensaje de aviso del NIF errneo se generar en fun-
cin de lo que se haya hecho mal (o haber escrito mal la letra, o no haber
08
Desarrollo completo
de una aplicacin
e
e
390 391 VELAZQUEZ VISUAL
utilizado un guin para separarla de los nmeros o ambas a la vez). Este
proceso lo asignaremos a la prdida de foco de los formularios de alta y
modificacin de CLIENTES.
Seleccionamos el objeto Proceso de la Galera de Objetos, y espe-
cificamos el origen que, como partimos de un formulario de clientes, ha de
ser Ficha de Clientes, y ponemos una descripcin: Control del NIF de un
cliente.
El desarrollo del proceso es el siguiente:
Set -> nLenNif, fLen(%NIF%)
La funcin Set se utiliza para asignar, al tiempo que la creamos, un valor a
una variable local del proceso. Los parmetros son:
Identificador: el nombre que tendr la variable local. La hemos llamado:
nLenNif.
Frmula: aqu especificamos el valor que va a tomar esta variable. Creamos
entonces la siguiente frmula a travs del Asistente: fLen(%NIF%).
fLen() es una funcin de frmulas de Velzquez Visual que devuelve la lon-
gitud de una cadena. Se puede escribir directamente o bien seleccionn-
dola de la lista que aparece cuando pulsamos el botn Funcin.
PARMETROS DE LA FUNCIN SET
e
Proceso
Galera de Objetos
Funcin
%NIF% es el nombre del campo que recoge el NIF de la tabla de CLIEN-
TES. Podemos, o bien escribirlo directamente, o bien obtenerlo de la lista
de campos que se muestra al pulsar el botn Campo del Asistente pa-
ra la edicin de frmulas. Como hemos explicado, los nombres de campo
en el asistente para la creacin de frmulas siempre van incluidos entre dos
smbolos %.
Con esta lnea de proceso hemos calculado el nmero de caracteres que
contiene el campo NIF y se los hemos asignado a la variable nLenNIF.
La siguiente lnea de proceso es:
If -> nLenNif > 0
Utilizamos esta funcin para determinar si el usuario ha introducido o no el
NIF. Si no lo ha introducido, finalizar la ejecucin del proceso.
El nico parmetro que tiene esta funcin es la Frmula condicional, que se
crear a travs del asistente de frmulas. nLenNif es la variable local que
habamos creado en la lnea anterior.
NLenNif es una variable local del proceso, as que hemos de escribirla en-
tre apstrofes. Si no queremos escribirla directamente, pulsaremos el botn
Variable local del Asistente para la edicin de frmulas, escogindola en-
tre la lista de variables locales creadas.
El operador > (mayor que) podemos escribirlo directamente o seleccionarlo
de la lista de operadores que se muestra al pulsar el botn Operador del
Asistente.
08
Desarrollo completo
de una aplicacin
LISTA DE FUNCIONES CUANDO PULSAMOS EL BOTN FUNCIN
e
Campo del Asistente
Variable local
Operador del Asistente
392 393 VELAZQUEZ VISUAL
Finalmente se ha escrito el nmero 0 para determinar la condicin. Si se
cumple, es decir, hemos cumplimentado el nmero del NIF, se genera un
subproceso del que colgaremos el resto de funciones. A continuacin vie-
ne la siguiente lnea de cdigo:
Set -> cadena, TRWAGMYFPDXBNJZSQVHLCKE
Creamos la variable local cadena y le asignamos el contenido TR-
WAGMYFPDXBNJZSQVHLCKE. Puesto que se trata de una frmula he-
mos de entrecomillar la cadena. sta es la cadena de letras para la com-
probacin del NIF.
Esta funcin y las que vienen a continuacin, puesto que tienen que ejecu-
tarse si se cumple la anterior condicin, las incluimos dentro del subproce-
so generado por el if de la funcin anterior.
Set -> nLetra, %NIF% r 23
Creamos la variable local nLetra y le asignamos el resto que se obtiene de
dividir el NIF entre 23.
Set -> bOK, 1
Creamos una variable local llamada bOK y le asignamos el valor 1. Esta va-
riable la usaremos para establecer un conmutador en el que almacenemos
si es correcto el NIF. Lo utilizaremos ms adelante en el proceso para eje-
cutar ciertas funciones cuando su valor sea 0.
Set -> szMensaje1,
VENTANA DE OPERADORES
e
Creamos una variable local llamada szMensaje1 y le asignamos una cade-
na de caracteres vaca (). La usaremos para asignarle un mensaje en pos-
teriores lneas del programa.
Set -> szMensaje2,
Creamos otra variable local llamada szMensaje2 y le asignamos una cade-
na de caracteres vaca (). Al igual que la anterior, la utilizaremos para asig-
narle un mensaje.
If (fMid (cadena, nLetra, 1) ! fRight(%NIF%, 1))
En esta lnea comprobamos si la letra que corresponde en la cadena de ca-
racteres del NIF, es distinta de la letra introducida por el usuario al teclear
el NIF.
La funcin fMid(cadena, posicin, nmero) extrae de una cadena, a partir de
una determinada posicin, X caracteres. En este caso, obtiene una letra de
la cadena TRWAGMYFPDXBNJZSQVHLCKE, a partir de la posicin alma-
cenada en la variable local nLetra (la que guardaba el resto de la divisin del
NIF entre 23). Podemos escribir esta funcin directamente, u obtenerla a
travs del botn Funcin del Asistente para la edicin de frmulas.
El operador ! (exclamacin) es Distinto de. Podemos teclearlo directamente
o seleccionarlo de la lista de operadores que se abre al pulsar el botn
Operador del Asistente.
La funcin fRight(parmetro, longitud) extracta de la parte derecha del pri-
mer parmetro tantos caracteres como determinemos en el segundo par-
metro. Aqu la utilizamos para obtener la letra del campo NIF que ha te-
cleado el usuario.
Por tanto, en esta lnea comprobamos si la letra de la cadena no se corres-
ponde con la escrita por el usuario al teclear el NIF. En ese caso, esta fun-
cin genera un subproceso y en l incluiremos las dos lneas siguientes, en
las que compondremos parte del mensaje de error que se enviar al usuario.
Set -> bOK, 0
Asignamos el valor 0 a la variable local bOK que usbamos como conmu-
tador en caso de error.
Set szMensaje1, no pasa el chequeo
Asignamos el texto no pasa el chequeo a la variable local szMensaje, pa-
ra mostrarlo despus al usuario.
If fMid (%NIF%, nLenNif- 2, ,1) ! -
En esta lnea evaluamos si el penltimo carcter no es un guin (-), para de-
terminar si tambin hay ese fallo.
08
Desarrollo completo
de una aplicacin
e
Funcin del Asistente
Operador del Asistente
394 395 VELAZQUEZ VISUAL
fMid() es la funcin que extrae X caracteres, a partir de una determinada po-
sicin. En este caso extrae del campo NIF, en la ltima posicin (nLenNif)
menos 2 (la ltima es la letra y la penltima debe ser el guin), 1 carcter y
comprueba si es distinto del guin (-).
Esta funcin genera un subproceso, que es donde tendr que ir la lnea si-
guiente.
If -> bOK = 0
Comprueba si la variable local bOK es igual a 0, es decir, que se comprob
que el NIF era errneo. De esta manera podremos aadir un nexo al men-
saje para unir ambos mensajes de error.
Esta funcin genera un subproceso, en el que incluiremos la siguiente lnea.
Set -> szMensaje1, szMensaje1 + y
En esta lnea asignamos a la variable local szMensaje1 el contenido que te-
na anteriormente, ms la conjuncin y. De esta manera componemos el
mensaje: como era incorrecto el NIF y adems hemos comprobado que fal-
ta el guin, uniremos ambos enunciados.
Set -> bOK, 0
Asignamos un 0 a la variable local bOK, ya que, en caso de que no hubiera error
en la introduccin de los nmeros del NIF, hemos detectado que falta el guin.
Esta lnea debe colgar de aquella en la que se comparaba si el penltimo
carcter era o no un guin: if fMid (%NIF%, nLenNif- 2, ,1) ! -. Para ello
nos posicionamos sobre la lnea If -> bOK = 0, que es la lnea que se en-
cuentra en ese subproceso, y pulsamos el botn Aadir lnea (F5). Se
generar una lnea libre en la que incluiremos esta nueva (Set -> bOK, 0).
Set -> szMensaje2, falta guin antes de la letra
Esta lnea tendremos que crearla al mismo nivel que la anterior, para ello nos
posicionamos sobre ella y pulsamos el botn Aadir.
Le asignamos el texto falta guin antes de la letra a la variable local szMen-
saje2, para completar el mensaje.
If -> bOK = 0
Esta lnea ha de ir al nivel de la funcin If fMid (%NIF%, nLenNif- 2, ,1) !
-, as que nos posicionamos sobre ella y pulsamos el botn Aadir.
Comprobamos de nuevo si el valor de la variable local bOK es igual a 0, ya
que en ese caso es que hay error y compondremos ahora el mensaje final
para el usuario. Por tanto las lneas que van a continuacin las incluimos en
el subproceso que genera esta funcin.
e
Aadir lnea
Aadir
Mensaje -> NIF errneo: + szMensaje1 + szMensaje2
Esta funcin muestra un mensaje, que estar compuesto por el texto NIF
errneo, ms el mensaje que habamos incluido en la variable local szMen-
saje1, ms el mensaje incluido en la variable local szMensaje2.
Set retorno proceso = NO
El haber aceptado un campo implica el paso del foco al siguiente. Esta fun-
cin, en este caso, deja el foco en el control de edicin del campo NIF.
Con esto hemos terminado el proceso. Ahora lo asignaremos a la prdida
de foco del formulario de altas y modificaciones de CLIENTES.
En la pestaa Estilos de las propiedades del control para la edicin del cam-
po NIF, tenemos la opcin de activar la casilla Pierde foco y asignar un pro-
ceso a este evento.
08
Desarrollo completo
de una aplicacin
FORMULARIO DE ALTAS / MODIFICACIONES Y VENTANA DE PROPIEDADES DEL CONTROL DE EDICIN DEL NIF
e
396 397 VELAZQUEZ VISUAL
Seleccionamos de la lista de procesos que nos aparece el que hemos crea-
do y que hemos llamado CONTROLANIF.
En ejecucin, al editar el campo y avanzar control, o al aceptar el formulario,
nos lanza el proceso. En caso de error en la letra del NIF nos muestra el men-
saje NIF errneo: no pasa el chequeo. Si falta el guin nos muestra el mensaje
NIF errneo: falta guin antes de la letra y en caso de que haya ambos errores
nos mostrar NIF errneo: no pasa el chequeo y falta guin antes de la letra.
A este ejemplo podramos aadirle o cambiarle las condiciones de error para
ayudar al usuario a localizar mejor el error cuando escribe el NIF. Podramos
aadir una lnea que comprobara cuntas cifras tiene el nmero del NIF y que
sumara al mensaje esa informacin en caso de error. Tambin podemos cam-
biar la situacin de la letra del NIF o aadir una funcin que mire si no est al
final del nmero, al principio de ste, para el caso en el que el NIF puede ser
de una empresa o un particular, etc. Tambin podemos cambiarlo si no que-
remos escribir un guin para separar la letra del nmero eliminando esa com-
probacin o hacindola contraria a la que hemos usado en este ejemplo, o
usar dos campos para guardar el NIF, uno con las cifras y otro con la letra.
Ejemplo: proceso y funcin
Siguiendo con el ejemplo anterior, vamos ahora a ver un ejemplo de cmo
se usan las funciones. Acabamos de hacer un proceso que nos comprueba
ASIGNACIN DEL PROCESO CONTROLANIF A LA PRDIDA DE FOCO
e
e
la correccin del campo NIF, ahora ser una funcin que tendr como pa-
rmetro el NIF que le pasaremos a travs de un proceso. De esta manera
podremos usar la funcin no slo en el formulario de clientes, sino en todas
las tablas donde sea necesario, incluso en otros mapas. Interesa hacernos
con una librera de funciones que podamos aprovechar cuando diseemos
otras aplicaciones; nos ahorrar mucho trabajo.
Vamos a crear una funcin que compruebe la correccin del NIF y un pro-
ceso que la llame.
Seleccionamos el objeto Funcin de la Galera de objetos. Pone-
mos como descripcin, por ejemplo, Control del NIF, y como parmetro nif.
Este parmetro aparecer a lo largo del proceso como una variable local
que contendr el valor que le pasemos como parmetro.
La funcin es igual que el proceso creado antes, slo que en lugar de tra-
bajar con el campo NIF, trabajaremos con la variable local que es el par-
metro que hemos definido. Adems, en caso de encontrar error, retorna el
mensaje al proceso que la llama. Para ello, almacena el mensaje en una va-
riable llamada bRetorno, que retorna con la funcin:
Set retorno funcin -> bRetorno
Salimos pulsando el botn Aceptar (Intro) y escribimos el identificador
de la funcin: CONTROL-NIF.
El NIF deber ser verificado cuando el usuario escriba ste en el formulario
de alta y modificacin del cliente, por lo que crearemos un proceso encar-
gado de llamar a la funcin.
08
Desarrollo completo
de una aplicacin
FUNCIN CONTROL DEL NIF
e
Funcin
Galera de objetos
Aceptar
398 399 VELAZQUEZ VISUAL
Seleccionamos el objeto Proceso de la Galera de Objetos y pone-
mos como Descripcin, por ejemplo: Verificar NIF. El Origen ha de ser ficha,
pues lo lanzaremos al editar el registro de un cliente a travs de un formu-
lario, y la tabla ser CLIENTES. Como Estilo marcaremos Privado, para lan-
zarlo nicamente donde queramos, y que el usuario final no acceda a l.
El proceso es el siguiente:
Set Retorno -> CONTROL-NIF( %NIF% )
Inicializamos la variable local Retorno con la funcin. Para establecer la frmula
pulsamos el botn Asistente y a continuacin, dentro del editor, sobre el botn
Funciones, seleccionando de la lista la funcin que hemos creado. Estamos
alimentando el parmetro nif de la funcin con el contenido del campo NIF.
if -> fCampoVacio( Retorno ) = 0
Segn habamos desarrollado la funcin, sabemos que si la variable local
no contiene nada querr decir que el nif es correcto, si devuelve una cade-
na, no lo es.
Mensaje-> Retorno, Stop
Presenta el mensaje de error retornado por la funcin.
Set retorno proceso = NO
Cancela el avance de campo en el formulario.
Este proceso se asignar a la prdida de foco del formulario de alta y mo-
dificacin de CLIENTES. Para ello editamos el cuadro de propiedades del
formulario, y activamos la casilla de verificacin Pierde foco, seleccionando
entonces este proceso.
Si en el mapa existiese tambin una tabla PROVEEDORES podramos ha-
cer un proceso igual al anterior (con origen ficha de la tabla PROVEEDO-
RES) para controlar el NIF de stos, usando nuevamente la funcin CON-
TROL-NIF( nif ).
Ejemplo Formulario con subproceso
e
e
Proceso
Galera de Objetos
Funciones
En este ejemplo mostraremos cmo se utiliza la funcin de procesos For-
mulario con subproceso. Este tipo de formularios se utilizan para entretener
al usuario cuando se va a realizar un proceso largo. El que vamos a crear
tambin incluye una animacin.
Creamos un mapa con la siguiente estructura de tablas:
Tabla Tipo Tabla de datos padre
CLIENTES Maestro normal con clave numrica
ALBARANES Maestro de segundo nivel CLIENTES
En la tabla ALBARANES aadimos los dos campos siguientes:
Al campo FECHA de la tabla ALBARANES le ponemos por Contenido inicial
la funcin fHoy(). De este modo, al dar de alta un albarn, el control de edi-
cin de la fecha contendr por defecto la fecha actual (la del sistema).
Creamos una rejilla para cada tabla, formularios de altas, bajas y modifica-
ciones y bsquedas por orden alfabtico de todos los clientes y por orden
de fecha de todos los albaranes.
Aadimos botones para acceder a campos enlazados desde los formularios
de altas y modificaciones de ALBARANES.
En el formulario de modificaciones de CLIENTES incluimos una rejilla de
histrico de ALBARANES.
Finalmente, creamos un men, con identificador AUTOEXEC, que es el que
se presentar al ejecutar el mapa.
Aunque en este proyecto vamos a utilizar slo dos tablas simularemos un
proceso de facturacin de albaranes para ver cmo funciona esta funcin
de proceso.
Creacin del formulario:
Queremos realizar un proceso que, partiendo de una lista de albaranes, los
facture todos.
Puesto que para este proceso se ha de recorrer la lista de ALBARANES, se crea-
r un formulario asociado a esta tabla. Para ello seguiremos los pasos siguientes:
De la Galera de objetos seleccionamos el objeto Formulario de edi-
cin de fichas y en su cuadro de propiedades ponemos un nombre (por
08
Desarrollo completo
de una aplicacin
Campo Tipo Longitud (bytes) Contenido inicial
FECHA Fecha - fHoy()
CANTIDAD Numrico 3 -
e
Galera de objetos
Formulario de edicin de fichas
400 401 VELAZQUEZ VISUAL
ejemplo Facturacin de albaranes) y los asociamos a la tabla de datos AL-
BARANES.
Ahora que ya hemos creado el formulario vamos a editarlo.
Este formulario no tiene que llevar los botones de Aceptar y Cancelar, as
que debemos suprimir los que nos aparecen por defecto al crear uno
nuevo.
Aadimos un control Texto esttico, editamos el cuadro de propiedades
y escribimos Facturando los albaranes de:.
Queremos que en el formulario se presente el nombre del cliente del que se
est facturando el albarn, as que aadimos un control de Edicin de
campo y seleccionamos el campo NOMBRE del Cliente (Cliente -> Nom-
bre). A este control, en el cuadro de propiedades, le suprimimos los bordes,
le ponemos como color de fondo el mismo que el del formulario y lo situa-
mos bajo el control creado anteriormente.
PROPIEDADES DEL FORMULARIO
e
Texto esttico
Edicin de campo
Aadimos un control de tipo Animacin, lo situamos en el formulario y
editamos su cuadro de propiedades.
En Origen especificamos Interno, para seleccionar una de las animaciones
que vienen incluidas en Velzquez Visual. stas se encuentran desplegan-
do el combo box bajo el epgrafe Animaciones en stock, de entre las dispo-
nibles hemos escogido Mover.
En cuanto al Estilo de la animacin suprimimos el Borde, seleccionamos la
opcin A nivel y activamos las opciones Centrado y Transparente. Cerramos
entonces el cuadro de propiedades de la animacin.
Redimensionamos el tamao del control, situndolo a continuacin bajo el
que creamos anteriormente y lo centramos horizontalmente en el formula-
rio a travs del botn Centrado horizontal de la barra de maquetacin de
la parte izquierda de la pantalla.
08
Desarrollo completo
de una aplicacin
SELECCIN DEL CAMPO NOMBRE PARA EL CONTROL DE EDICIN
e
Animacin
Centrado horizontal
402 403 VELAZQUEZ VISUAL
Aadimos otro control Texto esttico, editamos su cuadro de propiedades
y como texto escribimos Espere, por favor. Lo situamos bajo la animacin.
Creacin del proceso:
Una vez seleccionado el objeto Proceso de la Galera de objetos, se
abrir la ventana de edicin de procesos. En el parmetro Descripcin es-
cribimos un texto explicativo de lo que realizar el proceso, por ejemplo:
Facturacin de albaranes. El proceso tiene que recorrer la lista de albaranes.
El proceso es el siguiente:
Puesto que este proceso se va a ejecutar desde una lista de ALBARANES,
tendremos que especificar en la parte superior de la ventana de procesos
que el Origen del mismo ser Lista y la Tabla de datos de origen ser AL-
BARANES.
En el apartado Origen de la lnea seleccionada se muestra el origen que ten-
ga la lnea que hayamos seleccionado.
En un proceso real de facturacin de albaranes hay que recorrer la lista de
albaranes: as, por cada albarn de la lista, se ejecuta un Tubo de ficha pa-
ra crear las cabeceras de las facturas, se carga el histrico de las lneas de
albarn y se ejecuta un Tubo de lista para la creacin de las lneas de cada
factura. Para simular este proceso de creacin de facturas y lneas de fac-
turas se ha utilizado la funcin Esperar.
Como podemos ver, la primera funcin del proceso es Recorrer lista solo
lectura, esta opcin no lleva parmetros, porque hemos definido el origen
del proceso en una lista de ALBARANES, as que ste es el origen de esta
primera lnea. Esta funcin genera un subproceso y es en esa lnea de sub-
VENTANA DE PROCESO
e
Texto esttico
Proceso
Galera de objetos
proceso donde incluimos la funcin Esperar. Esta funcin requiere un par-
metro: el nmero de milisegundos durante los que se ha de detener la eje-
cucin del proceso. Especificamos los que queramos, por ejemplo, 2.500
para que no tarde mucho. Incluimos la funcin Esperar donde habra que
crear el proceso de facturacin.
Ejecucin del proyecto:
Al arrancar el proyecto se ejecuta el men tipo formulario que hayamos
identificado AUTOEXEC. En l habramos incluido las distintas opciones
que tenemos.
Damos de alta al menos dos clientes a travs de la opcin Nuevo cliente y
a continuacin damos de alta, al menos, un albarn por cliente, ejecutando
la opcin Nuevo albarn.
Ejecutamos la opcin de bsqueda de albaranes ordenados por fecha (Al-
baranes por fecha) y pulsamos el botn Procesos de la barra de herra-
mientas que se encuentra en la parte inferior de la rejilla. Aparecer un me-
n en el que se muestran los procesos a ejecutar desde una lista de alba-
ranes (en este caso ser uno: el que hemos creado anteriormente (Factura-
cin de albaranes).
08
Desarrollo completo
de una aplicacin
MEN AUTOEXEC
e
Procesos
404 405 VELAZQUEZ VISUAL
Seleccionndolo, veremos cmo se presenta en pantalla el formulario que
habamos incluido en el proceso, con la animacin en marcha e incluyendo
el nombre del cliente del que se estn facturando los albaranes.
En el momento que el proceso pase al siguiente registro de la lista de ALBA-
RANES, en el formulario se mostrar el nombre del cliente correspondiente.
8.5.23. Ejecucin de procesos en primer, segundo
8.5.23. y tercer plano en la arquitectura VRunner
8.5.23. y la arquitectura cliente-servidor
8.5.23. de Velzquez Visual
Veremos ahora los diferentes planos en los que puede ser ejecutado un pro-
ceso en Velzquez Visual:
ALBARANES POR FECHA
VENTANA QUE PRESENTA LA FUNCIN DE PROCESO: FORMULARIO CON SUBPROCESO
e
Primer plano: son lanzados en la parte cliente. Su ejecucin paraliza al
usuario, es decir, debe esperar a que finalice el proceso para seguir traba-
jando con la aplicacin.
Segundo plano (en multitarea): son lanzados en la parte cliente pero su eje-
cucin no paraliza al usuario, es decir, el usuario puede trabajar con la apli-
cacin a la vez.
Tercer plano: son ejecutados en la parte servidora y pueden ser lanzados
desde:
Un proceso en primer plano ejecutado desde la parte cliente.
Un proceso en segundo plano ejecutado desde la parte cliente.
Tambin son procesos en tercer plano los siguientes:
Los que son ejecutados desde Pginas html de Velzquez Visual.
Los ejecutados como tareas programadas en el Servidor de Aplicacio-
nes de Velzquez Visual. Slo podrn dispararse como tarea programa-
da en el Servidor de Aplicaciones de Velzquez Visual aquellos procesos
pblicos que tengan origen Ninguno.
Los demonios.
Veamos ciertas consideraciones a tener en cuenta sobre los procesos a eje-
cutar en tercer plano:
Permiten herencia de retornos, es decir, el proceso que llama a otro here-
dar los retornos lanzados desde el proceso ejecutado en tercer plano (por
ejemplo, las funciones de procesos Imprimir informe o Aadir retorno).
Es posible lanzar un proceso que escriba en disco desde un proceso que
no escriba en disco. En este caso, la transaccin la generar el subproce-
so, siendo generada una por cada vez que ste se ejecuta, y no una nica
transaccin por el proceso principal. Esta caracterstica es til cuando te-
nemos un proceso que realiza numerosas escrituras en disco: si llevamos
estas escrituras en disco a un subproceso, en vez de generar una nica
transaccin en la que si se corta el proceso nos eche atrs gran nmero de
operaciones, genera una por cada ejecucin del subproceso, con lo que si
se corta el proceso principal, solamente echar atrs la ltima transaccin,
correspondiente a la ltima ejecucin del subproceso.
Es posible pasar variables globales desde el proceso de origen al que se
ejecute en el Servidor, y desde ste devolver al proceso principal los nue-
vos valores que tomen las mismas.
Los procesos llamados no pueden tener su origen en una tabla en memo-
ria, pues las tablas en memoria son de carcter local y por tanto su conte-
nido es diferente en cada estacin Cliente y en el Servidor.
08
Desarrollo completo
de una aplicacin
Los procesos en segundo
plano no aaden retornos
(por ejemplo, retornar rejillas
o presentar un informe).
En la versin de
comparticin de ficheros de
Velzquez Visual (ejecucin
con fichero VRunner) slo
pueden ejecutarse procesos
en primer o segundo plano.
Es la arquitectura Cliente-
servidor la que permite
ejecutar procesos en tercer
plano.
ADVERTENCIA
406 407 VELAZQUEZ VISUAL
No heredan cestas de la compra, pues stas tambin son de carcter
local.
8.5.24. Tubos
Los tubos son procesos especializados en transferir informacin de un ori-
gen a un destino.
Estn compuestos por capilares, que sirven para calcular los campos de
destino en base a la informacin de origen.
Los Tubos de Ficha: sirven para crear un nico registro en la tabla de datos
de destino. Pueden usarse desde una ficha o desde un registro de una lis-
ta de la tabla de datos de origen (al seleccionar un registro de una rejilla o
de un rbol visor de tablas arboladas).
Al finalizar el proceso, pueden presentar un formulario de la tabla de datos
de destino con el contenido de sus campos alimentado por los capilares del
tubo. El usuario podr realizar cambios y validar o cancelar el alta del re-
gistro como en cualquier otro formulario.
Con los Tubos de Lista: generamos listas de registros en una tabla de da-
tos en funcin de los registros de otra. Tanto el origen como el destino po-
drn ser cualquiera de las tablas declaradas en el proyecto o una tabla de
datos externa. Adems, es posible crear varios tubos con el mismo origen
/ destino.
Un ejemplo puede ser un tubo de lista cuyo origen sea ARTICULOS y su
destino LINEAS DE ALBARAN de compras. Podemos hacer una bsqueda
de los artculos de un proveedor cuyo stock se encuentre bajo mnimos pa-
ra despus disparar el tubo, que nos crear el albarn de pedido de los ar-
tculos encontrados.
Un tubo de lista es capaz de crear un registro en una tabla de datos maes-
tra de la de destino. Siguiendo con el ejemplo anterior, el tubo sera capaz
de crear una cabecera de albarn de compras.
Tubos de Ficha
En el apartado anterior ya hemos visto cmo trabaja un tubo de ficha, aho-
ra bien, tengamos en cuenta lo siguiente:
Para crear un tubo de ficha pulsamos el botn Nuevo objeto. De la Ga-
lera de Objetos elegimos Tubo de ficha.
En el cuadro de dilogo Propiedades del tubo de ficha declaramos el Nom-
bre, la Tabla de datos de origen, la Tabla de datos de destino, el Formulario
para presentar el nuevo registro y los Capilares del tubo.
Si el formulario de destino
no est especificado dentro
de las propiedades, el tubo
no presentar mensaje de
error, pero no se ejecutar
en caso de que usemos una
funcin de proceso Tubo de
ficha.
ADVERTENCIA
Tubos de Ficha
Nuevo objeto
Para crear un capilar pulsamos el botn Aadir. Aparecer entonces el
cuadro de dilogo Propiedades de un capilar de Tubo de Ficha.
En el cuadro elegimos el Campo destino y establecemos la frmula o ca-
dena de formato (segn el tipo de campo del que se trate) a aplicar al ori-
08
Desarrollo completo
de una aplicacin
VENTANA DE PROPIEDADES DE UN TUBO DE FICHA
PROPIEDADES DE UN CAPILAR DE TUBO DE FICHA
Aadir
408 409 VELAZQUEZ VISUAL
gen, ayudndonos para ello del Asistente para la edicin de frmulas o el
Asistente para la edicin de cadenas de formato, respectivamente. De este
modo podemos alimentar el campo destino con una frmula que involucre
los campos que queramos de la ficha origen.
A la hora de crear los capilares de un tubo de ficha debemos tener en cuen-
ta el orden de los mismos para un correcto traspaso de los datos.
Si el botn Auto est activo es porque entre las tablas de origen y
de destino hay campos coincidentes. Activndolo, Velzquez crear
automticamente los capilares entre dichos campos, alimentando el
campo destino con el contenido de su gemelo origen. Si no lo pulsa-
mos podremos alimentar el destino con la frmula o cadena de forma-
to que queramos.
Tubos de Lista
Para crear un tubo de lista pulsaremos el botn Nuevo objeto, y de la
Galera de Objetos elegiremos Tubo de lista.
Ya sabemos que mediante los tubos de lista generamos registros en una ta-
bla de datos en virtud del contenido de otra tabla. Tanto el origen como el
destino podrn ser cualquiera de las tablas declaradas en el proyecto o una
tabla de datos externa.
En el cuadro de dilogo Propiedades del tubo de lista se declara el Nombre,
el Flujo de la informacin, el Origen, el Destino y los Capilares.
PROPIEDADES DE UN TUBO DE LISTA
Auto
Tubos de Lista
Nuevo objeto
El Origen y el Destino pueden variar dependiendo del flujo. Si el flujo es Im-
portacin, el origen ha de ser una consulta de una base de datos externa.
A este tipo de tubos se les conoce como Tubos de Importacin. Si el flujo
es de Exportacin, el destino ser una tabla de una base de datos externa
a Velzquez Visual. A este tipo de tubos se les conoce como Tubos de Ex-
portacin.
En la tabla de destino, los campos se alimentan en el mismo orden en el que
se han generado los capilares, excepto en los tubos de importacin, en los
que se sigue el orden que tengan los campos en la consulta de la tabla de
datos de origen, independientemente del orden de los capilares del tubo.
Estilos:
Privado: si activamos esta opcin el tubo slo podr dispararse desde don-
de nosotros indiquemos. Si est desactivado, el usuario final podr dispa-
rarlo desde cualquier lista de la tabla de datos de origen del tubo.
No indexar y hacer regen al final: si se trata de un Tubo de importacin, po-
dremos activar o desactivar esta opcin. Reduce enormemente el tiempo
de importacin de datos. Primero realiza la importacin de datos y poste-
riormente regenera los ndices de la tabla de destino. Su uso se aconseja
slo en el caso de que se trate de un programa en el que se deban impor-
tar gran cantidad de datos diariamente. Antes de ejecutar un tubo de im-
portacin con esta opcin activada es aconsejable borrar previamente los
registros de la tabla de datos de destino (la de Velzquez Visual), pues esta
opcin ni comprueba los campos cdigo ni indexa hasta que no se hayan
importado todos los registros.
Usar contenido inicial campos destino: si activamos esta opcin, al gene-
rarse los registros se dispararn los contenidos iniciales definidos en los
campos de la tabla de datos de destino. Es aconsejable, por tanto, no crear
capilares para los campos de la tabla de destino que tengan establecido un
contenido inicial.
Usar cdigo automtico en destino: este estilo slo estar activo cuando se
haya desactivado el estilo anterior (usar contenido inicial campos destino).
En el caso de que la tabla de destino sea maestra, es decir, que tenga de-
finido un campo cdigo y que su contenido inicial sea Siguiente al ltimo,
habr que activar este estilo para que la codificacin de los registros de la
tabla sea automtica. Si este estilo est desactivado y el cdigo se pasa en
un capilar, el registro no ser dado de alta si en la tabla de destino existe al-
gn registro con el mismo cdigo.
Usar actualizaciones en destino: si la tabla de datos de destino tiene defini-
das actualizaciones y activamos esta opcin, al generarse los registros s-
tas sern disparadas, si no, no se realizarn las actualizaciones.
Dar alta?: en los casos de flujo Interno, es decir, cuando el origen y el des-
tino son tablas de Velzquez Visual, es posible hacer un alta de ficha en un
maestro de la tabla destino. Sealando la opcin Dar alta? se activan las
08
Desarrollo completo
de una aplicacin
No utilizar nunca esta opcin
en caso de que la tabla de
destino tenga definido el
contenido del campo cdigo
como Siguiente al ltimo,
pues, al no indexarse los
registros al ejecutar el tubo,
todos los registros
importados quedarn con el
mismo cdigo.
ADVERTENCIA
410 411 VELAZQUEZ VISUAL
listas desplegables Maestro, Formulario y Formulario visualizacin final sali-
da tubo. En la primera se elige la tabla maestra donde queremos realizar el
alta. En la segunda se elige el formulario para el alta. En la tercera se indi-
ca el formulario donde se puede ver el resultado final del tubo.
Pedir?: la casilla de verificacin Pedir? se utiliza para declarar el formula-
rio mediante el cual se puede introducir un valor fijo en uno o en varios cam-
pos de todas las fichas de destino.
Para crear un capilar pulsaremos el botn Aadir, apareciendo el cua-
dro de dilogo donde elegiremos el campo destino y estableceremos la fr-
mula o la cadena de formato (si se trata de un campo alfabtico) que apli-
caremos al origen.
La casilla de verificacin Introducido manualmente se utiliza en combinacin con
la casilla de verificacin Pedir? del cuadro de dilogo de propiedades. Al sea-
lar la casilla de verificacin Introducido manualmente se desactiva el control Fr-
mula origen porque Velzquez Visual entiende que el valor de este campo lo tie-
ne que tomar del formulario declarado junto a la casilla de verificacin Pedir?
A la hora de crear los capilares de un tubo de lista debemos tener en cuen-
ta el orden de los mismos para un correcto traspaso de los datos.
Si el botn Auto est activo es porque entre las tablas de origen y de
destino hay campos coincidentes. Activndolo, el programa crear auto-
mticamente los capilares entre dichos campos, alimentando el campo
destino con el contenido del campo origen.
Si el flujo es de Importacin o de Exportacin, la opcin de dar de alta un
registro en una tabla maestra de la tabla de destino o la opcin de pedir da-
PROPIEDADES DE UN CAPILAR DE TUBO DE LISTA
Aadir
Auto
tos mediante un formulario para introducirlos en los registros dados de alta
en la tabla de destino no estn disponibles.
Ejemplo: Definicin de una Base de datos externa ODBC-DAO para la im-
portacin y exportacin de registros de otras bases de datos
A travs de una Base de datos externa ODBC-DAO podemos importar y ex-
portar registros de otras bases de datos o de ficheros ASCII (aunque, ge-
neralmente, para trabajar con archivos ASCII trabajaremos con funciones
especficas para ellos). Para ello procedemos en primer lugar a vincular en
Access la base de datos con la que queremos intercambiar datos. Una vez
la tenemos vinculada, creamos las consultas necesarias, ya que Velzquez
Visual las necesita para la importacin, aunque para la escritura lo har di-
rectamente sobre las tablas de la base de datos externa.
Creamos un objeto Base de datos externa ODBC-DAO en nuestro proyecto,
y con un Tubo de Lista importamos o exportamos los datos que necesitemos.
Toda importacin de datos hemos de realizarla sobre una tabla en nuestro
proyecto igual que la tabla externa de la que provienen los datos. Para crear-
la seleccionamos la tabla en el objeto Base de datos externa ODBC-DAO y
usamos la opcin de men Objetos/Crear tabla igual a externa, lo que har
que tengamos una nueva tabla en nuestro proyecto con las mismas caracte-
rsticas, los mismos campos, etc., aunque deberemos revisar los tipos de
campos y longitudes para una correcta equivalencia. Despus de importar
los datos en la tabla del proyecto, procederemos con un Tubo de lista inter-
no a dar de alta o a modificar los registros necesarios en otras tablas.
En este ejemplo haremos la importacin y exportacin de datos desde una
hoja de clculo Excel, a travs de una base de datos Access.
Para ello comenzamos vinculando a una base de datos Access el fichero
Excel. Pulsamos la opcin de men Insertar/Tabla, y escogemos de entre
las opciones que se nos presentan: vincular.
08
Desarrollo completo
de una aplicacin
e
412 413 VELAZQUEZ VISUAL
Escogemos el fichero que queremos vincular y pulsamos el botn Vincular.
Como en este caso estamos vinculando una hoja de clculo Excel, nos pe-
dir elegir la hoja del libro que queremos importar.
e
A continuacin nos pregunta si la primera fila contiene la cabecera de las
columnas, que, en nuestro caso, as es.
Por ltimo, nos pregunta el nombre que tendr la tabla vinculada y pulsa-
mos Finalizar tras cumplimentarlo.
08
Desarrollo completo
de una aplicacin
e
414 415 VELAZQUEZ VISUAL
Si vamos a importar datos desde la tabla vinculada hemos de crear las con-
sultas necesarias que lean los campos que vamos a leer. Tambin, debe-
mos recordar que para que Velzquez Visual pueda importar la base de da-
tos externa, sta ha de ser Access97, as que si no es as, debemos con-
vertir la base de datos con la opcin Herramientas/Utilidades de la base de
datos/Convertir base de datos/A una versin anterior de la base de datos de
Access.
Una vez realizado este proceso pasamos a nuestro proyecto y creamos un
objeto Base de datos externa ODBC-DAO.
Pulsando el botn Nuevo objeto, elegimos el pertinente: Base de
datos externa ODBC-DAO y abrimos la base de datos MDB con la que he-
mos enlazado la hoja Excel.
A continuacin Velzquez Visual nos muestra la tabla proveniente de la ho-
ja vinculada y las consultas creadas en la base de datos.
e
Nuevo objeto
Base de datos externa ODBC-
DAO
Aceptamos, y damos un identificador adecuado al objeto Base de datos ex-
terna. Ahora el siguiente paso es crear una tabla en nuestro proyecto igual
a la de la base de datos.
Para ello, seleccionamos la tabla de datos, en este caso Registros, y bien
pulsando con el botn de la derecha del ratn, o bien seleccionando la op-
cin de men Objetos/Crear tabla igual externa, Velzquez Visual nos crea
esta tabla.
Nos preguntar cules queremos que sean los Nombres plural y singular. Si
la tabla es de tipo maestro activamos la opcin Maestro. En ese caso, nos
preguntar tambin cul es el campo cdigo, si tiene un campo nombre (ac-
tivando la opcin Tiene nombre) y si queremos crear los ndices alfabtico
y palabras para el campo nombre.
08
Desarrollo completo
de una aplicacin
BASE DE DATOS EXTERNA
e
416 417 VELAZQUEZ VISUAL
En nuestro ejemplo el nombre plural es Registros, el singular Registro es de
tipo maestro y tiene como campo cdigo CODIGO y como campo nombre
NOMBRE. Adems, crearemos los ndices que nos propone.
Revisaremos los tipos de campos y las longitudes y ya tenemos entonces
la tabla con la que trabajaremos a partir de ahora, y a la que traeremos los
datos. Ahora, crearemos un Tubo de lista con el que realizar la importacin
de datos. Para ello pulsamos el botn Nuevo objeto y escogemos
Tubo de lista.
Este tubo de lista tendr como Flujo Importacin. Adems, como tenemos
campo cdigo, en Estilos hemos desmarcado las opciones de Usar conte-
nido inicial campos destino, y Usar cdigo automtico en destino. Hay que
tener cuidado con estas dos opciones. Nosotros no las usamos porque los
datos ya vienen con un cdigo, pero debemos entonces ser nosotros en-
tonces los que nos aseguremos de que no se repite ninguno. Si algn c-
digo est repetido Velzquez Visual no lo podr determinar.
e
Nuevo objeto
Tubo de lista
Como origen escogemos la consulta de la base de datos externa que he-
mos implementado en nuestro proyecto, y como destino la tabla que hemos
creado igual que la tabla externa. Pulsando el botn Automticos, Ve-
lzquez Visual se encarga de crear los capilares automticamente (ya que
los nombres de los campos son iguales).
Con esto ya tenemos hecho el tubo de importacin, que tendremos que lan-
zar desde una opcin de men en un Men tipo formulario.
08
Desarrollo completo
de una aplicacin
PROPIEDADES DEL TUBO DE LISTA
e
Automticos
418 419 VELAZQUEZ VISUAL
Los datos que importemos sern los que provengan de la hoja Excel o cual-
quier otra base de datos que hayamos vinculado con Access.
Para exportar usaremos otro tubo de lista, en este caso con Flujo Exporta-
cin y que tendr por origen la tabla que queramos y como destino la tabla
Registros vinculada a Access.
Este tubo de lista tendremos que lanzarlo desde un proceso de lista con ori-
gen en la tabla que comparte origen con el mismo.
Esta tabla con sus nuevos datos podr ser usada directamente dentro de
nuestro proyecto, o bien puede ser necesario mover los datos de nuevo pa-
ra que concuerden con la estructura que tiene nuestro proyecto. Esto pue-
de ser porque guardemos la fecha en un formato distinto, tengamos que
convertir S o N en boleanos, la base de datos de origen no tenga tablas
estticas como las nuestras, haya que generar nuevos maestros en funcin
de los datos de origen, etc. Para ello, o bien usamos un tubo de lista de Flu-
jo Interno, o bien un proceso en el que hagamos altas directas a partir de
los datos que leamos en la tabla a la que hemos importado los datos, etc.
Esto podemos realizarlo en el evento de tabla Proceso posterior al alta o en
un proceso que se lance tras la importacin.
Nota: si tenemos un proceso de importacin en el que es necesario que los
datos sean analizados y modificados para que concuerden con la estructu-
ra que tiene nuestro proyecto, y el volumen de informacin es muy grande,
podemos crear un mapa especial que llamaremos de importacin. En este
mapa aadiremos a la tabla que ser destino de la informacin unos cam-
e
pos que luego desecharemos, a los que ir la informacin, y en el evento de
tabla: Proceso anterior al alta haremos los clculos, altas o modificaciones
necesarias. Adems, a este mapa le podremos quitar todos aquellos ndices
que no sean necesarios, aumentando la velocidad en la incorporacin de los
datos. De esta manera, la importacin y el proceso para hacer concordar la
estructura se realiza en un nico paso mucho ms rpido. Una vez realizada
la importacin, volveremos al mapa anterior que tenamos, con lo que se vol-
ver a hacer la indexacin y la reestructuracin de tablas, desapareciendo
aquellos campos y datos intermedios, que ya no son necesarios.
Debemos tener en cuenta que esto nos sirve nicamente para importacio-
nes puntuales. Si la importacin ha de ser a menudo, debemos introducir
sta en la estructura del mapa.
8.5.25. Librera de Funciones DLL
Con las Libreras de Funciones DLL podemos aadir nuevas funciones a
nuestra aplicacin con facilidad. Seleccionamos este objeto en la Galera de
Objetos, con lo que se nos presentar el cuadro de dilogo correspondien-
te. En l, debemos cumplimentar los siguientes parmetros:
Nombre del archivo: nombre identificativo del archivo dll que vamos a utilizar.
Descripcin: descripcin de las funciones que engloba dicha dll.
Estilos:
Borland: activamos este estilo si la dll que va a ser utilizada es de Borland.
08
Desarrollo completo
de una aplicacin
Librera de Funciones DLL
420 421 VELAZQUEZ VISUAL
Privada: si se activa este estilo, la dll no estar disponible para el usuario fi-
nal en el Asistente para la edicin de frmulas al crear frmulas dinmicas.
Una vez especificados todos los parmetros, pasamos a crear las distintas
funciones de dicha dll que van a ser utilizadas. Toda dll tiene un archivo h,
donde se definen las funciones. Para ello pulsamos el botn Aadir,
abrindose la ventana de ingreso de funciones. En sta, debemos cumpli-
mentar los siguientes parmetros:
Retorno: especificacin del tipo de dato de retorno de la funcin.
Convencin: podemos optar entre dos valores posibles: _stdcall:, para Pas-
cal y _cdcl: para C.
Nombre de funcin: especificaremos en este parmetro el nombre de la
funcin.
Privada: si la dll definida es pblica, es posible definir una funcin de la mis-
ma como privada. Si no queremos que un usuario final tenga acceso a la
funcin al definir una frmula dinmica, activaremos esta casilla.
Tipo parmetro: tipo de parmetro que debe ser pasado a la funcin. Para
especificarlo abriremos el combo box y lo seleccionaremos en la lista que
se presenta. Si el tipo de parmetro que tiene no coincide con los de la lis-
ta deber buscar en la lista uno compatible.
VENTANA DE PROPIEDADES DE UNA FUNCIN DLL
Aadir
Nombre del parmetro (opcional): especificaremos aqu el nombre que ser
presentado en el Asistente para la edicin de frmulas para indicar cul es
el parmetro.
Observaciones: el texto que escribamos en este parmetro ser presenta-
do junto con la funcin en el Asistente para la edicin de frmulas.
Ejemplo: Librera de funciones runtime de Visual C++
Para ver cmo funciona usaremos la librera msvcrt.dll, runtime de Visual
C++ utilizado por Velzquez Visual. Dentro del archivo h de la librera de C
msvcrt.dll, entre otras, encontramos la funcin que calcula el seno de un
nmero; en el fichero h viene especificada de la forma siguiente:
_CRTIMP double __cdecl sin( double ) ;
En base a esto vamos a generar en el proyecto de Velzquez Visual esta
funcin.
Seleccionamos de la Galera de Objetos un nuevo objeto Librera de Fun-
ciones DLL, cumplimentando las propiedades del objeto:
Ahora vamos a ir aadiendo las funciones. Para ello pulsamos el botn
Aadir de la barra de botones de esta ventana. Se presentar el cuadro de
dilogo de las funciones, en el que debemos completar los siguientes pa-
rmetros:
08
Desarrollo completo
de una aplicacin
e
Aadir
422 423 VELAZQUEZ VISUAL
Retorno: ste ser double. Para especificarlo debemos abrir el combo box
y seleccionarlo en la lista que se presenta.
Convencin: en este ejemplo la dll es de C++, as que la convencin ser
_cdecl:
Nombre de funcin: ser sin.
Privada: si no queremos que el usuario final tenga acceso a la funcin al de-
finir una frmula dinmica, activaremos esta casilla.
Tipo parmetro: double.
Nombre del parmetro (opcional): para este ejemplo le daremos el nombre
dAngulo.
Observaciones: en este caso, puesto que el resultado es en radianes, es-
cribiremos: Angulo en radianes.
Ya tenemos definida una funcin de una dll externa que podr ser atacada
desde el proyecto de Velzquez.
Ejemplo
Imaginemos que en una tabla queremos que, en funcin de un valor que el
usuario escriba en un campo llamado DATO, otro campo devuelva su seno.
e
e
Crearemos en la tabla el campo SENO, de tipo Frmula numrica. Para espe-
cificar la frmula abriremos el asistente para la edicin de frmulas y pulsa-
mos el botn Funciones de DLL. Se presentar el Asistente de funciones
DLL con todas las Funciones DLL que hayan sido creadas en el proyecto.
En este caso seleccionaremos la funcin Sin.
Una vez seleccionada aparecer la frmula siguiente:
MSVCRT.Sin( dAngulo )
Solamente nos queda sustituir el texto dAngulo por el campo que queremos
pasar como parmetro, en este caso DATO; con lo que la frmula quedara:
MSVCRT.Sin( %DATO% )
Resumen
Velzquez Visual cuenta con una serie de objetos que permiten aumentar la
funcionalidad de una aplicacin por medio de instrucciones de proceso:
son los procesos, los demonios, las funciones, los tubos de lista y de ficha
y las libreras de funciones DLL.
Los procesos son objetos definidos por el diseador del proyecto, en-
cargados de realizar operaciones especiales que Velzquez Visual no hace
de forma automtica.
Para cada proceso debe especificarse un origen, que puede ser una ficha o
una lista de registros provenientes de una tabla de datos del proyecto, o
ninguno.
08
Desarrollo completo
de una aplicacin
e
Funciones de DLL
Procesos
424 425 VELAZQUEZ VISUAL
A continuacin, aadimos de forma visual las lneas de instrucciones.
Cada lnea de proceso ejecuta una funcin de proceso de la capa alta
de funciones de Velzquez Visual dependiendo de los parmetros que
pasemos.
Los procesos pueden ser en primer plano, si son ejecutados en la parte
cliente. Su ejecucin paraliza al usuario. En Segundo plano (multitarea), eje-
cutados en la parte cliente. Su ejecucin no paraliza al usuario. En Tercer
plano si son ejecutados en la parte servidora.
Los demonios son procesos nicamente vlidos para la versin cliente-
servidor. stos se ejecutan de forma continua cada x milisegundos, mien-
tras la aplicacin est siendo ejecutada en el servidor de aplicaciones.
Las funciones son procesos ejecutables slo en primer plano (en sus
propiedades no se permite activar Multitarea) y a los que podemos pasar
parmetros. El origen de estos procesos siempre es Ninguno.
Las funciones de proceso pueden ser funciones propias de lista, funciones
propias de ficha o funciones comunes de ficha y de lista. Dependiendo del
origen que tenga el proceso podremos usarlas o no. Tambin hay funciones
especficas para Procesos, Demonios o Funciones.
Velzquez Visual agrupa las funciones de procesos segn su tipo: bsicas,
de arrays, retornos, internet, listas, ficheros y directorios, varios, etc.
Los tubos son procesos especializados en transferir informacin de un ori-
gen a un destino. Estn compuestos por capilares, que calculan los cam-
pos de destino en base a la informacin de origen. Los Tubos de Ficha
crean un nico registro en la tabla de datos de destino, mientras que los Tu-
bos de Lista generan listas de registros en una tabla de datos en fun-
cin de los registros de otra. Los tubos siempre dan de alta registros, nun-
ca modifican fichas.
Gracias a las Libreras de Funciones DLL podemos aadir nuevas fun-
ciones a nuestra aplicacin.
8.5.26. Directorio de Tablas
Al ejecutar un proyecto por primera vez, las tablas de datos son creadas en
el directorio de la aplicacin. Ahora bien, podemos redirigir a un directorio
distinto al de nuestra aplicacin las tablas declaradas en nuestro proyecto
con sus datos, para lo cual hemos de usar el objeto Directorio de Tablas.
Con este objeto tambin tenemos la posibilidad de que una o varias tablas
de datos sean compartidas entre distintas aplicaciones.
En ningn momento en el Editor deber especificarse la senda real del di-
rectorio, sino que se crear un directorio lgico que ser resuelto de forma
externa al Editor. Tiene un funcionamiento parecido al de la Impresora L-
gica; ms adelante explicaremos cmo se hace.
Demonios
Funciones
Tubos de Ficha
Tubos de Lista
Libreras de Funciones DLL
Directorio de Tablas
Al seleccionar un objeto de este tipo en la Galera de Objetos se presenta
un cuadro de dilogo en el que deberemos especificar:
Nombre: descripcin del directorio. No se trata de que indiquemos la ubi-
cacin fsica del mismo, sino de darle un nombre comprensible para que al
seleccionarlo sepamos a qu directorio nos referimos. La ubicacin fsica la
haremos posteriormente.
A continuacin, aadimos la tabla o tablas que van a estar ubicadas en el
mismo. Para aadir una tabla pulsamos el botn Aadir de la barra de
herramientas de este cuadro de propiedades. Se presentar una lista con
las tablas del mapa que no tengan asignado ningn directorio y cuya per-
sistencia sea en disco. Seleccionamos aquellas que queramos incluir y si
queremos aadir ms tablas posteriormente podemos repetir esta misma
operacin tantas veces como sea necesario.
08
Desarrollo completo
de una aplicacin
VENTANA DE PROPIEDADES DEL DIRECTORIO DE TABLAS
Aadir
426 427 VELAZQUEZ VISUAL
Para borrar una tabla de la lista de tablas de un directorio la seleccionamos
y pulsamos el botn Suprimir. Esta accin no borrar la tabla del mapa,
sino que la quitar de la lista de tablas de ese directorio, por lo que ser
creada en el directorio de la aplicacin.
Una vez creado, el directorio aparecer en el panel izquierdo del Editor. Po-
demos cambiar su identificador pulsando el botn F2 y escribiendo el iden-
tificador que mejor nos parezca.
Otra forma de asignar una tabla a un directorio es a travs de las propieda-
des de la propia tabla, donde podemos seleccionar un objeto Directorio de
tablas que hayamos creado antes en el mapa, o el directorio por defecto de
la aplicacin llamado .el de la aplicacin (que es el que el sistema asigna por
defecto a las tablas que son creadas en el mapa).
Suprimir
Una vez que en las propiedades de la tabla cambiamos el Directorio, sta
se quita del objeto Directorio de Tablas al que estaba asignada y se aade
al que seleccionemos. Si ste es .el de la aplicacin no se aade a ningn
objeto Directorio de tablas, ya que sta es la opcin por defecto para toda
nueva tabla y no necesita un Directorio de Tablas.
En lo que al Editor de proyectos se refiere, ya est hecha la redireccin.
Ahora veremos cmo se hace efectiva en ejecucin.
La asociacin de cada objeto Directorio de tablas creado en una aplicacin a
un directorio fsico se llevar a cabo creando un fichero ASCII con el mismo
identificador que el mapa y con extensin VRT (Velzquez Redireccionador
de Tablas). Dicho fichero tenemos que guardarlo en el mismo directorio que
el mapa. En cada lnea del archivo escribiremos a qu directorio del disco co-
rresponden los directorios lgicos del Directorio de Tablas. Podremos aadir
tantas lneas al archivo como Directorios de Tablas tengamos que definir.
El nombre del fichero tiene que ser del tipo IDENTIFICADOR.VRT, donde
IDENTIFICADOR es el identificador del mapa y .VRT la extensin corres-
pondiente a archivos redireccionadores.
Las lneas del fichero tendrn la estructura IDENTIFICADOR-DIRECTO-
RIO=SENDA, donde IDENTIFICADOR-DIRECTORIO es el identificador del
objeto Directorio de Tablas, y SENDA el directorio que queremos asignar a
ste en el disco, y en el que se guardar la tabla.
Si realizamos una modificacin del archivo VRT despus de haber ejecuta-
do la aplicacin, es decir, las tablas han sido ya creadas, debemos ser no-
08
Desarrollo completo
de una aplicacin
428 429 VELAZQUEZ VISUAL
sotros los que creemos los nuevos directorios a usar y movamos los fiche-
ros de tablas (datos, ndices y contenedores) a las nuevas carpetas que he-
mos definido en el archivo VRT. En caso de no hacerlo, se crearan de nue-
vo las tablas, con la distorsin de la base de datos que ello podra crear: la
nueva tabla no tendra registros y las tablas que apuntaban a sta sus re-
gistros apuntarn a registros inexistentes.
Ejemplo: Redireccionamiento de tablas
Tenemos un mapa de gestin (gestion.map) y un mapa de contabilidad
(conta.map). El mapa de gestin est enlazado con el de contabilidad, es
decir, la gestin comparte tablas con el mapa de contabilidad, estando am-
bos mapas en dos directorios diferentes.
En el mapa de gestin se ha creado un directorio de tablas, al que hemos
asignado las tablas compartidas con el mapa de contabilidad y ha sido lla-
mado CONTA.
Los mapas estn ubicados en los directorios siguientes:
Gestin: c:\atica\gestion\gestion.map
Contabilidad: c:\atica\contabilidad\conta.map
Tendremos que crear en c:\atica\gestion un fichero ASCII con el nombre
gestion.vrt con el contenido siguiente:
CONTA=c:\atica\contabilidad
Donde CONTA es el identificador del objeto Directorio de Tablas y c:\ati-
ca\contabilidad\ el directorio fsico donde ir la tabla.
Al ejecutar la contabilidad, el programa buscar las tablas en el directorio
del mapa; al ejecutar la gestin ir a buscar las tablas compartidas con la
contabilidad al directorio c:\atica\contabilidad.
Ejemplo: aplicacin con varios Directorios de tablas
Si en un mapa hemos creado varios Directorios de tablas diferentes, stos
debern ser creados en un nico fichero .VRT.
e
e
GESTION=c:\empresa\gestion
CONTABILIDAD=c:\empresa\contabilidad
COMUN=c:\empresa
Si queremos modificar la redireccin de tablas de una aplicacin que ya es-
t en funcionamiento debemos hacerlo cuando no haya usuarios ejecutn-
dola, pues no entrar en vigor hasta que se ejecute el mapa de nuevo
(VRunner) o sea reiniciado (servidor de aplicaciones). Cuando hagamos es-
to debemos mover al directorio especificado la tabla o tablas (archivos
.DAT), ndices (archivos .IDX), contenedor (archivos .CND) e ndices del con-
tenedor (archivos .CNI) correspondientes, ya que si no, generar unos nue-
vos que estarn vacos, con la consiguiente distorsin de la base de datos.
Resumen
El objeto Directorios de Tablas permite redirigir una o varias tablas de-
claradas en el proyecto a un directorio diferente al de la aplicacin y que va-
rias aplicaciones puedan compartir ciertas tablas.
08
Desarrollo completo
de una aplicacin
El fichero donde guardamos
la resolucin de los
directorios de tablas
debemos crearlo antes de
ejecutar la aplicacin. No
podemos generarlo desde la
misma aplicacin, pues al
ejecutarla (VRunner) o abrirla
(en el servidor) es cuando se
inicializan las tablas, y si no
existen los directorios, las
crear todas en el mismo
directorio del mapa.
Podramos crear un mapa
especfico para automatizar
el proceso de creacin de
dicho archivo.
Trabajando con VRunner la
comparticin de tablas
funciona si en un mismo
ejecutor abrimos varias
aplicaciones que compartan
tablas. Ahora bien, como
VRunner es monopuesto las
tablas no podrn ser
compartidas si tratamos de
abrir cada aplicacin con un
ejecutor distinto.
ADVERTENCIA
e
Directorios de Tablas
09
Ejecutar
una aplicacin
9.1 Cmo ejecutar un proyecto
Hay dos formas de ejecutar un proyecto:
Desde el editor de proyectos: todo proyecto puede ser ejecutado desde el
editor de proyectos EdMap32. Para ello disponemos de una opcin en el
men Archivo / Ejecutar. Tambin podemos ejecutarlo mediante el botn
(o F5) situado en la barra de herramientas.
Desde la lnea de comandos: para una ejecucin directa de la aplicacin, es
recomendable crear un acceso directo en el escritorio de Windows e intro-
ducir en la Lnea de comandos el nombre del ejecutor (VRunner.exe) y, co-
mo primer parmetro, el nombre del archivo que contiene el proyecto que
queremos ejecutar.
Veremos ahora cmo funciona el ejecutor y cmo usar los distintos objetos
visuales que hemos diseado en el editor de proyectos. Tambin veremos
las opciones que nos dan las rejillas, formularios, botones, etc., que hemos
diseado.
En el Servidor de Velzquez Visual hemos de abrir la aplicacin o reiniciar-
la en el caso de haber hecho alguna modificacin desde que la abrimos.
9.2
Inicio de una aplicacin, clave
y nombre de usuario
Antes de iniciar una aplicacin Velzquez Visual pide un nombre de usuario
y una clave, si as est especificado en el proyecto. Para especificarlo, en
las Propiedades del proyecto tiene que estar marcada la opcin de
Usuarios: Pedir usuario en la pestaa de Estilos.
09 Ejecutar una aplicacin
Propiedades del proyecto
434 435 VELAZQUEZ VISUAL
Cuando el proyecto es ejecutado por primera vez, el primer usuario regis-
trado es dado de alta por el sistema como Supervisor, dndole todos los
privilegios.
En la ventana que nos aparece debemos rellenar un Nombre del Usuario.
De momento no hemos de escribir la Palabra clave.
Recordemos que, para cambiar la imagen que aparece como icono, hemos
de crear un objeto Dibujo que convertiremos en Icono de usuarios en el
Editor de Proyectos con la opcin de men Comunes/Convertir en/Icono
usuarios.
Tambin podemos renombrar un dibujo y ponerle como identificador ON-
PASSWORD.
PESTAA ESTILOS DE LA VENTANA DE PROPIEDADES DEL PROYECTO
VENTANA DE USUARIO Y CLAVE AL INICIAR UNA APLICACIN
9.3 El men del usuario y sus opciones
Despus de ser registrados los datos del usuario e inicializadas las tablas
de datos, se presenta el men que hubiramos asignado al usuario como
men inicial. Si no tiene ninguno asignado, Velzquez Visual le presentar el
men AUTOEXEC. En el caso de que no existiese tampoco un men AU-
TOEXEC, el programa compondr automticamente un men con tres car-
petas:
Tablas: rejilla de tabla de datos completa de cada tabla.
Bsquedas: bsquedas definidas en el mapa para cada tabla.
Mens: definidos en el mapa.
En el caso de un men arbolado, para abrir una subcarpeta de men debe-
mos pulsar el botn situado a la izquierda de la carpeta, y para selec-
cionar una opcin del men haremos doble clic sobre la misma. Para cerrar
una carpeta haremos clic sobre el botn situado a su izquierda.
En el caso de que el men sea un men tipo formulario, basta con hacer clic
sobre una de las opciones del mismo.
09 Ejecutar una aplicacin
Abrir rama
Cerrar rama
436 437 VELAZQUEZ VISUAL
Si incluimos en un men de tipo formulario una o varias rejillas, podremos
imprimir el informe asociado a la rejilla activa (si es que lo tiene) pulsando
sobre el botn correspondiente de la barra de herramientas.
En el caso de que lo tengamos activo en el men, cada una de las opcio-
nes a las que nos permita acceder la aplicacin se abrir en un separador
del ejecutor, que puede ser el mismo en el que estamos (por ejemplo, en los
casos de mens con dos balas) o un separador nuevo. Muchas de las fun-
ciones que incorpora el ejecutor de Velzquez Visual por defecto nos abri-
rn nuevos separadores con los resultados de aplicarlas.
9.4
Qu opciones nos dan la Rejilla,
el Formulario y los Visores de Tablas
Arboladas
La rejilla nos permite visualizar una lista de registros de una tabla de datos.
En ella podemos modificar los tamaos de las columnas o de las cabece-
PESTAAS DE LOS SEPARADORES DEL EJECUTOR
ras, as como reordenar la lista de registros haciendo clic sobre la cabece-
ra de una columna. Para que esto sea as debe estar activado en las pro-
piedades de la rejilla. El formulario nos permite dar de alta, modificar o dar
de baja un registro de una tabla de datos. En un formulario pueden apare-
cer listas (rejillas de histricos), botones, cuadros de edicin, etc.
9.4.1. Formas de llamar a una rejilla
Una rejilla puede ser llamada desde los siguientes puntos:
Una opcin de men: normalmente ser llamada por una bsqueda, cuyo
resultado (es decir, los registros encontrados) se visualizar en una rejilla.
Desde un formulario: en los formularios se permite pegar una o ms rejillas.
En ellas se presentan registros histricos de la ficha en curso, subhistricos
o datos de cualquier otra tabla, segn el control que usemos. A su vez, es-
tas rejillas podrn disparar ms formularios de altas, modificaciones y ba-
jas, y as sucesivamente si los formularios llamados incluyen en su interior
nuevas rejillas.
Desde un proceso: tambin pueden aparecer rejillas como resultado de un
proceso, por ejemplo, cuando usamos la funcin de proceso Aadir retor-
no en una lnea cuyo origen sea una lista.
Men tipo formulario, informe, localizador, etc.
9.4.2. Formas de llamar a un formulario
Un formulario puede llamarse desde los siguientes puntos:
Una opcin de men: los mens pueden llamar a un formulario de altas, es
decir, un formulario que recoge los datos para dar de alta un nuevo registro.
Una rejilla: una rejilla puede disparar tres tipos de formularios: de altas, de
modificaciones y de bajas.
09 Ejecutar una aplicacin
438 439 VELAZQUEZ VISUAL
Para llamar al formulario de altas hemos de asegurarnos de que la rejilla ten-
ga el foco (en caso contrario pulsaremos con el ratn sobre la rejilla), a con-
tinuacin pulsamos el botn derecho del ratn y del men de contexto se-
leccionamos la opcin Formulario Alta. Esto es comn tanto para rejillas
editables como para rejillas no editables.
Desde una rejilla no editable tambin podemos llamarlo pulsando la tecla +
del teclado numrico. Tambin podemos llamar a un formulario de alta ha-
ciendo doble clic sobre una lnea vaca de la rejilla.
Desde una rejilla editable podemos llamarlo pulsando las teclas Ctrl+N.
Para llamar a un formulario de modificaciones (editar una ficha), pulsaremos
el botn derecho del ratn y, del men de contexto seleccionamos la op-
cin Formulario Modificacin.
Desde una rejilla no editable bastar con hacer doble clic con el puntero del
ratn sobre el registro a editar o pulsar la barra espaciadora.
Desde una rejilla editable podremos llamarlo mediante la combinacin de
las teclas Ctrl+E.
Para llamar a un formulario de bajas, es decir, para eliminar un registro, se-
leccionaremos el elemento deseado y pulsaremos la tecla Supr.
Estas opciones aparecen en un men de contexto que se activa pulsando
el botn derecho del ratn sobre el rea de la rejilla. Tambin podemos uti-
lizar el men Ficha que aparece en la barra de mens cuando una rejilla es-
t activa.
Un proceso: con aadir retorno desde una lnea con origen ficha, con for-
mulario de alta de maestro, pedir formulario, etc.
Un botn: los botones pueden abrir subformularios de la ficha actual. Por
ejemplo, en la presentacin de subfichas para ampliar informacin de la fi-
cha en curso.
Cuando demos de alta una ficha de una rejilla de histrico utilizada como
segunda bala de un men, Velzquez Visual nos inducir automticamente
el maestro de la ficha seleccionada en la primera bala.
9.4.3. Eliminacin temporal de un elemento
9.4.3. en una rejilla
Podemos eliminar temporalmente un elemento de una rejilla sin que real-
mente sea borrado de la tabla de datos. Para ello disponemos de una op-
cin en el men de contexto que se activa pulsando el botn derecho del
ratn, cuando el puntero se encuentra situado sobre la rejilla. La opcin del
men se denomina Quitar de la lista el seleccionado.
Si quitamos una ficha de una lista podremos deshacer la operacin ejecu-
tando la opcin Deshacer, y si queremos rehacer dicha operacin, ejecuta-
remos la opcin Rehacer del men de contexto que se presenta al pulsar el
botn derecho del ratn sobre la rejilla.
9.4.4. Invertir el orden de una lista dentro
9.4.4. de una rejilla
Podemos hacer que se invierta el orden en que estn colocados los regis-
tros visualizados en una rejilla. Para ello disponemos de una opcin en el
men de contexto que se activa pulsando el botn derecho del ratn cuan-
do el puntero se encuentra situado sobre la rejilla. La opcin del men se
denomina Invertir el orden de la lista. Si ejecutamos este comando sobre
una lista podremos deshacerlo ejecutando la opcin Deshacer del men de
contexto. Si queremos rehacer el comando ejecutaremos la opcin Rehacer
del men de contexto.
09 Ejecutar una aplicacin
440 441 VELAZQUEZ VISUAL
9.4.5. Seleccin mltiple de registros en una rejilla
9.4.5. (Multiseleccin)
Podemos realizar una seleccin de varios registros de una rejilla. Para ello,
la rejilla debe tener activada en el editor la opcin Multiseleccin. En la reji-
lla slo tenemos que hacer clic con el botn izquierdo del ratn sobre el bo-
tn que aparece en la parte izquierda de sta a la altura de cada fila. Tam-
bin podremos seleccionar un registro mediante la combinacin de las te-
clas: Alt+Intro o Alt+Barra espaciadora.
Los registros seleccionados se vern marcados de diferente forma depen-
diendo del estilo que hayamos escogido al configurar la rejilla en el editor.
Podemos ver un botn, una marca de verificacin o un dibujo que hayamos
definido nosotros.
Con los registros seleccionados podremos lanzar procesos que hayamos
creado. Por ejemplo, de una lista de albaranes podemos facturar slo los
seleccionados.
Para marcar o desmarcar un bloque de registros usaremos la tecla Shift y
clic con el botn izquierdo del ratn en la primera lnea del bloque. Repeti-
remos la operacin en la ltima lnea del bloque. Si el bloque est marcado,
esta operacin lo desmarca.
Para marcar o desmarcar todos los registros pulsaremos con el botn iz-
quierdo del ratn en la cabecera de la columna de multiseleccin.
Para invertir la multiseleccin en una rejilla (los seleccionados pasan a ser
los que no lo estaban) tenemos dos maneras:
Pulsaremos la tecla Ctrl y haremos clic con el botn izquierdo del ratn en
la cabecera de la columna de multiseleccin.
Haremos clic con el botn derecho del ratn sobre la cabecera de la co-
lumna de multiseleccin para abrir el men contextual y seleccionar en l la
opcin Invertir.
Para activar o desactivar la seleccin de un registro podemos hacerlo a
travs del teclado con las combinaciones de teclas Alt+ Intro o Alt+Es-
pacio.
09 Ejecutar una aplicacin
442 443 VELAZQUEZ VISUAL
9.4.6. Edicin directa de rejillas
Se trata de rejillas en las que podemos escribir directamente sobre las cel-
das tanto para dar de alta como para modificar registros. Esto ahorrar mu-
cho tiempo al usuario final a la hora de introducir datos.
Para dar de alta un nuevo registro pulsamos la tecla + del teclado numri-
co y para modificar una lnea pulsaremos la barra espaciadora estando se-
leccionado el registro a editar; en ambos casos la celda correspondiente a
la primera columna editable se marcar con el cursor parpadeante.
Para aceptar un alta o una modificacin basta con pulsar la tecla Intro. Si
queremos cancelar un alta o una modificacin, pulsamos la tecla Escape.
Para borrar un registro, pulsamos la tecla Supr.
Para insertar en un campo el mismo contenido que el del registro anterior
utilizaremos la combinacin de las teclas Ctrl y + (del teclado numrico).
Para pasar a la celda siguiente basta con que pulsemos el tabulador. Al pul-
sar ste sobre la ltima celda editable de una fila, si estamos dando un al-
ta, se grabar el registro y saltar automticamente a la lnea siguiente pa-
ra que podamos seguir dando altas; en una modificacin, aceptar las mo-
dificaciones realizadas sobre el registro.
Para pasar a la celda anterior pulsaremos las teclas Shift+Tabulador.
Para movernos entre filas utilizaremos las teclas de movimiento del cursor
arriba y abajo. Sobre una lnea que estemos editando, si pulsamos cursor
arriba o abajo se aceptarn los cambios de la lnea y pasaremos a editar la
lnea anterior o siguiente, respectivamente.
En aquellas columnas que contienen campos enlazados a maestros, al igual
que en los formularios, no podremos escribir directamente su contenido, si-
no que tendremos que cogerlo de la tabla enlazada.
Si queremos lanzar un localizador para localizar un registro maestro debemos
definirlo en las propiedades de la columna que aparecen cuando hemos se-
leccionado la edicin directa de rejillas. Para usarlo en ejecucin, pulsamos
las teclas Ctrl+L, y mediante las teclas Alt+Cursor arriba/Abajo recorreremos
la lista maestra en orden ascendente/descendente, alfabticamente (si es un
campo Alfabtico) o en orden numrico (si es Numrico) con cada pulsacin.
Si queremos dar un alta de un registro maestro desde un campo enlazado
pulsaremos las teclas Ctrl+N, mientras que para editar la ficha maestra pul-
saremos las teclas Ctrl+E. Estos formularios tenemos tambin que haberlos
definido en las propiedades de la columna.
9.4.7. Exportacin Ascii
Sobre cualquier rejilla resultado de una bsqueda es posible ejecutar una
exportacin de los registros de la misma a un fichero Ascii si tenemos un ni-
vel de privilegio como usuario mayor o igual que 90. Para ello debemos eje-
cutar la opcin del men Lista/Exportar Ascii.
Se abre entonces un cuadro de dilogo con el que podremos configurar la
exportacin de los datos que estn en la rejilla en ese momento.
Los botones de la barra de herramientas de esta ventana ejecutan las si-
guientes operaciones:
Seleccionar un campo: se abrir una ventana con la lista de campos; se-
leccionaremos el que queramos incluir en la exportacin.
Frmula: se abrir el Asistente para la edicin de frmulas con el que po-
dremos exportar una operacin entre varios campos.
Eliminar columna: elimina la columna seleccionada en la lista.
Subir uno: mover una posicin hacia arriba el elemento seleccionado en
la lista.
Bajar uno: mover una posicin hacia abajo el elemento seleccionado en
la lista.
Modificar: nos permite cambiar el campo seleccionado en la lista.
09 Ejecutar una aplicacin
Seleccionar un campo
Frmula
Eliminar columna
Subir uno
Bajar uno
Modificar
444 445 VELAZQUEZ VISUAL
Abrir configuracin: si ya hemos definido alguna exportacin, sta puede
ser almacenada en disco; ejecutaremos esta opcin cuando queramos abrirla.
Guardar configuracin: nos permite guardar en disco el fichero de ex-
portacin creado para poder utilizarlo con posterioridad.
Las opciones de exportacin disponibles son:
Formato de archivo: ASCII delimitado o de ancho fijo.
Delimitador de campo: si lo que vamos a generar es un fichero ASCII delimita-
do, seleccionaremos qu carcter ser utilizado como delimitador de campos.
Cualificador de texto: en caso de crear un fichero ASCII delimitado, selec-
cionaremos el carcter que se utilizar para entrecomillar los textos.
Aadir primera lnea ttulos: si activamos esta opcin en el fichero de texto
se generar una primera lnea con los ttulos de los campos a exportar.
Archivo de destino: seleccionaremos la carpeta donde se generar y el
nombre del archivo de texto.
9.4.8. La Cesta de la Compra
Esta opcin nos da la oportunidad de incluir en una lista cualquier elemen-
to de la rejilla que tengamos activa para su posterior utilizacin en otros lu-
gares del programa. Por ejemplo, en un programa de gestin de libreras se
puede tener una cesta para las novedades, otra para los libros pendientes
de servir, etc. Si tenemos una cesta de libros, sta podr ser actualizada o
se podrn extraer registros de la misma desde cualquier rejilla de Libros.
El contenido de las cestas tiene persistencia en memoria, por lo que ser
nico en cada mquina que las use, y se borrar cuando se cierre el pro-
grama. As, al ejecutarlo de nuevo, estarn todas vacas.
Introducir datos en la cesta de la compra
Podemos guardar registros de una rejilla en la Cesta de la Compra de dos
maneras:
Pulsando la tecla F2: nos permitir ir guardando uno a uno los registros que
queramos de la rejilla. Para ello slo hay que marcar un registro y pulsar di-
cha tecla. Sonar un pitido cuando ste es guardado en la cesta. Si esto no
ocurriese puede deberse a que dicho registro ya se encuentre en la cesta o
a que no hayamos definido ninguna cesta para esa tabla de datos.
Pulsando las teclas Shift+F2: as incluimos todos los registros de la lista en
la cesta.
Cuando pulsamos sobre la rejilla con el botn derecho del ratn aparece un
men que, entre otras opciones, incluye las de la Cesta. stas son:
Abrir configuracin
Guardar configuracin
Anotar en cesta: Elemento seleccionado: guarda en la cesta el registro so-
bre el cual pulsamos con el botn derecho del ratn.
Anotar en cesta: Todos: se guardarn en la cesta todos los registros de la
rejilla.
En una cesta podremos incluir todos los registros que queramos de
cualquier rejilla de una misma tabla de datos. Si se aade un registro a
una cesta y sta ya lo contena, no se incluir. As se evita duplicar in-
formacin.
09 Ejecutar una aplicacin
446 447 VELAZQUEZ VISUAL
En la parte superior izquierda de la ventana de la Cesta de la compra, bajo
el epgrafe Cesta, se muestra un combo box en el que se especifica la ces-
ta activa en ese momento. Si hemos definido ms de una cesta para una
misma tabla de datos, haciendo clic en la flecha de dicho combo aparece-
rn todas las existentes para dicha tabla. Podremos anotar los registros ele-
gidos en cada una de ellas, dependiendo de su definicin.
Por ejemplo, en un programa de gestin de libreras podemos crear dos
cestas para la tabla de libros: una para incluir los que estn pendientes y
otra para incluir las novedades. En cada una de ellas el usuario podr incluir
los libros que desee. Cada una de las cestas creadas para una misma tabla
son independientes.
Podremos aadir datos a la Cesta tantas veces como queramos, desde dis-
tintos puntos del programa donde se visualice una rejilla de la misma tabla
de datos.
Coger datos de la Cesta de la Compra
Para extraer registros de la cesta de la compra debemos estar en la rejilla
sobre la que queramos volcarlos. Dicha rejilla debe pertenecer a la misma
tabla de datos que la cesta. Para traer los registros tenemos que hacer clic
con el botn derecho del ratn sobre ella o bien pulsar las teclas Ctrl+F2.
Aparecer de nuevo el men en el que, adems de las anteriores, se inclu-
yen las opciones de trada de datos de la cesta. stas son:
Abrir la cesta: pulsando esta opcin podremos ver el contenido de la cesta.
Traer cesta completa: vuelca todo el contenido de la cesta en la lista. Si eje-
cutamos este comando sobre una lista podremos deshacerlo, ejecutando la
opcin Deshacer, del men de contexto que se presenta al pulsar el botn
CESTA DE LA COMPRA
derecho del ratn sobre la rejilla. Si queremos rehacer el comando ejecuta-
do sobre una lista ejecutaremos la opcin Rehacer del mismo men de con-
texto.
Si un registro de los que se extrae de la Cesta de la compra a la nueva lis-
ta ya exista en sta, no lo aadir. As evitaremos la duplicidad de infor-
macin.
Una vez abierta la cesta, podremos extraer datos de ella mediante la pul-
sacin de los botones incluidos en la misma. stos son:
borra todo el contenido de la cesta, no incluyndose los datos en la re-
jilla actual.
borra todo el contenido de la cesta, incluyndose los datos en la rejilla
actual.
Copia el contenido de la cesta en la rejilla actual y los registros se man-
tienen en la cesta.
Copia el registro marcado en la cesta en la rejilla actual y lo borra de la
cesta.
Copia el registro marcado en la cesta en la rejilla actual pero no lo bo-
rra de la cesta.
Cierra la ventana de la cesta.
Como vimos antes, si tenemos definida ms de una cesta para la misma ta-
bla de datos, podremos seleccionar en el combo box que aparece en la par-
te superior izquierda de la ventana, bajo el epgrafe Cesta, la cesta de la que
queramos extraer datos.
09 Ejecutar una aplicacin
Borra todo el contenido de la
cesta
Borra todo el contenido de la
cesta
Copia el contenido de la cesta
Copia el registro
Copia el registro
Cierra la ventana de la cesta
448 449 VELAZQUEZ VISUAL
9.4.9. Guardar y recuperar listas virtuales en disco
Los registros de una rejilla pueden ser almacenados en disco para poder re-
cuperarlos en una nueva sesin. Para guardar una lista en disco hacemos
clic con el botn derecho del ratn sobre la lista y en el men de contexto
seleccionamos la opcin Guardar lista virtual. Le damos un nombre y espe-
cificamos la senda donde queremos guardarla, que por defecto es el direc-
torio del sistema. Las listas virtuales se almacenan con la extensin VTV.
Para recuperar una lista almacenada en disco ejecutaremos la opcin Re-
cuperar lista virtual.
Si recuperamos una lista virtual sobre una lista podremos deshacer la ope-
racin, ejecutando la opcin Deshacer, del men de contexto. Si queremos
rehacer esta operacin ejecutaremos la opcin Rehacer del men de con-
texto.
9.4.10. Imprimir desde una rejilla o un formulario
Para imprimir una lista desde una rejilla a la que hayamos asociado un in-
forme, seleccionamos la opcin de men Archivo/Imprimir informe El bo-
tn Imprimir informe tambin realiza esta funcin.
Si lo que queremos es ver una presentacin preliminar del informe selec-
cionaremos la opcin de men Archivo/Presentar informe o pulsaremos el
botn Ver Informe.
Para ver todos los tipos de informes que se pueden lanzar con la lista de re-
gistros de la rejilla actual, seleccionamos la opcin de men Archivo/Espe-
cificar informe, o bien pulsamos el botn Especificar informe.
Imprimir informe
Ver Informe
Especificar informe
Cuando se manda imprimir un informe, el ttulo de ste se refleja en la cola
de impresora de Windows, lo cual ayuda a saber el contenido de cualquier
informe cuando existen varios en cola.
Para imprimir desde un formulario alguna de las rejillas que incluya, son v-
lidas las opciones siguientes:
Las opciones de men y los botones de herramientas anteriores (si el for-
mulario no es cuadro de dilogo).
Pulsar un botn que ejecute un proceso que utilice la funcin Imprimir in-
forme.
9.4.11. Cmo introducir los datos
Hay dos formas fundamentales de introducir datos en un registro. Son las
siguientes:
Introducir datos en un campo no enlazado
Cuando un campo no est enlazado a otra tabla de datos, el contenido se
introduce directamente, teclendolo dentro del cuadro de edicin. En este
tipo de campos no aparecen las flechas arriba/abajo.
Si el campo es del tipo Objeto Texto, campo que puede llevar un nmero ili-
mitado de lneas de texto, tendremos que pulsar las teclas Ctrl+Intro para
insertar un salto de lnea. En este tipo de campos slo podemos escribir,
pero no cambiar atributos de letra, colores, alineacin del texto, etc. S po-
dremos hacer uso de las opciones habituales de Windows: Deshacer, Cor-
tar, Copiar, Pegar, Eliminar, Seleccionar todo, a travs del men contextual
que aparece al pulsar con el botn de la derecha del ratn sobre el fondo
del control del campo.
En campos de tipo Objeto Texto Enriquecido es similar al anterior, pero ad-
miten cambiar atributos de la letra, tipo, colores, justificacin, formatos de
prrafo, etc. Adems, cuando hacemos clic con el botn derecho del ratn
sobre un objeto de este tipo se abrir un men de contexto con las si-
guientes opciones:
09 Ejecutar una aplicacin
CONTROL DE EDICIN DE UN CAMPO TIPO OBJETO TEXTO
450 451 VELAZQUEZ VISUAL
Cambiar fuente: nos permitir cambiar el tipo de fuente, estilo, tamao,
efectos y color.
Alinear izquierda: para establecer la alineacin del texto justificado a la iz-
quierda del control.
Alinear centrado: para establecer la alineacin del texto centrado del
control.
Alinear derecha: para establecer la alineacin del texto justificado a la de-
recha del control.
Preparar pgina: para establecer el tamao, la orientacin y los mrgenes
de la pgina, as como la impresora que vamos a utilizar para imprimirlo.
Editar objeto: para lanzar el documento a un programa de edicin de docu-
mentos de texto.
En campos de tipo Objeto OLE podremos incrustar cualquier tipo de objeto
(documento de Word, Excel, Paint, etc.). Para incluir un objeto en un campo
de este tipo haremos doble clic con el botn izquierdo del ratn sobre el con-
trol, o bien pulsamos sobre el control el botn derecho del ratn y seleccio-
namos la opcin Nuevo Objeto del men de contexto que aparece.
CONTROL DE EDICIN DE UN CAMPO TIPO OBJETO TEXTO ENRIQUECIDO
CONTROL DE EDICIN DE UN CAMPO TIPO OBJETO OLE
Se mostrar el cuadro de dilogo estndar para insertar objetos.
Cuando editamos un campo en el que ya existe un objeto incrustado tene-
mos la opcin de Editar Objeto y Eliminar objeto al aparecer el men de
contexto.
Introducir datos en un campo enlazado
Cuando un campo est enlazado a una tabla de datos maestra, su conteni-
do ha de ser atrapado de la tabla de datos enlazada. Este tipo de campos
se reconocen fcilmente puesto que el cuadro de edicin tiene adosadas a
su derecha las flechas arriba/abajo . Para ello debemos haber activado
en las propiedades del control de edicin de campo de un formulario, Pro-
piedades de: Edicin con microscroll, la opcin Botones arriba/abajo de la
pestaa Ms estilos.
Si hemos definido el control para presentar la informacin en varias lneas,
tendremos que mantener pulsada la tecla Alt mientras pulsamos las tecla
de cursor arriba/abajo, si no, bastar con pulsar solamente las teclas del
cursor arriba/abajo.
Utilizando estas flechas podemos recorrer los registros de la tabla de datos
apuntada. Si introducimos un texto y pulsamos la tecla Flecha abajo (o la
tecla ALT + Cursor abajo, si se trata de un control de mltiples lneas) de
09 Ejecutar una aplicacin
Flechas arriba/abajo
452 453 VELAZQUEZ VISUAL
movimientos del cursor, Velzquez Visual buscar en la tabla de datos en-
lazada el registro ms prximo al texto introducido.
Cuando conocemos el contenido exacto de la informacin a introducir y
existe dicha informacin en la tabla de datos enlazada, podemos introducir
el contenido completo del campo. Al terminar de escribir, moviendo el cur-
sor a otro control, Velzquez Visual buscar en la tabla de datos apuntada
la informacin introducida y la atrapar automticamente.
Tambin podemos activar la propiedad Autocompletar en el control del for-
mulario. Al escribir una cadena en un edit de maestro, pasados los milise-
gundos que tengamos configurados en el ejecutor, el programa presenta el
primer registro que comience por la misma. No hay que perder el foco pa-
ra que funcione.
Para introducir fechas podemos usar tambin las flechas arriba/abajo. Si s-
ta no fue definida con un contenido inicial comenzar por la fecha del sis-
tema. Esta fecha puede introducirse de dos maneras: DDMMAA, DDM-
MAAAA, DD-MM-AA, DD/MM/AA... (Da, mes y ao, dos dgitos cada uno,
con o sin separaciones: - /) o bien DD-Mes-AAAA (Da: dos dgitos; mes:
tres primeras letras, ao: 4 dgitos, con separaciones entre datos: - /).
9.4.12. Fundir una ficha con otra
Disponemos de esta opcin en el men Fichas/Fundir que aparece cuando
se est visualizando una rejilla. Su funcin es eliminar un registro maestro
haciendo que toda la informacin que dependa de l (sus registros histri-
cos) pase a depender de otro.
Esta opcin solamente estar activada si el usuario tiene un nivel de privi-
legio igual o superior a 92.
Para realizar esta operacin seleccionaremos primero el registro que se
quiere eliminar y pulsamos Fichas/Fundir en la barra de mens. Nos apare-
ce entonces la ventana Fundido de fichas con el cdigo y el nombre del
primer registro. Despus, seleccionamos el registro que va a recoger los da-
tos y volvemos a pulsar Fichas/Fundir en la barra de mens. En la ventana
Fundido de fichas se muestran ahora el cdigo y el nombre de los dos re-
gistros. Si pulsamos el botn Invertir, la ficha vlida pasar a ser la ficha a
eliminar, y viceversa. Finalmente, si pulsamos el botn Fundir de la ventana
Fundido de fichas se realizar la operacin de fundido.
Por ejemplo, si se tienen dos fichas de un mismo cliente, siendo una de las
dos errnea, los datos histricos de la errnea se pueden fundir con los de
la correcta. Todos los albaranes, facturas, etc., que estuvieran asociadas a
la errnea pasarn a depender de la correcta.
9.4.13. Cambiar aspecto de la rejilla
Cuando en el ejecutor se visualiza una rejilla, se puede cambiar el aspecto
de la misma haciendo clic sobre el botn Cambiar el aspecto de la Re-
jilla. Dicho botn se encuentra en la barra de herramientas de listas de la
parte inferior de la pantalla. Lo que permite es cambiar la rejilla en la que se
estn presentando los registros de una tabla de datos por otra de las defi-
nidas como pblicas para la misma tabla. Si no est disponible el botn
porque hayamos cambiado la barra de herramientas estndar por una he-
cha por nosotros y no hayamos incluido este comando, podemos acceder
a esta funcin a travs de la barra de mens Lista/Cambiar el aspecto de la
rejilla.
09 Ejecutar una aplicacin
VENTANA DE FUNDIDO DE FICHAS
Cambiar el aspecto de la Rejilla
454 455 VELAZQUEZ VISUAL
9.4.14. Cambio de visualizacin de las hojas de clculo
Las hojas de clculo permiten visualizar la informacin de las siguientes for-
mas: Lneas, Barras verticales/horizontales/3D verticales/3D horizontales,
Gant vertical/horizontal, Tartas y Rejillas de valores.
Para cambiar la visualizacin disponemos de un men de contexto con las
opciones anteriores. Para activar este men pulsamos con el botn derecho
del ratn sobre el rea de la hoja de clculo.
9.4.15. Imgenes dinmicas
Recordemos que imgenes dinmicas son aquellas que el usuario puede
cambiar, es decir, puede introducir, cambiar o eliminar imgenes de un cam-
po Objeto dibujo durante la ejecucin. Imgenes estticas son los objetos
visuales Dibujo, que no pueden ser alterados por el usuario durante la eje-
cucin.
Modos de visualizacin
Los controles Objeto dibujo disponen de diversos modos de visualizacin.
Por defecto se activa el que hayamos definido en el proyecto, en las Pro-
piedades de: Objeto dibujo, en la opcin Modo ver.
REJILLA CUYA SEGUNDA BALA ES UN GRFICO
Para cambiar la visualizacin del dibujo en ejecucin disponemos de un
men de contexto con las opciones correspondientes a los diversos modos
de visualizacin. Este men se activa pulsando el botn derecho del ratn
sobre el rea del control. Los modos de visualizacin son:
Estirar-Encoger: cambiar el ancho y el alto de la imagen para adaptarlo a
la altura y anchura del control. Si no es proporcional el alto y el ancho de la
imagen a la altura y la anchura del control, la imagen se ver deformada.
Tamao Original: la imagen se presentar en su tamao original, comen-
zando a dibujarse desde el borde superior izquierdo del control. Si sta es
mayor que el tamao del control se ver truncada.
09 Ejecutar una aplicacin
456 457 VELAZQUEZ VISUAL
Tamao Original Centrado: la imagen se visualizar con su tamao original,
pero centrada dentro del rea que el control ocupe. Si dicha imagen es ma-
yor que el tamao del control se ver truncada.
Encoger/Estirar Proporcionado: la imagen aumentar o reducir su tama-
o para adaptarse al tamao del control, pero conservando siempre la
proporcin alto/ancho. Si la imagen es muy pequea y el control es muy
grande, sta se ver distorsionada al estirarse para adaptarse al tamao
de ste.
Mosaico: la imagen se presentar en su tamao original pero a modo de
mosaico, ocupando toda el rea del control.
Proporcionar sin Ampliar: la imagen se mostrar en su tamao original o se
reducir de forma proporcionada para adaptarse al tamao del control, en
el caso que ste sea menor que el tamao de la imagen.
Ventana del tamao original: nos abre una ventana independiente del for-
mulario de la imagen con su tamao original. Nos muestra las dimensiones
de la imagen en el ttulo de la ventana.
Importar y exportar imgenes
En ejecucin, para importar y exportar imgenes desde un control que edi-
te un campo tipo Objeto dibujo, utilizamos las opciones Importar dibujo, Im-
portar eliminando el origen y Exportar dibujo, situadas en el men de con-
09 Ejecutar una aplicacin
458 459 VELAZQUEZ VISUAL
texto asociado al control. Este men se activa pulsando el botn derecho
del ratn sobre el rea del control.
Podemos importar imgenes en formato BMP, JPEG, Targa y PCX.
Obtener una imagen va Twain
Va Twain se pueden conseguir imgenes desde un escner, una cmara fo-
togrfica digital e incluso de algunas cmaras de vdeo (para capturar un fo-
tograma).
En primer lugar seleccionamos el control de tipo Dibujo en un formulario. Si
en el ordenador tenemos instalada una nica fuente Twain, podremos eje-
cutar directamente la opcin Archivo/Obtener imagen va twain despus de
tener en foco el control de tipo Dibujo. En caso de tener ms de una fuen-
te, antes de ejecutar esta opcin tendremos que ejecutar la opcin Archi-
vo/Seleccionar fuente twain para especificar cul ser la fuente de obten-
cin de la imagen. Se ejecutar el programa que tengamos asignado al dis-
positivo de obtencin de imgenes seleccionado.
MEN DE CONTEXTO DE OBJETOS DIBUJO
Slo pueden obtenerse
imgenes va twain desde
formularios en modo vista (a
pantalla completa) no en
cuadro de dilogo.
ADVERTENCIA
Eliminar, Cortar, Copiar y Pegar una imagen
Disponemos de las opciones Eliminar, Cortar, Copiar y Pegar en el men de
contexto del control. Las opciones Eliminar y Cortar estarn desactivadas si el
control es de Solo Lectura. Para Cortar, Copiar y Pegar tambin se
pueden utilizar los botones adecuados de la barra de herramientas de edicin.
Editar una imagen
Al hacer doble clic sobre la imagen de un control tipo Objeto Dibujo, si no
est definida como Solo Lectura, dicha imagen ser abierta en el programa
de edicin de imgenes que tengamos definido por defecto en el sistema.
Si el control es de Solo lectura, al hacer doble clic aparecer un cuadro de
dilogo con el dibujo a su tamao real o reducido proporcionalmente si no
cabe en pantalla, no pudiendo realizarse ninguna edicin.
Reducir el tamao fsico de la imagen
Es posible reducir el tamao fsico de una imagen incluida en un control ti-
po Objeto Dibujo mediante la opcin Reduce el tamao fsico de la imagen,
que aparece en el men de contexto del control.
Al desplazar el botn de la barra vertical se produce la reduccin de tama-
o. Para salir cerramos la ventana ( ), quedando guardado el cambio si
aceptamos la ficha.
Esta opcin estar desactivada si el control es de Solo Lectura.
9.4.16. Rejillas encarpetadas en formularios
9.4.16. (encarpetados de histrico)
Las rejillas encarpetadas se utilizan en los formularios para ver la informa-
cin de forma clasificada dentro de las mismas. La clasificacin se realiza
encarpetando los registros de la rejilla segn los valores de un determinado
campo de la tabla de datos al que se llama campo subclasificador.
09 Ejecutar una aplicacin
Cortar
Copiar
Pegar
460 461 VELAZQUEZ VISUAL
La lista desplegable situada en la parte superior de la rejilla nos permite
visualizar el encarpetado de nuestra eleccin. Por defecto, la primera
vez que se abre presenta una lista completa de los registros de la rejilla,
mientras que si cambiamos la carpeta, cada ficha que se abra durante
la ejecucin del programa se presentar con esa misma carpeta selec-
cionada.
Existen dos tipos de encarpetado:
Encarpetado automtico: las carpetas son generadas automticamente por
la aplicacin tomando los valores del campo subclasificador. No podremos
crear, modificar ni borrar dichas carpetas.
Encarpetado manual: el encarpetado ser creado por nosotros y guardado
en el disco para su posterior uso.
Para editar un Encarpetado pulsamos el botn Carpetas, con lo que
se lanza un cuadro de dilogo en el que podemos declarar las distintas op-
ciones que luego nos aparecern en el combo box desplegable.
ENCARPETADO DE HISTRICO
Carpetas
En la ventana para edicin de carpetas tenemos los botones:
Aadir: permite aadir una nueva carpeta a la lista de carpetas.
Insertar: permite insertar una carpeta encima de la seleccionada en la
lista de carpetas.
Eliminar: borra la carpeta seleccionada.
Arriba: desplaza la carpeta seleccionada una posicin hacia arriba.
Abajo: desplaza la carpeta seleccionada una posicin hacia abajo.
Propiedades: permite editar las propiedades de la carpeta para realizar
modificaciones.
Al editar una carpeta debemos poner un Ttulo para el encarpetado, as co-
mo unos Lmites, Inicial y Final, por los que buscar en el segundo compo-
nente del ndice que compone la clave del histrico, que podemos ver den-
tro del control de Lmites.
09 Ejecutar una aplicacin
Aadir
Insertar
Eliminar
Arriba
Abajo
Propiedades
462 463 VELAZQUEZ VISUAL
Los encarpetados manuales muestran siempre la ltima carpeta abierta en
esa ejecucin de la aplicacin.
9.4.17. Usos avanzados de una rejilla
Las siguientes utilidades se encuentran en la opcin de men Lista (algunos
en la barra de herramientas), que aparece cuando una rejilla est visible en
la pantalla. Son unas funciones muy potentes que lleva implementadas Ve-
lzquez Visual y que permiten al usuario final realizar bsquedas y actuali-
zaciones personalizadas.
OPCIN DE MEN LISTA
Rebuscar (F3)
Esta opcin nos permite lanzar las bsquedas declaradas en el proyecto
que no sean privadas, haciendo que la lista resultante de las mismas se
combine con la lista desde la que lanzamos esta opcin. Tambin podemos
ejecutarla pulsando el botn Rebuscar o la tecla F3.
Hay tres tipos posibles de combinacin:
Cruzar: realiza una nueva bsqueda y los registros resultantes de la misma
los compara con los de la lista previa. Aquellos registros que se encuentren
en las dos listas son los que formarn la lista final.
Aadir: realiza una nueva bsqueda, comparando los registros resultantes
con los de la lista previa. La lista final estar compuesta por los registros de
la primera lista ms los registros de la segunda que no aparecen en la pri-
mera, es decir, no repite registros.
Quitar: realiza una nueva bsqueda y los registros resultantes de la misma
los compara con los de la lista previa. La lista final estar compuesta por los
registros de la primera lista menos los registros de la segunda que apare-
cen tambin en la primera.
En la ventana de Seleccin de bsqueda elegiremos la que vayamos a usar,
aparecindonos el formulario de peticin de datos para la bsqueda en el
caso de que lo requiera.
Esta funcin podr ser deshecha y rehecha en el men de edicin, con lo
que nos devolvera a la rejilla anterior a su ejecucin o nos lo volvera a eje-
cutar si lo hemos deshecho.
09 Ejecutar una aplicacin
VENTANA SELECCIN DE BSQUEDA
Rebuscar
464 465 VELAZQUEZ VISUAL
Filtrar (Ctrl+F3)
Mediante esta opcin excluimos de una lista aquellos registros que no cum-
plan una determinada condicin. Podemos lanzarla pulsando el botn
Filtrar o la combinacin de teclas Ctrl+F3.
Cuando seleccionamos esta opcin se presenta el cuadro de dilogo Filtra-
do de tabla de datos. Aqu podemos seleccionar el Campo por el que que-
ramos filtrar, la condicin que debe cumplir cada registro para ser incluido
en la nueva lista y el Dato a buscar dentro del campo por el que filtramos.
Los registros que no cumplan esta condicin son eliminados de la rejilla, pe-
ro no son borrados de la tabla.
Tenemos la opcin de que lo que busque sea el Campo completo: si hemos
marcado la casilla, el contenido del campo debe coincidir exactamente con
el Dato a buscar. Si no la marcamos, se filtrarn aquellos registros en los
que sea parte del contenido del Campo la que coincida con el Dato a bus-
car (en el caso de la figura anterior estaramos conservando los registros ta-
les que contengan la cadena cargar en el campo NOMBRE. Si marcramos
la casilla Campo completo slo nos quedaramos con los registros tales que
el campo nombre fuera cargar).
La casilla Compara con ficha seleccionada nos permite seleccionar una fi-
cha y coger de sta el valor del campo por el que queremos filtrar la lista.
Esta opcin podemos combinarla con Campo Completo.
As, si en una lista de Proveedores queremos ver slo los de Gijn (la tabla
POBLACIONES es maestra de PROVEEDORES), buscamos uno que est
tambin asignado a esa poblacin y lo seleccionamos (para encontrarlo po-
demos ordenar la lista de Proveedores por orden alfabtico de Poblacin,
pulsando en la cabecera de la columna). Filtramos entonces por el campo
y marcamos Compara con ficha seleccionada. Velzquez Visual se encarga
de mirar que las fichas filtradas tengan el mismo cdigo en el campo enla-
zado que el de la ficha que hemos seleccionado.
Si hacemos el filtrado por un
campo enlazado a maestro,
el valor del campo al filtrar
ha de ser el cdigo del
registro maestro, no su
descripcin. Por ejemplo, de
una lista de Proveedores se
desea ver solamente los que
sean de Gijn (la tabla
POBLACIONES es maestra
de la de PROVEEDORES), al
tratarse de un maestro no
puede filtrar por
Poblaciones=Gijn, sino que
debe buscar por el cdigo:
Poblaciones=3.
ADVERTENCIA
CUADRO DE DILOGO FILTRADO DE TABLA DE DATOS
Usando la opcin Compara
con ficha seleccionada en el
caso de hacer un filtrado por
un campo enlazado a
maestro, evitamos tener que
buscar el cdigo del registro
maestro por el que
queremos hacer el filtrado.
Basta buscar un registro en
la lista actual que tenga por
valor el que necesitamos y
marcando Compara con
ficha seleccionada cuando
hagamos el filtrado,
Velzquez Visual se encarga
de suministrar el valor
adecuado desde el registro.
TRUCO
Filtrar
Si ejecutamos un filtrado sobre una lista podremos deshacerlo ejecutando
la opcin Deshacer del men de contexto que se presenta al pulsar el bo-
tn derecho del ratn sobre la rejilla. Si queremos rehacer un filtrado hecho
sobre una lista ejecutaremos la opcin Rehacer del men de contexto que
se presenta al pulsar el botn derecho del ratn sobre la rejilla.
Combinar
Esta opcin slo est activa cuando disponemos de varias rejillas de la mis-
ma tabla de datos. Nos permite realizar combinaciones entre la rejilla activa
y otra que seleccionemos de entre la lista que nos presenta. Las combina-
ciones posibles son: Cruzar, Aadir y Quitar. La lista final de los registros nos
la muestra en la rejilla del separador en curso. Adems de lanzar esta opcin
desde el men, podemos hacerlo pulsando el botn Combinar.
Partir lista (Ctrl+F5)
Esta opcin slo est activa cuando seleccionamos un elemento de la reji-
lla en curso. Al ejecutarla cortamos la rejilla por el registro seleccionado y
los datos sucesivos son introducidos en una nueva rejilla que crea Velz-
quez Visual. El resultado final son dos rejillas: una que contiene los datos
hasta la seleccin (no incluye el seleccionado) y otra con los datos desde la
seleccin (s lo incluye). Cada rejilla se muestra en una ventana distinta del
ejecutor.
Mediante la combinacin Ctrl+F5 podemos lanzar esta opcin.
Multipartir lista
Esta opcin parte la lista en funcin del contenido de un campo. Al ejecu-
tarla nos presenta la ventana Seleccin de campo, donde seleccionamos el
09 Ejecutar una aplicacin
CUADRO DE DILOGO COMBINAR CON OTRA VENTANA
Slo podemos combinar
rejillas asociadas a una
misma tabla de datos.
ADVERTENCIA
Combinar
466 467 VELAZQUEZ VISUAL
campo por el que queremos multipartir la lista. Nos crea entonces una lista
por cada grupo de registros que tengan el mismo valor en el campo elegi-
do, ordenados alfabticamente o numricamente dependiendo del tipo de
campo elegido. Cada lista aparece en una nueva ventana del ejecutor.
Ejemplo: Multipartir lista
Tenemos la tabla PROVINCIAS, cuya maestra es COMUNIDADES AUTO-
NOMAS, y queremos multipartir la lista de Provincias por el campo Comu-
nidades Autnomas.
VENTANA SELECCIN DE CAMPO
e
Elegimos la opcin multipartir lista, y en la ventana Seleccin de campo ele-
gimos el campo COMUNIDAD, por el que multipartiremos la lista.
Velzquez crear una lista por cada Comunidad Autnoma. El ejecutor abrir
tantas ventanas como comunidades autnomas distintas haya en la lista original.
09 Ejecutar una aplicacin
LISTA DE PROVINCIAS
VENTANA SELECCIN DE CAMPO
e
468 469 VELAZQUEZ VISUAL
Campos duplicados
Esta opcin crea una nueva lista con los registros de la rejilla en curso que
posean el contenido de un campo duplicado, abrindonos otro separador
en el ejecutor para mostrrnosla.
Por ejemplo, supongamos una lista de habitantes de una ciudad (habitan-
tes histrico de ciudad), en la que ejecutamos la opcin Campos duplica-
dos especificando el campo Edad. Si hay ms de un registro tal que el con-
tenido del campo edad sea 1, todos esos registros con edad igual a 1 se-
rn incluidos en la lista, pero tambin se incluirn en la misma lista todos los
que tengan dos aos, siempre que haya ms de un registro con dos aos.
Ahora bien, si slo hay un registro con 107 aos, ste no ser incluido en la
lista.
Al ejecutar esta opcin aparecer la ventana Seleccin de campo, en la que
seleccionamos el campo por el que vamos a comprobar si hay registros du-
plicados. Nos es particularmente til para la localizacin de cdigos o cla-
ves duplicadas en una tabla de datos.
e
Si no hay registros con campos duplicados aparecer una ventana infor-
mativa al respecto.
Modificar campo
Mediante esta opcin modificamos en todos los elementos de la lista el
campo que seleccionemos, indicando su nuevo contenido en el cuadro de
edicin que aparece en pantalla.
Modificar campo si...
Con esta opcin modificamos el contenido de un campo en todos los re-
gistros de la lista que cumplan una determinada condicin.
09 Ejecutar una aplicacin
VENTANA SELECCIN DE CAMPO
CUADRO MODIFICACIN CAMPO
Esta opcin solamente
estar activada si el usuario
tiene un nivel de privilegio
igual o superior a 92.
ADVERTENCIA
470 471 VELAZQUEZ VISUAL
Al seleccionar la opcin aparece el cuadro de dilogo Modificacin general
de un campo, en el que se muestran los siguientes controles de edicin:
Campo a buscar: campo por el que vamos a buscar los registros de la lis-
ta. Puede coincidir o no con el campo a modificar.
Dato a buscar: es el contenido que ha de tener el Campo a buscar. Aque-
llos registros en los que dicho campo contenga el Dato a buscar sern los
modificados. Si se trata de un campo enlazado, debemos introducir el c-
digo que posee el registro correspondiente en la tabla de datos padre, y no
el nombre u otro campo del registro.
Campo completo: si no marcamos esta casilla de verificacin se modifica-
rn aquellos registros en los que parte del contenido del Campo a buscar
coincida con el Dato a buscar. Si est marcada, el contenido del campo de-
be coincidir exactamente con el Dato a buscar.
Campo a modificar: el campo que vamos a modificar si se cumple la con-
dicin.
Dato para reemplazar: es el contenido final que introduciremos en el Cam-
po a modificar. De nuevo, si es un campo enlazado debemos introducir el
cdigo que posee el registro correspondiente en la tabla de datos padre, y
no el nombre u otro campo del registro, tal y como pasaba en el dato a
buscar.
Reordenar
Reordena los elementos de la rejilla por el campo seleccionado. Al ejecutar
la opcin aparece la ventana Seleccione campo, en la que elegimos el cam-
po por el que reordenar.
Esta opcin solamente
estar activa si el usuario
tiene un nivel de privilegio
igual o superior a 92.
ADVERTENCIA
CUADRO MODIFICACIN GENERAL DE UN CAMPO
Si ejecutamos una ordenacin sobre una lista podremos deshacerla ejecu-
tando la opcin Deshacer del men de contexto que se presenta al pulsar
el botn derecho del ratn sobre la rejilla. Si queremos rehacer una ordena-
cin ejecutaremos la opcin Rehacer del men de contexto.
Recalcular totales
Cuando seleccionamos esta opcin se recalculan los totales de la rejilla.
Tambin realiza esta funcin el botn Recalcular, situado en la barra de
listas de Velzquez Visual.
9.4.18. Utilidades
Esta opcin de men aparece cuando, a la hora de presentar los registros
de una tabla, se realiza un volcado completo de sta usando la Pistola de
men: Rejilla Tabla datos completa. Cuando usamos esta pistola en un me-
n arbolado con los iconos por defecto de Velzquez Visual esta opcin
aparece precedida del icono .
09 Ejecutar una aplicacin
Si vamos a ordenar por un
campo incluido en una
columna de la rejilla, bastar
hacer clic con el ratn sobre
la cabecera
correspondiente.
TRUCO
VENTANA SELECCIN DE CAMPO PARA REORDENAR
Recalcular
Rejilla tabla datos
completa
472 473 VELAZQUEZ VISUAL
Informacin Tabla de datos
Desde la opcin Utilidades se puede obtener informacin sobre una tabla
de datos: Nombre e Identificador de la tabla, nmero Total de Fichas, cun-
tas se encuentran Ocupadas y cuntos Huecos libres hay. El total de fichas
ha de ser la suma de Ocupadas y Huecos libres. Estos huecos libres son
causados por la eliminacin de registros anteriores al ltimo creado, que-
dando libre el espacio que ocupaban. Los siguientes registros que vayamos
dando de alta irn ocupando los huecos libres que haya.
Regenerar ndices y Regenerar el rea de datos
Desde la rejilla de tabla de datos completa tenemos la opcin de Regene-
rar ndices, volviendo a construir stos tal y como si hubiramos hecho una
modificacin del esquema de tablas del mapa. Tambin podemos Regene-
rar el rea de datos, con lo que se reconstruirn los archivos de datos .DAT,
escribindolos de nuevo.
Exportar ASCII
Con esta opcin podemos exportar los datos de la tabla en formato ASCII
delimitado, separados por comas y entrecomillados. Seleccionada la op-
cin, Velzquez Visual pregunta si queremos realizar la exportacin. Al con-
firmar, exporta la tabla a un fichero de texto con extensin .TXT cuyo nom-
bre es el de la tabla exportada.
Esta opcin no est disponible en arquitectura cliente-servidor haciendo
uso de la pistola Rejilla tabla de datos completa. En este caso usaramos la
opcin del irunner Lista/Exportar Ascii.
MEN UTILIDADES
Este men slo aparece en
VRunner, no en Irunner, ya
que en arquitectura cliente-
servidor estas opciones se
incluyen en el Servidor de
aplicaciones de Velzquez
Visual.
ADVERTENCIA
VENTANA INFORMACIN SOBRE UNA TABLA DE DATOS
9.4.19. Ejecucin de procesos desde una rejilla
Posibilidad de disparar un proceso desde una rejilla
Para disparar cualquier tipo de proceso disponemos de las opciones del
men Procesos. Tambin podemos lanzarlos usando los botones de la ba-
rra de listas de Velzquez Visual o desde una barra de herramientas creada
por nosotros. Estas opciones estn accesibles en los casos siguientes:
Procesos: est activada si estn disponibles uno o ms procesos de lis-
ta para la tabla de datos de la rejilla en curso.
Tubo de ficha: est activada si en la rejilla hay un registro seleccionado
y estn disponibles uno o ms tubos de ficha para la tabla de datos de la
rejilla en curso.
Tubo de lista: est activada si estn disponibles uno o ms tubos de lis-
ta para la tabla de datos de la rejilla en curso.
Disparo de un Tubo de ficha
Para disparar un tubo de ficha primero hemos de seleccionar un elemento
de la rejilla en curso. Si hay tubos de ficha disponibles se activar la opcin
de men Procesos/Tubo de ficha y el botn Tubo de ficha. Usando uno
u otro, Velzquez Visual nos mostrar una lista con los tubos de ficha dis-
ponibles, confirmndonos la tabla de origen y la ficha desde la que se rea-
liza el tubo de ficha. Seleccionamos el tubo que queramos usar y acepta-
mos, ejecutndose sobre la ficha seleccionada.
09 Ejecutar una aplicacin
MEN PROCESOS
Procesos
Tubo de ficha
Tubo de lista
474 475 VELAZQUEZ VISUAL
Disparo de un Tubo de lista
Para disparar un tubo de lista primero debemos situarnos en la rejilla origen.
Si hay tubos de lista disponibles se activarn la opcin de men Proce-
sos/Tubo de lista y el botn Tubo de Lista. Al pulsar uno de los dos se
mostrarn los tubos de lista disponibles. Seleccionamos entonces el que-
ramos usar.
VENTANA SELECCIN DE TUBO DE FICHA
VENTANA SELECCIN DE TUBO DE LISTA
Tubo de Lista
Disparo de un proceso
Para disparar un proceso hemos de situarnos en la rejilla origen. Si hay pro-
cesos de lista disponibles se activar la opcin de men Procesos/Proce-
sos. Al pulsarla se mostrarn la tabla a la que pertenece la rejilla (como t-
tulo) y los procesos de Origen Lista disponibles. Seleccionaremos entonces
el que vayamos a lanzar.
Consulta de procesos en segundo plano
Los procesos que se ejecutan en segundo plano son aquellos en los que
hemos marcado el Estilo Multitarea en su ventana de edicin.
Al pulsar el botn Procesos 2 Plano, situado en la barra de herramien-
tas superior de la rejilla, o en la opcin de men Archivo / Procesos en eje-
cucin, aparece un cuadro de dilogo donde se informa del estado de eje-
cucin de cada uno de los procesos activos en el momento de la consulta.
Si el botn est desactivado se debe a que no se est ejecutando ningn
proceso en segundo plano.
Para abortar una tarea, sta ha de tener la funcin de proceso Punto don-
de se puede abortar. Cuando seleccionamos un proceso y pulsamos el bo-
tn Abortar proceso, el ejecutor nos pide confirmacin para abortar la tarea,
09 Ejecutar una aplicacin
OPCIN DE MEN PROCESOS / PROCESOS
ESTADO DE EJECUCIN DE PROCESOS ACTIVOS
Procesos 2 Plano
476 477 VELAZQUEZ VISUAL
de modo que si pulsamos S muestra el mensaje que hayamos especifica-
do en la funcin de proceso Punto donde se puede abortar.
Si queremos salir de la aplicacin y hay procesos en segundo plano, Velz-
quez Visual se encargar de avisarnos y no nos dejar cerrar la aplicacin.
Para salir sin terminar los procesos hemos de abortarlos como acabamos
de explicar (si no son abortables hay que esperar a que terminen).
9.4.20. Conmutador de herencia de histricos
9.4.19. para arbolados
Cuando estemos utilizando una opcin de men cuya pistola sea un rbol
visor de tablas y que como segunda bala incluya una rejilla de histrico, por
defecto el botn Herencia arbolada estar seleccionado, mostrndose
todos los histricos de la rama seleccionada del rbol y de todas las ramas
que cuelguen de ella.
Si tenemos desactivado el botn Herencia arbolada, en la rejilla de his-
trico se visualizarn solamente los registros asignados directamente a la
rama seleccionada, no los de las ramas que dependen de ella.
Ejemplo: herencia arbolada
Una librera tiene diversos almacenes; en cada almacn tenemos varias
plantas, varios pasillos dentro de cada planta, y en cada pasillo varias es-
tanteras. Para gestionar esta estructura usamos una tabla arbolada, como
puede ser la de Ubicaciones de almacn, con estructura Almacn-Planta-
Pasillo-Estantera. Supongamos que el departamento de compras necesita
grabar un albarn de entrada de mercancas en el que aparecen varios ar-
tculos nuevos. Podemos grabarlos asignndoles como ubicacin slo el
cdigo del primer nivel (Almacn).
e
Herencia arbolada
Herencia arbolada
Posteriormente, la persona responsable de la ubicacin de los libros puede
consultar cules no estn asignados todava a una estantera (son los que
se grabaron anteriormente al nivel de almacn) gracias a este botn, ya que
si se sita en el nivel de Almacn, en principio aparecen todos los libros que
estn asignados a su nivel o a los inferiores, pero al desactivar el conmuta-
dor de herencia ver slo los libros que estn asignados al nivel de Al-
macn, que son los que han sido recin comprados por la librera, todava
no ubicados, y, por tanto, podr modificar su situacin, asignndoles una
ubicacin a nivel de Estantera.
09 Ejecutar una aplicacin
HERENCIA ACTIVA
HERENCIA NO ACTIVA
e
Conmutador de herencia
478 479 VELAZQUEZ VISUAL
9.4.21. Altas desde un Localizador Arbolado
Desde un Localizador Arbolado podemos dar de alta una nueva ficha en la
tabla arbolada correspondiente. Para lanzar el Localizador Arbolado debe-
mos tener un botn en el formulario de edicin de ficha de su histrico que
nos ejecute la funcin Localizar maestro arbolado.
Al pulsar el botn al que hemos asignado el localizador nos despliega ste y
pulsando el botn Nueva nos abre el formulario de altas de la tabla arbolada.
De este modo podramos, por ejemplo, crear una nueva Estantera desde el
visor arbolado de Ubicaciones de Almacn.
BOTN ENCARGADO DE LANZAR EL LOCALIZADOR ARBOLADO
VENTANA LOCALIZADOR DE MAESTRO ARBOLADO
9.5 Explorador Web
El ejecutor de aplicaciones incorpora un Explorador Web que nos permitir
navegar por la web directamente desde la aplicacin, siempre y cuando lo
hayamos implementado. Por su parte, el Irunner incorpora permanente-
mente un navegador web.
El Explorador Web ser arrancado automticamente cuando en la aplica-
cin hayamos ejecutado alguna accin que implique la apertura de una p-
gina web; como por ejemplo si en nuestra aplicacin existe un campo para
almacenar la pgina web del proveedor, y se ha incluido en el formulario de
proveedores un botn para abrirla.
Las pginas web sern abiertas en una ventana diferente, en un separador
distinto al de partida y aparecer, junto a la barra de botones del Ejecutor, la
barra de botones del Explorador Web, que incluye los botones siguientes:
Atrs: si hemos abierto varias pginas en la misma ventana, al pulsar es-
te botn iremos a la pgina anterior a la actual.
Adelante: si hemos abierto varias pginas en la misma ventana, al pul-
sar este botn iremos a la pgina siguiente a la actual.
Detener: detiene la carga de la pgina web.
Actualizar: carga de nuevo la pgina web en curso.
Inicio: abre la pgina que est especificada como pgina principal en las
Propiedades de Internet del sistema.
Inicio serie: si en una misma ventana del explorador hemos abierto dife-
rentes pginas, este botn retornar a la que hayamos seleccionado con
una Marca de inicio de serie o, si no establecimos una marca, a la pri-
mera pgina que hayamos abierto en dicha ventana.
Marca inicio serie: la pgina que hayamos seleccionado con esta marca
ser a la que se retorne si, en la misma ventana, se pulsa el botn de
Inicio serie.
Barra de direcciones: aqu podemos escribir la di-
reccin URL de una pgina web para entrar en ella. Adems, pulsando el
botn desplegamos las que hemos escrito antes en esta barra.
09 Ejecutar una aplicacin
Atrs
Adelante
Detener
Actualizar
Inicio
Inicio serie
Marca de inicio de serie
480 481 VELAZQUEZ VISUAL
9.6 Correo electrnico
Si en nuestra aplicacin ejecutamos funciones de correo electrnico podre-
mos activar la opcin Display Out del men Ver o pulsar el botn de la
barra de herramientas, para ver los mensajes enviados y recibidos.
Una vez ejecutada, aparecer una ventana en la que se informa sobre los
mensajes enviados y recibidos, el nmero de mensajes que no han podido
ser enviados y sobre el estado de la conexin.
9.7
Incorporacin de un manual de ayuda
propio para una aplicacin
Podemos utilizar nuestro propio manual de ayuda para una aplicacin final,
en lugar de usar el manual del ejecutor de proyectos/navegador de Velz-
quez Visual. Para ello crearemos el manual de ayuda con formato HLP, as
Bandejas e-mail
como su fichero de contenidos correspondiente (.CNT). Ambos ficheros
tendrn que ser llamados igual que el proyecto (por ejemplo, si hemos crea-
do un proyecto llamado Gestion.map, tenemos que nombrar los ficheros
Gestion.hlp y Gestion.cnt). Copiaremos ambos archivos en la carpeta don-
de est instalado el ejecutor de Velzquez Visual (en ejecucin con vRunner).
As, en ejecucin, cuando el usuario solicite ayuda se visualizar el fichero
de ayuda que hayamos creado para la aplicacin.
Resumen
Las distintas opciones disponibles en una aplicacin se lanzan desde los
mens, presentndose cada opcin en un separador distinto del ejecutor.
Las rejillas nos permiten visualizar listas de registros de una tabla de da-
tos. Presentan una serie de opciones como son: invertir el orden de la lis-
ta, multiseleccin, edicin directa, exportar a ASCII sus registros, cestas
de la compra, imprimir listas, fundir fichas, encarpetados, rebuscar, filtrar,
combinar, partir lista, multipartir lista, campos duplicados, modificar cam-
pos, reordenar, recalcular totales, ejecucin de procesos, tubos de lista y
de ficha, etc.
Los formularios nos permiten dar de alta, modificar o dar de baja registros
de una tabla de datos. En un formulario pueden aparecer listas (rejillas de
histricos), botones, cuadros de edicin, etc.
La opcin de men utilidades aparece cuando, a la hora de presentar los re-
gistros de una tabla, se realiza un volcado completo de sta usando la Pis-
tola de men: Rejilla Tabla datos completa. Encontramos en ella informacin
de la tabla, la posibilidad de regenerar tanto los ndices como el rea de da-
tos, as como de exportar los registros en ASCII.
En una opcin de men cuya pistola sea un rbol visor de tablas y que co-
mo segunda bala incluya una rejilla de histrico, Velzquez nos ofrece la po-
sibilidad de ver todos los registros que cuelguen directamente de una rama
del rbol o todos los registros contenidos en todas las ramas que cuelguen
de la rama en la que estemos. A esto se le llama herencia arbolada. Ade-
ms, desde un Localizador Arbolado podemos dar de alta una nueva ficha
en la tabla arbolada correspondiente.
El ejecutor de aplicaciones incorpora un Explorador Web que nos permitir
navegar por la web directamente desde la aplicacin, siempre y cuando lo
hayamos implementado.
Si en nuestra aplicacin ejecutamos funciones de correo electrnico, el eje-
cutor nos permite ver los mensajes enviados y recibidos.
09 Ejecutar una aplicacin
10
Instalacin
de aplicaciones
10.1
Versin de Velzquez Visual basada
en un servidor de disco (Monopuesto)
Para instalar una aplicacin realizada con Velzquez Visual a un usuario fi-
nal debemos instalar en el servidor el Proyecto (fichero .VAM o .MAP). Re-
cordemos que el fichero .MAP puede ser abierto y modificado con el Editor
de Proyectos, el fichero .VAM no. Este ltimo adems est totalmente en-
criptado y ocupa menos espacio en disco. As que lo aconsejable es insta-
lar este ltimo.
Cuando trabajamos en arquitectura VRunner, debemos instalar el Ejecutor
de aplicaciones (fichero VRunner.exe) en cada puesto en que vaya a ser eje-
cutada.
La ejecucin de aplicaciones en modo local ser monopuesto, es decir, una
aplicacin slo puede ser ejecutada una vez por un nico usuario en el
mismo momento, aunque varios usuarios podrn ejecutar la aplicacin pe-
ro no simultneamente.
En funcin del Ejecutor que se vaya a instalar, pueden necesitarse otros ar-
chivos adicionales (dlls), que son:
Libreras DLL de C++: Mfc42.dll, Mfc42Loc.dll, Msvcp60.dll, Msvcrt.dll.
Todos los ejecutables VRunner las necesitan. Los ejecutables VRunner no,
pues ya las tienen incluidas.
Libreras DLL de Oracle: Ociw32.dll.
Al igual que antes, los ejecutables VRunner.exe las necesitan. Los ejecuta-
bles VRunner.exe ya tienen incluida la librera.
Las libreras dll que sean necesarias se han de instalar (en cada puesto, al
igual que el vRunner) en la carpeta C:\Windows\System (en Windows 95 y
98) o en la carpeta Windows\System32 (en Windows NT y 2000).
A continuacin enumeraremos los diferentes ejecutores existentes:
VRunner.exe: ejecutor de proyectos.
VRunner.exe: ejecutor de proyectos con Proteccin Sentinel. Slo dispon-
dremos de l si tenemos la versin Proteccin Sentinel de Velzquez Visual.
En cada puesto tambin se ha de instalar la llave de proteccin debida-
mente programada.
VRunner.exe: ejecutor de proyectos (con libreras dll incluidas).
VRunner.exe: ejecutor de proyectos (con libreras dll incluidas) con Protec-
cin Sentinel. Slo dispondremos de l si usamos la versin Proteccin
Sentinel de Velzquez Visual.
10
Instalacin
de aplicaciones
486 487 VELAZQUEZ VISUAL
Para que nos sea ms fcil la localizacin de los archivos redistribuibles, en
el directorio del programa se encuentran todos en una carpeta llamada RE-
DIST. En esta carpeta tambin se incluye el manual de edicin en lnea de
los ejecutores.
Si el usuario final va a trabajar con bases de datos externas ODBC/DAO, ne-
cesitar tener instalados en su mquina los controladores de ODBC/DAO.
En el CD-ROM de instalacin de Velzquez Visual existe una carpeta llama-
da DAO que le permitir instalar los controladores del DAO y otra llamada
ODBC que permitir instalar los controladores del ODBC. Son totalmente re-
distribuibles.
Existe una serie de ficheros que podemos incluir tambin en la instalacin
(en el servidor) en los siguientes casos:
Si la aplicacin la vamos a entregar con datos en las tablas tendremos que
incluir los ficheros con la extensin DAT e IDX correspondientes.
Si hemos introducido informacin en campos de tipo objeto tendremos que
incluir tambin los ficheros con extensin CND y CNI.
Si la aplicacin ya la entregamos con la informacin de los usuarios y de los
grupos de usuarios tendremos que incluir el fichero con la extensin USR.
Si vamos a entregar la aplicacin con los valores de variables en disco ya
introducidos tendremos que incluir tambin el fichero con la extensin VAR.
Si creamos un fichero de ayuda propio (.HLP) con o sin fichero de conteni-
dos (.CNT) los incluiremos tambin. Se instalarn en el mismo directorio que
el Ejecutor. Si no tenemos archivo de ayuda propio, instalaremos los archi-
vos VRunner.hip y VRunner.cnt.
10.2
Versin cliente-servidor
de Velzquez Visual
Deberemos instalar en el servidor el fichero .VAM o .MAP, y el Servidor de
Aplicaciones de Velzquez Visual. Y en los clientes instalaremos el Nave-
gador de Velzquez Visual. En el mismo CD-ROM de instalacin del Ser-
vidor de Aplicaciones encontraremos el programa de instalacin del Na-
vegador.
Otros ficheros adicionales que puede incluir en la instalacin
Si la aplicacin la vamos a entregar con datos en las tablas tendremos que
incluir los ficheros con la extensin DAT e IDX correspondientes.
Si hemos introducido informacin en campos de tipo objeto tendremos que
incluir tambin los ficheros con extensin CND y CNI.
Si hemos creado un fichero de ayuda propio (.HLP) con o sin fichero de con-
tenidos (.CNT) tendremos que instalarlos tambin en el mismo directorio
que el Navegador de Velzquez Visual.
Si no tenemos archivo de ayuda propio, instalaremos los archivos Irun-
ner.hlp e Irunner.cnt.
Si el usuario final va a trabajar con bases de datos externas ODBC/DAO, al
igual que antes, necesitar tener instalados en su mquina los controlado-
res de ODBC/DAO.
10.3
Creacin de aplicaciones para
ejecutar desde CD-ROM
Al tratarse de un dispositivo de solo lectura, para crear una aplicacin para
ejecutar desde un CD-ROM tendremos que tener en cuenta lo siguiente:
El proyecto de Velzquez Visual no puede tener procesos que provoquen
escritura en disco.
En los formularios del proyecto no puede haber botones que disparen fun-
ciones Aceptar ni Eliminar.
Habr que aadir ficheros de los especificados anteriormente (ficheros de
datos, ndices, contenedor, etc.).
El ejecutor a utilizar ser VRunner.exe.
10
Instalacin
de aplicaciones
11
Servidor
de aplicaciones
A continuacin vamos a explicar a travs de un esquema una serie de con-
ceptos, tratados de forma general, con el propsito de ayudar a compren-
der qu es el Servidor de Aplicaciones, qu servicios ofrece y cmo es su
funcionamiento:
Se puede definir el Servidor de aplicaciones Velzquez Visual como un pro-
grama que se instala en un equipo, con el objeto de que otro equipo pueda
acceder a las aplicaciones desarrolladas con Velzquez Visual que se hayan
instalado previamente en el Servidor de aplicaciones Velzquez Visual (del
primer equipo).
Este funcionamiento corresponde a la denominada arquitectura Cliente-
Servidor. Por esto, al equipo que tiene instalado el Servidor de aplicaciones
Velzquez Visual se le denomina SERVIDOR y al equipo que pretende ac-
ceder a las aplicaciones se denomina CLIENTE.
El servidor y el cliente pueden estar dentro de una red local o bien dentro
de la red que forma Internet.
El servidor de aplicaciones Velzquez Visual tiene las siguientes caractersticas:
Es el motor de las bases de datos de las aplicaciones que se hayan insta-
lado en l.
Gracias al servidor HTTP puede mostrar, por ejemplo, las pginas web de
la empresa, tanto estticas como dinmicas (es decir, puede mostrar los
datos que se deseen de las distintas aplicaciones Velzquez Visual instala-
das en l).
Finalmente, permite que los distintos equipos cliente puedan acceder a las
carpetas del equipo Servidor que se hayan compartido. Razn por la cual
se dice que el Servidor es tambin un Servidor de disco.
Cuando un cliente quiere entrar en una de las aplicaciones Velzquez Vi-
sual instaladas en el Servidor debe utilizar el Navegador de Velzquez Vi-
11 Servidor de aplicaciones
492 493 VELAZQUEZ VISUAL
sual. La comunicacin entre Servidor y Cliente se realiza a travs de un
protocolo (es decir, el conjunto de normas y procedimientos para la trans-
misin de datos). Un ejemplo de protocolo es el conocido TCP/IP, utiliza-
do en Internet.
El protocolo utilizado en Velzquez Visual es el denominado VATP. Dicho
protocolo es propio de Velzquez Visual y tiene asignado a nivel interna-
cional su propio nmero de puerto (es el 690).
VATP permite acceder a las distintas aplicaciones instaladas en el Servidor
y a sus correspondientes datos, y tambin acceder a las carpetas compar-
tidas por el Servidor de Disco.
Si un cliente quiere visualizar las pginas web que tiene instaladas el Servi-
dor puede utilizar tanto el Navegador de Velzquez Visual como cualquier
otro navegador web. En este caso el protocolo de comunicacin que se uti-
liza es el TCP/IP habitual.
11.1 Instalacin del Servidor
La instalacin del Servidor de aplicaciones Velzquez Visual (tambin de-
nominado Motor) es sencilla, ya que el asistente de instalacin indica los
pasos a realizar. Una vez instalado, tenemos un fichero ejecutable, denomi-
nado Vmotor.exe, situado en la senda C:\Archivos de Programa\Atica\Ve-
lazquez\Program.
Adicionalmente, el usuario debe instalar los drivers correspondientes a la
llave de proteccin Sentinel, ya que el servidor est protegido con tales lla-
ves los necesita para acceder a ellas. Dichos controladores se encuentran
en el CD de instalacin, dentro de la carpeta Sentinel.
Una vez realizada la instalacin podemos iniciar el servidor a travs de Me-
n de Inicio/Programas/Velzquez/Servidor aplicaciones:
11.2 Interfaz del Servidor
Cuando accedemos al Servidor de aplicaciones las distintas reas que
componen la ventana principal del servidor son las siguientes:
a) rea de configuraciones: contiene varias pestaas denominadas Aplica-
ciones, Usuarios (Personas), Enganches, Transacciones y Archivos. Di-
chas pestaas las iremos viendo con detalle posteriormente.
b) rea de mensajes: til de cara sobre todo a los programadores. En ella
podremos visualizar mensajes enviados desde procesos ejecutados en
11 Servidor de aplicaciones
494 495 VELAZQUEZ VISUAL
el Servidor a travs de la funcin de proceso Mensaje. Es habitual el in-
tercalar mensajes en procesos para depurarlos. En el caso de procesos
que son ejecutados en el servidor de aplicaciones, la forma de visualizar
dichos mensajes es en esta barra de salida. En ella tambin se visuali-
zan mensajes internos del Servidor de Aplicaciones:
c) rea de demonios: se trata de un proceso que definimos en la aplicacin y que
son ejecutados de forma continuada mientras la aplicacin est en ejecucin.
Son procesos de baja prioridad, es decir, su ejecucin no afecta al tra-
bajo normal por parte de los usuarios.
En esta rea se muestra, para cada demonio en ejecucin, informacin
sobre el nombre del proceso, cada cuntos milisegundos es ejecutado y
el n de veces que ha sido ejecutado:
d) rea de tablas: muestra para la aplicacin seleccionada en ese momen-
to la lista de sus tablas de datos, indicando el nmero de fichas que tie-
ne cada una de ellas:
e) rea de tareas: est divida por las pestaas Tareas programadas (accio-
nes que el administrador del servidor puede crear para que se realicen
con la periodicidad que se desee) y Tareas Ejecucin (muestra las tareas
que han sido ejecutadas o se estn ejecutando).
11.3 Barra de mens
La barra de mens del Servidor contiene las siguientes opciones:
11.3.1. Aplicaciones
Con el men Aplicaciones podemos abrir una nueva aplicacin ( Abrir),
cerrar la aplicacin seleccionada ( Cerrar), reiniciar la aplicacin seleccio-
nada ( Reiniciar) o reiniciarla utilizando el fichero encriptado y comprimi-
do de extensin .VAM( Reiniciar con vam). Tambin podremos detener (
Detener ejecucin) o continuar la ejecucin ( Continuar ejecucin) de la
aplicacin seleccionada. Asimismo, podremos visualizar las propiedades de
la aplicacin ( Propiedades) y los usuarios que pueden acceder a ella (
Usuarios).
11 Servidor de aplicaciones
Abrir
Cerrar
Reiniciar
Reiniciar con vam
Detener ejecucin
Continuar ejecucin
Propiedades
Usuarios
496 497 VELAZQUEZ VISUAL
Podemos realizar, adems, una copia de seguridad en caliente de la aplica-
cin ( Copia de seguridad) y poder en un momento dado recuperarla (
Recuperar copia).
Finalmente, visualizamos un listado con las cuatro ltimas aplicaciones ins-
taladas en el servidor y podemos cerrar el Servidor (Salir).
11.3.2. Editar
Con el men Editar podemos cortar ( Cortar, Crtl+X), copiar ( Copiar,
Ctrl+C) y pegar ( Pegar, Ctrl+V) lo que seleccionemos.
Tambin es posible crear ( Nueva), suprimir ( Suprimir) o modificar (
Modificar) una Carpeta de usuarios, crear ( Nuevo), duplicar ( Duplicar),
suprimir ( Suprimir) o modificar ( Modificar) un Usuario, crear ( Nue-
vo), suprimir ( Suprimir) o modificar ( Modificar) un Grupo de usuarios,
crear
(
Nuevo), suprimir ( Suprimir) o modificar ( Modificar) un Grupo
de mensajera, crear ( Nueva), suprimir ( Suprimir) o modificar ( Mo-
dificar) una Mquina, crear ( Nueva) una Carpeta de archivo y crear (
Nueva), suprimir ( Suprimir) o modificar ( Modificar) una Tarea.
Podemos crear una lista de aplicaciones ( Listas de aplicaciones), y crear
un dominio web ( Dominios Web) para que sirva pginas html.
Copia de seguridad
Recuperar copia
Cortar
Copiar
Pegar
Nueva carpeta de usuarios
Suprimir carpeta de usuarios
Modificar carpeta de usuarios
Nuevo usuario
Duplicar usuario
Suprimir usuario
Modificar usuario
Nuevo grupo de usuarios
Suprimir grupo de usuarios
Modificar grupo de usuarios
Nuevo grupo de mensajera
Suprimir grupo de mensajera
Modificar grupo de mensajera
Nueva mquina
Suprimir mquina
Modificar mquina
Nueva carpeta de archivo
Nueva tarea
Suprimir tarea
Modificar tarea
Listas de aplicaciones
Dominios Web
Finalmente, podemos borrar el texto que aparece en el rea de mensajes
( Limpiar barra salida mensajes) y modificar la configuracin del Servidor
( Configuracin).
11.3.3. Servicios
Con el men Servicios podemos arrancar ( Arrancar servidores, F5) o dete-
ner ( Detener servidores, F8) todos los servicios VATP o tambin arrancar-
los y detenerlos de forma individual, bien el VATP ( Arrancar servidor o
Detener servidor), bien el http ( Arrancar servidor o Detener servidor).
Es posible tambin expulsar ( Expulsar enganche) un enganche, expulsar
( Expulsar enganches usuario) los enganches de un usuario o expulsar to-
dos los enganches (Expulsar todos los enganches).
Finalmente, tambin podemos parar y deshacer las operaciones que est
llevando a cabo una transaccin ( Deshacer transaccin).
11.3.4. Utilidades
Con el men Utilidades podemos Regenerar ndices de algunas ( Tablas
seleccionadas) o de todas ( Todas las tablas) las tablas de una aplicacin,
as como tambin Regenerar rea de datos de algunas ( Tablas seleccio-
nadas) o de todas ( Todas las tablas) las tablas de la aplicacin.
11 Servidor de aplicaciones
Limpiar barra salida mensajes
Configuracin
Arrancar servidores
Detener servidores
Arrancar servidor
Detener servidor
Expulsar enganche
Expulsar enganches usuario
Deshacer transaccin
Tablas seleccionadas
Todas las tablas
Tablas seleccionadas
Todas las tablas
498 499 VELAZQUEZ VISUAL
Tambin es posible desde esta opcin de men partir el contenedor para
que cada tabla tengo el suyo propio (Partir contenedor por tabla).
Finalmente, podemos visualizar un cuadro de dilogo (Registro de ficheros)
donde consultar el estado de los ficheros que componen la aplicacin,
agrupados por directorios.
11.3.5. Ver
Con el men Ver se pueden mostrar u ocultar las diferentes reas del Servi-
dor ( Barra del servidor, Barra de tareas y Barra de salida mensajes).
Tambin es posible desde aqu que se puedan mostrar u ocultar las dife-
rentes barras del Servidor: por una parte, la de men y la estndar junto con
la posibilidad de poder personalizarlas (Barras de herramientas), y por otra
parte, la barra situada en la parte inferior ( Barra de estado) que muestra
informacin sobre el servidor VATP, el servidor HTTP, el hilo de control y los
ficheros de las aplicaciones.
Como comentamos anteriormente, las barras de men y estndar pueden
personalizarse ( Personalizar). Asimismo, con esta opcin tambin se
pueden crear nuevas barras de herramientas.
Por ltimo, es posible visualizar en un determinado momento ( Licen-
cias) el uso que se est haciendo de la licencia, es decir, informacin re-
lativa a la IP del enganche y del socket, as como los puestos y enganches
que consume. Adems podemos ver el nmero de serie, si se tiene licen-
cia para servidor HTTP y cuntos puestos tenemos reservados para ac-
ceso va web.
Normalmente regeneraremos
en primer lugar el rea de
datos, para a continuacin
regenerar los ndices.
ADVERTENCIA
Barra del servidor
Barra de tareas
Barra de salida mensajes
Barra de estado
Personalizar
Licencias
11.3.6. Ventana
Cada aplicacin instalada en el servidor dispone de una ventana que mues-
tra su correspondiente rea de tablas. Con el men Ventana podemos or-
ganizar la disposicin de cada una de dichas ventanas ( Cascada, Mo-
saico horizontal y Mosaico vertical, Organizar iconos).
Es posible minimizar el Servidor ( Ocultar) para que desaparezca de pan-
talla. Al ocultarlo aparecer un icono en la barra de tareas de Windows. Si
el icono tiene una luz verde significa que el Servidor est a la escucha.
11 Servidor de aplicaciones
Cascada
Mosaico horizontal
Mosaico vertical
Organizar iconos
Ocultar
El servidor est a la escucha
500 501 VELAZQUEZ VISUAL
Si presenta una luz roja significa que el Servidor est parado. Para vol-
ver a mostrar el Servidor en pantalla debemos hacer doble clic sobre el
mencionado icono. Si hemos establecido en el Servidor la peticin de con-
trasea de supervisor, se solicitar una contrasea de supervisor para su
apertura.
Finalmente, podemos seleccionar qu ventana de rea de tablas corres-
pondiente a cada aplicacin instalada en el Servidor queremos mostrar
(en la figura aparecen numeradas del uno al cuatro porque sirve cuatro
aplicaciones).
11.3.7. Ayuda
La opcin de men Ayuda ( Acerca de Velzquez Server) nos permite vi-
sualizar informacin relativa a la licencia: nmero de serie, nmero de pues-
tos, si dispone o no del Servidor http, versin del Servidor, desde cundo
est funcionando y el nmero de conexiones realizadas desde entonces.
11.4 Barra de herramientas
La barra de herramientas por defecto del Servidor de aplicaciones Velz-
quez Visual contiene los siguientes botones:
El servidor est parado
Acerca de Velzquez Server
Abrir aplicacin: abre un proyecto realizado con Velzquez Visual para
que sea servido por el Motor.
Configuracin: muestra el cuadro de dilogo Configuracin que permite
modificar las propiedades del Servidor.
Arrancar servidores (F5): pone en marcha los servicios VATP y HTTP (SI
dispone de l) del Motor.
Detener servidores (F8): detiene los servicios VATP y HTTP del Servidor.
Expulsar enganche: anula el enganche que ha creado el usuario que ac-
cede a una aplicacin. Si en ese momento el cliente estuviese ejecutando
transacciones, se avisara en el Servidor sobre su existencia y si ste desea
continuar con su expulsin; si el supervisor responde afirmativamente, las
transacciones sern deshechas y el enganche expulsado. En caso de res-
puesta negativa, las transacciones seguirn su curso y el enganche no se-
r expulsado. En el caso de expulsar un enganche, el Cliente de ese en-
ganche no podr seguir trabajando con la aplicacin.
Nueva carpeta de usuarios: crea una carpeta de usuarios para poder or-
ganizar los usuarios dados de alta en el Servidor.
Suprimir carpeta de usuarios: elimina una carpeta de usuarios creada
con anterioridad.
Modificar carpeta de usuarios: permite realizar modificaciones en la car-
peta dada de alta previamente.
Nuevo usuario: crea un usuario para que pueda acceder a las aplicacio-
nes que se desee.
Duplicar usuario: el usuario que se crea tiene inicialmente las mismas
propiedades del usuario seleccionado.
Suprimir usuario: elimina un usuario creado con anterioridad.
Modificar usuario: permite realizar modificaciones en el usuario dado de
alta previamente.
Nuevo grupo: crea un grupo de usuarios. Cuando ms de un usuario va-
ya a tener acceso a las mismas aplicaciones, con los mismos estilos y con
las mismas mquinas, nos es muy til crear un grupo de usuarios. De esta
forma, no tendremos que dar de alta las aplicaciones y mquinas en las pro-
piedades de cada usuario, pues heredarn las definidas en el grupo al que
pertenezcan. Si hemos incluido un usuario en un grupo y posteriormente en
las propiedades de dicho usuario modificamos algo de lo que hereda del
grupo al que pertenece (mquinas, aplicaciones, estilos de usuarios en apli-
caciones) prevalecer lo que est establecido en las propiedades del
usuario sobre las del grupo.
11 Servidor de aplicaciones
Abrir aplicacin
Configuracin
Arrancar servidores
Detener servidores
Expulsar enganche
Nueva carpeta de usuarios
Suprimir carpeta de usuarios
Modificar carpeta de usuarios
Nuevo usuario
Duplicar usuario
Suprimir usuario
Modificar usuario
Nuevo grupo
502 503 VELAZQUEZ VISUAL
Suprimir grupo: elimina un grupo de usuarios creado con anterioridad.
Modificar grupo: permite realizar modificaciones en el grupo de usuarios
creado con anterioridad.
Nueva mquina: crea una nueva mquina, es decir, un equipo que ten-
dr acceso al Motor.
Suprimir mquina: elimina una mquina creada anteriormente.
Modificar mquina: modifica las propiedades de una mquina creada
previamente.
Barra del servidor: muestra u oculta la ventana correspondiente al rea
de configuraciones.
Barra de tareas: muestra u oculta la ventana correspondiente al rea de
tareas.
Barra de salida de mensajes: muestra u oculta la ventana correspon-
diente al rea de mensajes.
Acerca de: presenta el cuadro de dilogo Acerca de Vmotor que contie-
ne informacin acerca del motor y su licencia.
Ocultar: minimiza el Motor y lo representa con un icono situado en la ba-
rra de tareas de Windows.
11.5 Configuracin del Servidor
Como comentamos anteriormente existe en el Motor un cuadro de dilogo
llamado Configuracin que permite modificar las propiedades del Servidor.
Para abrirlo debemos pulsar el botn Configuracin (o bien ejecutar la
opcin de men Editar/Configuracin).
En primer lugar vamos a ir comentando las distintas propiedades del cua-
dro de dilogo Configuracin, para posteriormente indicar cul es la confi-
guracin bsica del Motor.
Suprimir grupo
Modificar grupo
Nueva mquina
Suprimir mquina
Modificar mquina
Barra del servidor
Barra de tareas
Barra de salida de mensajes
Acerca de
Ocultar
Configuracin
11.5.1. Pestaa Estilos
Poner el servidor a la escucha al ejecutarse el programa: cuando marcamos
esta opcin, la prxima vez que iniciemos el Servidor pondr en marcha los
servicios VATP y HTTP y se pondr a la escucha, oculto en la barra de ta-
reas de Windows representado con el icono .
Fichero LOG activo: si activamos esta opcin se generar un fichero .LOG
en el que se irn almacenando todas las operaciones realizadas por los
usuarios en las aplicaciones abiertas en el Servidor. Esta opcin es acon-
sejable que la activemos solamente en caso de estar realizando algn tipo
de depuracin para detectar algn posible error en la aplicacin.
Pedir contrasea de supervisor para abrir: si hemos activado la opcin
Poner el servidor a la escucha al ejecutarse el programa, para poder abrir
el Servidor o ejecutar cualquier opcin del men de contexto desde la
barra de tareas de Windows se pedir una contrasea, que debe ser la
de cualquiera de los usuarios que hayan sido dados de alta como super-
visores.
Enviar mensajes a los supervisores: si activamos esta opcin, el supervisor
de la aplicacin recibir a travs de un telegrama (un pequeo cuadro de
dilogo que contiene un mensaje) aquellos mensajes que se hayan definido
para esa licencia en el Servidor de licencias (se ampliar este concepto ms
adelante en el apartado dedicado a dicha aplicacin). Tambin recibir un
telegrama con los mensajes que haya en los procesos de cualquier aplica-
cin que ejecute un cliente.
11 Servidor de aplicaciones
Velzquez - Servidor de apli-
caciones
504 505 VELAZQUEZ VISUAL
Desbloqueo de usuarios automtico: debemos activar esta opcin si quere-
mos desbloquear de forma automtica las cuentas de usuarios que han si-
do bloqueadas por haber superado el nmero mximo de intentos de es-
pecificacin de usuario/contrasea. Si esta opcin est activada deber es-
pecificarse el nmero de minutos que deben transcurrir para desbloquear-
las, y que por defecto son 10 minutos. Si esta opcin est activada y se cie-
rra el Servidor, al volver a ejecutarlo las cuentas bloqueadas sern desblo-
queadas automticamente.
Nmero mximo de intentos usuario/contrasea: aqu se especifica el n-
mero mximo de intentos de especificacin de usuario/contrasea que po-
dr efectuar un usuario para ejecutar una aplicacin. Una vez excedido ese
nmero de intentos, la cuenta ser bloqueada. La cuenta podr ser desblo-
queada de forma manual accediendo a las propiedades del usuario y de-
sactivando la casilla Cuenta bloqueada o de forma automtica activando la
opcin anterior (Desbloqueo de usuarios automtico).
Cierre del servidor: se puede programar el cierre del servidor de dos formas
diferentes:
Cierre automtico a una hora: si activamos esta propiedad tendremos que
seleccionar en la lista desplegable la hora a la que el servidor ser cerrado.
Al llegar la hora especificada el servidor ser cerrado.
Cerrar servidor al finalizar la sesin de Windows: si activamos esta opcin
no har falta cerrar el Motor antes de cerrar la sesin de Windows, al ce-
rrarla ser el sistema quien se encargue de cerrar el Servidor.
11.5.2. Pestaa VATP
Directorio del servidor: indica el directorio donde se encuentra instalado el
Servidor de aplicaciones Velzquez Visual.
Directorio para Copias de seguridad: directorio donde van a ser almacena-
das las copias de seguridad de las aplicaciones.
Enganches sin accesos expiran en: cuando un usuario se conecta con el
Servidor y solicita una aplicacin se genera un enganche. A medida que el
usuario va ejecutando la aplicacin, se van generando diferentes accesos
de dicho enganche en el Servidor. En esta pestaa se indica el tiempo que
ha de transcurrir para que un enganche sin accesos sea dado por muerto
(en horas y/o minutos). Una vez transcurrido este tiempo, un usuario cuyo
enganche ha sido extinguido no podr seguir trabajando con la aplicacin.
Por ejemplo, si se consulta una ficha, aparecern los controles de edicin
vacos, rejillas vacas, etc.
Ver nombre completo en enganches: si activamos esta opcin, al consultar
enganches veremos el nombre completo del usuario. Si no est activada
veremos el nombre corto.
11.5.3. Pestaa HTTP
Directorio de la Web: directorio donde se encuentran las pginas web ex-
ternas a los proyectos de Velzquez Visual.
Archivo Html por defecto: pgina web que se presentar por defecto cuan-
do se conecte desde un navegador de Internet con el Servidor. sta debe
11 Servidor de aplicaciones
Todos los archivos que
estn en ese directorio son
descargables, as que
debemos tener en cules
tenemos all. Adems, por
defecto, est configurado
para que sea el directorio
donde est instalado el
motor: C:\Archivos de
programa\Atica\Velazquez\
program, as que si no lo
cambiamos, se podrn
descargar todos los archivos
que all se encuentran.
Debemos tener cuidado de
no dejar all copias de los
mapas, u otros archivos
sensibles.
ADVERTENCIA
506 507 VELAZQUEZ VISUAL
ser un archivo HTML, no puede ser una pgina web interna de una aplica-
cin Velzquez Visual. Si se especifica la pgina Html en este parmetro,
para acceder a ella desde cualquier navegador de Internet simplemente
bastar con escribir http:// seguido de la IP o el nombre de Servidor.
% Calidad de imgenes: Velzquez Visual guarda las imgenes al 100% de
calidad, pero con esta opcin podemos indicar al Motor a qu calidad mos-
trar las imgenes cuando las tenga que servir.
Puerto de escucha: el puerto estndar para la escucha para HTTP es el 80, y
ste es el que se aplica por defecto al servidor HTTP. Si queremos modificar
el nmero de puerto debemos especificarlo en este parmetro. No es posible
modificar el puerto de escucha si el Servidor HTTP est arrancado; debemos
pararlo previamente. Si hemos cambiado el nmero de puerto del Servidor
HTTP, para poder acceder desde un explorador web a las pginas del mismo,
en la especificacin de la URL se deber incluir el nmero de puerto a travs
del cual debe conectarse precedido de dos puntos (:). Por ejemplo, se ha
cambiado el nmero de puerto HTTP por el 81; para que un usuario pueda co-
nectarse con este Servidor a travs de un explorador web, en la barra de di-
recciones del explorador tendra que escribir: http://IP_SERVIDOR:81/
Reservar puesto vatp para la web: los enganches va web no consumen
puestos concurrentes, pero, si se ejecutan procesos va web, es necesario
que exista un enganche libre; si es el caso, puede activar esta opcin para
que el servidor siempre deje un enganche libre.
11.5.4. Pestaa iRunner
nicamente ser necesario
reservar puestos VATP
cuando desde una pgina
web se lance un proceso
del mapa. Si desde nuestra
pgina web no se ejecutan
procesos, es decir, al
servidor slo se realizan
peticiones de otros
elementos de Velzquez
Visual, no necesitamos
reservar el puesto:
Bsquedas, Pginas Html,
Componentes Html. La
razn de reservar un puesto
VATP es que el servidor
necesita controlar las
transacciones que el
proceso realice, y esto
nicamente se puede hacer
a travs del protocolo VATP.
ADVERTENCIA
Cada versin del Navegador Velzquez Visual (iRunner) se corresponde con
una versin determinada del Servidor. En este apartado indicaremos la ver-
sin del Navegador que se corresponde con la del Servidor (y no la del ma-
pa). De esta forma, cuando un usuario se conecte con el Servidor desde un
Navegador de una versin anterior, se le presentar un mensaje informan-
do que tiene una versin antigua de Navegador, y le da la posibilidad de ac-
tualizarlo automticamente. Es decir, el Servidor podr actualizar el Nave-
gador del cliente cuando ste se conecte. Podemos usar versiones del na-
vegador superiores a la del servidor sin ningn problema.
11.5.5. Pestaa Licencia
Si vamos a realizar el arranque del Servidor utilizando el Servidor de licen-
cias deberemos indicar previamente en esta pestaa la correspondiente
clave de licencia para la prxima vez que se arranque el Motor.
11.5.6. Configuracin bsica
La configuracin bsica del Motor consiste en activar, en la pestaa Estilos,
las opciones Poner el servidor a la escucha al ejecutarse el programa y Ce-
rrar servidor al finalizar sesin de Windows y desactivar la opcin de Fiche-
ro LOG activo.
11 Servidor de aplicaciones
Si utilizamos un acceso
directo a una aplicacin con
el iRunner debemos
comprobar, tras la
actualizacin de ste, que el
acceso directo apunte al
navegador actualizado y no
al antiguo. En el caso de
que sobreescribamos sobre
el anterior no debera haber
problema.
ADVERTENCIA
508 509 VELAZQUEZ VISUAL
11.6 rea de configuraciones
11.6.1. Pestaa Aplicaciones
En esta pestaa aparecen representadas las aplicaciones Velzquez Visual
que hemos instalado en el Servidor. Por defecto el Servidor tiene instaladas
dos aplicaciones que se vern ms adelante: el Historial del servidor y el
Servidor de licencias.
La informacin de las aplicaciones abiertas es guardada por el servidor en
el archivo fuvm.vuf en el directorio en el que est instalado, y del cual es
conveniente guardar copias de seguridad en caso de modificaciones acci-
dentales, reinstalacin del servidor, etc.
Instalacin de una aplicacin
Vamos a ver el proceso de instalacin a travs del siguiente ejemplo:
Ejemplo: Instalacin de la aplicacin Agenda.map
Queremos instalar en un Servidor la aplicacin Agenda.map. Para ello se-
guiremos los siguientes pasos:
Pulsamos el botn Abrir aplicacin (o se ejecuta la opcin de men Apli-
caciones > Abrir.
A continuacin seleccionamos, utilizando el cuadro de dilogo Abrir, el
nombre del mapa de Velzquez Visual que queremos instalar en el Ser-
vidor.
e
Abrir aplicacin
Una vez se pulsa el botn Abrir, la aplicacin aparecer representada en el
rea de configuraciones del Motor, dentro de la pestaa Aplicaciones.
Propiedades de una aplicacin
Vamos a ver las propiedades utilizando el mapa que instalamos en el apar-
tado anterior.
Ejemplo: Visualizar las propiedades de la aplicacin Agenda.map
Queremos ver las propiedades en un Servidor de la aplicacin Agenda.map.
Para ello seguimos los siguientes pasos:
Con la aplicacin agenda seleccionada, pulsamos el botn derecho del ra-
tn, y seleccionamos en el men contextual la opcin Propiedades apli-
cacin (o seleccionando la opcin de men Aplicaciones/Propiedades) pa-
ra mostrar el cuadro de dilogo Propiedades de la aplicacin:
11 Servidor de aplicaciones
e
Propiedades aplicacin
510 511 VELAZQUEZ VISUAL
Dicho cuadro de dilogo muestra las propiedades siguientes:
Cdigo: nmero de la aplicacin abierta.
Nombre, Versin, Aplicacin desarrollada por y N Licencia: son las especi-
ficadas para dicho mapa en el cuadro de dilogo Propiedades proyecto del
Editor de Proyectos de Velzquez Visual).
Alias: ser el que se presente al usuario en la lista de aplicaciones al conec-
tar el Navegador con el Servidor. Si no se indica ninguno, la aplicacin apa-
recer en la lista de aplicaciones con lo indicado en la propiedad Nombre.
Incluir en la lista de aplicaciones por defecto: si marcamos esta propiedad
la aplicacin figurar en la lista de aplicaciones que se presenta al realizar
la conexin desde el Navegador con el Servidor.
N puestos: indica cuntos puestos estn utilizando la aplicacin.
11.6.2. Pestaa Usuarios
En esta pestaa aparecen los Usuarios (e incluidas aqu las Carpetas de
usuarios), los Grupos de usuarios, los Grupos de mensajera y las Mquinas
que estn creadas en el Motor.
e
Por defecto aparece creado, por un lado, un usuario denominado Supervi-
sor, y por otro lado tambin una mquina denominada Toda la red.
En este apartado se va a crear en primer lugar una Carpeta de usuarios y en
segundo lugar una Mquina.
Las configuraciones de usuarios y grupos de usuarios se guardan en el ar-
chivo fuvm.vuf en el directorio del servidor, por lo que es conveniente hacer
copias de seguridad de este archivo de forma que en caso de modificacio-
nes accidentales, reinstalacin del servidor, etc., podamos hacer uso de es-
te archivo y recuperar los datos.
Creacin de una Carpeta de usuarios
Se va a realizar este proceso utilizando para ello el siguiente ejemplo:
Ejemplo: Creacin de la carpeta Supervisores
Vamos crear una carpeta de usuarios para introducir en ella a dos usuarios
que se crearn posteriormente. Los pasos a realizar son los siguientes:
Dentro del rea de configuraciones pinchamos con el botn izquierdo del ratn
sobre la pestaa Usuarios. Aparecer, creado por defecto, el usuario Supervisor.
Entonces pulsamos el botn Nueva carpeta de usuarios de la barra de
herramientas (o bien usamos la opcin de men Editar/Carpetas de usua-
rios/Nueva), crendose automticamente la carpeta.
Si pulsamos el botn Modificar carpeta de usuarios de la barra de he-
rramientas (o bien seleccionando la opcin de men Editar/Carpetas de
usuarios/Modificar) se mostrar el cuadro de dilogo Carpeta de usuarios en
11 Servidor de aplicaciones
e
Nueva carpeta de usuarios
Modificar carpeta de usuarios
512 513 VELAZQUEZ VISUAL
el cual podemos modificar el nombre de la carpeta. Dicho nombre lo susti-
tuimos por Supervisores.
Al pulsar el botn Aceptar, la nueva carpeta aparecer representada con el
nombre asignado en el Servidor.
Creacin de una mquina
Una mquina engloba aquellos equipos que tendrn acceso al Servidor. Va-
mos a explicar los pasos a realizar utilizando un nuevo ejemplo.
Ejemplo: Creacin de una mquina
Vamos a crear una nueva mquina que va a ser la que se asignar al De-
partamento de Administracin. Dicho departamento forma una red con
equipos entre la IP 100.100.120.0 y la IP 100.100.120.255. Los pasos a rea-
lizar son los siguientes:
Dentro de la pestaa Usuarios pulsamos el botn Nueva mquina de la
barra de herramientas (o tambin podemos seleccionar la opcin de men
Editar/Mquinas/Nueva...). Esto mostrar el cuadro de dilogo Mquina.
En las propiedades del cuadro de dilogo escribiremos lo siguiente:
Nombre: en nuestro ejemplo Administracin.
Nombre completo: es una propiedad opcional. Escribimos Departamento
de Administracin.
e
e
Nueva mquina
11 Servidor de aplicaciones
Ip: si vamos a crear una sola mquina para una sola IP se rellenara nica-
mente el valor Inicial. Como en el ejemplo mencionamos un rango de IPs,
marcamos la opcin Varios y rellenamos como valor Inicial 100.100.120.0 y
como valor Final 100.100.120.255.
Al pulsar el botn Aceptar aparecer representada esa mquina en el apar-
tado Mquinas de la pestaa Aplicaciones:
11.6.3. Pestaa Enganches
Cuando un usuario abre una aplicacin con el Navegador de Velzquez Vi-
sual se genera un enganche con el Servidor.
e
514 515 VELAZQUEZ VISUAL
Adicionalmente, cada peticin que el usuario hace al Servidor durante la
ejecucin de la aplicacin generar un acceso.
Cada vez que se establezca un enganche o se finalice, ste ser dado de
alta automticamente en la aplicacin del Historial del Servidor.
Dentro del rea correspondiente a esta ventana podemos ver informacin
relativa a:
Aplicacin: nombre de la aplicacin abierta en el enganche.
Usuario: si la aplicacin tiene activada la peticin de usuario se mostrar el
nombre del mismo.
Mquina: IP de la mquina desde la que el usuario est ejecutando la apli-
cacin.
Inicio: da de la semana y hora en que el enganche ha sido establecido.
Acceso: hora del ltimo acceso realizado en dicho enganche.
Transac.: indica el nmero de transacciones que est realizando el enganche.
11.6.4. Pestaa Transacciones
Las transacciones son operaciones que implican escritura en disco. La ar-
quitectura que utiliza el Servidor funciona transaccionalmente a dos niveles
diferentes:
Si durante la ejecucin de una transaccin generada por un usuario se pro-
duce una finalizacin anmala de la misma, ser deshecha solamente esa
transaccin, no afectar al resto de los clientes.
Si esto ocurre en el propio Servidor, se deshar todas las que estuvieran
pendientes de finalizar.
Si en la mquina donde est instalado el Servidor se hubiese producido una
terminacin anmala del mismo mientras se estuviesen ejecutando tran-
sacciones sobre una aplicacin, al volver a arrancar el Servidor, el progra-
ma advertir sobre la existencia de transacciones pendientes de finalizar y
da opcin al supervisor para reconstruir las bases de datos de la aplicacin.
En el caso de que no las reconstruya se indicar en la lista de aplicaciones
que la aplicacin tiene transacciones pendientes de finalizar con el icono
junto al nombre de la misma. Para reconstruir las bases de datos bas-
tar con que seleccionemos la aplicacin en la lista de aplicaciones y eje-
cutemos la opcin de men Aplicaciones/Reiniciar.
Por otro lado, supongamos un proceso que transacciona pero que en la
transaccin no se realizan operaciones durante ms de cuatro minutos. En
este caso se entender que el cliente que lo lanz est colgado o no res-
ponde, y la transaccin ser deshecha. Un ejemplo es un proceso en el que
se abra un formulario: si ste permanece abierto durante ms de 4 minutos,
se terminar el proceso y se deshar la transaccin efectuada.
Esta arquitectura cliente-servidor incluye un potentsimo sistema de control
de bloqueos. Por ejemplo, desde dos usuarios se ejecutan sendos proce-
sos durante la ejecucin de los cuales se produce una colisin (en los dos
se intenta bloquear la misma ficha), uno continuar con la transaccin y la
del otro ser deshecha por el sistema, que ejecutar una serie de reinten-
tos, tras los cuales, si no ha sido posible continuarla, avisar al usuario si
quiere reintentar y, en caso afirmativo, la transaccin permanecer a la es-
pera hasta que finalice la del otro usuario y, una vez finalizada, la lanzar de
nuevo.
Los bloqueos son realizados a nivel de registro, no a nivel de tabla.
En esta pestaa Transacciones podremos obtener informacin sobre:
Ttulo Transaccin: nombre de la transaccin que est siendo ejecutada.
Aplicacin: nombre de la aplicacin sobre la que se est ejecutando la tran-
saccin.
Usuario: nombre del usuario que ha disparado la transaccin.
Inicio: hora en que la transaccin ha comenzado.
Acceso: hora en la que se ha efectuado el ltimo acceso al Servidor.
N de operaciones realizadas: nmero de operaciones realizadas en la tran-
saccin.
11 Servidor de aplicaciones
Transacciones pendientes de
finalizar
516 517 VELAZQUEZ VISUAL
Cada nueva transaccin que reciba el Servidor ser presentada en la pri-
mera posicin de la lista de transacciones. Las transacciones tendrn un
icono diferente segn su estado. Los posibles estados son:
La transaccin se est ejecutando .
La transaccin est fuera de control y ha entrado otra en el Servidor con
la que colisiona. El Servidor rechaza la que est fuera de control y con-
tina la ejecucin de la nueva .
La transaccin ha finalizado correctamente .
La transaccin ha sido deshecha .
Las notificaciones sobre estado de las transacciones que aparecen en esta
pestaa no desaparecen inmediatamente al concluir, sino que permanecen
cierto tiempo en pantalla para que el Administrador del sistema tenga tiem-
po de monitorizarlas. Una vez transcurrido dicho tiempo desaparecern de
la lista de transacciones.
Es posible abortar manualmente una transaccin que est siendo ejecuta-
da. Para ello la seleccionamos en la pestaa de Transacciones y ejecutamos
la opcin Deshacer transaccin del men de contexto que se presenta al
hacer clic con el botn derecho del ratn sobre la misma:
Nos pedir confirmacin antes deshacerla.
11.6.5. Pestaa Archivos
Motor, adems de servir aplicaciones de Velzquez Visual y pginas web,
tambin funciona como servidor de disco, es decir, podemos compartir car-
petas que sern accesibles a travs del Explorador de equipos del Navega-
dor Velzquez Visual.
Para crear una nueva carpeta compartida pulsamos sobre el rea corres-
pondiente a esta pestaa con el botn derecho del ratn y selecciona-
mos la opcin Nueva... del men contextual que se muestra. Al se-
leccionar dicha opcin se presenta el cuadro de dilogo Compartir car-
peta de archivo.
Transaccin ejecutndose
Transaccin: colisin
Transaccin finalizada correc-
tamente
Transaccin deshecha
Nueva
Los parmetros a cumplimentar son:
Nombre de la carpeta compartida: nombre que va a tener la carpeta en el
cliente cuando se conecte con el SDV (Servidor de Disco Velzquez).
Senda: ruta de la carpeta a compartir. Si pulsamos el botn se mostra-
r el cuadro de dilogo Seleccione carpeta a compartir para seleccionar di-
cha ruta y la correspondiente carpeta:
11 Servidor de aplicaciones
Examinar
518 519 VELAZQUEZ VISUAL
Permisos: permisos que van a tener los usuarios sobre las carpetas. Para
aadir un permiso pulsamos el botn Agregar, para seleccionar en pri-
mer lugar un grupo de usuarios. Una vez seleccionado aparecer la prime-
ra carpeta compartida.
Por defecto, el tipo de acceso por parte de los usuarios es de Control total,
aunque es posible modificar estos valores.
La informacin sobre la configuracin de las carpetas compartidas se guar-
da en el archivo carcom.vuf en la carpeta en que est instalado el servidor.
Por tanto, es importante realizar copias de seguridad de este archivo para,
en caso de modificaciones accidentales, reinstalacin del servidor, etc., po-
der recuperar la configuracin guardada en este archivo.
Vamos a realizar a continuacin un ejemplo para crear una nueva carpeta
compartida en el Servidor:
Ejemplo: Creacin de una carpeta compartida
Vamos a crear una carpeta compartida en el Servidor denominada Admi-
nistracin y que va a estar en la senda c:\Agenda. Los pasos a realizar son
los siguientes:
Dentro de la pestaa Archivos pulsamos con el botn derecho del ratn so-
bre el rea blanca y se selecciona la opcin del men contextual Nueva... (o
bien la opcin de men Editar/Carpetas de archivos/Nueva...) para que se
muestre el cuadro de dilogo Compartir carpeta de archivos.
En dicho cuadro de dilogo se definen las siguientes propiedades:
Nombre de la carpeta compartida: Administracin.
Senda: pulsamos el botn para mostrar el cuadro de dilogo Seleccio-
ne carpeta a compartir y elegimos la senda c:\\Agenda (si no se tiene esta
carpeta creada se puede crear una nueva carpeta en Windows para poder
asignarla en este apartado).
Al pulsar el botn Aceptar dicha carpeta aparecer en la lista de carpetas
de la pestaa Archivos.
e
Agregar
Examinar
11.7 Configuracin de usuarios
Como hemos comentado en un apartado anterior, la primera vez que eje-
cutamos el Servidor se crea un usuario Supervisor por defecto. Si queremos
eliminarlo debemos crear previamente otro usuario antes de hacerlo. En el
rbol de usuarios el Supervisor es identificado por el icono Supervisor.
Para crear un usuario pinchamos con el botn izquierdo del ratn sobre la
pestaa Usuarios. Dentro de la carpeta Usuarios aparecer creado por de-
fecto el usuario Supervisor.
Pulsamos el botn Nuevo usuario (o bien seleccionamos la opcin de
men Editar/Usuarios/Nuevo...) para que se muestre el cuadro de dilogo
Usuario.
11 Servidor de aplicaciones
Supervisor
Nuevo usuario
520 521 VELAZQUEZ VISUAL
Las propiedades de dicho cuadro de dilogo son las siguientes:
Nombre: nombre que deber escribir el usuario en la ventana de peticin de
usuario que se presenta al ejecutar una aplicacin de Velzquez Visual.
Nombre completo: nombre completo de dicho usuario.
Contrasea: contrasea que deber escribir el usuario en la ventana de pe-
ticin de usuario que se presenta al abrir una aplicacin Velzquez Visual
desde el Navegador.
Repetir contrasea: confirmacin de la contrasea escrita en el parmetro
anterior.
Carpeta: si hemos creado carpetas de usuarios es posible seleccionar aqu
la carpeta en la que incluiremos al usuario.
Estilos:
Supervisor: activaremos este estilo si deseamos que el usuario sea Super-
visor. El Supervisor puede, por ejemplo, reconstruir el sistema, crear y mo-
dificar otros usuarios, abrir el servidor, etc.
Desconfiar: si a un usuario le marcamos esta opcin, el Servidor crear un
LOG independiente con las operaciones que ste vaya realizando al ejecu-
tar las aplicaciones. De esta manera, el supervisor del sistema podr vigilar
todos sus movimientos. En el rbol de usuarios, el que tenga activado este
estilo ser identificado por el icono Desconfiar. Al acceder a la pestaa
de enganches, si existe uno de un usuario en el que se desconfa, se mos-
trar junto al enganche el icono Desconfiar.
Cuenta desactivada: esta opcin nos permite desactivar la cuenta de un
usuario sin que para ello tengamos que eliminarlo. En el momento que de-
sactivemos esta opcin, el usuario podr acceder de nuevo a las aplicacio-
nes del Servidor.
Cuenta bloqueada: si un usuario intenta abrir una aplicacin con una con-
trasea errnea, tantas veces como se haya especificado en el cuadro de
dilogo Configuracin, automticamente el Servidor bloquear dicha cuen-
ta. Cuando esto ha ocurrido, queda ya de mano del supervisor del sistema
el desbloquearla.
Debe cambiar contrasea en siguiente conexin: si activamos este estilo, la
siguiente vez que el usuario se conecte con el Servidor, se le avisar que
cambie su contrasea por una nueva.
La contrasea nunca caduca: si activamos esta opcin, la contrasea asig-
nada al usuario nunca caducar; si no la activamos, se entender que sta
caducar el da y la hora especificados en las opciones de inicio.
Caducidad cuenta:
Esta opcin no puede ser
activada por el Supervisor
del sistema, sino que es el
servidor el que la activa.
Pero el Supervisor s puede
desmarcarla para
desbloquear la cuenta.
ADVERTENCIA
Desconfiar
Desconfiar
Tiene caducidad: si queremos establecer una fecha de caducidad a la cuen-
ta del usuario, bastar con que activemos esta opcin y especifiquemos la
fecha y hora en que sta caducar.
Enganches simultneos:
Sin lmite: cada vez que el usuario pide una aplicacin al Servidor genera un
enganche. Si activamos esta propiedad el usuario podr generar varios en-
ganches simultneos.
N: si no activamos la opcin Sin lmite especificaremos en este parmetro
el nmero de enganches simultneos permitidos al usuario.
El cuadro de dilogo Usuarios presenta en la parte inferior una serie de pes-
taas. Que son las siguientes:
Pestaa Grupos: si hemos creado grupos de usuarios seleccionaremos
el grupo o grupos donde queremos incluir al usuario. Para seleccionar un
grupo de usuarios pulsaremos el botn Aadir grupo. Se presentar un
men desplegable con los grupos de usuarios disponibles para as selec-
cionar el deseado.
Un usuario puede estar vinculado a varios grupos.
Si queremos quitar al usuario de un grupo determinado, seleccionaremos el
grupo en la lista y pulsaremos el botn Quitar grupo.
En el apartado siguiente veremos cmo crear un Grupo de usuarios.
Pestaa Mensajera: desde el Navegador Velzquez Visual un usuario
puede enviar Telegramas (mensajes) al resto de los usuarios. Solamente po-
dr enviar telegramas a usuarios pertenecientes al mismo grupo o grupos
de mensajera que l.
Si hemos creado grupos de mensajera seleccionaremos el grupo o grupos
donde incluiremos al usuario. Para seleccionar un grupo de mensajera pul-
saremos el botn Aadir grupo de mensajera. Se presentar un men
desplegable con los grupos de mensajera disponibles para poder seleccio-
nar el deseado.
Un usuario puede estar vinculado a varios grupos de mensajera.
Si queremos quitar al usuario de un grupo de mensajera determinado, se-
leccionar el grupo en la lista y pulsar el botn Quitar grupo de mensa-
jera.
Pestaa Aplicaciones: en este apartado seleccionaremos la aplicacin o
aplicaciones a las que el usuario podr tener acceso. Si hemos activado al
usuario la propiedad Supervisor, automticamente ser asignado como
usuario autorizado de la aplicacin del Historial del servidor aunque sta no
aparecer en la lista de aplicaciones del mismo.
11 Servidor de aplicaciones
Grupos
Aadir grupo
Quitar grupo
Mensajera
Aadir grupo de mensajera
Quitar grupo de mensajera
Aplicaciones
522 523 VELAZQUEZ VISUAL
Al pulsar el botn Agregar se presenta un men desplegable con las
aplicaciones disponibles abiertas en el Servidor en las que hayamos activa-
do la peticin de usuario. Al seleccionar la aplicacin deseada sta apare-
ce en la lista de aplicaciones del usuario.
Con el botn Quitar se suprime la aplicacin seleccionada de entre las
que aparecen en la lista de aplicaciones del usuario.
El botn Propiedades nos permite establecer los permisos que el usua-
rio tendr en la aplicacin seleccionada. Para ello debemos seleccionar la
aplicacin en la lista y pulsar este botn. Se presentar el cuadro de dilo-
go Permiso:
Este cuadro de dilogo tiene las siguientes propiedades:
Privilegio: nivel de privilegio del usuario en la aplicacin.
Grupo: los grupos de usuarios de una aplicacin son necesarios cuando en
el proyecto de Velzquez hemos creado variables globales con la propiedad
Por grupos de usuarios activada. Esta propiedad permite que, en tiempo de
ejecucin, la variable tenga un valor diferente para cada grupo. Pues bien,
en este parmetro simplemente habr que escribir un nmero, que ser in-
dicativo del grupo al que pertenecer dicho usuario. Obviamente, dicho n-
mero no puede ser superior al nmero mximo de grupos de usuarios defi-
nido en el proyecto de Velzquez.
Men inicial: men inicial de la aplicacin para dicho usuario.
Perfil: existe un producto, el Editor de Personalizaciones Velzquez Visual,
que permite personalizar y crear informes y dibujos en una aplicacin de Ve-
En el Navegador existen
ciertas opciones de listas ya
preprogramadas que estarn
activadas o desactivadas
segn el nivel de privilegio
de los usuarios; stas son:
Modificar campo: para que
est activa el usuario deber
tener un nivel de privilegio
igual o superior a 92.
Modificar campo si: para
que est activa el usuario
deber tener un nivel de
privilegio igual o superior a 92.
Fundir fichas: para que est
activa el usuario deber
tener un nivel de privilegio
igual o superior a 92.
Exportar ASCII: para que
est activa el usuario deber
tener un nivel de privilegio
igual o superior a 90.
ADVERTENCIA
Agregar
Quitar
Propiedades
lzquez Visual. Si hemos creado alguna personalizacin aparecer listada
en el combo box. Por tanto, cada usuario puede tener sus propios informes
y dibujos personalizados.
A cada usuario de la aplicacin slo le podemos asignar una personaliza-
cin, pero una misma personalizacin puede ser asignada a diferentes
usuarios.
En esta propiedad seleccionamos en el combo box la personalizacin que
se quiere asignar al usuario.
A partir de este momento dicho usuario tendr a su disposicin tanto los di-
bujos e informes que hayamos personalizado como los que hayamos aa-
dido especficamente para la personalizacin asignada.
Estilos: si en el proyecto de Velzquez Visual hemos creado estilos de usua-
rios, stos aparecern en este control. A la izquierda de cada estilo de usua-
rio se incluye una casilla de verificacin que permitir activarlo o desacti-
varlo. Con los botones Marcar Todos y Desmarcar todos se puede, respec-
tivamente, marcar o desmarcar todos los estilos de la aplicacin.
Pestaa Mquinas: si hacemos doble clic sobre el rea correspondien-
te a esta pestaa se presentar el cuadro de dilogo Mquinas autorizadas,
que muestra todas las mquinas que estn creadas en el Servidor:
11 Servidor de aplicaciones
Si hemos creado
personalizaciones durante la
ejecucin de la aplicacin,
hay que cerrar la aplicacin
y reiniciarla para que los
cambios estn disponibles
para los usuarios.
ADVERTENCIA
Mquinas
524 525 VELAZQUEZ VISUAL
Para seleccionar una mquina debemos activar la casilla de verificacin que
se encuentra junto al nombre de la misma.
La mquina o mquinas seleccionadas aparecern en la lista de mquinas
autorizadas del usuario.
Para desasignar una mquina a un usuario haremos doble clic sobre ella en
las propiedades del usuario y desactivaremos la casilla de verificacin co-
rrespondiente.
Pestaa Observacin: en esta pestaa es posible escribir cualquier co-
mentario que queramos realizar sobre el usuario.
A continuacin realizaremos un ejemplo para ver la configuracin de
usuarios.
Ejemplo: Creacin de dos usuarios
Vamos a crear dos nuevos usuarios que deben acceder a la aplicacin
Agenda.map instalada anteriormente y que forman parte del Departamento
de Administracin. Los pasos a realizar son los siguientes:
Dentro de la pestaa Usuarios pulsamos el botn Nuevo usuario de la
barra de herramientas (o bien seleccionamos la opcin de men
Editar/Usuarios/Nuevo..) para que se muestre el cuadro de dilogo Usuario.
En l rellenamos los siguientes datos correspondientes al primer usuario.
Nombre: Usuariouno.
Nombre completo: El primer usuario.
La contrasea nunca caduca: Activamos esta opcin.
Enganches simultneos: Sin lmite.
e
Observacin
Nuevo usuario
Seleccionamos la pestaa Aplicaciones y pulsando el botn Agregar es-
cogemos la aplicacin Agenda. Dicha aplicacin aparecer en la lista de
aplicaciones del usuario.
Al hacer doble clic sobre la aplicacin para que aparezca el cuadro de di-
logo Permiso rellenamos sus propiedades con los siguientes datos:
Privilegio: 90
Grupo: 0
Men inicial: Men General
Perfil: .Ninguno
11 Servidor de aplicaciones
e
Agregar
526 527 VELAZQUEZ VISUAL
A continuacin seleccionamos la pestaa Mquinas y en su correspondien-
te ventana hacemos doble clic para que aparezca el cuadro de dilogo M-
quinas autorizadas a: Usuariouno. En dicho cuadro se marca la casilla co-
rrespondiente a la mquina denominada Administracin. La mquina selec-
cionada aparecer en la lista de mquinas del usuario:
De esta manera el nuevo Usuariouno tiene autorizacin para acceder a la
aplicacin Agenda utilizando la mquina Administracin (que tiene el rango
de IPs vista en el apartado de Creacin de mquina).
Seguidamente creamos el segundo usuario. Podemos utilizar el mismo pro-
cedimiento utilizado para crear el primer usuario. Pero para hacerlo ms r-
pido esta vez optamos por seguir otro camino:
Con el usuario Usuariouno del rbol Usuario de la pestaa Usuarios selec-
cionado, pulsamos el botn Duplicar usuario de la barra de herramien-
tas (o bien seleccionamos la opcin de men Editar/Usuarios/Duplicar). De
esta manera se presenta de nuevo el cuadro de dilogo Usuario, pero en es-
e
Duplicar usuario
te caso, al duplicar el usuario, tiene la particularidad de que ya hereda las
propiedades del usuario duplicado. Por lo tanto, slo tenemos que definir
las propiedades de usuario y contrasea:
11.8 Configuracin de grupos de usuarios
Los grupos de usuarios se utilizan en los casos en que ms de un usuario
vaya a tener acceso a las mismas aplicaciones, con los mismos estilos y
con las mismas mquinas.
De esta forma, no tendremos que dar de alta las aplicaciones y mquinas
en las propiedades de cada usuario, pues heredarn las definidas en el gru-
po al que pertenezcan. Si hubisemos incluido un usuario en un grupo y
posteriormente en las propiedades de dicho usuario se modifica algo de lo
que hereda del grupo al que pertenece (mquinas, aplicaciones, estilos de
usuarios en aplicaciones) prevalecer lo que est establecido en las pro-
piedades del usuario sobre las del grupo.
Asimismo, los grupos de usuarios tambin son necesarios cuando vayamos
a utilizar el Servidor de disco de Velzquez Visual.
11 Servidor de aplicaciones
e
528 529 VELAZQUEZ VISUAL
Para crear un nuevo Grupo de usuarios debemos pulsar, desde la pestaa
Usuarios, el botn Nuevo grupo de la barra de herramientas. Se mos-
trar el cuadro de dilogo Grupo de usuarios.
Dicho cuadro de dilogo tiene las siguientes propiedades:
Nombre: nombre que se le va a asignar al grupo de usuarios.
Pestaa Usuarios: aqu se irn seleccionando uno a uno los usuarios que van
a formar parte del grupo. Para aadir un usuario se pulsa el botn Nuevo
usuario. Se presentar el cuadro de dilogo Seleccin de miembros del grupo:
En el panel izquierdo aparecer la lista de usuarios seleccionables. Para se-
leccionar uno haremos doble clic sobre l. Desaparecer del panel izquier-
Nuevo grupo
Usuarios
Nuevo usuario
do y se mostrar en el derecho, que es el panel de usuarios seleccionados
en el grupo.
Pestaa Aplicaciones: tiene la misma funcionalidad que la pestaa Apli-
caciones vista en el apartado dedicado a los usuarios.
Pestaa Mquinas: tiene la misma funcionalidad que la pestaa Mqui-
nas vista en el apartado dedicado a los usuarios.
Pestaa Archivos: en el rea correspondiente a esta pestaa podemos
definir las diferentes carpetas compartidas del Servidor de disco a las que
puede acceder el grupo de usuarios. Para ello debemos pulsar el botn
Agregar, que mostrar un men desplegable con las carpetas compartidas
por el Servidor. Al seleccionar la carpeta deseada sta aparece en la lista de
carpetas del Grupo de usuarios. Los botones Quitar y Propiedades
permiten, respectivamente, eliminar y mostrar el cuadro de dilogo Permi-
sos (que se ver a continuacin) de la carpeta seleccionada en la lista de
carpetas del Grupo de usuarios:
Es posible definir para cada una de las carpetas de la lista de carpetas del
grupo de usuarios el tipo de acceso que van a tener (si pueden crear nue-
vas carpetas, borrar, copiar o pegar). Si hacemos doble clic con el botn iz-
quierdo del ratn sobre una de las carpetas de la lista de carpetas del Gru-
po de usuarios (o bien seleccionamos una carpeta de dicha lista y pulsamos
el botn Propiedades) se presentar el cuadro de dilogo Permisos en
el cual podemos definir los citados niveles de acceso.
11 Servidor de aplicaciones
Aplicaciones
Mquinas
Archivos
Agregar
Quitar
Propiedades
530 531 VELAZQUEZ VISUAL
Para definirlos bastar con que marquemos o desmarquemos las casillas
correspondientes a cada tipo de acceso (Lectura, Escritura, Borrado de ar-
chivos o carpetas y Creacin de nuevas carpetas, respectivamente).
Veremos a travs de un ejemplo cmo crear un nuevo grupo de usuarios:
Ejemplo: Creacin de un grupo de usuarios
Vamos a crear un nuevo Grupo de usuarios llamado Administracin que va
a englobar a los dos usuarios creados anteriormente y que pertenecen al
Departamento de Administracin de una empresa. Dichos usuarios podrn
tener todos los accesos, salvo el de borrado. Los pasos a realizar son los
siguientes:
Dentro de la pestaa Usuarios se pulsa el botn Nuevo grupo de la ba-
rra de herramientas (o tambin seleccionamos de la opcin de men Editar
> Grupos de usuarios > Nuevo). Esto mostrar el cuadro de dilogo Grupo
de usuarios.
Las propiedades de este Grupo de usuarios son las siguientes:
Nombre: Administracin.
Pestaa Usuarios: Pulsamos el botn Agregar usuario para que se
muestre el cuadro de dilogo Seleccin de miembros del grupo. Hacemos
doble clic sobre los usuarios Usuariodos y Usuariouno para que pasen al
rea de la derecha:
e
Nuevo grupo
Agregar usuario
Pestaa Aplicaciones: Pulsamos el botn Agregar y seleccionamos la
aplicacin Agenda del men desplegable. Una vez situados en la lista de
aplicaciones del Grupo de usuarios, seleccionamos y hacemos doble clic
con el botn izquierdo del ratn (o bien se selecciona y se pulsa el botn
Propiedades) para definir las siguientes propiedades en el cuadro de
dilogo Permiso:
Privilegio: 100
Grupo: 0
Men inicial: Arranque men formulario.
Perfil: .Ninguno
11 Servidor de aplicaciones
e
Agregar
Propiedades
532 533 VELAZQUEZ VISUAL
Pestaa Mquinas: Hacemos clic con el botn derecho del ratn sobre el
rea de color blanco para seleccionar la opcin del men contextual Modi-
ficar mquinas autorizadas y marcamos, dentro del cuadro de dilogo M-
quinas autorizadas, la casilla de la mquina denominada Administracin
(creada en un apartado anterior).
Pestaa Archivos: Pulsamos el botn Agregar y en la lista desplegable
que aparece seleccionamos la carpeta Administracin para que se muestre
en la lista de carpetas del Grupo de usuarios. Al hacer doble clic sobre esa
carpeta de la lista aparece el cuadro de dilogo Permisos. Como en el enun-
ciado comentamos que no permitiremos el borrado, desmarcamos la op-
cin Borrado de archivos o carpetas.
11.9
Configuracin de grupos
de mensajera
Desde el Navegador Velzquez Visual un usuario puede enviar Telegramas
(mensajes) al resto de los usuarios. Solamente podr enviar telegramas a
usuarios pertenecientes al mismo grupo o grupos que l.
Si un usuario no se encuentra dentro de un grupo de mensajera no podr
enviar ni recibir telegramas.
Para crear un nuevo Grupo de mensajera deberemos pulsar, dentro de la
pestaa Usuarios, la opcin de men Editar/Grupos de mensajera/Nuevo...
Se mostrar el cuadro de dilogo Grupo de mensajera:
e
Agregar
Este cuadro de dilogo tiene las siguientes propiedades:
Nombre: nombre que daremos al Grupo de mensajera.
Si pulsamos el botn Agregar usuario aparece el cuadro de dilogo Se-
leccin de miembros del grupo, similar al que aparece en la definicin de un
nuevo Grupo de usuarios:
En el panel izquierdo aparecer la lista de usuarios seleccionables. Para se-
leccionar uno hacemos doble clic sobre l. Desaparecer del panel izquier-
do y se mostrar en el derecho, que es el panel de usuarios seleccionados
en el grupo.
La creacin de un grupo de usuarios se va a explicar a travs de un ejemplo.
Ejemplo: Creacin de un Grupo de mensajera
Vamos a crear un nuevo Grupo de mensajera denominado Administracin,
que engloba a todos aquellos usuarios que pertenecen al Departamento de
Administracin de una empresa. Los pasos a realizar son los siguientes:
Dentro de la pestaa Usuarios seleccionamos la opcin de men
Editar/Grupos de mensajera/Nuevo... Aparecer el cuadro de dilogo Gru-
po de mensajera. En la propiedad Nombre se escribe Administracin.
A continuacin pulsamos el botn Agregar usuario para mostrar el cua-
dro de dilogo Seleccin de miembros del grupo. Se hace doble clic sobre
el Usuariouno y el Usuariodos para pasarlos al rea de la derecha. As for-
marn parte del Grupo de mensajera.
11 Servidor de aplicaciones
e
Agregar usuario
534 535 VELAZQUEZ VISUAL
De esta manera, al pulsar el botn Aceptar del cuadro de dilogo Grupo de
mensajera se habr creado el nuevo Grupo de mensajera.
11.10 Configuracin de tareas
11.10.1. Pestaa Tareas programadas
Para programar una nueva tarea hacemos clic sobre el rea blanca de la
pestaa y seleccionamos, en el men contextual que aparece, la opcin
Nueva tarea... (o tambin a travs de la opcin de men Editar/Tareas/Nue-
va). Aparecer el cuadro de dilogo Tarea.
Las propiedades del cuadro de dilogo son las siguientes:
Asunto: especificacin del tipo de tarea que vamos a programar. Existen
tres tipos de tareas:
CUADRO DE DILOGO TAREA
e
Tareas programadas
Nueva tarea
Copia de seguridad: la tarea a programar ser la realizacin de una co-
pia de seguridad de las tablas de datos de una aplicacin concreta. Sus
parmetros especficos son:
Aplicacin: nombre de la aplicacin de la que vamos a hacer una copia
de seguridad.
Directorio destino: especificacin del directorio donde se guardar el ar-
chivo de la copia de seguridad (archivo con extensin VCS). Para facili-
tar la especificacin del mismo pulsamos el botn Examinar.
Regenerar ndices: la tarea a programar ser la regeneracin de los ndi-
ces de una tabla de datos de una aplicacin concreta.
Aplicacin: nombre de la aplicacin de la que queremos regenerar ndices.
Tabla: especificacin de la tabla de datos de la aplicacin de la que que-
remos regenerar los ndices.
Ejecutar proceso: la tarea a programar ser la ejecucin de un proceso
de una aplicacin concreta. Esta opcin est pensada para la ejecucin
de procesos para el mantenimiento de la aplicacin. El proceso ser eje-
cutado en el Servidor. Sus parmetros especficos son:
Aplicacin: nombre de la aplicacin de la que ejecutaremos un proceso.
Procesos: especificacin del proceso a ejecutar. Solamente estarn disponibles
aquellos procesos del proyecto que sean pblicos y cuyo origen sea ninguno.
La Periodicidad se refiere al momento en el que se ha de ejecutar la tarea.
Las opciones son:
Absoluto (Fecha/Hora concreta): la tarea se ejecutar un da y hora concre-
tos. Es decir, ser ejecutada una sola vez. Parmetros complementarios:
Fecha: da, mes y ao en que la tarea ha de ser ejecutada. Para facilitar
su especificacin, pulsando el botn que se encuentra dentro del con-
trol de edicin aparecer un calendario para su seleccin.
Hora: hora en la que la tarea debe ser ejecutada. Con las teclas de mo-
vimiento del cursor izquierda y derecha se puede desplazar entre la ho-
ra, los minutos y los segundos, y con las teclas de movimiento del cur-
sor arriba y abajo cambiar los valores del elemento seleccionado.
Diario: la tarea ser ejecutada todos los das a una hora determinada.
Parmetros complementarios.
Hora: hora en la que la tarea debe ser ejecutada. Con las teclas de mo-
vimiento del cursor izquierda y derecha se puede desplazar entre la ho-
ra, los minutos y los segundos, y con las teclas de movimiento del cur-
sor arriba y abajo cambiar los valores del elemento seleccionado.
11 Servidor de aplicaciones
Examinar
536 537 VELAZQUEZ VISUAL
Semanal: la tarea ser ejecutada cada semana en un da y hora concre-
tos. Parmetros complementarios:
Da de la semana: en el que la tarea debe ser ejecutada (de lunes a domingo).
Hora: tiene las mismas especificaciones comentadas para la opcin Ab-
soluto.
Mensual: la tarea ser ejecutada cada mes un da y a una hora concre-
tos. Parmetros complementarios:
Da del mes: en el que la tarea debe ser ejecutada (del 1 al 31).
Hora: tiene las mismas especificaciones comentadas para la opcin Absoluto.
Anual: la tarea ser ejecutada cada ao a una hora de un da de un mes
concreto. Parmetros complementarios:
Da del mes: en el que la tarea debe ser ejecutada (del 1 al 31).
Mes: en el que la tarea debe ser ejecutada (de enero a diciembre).
Hora: tiene las mismas especificaciones comentadas para la opcin Absoluto.
Cada cierto tiempo: tiene los siguientes parmetros complementarios:
Horas: tiene las mismas especificaciones comentadas para la opcin
Absoluto.
Minutos: tiene las mismas especificaciones comentadas para la opcin
Absoluto aplicado a los minutos.
Para modificar una tarea basta con seleccionarla, pulsar con el botn dere-
cho del ratn y seleccionar en el men contextual la opcin Modificar ta-
rea (o seleccionarla y ejecutar la opcin del men Editar/Tareas/ Modificar).
Para eliminar una tarea basta con seleccionarla, pulsar con el botn dere-
cho del ratn y seleccionar en el men contextual la opcin Suprimir ta-
rea (o seleccionarla y ejecutar la opcin del men Editar/Tareas/Suprimir).
El servidor de aplicaciones guarda la configuracin de las tareas programa-
das en el archivo tareas.vuf, de forma que es importante hacer copias de
seguridad de este archivo para prevenir modificaciones accidentales, o en
caso de reinstalar el servidor conservar y recuperar los datos anteriores so-
bre tareas.
11.10.2. Pestaa Tareas ejecucin
En esta pestaa se podrn consultar aquellas tareas que estn siendo o han
sido ejecutadas.
Modificar tarea
Suprimir tarea
Tareas ejecucin
En ella se muestra la siguiente informacin:
Tarea: tipo de tarea ejecutada.
Aplicacin: nombre de la aplicacin sobre la que se ha ejecutado la tarea.
Observaciones: si se trata de una copia de seguridad se mostrar el direc-
torio donde sta ha sido almacenada. Si se ha ejecutado una regeneracin
de ndices se mostrar el nombre de la tabla de datos que ha sido regene-
rada. Si se trata de la ejecucin de un proceso se mostrar el nombre del
proceso ejecutado.
Inicio: da y hora de inicio de la tarea.
Fin: hora de finalizacin de la tarea.
11.11 Historial del servidor
Se trata de una aplicacin incorporada al Servidor que, como cualquier otra
aplicacin Velzquez Visual, podr ser atacada con el Navegador Velzquez
Visual aunque solamente por todos aquellos usuarios dados de alta en el
Servidor que sean Supervisores.
Su utilidad es la de monitorear (visualizar en el monitor del equipo) los en-
ganches y trabajos realizados por los usuarios en las aplicaciones abiertas
en el Servidor. Cada vez que un usuario abre una aplicacin del Servidor se
genera un enganche, y la informacin de cada trabajo que ste ejecute en
la aplicacin ser almacenada en esta aplicacin.
Dado su carcter de consulta no es posible la generacin, modificacin o la
eliminacin de fichas por parte del usuario que la ejecute. Es el propio Ser-
vidor quien se encarga de su mantenimiento.
Con esta aplicacin podremos obtener informacin sobre los enganches y
trabajos realizados en las aplicaciones del Servidor, as como el control de
enganches y trabajos realizados por usuario dado de alta en el Servidor.
11 Servidor de aplicaciones
538 539 VELAZQUEZ VISUAL
11.11.1. Opciones de men
Las opciones que encontramos en el rea derecha de la aplicacin Historial
del servidor son las siguientes:
Enganches activos: muestra una lista con todos los enganches activos en el
momento de la consulta.
Finalizados entre fechas: presenta una lista con todos los enganches finali-
zados entre lmites de fecha desde-hasta.
Por usuario: aparece un cuadro de dilogo para la seleccin de un usuario
del Servidor y presenta todos los enganches realizados por l:
Por aplicacin: presenta un cuadro de dilogo para la seleccin de una de
las aplicaciones del Servidor y presenta todos los enganches realizados a
la misma.
Los enganches que estn activos en el momento de la consulta sern des-
tacados en color azul.
Al editar la ficha de cualquier enganche se incluir en el formulario una lis-
ta con todos los trabajos realizados durante ese enganche.
11 Servidor de aplicaciones
540 541 VELAZQUEZ VISUAL
Para todas las opciones de men vistas, la informacin que se presentar
en las rejillas despus de disparar dichas opciones ser la siguiente:
IP Cliente: direccin IP de la mquina desde la que se ha realizado el en-
ganche.
Usuario: nombre del usuario que ha realizado el enganche. Si una aplica-
cin no tiene especificada la peticin de usuario el dato ser presentado
en blanco.
Nombre completo: nombre completo del usuario que ha realizado el en-
ganche. Si una aplicacin no tiene especificada la peticin de usuario dicho
dato ser presentado en blanco.
Aplicacin: nombre de la aplicacin objeto del enganche.
Directorio: senda de la aplicacin objeto del enganche.
Fecha inicio: fecha en la que se ha generado el enganche.
Hora: hora en la que se ha generado el enganche.
Fecha fin: fecha en la que ha finalizado el enganche. Cuando se consultan
los enganches activos esta columna no aparecer.
Hora: hora en la que ha finalizado el enganche. Cuando se consultan los en-
ganches activos esta columna no aparecer.
Las opciones de men del rea izquierda del Historial del servidor son las
siguientes:
Enganches: muestra el rea derecha Enganches con las opciones de men
vistas anteriormente (Activos, Finalizados entre fechas, Por usuario y Por
aplicacin).
Trabajos perodo: presenta un cuadro de dilogo en el cual se pide una fe-
cha de inicio y de fin, as como una hora inicial y final (en Horas y Minutos).
El resultado ser una rejilla con todos los trabajos realizados en la fecha y
entre las horas especificadas.
Trabajos ltima hora: se presentar una rejilla con todos los trabajos reali-
zados durante la hora previa a la de la ejecucin de esta consulta.
11 Servidor de aplicaciones
542 543 VELAZQUEZ VISUAL
En cualquier consulta de trabajos, la informacin que se facilitar ser:
Aplicacin: nombre de la aplicacin objeto del enganche.
Usuario: nombre del usuario que ha realizado el enganche. Si una aplica-
cin no tiene especificada la peticin de usuario el dato ser presentado
en blanco.
IP: direccin IP del equipo utilizado por el usuario.
Tipo: tipo de trabajo efectuado (bsqueda, alta de ficha, proceso, etc.).
Descripcin: presenta un texto descriptivo del trabajo efectuado.
Inicio: fecha y hora de inicio del trabajo.
Fin: fecha y hora de finalizacin del trabajo.
N operaciones: nmero de operaciones que ha generado el trabajo en el
Servidor (modificaciones de fichas).
Ms opciones de men disponibles en el rea izquierda de la aplicacin son
las siguientes:
Usuarios: se presentar una rejilla con todos los usuarios dados de alta en
el Servidor y que muestra el nombre y el nombre completo de cada uno de
ellos.
Cuando hacemos doble clic sobre cualquiera de ellos se muestra el formu-
lario del usuario y dos pestaas: una denominada Enganches y otra Engan-
ches/Aplicacin. La pestaa Enganches presenta una rejilla con los distintos
enganches realizados por el usuario. Dicha rejilla aporta informacin sobre la
IP del usuario, la aplicacin, el directorio y las fechas y horas de inicio y fin.
Por otra parte la pestaa Enganches/Aplicacin muestra en una rejilla los da-
tos mencionados en la pestaa anterior encarpetados por aplicacin.
Si an no ha finalizado el enganche aparecer el texto Activo.
Localizar usuario: se presentar un localizador en el que, si se selecciona un
usuario, se presentar un formulario con su ficha correspondiente. En dicha
ficha podemos consultar los enganches efectuados, con posibilidad de en-
carpetar la informacin de los enganches por cada aplicacin, tal y como
suceda en la opcin de men anterior.
Aplicaciones: muestra una rejilla con todas las aplicaciones que hemos ins-
talado en algn momento en el Motor:
Utilidades: muestra en el rea derecha las siguientes opciones de men:
Cambiar n das a conservar: podemos especificar cuntos das se desea
conservar los datos del historial.
Eliminar historiales atrasados: borrar todos los historiales anteriores al nme-
ro de das especificados en la opcin Nmero de das de historial a conservar.
11.11.2. Configuracin bsica del Historial del servidor
En las opciones de men Cambiar n das a conservar dicho mapa, confi-
guramos el tiempo que ha de ser guardado, por ejemplo, 60 das.
11 Servidor de aplicaciones
544 545 VELAZQUEZ VISUAL
Asimismo, en el Servidor es conveniente crear una nueva tarea progra-
mada (dentro de la pestaa Tareas programadas del rea tareas) que ac-
tive el nico proceso que es pblico de dicho mapa: LIMPIAR-ANTERIOR-
AFECHA:
11.12
Configuracin de los dominios
web
Si un Servidor dispone del Servidor HTTP puede servir las Pginas HTML
que se encuentren dentro del directorio definido en la pestaa HTTP del
cuadro de dilogo Configuracin que aparece al seleccionar la opcin de
men Editar/Configuracin (o bien pulsando el botn Configuracin de
la barra de herramientas).
Adicionalmente, dicho servidor HTTP puede gestionar ms de un dominio
web. Para definir los dominios seleccionamos la opcin de men Edi-
tar/Dominios Web. Se presentar, entonces, el cuadro de dilogo Domi-
nios web:
Configuracin
Para crear un nuevo dominio debemos pulsar el botn Aadir. Se mos-
trar el cuadro de dilogo Propiedades del dominio web que tiene las si-
guientes propiedades:
Dominio: nombre del dominio.
Directorio de la Web: directorio de la web por defecto para ese dominio. Po-
demos seleccionar el que queramos pulsando el botn Examinar.
Archivo Html por defecto: nombre del archivo html que presentaremos por
defecto para ese dominio.
Mediante los botones Suprimir y Editar es posible, respectivamente,
eliminar el dominio web o mostrar el cuadro de dilogo Propiedades del do-
minio web del dominio web seleccionado.
11 Servidor de aplicaciones
Aadir
Examinar
Suprimir
Editar
546 547 VELAZQUEZ VISUAL
A continuacin se va a realizar un ejercicio prctico para revisar estos con-
ceptos tericos:
Ejemplo: Creacin de dos dominios web
Vamos a servir dos dominios en una misma mquina: www.dominio1.com
(cuyas pginas web se encuentran en C:\Web\Dominio1 y tiene como pgi-
na inicial indexd1.htm) y www.dominio2.com (cuyas pginas web se en-
cuentran en C:\Web\Dominio2 y tiene como pgina inicial indexd2.htm). Pa-
ra ello decidimos utilizar los dominios web del Motor. Los pasos a realizar
son los siguientes (para realizar el ejercicio completo deberamos crear pre-
viamente la carpetas Web, y dentro de sta las carpetas Dominio1 y Domi-
nio2, as como las pginas indexd1.htm e indexd2.htm).
Seleccionamos la opcin de men Editar/Dominios Web para que se mues-
tre el cuadro de dilogo Dominios web. En dicho cuadro de dilogo pulsa-
mos el botn Agregar y en el cuadro de dilogo Propiedades del domi-
nio web introducimos las propiedades correspondientes al primero de los
dominios:
Dominio: www.dominio1.com
Directorio de la Web: C:\Web\Dominio1\
Archivo Html por defecto: indexd1.htm
Una vez pulsado el botn Aceptar, volvemos a pulsar el botn Agregar
e introducimos las propiedades correspondientes al segundo dominio.
e
Agregar
De esta manera, cuando un visitante de la web teclea cualquiera de los dos
dominios, ambos irn dirigidos al Motor, y ste resolver en funcin de las
propiedades que se han definido para cada uno de ellos.
11.13 Navegador Velzquez Visual
El Navegador de Velzquez Visual permite ejecutar aplicaciones de Velz-
quez Visual cargadas en un Servidor de aplicaciones de Velzquez Visual.
La conexin con el Servidor ha de hacerse a travs de una direccin IP, bien
en una red local, o bien va telefnica.
Asimismo, tambin es un navegador web y un cliente de disco (permite ac-
ceder a las carpetas compartidas en el Servidor).
11.13.1. Instalacin del Navegador
La instalacin del Navegador Velzquez Visual es sencilla, ya que el asisten-
te de instalacin indica los pasos a realizar. Una vez instalado, se crea un fi-
chero ejecutable, denominado iRunner.exe, situado en la senda C:\Archivos
de Programa\Atica\Velazquez\Program.
Cuando se actualiza el Motor con una nueva versin es posible actualizar
los puestos clientes que disponen de un Navegador de versin anterior a la
nueva versin del Servidor. Dicha actualizacin del Navegador se producir
11 Servidor de aplicaciones
Para que los dominios web
en el Motor estn bien
definidos se debe tener en
cuenta lo siguiente:
En la propiedad Dominio del
cuadro de dilogo
Propiedades del dominio
web debe escribirse el
dominio slo con www (es
decir, para uno de los
dominios del ejercicio
anterior ser
www.dominio1.com).
El proveedor de servicios de
internet que tiene registrado
el dominio debe redirigir el
dominio a la IP del router (en
caso de disponer de una
conexin ADSL) de la
siguiente manera: (utilizando
el ejemplo del ejercicio
anterior sera:
http://Iprouter/dominio2.com
/indexd2.hml).
ADVERTENCIA
e
548 549 VELAZQUEZ VISUAL
cuando accedamos a alguna de las aplicaciones que sirva el Servidor. En
ese momento aparecer un cuadro de dilogo que pregunta si queremos
realizar la actualizacin:
Si se pulsa el botn No se mostrar un nuevo cuadro de dilogo indican-
do la necesitad de actualizarse, y por la que no podremos acceder a la
aplicacin solicitada. Si pulsamos el botn S aparecer el cuadro de di-
logo Actualizacin de Navegador Velzquez Visual versin X.X que mos-
trar la senda en la que est instalado dicho Navegador. Con el botn
Examinar podremos modificar la ruta (en el caso de no estar instalado en
la senda por defecto, es decir, C:\Archivos de Programa\Atica\Velaz-
quez\Program).
11.13.2. Interfaz del Navegador
Una vez arrancado el Navegador se mostrar una ventana que est dividi-
da en las siguientes partes.
El rea [a] corresponde a la barra de mens, el rea [b] corresponde a la
barra de herramientas y, finalmente, la opcin [c] es el rea de visualiza-
cin (tanto de aplicaciones, como de pginas web, como de carpetas
compartidas).
Las actualizaciones de
versin del Navegador no
afectan a los iconos de
acceso directo. Es decir, si
cuando actualizamos el
navegador, lo hacemos en
un directorio distinto del que
tenamos la versin anterior,
debemos revisar los
accesos directos que
tenamos creados y
apuntarlos al nuevo
Navegador.
ADVERTENCIA
11.13.3. Barra de mens
Antes de pasar a las opciones de la barra de mens indicar que slo se van
a explicar aquellas opciones propias del Navegador, ya que el resto se han
mencionado al hablar del Ejecutor de proyectos (vRunner).
Men Archivo
En este men existen las siguientes opciones:
Ver estado cachs..., que lanza el cuadro de dilogo Estado de las cachs
y que muestra para cada tabla de la aplicacin el nmero de fichas alma-
cenadas en cach hasta ese momento.
11 Servidor de aplicaciones
550 551 VELAZQUEZ VISUAL
Dormir aplicacin: esta opcin aparece siempre y cuando se realiza la co-
nexin a internet a travs de un mdem. Si durante la ejecucin de una apli-
cacin cualquiera dormimos sta, se desconectar la conexin y se mi-
nimizar el Navegador en la barra de herramientas. Haciendo doble clic so-
bre el icono del mismo en la barra de herramientas estableceremos de nue-
vo la conexin telefnica con el Servidor y se abrir la aplicacin en el pun-
to donde la habamos dejado durmiendo.
Men Editar
En este men contamos con las siguientes opciones:
Enviar telegrama...: si previamente hemos creado Grupos de mensajera
es posible enviar telegramas a otros usuarios desde el Navegador. Cuan-
do se ejecuta esta opcin se presenta el cuadro de dilogo Enviar tele-
grama:
Las opciones del cuadro de dilogo son las siguientes:
Seleccionar todos: el telegrama a enviar ser recibido por todos los
usuarios que formen parte del Grupo de mensajera (los que aparecen en el
rea Destinatarios).
Seleccionar los activos: el telegrama a enviar ser recibido por todos
los usuarios del Grupo de mensajera que estn en ese momento co-
nectados.
Deseleccionar todos: desmarca los usuarios del Grupo que se hayan
marcado para enviar el telegrama.
Mensaje: rea en el que se escribe el texto del telegrama.
Una vez pulsemos el botn Enviar los usuarios seleccionados como desti-
natarios recibirn un cuadro de dilogo Telegrama recibido que contiene el
nombre del remitente junto con el texto del telegrama.
11 Servidor de aplicaciones
Seleccionar todos
Seleccionar los activos
Deseleccionar todos
552 553 VELAZQUEZ VISUAL
Ver telegramas..: permite visualizar los telegramas recibidos por el usuario
en el caso de tener seleccionada la propiedad Telegramas-Se presentan
cuando se desee en la pestaa Opciones dentro de la opcin de men Ver
> Personalizar (se ver ms adelante).
Explorar Web: abre el panel correspondiente al navegador web.
Explorar equipo: permite visualizar las carpetas compartidas por los servi-
dores de Velzquez Visual a los que el usuario tiene acceso.
Al seleccionar esta opcin se mostrar una ventana dividida en cuatro
partes:
Los dos paneles de la parte superior muestran para cada uno de los servi-
dores Velzquez Visual a los que est conectado el usuario (panel izquier-
do) las carpetas y ficheros a los que tiene acceso (panel derecho).
Los dos paneles de la parte inferior son los correspondientes a un explora-
dor de Windows del equipo del usuario.
A continuacin realizaremos un ejemplo de conexin al Servidor de disco.
Ejemplo: Conexin a un Servidor de disco Velzquez
El usuario Usuariodos desea crear una conexin con el Servidor de disco de
la empresa. Para ello se siguen los siguientes pasos:
Selecciona desde el Navegador la opcin de men Editar/Explorar equipo.
Se muestra la ventana del Navegador con los cuatro paneles vistos ante-
riormente.
Sobre el panel superior izquierdo de la ventana pulsa con el botn derecho
del ratn y selecciona, en el men contextual que aparece, la opcin Aa-
dir servidor...
Al seleccionar esa opcin se muestra el cuadro de dilogo Servidor de dis-
co de Velzquez. En dicho cuadro el usuario rellena las propiedades:
11 Servidor de aplicaciones
e
554 555 VELAZQUEZ VISUAL
Las propiedades del cuadro de dilogo son las siguientes:
Nombre o IP del servidor: nombre del Servidor (o IP) al que se conecta el
usuario.
Nombre usuario: nombre que tiene el usuario en el Servidor Velzquez Vi-
sual, es decir, la que utiliza para acceder a las aplicaciones.
Contrasea: contrasea del usuario en el Servidor Velzquez Visual, es de-
cir, la que utiliza para acceder a las aplicaciones.
Pedir contrasea en cada sesin: si se marca este check le aparecer el
cuadro de dilogo Control de acceso, que le pedir la contrasea del
usuario.
Descripcin: la que tiene el Servidor. Dicha descripcin aparecer en la lis-
ta de servidores.
Una vez se pulsa el botn Aceptar, aparecer representado en el panel su-
perior izquierdo el Servidor, y en el panel superior derecho las carpetas y fi-
cheros a los que accede el usuario.
e
Seleccionando el icono del Servidor del panel superior izquierdo y pulsan-
do con el botn derecho del ratn es posible tanto borrar (Eliminar servi-
dor) como modificar (Modificar servidor) las propiedades del Servidor se-
leccionado.
Men Favoritos
Favoritos es una lista donde podemos almacenar tanto aplicaciones Velz-
quez como URL a las que accedamos con frecuencia.
En este men contamos con las siguientes opciones:
Agregar a Favoritos: agrega a la lista de favoritos la aplicacin de Velzquez
Visual o URL actual. Al seleccionar esta opcin se presentar el cuadro de
dilogo Agregar a Favoritos.
11 Servidor de aplicaciones
e
556 557 VELAZQUEZ VISUAL
En dicho cuadro de dilogo podemos dar un nombre descriptivo a la pgi-
na o aplicacin que vayamos a agregar a Favoritos y especificar en qu car-
peta queremos almacenarlo.
Organizar Favoritos: nos permite organizar por carpetas todas las pginas o
aplicaciones agregadas en favoritos. Al seleccionar esta opcin se muestra
el cuadro de dilogo Organizar Favoritos.
En dicho cuadro de dilogo nos es posible cambiar el nombre, tanto de car-
petas, como de pginas agregadas a favoritos, as como crear nuevas car-
petas, cambiar su ubicacin o eliminarlas. Finalmente, en esta opcin de
men pueden aparecer los Favoritos que no estn guardados en ninguna
carpeta.
Men Ver
En este men tenemos las siguientes opciones:
Display Out: si en la aplicacin ejecutamos funciones de Correo electrnico
podemos activar esta opcin de men para ver los mensajes enviados y re-
cibidos. Una vez seleccionada se mostrar el cuadro de dilogo EMail.
En ella se informa sobre los mensajes enviados y recibidos, nmero de
mensajes que no han podido ser enviados y sobre el estado de la conexin.
Personalizar...: permite personalizar barras de herramientas, as como otros
datos de entorno del Navegador. Al seleccionar esta opcin se presenta el
cuadro de dilogo Personalizacin:
11 Servidor de aplicaciones
558 559 VELAZQUEZ VISUAL
En el mencionado cuadro de dilogo aparecen las barras de herramientas
por defecto del Navegador. Si queremos crear una nueva barra de herra-
mientas se debe pulsar el botn Nueva dentro de la pestaa Toolbars.
Para personalizar una barra de herramientas debemos hacer clic en la car-
peta Comandos y mediante la tcnica de arrastrar y soltar, mover el botn
que se desee a la barra de herramientas.
Para facilitar la localizacin de los botones, stos han sido agrupados por
categoras (Archivo, Editar, rbol, Fichas, Lista, Navegante, Procesos, Ver,
Ventana y Navegador).
La pestaa ms interesante es la de Opciones, que tiene las siguientes pro-
piedades:
Formato de Nmeros, Carcter separador:
Miles: indica el carcter que se utiliza como separador de miles en cam-
pos numricos.
Decimales: indica el carcter que se utiliza como indicador de decima-
les en campos numricos.
Milisegundos retardo:
Autocompletar: permite, en campos NOMBRE de una tabla maestra, que al es-
cribir en el control una cadena y transcurridos los milisegundos establecidos en
esta opcin, el programa presente automticamente el primer registro de la ta-
bla maestra cuyo campo nombre comience por dicha cadena. La parte aadida
quedar seleccionada, con lo que, si el usuario prosigue la escritura, la parte se-
leccionada ser sustituida por los nuevos caracteres que el usuario escriba.
Localizadores: cuando el usuario escribe en el localizador una cadena a
buscar, transcurridos los milisegundos especificados en esta opcin se
presentarn los registros encontrados en la rejilla.
Inicio: existen tres posibles modos de iniciar el Navegador:
Abrir aplicacin Velzquez: al ejecutar el Navegador se presentar el
cuadro de dilogo Introduzca nombre del servidor que solicita la IP del
servidor de aplicaciones Velzquez con el que conectarse.
11 Servidor de aplicaciones
Es importante que en ambos
retardos no pongamos
valores muy pequeos, ya
que si no estaran
refrescando la informacin
cada muy poco tiempo,
ralentizando el uso de la
aplicacin. Tambin
debemos tener en cuenta si
el acceso lo realizamos a
travs de Internet o a travs
de una red local. En este
ltimo podremos poner
valores menores que para
Internet.
ADVERTENCIA
560 561 VELAZQUEZ VISUAL
Explorador web: inicia el Navegador como un explorador web y car-
gar la pgina html de inicio especificada en las opciones de internet
del sistema.
Explorador del equipo: inicia el Navegador como un explorador de equi-
pos, similar al explorador de Windows.
Ninguno: el navegador no se abrir en ninguno de los tres modos ante-
riores. Ser el usuario quien debe o bien ejecutar una aplicacin Velz-
quez o bien abrir una pgina web.
Telegramas:
Se presentan cuando llegan: si a un usuario le han enviado un telegrama
ste le ser mostrado en pantalla cuando llegue.
Se presentan cuando se desee: el telegrama no ser mostrado al
usuario hasta que ejecute la opcin Editar > Ver telegramas Al re-
cibir un telegrama se emitir un aviso acstico (si est activada la op-
cin siguiente) y se presentar en la barra de tareas del navegador un
icono advirtindolo.
Aviso acstico al recibir: si hemos activado esta opcin se emitir un pi-
tido cuando recibamos un telegrama.
Hilo de control: tiempo en segundos, transcurrido el cual el Navegador
debe enviar un pulso al Servidor de Aplicaciones para el refresco de los
datos en notificaciones terciarias.
Por ejemplo, el usuario A y el usuario B editan una misma ficha. El usua-
rio A realiza cambios y acepta. Transcurridos los segundos especifica-
dos en esta opcin se refrescarn los datos de la ficha editada por el
usuario B.
11.13.4. Barra de herramientas
La barra de herramientas por defecto del Navegador Velzquez Visual con-
tiene los siguientes botones:
Como en el apartado anterior, vamos a comentar aquellos botones espe-
ciales del Navegador. A continuacin detallamos la accin que ejecuta ca-
da uno de ellos:
Ejecutar aplicacin: muestra el cuadro de dilogo Introduzca nombre del
servidor en el que se escribe el nombre o la IP del servidor al que se quie-
re conectar:
Ejecutar aplicacin
Una vez pulsamos el botn Aceptar se presenta el cuadro de dilogo Se-
leccione aplicacin, que mostrar el listado de todas las aplicaciones que
sirve el Motor.
Cuando seleccionamos una aplicacin y pulsamos el botn Aceptar apare-
ce el cuadro de dilogo Control de usuario en el que el usuario escribe su
nombre y su contrasea para acceder finalmente a la aplicacin:
11 Servidor de aplicaciones
562 563 VELAZQUEZ VISUAL
En el cuadro de dilogo Introduzca nombre del servidor, si el usuario pulsa
el botn se conectar a un Servidor de Atica Software que, al pre-
sentar el cuadro de dilogo Seleccione aplicacin, mostrar la aplicacin Li-
bros, que es un ejemplo de aplicacin de Velzquez Visual.
Enviar telegrama: presenta el cuadro de dilogo Enviar telegrama que
hemos visto en el apartado anterior.
Explorar equipo: presenta en una ventana la estructura de cuatro pane-
les, que comentamos anteriormente para acceder a las carpetas comparti-
das por el Servidor.
A continuacin mencionamos los botones correspondientes a la barra de
herramientas Explorador:
Atrs: si hemos abierto varias pginas en la misma ventana, cuando pul-
semos este botn iremos a la pgina anterior a la actual.
Adelante: si hemos abierto varias pginas en la misma ventana, cuando
pulsemos este botn iremos a la pgina siguiente a la actual.
Detener: detiene la carga de la pgina web.
Actualizar: carga de nuevo la pgina web en curso.
Inicio: abre la pgina que hayamos especificado como pgina principal
en las Propiedades de Internet del sistema.
Inicio serie: si en una misma ventana del explorador hemos abierto di-
ferentes pginas, este botn retornar a la que hayamos marcado con una
marca de inicio de serie (ver el siguiente botn), o, si no establecimos una
marca, a la primera pgina abierta en dicha ventana.
Marca inicio serie: la pgina en la que hayamos generado la marca se-
r a la que retornemos si, en la misma ventana, pulsamos el botn de Inicio
serie.
Barra de direcciones: este control permite acceder
directamente desde el Navegador a la direccin URL escrita en el mismo.
Si este control es incluido en una barra de herramientas del Navegador
siempre estar activo, por tanto, desde cualquier punto de la aplicacin
donde est visible dicha barra de herramientas podr dispararse el explo-
rador web. Pulsando sobre el botn de este control se mostrar el historial
de las distintas URLs a las que se haya accedido a lo largo de esa sesin
del Navegador.
Conectarse a Servidor
de tica Software
Enviar telegrama
Explorar equipo
Atrs
Adelante
Detener
Actualizar
Inicio
Inicio serie
Marca inicio serie
11.14
Optimizacin de aplicaciones
en Cliente-Servidor
Si hemos desarrollado una aplicacin y sta se ejecuta en arquitectura de
red local (utilizando el Ejecutor vRunner) dicha aplicacin podr ser instala-
da en el Servidor de aplicaciones Velzquez Visual sin realizar por ello nin-
gn tipo de modificacin.
Sin embargo, hemos de tener en cuenta una serie de cuestiones que au-
mentarn el rendimiento de la aplicacin (optimizarla) de cara a su instala-
cin en el Motor, ya que los usuarios pueden estar conectados a la aplica-
cin desde cualquier lugar a travs de Internet.
11.14.1. Sockets TCP: retardos y optimizacin
La comunicacin entre mquinas se establece mediante sockets. Una
vez establecida dicha comunicacin, la informacin viaja distribuida en
paquetes con un tamao de unos 4 kb (aproximadamente). Por ejem-
plo: un conjunto de datos de 400 kb viajara distribuido en unos 100 pa-
quetes.
Los sockets llevan, entre otros parmetros, las IP origen e IP destino, de
modo que siempre alcanzan su destino: si un nodo falla en la comunicacin
otros nodos son interrogados para lograr el envo.
Una vez establecida la comunicacin (socket), el tiempo que los paquetes
de informacin emplean en viajar es el mismo independientemente de que
ocupen 4 kb o menos. Es en el establecimiento del socket donde se ralen-
tiza la comunicacin, ya que una vez establecida el traspaso de informacin
es rpido, tardando ms o menos segn el canal por el que viajen los datos
(enviar 1k es casi igual a enviar 4k).
Por otro lado, en una red local el tiempo que un socket emplea en viajar es
de unos 10 ms, mientras que a travs de internet ronda los 250 ms, de ah
que las peticiones a travs de internet sean mucho ms lentas: se produce
un retardo, y por lo tanto conviene generar el menor nmero de sockets po-
sible: hemos de optimizar nuestras aplicaciones.
Existen diversos factores que aumentan el nmero de sockets generados,
por ejemplo, las rejillas en las que se presentan datos capturados median-
te punteros indirectos. Por ejemplo: si a travs de internet presentamos una
rejilla con datos de la misma tabla se generan dos sockets, uno para la pe-
ticin y otro para el envo de datos, de modo que la rejilla se presentara en
menos de un segundo. Sin embargo, si presentamos registros capturados
mediante un puntero indirecto generamos tantos sockets como registros se
presenten, de modo que si encontramos 100 registros, la rejilla tardara 25
segundos en presentarse.
11 Servidor de aplicaciones
564 565 VELAZQUEZ VISUAL
11.14.2. Optimizar el tamao del mapa
Cuando nos conectamos a un servidor de Velzquez ste nos enva la infor-
macin del mapa de la aplicacin, de modo que necesitamos optimizar el ta-
mao del mapa con el fin de que este traspaso sea lo ms rpido posible.
En el Servidor de aplicaciones podemos instalar tanto un fichero .map co-
mo un .vam, pero no pensemos que por instalar el .vam (que ocupa menos)
realizamos optimizacin alguna, ya que el servidor convierte esos archivos
a otro archivo .mgz, que es el que realmente nos enva, y que ocupa lo mis-
mo hayamos instalado el .map o el .vam.
Optimizacin de dibujos
Hemos de reducir al mximo el tamao de los dibujos que incluimos en el
mapa, para lo cual en un programa de edicin iremos reduciendo la paleta
de colores del dibujo, cuidando que ste no pierda calidad. Esta reduccin
en la paleta hemos de realizarla paulatinamente, ya que si lo hacemos de
golpe puede fallar el algoritmo de clculo del programa de edicin.
Una vez hayamos reducido la paleta, con el programa de edicin realizare-
mos una nueva compresin a formato RLE estndar (bmp) (cuidado: si no
es RLE estndar puede que el editor de Velzquez rompa al llevar el dibujo
al mapa) y la guardamos en disco para despus abrir el editor y traernos la
imagen retocada (opcin pegar desde). Hemos de hacerlo as y no me-
diante copiar y pegar, ya que usando el portapapeles se reservan los pri-
meros veinte colores para Windows y no se respeta la paleta de colores de
la imagen retocada.
Cuando reducimos el tamao de una imagen (pensemos en todos los ico-
nos que puede tener nuestra aplicacin) lo ideal es reducirla a 16 colores (4
bits por pixel), ya que de este modo optimizamos la paleta al mximo. Si la
imagen no queda del todo bien al reducirla a 16 colores podemos retocar-
la con el programa de edicin.
Aprovechamiento de los objetos
Otra manera de controlar el tamao de un mapa es el aprovechamiento de
objetos. Por ejemplo: si una misma rejilla puede servirnos para presentar
dos listados distintos, no tiene sentido crear una rejilla para cada listado.
11.14.3. Elementos que retardan una aplicacin
Cuando diseamos una aplicacin o trabajamos con ella a travs de inter-
net hay ciertos detalles que hemos de tener en cuenta, ya que ralentizan en
gran modo su funcionamiento. Vemoslos:
Visualizacin de datos obtenidos a travs de punteros indirectos
Supongamos una aplicacin en la que tenemos las tablas LIBROS, AUTO-
RES y EDITORES, siendo LIBROS histrica de las otras dos. Para presen-
tar en una rejilla de la aplicacin una lista de libros con su autor y editor el
proceso sera el siguiente: nuestra mquina genera un socket de peticin de
libros, devolvindonos el servidor los primeros ttulos a presentar (ponga-
mos unos 50 del total, que podran ser 1.000, por ejemplo). Una vez de-
vueltos estos 50 primeros ttulos, se generan un segundo y tercer sockets
para pedir los autores y los editores de los ttulos devueltos.
En el ejemplo anterior presentamos en una rejilla punteros enlazados a
maestro, muy optimizados en Velzquez Visual. Ahora bien, en absoluto es
aconsejable presentar en una rejilla punteros indirectos, ya que estos enla-
ces no se encuentran optimizados, de modo que para presentar cada re-
gistro de la lista ha de generarse un socket. Si en la rejilla del ejemplo ante-
rior presentramos un campo capturado mediante un puntero indirecto, co-
mo son 1.000 registros tardara 250 segundos en presentarse (ms de cua-
tro minutos!).
Si se trata de un formulario la presentacin de datos capturados mediante
punteros indirectos tambin ralentiza la apliacin, pero como presentamos
uno o pocos registros el efecto se nota menos.
Filtros secuenciales
Supongamos que en una rejilla en la que presentamos artculos queremos
quedarnos slo con aquellos cuyo campo agotado (booleano) tenga valor 1.
Tenemos la opcin de Filtrar, pero sta es desaconsejable ya que filtrando
generamos una peticin (socket) al servidor, el cual devuelve una primera
remesa con 50 o 100 registros que el irunner debe recorrer uno a uno, com-
probando el contenido del campo agotado. Terminada esta primera remesa
se genera otro socket en el que se piden ms registros al servidor y que el
irunner debe filtrar... as hasta acabar con toda la lista.
Este proceso es muy lento a travs de internet, por lo que es totalmente de-
saconsejable a no ser que sepamos con total seguridad que el nmero de
registros es muy pequeo. Tambin hemos de saber que cuando filtramos
desde las propiedades de una bsqueda el proceso es algo ms rpido, ya
que el filtrado lo realiza el servidor (tercer plano).
De todos modos, la forma ptima para resolver el problema anterior es me-
diante la opcin de listas Rebuscar, indicando que quite de la lista aquellos
registros cuyo campo agotado sea 0. Esto es as ya que Rebuscar trabaja
con ndices y no va leyendo los registros uno por uno.
Rejillas iniciales donde se muestren objetos
Todos los objetos del contenedor (objetos texto, dibujos, etc.) se tienen que
pedir al servidor cada vez que van a ser presentados en una rejilla, de mo-
do que por cada uno se genera un socket. Adems no hay cach para los
objetos del contenedor. Esto ocasiona que las rejillas en las que presente-
mos objetos del contenedor se van a ralentizar mucho si las presentamos a
travs de internet.
Rejillas con totales
En las rejillas hemos de evitar la introduccin de pies, ya que esto fuerza a
la lectura de toda la lista para el clculo del pie.
11 Servidor de aplicaciones
566 567 VELAZQUEZ VISUAL
Condiciones activo / visible y enlaces a hermano
Supongamos un formulario en el que establecemos una condicin de acti-
vo para un botn (el botn Aceptar, por ejemplo) en las propiedades de un
control de edicin de un campo enlazado con un puntero indirecto. Como
los punteros indirectos no se guardan en la cach de nuestra mquina, ca-
da vez que escribamos sobre el control de edicin se generar un socket
para que nos devuelva el contenido del campo con el fin de determinar si
se cumple la condicin. Adems, se generarn tantos sockets como condi-
ciones hayamos introducido en el formulario.
Es por esto que las condiciones activo / visible sobre campos capturados
con puntero indirecto son totalmente desaconsejables trabajando a travs
de internet.
Si el campo es enlazado a maestro o de la propia tabla no tenemos este pro-
blema, ya que s son guardados en la memoria cach de nuestra mquina.
Otro caso parecido al anterior aparece cuando trabajamos con campos en-
lazados a hermano contiguo. Supongamos un formulario en el que presen-
tamos un campo enlazado a hermano contiguo y en el que tenemos boto-
nes Siguiente y Anterior que nos permiten movernos por los hermanos. Se-
ra til una condicin de activo para el botn, de manera que ste se de-
sactivara cuando no hubiera ms hermanos (habramos llegado a los ex-
tremos), pero verificar esta condicin implicara la generacin de un socket
cada vez que pulsamos una tecla (al pulsar una tecla se analizan todas las
condiciones activo y visible), lo que la hace totalmente desaconsejable
cuando trabajamos por internet.
11.14.4. Transacciones
Cada vez que realizamos una operacin que implique escritura en disco es-
tamos realizando una transaccin. Cuando lanzamos procesos que tran-
saccionen nos encontramos con dos casos extremos:
Puede que forcemos muchas transacciones pequeas, lo que implica:
Abrir y cerrar cada una de las transacciones, lo que provoca un tiempo de
retardo por cada operacin (desventaja).
Dar de alta un registro en el Historial del servidor por cada transaccin rea-
lizada, que tambin implica retardo (desventaja).
Bloqueamos pocas fichas, de modo que apenas gastamos memoria en el
servidor (ventaja), pero esto no siempre nos interesa. Supongamos, por
ejemplo, un proceso en el que para una factura de un cliente realizamos una
transaccin por cada albarn, y justo cuando hemos facturado la mitad se
cae el sistema. Nos queda la otra mitad sin facturar y las transacciones que
ya se han realizado no se deshacen! En casos como ste es aconsejable
realizar una transaccin por cada factura del cliente que englobe todos los
albaranes.
Puede que forcemos una sola transaccin grande, lo que implica:
Un gasto considerable de memoria en el servidor (desventaja), ya que ste
guarda en memoria las fichas bloqueadas por si hay que deshacer la tran-
saccin. Ojo: hay gasto de memoria cuando realizamos bajas o modifica-
ciones, pero no cuando damos altas, ya que en este caso no hay ficha que
memorizar por si hay que deshacer la transaccin. Caso aparte son aque-
llas altas que desencadenan actualizaciones, ya que en este caso las fichas
modificadas por la actualizacin s se guardan en memoria.
La velocidad a la que se realizan las operaciones es mucho mayor que en
el primer caso (ventaja).
Se genera una sola transaccin, de modo que la prdida de tiempo es mu-
cho menor (ventaja).
Se bloquean las fichas implicadas en la operacin, lo que impide a otros
usuarios de la aplicacin trabajar con esas fichas (desventaja). No se blo-
quean todas las fichas a la vez, sino que se van bloqueando segn trabaja-
mos con ellas. Es decir, si en una transaccin vamos a modificar 1.000 fi-
chas, cuando llega a la 563 habr bloqueado las primeras 563.
11.14.5. Optimizaciones para el rendimiento ptimo
11.14.5. en ejecucin
Procesos en tercer plano
En nuestras aplicaciones podemos optimizar los procesos forzando que s-
tos se ejecuten en tercer plano, es decir, en el servidor. Vemoslo con un
ejemplo.
A continuacin presentamos un proceso sin optimizar:
El origen del proceso es una lista de la tabla CLIENTES y en l se pregunta
si queremos o no actualizar los clientes. En caso afirmativo se recorre la lis-
ta y se modifica el campo FECHA ALTA.
El proceso se ejecuta en primer plano, es decir, en nuestra mquina. Ade-
ms, como incluye la funcin recorrer lista lectura / escritura, escribe en dis-
co. Esto implica que slo realice una transaccin al recorrer el bucle (si no
escribiera en disco realizara tantas transacciones como registros encontra-
ra, ralentizndose mucho ms el proceso).
Podemos optimizar este proceso partindolo en dos: uno que incluya el bu-
cle y que se ejecute en tercer plano y otro encargado de lanzar el anterior y
que se ejecute en primer plano. Vemoslo:
11 Servidor de aplicaciones
568 569 VELAZQUEZ VISUAL
El proceso que se va a ejecutar en el servidor es el siguiente:
El proceso anterior tiene como origen una lista de la tabla CLIENTES y lo
hemos identificado como UPDATE-CLIENTES-OPT-3P.
El proceso encargado de lanzar el anterior es:
Este proceso se ejecuta en primer plano, y en l incluimos la funcin Eje-
cutar proceso en la que seleccionamos el proceso UPDATE-CLIENTES-
OPT-3P, indicando que ste debe lanzarse en modo servidor.
Al montar el proceso de este segundo modo (optimizado) la actualizacin
de la lista se realiza mucho ms rpido (diez veces ms de media), ya que
es el servidor quien la realiza, evitando que haya trfico de informacin a
travs de la red.
Al montar una estructura como la anterior hemos de tener en cuenta que en
un proceso en tercer plano no podemos lanzar preguntas, presentar formu-
larios, rejillas... slo podemos usar la funcin de procesos Mensaje, que se
suele usar para depurar. Sus contenidos se presentarn en la barra de men-
sajes del servidor de aplicaciones.
Forzar una nica transaccin
Supongamos un proceso para actualizar las ventas en una lista de clientes
y que necesita confirmacin por parte del usuario. ste se compondr de
dos procesos:
Uno lanzador, en primer plano y con origen una lista de la tabla CLIENTES.
En l incluiremos la parte que interacta con el usuario.
Otro en tercer plano (ACTUALIZAR-VENTAS-CLIENTES-3P en el proceso
anterior) con origen ficha de la tabla CLIENTES, en el que cargamos el his-
trico de ventas de cada cliente, lo recorremos y realizamos la modificacin
necesaria en cada registro.
PROCESO LANZADOR
Slo ejecutamos esta ltima parte en el servidor, ya que necesitamos que,
una vez dentro del bucle que recorre los clientes, nos pregunte si queremos
actualizar sus ventas en el caso de que se cumpla una condicin (en este
ejemplo la condicin es que pertenezca al aula 8). Para que se presente la
pregunta sta ha de ejecutarse en primer plano.
Ahora bien, aunque parte de este proceso se ejecute en tercer plano, esta-
mos generando una transaccin por cada cliente (muchas transacciones
pequeas), lo que ralentiza su ejecucin.
Podemos optimizar este proceso forzando una nica transaccin global pa-
ra todo el bucle. Para ello haremos que el proceso en primer plano escriba
en disco, introduciendo una sentencia que implique modificacin en la ba-
se de datos. Esta sentencia la incluiremos antes del primer bucle, de modo
que todos los subprocesos que vengan despus heredarn dicha transac-
cin. Vemoslo:
Al introducir la funcin de proceso Modificar ficha seleccionada estamos
forzando a que el proceso escriba en disco, es decir, genere una transac-
cin de la que dependern todas las que se generaban antes y que vienen
despus. Fijmonos cmo en el fondo estamos engaando a Velzquez,
ya que la sentencia que acabamos de introducir se encuentra bajo una con-
dicin que nunca se va a cumplir (tambin podramos haber usado la fun-
cin Modificar ficha seleccionada, o si el proceso no tuviera origen podra-
mos usar un Alta directa. La funcin Modificar variable global no implica es-
critura en disco).
Veamos otro ejemplo. En este caso se trata de un proceso que importa un
fichero ASCII a una base de datos de clientes. El proceso es el que se pre-
senta a continuacin:
11 Servidor de aplicaciones
PROCESO EN TERCER PLANO
PROCESO OPTIMIZADO
570 571 VELAZQUEZ VISUAL
Mediante la funcin Alta directa (el origen del proceso es ninguno) forzamos
a que se genere una nica transaccin (si no generamos una por cada clien-
te). A continuacin abrimos el fichero y mediante un bucle vamos leyendo
sus lneas. El siguiente paso es lanzar un proceso en tercer plano, que es el
que realiza el proceso de importacin (al ser en tercer plano la importacin
es mucho ms rpida). A este proceso le pasamos los datos ledos en el fi-
chero mediante una variable.
Con esta tcnica que acabamos de ver la velocidad de ejecucin es mucho
mayor, ya que generamos una nica transaccin y un solo alta en el histo-
rial. Ahora bien, tiene sus inconvenientes: al generar una nica transaccin
consumimos mucha memoria en el servidor. Si nos quedamos sin memoria,
Windows dar un aviso. Si el motor detecta que se queda sin memoria des-
har la transaccin, pero puede que no lo detecte y rompa, con lo que se
tendr que deshacer la transaccin al arrancar de nuevo el motor.
Otro inconveniente es que todas las fichas que intervienen en el proceso
estn bloquedas para todos los usuarios. Supongamos, por ejemplo, que
en un proceso como el anterior actualizamos el precio de todos los artcu-
los de una gran empresa. Mientras dure el proceso las fichas de los art-
culos permanecern bloqueadas, con lo que las ventas estaran paradas
ese tiempo porque no podramos generar tickets de venta (stos modifican
el stock del artculo, pero como las fichas estn bloqueadas no se pueden
lanzar).
La solucin a los problemas anteriores pasa por trocear el proceso en va-
rias transacciones. Vemoslo con el siguiente ejemplo, con el que importa-
mos fotos (portadas) a una base de datos de libros:
IMPORTACIN DE CLIENTES
Este proceso, que no transacciona, recorre el disco duro buscando exten-
siones de fotos y memorizando los ficheros en una variable global. Al llegar
a 500 fotos llama al proceso IMPORT-PORTADAS-DE-LIBROS-TRN, que es
el que realmente realiza la importacin y que s transacciona.
Este segundo proceso toma la variable que le hemos pasado, la memoriza
en una local, busca todos los ficheros y los importa. A continuacin busca
el libro, modifica la ficha seleccionada e importa la foto.
Con esta estructura estamos generando una transaccin por cada 500 fo-
tos. De este modo la ejecucin es rpida, ya que generamos pocas tran-
sacciones y a la base de datos le cuesta poco importar 500 fotos. Adems
bloqueamos menos registros y durante menos tiempo, a lo que hemos de
aadir que el gasto en memoria es menor.
11 Servidor de aplicaciones
PROCESO IMPORT-PORTADAS-DE-LIBROS-TRN
572 573 VELAZQUEZ VISUAL
11.14.6. Efectos negativos no deseados
Bucle en el cliente con las bsquedas, historial del servidor
Fijmonos en el siguiente proceso con el que actualizamos las ventas de los
clientes entre fechas:
El origen del proceso es una lista de la tabla CLIENTES. ste recorre en
solo lectura la lista de clientes, y lanza la bsqueda VENTAS-ENTRE-FE-
CHAS-CLIENTE, que devuelve las ventas de cada cliente y que es ali-
mentada por las variables que hemos modificado antes de lanzarla. A
continuacin recorre la lista de artculos y modifica la cantidad de cada
artculo.
Este proceso genera una sola transaccin, pero ocasiona un efecto no de-
seado: cada vez que se lanza la bsqueda (tantas veces como clientes con-
tenga la lista) se genera un registro en el historial, lo que disminuye en gran
modo el rendimiento del proceso adems de cargar el historial con registros
no deseados.
Cmo salvar este inconveniente? Para evitar este efecto aprovechamos
que las bsquedas no son memorizadas en el historial cuando se lanzan en
tercer plano, de modo que diseamos un nuevo proceso, ACTUALIZAR-
VENTAS-CLIENTES-FECHAS-3P, con origen ficha de la tabla CLIENTES. El
proceso es el siguiente:
Este proceso hemos de lanzarlo en tercer plano desde principal (ACTUALI-
ZAR-VENTAS-CLIENTES-FECHAS), pero entonces nos encontraremos con
otro detalle: estaremos generando tantas transacciones como clientes ten-
ga la lista, de modo que al proceso principal hemos de aadirle una sen-
tencia que implique escritura en disco bajo una condicin que no se cum-
pla. El proceso totalmente optimizado sera:
PROCESO ACTUALIZAR-VENTAS-CLIENTES-FECHAS NO OPTIMIZADO
PROCESO ACTUALIZAR-VENTAS-CLIENTES-FECHAS-3P
Lista de registros en una tabla en memoria
Supongamos un almacn en el que se realiza inventario mediante una pistola
inalmbrica conectada al puerto serie de una mquina. De este modo gene-
raremos una lista de registros en una tabla en memoria, pero tenemos un pro-
blema: las tablas en memoria no pueden compartirse en arquitectura cliente -
servidor, de modo que el motor no tiene acceso a la tabla del irunner.
En parte podemos solventar este problema, ya que no se puede compartir
una lista entera, pero s un solo registro de la lista. Vemoslo en el siguien-
te proceso (no optimizado):
11 Servidor de aplicaciones
PROCESO OPTIMIZADO
PROCESO NO OPTIMIZADO
574 575 VELAZQUEZ VISUAL
En el proceso anterior, cuyo origen es una lista de una tabla en memoria (los
cdigos de barras ledos por la pistola), filtramos y ordenamos (permitido en
este caso por tratarse de una tabla en memoria). A continuacin multiparti-
mos por el artculo, recorremos la lista, modificamos la ficha y disparamos
el tubo de ficha que da de alta en la tabla MOV STOCKS la cantidad total a
regularizar. De este modo (uno a uno) s podemos compartir los registros de
una tabla en memoria.
El proceso anterior, que se ejecuta en primer plano, va bien si trabajamos
en un red local, pero qu ocurrira si el almacn que regulariza se encuen-
tra en remoto? y si adems al dar de alta un registro en la tabla MOV
STOCKS se disparan contenidos iniciales que evalan varios punteros? En
este caso, al lanzar el tubo de ficha en primer plano se generaran muchos
sockets, que retardaran en gran modo la aplicacin.
Podemos optimizar el proceso ejecutando en tercer plano el siguiente sub-
proceso con origen ficha de la tabla en memoria:
De este modo la ejecucin es mucho ms rpida, ya que en tercer plano no
se generan todos los sockets generados en primer plano. El proceso opti-
mizado es el siguiente:
PROCESO M-IMPUT-PISTOL-REGULARIZAR-3P
11.15
Incorporacin de un manual de
ayuda propio para una aplicacin
Podemos utilizar nuestro propio manual de ayuda para una aplicacin final,
en lugar de usar el manual del ejecutor de proyectos/navegador de Velz-
quez Visual. Para ello crearemos el manual de ayuda con formato HLP, as
como su fichero de contenidos correspondiente (.CNT). Ambos ficheros
tendrn que ser llamados igual que el proyecto (por ejemplo, si hemos crea-
do un proyecto llamado Gestion.map, tenemos que nombrar los ficheros
Gestion.hlp y Gestion.cnt).
Tendremos que almacenar el manual de ayuda en el directorio creado para
la aplicacin en el cach de disco de la mquina cliente. Cuando un clien-
te se conecta por primera vez con un servidor, automticamente, dentro de
la carpeta WINDOWS o WINNT (segn el sistema operativo) de su disco lo-
cal, se crea una carpeta llamada Vatp; dentro de sta se generar una car-
peta cuyo nombre ser la IP del servidor conectado; dentro de esta carpe-
ta se crearn subcarpetas por cada aplicacin que haya sido ejecutada;
dentro de la carpeta de la aplicacin se incluir el manual de ayuda corres-
pondiente.
En ejecucin, cuando el usuario solicite ayuda se visualizar el fichero de
ayuda que hayamos creado para la aplicacin.
11 Servidor de aplicaciones
PROCESO OPTIMIZADO
576 577 VELAZQUEZ VISUAL
Resumen
Con el Servidor de Aplicaciones y HTTP de Velzquez Visual los usuarios
podrn acceder con el Navegador a una aplicacin a travs de Internet con
el protocolo VATP. Adems ste podr servir pginas web, tanto estticas
como dinmicas. Esto ltimo quiere decir que las pginas web se presen-
tarn con datos procedentes de la base de datos de la aplicacin, gene-
rndose en tiempo real y quedando totalmente integradas con la aplicacin.
Podremos ver las pginas web tanto con el Navegador de Velzquez Visual
como con cualquier explorador web. Esto implica tambin que podremos
ver va http, y en tiempo real, las actualizaciones y modificaciones hechas
por Internet va VATP y viceversa, las modificaciones que hagamos con el
navegador podrn ser vistas al instante por un usuario con un explorador
web.
Para servir una aplicacin debemos configurar primero el motor, instalar la
aplicacin en el servidor y luego configurar los usuarios, sus grupos, las m-
quinas y las carpetas que queramos que compartan, etc. Por defecto, crea-
r un usuario, que ser el Supervisor.
Con el Servidor de Aplicaciones viene una aplicacin denominada Historial
del Servidor, donde se graban todos los movimientos que en ste se pro-
ducen y que nos permite conocer su funcionamiento.
Es conveniente la realizacin de copias de seguridad de los siguientes ar-
chivos para prevenir modificaciones accidentales, en caso de reinstalacin
del servidor, etc., y poder recuperar los datos referentes a la configuracin
del servidor:
fuvm.vuf: aplicaciones abiertas, usuarios y sus propiedades, grupos de
usuarios, etc.
tareas.fuv: tareas programadas.
carcom.vuf: carpetas compartidas.
Con el Navegador nos conectaremos al Servidor de Aplicaciones para eje-
cutar una aplicacin de la lista que nos presenta. Adems podremos ver
pginas web y explorar equipos para ver las carpetas compartidas.
Debemos tener en cuenta a la hora de servir una aplicacin que debemos
optimizarla para el medio en que va a ser ejecutada: evitar el uso de fun-
ciones que llamen numerosas veces al servidor, cuidar dnde y cmo se
ejecutan los procesos, la carga de datos que se enviar al usuario, la can-
tidad de clculos requeridos, las transacciones que se realizan, etc.
12
Editor de
personalizaciones
12.1 Introduccin
El Editor de Personalizaciones es una aplicacin que permite tanto perso-
nalizar Informes y Dibujos ya existentes en una aplicacin de Velzquez Vi-
sual, como crear nuevos informes y dibujos para la misma.
Los Informes se utilizan para presentar en papel una lista de registros
de una tabla de datos. Cada informe est asociado a una tabla de da-
tos. Al presentar el resultado de una bsqueda en una rejilla, los regis-
tros a imprimir son los que forman parte de la lista en curso, los cuales
pueden haber sido obtenidos como resultado de una bsqueda simple,
o de una compleja combinacin de consultas, filtrados, reordenacio-
nes, etc.
Cuando ejecutamos la aplicacin, en la opcin Archivo/Especificar in-
forme disponemos de todos los informes asociados a la tabla de da-
tos en curso y que podemos utilizar para imprimir la lista de la rejilla ac-
tual.
Velzquez Visual dispone de una potente herramienta visual para el diseo
de informes que permite definir con gran sencillez cabeceras, lneas de de-
talle, pies, agrupamientos, clculos, condiciones, etc.
Los Dibujos se utilizan en distintas partes de un proyecto, como logos, di-
bujos explicativos, iconos, etc., dentro de objetos tales como son los For-
mularios, los Mens de tipo formulario, Mens arbolados e Informes. El di-
bujo no puede ser modificado, aunque s puede ser personalizado, es de-
cir, en ejecucin no podemos modificar el dibujo, pero podemos hacer que
aparezca uno distinto para cada perfil. ste es el motivo por el que a veces
se les denomina dibujos estticos. Los dibujos dinmicos son los dibujos
que el usuario incorpora a la aplicacin en tiempo de ejecucin formando
parte de sus datos.
Es posible crear diferentes personalizaciones para una misma aplicacin.
Cada una de esas personalizaciones se denomina Perfil. En cualquier caso,
lo primero que hay que hacer al arrancar el editor de personalizaciones es
cargar el mapa de datos de la aplicacin de Velzquez Visual que queremos
personalizar; este mapa de datos tiene la extensin .MAP.
Cada personalizacin que creemos ser guardada en el directorio de la apli-
cacin (donde se encuentra el mapa de datos) con el identificador que se
haya especificado y con la extensin .MVP.
Todo el trabajo que se realiza en el Editor de Personalizaciones es guarda-
do automticamente en el instante en que se crea o modifica algn objeto
o personalizacin.
12 Editor de personalizaciones
580 581 VELAZQUEZ VISUAL
12.2 Interfaz del editor
12.2.1. Partes de la ventana del editor
Una vez arrancado el editor de personalizaciones, seleccionamos el mapa
de datos que vamos a personalizar. Se trata de un fichero con extensin
.MAP que ha sido creado con el Editor de Proyectos de Velzquez Visual.
Para cargarlo ejecutamos la opcin de men Archivo/Abrir o pulsamos el
botn de la barra de herramientas del Editor de Personalizaciones. Se
abrir el cuadro de dilogo para la seleccin de fichero.
En Buscar en seleccionamos la carpeta donde se encuentra el mapa de da-
tos. Una vez encontrado, lo seleccionamos y pulsamos el botn Abrir. En-
tonces el Editor se dividir en cuatro paneles diferentes.
Estos paneles son:
Panel de informacin: informa sobre la aplicacin y la personalizacin en
curso. Nos indica la senda del archivo del que estamos realizando perso-
Abrir aplicacin
nalizaciones y la senda del archivo donde nos guarda la personalizacin
creada.
Panel de personalizaciones: lista de las diferentes personalizaciones que se
han creado para el mapa de datos en curso.
Panel de objetos personalizables: lista de objetos (informes y dibujos) que el
programador ha designado como personalizables dentro del mapa en cur-
so. Si no aparece ninguno se debe a que el mapa no contiene objetos per-
sonalizables.
Panel de objetos aadidos: lista de objetos (informes y dibujos) que se han
aadido al mapa en la personalizacin en curso.
Para modificar las dimensiones de un panel hacemos clic con el botn iz-
quierdo del ratn y movemos las barras que dividen los paneles.
Una vez cargado el mapa de datos hay que crear una nueva personaliza-
cin o seleccionar una existente.
12.2.2. Barra de Mens
En la barra de mens podemos acceder a las siguientes opciones:
Archivo
En el men Archivo podemos acceder a las siguientes opciones: Abrir...
(Ctrl+A) un mapa a editar o Cerrar ste. Imprimir y Presentacin prelimi-
nar estn deshabilitados. Aunque podamos Configurar impresora, de mo-
mento no se usa.
Edicin
En el men de edicin tenemos las opciones habituales de deshacer y re-
hacer ( Deshacer, Ctrl+Z), de cortar, copiar y pegar ( Cortar, Ctrl+X,
Copiar, Ctrl+C y Pegar, Ctrl+V).
12 Editor de personalizaciones
Abrir
Cerrar
Deshacer
Cortar
Copiar
Pegar
582 583 VELAZQUEZ VISUAL
Objetos
Desde este men accedemos a las opciones para crear nuevos objetos Di-
bujo e Informe ( Nuevo Dibujo, Nuevo Informe), editarlos (Editar, In-
tro), ver sus propiedades ( Propiedades, Alt+Intro) o eliminarlos de la per-
sonalizacin ( Suprimir, Supr).
Personalizacin
En este men podemos crear, eliminar, modificar y duplicar personalizacio-
nes ( Nueva, Suprimir, Modificar, Duplicar).
Ver
Las opciones del men Ver son iguales a las que podemos encontrar en el
Editor de Proyectos.
Gracias a la casilla de verificacin Barra de herramientas podemos ver
o dejar de ver la barra de herramientas segn est activada o no. Por otro
lado, tambin podemos activar o desactivar una barra a travs del men de
contexto de las mismas. Para ello pulsamos con el botn derecho del ratn
Nuevo Dibujo
Nuevo Informe
Propiedades
Suprimir
Nueva
Suprimir
Modificar, Duplicar
Barra de herramientas
sobre cualquier barra, mostrndose un cuadro de dilogo en el que pode-
mos decidir si ver o no la barra de Men (Barra de men), si ver o no la ba-
rra de herramientas (Estndar) y escoger, de entre las barras que hayamos
creado, cules ver y cules no (Personalizar).
Con la opcin Barra de estado decidimos si ver o no la barra de estado de
Velzquez Visual, situada en la parte inferior de la pantalla, mientras que la
opcin Personalizar nos dar acceso a la ventana para personalizar tanto la
barra de herramientas como el entorno de trabajo.
Ventana
El men Ventana contiene las opciones habituales de Windows: Casca-
da, Mosaico Horizontal, Mosaico Vertical y Arreglar Iconos, ms otras en
las que podemos escoger la personalizacin de entre las que estamos
editando.
Ayuda
El men Ayuda contiene la opcin Acerca de EdPer32.
12.2.3. Barra de Herramientas
Desde la barra de herramientas del Editor de Personalizaciones podemos
acceder a las siguientes funciones:
Abrir aplicacin: para abrir el mapa de la aplicacin a personalizar.
Cortar, Copiar y Pegar: los habituales de Windows.
Nuevo Dibujo: en el panel inferior derecho insertaremos un nuevo obje-
to Dibujo para la personalizacin que estemos editando.
12 Editor de personalizaciones
Abrir aplicacin
Cortar, Copiar y
Pegar
Nuevo Dibujo
584 585 VELAZQUEZ VISUAL
Nuevo Informe: igual que en el caso anterior, insertaremos un nuevo ob-
jeto Informe para la personalizacin que estemos editando en el panel infe-
rior derecho.
Propiedades: editaremos las propiedades de los objetos creados y edi-
tados a travs de ventanas iguales a las que nos aparecen en el Editor de
Proyectos, pero no podremos modificar las tablas a las que pertenecen los
objetos.
Suprimir: estar habilitado para eliminar Dibujos o Informes de la perso-
nalizacin que estamos editando.
Nueva personalizacin: crearemos una nueva personalizacin para el
mapa que hemos abierto.
Propiedades Personalizacin: editaremos las propiedades de la perso-
nalizacin que estamos editando.
Suprimir Personalizacin: eliminamos la personalizacin que estemos
editando.
Acerca de: informacin sobre la versin del Editor de Personalizaciones
y tica Software, S.L.
12.2.4. Personalizacin del entorno de trabajo
A travs de la opcin del men Ver/Personalizar podemos crear nuestras
propias barras de herramientas y modificar las ya existentes.
Al igual que personalizamos las barras de herramientas en el Editor de Pro-
yectos podemos hacerlo aqu. En la pestaa Comandos de la ventana de
Personalizacin tenemos disponibles todos los comandos de los que se
puede hacer uso en el Editor de Personalizaciones.
Nuevo Informe
Propiedades
Suprimir
Nueva personalizacin
Propiedades Personalizacin
Suprimir Personalizacin
Acerca de
En la pestaa Toolbars ser donde creemos o editemos las barras de he-
rramientas.
12 Editor de personalizaciones
586 587 VELAZQUEZ VISUAL
12.3 Creacin de personalizaciones
12.3.1. Designacin de objetos como personalizables
12.3.1. (Editor de Proyectos)
Para personalizar tanto un dibujo como un informe tendremos que haberlo
designado como personalizable al editarlo con el Editor de Proyectos.
Para ello debemos, en primer lugar, configurar el mapa como personali-
zable a travs del men Edicin/Propiedades proyecto del Editor de Pro-
yectos.
En la pestaa General de la ventana Propiedades proyecto tenemos la op-
cin Personalizable, que debemos activar marcando su casilla.
Aceptamos esta ventana, presentndose otra en la que se indica que Ve-
lzquez Visual ha creado una nueva carpeta con el ttulo $Personalizables,
en la que deben estar todos aquellos objetos que queremos personalizar.
Aceptamos y vamos moviendo o copiando todos aquellos objetos que que-
ramos personalizar. Puede darse el caso de que no queramos modificar nin-
guno de los objetos del mapa y lo que pretendamos sea aadir informes o
dibujos a los ya disponibles. En ese caso podemos dejar vaca la carpeta
$Personalizables. Los objetos que aadamos se guardarn con el perfil.
Debemos tener en cuenta que los objetos a personalizar son Informes y Di-
bujos. Los Dibujos son tanto los que usemos en los informes, como los que
aparezcan en formularios, mens, etc., de la propia aplicacin.
Cuando el usuario del perfil de personalizacin use el informe o aparezca al-
gn dibujo, stos sern sustituidos por los que hemos creado en la perso-
nalizacin. Si el usuario no posee perfil ninguno o no est modificado el ob-
jeto en su personalizacin, se usarn los que definimos en el mapa.
12.3.2. Nueva personalizacin
12.3.2. (Editor de Personalizaciones)
Entraremos ahora en el Editor de Personalizaciones. ste nos pedir el mapa
a editar en una ventana de seleccin de fichero (recordemos que debe tener
activada la opcin personalizable). Una vez seleccionado, para crear una nue-
va personalizacin ejecutaremos la opcin de men Personalizacin/Nueva o
pulsaremos el botn de la barra de herramientas del Editor.
12 Editor de personalizaciones
Nueva personalizacin
588 589 VELAZQUEZ VISUAL
Al crear una nueva personalizacin se pide un Nombre del archivo y una
Descripcin de la misma.
El archivo ser creado con el nombre especificado y con la extensin .MVP,
en la misma carpeta donde se encuentra el mapa de datos (fichero .MAP).
De esta forma, al ejecutar la aplicacin se podrn cargar las diferentes per-
sonalizaciones que hayamos creado.
Si a la personalizacin le damos un nombre de archivo igual que el del ma-
pa de datos (el fichero .MAP) sta ser cargada directamente al ejecutar la
aplicacin, con lo que aquellos informes y dibujos del mapa que hayamos
personalizado sern impresos y visualizados, respectivamente, tal y como se
ha definido en la personalizacin, y aquellos informes y dibujos que se hayan
creado en la personalizacin estarn disponibles para todos los usuarios.
Una vez aceptada la creacin de la personalizacin sta aparecer en el pa-
nel correspondiente y se crearn automticamente dos carpetas en el pa-
nel de objetos aadidos para guardar all los distintos dibujos e informes
que creemos para dicha personalizacin.
Si queremos trabajar sobre una personalizacin ya existente, basta con se-
leccionarla en el panel correspondiente (arriba a la derecha).
Podemos modificar las propiedades de una personalizacin ya creada eje-
cutando la opcin del men Personalizacin/Modificar o pulsando el botn
de la barra de herramientas.
Si queremos eliminar una personalizacin la seleccionaremos en el panel de
personalizaciones y pulsamos el botn de la barra de herramientas o en
el men Personalizacin.
Modificar personalizacin
Suprimir personalizacin
Todas las personalizaciones que se hagan tanto en informes y dibujos del
mapa de datos, como nuevos informes y dibujos que se creen, sern guar-
dados en el fichero de personalizacin actual.
Los objetos que hayamos personalizado en la personalizacin activa se dis-
tinguirn del resto por tener el icono junto a su identificador.
Tambin es posible duplicar una personalizacin. Para ello basta con selec-
cionar la personalizacin que se quiere duplicar y ejecutar la opcin de me-
n Personalizacin/Duplicar.
12.4
Personalizar objetos de un mapa
de Velzquez Visual
Una vez arrancado el Editor de Personalizaciones y seleccionado el mapa
de datos que queremos personalizar, si hemos creado informes y dibujos
personalizables stos sern mostrados en el panel de objetos personaliza-
bles. Recordemos que para poder personalizar los objetos debemos haber
creado antes una personalizacin.
Un mismo informe o dibujo es personalizable de forma independiente en
cada personalizacin que generemos. Es decir, podemos crear diferentes
personalizaciones con distintas variaciones de un mismo informe. As, en
tiempo de ejecucin se presentar el informe que corresponda a la perso-
nalizacin activa.
Debemos tener en cuenta que, una vez personalizado un informe o un di-
bujo, si modificamos el original en el mapa, estos cambios no se vern en
los objetos de las personalizaciones, puesto que son independientes y es-
pecficos para cada uno de los perfiles.
12.4.1. Personalizar un informe
Para personalizar un informe hay que hacer doble clic sobre el mismo en el pa-
nel de objetos personalizables del Editor de Informes Personalizables. Si el in-
forme an no ha sido personalizado, en la personalizacin activa aparecer un
cuadro de dilogo en el que debemos confirmar nuestra intencin de editarlo.
Si pulsamos el botn No se cancelar la personalizacin del informe. Si pul-
samos S se mostrar el otro cuadro de dilogo en el que debemos decidir
12 Editor de personalizaciones
Marcador
590 591 VELAZQUEZ VISUAL
si lo que vamos a modificar es una copia del original o partimos de un in-
forme en blanco. En ambos casos, el informe que obtengamos sustituir al
original cuando el usuario del perfil lo use.
Si pulsamos el botn S accederemos directamente al Editor de Informes,
en el que podremos realizar cuantas modificaciones sean necesarias en el
diseo del informe.
Si pulsamos el botn No se presentar el cuadro de dilogo del Asistente
para la creacin de informes.
En este cuadro de dilogo tendremos que seleccionar cmo queremos crear
el informe:
Ninguno: se ejecutar directamente el Editor de informes.
Asistente para informes: para crear de forma rpida y sencilla un informe.
Incluye diferentes plantillas.
Asistente para etiquetas: para crear de forma rpida y sencilla un informe de
etiquetas.
Asimismo, se ha de especificar el nombre que tendr el informe. La tabla a
la que est asignado, lgicamente, no se puede cambiar.
El informe que personalicemos ser guardado en la personalizacin ac-
tiva.
Si el informe ya hubiese sido personalizado con anterioridad, se acceder
directamente al Editor de Informes.
12.4.2. Personalizar un dibujo
Para personalizar un dibujo hay que hacer doble clic sobre el mismo en
el panel de objetos personalizables del Editor de Personalizaciones. Si
an no hemos personalizado el dibujo en la personalizacin activa, apa-
recer de nuevo un cuadro de dilogo en el que confirmar que lo vamos
a hacer:
Para llevar a cabo la personalizacin pulsaremos el botn S y entraremos
en el Editor de Dibujos. Si el dibujo ya haba sido personalizado se accede-
r directamente al Editor de Dibujos.
Las modificaciones que se hagan en el mismo sern guardadas en la per-
sonalizacin activa.
12 Editor de personalizaciones
592 593 VELAZQUEZ VISUAL
12.4.3. Crear informes y dibujos
Adems de personalizar objetos ya existentes en el mapa de datos, pode-
mos crear nuevos informes y dibujos para las personalizaciones, que po-
drn ser cargados al ejecutar la aplicacin.
Estos informes y dibujos que creemos nicamente se presentarn cuando
sea el usuario del perfil quien arranque la aplicacin. Para el resto de perfi-
les no estarn disponibles.
Si hemos aadido una serie de informes en un perfil y queremos que stos
estn disponibles para otros usuarios, lo que podemos hacer es duplicar el
perfil y trabajar sobre ste. Tambin podemos abrir dos perfiles distintos,
entrar en un informe y copiar los controles para pegarlos en otro informe
que hayamos creado en el otro perfil, o en el mismo en el que estamos tra-
bajando (debemos tener en cuenta que las ordenaciones y agrupaciones,
as como la plantilla elegida que definimos, no se copian, sino que debemos
hacerlo de nuevo al crear el nuevo informe).
Para crear un nuevo Informe pulsamos el botn Nuevo informe, mos-
trndose entonces la ventana del Asistente para informes.
Nuevo informe
El informe que nos crea tendr como identificador el prefijo MVP y el nom-
bre de la tabla a la que est asignado.
Si queremos crear un nuevo Dibujo pulsaremos el botn Nuevo Dibujo,
crendose uno con un identificador con el prefijo MVP. Pulsando Intro po-
dremos entrar al Editor de Dibujos.
Estos nuevos objetos que creamos aparecen en el panel inferior derecho
agrupados en carpetas: los dibujos en una carpeta nica denominada Di-
bujos y los informes en una carpeta que se llama como la tabla a la que es-
tn asignados que cuelga de otra carpeta de Informes.
12.5
Cargar las personalizaciones
en la aplicacin
Una vez que hemos creado las personalizaciones en un mapa, ya estn lis-
tas para ser cargadas en el Ejecutor de Proyectos de Velzquez Visual. Pa-
ra ello ejecutaremos la aplicacin y si existe alguna personalizacin con el
mismo nombre que el mapa de datos (el fichero .MAP) sta ser cargada
automticamente para todos los usuarios. Si hemos creado personalizacio-
nes con nombre diferente al de la aplicacin habr que proceder de la for-
ma siguiente:
12 Editor de personalizaciones
Nuevo Dibujo
594 595 VELAZQUEZ VISUAL
La aplicacin debe ser ejecutada por un usuario que haya sido dado de al-
ta como Administrador y que tenga nivel de privilegio suficiente como para
poder modificar a otros usuarios. Recordemos que un usuario administra-
dor no puede dar de alta, modificar o borrar a otros usuarios que tengan
igual o mayor nivel de privilegio que l. A cada usuario de la aplicacin po-
demos asignarle solamente una personalizacin, pero podemos asignar una
misma personalizacin a varios usuarios.
Una vez entramos como administrador, ejecutamos la opcin del men Op-
ciones/Usuarios, apareciendo la ventana de edicin de usuarios. Seleccio-
namos un usuario y pulsamos el botn Modificar.
En el apartado Perfil seleccionaremos la personalizacin que queremos
asignar al usuario.
A partir de este momento dicho usuario tendr a su disposicin tanto los di-
bujos e informes que hayamos personalizado como los que creemos nue-
vos en la personalizacin.
Ejemplo: Personalizacin
Vamos a crear un perfil de usuario en el que cambiaremos el logo de la em-
presa que se usa a lo largo de la aplicacin en mens, informes y formula-
rios. Tambin modificaremos un informe para que presente una ficha redu-
cida de los clientes y no la ficha completa que por defecto lleva la aplica-
cin. Tambin aadiremos un informe que nos haga una lista de clientes con
unos pocos datos.
Comenzamos haciendo personalizable el mapa. Para ello entramos en el
Editor de Proyectos y abrimos el mapa pulsando el botn Propiedades
proyecto o en el men Edicin/Propiedades proyecto.
12 Editor de personalizaciones
Si se han creado
personalizaciones durante la
ejecucin de la aplicacin,
para que stas puedan ser
cargadas basta con que el
usuario del perfil salga de la
aplicacin. La siguiente vez
que entre ya usar el nuevo.
ADVERTENCIA
e
Propiedades proyecto
596 597 VELAZQUEZ VISUAL
Aparece entonces la ventana en la que podemos editar las propiedades del
proyecto. En la pestaa General se encuentra la casilla que debemos mar-
car: Personalizable.
A continuacin Velzquez Visual nos avisa de lo que acaba de crear: una
carpeta que se llama $Personalizables, en la que debemos situar aquellos
objetos que queremos personalizar.
All creamos un objeto tipo Dibujo cuyo identificador ser LOGO y que ser el
que usemos como logo para las empresas. Este LOGO lo incrustamos en for-
mularios, mens, en los informes, etc. Cuando se ejecute la aplicacin, depen-
diendo de a qu empresa pertenece el usuario que entre, el LOGO ser distinto.
Podemos entrar en el Editor de Dibujos pulsando Intro o haciendo doble clic
sobre l y poner un dibujo que sea el que aparezca por defecto cuando el
usuario no tenga perfil.
e
De la carpeta Clientes movemos el Informe que hemos creado para esta ta-
bla y lo pasamos tambin a la carpeta de $Personalizables. De esta mane-
ra, ambos objetos sern accesibles desde el Editor de Personalizaciones.
Al entrar en el Editor de Personalizaciones, ste pide un mapa para perso-
nalizarlo (si ya editamos alguno antes abrir ste directamente). Seleccio-
namos el que hemos creado.
Una vez dentro podemos ver que los elementos que hemos definido como
personalizables en el Editor de Proyectos ahora aparecen en el panel infe-
rior izquierdo. Vemos tambin que en los paneles de objetos aadidos (pa-
nel inferior derecho) y en el de los perfiles (panel superior derecho) no hay
ningn elemento.
En primer lugar hemos de crear un perfil. Para ello pulsamos el botn
Nueva personalizacin, aparecindonos entonces una ventana donde de-
bemos introducir el Nombre del archivo de la personalizacin y una Des-
cripcin de ste.
12 Editor de personalizaciones
e
Nueva personalizacin
598 599 VELAZQUEZ VISUAL
Recordemos que, si ponemos como nombre del archivo el del mapa, ten-
dremos una personalizacin que afectar a todos aquellos que no tengan
perfil propio. Nosotros llamaremos al archivo empresa1 y pondremos una
descripcin, por ejemplo, Perfil para la empresa 1.
Aceptamos y vemos cmo aparece, en el panel de los perfiles, el recin
creado. Si adems de este perfil creamos otros, debemos tenerlo seleccio-
nado cuando modifiquemos objetos o creemos alguno nuevo.
Vemos tambin que nos han dos carpetas en el panel de nuevos objetos:
una de Dibujos y otra de Informes. Cuando creemos un nuevo objeto, ste
ser creado en su carpeta correspondiente.
Comenzamos por modificar el objeto dibujo LOGO. Hacemos doble clic so-
bre l, avisndonos el programa de que El objeto an no ha sido personali-
zado y si queremos hacerlo.
Pulsamos el botn S y seguimos adelante. Nos aparece entonces el Editor
de Dibujos con el que contuviera en el mapa. En nuestro caso tenemos un
logo que cambiaremos por el de la empresa 1.
e
Como podemos ver, las opciones para introducir dibujos son las mismas
que en el Editor de Proyectos. A travs del men Edicin podemos Pe-
gar (Ctrl+V) una imagen desde el portapapeles, Pegar desde... un archivo
del disco duro, o bien importar un Objeto OLE.
Introducimos nuestro logo a travs de alguno de estos tres medios, y sali-
mos del Editor de Dibujos. Tenemos entonces el logo personalizado para la
empresa 1. Todos aquellos usuarios que entren con el perfil propio de esta
empresa vern como logo en informes, formularios, etc., el de la empresa
1. El resto de usuarios que no tengan perfil vern el logo original que hemos
incluido en el mapa.
12 Editor de personalizaciones
e
Pegar
600 601 VELAZQUEZ VISUAL
Cuando salimos del Editor de Dibujos podemos ver cmo el objeto Dibujo
que acabamos de editar tiene una marca , indicando que ha sido perso-
nalizado en el perfil actual.
No es necesario guardar estos cambios. El Editor de Personalizaciones
guarda inmediatamente los cambios a medida de que se van realizando en
cada uno de los objetos. En caso de querer eliminar una personalizacin
para restaurar el objeto anterior, eliminamos ste pulsando el botn Su-
primir. Esto no elimina el objeto del mapa, sino que borra la personalizacin
del perfil actual.
Vamos ahora con el informe. Decamos que el informe por defecto del ma-
pa es uno que presenta todos los datos de un cliente. Nosotros queremos
que nos haga una ficha reducida. Para ello hacemos doble clic sobre el in-
forme, preguntndonos de nuevo si queremos personalizarlo.
En el caso de los informes, adems nos pregunta si queremos realizar los
cambios sobre una copia del original, o crear uno completamente nuevo.
Como en nuestro caso lo que queremos es realizar un cambio sobre uno ya
hecho, diremos que queremos modificar una copia del original. Si lo que
quisiramos fuera crear uno nuevo completamente diferente, diramos que
no y se abrira el Asistente para Informes.
e
Marcador
Suprimir
Entramos entonces en el Editor de Informes. ste es el mismo que el del
Editor de Proyectos, con las mismas funciones que tena ste y el mismo
funcionamiento. En la ventana de edicin podemos ver el informe que guar-
damos con el mapa y que hemos de modificar.
Realizamos los cambios que nos interese hacer, en nuestro caso eliminar
una serie de campos que no queremos que aparezcan en el Detalle, poner
en el Encabezado el nombre del cliente y quitar el salto de pgina.
Salimos de nuevo al Editor de Personalizaciones y podemos ver cmo apa-
rece marcado el objeto como personalizado en este perfil.
12 Editor de personalizaciones
e
602 603 VELAZQUEZ VISUAL
Vamos a crear el informe que nos falta. Pulsamos el botn Nuevo Infor-
me, apareciendo el Asistente para informes. ste funciona exactamente
igual que en el Editor de Proyectos.
Elegimos el asistente para informes, como tabla la de Clientes y como des-
cripcin Listado de Clientes.
e
Nuevo Informe
Elegimos aquellos campos que van a aparecer en el listado y luego indica-
mos el orden o agrupamiento que nos interese, en este caso por nombre,
para que aparezcan por orden alfabtico.
Elegimos la distribucin y orientacin del papel. Como lo que queremos
realizar es un listado, elegimos En columnas y orientacin Vertical del papel.
Siguiendo con el asistente escogemos la plantilla que mejor nos parezca y
el ttulo que llevar el informe, en nuestro caso Listado de Clientes.
12 Editor de personalizaciones
e
604 605 VELAZQUEZ VISUAL
Pulsamos el botn Finalizar para entrar en el Editor de Informes.
Realizamos los cambios que necesitemos y salimos del editor. Veremos en-
tonces que este nuevo objeto creado por nosotros aparece en el panel in-
ferior derecho del Editor de Personalizaciones, colgando de la carpeta de la
tabla Clientes, que cuelga a su vez de la carpeta Informes.
Una vez realizada la personalizacin hay que asignarla al usuario. Salimos
del Editor de Personalizaciones y abrimos el ejecutor vRunner o el Navega-
e
dor de Velzquez Visual. ste nos pedir un nombre de usuario y una clave.
Vamos a cambiar el perfil de este mismo usuario que usamos para ver el re-
sultado.
Nos aparece entonces el men inicial del proyecto. En l habamos incluido
ya el logo de la empresa. A continuacin vemos el original que habamos in-
cluido en el mapa.
En la barra de mens nos vamos al men Opciones. Tenemos all la op-
cin Usuarios, que ser en la que modifiquemos las caractersticas de un
usuario. Debemos recordar que para hacer esto debemos ser Superviso-
res y tener un nivel de privilegio por encima del usuario que queramos
modificar.
12 Editor de personalizaciones
e
606 607 VELAZQUEZ VISUAL
Elegimos el Grupo de usuarios, aparecindonos la lista de usuarios perte-
neciente a ste; elegimos el que nos interese y pulsamos Modificar.
En la ventana que nos aparece podemos modificar el Nombre del usuario,
su Palabra Clave, su Privilegio, si ste ser Supervisor, a qu Grupo de
usuarios pertenece, qu Men Inicial se presentar cuando arranque la apli-
cacin y, por ltimo, el Perfil que queremos asignarle. Escogemos el que
hemos creado antes.
Adems podemos asignarle los estilos que permitirn al usuario realizar de-
terminadas opciones en la aplicacin si as las tenemos programadas.
e
Aceptamos y salimos de la Edicin de Usuarios. Ahora, como ya comenta-
mos antes, debemos salir de la aplicacin para que se carguen los perfiles
asignados.
Al volver a entrar veremos cmo el logo del men principal ha cambiado
para nuestro usuario. Adems, si entramos a la rejilla que nos muestra los
clientes, podemos ver cmo estn disponibles los informes creados pa-
ra este perfil pulsando el botn Especificar informe de la barra de he-
rramientas.
12 Editor de personalizaciones
e
Especificar informe
13
Importador XBase
El Importador Xbase es un programa que permite convertir bases de datos
de tipo ASCII o de Dbase en bases de datos de Velzquez Visual.
Por cada base de datos que importemos se generar una tabla de datos en
el proyecto de Velzquez Visual con sus datos correspondientes.
13.1 Inicio del Importador Xbase
Una vez arrancado el Importador Xbase, el primer paso a seguir es especi-
ficar el proyecto de Velzquez Visual en el que se desean importar las ba-
ses de datos.
Si queremos utilizar un proyecto ya existente, ejecutaremos la opcin del
men Archivo/Abrir o pulsaremos el botn Abrir mapa de la barra de he-
rramientas. Una vez seleccionado el archivo correspondiente, aparecer su
estructura de tablas en el panel del Importador Xbase.
Si queremos crear un nuevo proyecto de Velzquez, usaremos la opcin de
men Archivo/Nuevo Ctrl+N o el botn Nuevo mapa de la barra de he-
rramientas. Despus ejecutaremos la opcin Archivo/Guardar o pulsaremos
13 Importador XBase
Abrir mapa
612 613 VELAZQUEZ VISUAL
el botn Guardar mapa, puesto que para realizar una importacin debe-
mos tener un mapa ya guardado antes de comenzar sta: a partir de este
momento podremos importar una base de datos ASCII o una base de da-
tos de Dbase.
13.2 Importar una base de datos ASCII
Si se trata de un fichero ASCII ste no puede ser delimitado, es decir, tiene
que ser de ancho fijo (los campos estn alineados en columnas con espa-
cios entre cada campo).
Pulsando el botn Importar ASCII comenzamos la importacin. Tendre-
mos que definir la estructura del archivo ASCII que vamos a importar: el N-
mero de campos que tiene, el Nombre plural y singular que tendr la tabla
y su Identificador. Tambin tenemos que definir el tipo de tabla que creare-
mos (Tipo de base de datos): si es Maestro o Histrico. Tambin podemos
elegir uno de los campos como campo CDIGO y otro como campo NOM-
BRE. Por ltimo, podemos convertir un archivo ASCII tipo OEM en tipo AN-
SI. Esta ltima opcin la activaremos cuando el archivo desde el que que-
ramos importar provenga del sistema MS-DOS.
Pulsando doble clic sobre una definicin de campo debemos darle un Iden-
tificador, su Posicin inicial (contada desde la posicin 0) y Longitud.
Guardar mapa
Importar ASCII
Cuando tengamos definidos todos los campos, aceptamos y guardamos el
mapa que hemos generado.
Podemos repetir este proceso cuantas veces queramos, para importar
tantas tablas con sus datos como sea necesario para el proyecto.
Cuando cargamos el proyecto en el Editor de Proyectos vemos cmo se ha
creado la tabla de Velzquez Visual con sus campos correspondientes,
adems de los siguientes objetos visuales:
Una rejilla.
Una bsqueda de todo el fichero por el ndice Cdigo.
Una bsqueda de todo el fichero por el ndice Nombre.
Si ejecutamos la aplicacin, podremos disparar cualquiera de las bsque-
das creadas para consultar los datos importados.
Ejemplo 13.3.1
Queremos importar un fichero de texto con la siguiente estructura:
Enrique Enrquez Enrquez 33206 Gijn
Fernn Fernndez Fernndez 33509 Parres
Antonio Ramn Ramn 24429 Trascastro
Una vez seleccionado el mapa donde vamos a importar los datos tendre-
mos que seleccionar el fichero de texto a importar; para ello ejecutaremos
la opcin del men Importar/Ascii o pulsamos el botn Importar ASCII
de la barra de herramientas.
Aparecer un cuadro de dilogo, en el que tendremos que definir la estruc-
tura del fichero a importar (nmero de campos que contiene, identificador,
posicin inicial y longitud de cada campo). Siguiendo con el ejemplo ante-
rior habr que proceder de la forma siguiente:
13 Importador XBase
e
Importar ASCII
614 615 VELAZQUEZ VISUAL
Especificamos el nmero de campos, que sern 3, y una vez especificado
el nmero de campos aparecern los siguientes:
Campos Tipo Posicin Longitud
0 ID-0 C 0 1
1 ID-1 C 0 1
2 ID-2 C 0 1
Pulsando la barra espaciadora sobre cada fila podremos especificar las pro-
piedades de cada campo:
ID-0:
Identificador: NOMBRE
Posicin: 0
Longitud: 21
La posicin inicial hemos de contarla desde la posicin 0.
ID-1:
Identificador: COD POSTAL
Posicin: 21
Longitud: 5
ID-2:
Identificador: POBLACION
Posicin: 26
Longitud: 7
e
Una vez establecida la estructura del fichero ASCII especificaremos qu ti-
po de tabla de datos se generar en el proyecto de Velzquez. Siguiendo
con el ejemplo ser:
Nombre plural: Clientes.
Nombre singular: Cliente.
Tipo de base de datos: Maestro.
Campo cdigo: Generar nuevo campo cdigo (pues en el fichero ASCII no
existe).
Campo nombre/descripcin: NOMBRE.
Convertir OEM a ANSI: Slo necesitaremos activar esta opcin si el fichero
ASCII es un fichero de MS-DOS.
Por ltimo, aceptamos el cuadro de dilogo de importacin de fichero AS-
CII y guardamos el proyecto.
13.3 Importar una base de datos de Dbase
Si de lo que se trata es de importar un fichero de Dbase, en primer lu-
gar tendremos que, al igual que antes, seleccionar un mapa o crear uno
nuevo donde realizaremos la importacin. Despus, seleccionamos el fi-
chero DBF a importar; para ello ejecutamos la opcin del men Impor-
tar/Dbase (*.dbf) o pulsamos el botn Importar DBF de la barra de
herramientas.
Una vez seleccionado el fichero aparecer el cuadro de dilogo de im-
portacin del fichero Dbase, con la estructura del fichero dbf ya inter-
pretada.
Lo que tendremos que modificar, si as queremos, son los identificadores
de los campos, el nombre plural y singular y el identificador de la tabla re-
sultante, adems de su tipo, maestro o histrico. En el caso de que deter-
minemos que es maestro podremos decir qu campo es el cdigo, o que
se genere uno por cada registro, y cul ser el que usemos como campo
nombre.
13 Importador XBase
e
Importar DBF
616 617 VELAZQUEZ VISUAL
Anexo I
Formateadores
de Velzquez
Visual
A continuacin presentamos
los formateadores con los que
podemos trabajar en Velz-
quez Visual.
Alfabticos
Al colocar un nmero detrs
del smbolo #, indicamos la
longitud mxima de la cadena
que se est formateando.
Por ejemplo, para limitar el ta-
mao de salida del campo
%NOMBRE% a 25 caracteres,
escribimos:
%NOMBRE#25%
Numricos
(Todos los ejemplos que vie-
nen a continuacin se harn
con la cifra 1.250)
S: formatea el campo numri-
co visualizndolo con separa-
dor de miles.
Por ejemplo, para que una co-
lumna muestre el contenido
del campo IMPORTE con se-
parador de miles escribimos:
%IMPORTE#S%
El resultado sera: 1.250
Dx: formatea el campo numri-
co visualizndolo con x deci-
males.
Por ejemplo, para que una co-
lumna muestre el contenido
del campo IMPORTE con 2 de-
cimales y sin separador de mi-
les, escribimos:
%IMPORTE#D2%
El resultado sera: 1250,00
(Para incluir separador de miles
escribimos %IMPORTE#D2S%,
siendo el resultado 1.250,00)
Lx: formatea el campo pegn-
dolo a la izquierda y rellenando
con espacios a la derecha has-
ta alcanzar x caracteres.
Por ejemplo, para que el im-
porte aparezca a la izquierda
rellenando hasta el carcter
nmero 12 con espacios he-
mos de escribir:
%IMPORTE#L12%
El resultado sera: 1250
(- es un espacio en blanco).
Rx: formatea el campo pegn-
dolo a la derecha y rellenando
con espacios a la izquierda
hasta llegar a x caracteres.
Por ejemplo, para que el im-
porte aparezca a la derecha re-
llenando hasta el carcter n-
mero 1 con espacios, escribi-
mos:
%IMPORTE#R12%
El resultado es: 1250
Cx: formatea el campo pegn-
dolo a la derecha y rellenando
con ceros a la izquierda hasta
llegar a x caracteres.
Por ejemplo, para que el impor-
te aparezca a la derecha relle-
nando hasta el carcter nme-
ro 12 con ceros, escribimos:
%IMPORTE#C12%
El resultado es: 000000001250
De fechas
(Para los ejemplos usaremos la
fecha domingo, 2 de agosto de
1998)
&d: visualiza el da del mes de
un campo fecha (1 - 31)
Por ejemplo, para que una co-
lumna muestre slo el da del
mes del campo FECHA, escri-
bimos:
%FECHA#&d%
El resultado es: 2
&e: visualiza el da del mes de
un campo fecha (01 - 31)
Por ejemplo, para que una co-
lumna muestre slo el da del
mes del campo FECHA, escri-
bimos:
%FECHA#&e%
El resultado es: 02
&L: visualiza, en castellano, el
da de la semana (en texto) de
un campo fecha.
Por ejemplo, para que una co-
lumna muestre slo el da de la
semana del campo FECHA,
escribimos:
%FECHA#&L%
El resultado es: Domingo
&A: visualiza, en ingls, el da
de la semana (en texto) de un
campo fecha (monday, etc.).
Por ejemplo, para que una co-
lumna muestre slo el da de la
semana del campo FECHA,
escribimos:
%FECHA#&A%
El resultado es: Sunday
&l: (L minscula) visualiza, en
castellano, el da de la semana
(abreviado) de un campo fecha.
Por ejemplo, para que una co-
lumna muestre slo el da en
texto abreviado del campo FE-
CHA, escribimos:
%FECHA#&l%
El resultado es: Dom
&a: visualiza, en ingls, el da
de la semana (abreviado) de un
campo fecha.
Por ejemplo, para que una co-
lumna muestre slo el da en
texto abreviado del campo FE-
CHA, escribimos:
Anexo I
Formateadores de
Velzquez Visual
620 621 VELAZQUEZ VISUAL
%FECHA#&a%
El resultado es: Sun
&m: visualiza el nmero del mes
de un campo fecha (1 - 12).
Por ejemplo, para que una co-
lumna muestre slo el mes del
campo FECHA, escribimos:
%FECHA#&m%
El resultado es: 8
&n: visualiza el nmero del mes
de un campo fecha (01 - 12).
Por ejemplo, para que una co-
lumna muestre slo el mes del
campo FECHA, escribimos:
%FECHA#&n%
El resultado es: 08
&K: visualiza, en castellano, el
mes (en texto) de un campo fecha.
Por ejemplo, para que una colum-
na muestre slo el mes, en texto,
del campo FECHA, escribimos:
%FECHA#&K%
El resultado es: Agosto
&B: visualiza, en ingls, el mes
(en texto) de un campo fecha.
Por ejemplo, para que una co-
lumna muestre slo el mes, en
texto, del campo FECHA, es-
cribimos:
%FECHA#&B%
El resultado es: August
&k: visualiza, en castellano, el
mes (en texto abreviado) de un
campo fecha.
Por ejemplo, para que una co-
lumna muestre slo el mes, en
texto abreviado, del campo
FECHA, escribimos:
%FECHA#&k%
El resultado es: Ago
&b: visualiza, en ingls, el mes
(en texto abreviado) de un
campo fecha.
Por ejemplo, para que una co-
lumna muestre slo el mes, en
texto abreviado, del campo
FECHA, escribimos:
%FECHA#&b%
El resultado es: Aug
&j: visualiza el da del ao de
un campo fecha (1 - 366).
Por ejemplo, para que una co-
lumna muestre slo el da del
ao del campo FECHA, escri-
bimos:
%FECHA#&j%
El resultado ser: 212
&u: visualiza el da de la sema-
na en nmero de un campo fe-
cha (1 - 7; Lunes= 1).
Por ejemplo, para que una co-
lumna muestre slo el da de la
semana del campo FECHA,
escribimos:
%FECHA#&u%
El resultado ser: 7
&w: visualiza el nmero del da
de la semana de un campo fe-
cha (0 - 6; Domingo= 0).
Por ejemplo, para que una co-
lumna muestre slo el nmero
del da de una semana de un
campo FECHA, escribimos:
%FECHA#&w%
El resultado es: 0
&W: visualiza el nmero de la
semana del ao de un campo
fecha (0 - 51).
Por ejemplo, para que una co-
lumna muestre slo el nmero
de la semana del ao de un
campo FECHA, escribimos:
%FECHA#&W%
El resultado es: 30
&U: visualiza el nmero de la
semana del ao de un campo
fecha (1 - 52).
Por ejemplo, para que una co-
lumna muestre slo el nmero
de la semana del ao de un
campo FECHA, escribimos:
%FECHA#&U%
El resultado es 31
&x: formatea la fecha en la for-
ma que el sistema est confi-
gurado.
Por ejemplo, para que una co-
lumna muestre el contenido de
un campo FECHA segn el for-
mato definido en el sistema,
escribimos:
%FECHA#&x%
&Y: visualiza el ao de un cam-
po fecha con siglo.
Por ejemplo, para que una co-
lumna muestre slo el ao de
un campo FECHA, escribimos:
%FECHA#&Y%
El resultado es 1998
&y: visualiza el ao de un cam-
po fecha sin siglo (0 - 99).
Por ejemplo, para que una co-
lumna muestre slo el ao sin
siglo de un campo FECHA, es-
cribimos:
%FECHA#&y%
El resultado es: 98
&z: visualiza el ao de un cam-
po fecha sin siglo (00 - 99)
Por ejemplo, para que una co-
lumna muestre slo el ao sin
siglo de un campo FECHA, es-
cribimos:
%FECHA#&z%
El resultado es: 98
De horas
(Para los ejemplos tomaremos
como referencia la hora 12:31:22)
&H: visualiza las horas (0 - 23)
Por ejemplo; %HORA#&H%
dara el resultado: 12
&M: visualiza los minutos (0 - 59)
Por ejemplo; %HORA#&M%
dara el resultado: 31
&S: visualiza los segundos (0 -
59)
Por ejemplo; %HORA#&S%
dara el resultado: 22
Si escribiramos %HO-
RA#&H:&M:&S%, el resulta-
do sera: 12:31:22
Las subcadenas que presenta-
mos a continuacin son espe-
cficas para los informes. Aun-
que coinciden algunos de los
elementos con los del resto de
controles, las etiquetas en al-
gunos casos son distintas. El
uso es el mismo que en el ca-
so anterior.
Anexo I
Formateadores de
Velzquez Visual
%P Nmero de pgina actual
%T Nmero total de pginas
%n Nmero de elementos de la lista
%d Da del mes (1 - 31)
%m Mes (1 - 12)
%K Nombre del mes completo
%k Nombre del mes abreviado
%Y Ao con siglo (Milenio). Por ej. 1996
%y Ao sin siglo (00 - 99)
%w Da de la semana (0 - 6). Domingo= 0
%L Nombre del da de la semana completo
%l Nombre del da de la semana abreviado
%j Da del ao (1 - 366)
%U Semana del ao (0 - 51). Inicio semana: domingo
%W Semana del ao (0 - 51). Inicio semana: lunes
%H Hora (0 - 23)
%I Hora ( 1 - 12)
%p AM/PM
%M Minuto (0 - 59)
%S Segundo (0 - 59)
Anexo II
Funciones
del asistente
de edicin
de frmulas de
Velzquez Visual
Para cada funcin mostraremos
su sintaxis, siendo opcionales
todos aquellos parmetros que
van entre corchetes ([ ]) , es de-
cir, no es obligatoria su especifi-
cacin. Disponemos de un
asistente para la edicin de fr-
mulas por cada parmetro de la
funcin, de esta manera resulta
ms fcil su composicin.
Funciones numricas:
Absoluto
Devuelve el valor absoluto del
nmero, es decir, desprecia el
signo.
Sintaxis:
fAbsoluto ( x )
Parmetros:
x: ha de ser un nmero o una
expresin numrica.
Ejemplo:
fAbsoluto ( -35 ) = 35
Redondear
Devuelve el nmero entero o
decimal ms prximo al valor.
Sintaxis:
fRedondear ( Valor [ , deci-
mal ] )
Parmetros:
Valor: dato numrico a redon-
dear.
Decimal: posicin del decimal
a redondear (opcional).
Ejemplo:
%VALOR% = 12, 58
fRedondear ( %VALOR% ) = 13
fRedondear ( %VALOR% , 1 )
= 12,6
Entero
Devuelve la parte entera del
valor o recorta decimales.
Sintaxis:
fEntero ( Valor [ , decimales ] )
Parmetros:
Valor: dato numrico a cortar.
Decimales: nmero de decima-
les a tener en cuenta (opcional).
Ejemplo:
%VALOR% = 12, 58
fEntero ( %VALOR% ) = 12
fEntero ( %VALOR% , 1 ) = 12,5
Porcentaje
Devuelve el nmero resultante
de aplicar el porcentaje al valor.
Sintaxis:
fPorcentaje ( Valor , porcen-
taje )
Parmetros:
Valor: dato numrico.
Porcentaje: porcentaje.
Ejemplo:
fPorcentaje ( 100 , 20 ) = 20
Neto
Devuelve el neto del valor, es
decir, el valor menos el porcen-
taje.
Sintaxis:
fNeto ( Valor , porcentaje )
Parmetros:
Valor: dato numrico.
Porcentaje: porcentaje.
Ejemplo:
fNeto ( 100 , 20 ) = 80
NumeroAleatorio
Genera un nmero entero alea-
torio.
Sintaxis:
fNumeroAleatorio ( )
NumeroEnLetras
Convierte un nmero a texto
descrito con palabras y ade-
ms permite seleccionar el g-
nero (masculino o femenino).
Sintaxis:
fNumeroEnLetras ( Valor [ ,
Masculino ] )
Parmetros:
Valor: dato numrico a convertir.
Masculino: gnero, 0-masculi-
no, 1-femenino.
Ejemplo:
fNumeroEnLetras ( 1235,1 ) =
mil doscientos treinta y cinco.
fNumeroEnLetras ( 1235, 2 ) =
mil doscientas treinta y cinco.
FormatNumero
Convierte un nmero en cade-
na de texto formateada segn
parmetros. Ej: 123.456,07.
Sintaxis:
fFormatNumero ( valor [ ,
bSepMiles [ , nDecimales] ] )
Parmetros:
Valor: dato numrico a convertir.
BSepMiles: separador de mi-
les. Un 1 incluir separador de
miles y un 0 no.
nDecimales: nmero de deci-
males a incluir.
Ejemplo: %NUMERO%= 1234,25
fFormatNumero ( %NUME-
RO% ) = 1234
fFormatNumero ( %NUME-
RO%, 0 , 2 ) = 1234,25
fFormatNumero ( %NUME-
RO%, 1 , 2 ) = 1.234,25
Funciones de cadenas:
Len
Devuelve el nmero de carac-
teres de la expresin.
Sintaxis:
fLen ( ExpAlfa )
Anexo II
Funciones del asistente
de edicin de frmulas
de Velzquez Visual
626 627 VELAZQUEZ VISUAL
Parmetros:
ExpAlfa: expresin alfabtica.
Ejemplo:
fLen ( Velzquez ) = 9
Left
Extracta caracteres por la iz-
quierda de la cadena. El primer
carcter tiene la posicin 1.
Sintaxis:
fLeft ( ExpAlfa , Longitud )
Parmetros:
ExpAlfa: expresin alfabtica.
Longitud: nmero de caracte-
res a extraer.
Ejemplo:
fLeft ( Velzquez , 3 ) = Vel
Right
Extracta caracteres por la dere-
cha de la cadena. Se comenza-
r a contar desde la posicin 1.
Sintaxis:
fRight ( ExpAlfa , Longitud )
Parmetros:
ExpAlfa: expresin alfabtica.
Longitud: nmero de caracte-
res a extraer.
Ejemplo:
fRight ( Velzquez , 2 ) = ez
Mid
Extracta caracteres a partir de
una posicin determinada de
la cadena. Se comienza a con-
tar desde la posicin 0.
Sintaxis:
fMid ( ExpAlfa , Posicin ,
Longitud )
Parmetros:
ExpAlfa: expresin alfabtica.
Posicin: posicin desde la
cual se van a extraer los carac-
teres.
Longitud: nmero de caracte-
res a extraer.
Ejemplo:
fMid ( Velzquez , 4, 3 ) = zqu
LeftPalabras
Extrae la parte izquierda de la
cadena, a partir de una deter-
minada posicin sin cortar pa-
labras.
Sintaxis:
fLeftPalabras ( Cadena , Lon-
gitud )
Parmetros:
Cadena: expresin alfabtica.
Longitud: posicin a partir de la
cual se desea extraer palabras.
Ejemplo:
fLeftPalabras ( Juan Martnez
Lpez , 4 ) = Juan
RightPalabras
Extrae la parte derecha de la
cadena, a partir de una deter-
minada posicin sin cortar pa-
labras.
Sintaxis:
fRightPalabras ( Cadena ,
Longitud )
Parmetros:
Cadena: expresin alfabtica.
Longitud: posicin a partir de
la cual se desea extraer pala-
bras.
Ejemplo:
fRghtPalabras ( Juan Martnez
Lpez , 8 ) = Lpez
JustificarLeft
Devuelve una cadena, pegada
a la izquierda, de la longitud
especificada en los parme-
tros, rellenando por la derecha,
si es necesario, con el carcter
de relleno especificado en los
parmetros o espacios.
Sintaxis:
fJustificarLeft ( Dato , Longi-
tud [ , Relleno ] )
Parmetros:
Dato: expresin alfabtica.
Longitud: longitud total de la
cadena (ha de ser un nmero).
Relleno: carcter de relleno.
Ejemplo:
fJustificarLeft ( Velzquez ,
15 , * ) = Velzquez******
fJustificarLeft (Velzquez, 15
) = Velzquez
JustificarRight
Devuelve una cadena, pegada
a la derecha, de la longitud es-
pecificada en los parmetros,
rellenada por la izquierda, si es
necesario, con el carcter de
relleno o, en su defecto, espa-
cios en blanco.
Sintaxis:
fJustificarRight ( Dato , Lon-
gitud [ , Relleno ] )
Parmetros:
Dato: expresin alfabtica.
Longitud: longitud total de la
cadena (ha de ser un nmero).
Relleno: carcter de relleno.
Ejemplo:
fJustificarRight ( Velzquez ,
15 , * ) = ******Velzquez
fJustificarRight (Velzquez,
15 ) = Velzquez
InvertirCadena
Da la vuelta a la cadena.
Sintaxis:
fInvertirCadena ( Cadena )
Parmetros:
Cadena: expresin alfabtica a
invertir.
Ejemplo:
fMaysculas ( velzquez ) =
zeuqzlev
Valor
Convierte una cadena alfabti-
ca en su valor numrico.
Sintaxis:
fValor ( ExpAlfa )
Parmetros:
ExpAlfa: expresin alfabtica.
CheckSet
Comprueba si todos los carac-
teres de la primera cadena
pertenecen tambin a la se-
gunda cadena.
Sintaxis:
fCheckSet ( ExpAlfa1 , Ex-
pAlfa2 )
Parmetros:
ExpAlfa1: cadena a controlar.
ExpAlfa2: cadena de referencia.
Ejemplo:
%CAMPO1% = dos
%CAMPO2% = codos
fCheckSet ( %CAMPO1% ,
%CAMPO2% ) = 1
Campo1 = dos
Campo2 = coros
fCheckSet ( %CAMPO1% ,
%CAMPO2% ) = 0
CheckSetNum
Devuelve 1 (SI) si todos los ca-
racteres de la cadena son dgi-
tos (0 al 9) y 0 (NO) si no lo son.
Si la cadena incluye separador
de miles o dcimas, la funcin
devolver 0.
Sintaxis:
fCheckSetNum ( Cadena )
Parmetros:
Cadena: expresin alfabtica
de referencia.
Ejemplo:
fCheckSetNum ( 123456 ) = 1
fCheckSetNum ( 123456a ) = 0
CheckSetAlfa
Devuelve 1 (SI) si todos los ca-
racteres de la cadena son alfa-
bticos de la A a la Z, incluidas
la y la , sean maysculas,
minsculas o acentuadas, y 0
(NO) si no lo son.
Sintaxis:
fCheckSetAlfa ( Cadena )
Parmetros:
Cadena: expresin alfabtica
de referencia.
Ejemplo:
fCheckSetAlfa ( Nio ) = 1
fCheckSetAlfa ( Almacn 1 ) = 0
CheckSetAlfanum
Devuelve 1 (SI) si todos los ca-
racteres de la cadena son alfa-
bticos (de la A a la Z, y in-
cluidas) o dgitos (0 al 9). Equi-
vale a fCheckSetNum | fCheck-
SetAlfa.
Sintaxis:
fCheckSetAlfaNum ( Cadena )
Parmetros:
Cadena: expresin alfabtica
de referencia.
Ejemplo:
fCheckSetAlfaNum ( Almacn
1 ) = 1
fCheckSetAlfaNum ( Almacn
1 ) = 0
PosSubCadena
Devuelve la posicin del inicio
de la subcadena de texto den-
tro de la cadena, o -1 si no la
contiene. La posicin se ha de
comenzar a contar desde el 0.
Sintaxis:
fPosSubcadena ( Cadena ,
Subcadena, Posicin )
Parmetros:
Cadena: expresin alfabtica
de referencia.
Subcadena: expresin alfab-
tica a comprobar.
Posicin: posicin inicial de la
bsqueda (la primera posicin
ser 0).
Ejemplo:
%CAMPO1% = codos
%CAMPO2% = dos
fPosSubcadena ( %CAM-
PO1% , %CAMPO2% ) = 2
Campo1 = coros
Campo2 = dos
fPosSubcadena ( %CAM-
PO1% , %CAMPO2% ) = -1
OcurrenciasSubCadena
Devuelve el numero de veces
que aparece la subcadena en
la cadena.
Sintaxis:
fOcurrenciasSubCadena ( Ca-
dena , Subcadena)
Parmetros:
Cadena donde buscar: expre-
sin alfabtica de referencia.
Subcadena a buscar: expre-
sin alfabtica a buscar en la
cadena.
Posicin inicial bsqueda ca-
dena: posicin a partir de la
cual se realizar la bsqueda
de la cadena.
Ejemplo:
%CAMPO% = monton
fOcurrenciasSubCadena ( %CAM-
PO% , n, 4 ) = 1
fOcurrenciasSubCadena ( %CAM-
PO% , on, 1) = 2
SustituirSubCadena
Sustituye en la cadena todas
las ocurrencias de la subcade-
na 1 por la 2.
Anexo II
Funciones del asistente
de edicin de frmulas
de Velzquez Visual
628 629 VELAZQUEZ VISUAL
Sintaxis:
fSustituirSubCadena ( Cade-
na , Subcadena1 , Subcade-
na 2 )
Parmetros:
Cadena (dnde buscar): expre-
sin alfabtica de referencia.
Subcadena1 (qu buscar): ex-
presin alfabtica a buscar en
la cadena.
Subcadena2 (sustituta): expre-
sin alfabtica a sustituir en la
Cadena por los caracteres de
la Subcadena1.
Ejemplo:
%CAMPO% = pelo
fOcurrenciasSubCadena ( %CAM-
PO% , l , rr ) = perro
RepiteCadena
Devuelve una cadena repetida
tantas veces como se especifi-
que en sus parmetros.
Sintaxis:
fRepiteCadena ( Cadena ,
Repeticiones )
Parmetros:
Cadena: constante o expresin
alfabtica.
Repeticiones: nmero de ve-
ces a repetir.
Ejemplo:
fRepiteCadena ( * , 5 ) = *****
fRepiteCadena (abc, 5 ) =
abcabcabcabcabc
CadenaToAscii
Devuelve el cdigo ASCII del
carcter especificado de la ca-
dena. Si no se le pasa posicin
coge el 1 (posicin= 0).
Sintaxis:
fCadenaToAscii ( Cadena [ ,
Posicin ] )
Parmetros:
Cadena: constante o expresin
alfabtica.
Posicin: posicin del carcter
a convertir (la primera posicin
es la posicin 0).
Ejemplo:
fCadenaToAscii ( abc ) = a
fCadenaToAscii (abc, 1 ) = b
AsciiToCadena
Devuelve una cadena con un
carcter del cdigo ASCII es-
pecificado como parmetro.
Sintaxis:
fAsciiToCadena ( NmeroAs-
cii )
Parmetros:
NumeroAscii: nmero ASCII
del carcter que se desea ob-
tener (debe ser un nmero en-
tre el 0 y el 255).
Funciones de
conversin de cadenas:
Maysculas
Convierte una expresin alfa-
btica a maysculas.
Sintaxis:
fMaysculas ( ExpAlfa )
Parmetros:
ExpAlfa: expresin alfabtica.
Ejemplo:
fMaysculas ( velzquez ) =
VELZQUEZ
Minsculas
Convierte una expresin alfa-
btica a minsculas.
Sintaxis:
fMinsculas ( ExpAlfa )
Parmetros:
ExpAlfa: expresin alfabtica.
Ejemplo:
fMinsculas ( VELZQUEZ )
= velzquez
EstiloNombre
Convierte la primera letra de
cada palabra a maysculas y
el resto a minsculas.
Sintaxis:
fEstiloNombre ( cadena )
Parmetros:
cadena: constante o expresin
alfabtica a convertir.
Ejemplo:
fEstilo nombre ( velzquez vi-
sual ) = Velzquez Visual
QuitarAcentos
Elimina los acentos de la cadena.
Sintaxis:
fQuitarAcentos ( cadena )
Parmetros:
cadena: constante o expresin
alfabtica a convertir.
Ejemplo:
fQuitarAcentos ( Velzquez )
= Velazquez
AnsiToOem
Convierte la cadena de ANSI
(Windows) a OEM (MS-DOS).
Sintaxis:
fAnsiToOem ( cadena )
Parmetros:
cadena: constante o expresin
alfabtica a convertir.
OemToAnsi
Convierte la cadena de OEM
(MS-DOS) a ANSI (Windows).
Sintaxis:
fOemToAnsi ( cadena )
Parmetros:
cadena: constante o expresin
alfabtica a convertir.
QuitarEspacios
Devuelve la cadena pasada co-
mo parmetro sin espacios por
la izquierda ni por la derecha.
Sintaxis:
fQuitarEspacios ( cadena )
Parmetros:
cadena: constante o expresin
alfabtica a convertir.
Ejemplo:
%CADENA% = Velzquez Vi-
sual
fQuitarAcentos ( %CADENA% )
= Velzquez Visual
Funciones de fecha:
Fecha
Devuelve la fecha del da, mes
y ao solicitados.
Sintaxis:
fFecha ( Da [ , Mes [ , Ao ] ] )
Parmetros:
Da: nmero.
Mes: nmero. Es opcional, por
defecto se tomar el mes de la
fecha del sistema.
Ao: nmero. Es opcional, por
defecto se tomar el ao de la
fecha del sistema.
Ejemplo:
Fecha del sistema: 11-May-
1998
fFecha ( 26 ) = 26-May-1998
fFecha ( 26 , 8 ) = 26-Ago-1998
fFecha (26 , 8 , 1999) = 26-
Ago-1999
Da
Devuelve el da de la fecha que
se le pase como parmetro.
Sintaxis:
fDa ( Fecha )
Parmetros:
Fecha: fecha de la que se de-
sea extraer el da.
Ejemplo:
%FECHA% = 12-Mayo-1998
fDa ( %FECHA% ) = 12
Mes
Devuelve el mes de la fecha que
se le pase como parmetro.
Sintaxis:
fMes ( Fecha )
Parmetros:
Fecha: fecha de la que se de-
sea extraer el mes.
Ejemplo:
%FECHA% = 12-Mayo-1998
fMes ( %FECHA% ) = 5
Trimestre
Devuelve el trimestre de la fe-
cha que se le pase como par-
metro.
Sintaxis:
fTrimestre ( Fecha )
Parmetros:
Fecha: fecha de la que se de-
sea extraer el trimestre.
Ejemplo:
%FECHA% = 12-Mayo-1998
fTrimestre ( %FECHA% ) = 2
Ao
Devuelve el ao de la fecha
que se le pase como parme-
tro.
Sintaxis:
fAo ( Fecha )
Parmetros:
Fecha: fecha de la que se de-
sea extraer el ao.
Ejemplo:
%FECHA% = 12-Mayo-1998
fAo ( %FECHA% ) = 1998
Hoy
Devuelve la fecha del sistema.
Sintaxis:
fHoy ( )
Edad
Devuelve la diferencia en aos
entre dos fechas.
Sintaxis:
fEdad ( Fecha1 [ , Fecha2 ] )
Parmetros:
Fecha1: fecha menor.
Fecha2: fecha mayor. Es op-
cional, si no se especifica nin-
guna fecha tomar por defecto
la fecha del sistema.
Ejemplo:
Fecha actual = 11-Mayo-1998
%FECHA% = 26-Dic-1968
fEdad ( %FECHA% ) = 29
FormatFecha
Formatea una fecha del mismo
modo que se hace con campos
fecha, siendo el 2 parmetro la
subcadena de formato.
Sintaxis:
fFormatFecha ( Fecha, sz-
Formato )
Parmetros:
Fecha: fecha.
szFormato: subcadena de for-
mato.
Ejemplo:
%FECHA% = 20/06/1998
fFormatFecha ( %FECHA% ,
En Gijn, a %d de %K de
%Y ) -> En Gijn, a 20 de Ju-
nio de 1998
FechaDasFijos
Si el da de la fecha no es uno
de los fijos, la fecha ser modi-
ficada por una fecha con da fi-
jo segn el modo (0 -> ms
Anexo II
Funciones del asistente
de edicin de frmulas
de Velzquez Visual
630 631 VELAZQUEZ VISUAL
prximo, 1 -> inmediatamente
superior, 2 -> inmediatamente
inferior).
Sintaxis:
fFechaDasFijos ( Fecha , nMo-
do , nDa1 , [ [ nDa2 ] , ...] )
Parmetros:
Fecha: fecha.
nModo: modo (0, 1 o 2).
nDa1, [nDa2]: da fijo
Ejemplo:
Si la fecha es el 2-Jul-1998 y
los das fijos son 1, 15, 30, de-
volver segn el estilo:
fFechaDasFijos( %FECHA%,
0, 1,15,30 ) = 1-Jul-1998
fFechaDasFijos( %FECHA%,
1, 1,15,30 ) = 15-Jul-1998
fFechaDasFijos( %FECHA%,
2, 1,15,30 ) = 1-Jul-1998
SumaMeses
Devuelve la fecha resultante de
sumar el nmero de meses es-
pecificado en el segundo par-
metro a la fecha especificada
en el primero.
Sintaxis:
fSumaMeses ( Fecha , meses )
Parmetros:
Fecha: fecha.
Meses: nmero de meses a
sumar a la fecha.
Ejemplo:
Si la fecha es el 2-Jul-1998
fSumaMeses ( %FECHA%, 6 )
-> 2-Ene-1998
SumaAos
Devuelve la fecha resultante de
sumar el nmero de aos es-
pecificado en el segundo par-
metro a la fecha especificada
en el primero.
Sintaxis:
fSumaAos ( Fecha , aos )
Parmetros:
Fecha: fecha.
Aos: nmero de aos a sumar
a la fecha.
Ejemplo:
Si la fecha es el 2-Jul-1998
fSumaMeses ( %FECHA%, 6 )
-> 2-Ene-2004
DasDelMes
Devuelve el nmero de das del
mes y ao pasados como pa-
rmetros.
Sintaxis:
fDasDelMes ( nMes , nAo )
Parmetros:
nMes: nmero del mes.
nAo: nmero del ao.
Ejemplo:
Si el campo fecha es el 2-Feb-
2000
fDasDelMes ( fMes( %FECHA%
), fAo( %FECHA%) ) -> 29
EsBisiesto
Devuelve 1 si la fecha o el n-
mero pasado como parmetro
es un ao bisiesto y 0 si no lo es.
Sintaxis:
fEsBisiesto ( dato )
Parmetros:
Dato: expresin Fecha o nmero.
Funciones de hora:
Ahora
Devuelve la hora del sistema
en formato HH:MM:SS.
Sintaxis:
fAhora ( )
ComponerHora
Compone una Hora partiendo
de sus elementos. Devuelve un
valor de tipo hora.
Sintaxis:
fComponerHora ( horas , mi-
nutos , segundos )
Parmetros:
Horas: constante o expresin
numrica.
Minutos: constante o expre-
sin numrica.
Segundos: constante o expre-
sin numrica.
Ejemplo:
fComponerHora ( 13 , 24 , 55 )
-> 13:24:55
GetHoras
Extracta las horas de la hora
pasada como parmetro.
Sintaxis:
fGetHoras ( Hora )
Parmetros:
Hora: expresin de tipo hora.
Ejemplo:
%HORA% = 15:17:21
fGetHoras ( %HORA% ) -> 15
GetMinutos
Extracta los minutos de la hora
pasada como parmetro.
Sintaxis:
fGetMinutos ( Hora )
Parmetros:
Hora: expresin de tipo hora.
Ejemplo:
%HORA% = 15:17:21
fGetHoras ( %HORA% ) -> 17
GetSegundos
Extracta los segundos de la
hora pasada como parmetro.
Sintaxis:
fGetSegundos ( Hora )
Parmetros:
Hora: expresin de tipo hora.
Ejemplo:
%HORA% = 15:17:21
fGetSegundos ( %HORA% ) ->
21
FormatHora
Formatea una hora del mismo
modo que se hace con cam-
pos hora, siendo el 2 parme-
tro la subcadena de formato.
Sintaxis:
fFormatHora( Hora , szFor-
mato )
Parmetros:
Hora: expresin de tipo hora.
SzFormato: subcadena de for-
mato
Ejemplo:
%HORA% = 23:12:33
fFormatHora ( %HORA%,
%H horas, %M minutos y %S
segundos ) -> 23 horas, 12
minutos y 33 segundos.
SegundosDiferencia
Devuelve la diferencia en se-
gundos entre las horas de las
fechas especificadas en sus
parmetros.
Sintaxis:
fSegundosDiferencia( Fecha
desde , Hora desde , Fecha
hasta , Hora hasta )
Parmetros:
Fecha desde: fecha inicial del
clculo.
Hora desde: hora inicial del
clculo.
Fecha hasta: fecha final del
clculo.
Hora hasta: hora final del cl-
culo.
Ejemplo:
FECHA-INICIO = 30/06/1998;
HORA-INICIO = 16:00:00
FECHA-FIN = 01/7/1998; HO-
RA-FIN = 16:00:00
fSegundosDiferencia (%FE-
CHA-INICIO%, %HORA-INI-
CIO%, %FECHA-FIN%, %HO-
RA-FIN%) = 84600
SumaSegundosFecha
Devuelve la fecha resultante de
sumar los segundos a la Fe-
cha/Hora.
Sintaxis:
fSumaSegundosFecha ( Fe-
cha , Hora , Segundos )
Parmetros:
Fecha: expresin de tipo fecha.
Hora: expresin de tipo hora.
Segundos: constante o expre-
sin numrica.
Ejemplo:
FECHA = 30/06/1998
HORA-FIN = 15:50:35
SEGUNDOS = 38000
fSumaSegundosFecha( %FE-
CHA-ENTRADA%, %HORA-
ENTRADA%, 38000 ) = 1/7/1998
SumaSegundosHora
Devuelve la hora resultante de
sumar los segundos a la hora
especificada en sus parme-
tros. Devuelve una hora de re-
loj, es decir, que si suma un se-
gundo a las 00:59:59 la hora
devuelta ser la 1:00:00.
Sintaxis:
fSumaSegundosHora ( Hora ,
Segundos )
Parmetros:
Hora: expresin de tipo hora.
Segundos: constante o expre-
sin numrica.
Ejemplo:
HORA = 15:51:54
SEGUNDOS = 120000
fSumaSegundosHora( %HORA
%, %SEGUNDOS% ) = 1:11:24
Funciones varias:
DecidirDato
Elige un dato en funcin de
una condicin.
Sintaxis:
fDecidirDato ( Condicin ,
DatoSI , DatoNO )
Parmetros:
Condicin: frmula a evaluar.
DatoSI: resultado cuando se
cumple la condicin.
DatoNO: resultado cuando no
se cumple la condicin.
Ejemplo:
fDecidirDato ( 1=0, Verdade-
ro, Falso ) = Devuelve Falso.
fDecidirDato ( 1=1, Verdade-
ro, Falso ) = Devuelve Ver-
dadero.
Mayor
Devuelve el mayor de los dos
parmetros. El tipo de compa-
racin (numrica, fecha o alfa-
btica) depende del tipo de
dato especificado en el primer
parmetro.
Sintaxis:
fMayor ( x , y )
Parmetros:
x : constante o expresin.
y: constante o expresin.
Ejemplo:
fMayor ( 25, 12 ) = 25
fMayor( 12/10/1968,
24/05/1980 ) = 24-May-1980
fMayor ( abc , def ) = def
Menor
Devuelve el menor de los dos pa-
rmetros. El tipo de comparacin
Anexo II
Funciones del asistente
de edicin de frmulas
de Velzquez Visual
632 633 VELAZQUEZ VISUAL
(numrica, fecha o alfabtica) de-
pende del tipo de dato especifi-
cado en el primer parmetro.
Sintaxis:
fMenor ( x , y )
Parmetros:
x: constante o expresin.
y: constante o expresin.
Ejemplo:
fMenor ( 25, 12 ) = 12
fMenor( 12/10/1968,
24/05/1980 ) = 12-Oct-1968
fMenor ( abc , def ) = abc
CampoVaco
Devuelve 1 si el campo que se
le pasa como parmetro est
vaco y 0 si no lo est.
Sintaxis:
fCampoVaco ( %ID_CAM-
PO% )
Parmetros:
%ID_CAMPO%: identificador
del campo.
Ejemplo:
%NOMBRE% =
fCampoVaco (%NOMBRE%) = 1
%NOMBRE% = Luis
fCampoVaco (%NOMBRE%) = 0
Pregunta
Presenta un cuadro de dilogo
con el texto que le pasemos
como parmetro, con los boto-
nes SI y NO. Devuelve uno si
se puls SI y 0 si se puls NO.
Sintaxis:
fPregunta ( ExpAlfa )
Parmetros:
ExpAlfa: texto a presentar en el
cuadro de dilogo.
Mensaje
Presenta un cuadro de dilogo
con el texto que le pasemos
como parmetro y un botn
Aceptar.
Sintaxis:
fMensaje ( ExpAlfa )
Parmetros:
ExpAlfa: texto a presentar en el
cuadro de dilogo.
Ejemplo:
fMensaje ( Est seguro que
desea continuar? )
UserFlag
Devuelve un 1 si el usuario ac-
tual tiene activo el estilo que se
pase como parmetro y 0 si lo
tiene desactivado. Esta fun-
cin se utiliza para establecer
condiciones para restringir el
acceso de usuarios a ciertas
partes de la aplicacin. Como
parmetro utiliza un estilo de
usuario de los definidos por el
programador.
Sintaxis:
fUserFlag ( Nmero )
Parmetros:
Numero: nmero del estilo de
usuario.
Ejemplo:
El estilo 1- puede modificar
campos lo tiene activado el
usuario CARLOS y desactivado
el usuario PEDRO. En tiempo de
ejecucin, una sesin de CAR-
LOS fUserFlag (1) = 1 y en una
de PEDRO fUserFalg (1) = 0.
NombrePC
Devuelve el nombre del equipo
(PC) que est ejecutando la
aplicacin.
Sintaxis:
fNombrePC ( )
Parmetros:
No tiene.
EjecutarFuncinRemota
Ejecuta una funcin remota en
un servidor Velzquez.
Sintaxis:
EjecutarFuncinRemota ( Do-
minio, IDAplicacin, IDFun-
cin, Parmetros)
Parmetros:
Dominio: expresin frmula del
dominio o IP del servidor del
que se quiere lanzar la funcin
remota.
IDAplicacin: expresin frmula
del alias de la aplicacin de la
que se quiere lanzar una funcin.
IDFuncin: expresin frmula
del identificador de la funcin
que se quiere lanzar.
Parmetros: expresin frmula
de los parmetros de la funcin.
Esta funcin del asistente re-
torna el valor que devuelva la
funcin remota ejecutada.
Funciones API
de Velzquez:
GetProyectoNombre
Devuelve el nombre del proyec-
to que se haya especificado en
las propiedades del proyecto.
Sintaxis:
fGetProyectoNombre( )
Parmetros:
No tiene.
GetProyectoVersin
Devuelve la versin del proyec-
to que se haya especificado en
las propiedades del proyecto.
Sintaxis:
fGetProyectoVersin( )
Parmetros:
No tiene.
GetProyectoCompaa
Devuelve el nombre de la com-
paa que se haya especifica-
do en las propiedades del pro-
yecto.
Sintaxis:
fGetProyectoCompaa( )
Parmetros:
No tiene.
GetProyectoLicencia
Devuelve el nmero de licencia
de la compaa que se haya
especificado en las propieda-
des del proyecto.
Sintaxis:
fGetProyectoLicencia( )
Parmetros:
No tiene.
GetProyectoEsSoloLectura
Devuelve 1 si en las propieda-
des del proyecto se ha activa-
do el check Solo lectura y 0 si
no se ha activado.
Sintaxis:
fGetProyectoEsSoloLectura( )
Parmetros:
No tiene.
GetProyectoPideUsuario
Devuelve 1 si se ha activado la
peticin de usuario en las pro-
piedades del proyecto y 0 si no
se ha activado.
Sintaxis:
fGetProyectoPideUsuario( )
Parmetros:
No tiene.
GetProyectoTieneCadu-
cidad
Devuelve 1 si se ha activado la
proteccin de caducidad en
las propiedades del proyecto y
0 si no se ha activado.
Sintaxis:
fGetProyectoTieneCaduci-
dad( )
Parmetros:
No tiene.
GetProyectoCaducaFecha
Si en las propiedades del pro-
yecto se ha establecido una fe-
cha de caducidad devolver la
misma; si no se ha establecido
no devolver nada.
Sintaxis:
fGetProyectoCaducaFecha( )
Parmetros:
No tiene.
GetProyectoCaducaEje-
cuciones
Si en las propiedades del pro-
yecto se ha limitado la ejecu-
cin del proyecto por nmero
de ejecuciones, ser este n-
mero el que devuelva. Si no se
ha establecido ninguno, devol-
ver 0.
Sintaxis:
fGetProyectoCaducaEjecu-
ciones( )
Parmetros:
No tiene.
GetProyectoCaducaMen-
saje
Devuelve el mensaje escrito
en las propiedades del pro-
yecto que ser presentado al
usuario cuando caduque la
aplicacin. Si no se ha escrito
ningn mensaje no devolver
nada.
Sintaxis:
fGetProyectoCaducaMensa-
je( )
Parmetros:
No tiene.
Funciones de cliente-
servidor:
EsClienteServidor
Devuelve 1 si un proyecto Velz-
quez se est ejecutando en
Cliente-Servidor (con el Nave-
gador de Velzquez Visual), 0 en
caso contrario (con el VRunner).
Sintaxis:
fEsClienteServidor( )
Parmetros:
No tiene.
GetIPServidor
Funcin especfica para la eje-
cucin de aplicaciones en la
versin cliente-servidor de Ve-
lzquez Visual. Devuelve la IP
del servidor al que se est co-
nectado en ese momento.
Sintaxis:
fGetIPServidor( )
Parmetros:
No tiene.
HayServidorWeb
Funcin especfica para la eje-
cucin de aplicaciones en la
versin cliente-servidor de Ve-
lzquez Visual. Devuelve 1 si
hay servidor web disponible.
Sintaxis:
fHayServidorWeb( )
Parmetros:
No tiene.
GetPuertoHTTPServidor
Funcin especfica para la eje-
cucin de aplicaciones en la
versin cliente-servidor de Ve-
lzquez Visual. Devuelve el n
de puerto de escucha HTTP
del servidor Velzquez.
Sintaxis:
fGetPuertoHTTPServidor()
Anexo II
Funciones del asistente
de edicin de frmulas
de Velzquez Visual
634 635 VELAZQUEZ VISUAL
Parmetros:
No tiene.
GetWebAplicacin
Funcin especfica para la eje-
cucin de aplicaciones en la
versin cliente-servidor de Ve-
lzquez Visual. Devuelve la di-
reccin url de la aplicacin con
la que se est conectado en
ese momento. Devuelve la pa-
sarela CGI completa.
Sintaxis:
fGetWebAplicacin( )
Parmetros:
No tiene.
Ejemplo: es posible generar en
un proyecto de Velzquez Vi-
sual pginas html y desde el
Navegador de Velzquez Visual
podemos atacar a dichas pgi-
nas con su explorador web. Es-
to nos da la posibilidad de tener
un potente generador de lista-
dos, en vez de utilizando infor-
mes, utilizando pginas html.
Para este ejemplo se ha creado
en el proyecto de Velzquez Vi-
sual llamado GESTION.MAP
una pgina HTML con el identi-
ficador INDEX en la que se ha-
brn incluido links para ejecutar
diferentes bsquedas en sus
bases de datos. La pgina html
de la aplicacin que tiene este
identificador es la que se pre-
sente por defecto al acceder a
la aplicacin va web. Creare-
mos un proceso con origen nu-
lo como el que sigue:
Aadir retorno URL -> fGetWe-
bAplicacin()
Si el Servidor tiene, por ejem-
plo, la IP 200.121.21.20, esta
funcin devolvera:
ht t p: / / 212. 121. 21. 20/ cgi -
vel/GESTION/
Es decir, devuelve la pasarela
cgi completa de la aplicacin.
GetLastWebURL
Devuelve la direccin de la lti-
ma url abierta en el explorador
web que incorporan tanto el
VRunner como el Navegador
de Velzquez Visual.
Sintaxis:
fGetLastWebURL( )
Parmetros:
No tiene.
GetLastWebTitle
Devuelve el ttulo de la ltima
url abierta en el explorador
web que incorporan tanto el
VRunner como el Navegador
de Velzquez Visual.
Sintaxis:
fGetLastWebTitle( )
Parmetros:
No tiene.
Ejemplo: deseamos crear un
proyecto en el que almacenar
pginas web que nos sean de
inters; para ello se crea una
tabla que, entre otros, conten-
dr dos campos alfabticos;
URL: direccin URL y NOM-
BRE: ttulo de esa URL. Crea-
remos un proceso (el origen
del mismo depender del lugar
desde el que se dispare) como
el que sigue:
Alta Directa -> DIRECCIONES
Pre
Modificar campo -> URL, fGe-
tLastWebURL()
Modificar campo -> NOMBRE,
fGetLastWebTitle()
Post
Libre
Este proceso genera un regis-
tro en la tabla DIRECCIONES,
en el que se almacenar en el
campo URL la ltima URL
abierta en el explorador web de
Velzquez y en el campo NOM-
BRE el ttulo de dicha URL.
GetIPCliente
Funcin especfica para la eje-
cucin de aplicaciones en la
versin cliente-servidor de Ve-
lzquez Visual. Devuelve el IP
de la estacin cliente. Si el
cliente se conecta a travs de
un servidor Proxy devolver la
IP del proxy. Puede ser utiliza-
da tanto en procesos ejecuta-
dos va web como va iRunner.
Sintaxis:
fGetIPCliente( )
Parmetros:
No tiene.
Funciones de cdigos:
CalcularCheckMdulo11
Devuelve una cadena con el
carcter de comprobacin se-
gn el algoritmo Mdulo11,
usado, por ejemplo, en los c-
digos bancarios.
Sintaxis:
fCalcularCheckMdulo11 ( C-
digo )
Parmetros:
Cdigo: puede ser una cons-
tante o una expresin.
AddCheckMdulo11
Convierte el cdigo pasado
como parmetro en un cdigo
Mdulo11. Es decir, devuelve
el cdigo ms el carcter de
comprobacin. El Mdulo 11
es usado, por ejemplo, en los
cdigos bancarios.
Sintaxis:
fAddCheckMdulo11 ( Cdigo )
Parmetros:
Cdigo: puede ser una cons-
tante o una expresin.
CalcularCheckCode128
Calcula el check del parmetro
para crear un Code 128. De-
vuelve un nmero del 0 al 102
o -1 si no es correcto.
Sintaxis:
fCalcularCheckCode128 ( C-
digo )
Parmetros:
Cdigo: puede ser una cons-
tante o una expresin.
EspecialCharCode128
Caracteres especiales de Co-
de 128:
1 = FNC1
2 = FNC2
3 = FNC3
4 = FNC4
A = Cambio a Code A
B = Cambio a Code B
C = Cambio a Code C
S = Cambio (Shift)
Sintaxis:
fEspecialCharCode128 ( ca-
dena )
Parmetros:
Cadena con el carcter ms-
cara: hemos de especificar
uno de los caracteres especia-
les entrecomillados.
Ejemplo:
fEspecialCharCode128( 1 )
para FNC1
CalcularCheckEan13
Devuelve el dgito de control
que debemos aadir al cdigo
para que sea un EAN13 vlido.
La longitud del cdigo ha de
ser 12; si es mayor, los carac-
teres sobrantes sern despre-
ciados.
Sintaxis:
fCalcularCheckEan13 ( Ca-
dena )
Parmetros:
Cdigo: puede ser una cons-
tante o una expresin.
Ejemplo:
%CODIGO% = 112233445566
fCalcularCheckEan13 ( %CO-
DIGO% ) = 6
AddCheckEan13
Convierte el cdigo pasado
como parmetro en un cdigo
Ean13. Es decir, devuelve el
cdigo ms el carcter de
comprobacin.
Sintaxis:
fAddCheckEan13 ( Cdigo )
Parmetros:
Cdigo: puede ser una cons-
tante o una expresin.
EsEan13
Devuelve 1 (SI) si el cdigo es
un EAN 13, y 0 (NO) en caso
contrario.
Sintaxis:
fEsEan13 ( Cdigo )
Parmetros:
Cdigo: puede ser una cons-
tante o una expresin.
CalcularCheckEan8
Devuelve el dgito de control
que debemos aadir al cdigo
para que sea un EAN8 vlido.
La longitud del cdigo ha de
ser 7; si es mayor, los caracte-
res sobrantes sern despre-
ciados.
Sintaxis:
fCalcularCheckEan8 ( Cdigo )
Parmetros:
Cdigo: puede ser una cons-
tante o una expresin.
Ejemplo:
%CODIGO% = 1122338
fCalcularCheckEan8 ( %CODI-
GO% ) = 2
AddCheckEan8
Convierte el cdigo pasado
como parmetro en un cdigo
Ean8. Es decir, devuelve el c-
digo ms el carcter de com-
probacin.
Sintaxis:
fAddCheckEan8 ( Cdigo )
Parmetros:
Cdigo: puede ser una cons-
tante o una expresin.
EsEan8
Devuelve 1 (SI) si el cdigo es
un EAN8, y 0 (NO) en caso
contrario.
Sintaxis:
fEsEan8 ( Cdigo )
Parmetros:
Cdigo: puede ser una cons-
tante o una expresin.
CalcularCheckUpc
Devuelve el dgito de control
que debemos aadir al cdigo
para que sea un UPC vlido.
La longitud del cdigo ha de
ser 11; si es mayor, los carac-
teres sobrantes sern despre-
ciados.
Sintaxis:
fCalcularCheckUpc ( Cdigo )
Parmetros:
Cdigo: puede ser una cons-
tante o una expresin.
Ejemplo:
%CODIGO% = 11223344559
Anexo II
Funciones del asistente
de edicin de frmulas
de Velzquez Visual
636 637 VELAZQUEZ VISUAL
fCalcularCheckUpc ( %CODI-
GO% ) = 3
AddCheckUpc
Convierte el cdigo pasado
como parmetro en un cdigo
UPC. Es decir, devuelve el c-
digo ms el carcter de com-
probacin.
Sintaxis:
fAddCheckUpc ( Cdigo )
Parmetros:
Cdigo: puede ser una cons-
tante o una expresin.
EsUpc
Devuelve 1 (SI) si el cdigo es
un UPC, y 0 (NO) en caso con-
trario.
Sintaxis:
fEsUpc ( Cdigo )
Parmetros:
Cdigo: puede ser una cons-
tante o una expresin.
CalcularCheckCode11
Devuelve el dgito de control que
debemos aadir al cdigo para
que sea un CODE11 vlido.
Sintaxis:
fCalcularCheckCode11 ( C-
digo )
Parmetros:
Cdigo: puede ser una cons-
tante o una expresin.
Ejemplo:
%CODIGO% = 112233445599
fCalcularCheckCode11 (
%CODIGO% ) = 3
AddCheckCode11
Convierte el cdigo pasado co-
mo parmetro en un cdigo
Code11. Es decir, devuelve el
cdigo ms el carcter de com-
probacin.
Sintaxis:
fAddCheckCode11 ( Cdigo )
Parmetros:
Cdigo: puede ser una cons-
tante o una expresin.
EsCode11
Devuelve 1 (SI) si el cdigo es
un CODE11, y 0 (NO) en caso
contrario.
Sintaxis:
fEsCode11 ( Cdigo )
Parmetros:
Cdigo: puede ser una cons-
tante o una expresin.
CalcularCheckIsbn
Devuelve una cadena de un ca-
rcter con el dgito de control
que debemos aadir al dato
para que sea un ISBN vlido.
Sintaxis:
fCalcularCheckIsbn ( Cdigo )
Parmetros:
Cdigo: cdigo a partir del
cual se determinar el dgito de
control.
AddCheckIsbn
Convierte el cdigo pasado
como parmetro en un cdigo
ISBN. Es decir, devuelve el c-
digo ms el carcter de com-
probacin.
Sintaxis:
fAddCheckIsbn ( Cdigo )
Parmetros:
Cdigo: puede ser una cons-
tante o una expresin.
EsIsbn
Devuelve 1 (SI) si el cdigo es
un ISBN, y 0 (NO) en caso con-
trario.
Sintaxis:
fEsIsbn ( Cdigo )
Parmetros:
Cdigo: cdigo que se desea
comprobar si es un ISBN vlido.
EanToIsbn
Convierte un EAN en un ISBN.
Sintaxis:
fEanToIsbn ( ean )
Parmetros:
ean: constante o expresin que
contenga el cdigo EAN que se
desea convertir en ISBN.
IsbnToEan
Convierte un cdigo ISBN en
un EAN.
Sintaxis:
fIsbnToEan ( isbn )
Parmetros:
isbn: constante o expresin
que contenga el cdigo ISBN
que se desea convertir en EAN.
Funciones de juegos
de caracteres:
GetCharAlfa40
Devuelve el carcter corres-
pondiente al nmero pasado
como parmetro en la tabla de
caracteres Alfa40.
Sintaxis:
fGetCharAlfa40 ( nmero )
Parmetros:
Nmero.
GetCharAlfa64
Devuelve el carcter corres-
pondiente al nmero pasado
como parmetro en la tabla de
caracteres Alfa64.
Sintaxis:
fGetCharAlfa64 ( nmero )
Parmetros:
Nmero.
GetCharAlfa128
Devuelve el carcter corres-
pondiente al nmero pasado
como parmetro en la tabla de
caracteres Alfa128.
Sintaxis:
fGetCharAlfa128 ( nmero )
Parmetros:
Nmero.
GetCodeCharAlfa40
Devuelve el cdigo correspon-
diente a la tabla de Alfa40 del
carcter de la cadena pasada
como primer parmetro, en la
posicin especificada en el se-
gundo.
Sintaxis:
fGetCodeCharAlfa40 ( cade-
na, [posicin] )
Parmetros:
Cadena: cadena de la que se
desea extraer el cdigo.
Posicin: (opcional), posicin en
la cadena del carcter del que
se desea obtener el cdigo.
GetCodeCharAlfa64
Devuelve el cdigo correspon-
diente a la tabla de Alfa64 del
carcter de la cadena pasada
como primer parmetro, en la
posicin especificada en el se-
gundo.
Sintaxis:
fGetCodeCharAlfa64 ( cade-
na, [posicin] )
Parmetros:
Cadena: cadena de la que se
desea extraer el cdigo.
Posicin: (opcional), posicin en
la cadena del carcter del que
se desea obtener el cdigo.
GetCodeCharAlfa128
Devuelve el cdigo correspon-
diente a la tabla de Alfa128 del
carcter de la cadena pasada co-
mo primer parmetro, en la posi-
cin especificada en el segundo.
Sintaxis:
fGetCodeCharAlfa128 ( ca-
dena, [posicin] )
Parmetros:
Cadena: cadena de la que se
desea extraer el cdigo.
Posicin: (opcional), posicin en
la cadena del carcter del que
se desea obtener el cdigo.
Funciones de
directorios:
AjustaSenda
Convierte una senda para que
sea interpretada correctamente.
Es decir, sustituye la barra de di-
rectorios (\) en \\. Esta funcin
debe utilizarse con datos varia-
bles, no con constantes especi-
ficadas por el programador.
Sintaxis:
fAjustaSenda ( senda )
Parmetros:
Senda: senda path a ajustar.
Ejemplo:
%PATH% = c:\Archivos de
Programa
fAjustaSenda ( %PATH% ) =
C:\\Archivos de Programa
SendaSinNombreExt
Devuelve unidad y directorio
del parmetro, es decir, de-
vuelve la senda sin el nombre
ni la extensin del archivo.
Sintaxis:
fSendaSinNombreExt ( senda )
Parmetros:
Senda: dato alfabtico del que
extraer la senda.
Ejemplo:
%ARCHIVO% = N:\Gestion\Ges-
tion.map
fSendaSinNombreExt ( %AR-
CHIVO% ) = N:\Gestion\
ExtraerNombreExtDeSenda
Devuelve el nombre del fichero
y la extensin del parmetro,
es decir, la senda sin unidad ni
directorio.
Sintaxis:
fExtraerNombreExtDeSenda
( senda )
Parmetros:
Senda: dato alfabtico del que
extraer la senda.
Ejemplo:
%ARCHIVO% = N:\Gestion\Ges-
tion.map
fExtraerNombreExtDeSenda (
%ARCHIVO% ) = Gestion.map
ExtraerNombreDeSenda
Devuelve el nombre del fichero
del parmetro, es decir, la sen-
da sin unidad, directorio ni ex-
tensin.
Sintaxis:
fExtraerNombreDeSenda ( sen-
da )
Parmetros:
Senda: dato alfabtico del que
extraer la senda.
Ejemplo:
%ARCHIVO% = N:\Gestion\Ges-
tion.map
fExtraerNombreDeSenda ( %AR-
CHIVO% ) = Gestion
ExtraerExtensinDeSenda
Devuelve la extensin del fi-
chero del parmetro, es decir,
la senda sin unidad, directorio
ni nombre de archivo.
Sintaxis:
Anexo II
Funciones del asistente
de edicin de frmulas
de Velzquez Visual
638 639 VELAZQUEZ VISUAL
fExtraerExtensinDeSenda (
senda )
Parmetros:
Senda: dato alfabtico del que
extraer la senda.
Ejemplo:
%ARCHIVO% = N:\Gestion\Ges-
tion.map
fExtraerExtensionDeSenda ( %AR-
CHIVO% ) = .map
Funciones cientficas:
BinarioAND
Realiza la operacin binaria
AND.
Sintaxis:
fBinarioAND ( nEntero1, nEn-
tero2 )
Parmetros:
nEntero1: puede ser un nme-
ro o una expresin numrica.
nEntero 2: puede ser un nme-
ro o una expresin numrica.
Ejemplo:
fBinarioAND ( 1, 1 ) = 1
BinarioOR
Realiza la operacin binaria
OR.
Sintaxis:
fBinarioOR ( nEntero1, nEn-
tero2 )
Parmetros:
nEntero1: puede ser un nme-
ro o una expresin numrica.
nEntero 2: puede ser un nme-
ro o una expresin numrica.
Ejemplo:
fBinarioOR ( 1, 1 ) = 1
BinarioXOR
Realiza la operacin binaria
XOR (OR exclusivo).
Sintaxis:
fBinarioXOR ( nEntero1, nEn-
tero2 )
Parmetros:
nEntero1: puede ser un nme-
ro o una expresin numrica.
nEntero 2: puede ser un nme-
ro o una expresin numrica.
Ejemplo:
fBinarioXOR ( 1, 1 ) = 0
RazCuadrada
Devuelve la raz cuadrada de x.
Sintaxis:
fRazCuadrada ( x )
Parmetros:
x: puede ser un nmero o una
expresin numrica.
Ejemplo:
fRazCuadrada ( 4 ) = 2
Potencia
Devuelve x elevado a la poten-
cia de y.
Sintaxis:
fPotencia ( x , y )
Parmetros:
x: base. Puede ser un nmero
o una expresin numrica.
y: exponente. Puede ser un n-
mero o una expresin numrica.
Ejemplo:
fPotencia ( 4 , 3 ) = 64
Exponencial
Devuelve el valor exponencial
de x.
Sintaxis:
fExponencial ( x )
Parmetros:
x: puede ser un nmero o una
expresin numrica.
Logaritmo
Devuelve el logaritmo en base
e (neperiano) de x.
Sintaxis:
fLogaritmo ( x )
Parmetros:
x: puede ser un nmero o una
expresin numrica.
Logaritmo10
Devuelve el logaritmo en base
10 de x.
Sintaxis:
fLogaritmo10 ( x )
Parmetros:
x: puede ser un nmero o una
expresin numrica.
Seno
Devuelve el seno de x.
Sintaxis:
fSeno ( x )
Parmetros:
x: puede ser un nmero o una
expresin numrica.
Coseno
Devuelve el coseno x.
Sintaxis:
fCoseno ( x )
Parmetros:
x: puede ser un nmero o una
expresin numrica.
Tangente
Devuelve la tangente de x.
Sintaxis:
fTangente ( x )
Parmetros:
x: puede ser un nmero o una
expresin numrica.
ArcoSeno
Devuelve el arcoseno de x.
Sintaxis:
fArcoSeno ( x )
Parmetros:
x: puede ser un nmero o una
expresin numrica.
ArcoCoseno
Devuelve el arcocoseno de x.
Sintaxis:
fArcoCoseno ( x )
Parmetros:
x: puede ser un nmero o una
expresin numrica.
ArcoTangente
Devuelve la arcotangente de x.
Sintaxis:
fArcoTangente ( x )
Parmetros:
x: puede ser un nmero o una
expresin numrica.
SenoHiper
Devuelve el seno hiperblico de x.
Sintaxis:
fSenoHiper ( x )
Parmetros:
x: puede ser un nmero o una
expresin numrica.
CosenoHiper
Devuelve el coseno hiperblico
de x.
Sintaxis:
fCosenoHiper ( x )
Parmetros:
x: puede ser un nmero o una
expresin numrica.
TangenteHiper
Devuelve la tangente hiperbli-
ca de x.
Sintaxis:
fTangenteHiper ( x )
Parmetros:
x: puede ser un nmero o una
expresin numrica.
Funciones de DLL
Si en el proyecto se ha creado
algn objeto dll con funciones,
stas podrn ser selecciona-
das pulsando el botn Fun-
ciones de dll de la barra de bo-
tones del asistente.
Anexo II
Funciones del asistente
de edicin de frmulas
de Velzquez Visual
Funciones de dll
Anexo III
Paleta de colores
Cada vez que en un objeto
aparece una opcin para defi-
nir un color, al seleccionarla
aparece la ventana Seleccin
de Color. En ella podemos op-
tar por dos tipos de paleta:
RGB y de Windows.
Si seleccionamos el modo RGB
podremos optar por tres tipos
distintos de colores: de Siste-
ma, Tpicos y Personalizados.
De sistema: contiene los co-
lores bsicos de Windows. Si
pulsamos el botn Otros
aparecer una ventana en la
que podremos escoger entre
ms Colores bsicos que
aparecen en la parte izquier-
da de la pantalla, as como
definir colores propios en la
parte derecha. Para definir
colores propios podemos es-
pecificar la cantidad de ma-
tiz, saturacin y luminosidad
y/o el nivel de rojo, de verde
y de azul o haciendo clic en
la matriz de colores (en la
parte superior derecha de la
pantalla) y arrastrando el cur-
sor que en ella aparece. El
color resultante podemos
agregarlo a los colores per-
sonalizados pulsando el bo-
tn Agregar a los colores
personalizados.
Anexo III Paleta de colores
644 VELAZQUEZ VISUAL
Tpica: contiene una serie de
colores con ms matices que la
paleta anterior; su utilizacin es
igual que en el punto anterior.
Personalizada: cuando hemos
creado un color personalizado,
pulsando el botn Aadir Color
a Paleta podremos guardarlo
en ella y utilizarlo en cualquier
otro objeto del programa.
Si en cambio seleccionamos el
modo Windows, en esta paleta
podremos definir cualquiera de
los colores tipo de Windows.
Esta clase de color permite
que en cada aplicacin se ve-
an los colores que cada usua-
rio tenga definidos para Win-
dows.

Вам также может понравиться