Vista en tabla TPS-Clarion, Consultado los datos Tema III

Código útil, tips de programación, etc.
Responder
R.Pacheco
Al nivel de RZ
Mensajes: 367
Registrado: Lun Feb 07, 2011 4:45 pm
Ubicación: Santo Domingo,Rep.Dominicana
Contactar:

Vista en tabla TPS-Clarion, Consultado los datos Tema III

Mensaje por R.Pacheco » Jue Ene 29, 2015 1:28 am

Hola todos,
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
Nota: en la Queue debe crearse solo los campos necesarios no se deben dejar campos no utilizables.
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
3-Lo tercero que voy a crear es una ventana, en la cual le voy agregar un listbox con los campos de la Queue Qvistas, luego coloco los campos de memoria globales que van a servir de filtros, y por últimos creamos dos botones un llamado procesar, este sirve para ejecutar la operación y otro llamado Limpiar, este sirve para limpiar los campos de los filtros y la Queue global, la ventana tiene que quedarle así como se muestra en la imagen.
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
Explicando poco más este codigo
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)
Ahora ve voy al botón limpiar y coloco el siguiente código así:

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)
Ahora me voy al botón Cárcel, luego a la opción window evento de la ventana y ahí buscamos el punto CloseDown y CloseWindow y colocamos el mismo código de limpiar variable y queue, esto nos ayuda a limpiar las variables cuando cerramos la ventana con la crucecita o con escape se limpia automáticamente.

Código: Seleccionar todo

!Limpiando Queue
Free(Qvistas)
Clear(glo:Codigocliente)
Clear(glo:FechaInicial)
Clear(glo:FechaFinal)
Finalmente, con todos estos pasos terminamos la creación de nuestra primera consulta o definición de vista, si usted siguió todos estos pasos de seguro va tener un buen resultado.

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
En el botón procesar lo único que cambia son los bind, los demás se queda igual así:

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)
Finalmente, con estos pasos termino la creación de nuestra segunda consulta o definición de vista.
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
A este código lo único que le agregue fue esta línea FAC:FechaFactura >=glo:FechaInicial1 and FAC:FechaFactura <=glo:FechaFinal')es el filtro del rango de fecha todo los otro se queda igual al anterior procedimiento
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)
Ahora sigas los pasos anteriores tal como le fueron enseñados y tendrá un excelente resultado, con esto termino la creación de nuestra tercera consulta o definición de vista.

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)
Campos globales
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
ACreando las vistas complejas
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
En el Botón Procesar
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)
La ventana para esta vista es así como se observa en la imagen.
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)
Nota muy Importante
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)
Nota muy Importante
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
Ing. R. Pacheco
Analista Programador
Pachecoramon@hotmail.com, Skype:pachecoramon
Santo Domingo, Rep. Dominicana
Para cualquier consulta rápida: hacerla por WhatApp al 1 347-6159 US


Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 13 invitados