una vez más cumpliendo con el mandamiento de Cristo que dijo: "DAD POR GRACIA LO QUE POR GRACIA HAS RECIBIDO (Mateo 10:8).
Resumiendo el tema anterior
Continuando con mi aporte, en el post anterior hablé sobre el tema como cargar los datos en una vista en tablas tps usando Clarión. Estuve explicando las distintas formas de cargar los datos en una vista, le decía que después de haber diseñado nuestra ventana contenedora de datos, nos vamos al embs init de la ventana en la opción o punto de Open file ahí colocamos el código para cargar los datos, esto es cuando cargamos los filtros desde una ventanita auxiliar. También le hablé sobre la forma de cómo crear una Queue global, así como las variables de memorias en la propiedad global y el cuidado que debemos tener al momento de crearlas, ya que debemos saber como y cuando limpiarlas, para evitar la duplicidad de información y por últimos vimos tres métodos diferentes para calcular la cantidad vendidas de un determinado artículo, así como la cantidad compras del mismo.
Introducción
Retomando esta tercera y última parte de este tutorial ahora vengo con el tema Consultando los datos en el sistema. Pero ante de entrar en el tema, quiero aclarar y hacer algunas recomendaciones de lugar. En la vida debemos aprender a buscar técnicas nuevas que nos ayuden o nos faciliten elementos que nos puedan servir para hacer mejor nuestra vida cotidiana, y esos mismos elementos los podamos aplicar en nuestra profesión para lograr mejor resultados y un buen rendimiento en un corto tiempo. Como Programadores profesionales debemos cada día aprender trucos que nos faciliten realizar mejor nuestra tarea en un lazo de tiempo corto y lograr así resultados óptimos y de buena calidad, con estos logramos una mejor competitividad en los mercados.
A la hora de diseñar un sistemas de información tenemos que emplear cuantas más técnicas podamos aprender y conocer, para ahorrar tiempo y obtener buenos resultados en un menor tiempo. A que me refiero, cuando estemos diseñando una aplicación debemos de obviar pasos, ¿Cómo lo hacemos? ejemplo si diseñamos una ventana con todos los pasos que hasta ahora he expuesto hasta aquí, luego vaya copiando esa misma ventana en cada procedimientos y hagas las modificaciones de lugar, con esto evitará tener que estar creando lo mismo varias veces. Por otro lado a mí no me gusta usar témplate en mi Demo que hago, pero en esté voy a usar dos llamado uno Aplus de nuestro amigo Francisco Carabez lo pueden descargar de la red, es totalmente gratuito, el otros es el BoTpl también es gratuito, la razón por el cual voy a usar el Aplus es porque tiene un excelente control para calendario en español, es muy fácil implementarlo, igualmente el BoTpl que sirve para hacer búsqueda en los browses, también clarión trae su propio control calendario pero este siempre está en inglés.
Entre los puntos que vamos a tratar en esta tercera y última parte de este tutorial están:
1- Crear vistas o consultas simples a los datos del sistema
2- Crear vistas o consultas complejas a los datos del sistema
3- Aprender a copiar un mismo procedimiento para todos los demás
4-Como obviar pasos y aplicar mejores técnicas
5- A Crear Queue generales
6- Crear un solo Reporte para todos los procedimientos
Haciendo la Consultas al Sistema
Nuestro tutorial está basado en un sistema de facturación que consta de dos módulos principales que Son: Facturas y Entradas al inventario. Quiero hacerle un preámbulo antes de entrar en materia de cómo debe funcionar un buen sistema de facturación, porque lo hago, por la única razón de que este tutorial va dirigido a programadores novatos que están aprendiendo a programar y aquellos que están usando clarión, pero estas ideas son estándar para cualquier lenguaje de programación que usted utilice.
Los primero que debemos tener definido en un sistemas de facturación, es nuestro listado de artículos para la ventas, segundo el listado de clientes para la compras y tercero hacer todas las configuraciones de lugar en el sistemas. Con lo primero que el sistema va a iniciar es con las compras a nuestros suplidores para alimentar el inventario de artículos para ser vendidos a nuestros clientes. Luego que esto ya está listo empezamos hacer facturas, las cuales disminuyen el inventario y las entradas aumentan el inventarios. Porque hago todas estas aclaraciones, recuerdes que los sistemas de información tienen por finalizar controlar y prioriza las actividades en la empresa, las demás cosas que hay que hacer la se dejó de tarea para que utilice su creatividad como analista o programador. Suponiendo que ya nuestro sistemas está a todo vapor funcionando a la perfesión, ahora la empresa nos está demandando información y quiere que le hagamos la siguientes consultas.
Creando vistas o consultas al sistema
1-Realizar una consulta para saber cuántas facturas se han hecho en un rango de fecha en el sistema y cuánto asciende su monto.
2- Realizar una consulta para saber cuántas facturas se le ha hecho a un determinado cliente y cuánto asciende su monto.
3-Realizar una consulta para saber cuántas facturas se le ha hecho a un determinado cliente en un rango de fecha y cuánto asciende su monto.
4-Realizar una consulta para saber cuántas facturas se han hecho al contado y acredito en todo sistema y cuánto asciende su monto.
5-Realizar una consulta para saber cuántas facturas se han hecho al contado y acredito a un determinado cliente y cuánto asciende su monto.
6-Realizar una consulta para saber cuántas facturas se han hecho al contado y acredito a un determinado cliente con un rango de fecha y cuánto asciende su monto.
Lo que me motiva hacer este tutorial
Antes de empezar a enseñarle a crear todas estas consultas, quiero expresarle el motivo por el cual me he visto impulsado a hacer este tutorial a todos ustedes, resulta que la experiencia no se improvisa, cuando hacemos sistemas en clarión usando Tps, resulta que mientras nuestras tablas están pequeñas ósea no tienen muchos registros todos está color de rosa, pero a medida que nuestras tablas va creciendo en registros y logran a superar la cantidad de 500,000.00 o un millón 1,000000.00 de registros le aseguro que casi es imposible poder manejar esta situación, además de estos se añaden las malas prácticas de algunos programadores, que cargan a los browses de una enorme cantidades de filtros, logrando con esto poner al sistema muy lento, también se pueden dar dos elementos más que ponga el sistema lento, como son, una mal diseño estructural en las tablas o en los browses, así como la falta de recursos del equipo tales, como memoria RAM, espacios en disco insuficiente y disco en mal estado con sectores dañados, esta serian algunas de la causas que un sistema pueda estar lento. Mi objetivo final es que usted aprenda hacer consultas utilizando este medio que son: las vistas a las tablas en tps usando clarión.
1) Creando nuestra primera consulta:
Crea una consulta para saber cuántas facturas se han hecho en un rango de fecha en el sistema y cuánto asciende su monto.
Los que vamos a utilizar para crear nuestra primera consultas
1-Lo primero que voy a crear es una Queue de tipo global que me sirva como contenedora de los datos a consultar y la misma va a tener la siguiente estructura.
Código: Seleccionar todo
QVistas ¡Nombre de la Queue global
!Nombre de los campos tipos y longitud
Qv:Nrofactura long(07)
Qv:Fecha Date (d6)
Qv:Condiciones string(20)
Qv:IdClientes long(07)
Qv:NombreClientes Estring(20)
Qv:MontoFactura Decima(12.2)
Qv:Totalfactura
2-Lo segundo que voy a crear son una series de campos en la propiedad globales que van servir para los filtros en la vista así.
Código: Seleccionar todo
Campos globales
glo:Codigocliente
Glo:IdArticulo
glo:FechaInicial
glo:FechaFinal
Glo:NroFactura
Glo:Condiciones
https://www.dropbox.com/s/zupkz297rnbfd ... s.png?dl=0
Anteriomente le había dicho que le iba a enseñar la forma más practica, para crear estas consultas y como podemos crear la vistas utilizando un solo control de diseño como es esta ventana, anteriormente yo crea otra ventanita para cargar los campos de los filtros ahora hago todos en una sola ventana.
Los codigo empleados en las consultas
En nuestra primera consulta, ahora vamos agregar los codigos de lugar, para eso nos vamos al embs general de la ventana o window, y en la secion local Data luego en opcion otra estrucura colocamos la definicions de la vista, pero antes le quiero explicar la mejor forma para obtener la estrucura de una vista, suponiendo que queremos hacerle una vista a la tabla factura, primero que debemos hacer es entrar al browse de factura y en la opcion embs, selecionamos el boton filled aquí nos va a mostrar las lineas del codigo correspondiente a este browse, entonces debemos unicar la estructura de la vista en el browse y copiar esta pequeña porción de codigo, asi como se muestra en la imagen.
https://www.dropbox.com/s/zupkz297rnbfd ... s.png?dl=0
Ahora debe cambiarle el nombre a la vista y ponerles los campos para los filtro, si lo amerita y listo.
Ahora retomando de nuevo el tema de nuestra primera consulta o vista, procedemos a colocarle el código de lugar, así como le dije anteriormente nos vamos al embs general de la ventana o window, y en la secion local Data, luego en opcion otra estrucura
colocamos la definicions de la vista así:
Código: Seleccionar todo
!Definición de una vista de la tabla factura relacionada con la tabla cliente
VistaFacturas View(Factura),Filter('FAC:FechaFactura >=glo:FechaInicial1 and FAC:FechaFactura <=glo:FechaFinal'),Order('(FAC:NumeroFactura')
PROJECT(FAC:NumeroFactura)
PROJECT(FAC:FechaFactura)
PROJECT(FAC:Condiciones)
PROJECT(FAC:Renglon)
PROJECT(FAC:Montofactura)
PROJECT(FAC:CodigoClientes)
JOIN(CLIentes:PorCodigoClienteKey,FAC:CodigoClientes)
PROJECT(CLIentes:CodigoCliente)
END !Fina de la vista
END ! Por el Join
VistaFacturas View(Factura) vistaFactura es el nombre de la vista y View(Factura)ese el nombre de la tabla a la cual le vamos definir la vista. Esta parte es el filtro que vamos aplicar así: Filter('FAC:FechaFactura >=glo:FechaInicial1 and FAC:FechaFactura <=glo:FechaFinal', y esta parte Order('(FAC:NumeroFactura')es el orden por donde queremos que salga ordenada nuestra vista y los PROJECT(mi campos) son los campos de la tabla factura y el comando JOIN es la unión de las tablas relacionada a la tabla factura, en este caso está relacionada por cliente.
Continuando con el proceso de diseño para nuestra primera consulta, ahora le voy a colocar el código para cargar los datos, para esto me voy al botón procesar y agrego el siguiente código:
Código: Seleccionar todo
!Cargando Datos de Factura
!Bindeando los campo que participantes en los filtros
BIND('FAC:FechaFactura',FAC:FechaFactura)
BIND('glo:FechaInicial1',glo:FechaInicial)
BIND('glo:FechaFinal',glo:FechaFinal)
Qv:Totalfactura =0
Open(VistaFacturas) !abriento la vista
Set(VistaFacturas) !Barriendo la vista
¡Barriendo la vista
Loop
Next(VistaFacturas)
If Error() then break .
!Igualando los campos de factura en la Queue
Qv:Nrofactura =FAC:NumeroFactura
Qv:Fecha =FAC:FechaFactura
Qv:Condiciones =FAC:Condiciones
Qv:IdClientes =FAC:CodigoClientes
Qv:NombreClientes =Clip(CLIentes:Nombres)&' '&Clip(CLIentes:Apellidos)
Qv:MontoFactura =FAC:Montofactura
Qv:Totalfactura +=Qv:MontoFactura
Add(Qvistas)
end
!Contador de Registro
Loc:Contador = RECORDS(Qvistas)
Close(VistaFacturas) !Cerrando vista
UNBIND('FAC:FechaFactura')
UNBIND('glo:FechaInicial')
UNBIND('glo:FechaFinal')
Disable(?Procesar)
Enable(?Limpiar)
ThisWindow.reset(true)
Código: Seleccionar todo
!Habilitando controles
Enable(?procesar)
Disable(?Limpiar)
!Limpiando Queue y variables
free(Qvistas)
Clear(glo:FechaInicial)
Clear(Loc:Contador)
Clear(glo:FechaFinal)
ThisWindow.reset(true)
Código: Seleccionar todo
!Limpiando Queue
Free(Qvistas)
Clear(glo:Codigocliente)
Clear(glo:FechaInicial)
Clear(glo:FechaFinal)
Obviandos pasos
Antes de entrar en la creación de mí segunda consulta le hago la siguiente recomendación por favor cree todos los procedimientos vacío desde su menú general, luego vaya copiando ventanas o procedimientos diseñando según corresponda, esto le ayudará ahora tiempo en su diseño.
2) Creando nuestra segunda consulta:
Crea una consulta para saber cuántas facturas se le ha hecho a un determinado cliente y cuánto asciende su monto. Para hacer esta consulta lo primero que vamos hacer es copiar el anterior procedimiento y modificarles unos cuantos puntos, tales como el campo para el filtro, luego modificar el código del filtro en la definición de la vista. La ventana para esta consulta debe ser así como se muestra en la imagen. https://www.dropbox.com/s/x9ewk4384q1em ... s.png?dl=0
Lo único nuevo que voy a crear en esta ventana es un Drop Box o DropListBox a la tabla cliente para tomar el codigo del cliente, asi como se muestra en la imagen de arriba.
Estructura de la Vista
La estrucura de la vista es casi la misma a la anterior consulta solo cambia el filtro antes era por un rango de fecha, ahora va hacer por el idcliente utilizando un Drop Box para tomar el idcliente.
El codigo de la definicion de vista sería así.
Código: Seleccionar todo
!Definición de una vista de la tabla factura relacionada con la tabla cliente
VistaFacturas View(Factura),Filter('FAC:CodigoClientes=glo:Codigocliente'),Order('(FAC:NumeroFactura')
PROJECT(FAC:NumeroFactura)
PROJECT(FAC:FechaFactura)
PROJECT(FAC:Condiciones)
PROJECT(FAC:Renglon)
PROJECT(FAC:Montofactura)
PROJECT(FAC:CodigoClientes)
[color=#FF0000]JOIN(CLIentes:PorCodigoClienteKey,FAC:CodigoClientes)[/color]
PROJECT(CLIentes:CodigoCliente)
END !Fina de la vista
END ! Por el Join
Código: Seleccionar todo
!Cargando los Datos vista en la tabla factura
!Bindeando los campo que participante en el los filtros
BIND('FAC:CodigoClientes',FAC:CodigoClientes)
BIND('glo:Codigocliente',glo:Codigocliente)
Qv:Totalfactura =0
Open(VistaFacturas) !abriento la vista
Set(VistaFacturas) !Barriendo la vista
Loop
Next(VistaFacturas)
If Error() then break .
!Igualando los campos de factura en la Queue
Qv:Nrofactura =FAC:NumeroFactura
Qv:Fecha =FAC:FechaFactura
Qv:Condiciones =FAC:Condiciones
Qv:IdClientes =FAC:CodigoClientes
Qv:NombreClientes =Clip(CLIentes:Nombres)&' '&Clip(CLIentes:Apellidos)
Qv:MontoFactura =FAC:Montofactura
Qv:Totalfactura +=Qv:MontoFactura
Add(Qvistas)
end
!Contado de registros
Glo:contador = RECORDS(Qvistas)
Close(VistaFacturas) !Cerrando vista
UNBIND('FAC:CodigoClientes')
UNBIND('glo:Codigocliente')
Disable(?Procesar)
Enable(?Limpiar)
ThisWindow.reset(true)
Por favor aplique los anteriores pasos, si usted los hizo tal como se le indico tendrá un resultado óptimo.
Creando nuestra tercera consulta:
3) Crear una consulta para saber cuántas facturas se le ha hecho a un determinado cliente en un rango de fecha y cuánto asciende su monto. Para hacer esta consulta lo primero que vamos hacer es copiar la ventana anterior o procedimiento y agregarles las variables de fecha Inicial y fecha final que servirán como filtro complementario, y en el botón procesar solo hay que agregar el código con los binds del rango de fecha. Esta ventana tiene que ser así como se observa en la imagen.
https://www.dropbox.com/s/k8v0prjumpvys ... a.png?dl=0
Estructura de la Vista
La estrucura de la vista es casi la misma a la anterior consulta, solo cambia el filtro, antes estamos buscando por el Idcliente, ahora se le agrega un rango de fecha, utilizo un Drop Box para tomar el idcliente, y tambien utilizo un control calendario de un template gratuito llamado Aplus de nuestro amigo Francisco Cabez el cual lo puede descargar de la red.
Código: Seleccionar todo
!Definición de una vista de la tabla factura relacionada con la tabla cliente
VistaFacturas View(Factura),Filter('FAC:CodigoClientes=glo:Codigocliente and FAC:FechaFactura >=glo:FechaInicial1 and FAC:FechaFactura <=glo:FechaFinal'),Order('(FAC:NumeroFactura')
PROJECT(FAC:NumeroFactura)
PROJECT(FAC:FechaFactura)
PROJECT(FAC:Condiciones)
PROJECT(FAC:Renglon)
PROJECT(FAC:Montofactura)
PROJECT(FAC:CodigoClientes)
JOIN(CLIentes:PorCodigoClienteKey,FAC:CodigoClientes)
PROJECT(CLIentes:CodigoCliente)
END !Fina de la vista
END ! Por el Join
En el botón procesar lo único que cambia son los bind y unbind, los demás se queda igual así:
Código: Seleccionar todo
!Cargando Datos de Factura
!Bindeando los campo que participante en el los filtros
BIND('FAC:CodigoClientes',FAC:CodigoClientes)
BIND('glo:Codigocliente',glo:Codigocliente)
BIND('FAC:FechaFactura',FAC:FechaFactura)
BIND('glo:FechaInicial1',glo:FechaInicial)
BIND('glo:FechaFinal',glo:FechaFinal)
Qv:Totalfactura =0
Open(VistaFacturas) !abriento la vista
Set(VistaFacturas) !Barriendo la vista
Loop
Next(VistaFacturas)
If Error() then break .
!Igualando los campos de factura en la Queue
Qv:Nrofactura =FAC:NumeroFactura
Qv:Fecha =FAC:FechaFactura
Qv:Condiciones =FAC:Condiciones
Qv:IdClientes =FAC:CodigoClientes
Qv:NombreClientes =Clip(CLIentes:Nombres)&' '&Clip(CLIentes:Apellidos)
Qv:MontoFactura =FAC:Montofactura
Qv:Totalfactura +=Qv:MontoFactura
Add(Qvistas)
end
Glo:contador = RECORDS(Qvistas)
Close(VistaFacturas) !Cerrando vista
UNBIND('FAC:CodigoClientes')
UNBIND('glo:Codigocliente')
UNBIND('FAC:FechaFactura')
UNBIND('glo:FechaInicial')
UNBIND('glo:FechaFinal')
Disable(?Procesar)
Enable(?Limpiar)
ThisWindow.reset(true)
Creando nuestra cuarta y última consulta:
4) Crear una consulta para saber cuántas facturas se han emitido al contado y acredito en todo el sistema y cuánto asciende su monto. Para hacer esta consulta lo primero que vamos hacer es copiar unas de las ventanas anteriores la que más le guste y agregarles un DropBox con las variables Glo:Condiciones que servirá como filtro complementario para hacer esta consulta.
Aquí solamente le voy a dejar la pantalla de esta consulta, los demás se lo dejó de tarea, así como la consulta numero 5 será usted que aplicará los conocimientos aprendidos en este tutorial.
https://www.dropbox.com/s/yuyt1c8drdmh8 ... s.png?dl=0
Vistas o Consultas complejas en el sistema
Después de haber terminado de crear las vistas o las consultas simples anteriores, ahora entramos a crear otras tipos de vista o consultas mucho más complejas.
En las vistas anteriores consistía en hacer consultas a la cabecera de la factura tales como:
Por rango de fecha, con el objetivo de saber la cantidad de facturas se han hecho en un periodos de tiempo, así como por el Idclientes, para saber cuántas facturas se le han emitidos a un determinado clientes y también por la condiciones, cuantas factura se han emitidos en al Contado y Cuantas a Crédito.
En este tipo vistas o consultas que voy a crear ahora cambia un poco la lógica, porque aquí ya no voy consultar la cabecera de la factura, sino el Detalle de la factura, el objetivo ahora consultar los artículos del inventario, lo que voy hacer es una series de vistas o consultas al detalle factura.
Las vistas o consultas que voy a crear ahora son las siguientes:
1-Crear una vista o consulta por el IdArtículo, para determinar cuántas veces se ha vendidos un determinado artículos en el sistema y a cuánto asciende su monto de ventas.
2-Crear una vista o consulta por el IdArtículo y con un rango de fecha, para determinar cuántas veces se ha vendidos un determinado artículos, en una fecha en especifica en el sistema y a cuánto asciende su monto de ventas.
3-Crear una vista o consulta por el IdArtículo y el IdCliente, para determinar cuántas veces se ha vendidos un determinado artículos a un cliente en específico en el sistema y a cuánto asciende su monto de ventas.
4-Crear una vista o consulta por el IdArtículo, IdCliente con un rango de fecha, para determinar cuántas veces se ha vendidos un determinado artículos a un cliente en una fecha en específica en el sistema y a cuánto asciende su monto de ventas.
Para poder crear este tipo vista o consultas tenemos que crear una nueva estructura de Queue que no sirva como contenedora de los datos a consultar, así como una nueva ventana un poco más grande que la anterior
Código: Seleccionar todo
Estructura de Queue para una vista o consulta compleja
QVistaPro (Este el Nombre de la Queue)
QPro:NroFactura long(07)
QPro:DeFecha Date(d6)
QPro:Condiciones String(20)
QPro:IdCliente long(07)
QPro:Nombres String(80)
QPro:MontoFactura Decima(13.2
QPro:IdProducto long(07)
QPro:Envase String(20)
QPro:Descripcion String(20)
QPro:Cantidad long(10)
QPro:Precios_Unitario Decima(10.2)
QPro:Importe Decima(14.2)
Esto son los campos que sirven para ser utilizado en los filtros de la vistas.
Código: Seleccionar todo
glo:Codigocliente
Glo:IdArticulo
glo:FechaInicial
glo:FechaFinal
Glo:NroFactura
Glo:Condiciones
Crear una vista o consulta por el IdArtículo, para determinar cuántas veces se ha vendidos un determinado artículos en el sistema y a cuánto asciende su monto de ventas.
Código: Seleccionar todo
Definición de estructura de vista
!Definición de la vista de la tabla detalle factura y aplicamos el filtro IdArticulo
VistaDetalleArti View(DetalleFactura),Filter('DET:CodigoProducto=Glo:IdArticulo'),Order('(FAC:NumeroFactura') Project(DET:NroFactura)
Project(DET:CodigoProducto) !Campos de la tabla detallefactura
Project(DET:Cantidad) !Campos de la tabla detallefactura
Project(DET:PrecioUnitario) !Campos de la tabla detallefactura
Project(DET:Importe) !Campos de la tabla detallefactura
Join(PRO:PorCodigoProductoKey,DET:CodigoProducto) ! Relacion con la tabla Articulos
Project(PRO:Codigo)
END
Join(FAC:FacturaKey,DET:NroFactura) ! Relacion con la tabla factura
Project(FAC:NumeroFactura)
JOIN(CLIentes:PorCodigoClienteKey,FAC:CodigoClientes) ! Relacion con la tabla Cliente
Project(CLIentes:CodigoCliente)
END
End
End
Coloco el siguiente código siguiendo los mismos pasos anteriormente explicados.
Código: Seleccionar todo
!Cargando los Datos y bindeando los campos de los filtros
BIND('DET:CodigoProducto',DET:CodigoProducto)
BIND('Glo:IdArticulo',Glo:IdArticulo)
Open(VistaDetalleArti) !finición de la vista
Set(VistaDetalleArti)
Loop
Next(VistaDetalleArti)
If Error() then break.
!If TEM:NumeroFactura <>FAC:NumeroFactura then break.
QPro:NroFactura =FAC:NumeroFactura
QPro:DeFecha =FAC:FechaFactura
QPro:Condiciones =FAC:Condiciones
QPro:IdCliente =FAC:CodigoClientes
QPro:Nombres =Clip(CLIentes:Nombres)&' '&Clip(CLIentes:Apellidos)
QPro:MontoFactura =FAC:Montofactura
QPro:IdProducto =PRO:Codigo
QPro:Envase =PRO:Envanse
QPro:Descripcion =PRO:Descripcion
QPro:Cantidad =DET:Cantidad
QPro:Precios_Unitario =DET:PrecioUnitario
QPro:Importe =QPro:Cantidad* QPro:Precios_Unitario
Loc:CantidadVendidas +=QPro:Cantidad
Add(QVistaPro)
End
Close(VistaDetalleArti)
UNBIND('DET:CodigoProducto')
UNBIND('Glo:IdArticulo')
Disable(?Procesar)
Enable(?Limpiar)
ThisWindow.reset(true)
[b]En botón Limpiar [/b]
Coloco el siguiente código siguiendo los mismos pasos anteriormente explicados.
!Habilitando controles
Enable(?procesar)
Disable(?Limpiar)
free(QVistaPro)
Clear(Glo:IdArticulo)
Clear(Loc:CantidadVendidas)
ThisWindow.reset(true)
https://www.dropbox.com/s/zupkz297rnbfd ... s.png?dl=0
Explicando un poco este tipo de vista o consulta.
En esta vista hago una consulta por el IdArticulo, como es una tabla relacionada por detallefactura con factura podemos hacer uniones o JOIN de tablas ósea, ligar informaciones con varias tablas relacionadas entre sí, para eso solo hay que crear una Queue que contenga todos los campos necesarios para cargar los datos solicitados, hay que tener en cuenta que no deben quedar campos no utilizados en la Queue por que va a dar errores en la sincronización de la información, la Queue trabajan en forma de líneas, cuando no se utiliza algunos campo se pierde el orden de la información saliendo los datos distorsionados.
B) Creando las vistas complejas
Crear una vista o consulta por el IdArtículo y con un rango de fecha, para determinar cuántas veces se ha vendidos un determinado artículos, en una fecha en especifica en el sistema y a cuánto asciende su monto de ventas.
En esta vista o consulta solo voy a dejar la pantalla, el reto se lo dejo de tarea.
https://www.dropbox.com/s/b9vokrad6n01n ... a.png?dl=0
C) Creando las vistas complejas
Crear una vista o consulta por el IdArtículo y el IdCliente, para determinar cuántas veces se ha vendidos un determinado artículos a un cliente en específico en el sistema y a cuánto asciende su monto de ventas.
En esta vista o consulta solo voy a dejar la pantalla, el reto se lo dejo de tarea.
https://www.dropbox.com/s/2a7l4kqwai7w7 ... e.png?dl=0
D) Creando las vistas complejas
Crear una vista o consulta por el IdArtículo, IdCliente con un rango de fecha, para determinar cuántas veces se ha vendidos un determinado artículos a un cliente en una fecha en específica en el sistema y a cuánto asciende su monto de ventas.
En esta vista o consulta solo voy a dejar la pantalla, el reto se lo dejo de tarea.
https://www.dropbox.com/s/n20f1kbohsfsp ... a.png?dl=0
Finalmente no quiero terminar este tutorial sin antes dejarles algunas Ventanas de otras vista o consulta a la tabla Articulos y Clientes. En la tabla articulos hice dos vistas una por descripción y otra por tipos de Articulos, en la tabla clientes hice una por
ciudad, tambien se puede hacer por nombre del cliente como a usted le guste.
Vista o consulta a la tabla articulo por Descripción
por favor aplique los aprendido y haga esta vista
https://www.dropbox.com/s/9yv0lvmnlf737 ... o.png?dl=0
Vista o consulta a la tabla articulo por tipos articulos
por favor aplique los aprendido y haga esta vista
https://www.dropbox.com/s/6juiibkt44t55 ... o.png?dl=0
Vista o consulta a la tabla Cliente por Ciudad
por favor aplique los aprendido y haga esta vista
https://www.dropbox.com/s/8mrnnxxlvooto ... d.png?dl=0
Reporte, impresión de la cola de una Queue
Los datos cargados en las distantas ventanas que vimos durante el desarrollo de este tutorial, son de una varias Queues que creamos. Ahora le quiero mostrar de forma breves como se imprime la cola de una Queue en un reporte. Lo primero que tenemos que hacer diseñar el reporte colocandoles los campos de la queue correspondiente, por este motivo fue que hice la Queue de tipo global en este tutorial, para poder utilizar los mismo datos o los campos en los reportes. El método que lo voy a dejar se aplicar para todos los reportes lo unico que cambia es su diseños y los nombres que usted asigne.
Solamete le voy a delajar dos estructuras reprotes y recuerde que si usted hizo varia vistas a la tabla factura puede aplicar el mismo reporte para todas ella, así sucesivamente.
Reporte de la vista Factura por IdCliente
Este fue el diseño de reporte que hice para esta vista, como se obseva en la imagen
https://www.dropbox.com/s/e2wuga1wlkjoz ... a.png?dl=0
El codigo del reporte
Este codigo se coloca en la Window Maganger(ReportManager) luego en el evento TakeRecord Procedure() byte,Virtual Prioridad 4,500
Código: Seleccionar todo
!Imprimir cola de Memoria
LOOP C# = 1 to RECORDS(Qvistas)!Nombre de la Que
GET(Qvistas,C#)!contador de los registro
IF ERRORCODE() THEN STOP(ERROR()).
PRINT(RPT:Detail)
END!LOOP
ENDPAGE(Report)
!Limpiando la Queue
Free(Qvistas)
para evitar un devordamiento de paginas, osea que le salgan muchas paginas en el reporte,vayase a la propiedades del mismo y busque la opción detail dele doble click y pongale False tiene que ser F mayuscula, despues le va aparecer asi detail=False Con esto solo se le muestra los registros de una paginas en el reporte.
Reporte de las vistas complajas DetalleFactura por IdArticulo
Este fue el diseño de reporte que hice para esta vista, como se obseva en la imagen
https://www.dropbox.com/s/6845txvbm4d4l ... a.png?dl=0
El codigo del reporte
Este codigo se coloca en la Window Maganger(ReportManager) luego en el evento TakeRecord Procedure() byte,Virtual Prioridad 4,500
Código: Seleccionar todo
Imprime la cola de una Queue de Memoria
LOOP C# = 1 to RECORDS(QVistaPro)
GET(QVistaPro,C#)
IF ERRORCODE() THEN STOP(ERROR()).
PRINT(RPT:Detail)
END!LOOP
ENDPAGE(Report)
Free(QVistaPro)
para evitar un devordamiento de paginas, osea que le salgan muchas paginas en el reporte,vayase a la propiedades del mismo y busque la opción detail dele doble click y pongale False tiene que ser F mayuscula, despues le va aparecer asi detail=False Con esto solo se le muestra los registros de una paginas en el reporte.
Conclusiones
Hasta qui Dios me ha ayudado a poder terminar este tutorial, no tengo palabra para agradeceles a mi Dios por su misericordia por la fuerza de voluntad que me dio poder terminal este trabajo, no le voy a decir que fue facil fueron muchas horas pegado frente al PC trabajando, para que ustedes puedan disfrutar de este material, especialmente aquellos programadores Clarioneros que no tienen muchos conocimientos, así puedan tener un poco de luz en medio de la oscuridad, espero que le sea de gran ayuda a su conocimiento, con esto cumplo con un mandamiento de Cristo que dijo: "DAD POR GRACIA LO QUE POR GRACIA HA RECIBIDO (Mateo 10:8).
Le recomiendo que descarguen el demo utilizado en el desarrollo de este tutorial, que estoy subiendo en los para la versión de clarión 9.0 luego subiré la versión de clarión 6.3.
Descargas
DemoFacturaVistas, los templates utilizados en este Demo estan en el mismo archivo rar, debe instalarlos primeros antes de cargar o correr la aplicación, el link es:
https://www.dropbox.com/s/vh9bcib5at3xp ... 4.rar?dl=0
Reciban ricas y abundantes bendiciones