Edit in place, Creando Vistas en tablas tps (Parte VII-B)

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:

Edit in place, Creando Vistas en tablas tps (Parte VII-B)

Mensaje por R.Pacheco » Lun Ene 16, 2012 12:52 pm

Introducción
Pero ante de comenzar quiero pedirles excusas a la gran cantidad de colegas y amigos que me habían escrito vía correo pidiéndome que continuará con el tema, ya que por razones de muchos trabajo y la falta de tiempo me impedían retomar el temas, pero gracia a nuestro Señor Jesucristo que ya estamos aquí para traerle la partes que faltan de este tema, esperando que lo disfruten.
En mi post anterior había dicho que por ser muy largo este tema, tenía que dividirlo en tres partes, aquí vengo con la segunda parte que sería la b, pero ante quiero decirles a los nuevos colegas y amigos que van a integrar a leer y practicar esta parte, que beben primero leer la parte A y tenerla como punto de referencia para que puedan entender la parte B.
Anteriormente decía y ponía el ejemplo en nuestro sistema de facturación que he venido desarrollando en todos los temas, que he publicado aquí, y tomando como referencia la parte de mi post anterior quiero volver a refrescar el tema definiendo el término vista.
¿Qué es una Vista?
Es una estructura lógica que puede incorporar campos de diferentes tablas (aún cuando no estén relacionadas en el diccionario). Es como contar con una sola tabla que incorpore todos los campos que necesitamos en el orden que los deseamos.

¿Qué ventajas provee una vista?
Entre las más importantes tenemos:
- Podemos crear índices en tiempo de ejecución.
- Filtros en tiempo de ejecución.
- Podemos mezclar campos de diferentes tablas para crear el índice o filtro.
- Es posible especificar que no se incorporen registros sin hijos (por ejemplo, clientes sin facturas). Requieren mucha menos programación que usar tablas.
En general son estructuras muy rápidas y precisas con un excelente resultado esperado. (Y aún más si se aplican sobre un sistema cliente - servidor), además son muchos más rápidas que los process. (Fuente el ABC de Clarión –Luís Parra).

¿Por qué debo usar vista en mi sistema?
Primeramente estamos trabajando en Tps, y aquí debemos manejar esta parte por programación, diría adelantándonos al futuro para hacerles más fácil el trabajo a nuestros usuarios del sistema, si estuviéramos trabajando en un motor de Base de datos Sqls no tuviéramos que explicar este tema aquí, ya que en sql la vista son hecha online, momento-tiempo en que usted quiera, solamente debe apoyarse de un buen manejador de base de Datos, y estaría muy feliz haciendo su trabajo.
Suponiendo que usted tiene su sistema de facturación hecho en Tps y quiere saber cual fue su porcentaje de ventas del día o quiere saber la cantidad de facturas que usted ha hecho en un rango de fecha.
¿Por qué emplear vistas?
Mire yo antes hacia este tipo de consultar por procesos haciendo barrido de las tablas del sistemas esto con lleva que cuando el sistema se va poniendo grande usted va durar media hora o quizás una hora para que el sistema le dé un resultado, con los process los resultados son muy lento y a medida que el sistema va creciendo se va poniendo más lento, mientras que con las vistas es muchos más rápido no importando lo grande que se vaya poniendo el sistema, por eso es, que trato con muchos interés el tema, para que usted se haga la vida más fácil y así se la haga a los sus usuarios.

Ya en nuestro post anterior, cree la vista por Fecha, a la cual yo llamó vista factura por fecha, usted le pondrá el nombre de su preferencia.
Vista Facturas Por Fecha:
Aquí filtraremos todas las facturas realizada en nuestro sistema por un rango de fecha, con la finalidad de determinar el monto vendido o la cantidad de facturas elaboradas.

Retomando el tema de la vistas
En este tema vamos a ver todas las vista, para un determinado cliente en todos su sistema de facturación.
1- Vista Facturas Por Cliente:
aquí vamos hacer una consulta por el código del cliente con la finalidad de filtrar la cantidad de facturas realizadas a un determinado clientes, con el objetivo de conocer el monto facturado o vendido y la cantidad de factura elaboradas a dicho cliente.

Antes de comenzar quiero decirles que debemos ahora tiempo y espacio, esto quiere decir, que diseñé un solo procedimiento póngalo bonito hermoso y por favor úselo para todos los demás, solo copie y quite lo que no le interesa para que haga más rápido su trabajo en un menor tiempo y recuerde que siempre le voy a recordar esto diciendo así, utilice su inteligencia.

Aquí voy a tomar la ventanita anterior de la vista que hice en la parte A, la copió en el procedimiento que se llama VistaFacturaClientes, quité la fechas.
Imagen

Quiteles los campos fechas y pongales el campo global Codigo de clientes ahora su ventanita les debió haberles quedado así como se vez en la imagen
Imagen
Ahora agrego el campos de memoria global CodigoCliente para hacer el el filtro por cliente, en el boton OK de la ventana, le cambie la etiqueta y le puse procesar ahí vamos crear un procedimiento llamado “ResultadofacturaClientes”, es donde se van a cargar los datos de la vista.
Ahora vamos a crear el browse que va a contener los datos de la queue llamada QClientes. Para hacer esto debe elegir una Window o ventana como procedimiento en cada un de los casos y luego ponerle un control list, siga los pasos con mucho cuidado sin desesperase, el browse le debió haber quedado así como se observa en la imagen.
Imagen

Definición de Vista
Ahora vamos definir la vista y agregarle el códigos en nuestra ventana en el Browse, para eso
No vamos a la propiedad del browse o list , elegimos embeds, local data elegimos la opción
Otra declaración, ahí ponga el siguiente código, como se vez en la imagen
Imagen

Código: Seleccionar todo

!Definición de la vista
VistaFacturas  View(Factura),Filter('FAC:CodigoClientes=Glo:CodigoCliente')
,Order('FAC:NumeroFactura')
                Project(FAC:FechaFactura)
                Project(FAC:FechaFactura)
                Project(FAC:Montofactura)
                 !Nota: Se coloca la llave la tabla cliente por el nombre del campo que se relaciona
                Join(CLIentes:PorCodigoClienteKey, FAC:CodigoClientes)
                Project(CLIentes:CodigoCliente)
                Project(CLIentes:Nombres)
                Project(CLIentes:Apellidos)
              End
             End
!En esta parte se define la Vista, se coloca el filtro y se ordena por el número de la factura. Como se vez en el código
VistaFacturas View(Factura),Filter('FAC:CodigoClientes=Glo:CodigoCliente')
,Order('FAC:NumeroFactura').

Agregando el código para cargar los datos.
Ahora vamos cargar los datos de la vista en una Queue la cual llamó QClientes, para logra esto nos vamos a la propiedad del browse, elegimos embeds, Init, elegimos Open Files, esto quiere decir cargar archivos, ahí colocamos el siguiente código.

Código: Seleccionar todo

! Cargando los Datos de FacturaClientes
  Debemos bindeando los campos participantes en el filtro
 BIND('FAC:NumeroFactura', FAC:NumeroFactura)
 BIND('FAC:CodigoClientes',FAC:CodigoClientes) 
 BIND('Glo:CodigoCliente', Glo:CodigoCliente)
 Qclie:Contador =0    ¡ ponemos el contador en cero 
 !LLamando la vista
 Open(VistaFacturas)
!Barriendo la  Vista
 Set(VistaFacturas)
 Loop
  Next(VistaFacturas)
!  IF ERRORCODE()
  If Error() then break .
  !Cargando los datos
   Qclie:NorFactura    =FAC:NumeroFactura
   Qclie:DeFecha       =FAC:FechaFactura
   Qclie:CodiCliente   =CLIentes:CodigoCliente
   Qclie:Nombre        =Clip(CLIentes:Nombres)&' '&clip(CLIentes:Apellidos)
   Qclie:Monto         =FAC:Montofactura
   Qclie:Contador +=1  !Contador
   Qclie:TotalGeneral +=Qclie:Monto !Sumando monto de factura
 Add(QClientes)
 end
  Close(VistaFacturas) !Cerrando la ventana
  !Liberando el bing
 UnBIND('FAC:NumeroFactura')
 unBIND('FAC:CodigoClientes')
 unBIND('Glo:CodigoCliente')
Nota: Importante
Los campos con Bind son aquellos que participan en el filtro, tanto los de la Tabla como los campos de memorias. Ya termine mi primera vista y este es mi resultado, así como se vez en la imagen.
Ahora voy a compilar mi sistema, hago una consulta por un determinado cliente y su resultado debió
quedar así como se observa en la soguiente imagen.
Imagen
Imprimiendo el resultado de la Vista
Ahora no toca diseñar el reporte, le recomiendo dos cosas, la primera es, si usted quiere
Puede tener un procedimiento individual de reporte y la segunda es que quiere puede utilizar el mismo reporte para los tres casos funcional igual. En este caso el procedimiento que sigue es
ReporteResultdoFacturaClientes. Para hacer esto le recomiendo que se vaya a la parte A
De este mismo tema y realice los pasos que se describen ahí, si ya hizo el reporte utilice su inteligencia copie y renombre su procedimiento, si no lo ha hecho entonces diseñé su reporte como a usted mejor le parezca, recuerde que los campos que lleva son los de la
Queue QClientes, si lo hizo así, ahora compile su aplicación.

Nota Importante:
En post anterior la parte A, se creo un procedimiento para cerrar las ventanas cuando
termina de imprimir la vista, si usted utilizo su inteligencia y copió o renombró los procedimientos no debe repetir esta parte por que ya esta hecha, las copia heredan este procedimiento.

2- Facturas Clientes Por Rango de Fecha: aquí vamos a filtrar las cantidades de facturas realizadas a un determinado clientes por el código del mismo y por un rango de fecha, con el objetivo de conocer el monto facturado en una fecha determinada.

Para hacer esto utilizaremos nuestra inteligencia, nos vamos al primer procedimiento de vista que se hizo en el tema anterior el A, luego renombramos o copiamos la pantallita y le ponemos por nombre Facturaclientesporrangofecha. Así como se vez en la imagen.
Imagen
Luego procedemos hacerles los cambios de lugar, amplié la pantallita un campo más abajo para colocar el código del cliente. Su pantallita debió haberle quedado así como se muestra esta imagen.
Imagen
Aquí agregue el campos de memoria global CodigoCliente para hacer el filtro por cliente mas un rango de fecha, en el boton OK de la ventana, le cambie la etiqueta y le puse procesar ahí vamos crear un procedimiento llamado “ResultadofacturaClientesporfecha”, es donde se van a cargar los datos de la vista. Ahora copie el browse anterior que hizo en este procedimiento y sigas los mismos pasos. Si así lo hizo, su pantallita debió haberle quedado así como se muestra esta imagen.
Imagen
Recuerde que aquí las pantallas de resultado no debe ser la misma, tiene que ser con nombre de procedimiento distinto.
Ahora vamos definir la vista y agregarle el código a nuestra ventana en el Browse, para eso
No vamos a la propiedad del browse o list , elegimos embeds, local data elegimos la opción
Otra declaración, ahí ponga el siguiente código, como se vez en la imagen
Imagen

Código: Seleccionar todo

!Definición de la vista
VistaFacturas View(Factura),Filter('FAC:CodigoClientes=Glo:CodigoCliente and FAC:FechaFactura>=Glo:FechaInicial and FAC:FechaFactura<=Glo:FechaFinal'),Order('FAC:NumeroFactura')
Nota: toda esta parte de arriba  debe quedar en una misma línea.
  Project(FAC:FechaFactura)
  Project(FAC:FechaFactura)
  Project(FAC:Montofactura)
 !Nota: Se coloca la llave la tabla cliente por el nombre del campo que se relaciona                Join(CLIentes:PorCodigoClienteKey, FAC:CodigoClientes)
 Project(CLIentes:CodigoCliente)
 Project(CLIentes:Nombres) 
 Project(CLIentes:Apellidos)
 End
   End
Agregando el código para cargar los datos.
Ahora vamos cargar los datos de la vista en una Queue la cual llamó QClientes, para logra esto nos vamos a la propiedad del browse, elegimos embeds, Init, elegimos Open Files, esto quiere decir cargar archivos, ahí colocamos el siguiente código.

Código: Seleccionar todo

! Cargando los Datos de Factura
 BIND('FAC:NumeroFactura', FAC:NumeroFactura)  !Bindeando los campos participantes en el fitros
 BIND('FAC:CodigoClientes',FAC:CodigoClientes)
 BIND('Glo:CodigoCliente', Glo:CodigoCliente)
 BIND('FAC:FechaFactura', FAC:FechaFactura)
 BIND('Glo:FechaInicial', Glo:FechaInicial)
 BIND('Glo:FechaFinal', Glo:FechaFinal)
  Qclie:Contador =0 ¡ Contador de registros
 !LLamando y barriendo la vista
 Open(VistaFacturas)
 Set(VistaFacturas)
 Loop
  Next(VistaFacturas)
   If Error() then break .
  !Cargando los datos
   Qclie:NorFactura    =FAC:NumeroFactura
   Qclie:DeFecha       =FAC:FechaFactura 
   Qclie:CodiCliente   =CLIentes:CodigoCliente
   Qclie:Nombre        =Clip(CLIentes:Nombres)&' '&clip(CLIentes:Apellidos)
   Qclie:Monto         =FAC:Montofactura
   Qclie:Contador +=1  !Contador
   Qclie:TotalGeneral +=Qclie:Monto !Sumando monto de factura
 Add(QClientes) 
 end 
  Close(VistaFacturas) 
  !Liberando el bing 
 UnBIND('FAC:NumeroFactura') 
 unBIND('FAC:CodigoClientes') 
 unBIND('Glo:CodigoCliente') 
 unBIND('FAC:FechaFactura') 
 unBIND('Glo:FechaInicial') 
 UNBIND('Glo:FechaFinal')
Nota importante:
Recordándoles que los campos con Bind son aquellos que participan en el filtro, tanto los de la Tabla como los campos de memorias. Ya termine mi primera vista y este es mi resultado, así como se vez en la imagen.
Ahora vamos a probar nuestra vista si usted siguió todos los pasos esto tuvo que haberles
quedado súper bien, Si queremos consultar a un determinado cliente por un rango de fecha X, sería algo así, como se ve el la imagen.
Imagen
El resultado sería algo así como se vez la imagen
Imagen

Imprimiendo el resultado de la Vista
Ahora le toca utilizar su inteligencia.

Conclusión
En nuestro próximo post o tema hablaré sobre la consulta o vistas, que queremos saber
de un determinado producto, las vistas serian:

A) Vista por productos
Aquí se muestra todos los movimiento de salida de un determinado producto

B) Vista productos por fecha
Aquí se muestran todo el movimiento de salida de un determinado producto por un rango de fecha.
C) Vista productos por Cliente

Aquí se muestran todo el movimiento de salida de un determinado producto por un terminado cliente.

D) Vista productos Cliente por fecha
Aquí se muestran todo el movimiento de salida de un determinado producto por un terminado cliente ahora por un rango de fecha.

Esperando que este tema sea de buen provecho a su aprendizaje, recuerdo que esto se hace cumpliendo un pasaje bíblico que dice:” Dad de gracia, lo que de gracia recibe”. y por el amor que Cristo pone en nuestro corazón con el fin de ayudar aquellos colegas nuevos que quieren aprender
Clarion y que solo necesitan que alguien le tienda una mano.

Reciban muchas bendiciones

Continuará la parte C
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


HDMadeira
Al nivel de RZ
Mensajes: 306
Registrado: Dom Feb 06, 2011 10:02 pm
Ubicación: Trelew, Chubut, Argentina
Contactar:

Re: Edit in place, Creando Vistas en tablas tps (Parte VII-B

Mensaje por HDMadeira » Dom Ene 22, 2012 2:20 am

Hola Ramon, te felicito y agradezco el tiempo dedicas a
compartir tus conocimientos con tus colegas.

Saludos

Daniel Madeira
Trelew, Chubut,Argentina

Responder

¿Quién está conectado?

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