Visual FoxPro - Pcecuador.com

Transcripción

Visual FoxPro - Pcecuador.com
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
1
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Edición 1.0
Prohibida la reproducción total o parcial
Sin nuestro consentimiento
Derechos de copia reservados
www.LibrosDigitales.NET
2
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Iniciando una sesión de trabajo
Una vez que haya instalado el producto, para iniciar una sesión de trabajo realice
los siguientes pasos:
1. Haga click en el botón Inicio, ubique Programas, luego Microsoft Visual Studio y
finalmente Microsoft Visual FoxPro.
2. A continuación se mostrará la interfaz
La interfaz de Visual FoxPro
3. Para finalizar una sesión de trabajo escriba el comando QUIT en la ventana de
comandos o vaya al menú Archivo, opción Salir, en su caso use la forma rápida
Alt-F4.
J Conviene crear un acceso directo, para ello haga Clic en el botón derecho del mouse sobre el
escritorio de Windows, luego elija Nuevo y despúes Acceso Directo, finalmente ubique el archivo
VFP6.EXE
3
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
La interfaz de Visual FoxPro
La barra de título
En ella se muestra a la izquierda el ícono y el título de la aplicación y a la derecha la
caja de controles (para minimizar, maximizar y cerrar la aplicación).
J Puede modificar el ícono y título de la aplicación mediante la órden:
_Screen.Icon = “MiIcono.ICO”
_Screen.Caption = “Mi Aplicación”
_Screen.Picture = “Foto.GIF”
La barra de menús
La mayor parte de acciones que vaya a realizar se encuentra en la barra de menús,
un menú conduce a un grupo de opciones. Algunas opciones presentan Vias
rápidas.
Menú
Archivo
Editar
Programa
Ventana
Opcion
Nuevo
Abrir
Guardar
Imprimir
Deshacer
Rehacer
Cortar
Copiar
Pegar
Seleccionar todo
Buscar
Volver a buscar
Reemplazar
Ejecutar
Reanudar
Ejecutar programa actual
Recorrer
Ventana de comandos
Vía rápida
Ctrl-N
Ctrl-A
Ctrl-S
Ctrl-P
Ctrl-Z
Ctrl-R
Ctrl-X
Ctrl-C
Ctrl-V
Ctrl-A
Ctrl-F
Ctrl-G
Ctrl-L
Ctrl-D
Ctrl-M
Ctrl-E
Ctrl-F1
Ctrl-F2
Vias rápidas de las opciones de menú
L Las vías rápidas no funcionan cuando el menú de Visual FoxPro ha sido sustuido por otro, en ese
caso para reponer el menú de Visual FoxPro, puede anotar:
SET SYSMENU TO DEFAULT
4
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
J Cuando en pantalla tenga mas de dos ventanas, resulta util la vía rápida Ctrl-F1 para alternar entre
éstas ventanas, si desea hacer un salto directo a la ventana de comandos use Ctrl-F2.
En versiones anteriores las teclas F2 hasta F9 estaban programadas y servían de
vías rápidas, en la versión actual no sucede esto, pero puede programarlas, siga los
siguientes pasos:
1. Vaya al menu Herramientas, opción Macros.
2. En el diálogo Macros, haga click en el botón Nueva.
3. En el dialogo Nueva macro, pulse la tecla o combinacion de teclas que desee
programar en Tecla definida, por ejemplo la tecla F12.
4. En la sección Contenido de la macro anote el comando que se deba ejecutar,
por ejemplo el comando QUIT.
5. Haga click en el botón Aceptar
6. Para probar ubíquese en la ventana de comandos luego pulse F12.
La Ventana de Comandos
La usará para ingresar ordenes escritas a Visual FoxPro, al igual que en una
ventana de código, los comandos, variables y constantes de muestran en distintos
colores.
J Puede cambiar el color y fuente usada en la ventana de comandos o en la de código, haciendo click
en el botón derecho en el interior de la ventana y accediendo a la opción Propiedades.
5
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Instrucciones SET básicas
El diálogo Opciones establece la configuración del entorno de trabajo de su equipo,
ahora si está desarrollando una aplicación a instalarse en equipos diferentes,
deberá preocuparse por establecer el mismo entorno de trabajo, la forma es
mediante la especificación de comandos del tipo SET, veamos los principales:
SET BELL on
Activa la alarma, por ejemplo cuando ocurre un error.
SET CURRENCY TO “S/.”
Establece el simbolo monetario a usar
SET DATE british
Establece el formato de fecha dd/mm/aa
SET CENTURY on
Muestra el año de una fecha en cuatro dígitos
SET DECIMAL TO 2
Limita en los cálculos el uso de dos cifras decimales, hace el redondeo
automáticamente
K Siempre que desee averiguar la sintaxis de una orden, seleccione el nombre del comando y pulse la
tecla F1, o use la orden:
HELP comando
6
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
El Administrador de Proyectos
Un proyecto organiza y administra los diversos archivos que compone una
aplicación, estos pueden ser Bases de Datos, Tablas, Indices, Formularios,
Informes, Consultas, etc.
Administrador de Proyectos
Una vez terminada la aplicación se deberá generar el Ejecutable o el archivo de
Aplicación, ambas deben realizarse a partir del Administrador de Proyectos.
Para iniciar un nuevo Proyecto:
1. Vaya al menu Archivo, opción Nuevo, luego señale el tipo de archivo Proyecto y
pulse el botón Nuevo Archivo.
2. Para crear un nuevo archivo, primero ubicamos la seccion a la cual pertenece,
por ejemplo puede ubicarse en Programas, luego haga click en el botón Nuevo
3. En la ventana de codigo que se muestra, anote:
7
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Archivo Bienvenida.PRG
*
* Este es mi primer programa
* Autor: Pepe Coyote
*
_Screen.Caption = "Estoy aprendiendo Visual FoxPro"
_Screen.BackColor = RGB(0,125,125)
@ 0,0 SAY "MiFoto.GIF" BITMAP CENTER
WAIT WINDOW "Pulsa una tecla para proseguir"
CLEAR
4. Para guardar el contenido pulse las teclas Ctrl-W, asígnele el nombre Bienvenida,
entonces de habrá creado el archivo Bienvenida.PRG.
5. Para ejecutar este programa, ubique en el Adminisrador de Proyectos el archivo
Bienvenida.PRG y luego pulse el botón Ejecutar.
Si deseara modificar el contenido del archivo, haga click en el botón Modificar.
En caso deseara retirar el archivo del Proyecto haga click en el botón Quitar.
J Puede escribir los comandos de forma parcial, como minimo las cuatro primeras letras, por
ejemploda lo mismo escribir:
MODIFY FILE?
o
MODI FILE?
Aunque no se sugiere aplicarlo, solo le ahorrara pulsar mas teclas, a las finales el producto a distribuir
tendrá el mismo tamaño.
8
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
El caso a resolver: PCVentas SAC
Actividad económica
PCVentas S.A.C. es una empresa importadora que se dedica a la comercialización
de suministros y partes de computadora
Dispone de un local comercial, dispone de cinco modulos de atención, y un staff de
vendedores quienes se encargan de visitar a empresas y minoristas y tomar sus
pedidos.
Modo de atención al Cliente
La atención al cliente se describe en los siguientes pasos:
1.
El cliente elabora su pedido y es anotado en una hoja de pedido.
2.
Se verifica en el almacén si hay stock suficiente para atender el pedido del
cliente.
3.
De haber stock suficiente, se procede a elaborar la boleta ó factura, y el
documento pasa a caja. En caso no hubiera stock suficiente, se realiza las
correcciones respectivas en la hoja de pedido, y pasamos al paso 2.
4.
El cliente pasa a caja a cancelar.
5.
Con el documento cancelado, el cliente pasa a despacho a recoger sus
productos.
Todos los procesos señalados se realizan de forman manual.
Problemas que se presentan
El modo manual de atencion ocasiona los problemas siguientes:
1.
Atención lenta.
2.
No se tiene un control de stock adecuado, por lo tanto nunca se sabe cuanto
es el stock real de cada articulo.
3.
Control de ingresos manual, por lo que el cierre de caja lleva muchas horas.
4.
La elaboración de informes para el gerente es lenta ya que todo tipo de
resumen del día es manual.
5.
No existe ningún tipo de estadística para la toma de decisiones futuras.
La empresa atiende un promedio de 30 personas por hora con tendencia a
aumentar, por lo que es necesario implementar un sistema computarizado.
9
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Modelo fisico de la Base de Datos PCVentas
A continuación se muestra el diagrama entidad relación:
Diagrama entidad-relación PCVentas
En el capítulo siguiente se detalla el procedimiento para la creación de la Base de
Datos mediante instrucciones de Visual FoxPro.
10
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Elementos que compone
Una Base de Datos en Visual FoxPro es un contenedor que agrupa:
Tablas
Cuando una tabla no está asociada a una Base de Datos se le llama Tabla Libre, el
estar asociada a una Base de Datos, le provee de ciertas propiedades además de
poder consistenciar el ingreso de datos (mediante los desencadenantes).
Relaciones
Representa la unión lógica entre dos tablas
Vistas
Es una herramienta mediante la cual podemos generar un resultado a partir de una
Base de Datos.
J Puede consultar los criterios que debe tener para Diseñar un modelo de Base de Datos adecuado en
www.LibrosDigitales.NET
11
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Creación de la Base de Datos
Definiendo una carpeta para la aplicación
Iniciemos creando una carpeta para la aplicación y dentro de ella una destinada
para los componentes de la Base de Datos.
Estableciendo la carpeta de trabajo
Dado que vamos a acceder a la carpeta Datos para guardar nuestros archivos,
conviene que la establezca como carpeta de trabajo, anote:
SET DEFAULT TO “C:\MSoft\VFP1\PCVentas\Datos”
Las comillas son necesarias siempre que se usen nombres largos, caso contrario las
puede omitir.
J Hay otra forma de seleccionar una carpeta de trabajo, puede usar la orden
CD?
12
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Iniciando el Proyecto PCVentas
Un Proyecto detalla los elementos que compone una aplicación.
La aplicación está compuesta por distintos tipos de archivo, tales como tablas,
bases de datos, indices, formularios, menus, clases, informes, etc.
El Proyecto registrará que archivos compone la aplicación, el lugar donde se
encuentra, cuando se modificó por última vez. Para cada tipo de archivo en el
Diseñador de Proyectos le corresponderá una determinada sección.
Siga los pasos siguientes:
1. Diríjase al menú Archivo, opción Nuevo y señale Proyecto, luego haga click en
Nuevo archivo.
2. De por nombre al proyecto PCVentas
3. Ahora expanda la sección Datos.
13
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Creación de Tablas
Hay dos tipos de tabla:
•
•
Tablas libres
Tablas asociadas a una Base de Datos
Creación de Tablas Libres
Las tablas libres no están asociadas a una Base de Datos, un ejemplo podría ser la
tabla Parametro, no es necesario incluirla en la Base de Datos, ya que no tiene que
relacionarse con otras tablas.
Para crear ésta tabla:
1. En la sección Datos, ubique Tablas Libres.
2. Haga click en el botón Nuevo,
3. De por nombre a la tabla: Parametro:
A continuación ingrese la estructura de la Tabla:
Diseñador de tablas - Estructura de la tabla Parametro.DBF
Ya que en ésta tabla ha de efectuarse búsquedas según el campo llamado
NomCampo, habrá que definir un índice, lo único que debe hacer es señalarlo en la
columna Indice.
Puede comprobar lo último, haciendo click en la página Indices:
14
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Diseñador de Tablas - Indices de la tabla Parametro.DBF
En el siguiente capítulo se analizará el uso de los índices.
A continuación pulse el botón Aceptar o haga Ctrl-W, el diseñador de tablas le
preguntará: Desea introducir registros de datos ahora?.
Dígale Si, para ingresar algunos registros:
Ventana para el ingreso de registros a la tabla Parametro.DBF
Esta secuencia termina pulsando la combinación Ctrl-W.
J También puede crear tablas libres directamente de la ventana de comandos, haciendo uso del
comando:
CREATE Parametro
O mediante el menú Archivo, opción Nuevo, tipo de archivo Tabla
15
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Creación de la Base de Datos
Para crear una Base de Datos:
1. Vaya al menú Archivo, opción Nuevo e indique Base de Datos.
2. Luego haga click en Nuevo archivo.
3. De por nombre a la Base de Datos: PCVentas
Diseñador de Base de Datos - PCVentas
El Diseñador de Base de Datos tal como se muestra es un contenedor vacío,
presenta una caja de herramientas propia.
Las mismas opciones que se muestra en la caja de herramienta están disponibles
cuando se hace click derecho en el mouse estando el puntero en el interior del
Diseñador de Base de Datos
Si ha de crear una tabla puede usar el botón Nueva tabla y si va a retirar una tabla
de la Base de Datos simplemente pulse la tecla Delete.
J Puede resultar mas rápido usar el botón derecho del mouse en el Diseñador, el menú emergente que
se despliega muestra las mismas opciones que la caja de herramientas.
16
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Boton Acción
Nueva tabla
Agregar tabla
Retirar una tabla de la base de datos
Crear una Vista Remota
Crear una Vista Local
Modificar la estructura de una tabla
Examinar el contenido de una tabla
Acceder a la ventana de
Procedimientos Almacenados
Definir una conexión
codigo
para
definir
Botones de la caja de herramientas del Diseñador de base de datos
17
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Agregando una tabla libre a la Base de Datos
Vamos a agregar la tabla libre Parametro a la Base de Datos PCVentas:
1. Haga click en el botón Agregar tabla de la caja de herramientas o en su lugar
efectue click derecho sobre el mouse y elija la opción Agregar tabla
2. A continuación ubique el archivo tipo tabla Parametro
Una vez agregada la tabla Parametro a la Base de Datos, la tabla Parametro deja
de ser libre y se convierte en una tabla asociada a una Base de Datos.
18
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Creando tablas asociadas a la base de datos
Vamos a crear la tabla Articulo:
1. Haga click en el botón Nueva tabla de la caja de herramienta.
2. Le presentará el diálogo Diseñador de tablas, ingrese la estructura de la tabla
De la misma forma deberá procederse con la creación de las tablas Cliente,
Vendedor, Factura y Detalle.
Diseñador de Base de Datos con tablas asociadas
19
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Relacionando Tablas
Se puede establecer una relación entre dos tablas de dos formas distintas:
•
•
Relación Persistente
Relación Temporal
Relación Persistente entre Tablas
A continuación debemos establecer la relación entre las tablas según como se ha
descrito en el capítulo anterior.
1. Para el análisis tome una pareja de tablas, por ejemplo Articulo y Detalle.
Ambas presentan un campo en común, en este caso el campo IdArticulo.
2. El campo IdArticulo para una de tablas representa su llave Primaria mientras
que para la otra su llave Foránea.
3. La llave Primaria se establece creando un indice de tipo Principal o Candidato,
mientras que una llave Foránea se establece creando un indice de tipo Normal.
4. Respecto al nombre de los indices usaremos los prefijos PK para las llaves
primarias y FK para las foráneas seguido del nombre de la tabla.
5. Para indexar la tabla Articulo, haga click derecho sobre ésta en el Diseñador de
Base de Datos, luego elija la opción Modificar.
6. En la pagina Indices, defina el indice PkArticulo:
Indice pkArticulo de la tabla Articulo
20
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
7. En el caso de la tabla Detalle, defina el indice FkArticulo:
Indice fkArticulo de la tabla Detalle
8. Una vez indexada las tablas solo resta crear la relación entre éstas. Para crear
la relación sólo debe arrastrar el índice pkArticulo hacia fkArticulo
Tablas relacionadas uno a varios
El siguiente cuadro resume los índices que debe crearse en cada tabla a fin de
poder establecer la relación entre estos:
Tabla
Articulo
Llave
Primario
Nombre
PkArticulo
Indice
Principal
Campo
IdArticulo
Relacionado con
Detalle
Detalle
Foraneo
Foraneo
FkFactura
FkArticulo
Normal
Normal
IdFactura
IdArticulo
Factura
Articulo
Factura
Primario
Foraneo
Foraneo
PkFactura
PkCliente
pkVendedor
Principal
Normal
Normal
IdFactura
IdCliente
IdVendedor
Detalle
Cliente
Vendedor
Cliente
Primario
PkCliente
Principal
IdCliente
Factura
Vendedor
Primario
PkVendedor
Principal
IdVendedor
Factura
21
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Una vez indexada cada una de las tablas y establecida las relaciones entre estas, la
Base de Datos debe quedar mas o menos así:
Base de Datos PCVentas
22
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Obtensión de Resultados
Una vez creada la Base de Datos, surge la necesidad de obtener ciertos resultados
a partir de ella, por ejemplo:
•
•
•
•
•
•
•
•
Generar una lista de precios
Obtener un directorio de clientes
Obtener un reporte del stock disponible
Obtener un reporte de las ventas del dia
Efectuar una analisis de las ventas del mes
Determinar el impuesto a pagar en el mes
Generar un grafico comparativo de las ventas mensuales
Generar las comisiones que corresponde a cada vendedor por las ventas
realizadas
Etc.
Estos resultados los podemos realizar de distintas formas:
•
•
•
•
•
Mediante el comando SORT
Usando Indices
Mediante el comando SQL: SELECT
Generando Vistas
Generando Consultas
23
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Obtensión de resultados a través del comando SORT
Consiste en generar otra tabla a partir de los campos de una de las tablas de la
actual Base de Datos.
SORT TO tabla ON campos [/A | /D] [/C] [alcance]
[FIELDS campos] [FOR condición]
/A
/D
/C
Ordena en forma ascendente
Ordena en forma descendente
Ordena sin diferenciar mayúsculas de minúsculas
Por ejemplo si queremos obtener un archivo que contenga los articulos agotados:
USE Articulo
SORT TO Agotados ON NomArticulo/A, Stock FOR Stock = 0
La tabla generada:
USE Agotados
BROWSE
El ordenamiento por defecto es ascendente, puede ordenar una tabla por uno o dos
campos simultáneamente, uno en forma ascendente y otro de forma descendente.
L Esta instrucción está limitada a crear tablas a partir de una sola tabla, ahora en el diseño de una
aplicación raras veces es necesario generar tablas con resultados, salvo debe exportarse. Las siguientes
tecnicas le serán de mayor provecho.
24
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Obtensión de resultados usando Indices
Los indices los hemos usado en el diseño de la Base de Datos, podemos optimizar
nuestra aplicación si usamos con mejor criterio los indices.
Para usar con criterio los indices debe conocer las caracteristicas de cada uno:
Puede
crear solo
uno por
tabla
Garantiza la unicidad de los datos en la clave de indice
Candidato:
Garantiza la unicidad de los datos en la clave de
indice
Normal:
Solo ordena
Unico:
Oculta los registros con clave de indice repetida
Puede crear varios por tabla
Pueden ser usadas en tablas
Libres
Pueden ser usadas en tablas asociadas a
una Base de Datos
Principal:
Resumen de los tipos de indice
J Todos los tipos de indice ordenan una tabla según el campo que se haya elegido (clave de indice).
Las caracteristicas propias de cada índice se muestra en el cuadro, algunos están lismitados a ser usados
solo una vez y en determinadas tablas, mientras que otros no.
25
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Operaciones de busqueda con indices
Es mucho más rápido buscar en una tabla indexada que efectuarla de forma
secuencial (como en el caso del comando LOCATE).
Para realizar busquedas utilice el comando SEEK. Veamos unos ejemplos:
Buscar al cliente con código “C0007”:
USE Cliente
LOCATE FOR IdCliente = “C0007”
? FOUND()
La solución anterior es correcta, pero puede resultar lenta, suponiendo que el
codigo señalado se encuentre casi al final de la tabla y haya unca cantidad
considerable de registros, la solución óptima resulta ser:
USE Cliente
SET ORDER TO TAG pkCliente
SEEK “C0007”
? FOUND()
Buscar un articulo con nombre “Teclado”
USE Articulo
SET ORDER TO TAG NomArt
SEEK “Teclado”
? FOUND()
26
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Limitando el alcance en la obtension de resultados
Podemos optimizar el alcance de los comandos mediante indices, por ejemplo la
siguiente orden:
USE Factura
DISPLAY IdFactura, IdCliente FOR IdCliente = “C0007”
Resulta ser lenta cuando en la tabla Factura se tiene unos cien mil registros.
Aquellos comandos que presentan en la sintaxis el termino FOR Condicion, pueden
optimizarse sustituyendose por WHILE Condicion y usando el alcance REST.
La solución al caso anterior es:
Abrimos la tabla y seleccionamos el índice pkCliente
USE Factura
SET ORDER TO TAG pkCliente
Buscamos al primer cliente con código “C0007”
SEEK “C0007”
Se supone que despues del primer registro ubicado hay todo un grupo de registros
que corresponden a este código. Así que podemos usar el comando DISPLAY a
partir de la posición del puntero hasta el final, siempre que el resto de registros
tenga por codigo de cliente C0007:
DISPLAY REST IdFactura, IdCliente WHILE IdCliente = “C0007”
J La clásula WHILE se detiene cuando encuentra un registro que no cumple con la condición.
27
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Obtensión de resultados mediante
el comando SQL: SELECT
Los comandos SQL, son un conjunto de instrucciones estándar adoptado por la
mayoria de manejadores de base de datos (Access, Visual FoxPro, Oracle, SQL
Server, etc.). Dichos comandos están orientados al manejo de datos.
Uno de tales comandos tiene por función obtener resultados, se trata del comando
SELECT, cuya sintaxis se muestra a continuación:
SELECT campo [AS Encabezado]
FROM Tabla
[ORDER BY campo]
[GROUP BY campo]
[WHERE Condicion ]
[TO FILE archivo | TO PRINT | SAVE TO archivo]
La forma mas simple considera todos los campos de la tabla para ser vistos:
OPEN DATABASE PCVentas
SELECT * FROM Articulo
El resultado se muestra a manera de la ventana Examinar, debe tener en cuenta
que es de sólo lectura.
28
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Selección de campos
Puede elegir los campos que considere necesarios, por ejemplo si desea mostrar
solo el nombre del articulo y su stock:
SELECT NomArticulo, Stock FROM Articulo
Este resultado puede estar ordenado por ejemplo según en forma alfabética:
SELECT NomArticulo, Stock FROM Articulo ORDER BY NomArticulo
Podemos condicionar la salida, mostrando solo los articulo con stock distinto a cero:
SELECT NomArticulo, Stock FROM Articulo
ORDER BY NomArticulo WHERE Stock <> 0
Si el resultado debe imprimirlo, utilice la claúsula TO PRINT
SELECT NomArticulo, Stock
FROM Articulo
ORDER BY NomArticulo
WHERE Stock <> 0
TO PRINT
En el desarrollo de una aplicación se suele asociar a algún control el resultado de
ésta órden, entonces deberá generar un cursor:
SELECT NomArticulo, Stock
FROM Articulo
ORDER BY NomArticulo
WHERE Stock <> 0
INTO CURSOR ResArt
29
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Un cursor representa una tabla temporal de solo lectura. Como cualquier tabla
ocupará un área de trabajo, siempre que quiera acceder al cursor deberá anotar:
SELECT ResArt
BROWSE
Para anular el cursor, use:
SELECT ResArt
USE
En el supuesto que éste resultado deba grabarse en disco a manera de tabla puede
usar el término SAVE
SELECT NomArticulo, Stock
FROM Articulo
ORDER BY NomArticulo
WHERE Stock <> 0
SAVE TO ResArt
En este caso se generará el archivo ResCliente.DBF
30
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Cálculos con columnas
Puede efectuar calculos sobre las columnas, mediante el uso de funciones SQL de
columna.
Función SQL
SUM()
AVG()
COUNT()
MIN()
MAX()
Acción
Suma el contenido de la columna
Promedia el contenido de la columna
Cuenta el número de filas de la columna
Halla el menor valor de la columna
Halla el mayor valor de la columna
Funciones SQL que afectan a una columna
Por ejemplo podemos calcular el numero de facturas que se han emitido el dia de
hoy:
OPEN DATABASE PCVentas
SELECT COUNT(IdFactura)
FROM Factura
WHERE Fecha = DATE()
31
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Especificando una condición
Respecto a la condición puede usar los operadores:
Operador
=
==
LIKE
<>, !=, #
>
>=
<
<=
Comparación
Igual
Exactamente igual
SQL LIKE
Distinto de
Mayor que
Mayor o igual que
Menor que
Menor o igual que
Tabla : Operadores SQL
La mayor parte de operadores resultan conocidos, a excepcion del operador LIKE.
Este operador será usado para establecer comparaciones con expresiones carácter,
se caracteriza por permitir el uso de caracteres comodin:
Comodín
_ (subrayado)
Acción
Sustituye un carácter
%
Sustituye un grupo de caracteres
Por ejemplo si quiere obtener una lista de clientes cuyo primer o segundo nombre
sea “Jose”:
SELECT NomCliente
FROM Cliente
WHERE NomCliente LIKE “%JOSE%”
32
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Agrupando resultados
Otra de las operaciones frecuentes corresponde a las agrupar, por ejemplo se desea
obtener la cantidad de facturas emitidas en cada mes.
La orden:
SELECT COUNT(IdFactura) FROM Factura
Muestra el total de facturas emitidas.
si se desea el total por grupo, hay que identificar primero el campo por el cual se
desea agrupar y despues implementarlo con ayuda de la claúsula GROUP BY:
SELECT CMONTH(Fecha), COUNT(IdFactura)
FROM Factura GROUP BY 1
J Cuando se generan expresiones, Visual FoxPro asigna un nombre a cada columna, podemos
asignarle uno apropiado usando la claúsula AS.
La solución anterior quedaria mejor:
SELECT MONTH(Fecha) AS nMes,
CMONTH(Fecha) AS Mes,
COUNT(IdFactura) AS Facturas
FROM Factura
GROUP BY 2
ORDER BY 1
J En www.LibrosDigitales.NET, hallará un guia completa de programación en SQL
33
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Obtención de resultados a través de Vistas
Las vistas a diferencias de las tablas no contienen datos, sino que al utilizarla
muestra los datos existentes en las tablas. Por lo tanto, los cambios en la
información de las tablas aparecen reflejados en la vista. El tipo de vista más
sencillo selecciona las filas y las columnas de una sola tabla. Se puede construir
una vista para una sola tabla con el fin de reducir el número de columnas que se
muestran, o utilizar una vista para restringir el acceso de los usuarios a la
información de ciertas columnas. También se puede crear una vista que muestre
sólo las filas que cumplen un criterio de selección.
Las vistas pueden crearse mediante el mandato CREATE VIEW. La sintaxis de este
mandato es:
CREATE VIEW <nombre vista>
AS <sentencia SELECT>
Podemos crear una vista a partir de la tabla Articulo considerando solo los campos
nombre del articulo y stock, ordenado alfabéticamente y stock distinto a cero:
CREATE VIEW ResArt AS
SELECT NomArticulo, Stock
FROM Articulo
ORDER BY NomArticulo
WHERE Stock <> 0
Las vistas cuando son creadas se guardan como un elemento mas de la Base de
Datos, puede veficar:
MODIFY DATABASE
Puede usar cualquiera de las formas siguientes para inspeccionar el resultado
generado por la vista ResArt:
USE PCVentas!ResArt
BROWSE
OPEN DATABASE PCVentas
SELECT * FROM ResArt
Para borrar una vista use la orden DROP VIEW:
DROP VIEW miVista
34
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
El Diseñador de Vistas
El diseño de una vista puede hacerse complicado si la selección de campos es a
partir de multiples tablas. Lo interesante de Visual FoxPro es que para este tipo de
casos aporta con un Diseñador donde solo tendrá que usar el mouse, internamente
se estará generando el codigo SQL.
Tal como se vió en la pagina anterior las vistas se almacenan como un elemento
mas de la Base de Datos. Por tanto podrá utilizarlos como un objeto mas en el
entorno de programación.
Puede crear dos tipos de vistas:
•
Vistas Locales
Las Vistas Locales se generan a partir de una Base de Datos de Visual FoxPro.
•
Vistas Remotas
Las Vistas Remotas se generan a partir de una fuente de datos externa, por
ejemplo una Base de Datos Access, SQL Server, Oracle u otra.
Las vistas permitirán:
•
•
•
Seleccionar los campos necesarios
Agrupar o condicionar el resultado
Y lo mas importante: puede usarse como un medio para actualizar las tablas
Todos estos puntos analizaremos a continuacion.
35
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Vistas Locales
Vamos a plantear el siguiente
correspondiente a cada mes”.
problema:
“Se
necesita
averiguar
el
IGV
1. Iniciamos el diseño de la vista haciendo Click derecho sobre el Diseñador de
Base de Datos y eligiendo la opcion Nueva Vista Local
2. A continuación se muestre un dialogo para la seleccion de tablas, necesitamos
las tablas Factura y Detalle.
3. Ahora hay que seleccionar los campos necesarios:
MONTH(Factura.Fecha) AS Mes
Detalle.PreVentas*Detalle.Cantidad*0.18 AS IGV
Si se tratara de simples campos bastaria ubicarlos en la lista de Campos
disponibles y trasladarlos a la lista de Campos seleccionados mediante el boton
Agregar.
Cuando se trate de campos calculados como es el caso del Mes, constrúyalos en
el cuadro de texto Funciones y Expresiones que se encuentra debajo de la lista
de Campos disponibles.
36
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Hay expresiones mucho mas complejas, que requieren de mayor espacio, en
ese caso pulse el botón de tres puntos, le llevará al diálogo Funciones y
Expresiones.
Podemos ver un previo del resultado haciendo click derecho y eligiendo la
opcion Ejecutar.
37
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
4. Puede verse en la ventana examinar que falta agrupar los datos por la columna
Mes y al mismo tiempo sumar el contenido de la columna IGV.
Vaya a la pagina Agrupar por y traslade el campo Mes de la lista Campos
disponibles a la lista Campos agrupados.
5. Hay un cambio mas que se debe realizar, vaya a la pagina Campos, y corrija la
especificacion de los campos Mes e IGV y agregue el campo nMes:
MONTH(Factura.Fecha) AS nMes
CMONTH(Factura.Fecha) AS Mes
SUM(Detalle.PreVenta*Detalle.Cantidad*0.18) AS IGV
Finalmente ejecute.
6. Como verá el orden no es el adecuado, se ha efectuado según la columna Mes
(alfabético), para corregir el resultado vaya a la pagina Ordenar por y traslade
el campo nMes de la lista Campos seleccionados a la lista de Criterio de
ordenación.
7. Obtenida la solucion grabe la vista con el nombre IGVMensual pulsando Ctrl-W.
Si desea calcular el IGV del año, bastará que desde la Ventana de comandos anote:
USE PCVentas!IGVMensual
SUM IGV TO IGVTotal
? IGVTotal
J Obtenga la segunda entrega de éste libro en www.LibrosDigitales.NET, se discutirá la integración de
las Vistas en el modo de programación para efectuar consultas y actualizaciones.
38
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Vistas parametrizadas
Las ventajas de una vista parametrizada son:
•
•
•
Que es posible reutilizar una vista
Se minimiza el resultado de acuerdo a una condición
Mejora el rendimiento de la aplicación
Para parametrizar la vista VenVentas, debemos crear primero un parámetro de
vista.
1. Diríjase al menú Consulta, y seleccione la opción Parametros de Vista.
2. En el diálogo Parametros de Vista, anote el nombre de un parámetro, en
nuestro caso: nMes, luego señale el tipo: Numerico.
3. Finalmente haga click en Aceptar
Usando el parámetro:
1. Ubique en la vista la pagina Filtro y realice el cambio:
MONTH(FacDet.Fecha) = ?nMes
J El simbolo de interrogación debe estar junto al parámetro, el dejar un espacio en blanco ocasionará
un error.
Si ejecuta la vista desde el Diseñador de Vistas, le mostrará un diálogo solicitándole
el ingreso de una valor numérico para nMes.
La otra forma de ejecución es:
nMes = 11
USE PCVentas!VenVentas
BROWSE
J Siendo ésta última adecuada para ser usada en el modo de programación.
39
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Actualización de tablas a través de Vistas
Podemos crear vistas para realizar operaciones de actualización en tablas. Las
condiciones son las siguientes:
•
•
•
En la selcción de campos debe incluir el campo llave de la tabla
Debe indicar que campos presentarán la propiedad de ser actualizables
No olvidar señalar la casilla Enviar actualizaciones SQL.
Por ejemplo, podemos crear una vista parametrizada a partir de la tabla Cliente,
para actualizar la direccion, el telefono y email.
Realizamos las siguientes tareas en el Diseñador de Vistas:
Tablas
Cliente
Campos
Cliente.IdCliente
Cliente.NomCliente
Cliente.DirCliente
Cliente.TelCliente
Cliente.Email
Condicion
Cliente.IdCliente = ?codCiente
Ahora especificamos las propiedades de actualización en Criterios de Actualización:
•
•
•
Señalamos el campo llave: IdCliente, vea la columna con la figura de la llave
Marcamos los campos actualizables: DirCliente, TelCliente y Email, en la
columna con la figura del lápiz
Señalamos la casilla Enviar actualizacion SQL.
40
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Para realizar una prueba, puede ejecutar:
codCliente = "C0023"
USE PCVentas!vCliente
EDIT
Realice algunos cambios, luego pulse Ctrl-W. Para actualizar la tabla deberá cerrar
la vista, mediante el uso de:
SELECT vCliente
USE
J Puede actualizar la tabla sin cerrar la tabla, usando la función:
SELECT vCliente
TABLEUPDATE()
41
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Consultas
A diferencias de las vistas, las consultas:
•
•
•
No actualizan las tablas origen.
Puede especificar diferentes destinos para la salida.
Representa una herramienta sencilla y simple para obtener consolidados
inmediatos.
El Diseñador de Consultas es muy parecido al Diseñador de Vistas.
Como ejemplo vamos a obtener un “Analisis de las ventas mensuales”, efectuando
un borrador de lo solicitado tenemos:
Tablas
Factura
Detalle
Campos
MONTH(Factura.fecha) AS nMes
CMONTH(Factura.fecha) AS Mes
SUM(Detalle.PreVenta*Detalle.Cantidad) AS Total
Ordenar por
nMes
Agrupar por
nMes
Para iniciar una nueva consulta:
1. Vaya al menú Archivo, opción Nuevo...
2. En el diálogo Nuevo archivo, señale Consulta y haga click en el boton Nuevo.
3. Proceda a efectuar los pasos citados en el borrador.
4. Para analizar el resultado, haga click derecho en el mouse y seleccione en el
menú emergente la opcion Ejecutar, por defecto el resultado se mostrará en
una ventana Examinar.
5. Para direccionar la salida hacia un gráfico, vaya al menú Consulta, opcion
Destino de la consulta. En el dialogo Destino de la consulta, señale Grafico.
42
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
6. A continuacion haga click derecho en el mouse y seleccione en el menú
emergente la opcion Ejecutar, entonces se iniciará el Asistente para la
generación de gráficos.
7. El Asistente le pedirá que defina los ejes del gráfico, así que arrastre el campo
Mes de la lista de Campos disponibles hacia el eje X del gráfico, luego arrastre
el campo Total de la lista de Campos disponibles a la lista Serie de datos.
8. El siguiente paso, elija un estilo de gráfico
9. Para finalizar haga click en el botón Finalizar.
10. En la ventana Vista preliminar del gráfico, puede hacer algunos cambios, por
ejemplo escoger un tipo de letra diferente para los títulos, cambiar de color las
barras, etc. Para acceder a estos objetos en modo de edición haga click derecho
sobre el objeto y escoja la opción Editar o Modificar:
11. Al finalizar el Asistente le pedirá un nombre para un archivo, puede llamarlo
VenMensual, entonces se habrá creado el archivo VenMensual.SCX
12. Puede abrir el archivo, en modo de edición, hallará un objeto ole, llamado
oChart.
MODIFY FORM VenMensual
L Si altera los cambios de la tabla Detalle, notará que el gráfico del formulario no se actualiza.
43
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Actualizando el gráfico en tiempo de ejecución
Puede acceder al componente MS-Graph mediante código de programa y hacer que
se actualice automáticamente, antes debe tener en cuenta que MS-Graph presenta
una hoja de datos de forma tabular.
Haga doble click en el formulario anteriormente generado y anote el siguiente
código en el evento Init del Formulario.
Objeto: Form1
Proc.: Init
OPEN DATABASE PCVentas
SELECT MONTH(Factura.fecha) AS nmes, ;
CMONTH(Factura.fecha) AS mes,;
SUM(Detalle.preventa*Detalle.cantidad) AS total;
FROM pcventas!factura INNER JOIN pcventas!detalle ;
ON Factura.idfactura = Detalle.idfactura;
GROUP BY 1 ORDER BY 1 INTO CURSOR VenMensual
WITH THISFORM.oChart.object.application
.datasheet.columns("1").delete
.datasheet.columns("2").delete
.datasheet.range("00").value = ""
.datasheet.range("A0").value = "Total"
n = 1
SCAN
.datasheet.range("0"+ALLTRIM(STR(n))).value = Mes
.datasheet.range("A"+ALLTRIM(STR(n))).value = Total
n = n+1
ENDSCAN
.chart.hastitle = .t.
.chart.charttitle.text = "Mi gráfico"
ENDWITH
Grabe el Formulario y luego ejecute:
DO FORM VenMensual
J Deje sus preguntas y opiniones en www.LibrosDigitales.NET, luego descargue la nueva edición de
éste libro.
44
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Impresión
La parte impresa la podemos solucionar de dos maneras:
•
•
Usando el Generador de Informes
A través de código de programa
El origen de datos
Puede iniciar el diseño de un informe a partir de una tabla o a partir de múltiples
tablas.
•
Si se trata de una tabla, el diseño del informe es sumamente sencillo.
•
Si se trata de múltiples tablas, le sugiero resumir los campos y los registros
necesarios mediante el diseño de una vista o cursor.
Puede diseñar un informe a partir de una tabla, y luego usar el mismo informe con
otra tabla, siempre que especifique en el informe en lugar de “alias.campo” solo
“campo”, por ejemplo en lugar de anotar “clientes.nombres”, anote solo “nombres”,
ya que la tabla puede variar.
45
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
El Generador de Informes
Informes a partir de una tabla
Vamos a diseñar un informe sencillo, se tratará de un catálogo de precios.
Inicie el diseño de un informe siguiendo los pasos siguientes:
1. Prepare el origen de datos
Determine que tablas serán necesarias para solucionar el caso, en nuestro caso
se trata de una sola tabla: Articulo
Catálogo de Precios
Codigo
Descripcion
Precio
99999
XXXXXXXXXXXXXXXXXXXXXXXXXXXX
9999.99
99999
XXXXXXXXXXXXXXXXXXXXXXXXXXXX
9999.99
99999
XXXXXXXXXXXXXXXXXXXXXXXXXXXX
9999.99
99999
XXXXXXXXXXXXXXXXXXXXXXXXXXXX
9999.99
...
...
...
Fecha: dd/mm/aa
No Pag. 999
2. Configure la pagina
Inicie el Diseñador de Informes, vaya al menú Nuevo, opcion Archivo, señale
como tipo de archivo Informe y haga click en el botón Nuevo.
El Diseñador de Informes, consta por defecto de tres bandas móviles:
•
Encabezado de página, donde situará el título del informe, los títulos de
las columnas.
•
Detalle, donde por lo general se ubica los campos
•
Pie de página, donde ubicará alguna anotación, la fecha de impresión y el
número de página.
Hay otras bandas adicional, como la banda Título, la banda Resúmen y las
bandas de Grupo, que luego se describirán.
Empiece determinando el formato de papel que se usará en la impresión, vaya
al menú Archivo, opción Configurar página.
A la izquierda tiene un previo de la distribucion de los margenes del papel,
puede señalar el margen izquierdo y luego determinar el margen derecho en
base al ancho.
46
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Para señalar el formato de papel, haga click en el botón Especificar
impresora. El diálogo que se muestra puede variar según la impresora
seleccionada.
A continuación fije el alto de cada banda, para mayor precisión puede ayudarse
con la regla guía.
La altura del encabezado y del pie de pagina se determina arrastrando la banda
correspondiente, debe incluir en estas los margenes superior e inferior
respectivamente. La altura que determine en la banda Detalle corresponde al
interlineado.
Una vez configurada la página, haga click derecho sobre el Diseñador de
Informes y elija en el menú emergente la opción Entorno de Datos.
Diseñador de informes
En la ventana Entorno de datos, haga click derecho y agregue la tabla Articulo
mediante la opcion Agregar.
47
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Barra de herramientas Diseñador de Informes
Agrupar datos
Entorno de datos
Barra de herramientas Controles de informes
Barra de herramientas Paleta de colores
Barra de herramientas Distribución
Barra de herramientas Controles de Informe
Para seleccionar objetos
Para ubicar etiquetas (texto fijo)
Para ubicar campos, variables y expresiones
Para el dibujo de lineas
Para el dibujo de rectangulos
Para dibujar circulos, elipses
Para ubicar imágenes
Bloquea un boton
Barra de herramientas Distribución
Alinea los bordes izquierdos o derechos
Alinea los bordes inferiores o superiores
Alinea centros verticalmente u horizontalmente
Mismo ancho o mismo alto
Mismo tamaño
Centra horizontalmente o verticalmente
Envia al fondo o trae a primer plano
Barra de herramientas Paleta de colores
Color de primer plano (borde)
Color de fondo
Colores
48
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
3. Diseñe el informe
Para el diseño del informe, dispondrá de una barra de herramientas, llamada
Barra de herramientas Diseñador de informes, puede habilitarla desde el menú
Ver, en caso estuviera oculta.
Una forma rápida de construir el informe es arrastrando los campos de la
ventana Entorno de datos hacia el Diseñador de Formularios
Puede ver el aspecto del informe, haciendo click derecho sobre el Diseñador de
Informes y eligiendo la opcion Vista preliminar del menu emergente.
Presentación preliminar
Para colocar los titulos, haga uso del control Etiqueta de la barra de
herramientas Controles de Informe.
Diseñando un informe
49
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Los campos y expresiones situélos en el formulario mediante el control Campo
de la barra de herramientas Controles de Informe.
Por ejemplo para colocar la fecha de impresión, haga uso del control Campo, al
hacer click sobre el Diseñador, se mostrará el diálogo Expresion de informe,
en la region Expresion, puede anotar la funcion DATE().
De tratarse de una expresión compleja, puede hacer click en el boton de tres
puntos, le conducirá al dialogo Generador de Expresiones.
En el dialogo Generador de Expresiones, tiene acceso a las funciones, las cuales
están agrupadas en cuatro listas, asi mismo se muestra una lista de los campos
de la tabla situada en el Entorno de datos y una lista con las variables del
sistema y de usuario. Una vez construida la expresion puede validarla mediante
el boton Comprobar.
Para colocar el número de página siga el mismo procedimiento, seleccione la
variable del sistema _PageNo.
Para situar el logotipo de la empresa, haga uso del control OLE.
Luego indique Archivo en la lista de opciones y mediante el boton de tres
puntos ubique el archivo PCLogo.GIF.
Puede mostrar en el catálogo una imagen de cada articulo, situando un control
OLE en el detalle y asociandolo al campo Foto. Aunque resulta mas sencillo
arrastrar el campo Foto de la ventana Entorno de datos hacia el Diseñador de
informes.
Diseñando un informe
Puede aplicar un estilo de fuente a uno de los objetos vaya al menu Formato
opcion Fuente.
Puede obtener un impresión de prueba haciendo click derecho y eligiendo la
opcion Imprimir.
Para grabar el diseño use la combinación Ctrl-W, vamos a llamar al archivo
Precios, se creará entonces el archivo Precios.FRX y Precios.FRT.
50
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
4. Imprima el informe
Para ejecutar el informe puede usar el comando:
REPORT FORM archivo
[PREVIEW / TO PRINT [PROMPT]/ TO FILE archivo]
[alcance] [FOR condicion]
Para imprimir el catálogo de precios de articulos existentes anotaría:
REPORT FORM Precios TO PRINT PROMPT FOR Stock > 0
J En quince dias estará disponible la siguiente edición, para que sea posible te agradeceremos
remitirnos tus inquietudes, aportarnos con ideas y por que no soluciones. De ti depende que este libro
mejore en contenido.
www.LibrosDigitales.NET
51
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Próxima Entrega
Edición 1.1
Dentro de una semana
Prohibida la reproducción total o parcial
Sin nuestro consentimiento
Derechos de copia reservados
www.LibrosDigitales.NET
52

Documentos relacionados

Visual FoxPro SQL Server y ASP

Visual FoxPro SQL Server y ASP Clasificación de modelos Cliente-Servidor Uno de los aspectos claves para entender la tecnología Cliente-Servidor, y por lo tanto contar con la capacidad de proponer, promocionar y llevar a cabo so...

Más detalles