Vista en tabla tps con Clarion Vs su Importancia Tema I

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 con Clarion Vs su Importancia Tema I

Mensaje por R.Pacheco » Jue Ago 07, 2014 3:09 pm

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).

Introducción
Vista en tabla Tps VS Su importancia
El siguiente aporte que le traigo esta vez, trata sobre un tema que hace mucho tiempo quería hablar sobre él y compartir mi testimonio y experiencia de lo que me pasó, resulta que diseñe e instalé un sistemas en una institución estatal de mi país, a poco tiempo ya me estaban llamando y se quejaban de la lentitud del mismo en ciertas consultas y cuando ejecutaban ciertos procesos en el sistema, el mismo estaba instalado bajo un grupo de trabajo con una 5 estaciones y en tps, muchas de la consultas tenían algún filtros y utilizaban process, por reconmedaciones de algunos colegas logre quitar algunos process y lo cambié por loop utilizando código, pero los resultado no fueron muy notorio , siguieron las quejas de los usuarios de que el sistema duraba muchos para procesar una consulta.
A La luz de la verdad resulta que antes del años ya el sistema tenía en una de su tabla quizas la de mayor movimiento un millón 300 mil registros, tanto en su encabezado como en su detalle donde había mayor carga. Para no cansarlo con este testimonio, mi tiempo es muy limitado y no me gusta que mi cliente me estén fatidiando con tantas llamada, cada dias las quejas lluvian, esto no me gusta por que deja ver una mala imagen como profesional y como programador.
Entonces tuve que enfrentar el problema con mira a buscarles una rápida y definitiva solucón, es cuando empecé y me metí en todos los foros de clarión le pregunté a cuantos clarioneros pude contactar pidiendo idea o ayuda, alguien me mencionó el tema de la vista en la tabla con tps, tuve como resultado que nadie la usa ni tampoco la sabían implementar, en verda tuve que fájame bien fajado hasta que encotre ayuda en el foro de clarión en ingles y me pasaron un Demo desde ese dia mi vida cambio por que pude resolver mi gran dolor de cabeza. Esta es mi experiencia vivida, es lo que me motiva a escribir este artículo y a contarle mi testimonio y ayudar con este aporte a la comunidad clarionera, para asi evitar que otros pasen por este momentos amargos, que yo pase, con esto quiero dar un poco de luz en medio de la oscuridad.
A veces nos resulta difícil y muy tedioso manejar grandes volúmenes de datos o de información en nuestro sistema utilizando tablas con tps, más cuando tenemos que generar grande procesos y hacer grande consultas, en cuyo procedimiento tenemos implementados filtros quizás mal formulado en los Browses de nuestra aplicación, además la utilización de los process para realizar grandes procesos dentro de nuestra aplicación, También la implementación loop hecho con códigos en nuestra consulta aplicando filtros, logrando con esto que los procesos sea más lento.

Para facilitar el manejo de grande volumnes de datos usando tps para esto estan la Vista, en una misma vista se puede definir múltiples tablas y tener resultado más rápido y eficaces.

¿Qué es una Vista?
Podemos definir una vista como una estructura lógica que puede incorporar campos de diferentes tablas (aún cuando no estén relacionadas en el diccionario).
En pocas palabras es como crear una solo tabla gigante que va a contener todos los campos de las tablas que intervienen en nuestra aplicación, una vista es una consulta accesible como una tabla virtual en una base de datos relacional.
Las vistas tienen la misma estructura que una tabla por que poseen filas y columnas. La única diferencia es que sólo se almacena en ellas su definición, no los datos. Los datos que se recuperan en una vista mediante la utilización de tps tiene que ser con una Queue o utilizando otros medios externos tales como: Inmemory driver y la misma tabla tipo tps.

¿Qué ventajas podemos tener en el uso de una vista?
Entre las más importantes tenemos:
-La velocidad en el procesamiento de la información
-rapidez y precisión en la búsqueda de los datos
-No pone al sistema lento
- Podemos aplicarles 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 de menos tiempo de programación que usar tablas.
En general son estructuras muy rápidas. (Y aún más si se aplican sobre un sistema cliente - servidor).
Elementos a utilizar al crear una vista
Entre los elementos o controles que podemos utilizar al crear una vista están:
1- Ventana contenedora de las variables globales o locales para los filtros, es opcional.
2- Creación de una Queue, para cargar los datos requeridos
3- Creación de una ventana, para carga las columnas de la Queue , en la misma hacemos la definición de la vista.

Definición de una vista
Hay varias forma para definir una vista y solo hay un punto o embs para hacer la declaración del código, Pero antes voy mostrarles los controles que podemos utilizar a la hora de definir una vista.
Lo primero que hacemos es crear una ventanita para poner las variables locales o globales que van a ser usada en los filtros, luego mas adelante le voy a enseñar otra tecnica para obviar paso.
Ejemplo si queremos hacer una consulta a la tabla factura para saber cuantas facturas se le ha hecho un determinado dliente, lo más correcto es que sea por el IdCliente, así como se muestra en siguiente imagen,
ver la imagen dele clic https://www.dropbox.com/s/il8jnvzjhrljd ... s.png?dl=0

Ahora si queremos además del IdCliente crear una consulta por un rango de fecha, solo le agregamos las variables para el filtro de fecha, así como se muestra en la imagen para ver la imagen dele clic https://www.dropbox.com/s/pjpteun4k7xxp ... a.png?dl=0

Ya tenemos definida la ventana que contienen las variables, en este caso son de tipo globales para aplicar los filtros, más adelante explico el uso de estas variables para los filtros.

Crear una Queue contenedora de los datos
Cuando hacemos una consulta a una tabla de la base de datos , esperamos que nos devuelva un paquete de datos o un resultado confiable, en el tema de la vista en tabla con tps yo me voy a concentrar en el único elemento que tengo y el más económico que poseo en mi mano en este momento, y es crear una Queue, para que me sirva como contenedora de mis resultado o de los datos solicitado. Pero antes quiero decirles que a parte de la Queue hay otra forma para que nos sirven de contenedores de datos como son el Inmemory Driver, que es un driver igual que el de Tps , la única diferencia que yo le veo entre una Queue y él es que a la tabla con Inmemory se le pueden hacer llaves, mientras que a la Queue no se le pueden hacer llaves.

Existe otra forma para ser utilizada como contenedora de datos y es la misma tabla de clarión con tps, algunos programadores crean una tabla temporales tipo tps y cuando sale del procedimiento borran los datos.
En este estudio solo voy a concentrar al tema de la Queue como elemento contenedor de los datos solicitado. Ahora voy a proceder a crear una Queue así como se observa en la imagen. https://www.dropbox.com/s/z2lv0asn9uumn ... nedora.jpg

Creació de la ventana contenedora de los datos
En La ventana contenedora es donde vamos a definir todas los códigos dela vista y la tabla que va a participar en la misma. La ventana contenedora de los datos debe queda así como se muestra en la imagen.
https://www.dropbox.com/s/wedgydd8brhgy ... a.jpg?dl=0

Colocar los código de lugar en la vista
Ahora cuando ya tenemos definidos todos los elementos que van a intervenir en la vista
procedemos al proceso de definición de los códigos para definir la vista, para eso no vamos al embs de la ventana y no posicionamos en el punto local data y en otra declaración, ahí ponemos el código con que definiremos la vista, así como se muestra en la imagen
https://www.dropbox.com/s/lmmp0gwe8b082 ... 7.png?dl=0

Definición de una Vista
A la hora definir una vista podemos utilizar varios códigos , Si solo deseamos que nos muestre el contenido de una tabla
sin ningún filtro, entonces hacemos una defición así:

Código: Seleccionar todo

 
VistaClientes      VIEW(Clientes)! Pode ver  vistaClientes es el nobrede la vista, luego el nombre de la tabla y por utimos el nombres de campos participantes  
                       Project(CLIentes:CodigoCliente ,  CLIentes:Nombres  , CLIentes:Direccion , CLIentes:Sector , CLIentes:Ciudad)  
                    End
Una vista consta de un Nombre, luego le precede la palabra View entre parentesis va el nombre de la tabla y por último van los campos de la tabla.
Ejemplo 1:

Código: Seleccionar todo

 Nombrevista    View(Mitabla)
                    Project( MiCampo1 ,     MiCampo2 ,     MiCampo2 ,     MiCampo2 ,    Ncampo)
                    End 
Ahora voy a definir otro ejemplo con otra forma y más completo

Código: Seleccionar todo

Ejemplo 2:
!Definición de una vista de la tabla factura relacionada  con la tabla cliente Sin filtro.
VistaFacturas View(Factura)
                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 
Ahora le voy a crear otro ejemplo poniendole filtro en la definición de la vista

Código: Seleccionar todo

Ejemplo 3
!Definición de una vista de la tabla factura relacionada  con la tabla cliente y con un filtro por el Codigo del 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)
               JOIN(CLIentes:PorCodigoClienteKey,FAC:CodigoClientes)
                PROJECT(CLIentes:CodigoCliente)
              END !Fina de la vista
            END  ! Por el Join
Como crear relaciones de tablas en la definición de una vista o hacer uniones de tablas en la vista
Cuando tenemos una tabla relacionada o queremos hacer una unión solo debemos poner el comando join así;
JOIN(CLIentes:PorCodigoClienteKey,FAC:CodigoClientes) seguido del nombre de la llave de la tabla segundaria con la llave de la tabla primaria. Luego les agregamos los campo de la tabla secundaria, un punto en tomar en cuenta, y es que por cada join que agregue en la definición de una vista termina con un end al final de la definición, cada definción de una vista termina con un and y si agrega tres join serían tres and.

Ahora le quiero enseñar un truco, para crear una definicion de una vista de una forma rápida muy facil,
suponiendo que usted tiene una tabla de articulos o de productos como sea y quiere crearle una vista, entonces vaya
al browse de articulos encima del procedimiento, dele boton derecho y embido, cuando este en el arbol del procedimiento selecione filled para ver el codigo del procedimiento de articulos y selecciones esta porción de código asi:

Código: Seleccionar todo

! Browse View & Queue for Producto
BRW1::View:Browse    VIEW(Producto)
                       PROJECT(PRO:Codigo)
                       PROJECT(PRO:Envanse)
                       PROJECT(PRO:Descripcion)
                       PROJECT(PRO:PrecioUnitario)
                       PROJECT(PRO:ExistenciaIncial)
                       PROJECT(PRO:ExistenciaFinal)
                       PROJECT(PRO:Reorden)
                     END
Entonces limpie el código cambiando el nombre a la vista para que le quede asi:

Código: Seleccionar todo

 MiVistaArticulos  VIEW(Producto)
                       PROJECT(PRO:Codigo)
                       PROJECT(PRO:Envanse)
                       PROJECT(PRO:Descripcion)
                       PROJECT(PRO:PrecioUnitario)
                       PROJECT(PRO:ExistenciaIncial)
                       PROJECT(PRO:ExistenciaFinal)
                       PROJECT(PRO:Reorden)
                     END
En esta definición de esta vista no hay filtro aplidado, ahora voy a crear otro ejemplo y le voy a definir un filtro por el idArticulo y le debe quedar asi:

Código: Seleccionar todo

MiVistaArticulos  VIEW(Producto),filter(PRO:Codigo=Loc:IdArticulo'),Order('(PRO:Codigo') !esta  ordenada por Codigo
                       PROJECT(PRO:Codigo)
                       PROJECT(PRO:Envanse)
                       PROJECT(PRO:Descripcion)
                       PROJECT(PRO:PrecioUnitario)
                       PROJECT(PRO:ExistenciaIncial)
                       PROJECT(PRO:ExistenciaFinal)
                       PROJECT(PRO:Reorden)
                     END
Ahora quiero hacer otro ejemplo con otra definición de vista con multiples filtros, suponiendo queremos hacer una consulta a la tabla factura que nos traiga todas las facturas que se le ha hecho a un determinado cliente esto será por el IdCliente, y que dicha consulta sea por un rango de fecha, que empiece en una fecha y termine en otra fecha.
Le digo, en una vista puede haber cuanto filtros usted desee. Este es el código que le coloco a la vista para ponerle filtros debe ser asi:

Código: Seleccionar todo

, filter('Micampo1 = MiVariable1 and Micampo2 =MiVariable1 and Micampo3 =MiVariable2'),Order('(PRO:Codigo') ! Filtro
La consluta a la taba factura con multiples filtros será 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 and FAC:FechaFactura= Glo:Defecha and FAC:FechaFactura = Glo:Hastafecha'),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
Voy a dejar esta parte hasta aqui, para no alargar muchos este post, en nuestro próximo tema trateré:
¿Como cargar los datos en una visita'

Les recuerdo que en la parte III, le dejaré la aplicacion Demo utilizada en este tema sobre las vistas.
espero que busquen el link y lo descargue, estara en la version de Clarion 6.3 y en la 9.0

Reciban ricas y abundantes bendiciones
Última edición por R.Pacheco el Lun Jun 29, 2015 3:51 am, editado 5 veces en total.
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


Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Re: Vista en tabla con Clarion en tps Vs Su impotancia Tema

Mensaje por Mauricio » Sab Ago 09, 2014 8:35 am

Gracias por el aporte, Ramón.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog

R.Pacheco
Al nivel de RZ
Mensajes: 367
Registrado: Lun Feb 07, 2011 4:45 pm
Ubicación: Santo Domingo,Rep.Dominicana
Contactar:

Re: Vista en tabla tps con Clarion Vs su Importancia Tema I

Mensaje por R.Pacheco » Sab Ago 09, 2014 9:24 pm

Hola
Mauricio
De nada mi hermano, aqui trayendo un poco de conocimiento, para darle
más vida nuestro foro.
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

esgueto69
Mensajes: 5
Registrado: Vie Sep 26, 2014 6:15 pm
Contactar:

Re: Vista en tabla tps con Clarion Vs su Importancia Tema I

Mensaje por esgueto69 » Sab Nov 08, 2014 1:30 am

R.Pacheco escribió:Hola
Mauricio
De nada mi hermano, aqui trayendo un poco de conocimiento, para darle
más vida nuestro foro.

Muy buen aporte, sobre todo para mantener la portabilidad de un sistema utilizando tps

En atención a lo siguiente:

"Lo primero que hacemos es crear una ventanita para poner las variables locales o globales que van a ser usada en los filtros, luego mas adelante le voy a enseñar otra tecnica para obviar paso."

Me gustaría ver la técnica para obviar el paso anterior descrito.

Saludos

Tomás Espinoza G.

R.Pacheco
Al nivel de RZ
Mensajes: 367
Registrado: Lun Feb 07, 2011 4:45 pm
Ubicación: Santo Domingo,Rep.Dominicana
Contactar:

Re: Vista en tabla tps con Clarion Vs su Importancia Tema I

Mensaje por R.Pacheco » Dom Nov 09, 2014 1:31 am

Hola
Tomás Espinoza
Dios te bendiga de manera especial

Por razones de muchos trabajo no he podido terminar este tema
te prometo que antes que termines el años estaré terminandolo y subiré los ejemplos
del tema de las vistas con Tps al foro.

Recibe muchas 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

esgueto69
Mensajes: 5
Registrado: Vie Sep 26, 2014 6:15 pm
Contactar:

Re: Vista en tabla tps con Clarion Vs su Importancia Tema I

Mensaje por esgueto69 » Dom Nov 09, 2014 3:51 am

R.Pacheco escribió:Hola
Tomás Espinoza
Dios te bendiga de manera especial

Por razones de muchos trabajo no he podido terminar este tema
te prometo que antes que termines el años estaré terminandolo y subiré los ejemplos
del tema de las vistas con Tps al foro.

Recibe muchas bendiciones
Muchas Gracias Hermano, estaré al pendiente de tu publicación.

Saludos e igualmente muchas bendiciones para ti y tu familia...


Responder

¿Quién está conectado?

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