Vista en tabla tps con Clarion, Cargando los datos Tema II
Publicado: Sab Ago 09, 2014 2:23 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).Continuando con mi aporte, en el post anterior estaba hablando sobre el tema las Vistas en ls tablas con tps con Clarion Vs su Importancia en el Tema I, estuve explicando las distintas formas de cómo definir una vista en una tabla CLARION usando tps, y cree varios ejemplos. Hoy le voy a enseñar como cargar los datos en una vista, pero antes quiero recordarles que una vista no es más que una consulta hecha a una tabla, donde se espera resultados veraces y eficientes, nuestro objetivo es que en dicha consulta se haga en el menor tiempo posible.
Retomando el tema anteriormente dije que hay varias formas para definir una vista y que solamente hay un sólo punto o embs, para hacer la declaración del código; Existen tres tipos de controles a utilizar a la hora de definir una vista que son crear una ventanita para poner las variables locales o globales que van a ser usadas en los filtros, Crear una Queue que no sirve contenedora de los resultados y luego crear una ventana y con list poner los campos de la Queue, y le recuerdo que dije también que en la ventana contenedora de los datos, es que van a estar definidos todos los códigos que serán utilizados en dicha definición.
¿COMO CARGAR LOS DATOS EN UNA VISTA
Después de haber diseñado nuestra ventana contenedora de datos( ver imagen en el post anterior) no vamos al embs init de la ventana en la opción o punto de Open file ahí colocamos el código asi como se observa la imagen.
https://www.dropbox.com/s/k9ckrm2akjfz1 ... adatos.jpg
Entonces colocamos el siguiente código así:
Como podemos observar aquí le estamos haciendo una consulta a la tabla factura, y le definimos un filtro por el IdCliente, con el objetivo de saber cuántas facturas se le ha hechos a un determinado clientes, además queremos saber en cuánto asciende el monto de la ventas. Voy a explicar con más detalle el código para que lo puedan entender mejor, lo primero que voy hacer es bindear los campos participantes en los filtros de la consulta en la definición de una vista, tanto en los campos de la tabla física, en este caso sería en la tabla factura, así como en los campos de las variables de memoria globales. La razón por la que hay que bindear los campos es para que la vista no pueda mostrar la información solicitadas; Le recomiendo que tenga muchos cuidado con esta parte, ya que un bind mal formulado será tema de muchos dolores de cabeza.
Continuando con el analisis del codigo hacemos un llamado al nombre de la vista asi:
Por últimos lo que hacemos es cerrar la vista y liberar los bind y ahora usamos el comando unbind
DEFINICIONES GLOBALES
Como ustedes han podido notar, he creado la Queue contenedora de los datos en la propiedad globales, así como los nombres de las variables que van a participar en los filtros de la vista, quiero decirles que esta práctica no es muy aconsejable al menos que usted sepa manejar muy bien este tema, recuerde que los datos en la propiedad globales van a permanecer acumulados mientras el sistemas esté arriba. Entonces a la hora de definir Queue y variables para filtros en la propiedades globales debemos saber liberar la memoria para evitar duplicidad en la información, usted se preguntará a donde es mejor definir la queue en la local o global.
Le voy a explicar el tema con más detalle para que tenga una percepción de la diferencia entre ambas, resulta que si definimos las variables localmente, hay que saber cuál va ser el objetivo de la salida, Si solamente es para ver el resultado en una pantalla o quizás luego lo quiere exportar a Excel o Word, le recomiendo que hagas sus definiciones localmente, la ventaja que tiene esta forma es que cuando usted cierre el procedimiento los datos de memoria local sea liberado automáticamente, ahora si usted va hacer consultas sucesivas le recomiendo que debe crear un botón para limpiar los datos de memoria local. La desventaja de esta forma, es que sí usted quiere rehusar o utilizar los campos y la Queue local en otros procedimientos lo va tener que volver a crear.
Cuando definimos la Queue y los campos de los filtros en variables globales, cuando me refiero a campos globales estos son los campos participantes en los filtros, no pueden estar definidos en la Queue sino independientemente fuera de ella, cual es la ventajas de esta forma, es que se pueden reutilizar en varios procedimientos los mismos campos y la Queue sin tenerlos que volverlo a crear.
La desventaja que tiene es que debemos tener en cuenta que mientras el sistema está arriba o sea corriendo, debemos saber cómo liberar o limpiar la memoria Global para evitar duplicidad en la información. En el post anterior hice un ejemplo de una definición vista
sin filtro así:
Esta vista va a mostrar todos los datos de la tabla clientes, el código para cargar los datos sería así.
OTRAS MANERA DE DEFINIR UNA VISTA
Ahora voy a crear tres procedimientos distintos, pero que hagan los mismos, estos servirán para determinar cuántas veces un determinado artículo se ha vendido en todos el sistemas, el objetivo es como enseñarle hacer estos tres métodos.
1) Cantidad Vendidas de un articulo A
Para esto creamos una ventanita o una Windows y colocamos el campo IdArticulos y le creamos dos botones uno llamado procesar y otro limpiar. Así como se muestra en la Imagen.
https://www.dropbox.com/s/j0zn8hb9qdve2 ... A.png?dl=0.
Este procedimiento va a tener una gran diferencias con los dos siguientes que voy a desarrollar, ya que en este no va a tener una definición de vista, sino que voy a crear lo que hacemos normalmente en clarion usando un loop para barrer la tabla, lo primero que hago es definir una ventanita inicializadora, en la misma ventana del procedimiento, el código va en el embido local data, luego en otra declaración así:
Ahora en el open Window de la ventanta coloco este codigo
El objetivo es cuando la ventana suba el botón Procesar suba desactivado, con el fin que cuando el usuario introduzca el IdArticulo del artículo a consultar nos muestre el nombre del mismo y active el botón procesar, ahora dentro del campo IdArticulo en aceptar coloco este código así:
Debemos crear dos campos locales de memoria uno sería Loc:Cantidad aquí es donde se cargará el valor buscado y el otro descripción aquí se cargará el nombre del articulo consultado, en el botó Procesar coloco los siguientes códigos:
Luego en el mismo botón procesar en el aceptar coloco próximo codigo así:
El próximo botón es el llamado limpiar, su función es limpiar todas las variables de memoria incluyendo los campos en todo el procedimiento, el código es el siguiente así:
Ahora solo nos falta mostrarle cómo va la estructura de las tablas en el esquemático, recuerde que estamos trabajando en una Window y la tabla van coloca como otra tabla así como se muestra en la imagen.
https://www.dropbox.com/s/tizsygrkj7cub ... A.png?dl=0
Con esto termino este procedimiento por favor siga cada pasos para que le dé buenos resultados.
2) Cantidad Vendidas de un articulo B
Para este procedimiento hago lo mismo que hice en anterior creo una ventanita o una window y colocamos los campo IdArticulos, descripción y cantidad y le creamos dos botones uno llamado procesar y otro limpiar. Así como se muestra en la Imagen.
https://www.dropbox.com/s/9lnz2v69eeem0 ... B.png?dl=0.
En este procedimiento va a tener una diferencia con el anterior porque aquí sí defino una estructura de vista, mi objetivo es enseñarle dos procedimientos que hacen los mismos, pero con diferentes técnicas en su implementación. Definiendo la estructura de la vista, para eso no vamos a local data luego en otra declaración así:
https://www.dropbox.com/s/ji067u8s7b21x ... 7.png?dl=0
Ahora aquí defino mi código de la vista así:
Esto que usted vez así, es el nombre de la vista CalculaVventa, este es el filtro que voy aplicar así DET:CodigoProducto=Glo:IdArticulo y este es el campo que quiere salga ordenada Order('DET:NroFactura').
Ahora hacemos los mismo que en el anterior en la open Windows colocamos este código para desactivar el botón procesar
Recuerde que en el aceptar del campo global IdArticulo colocamos el siguiente código.
Recuerde que debemos crear dos campos locales de memoria uno sería Loc:Cantidad aquí es donde se cargará el valor buscado y el otro descripción aquí se cargará el nombre del articulo consultado, en el botó Procesar coloco los siguientes códigos:
En control Event Handling, Before generated code, en el aceptar coloco este codigo para validar el IdArticulo así:
Luego en el mismo botón procesar en el aceptar coloco el próximo código así:
El próximo botón es el llamado limpiar, su función consiste en limpiar todas las variables de memoria incluyendo los campos en todo el procedimiento, el código es el siguiente así:
Nota muy importante este mismos código debe colocarse en el botón cancelar y también en el evento de la Window event
CloseDown y en CloseWindow, esto es para limpiar la variables de memoria, cuando salimos dandoles click a la crucecita de la ventanita.
Con esto termino este procedimiento por favor siga cada pasos para que le dé buenos resultados.
3) Cantidad Compradas de un artículo C
Con este procedimiento cierro esta segunda parte sobre este tema de las vistas en tps con Clarion. Como dije anteriormente que iba a crear tres procedimientos diferentes pero que hacen los mismos, ahora voy a crear el tercero, que es igual al anterior, la diferencia está, en que antes buscamos la cantidad vendidas de un terminado artículo en sistema, ahora vamos a buscar la cantidad compradas de un terminado artículo en todo el sistema.
Para crear este procedimiento hacemos lo mismo que hice en el anterior creo mi ventanita o una window y colocamos los campo Id Artículos, descripción y cantidad y les creamos dos botones uno llamado procesar y otro limpiar. Así como se muestra en la Imagen.
https://www.dropbox.com/s/gcr2x7dqbxzvh ... s.png?dl=0
El Objetivo de esta parte es enseñarles cómo crear un procedimiento que sirva para calcular la cantidad compradas de un determinado artículo en el inventario. ¿Que es una entrada? Es una compras de artículos o productos realizada a un suplidor o proveedor, sirve para alimentar el inventarios. Recuerde que le dije anteriormente que en un sistema de facturación hay dos movimientos principales que son: Salida del inventario, estas se realizan a traves de las ventas o facturas y la otra es Entrada al inventario, que son las compras de artículos a los suplidores o proveedores.
Ahora los primero que vamos hacer es definir en la ventanita nuestra estructura de Vista, para eso nos vamos a local Data, luego otra declaración, ahí colocamos el código de definición de Vista así, como se muestra en la imagen.
Ahora quiero explicarle con más detalle este Código para que pueda entender la estructura de la vista, si usted se fija en el código verá algo así. CalcularCompras es el nombre de la vista, ósea el que usted le va poner, puede usar el de su preferencia.
VIEW(DetalleEntrada) Este es el comando View seguido con el nombre de la tabla entre paréntesis por la cual usted va a definir la vista. filter('DETAE:Codigoproducto=Glo:IdArticulo') Este el comando Filter o filtro y los campos que están en los paréntesis son los campos que se van a emplear para hacer el filtros.
Order('DETAE:NumeroEntrada') y finalmente vemos el comando order o orden con un campos entres paréntesis, esto significa que nuestra vista va a estar ordenada por el número de Entrada en la tabla detalleEntrada.
Ahora hacemos los mismo que hicimos en el anterior en la open Windows colocamos este código para desactivar el botón procesar
Recuerde que en el aceptar del campo global IdArticulo colocamos el siguiente código.
Recuerde que debemos crear dos campos locales de memoria uno sería Loc:Cantidad aquí es donde se cargará el valor buscado y el otro descripción aquí se cargará el nombre del articulo consultado, en el botó Procesar coloco los siguientes códigos:
En control Event Handling, Before generated code, en el aceptar coloco este código para validar el IdArticulo así:
Luego en el mismo botón procesar en el aceptar coloco el próximo código así:
El próximo botón Se llama limpiar, su función consiste en limpiar todas las variables de memoria incluyendo los campos en todo el procedimiento, el código es el siguiente así:
Nota muy importante: este mismos código debe colocarse en el botón cancelar y también en el evento de la Window event
CloseDown y en CloseWindow, esto es para limpiar la variables de memoria, cuando salimos dandoles click a la crucecita de la ventanita.
Finalmente con esto termino esta serie de procedimientos, por favor siga cada pasos para que le dé buenos resultados.
Voy a dejar esta parte hasta aquí, para no alargar muchos este post, en nuestro próximo tema trataré:
Consultando los datos en el sistema.
Les recuerdo que en la parte III, le dejaré la aplicación Demo utilizada en el desarrollo de este tutorial sobre el tema de las vistas.
Espero que busquen el link y lo descargue, estará en la versión de Clarion 6.3 y en la 9.0
Reciban ricas y abundantes bendiciones
una vez más cumpliendo con el mandamiento de Cristo que dijo: "DAD POR GRACIA LO QUE POR GRACIA HAS RECIBIDO (Mateo 10:8).Continuando con mi aporte, en el post anterior estaba hablando sobre el tema las Vistas en ls tablas con tps con Clarion Vs su Importancia en el Tema I, estuve explicando las distintas formas de cómo definir una vista en una tabla CLARION usando tps, y cree varios ejemplos. Hoy le voy a enseñar como cargar los datos en una vista, pero antes quiero recordarles que una vista no es más que una consulta hecha a una tabla, donde se espera resultados veraces y eficientes, nuestro objetivo es que en dicha consulta se haga en el menor tiempo posible.
Retomando el tema anteriormente dije que hay varias formas para definir una vista y que solamente hay un sólo punto o embs, para hacer la declaración del código; Existen tres tipos de controles a utilizar a la hora de definir una vista que son crear una ventanita para poner las variables locales o globales que van a ser usadas en los filtros, Crear una Queue que no sirve contenedora de los resultados y luego crear una ventana y con list poner los campos de la Queue, y le recuerdo que dije también que en la ventana contenedora de los datos, es que van a estar definidos todos los códigos que serán utilizados en dicha definición.
¿COMO CARGAR LOS DATOS EN UNA VISTA
Después de haber diseñado nuestra ventana contenedora de datos( ver imagen en el post anterior) no vamos al embs init de la ventana en la opción o punto de Open file ahí colocamos el código asi como se observa la imagen.
https://www.dropbox.com/s/k9ckrm2akjfz1 ... adatos.jpg
Entonces colocamos el siguiente código así:
Código: Seleccionar todo
!Cargando Datos de Factura en la vista
!Bindeando los campo que participante en 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
Close(VistaFacturas) !Cerrando vista
UNBIND('FAC:CodigoClientes')
UNBIND('glo:Codigocliente')
Código: Seleccionar todo
así bindeando los campos que participante en los filtros
BIND('FAC:CodigoClientes',FAC:CodigoClientes) !Campo codigoCliente de la tabla factura
BIND('glo:Codigocliente',glo:Codigocliente)!Campo Codigocliente de la variable globales
Continuando con el analisis del codigo hacemos un llamado al nombre de la vista asi:
Código: Seleccionar todo
Open(VistaFacturas) !abriento la vista
Set(VistaFacturas) !llamando a la vista
Loop !Barriendo la vista
Next(VistaFacturas) !mostrando los datos
If Error() then break . ! haciendo rompimiento
!aqui pone el codigo con los campos a participar asi
bla bla,bla bla,bla bla,bla bla,bla bla
Add(MiQueue) Guardo los datos
End
Código: Seleccionar todo
Close(VistaFacturas) !Cerrando vista
UNBIND('FAC:CodigoClientes') !Liberando el bind del nombre de la tabla fisica
UNBIND('glo:Codigocliente')!Liberando el bind del nombre de la variable globales
DEFINICIONES GLOBALES
Como ustedes han podido notar, he creado la Queue contenedora de los datos en la propiedad globales, así como los nombres de las variables que van a participar en los filtros de la vista, quiero decirles que esta práctica no es muy aconsejable al menos que usted sepa manejar muy bien este tema, recuerde que los datos en la propiedad globales van a permanecer acumulados mientras el sistemas esté arriba. Entonces a la hora de definir Queue y variables para filtros en la propiedades globales debemos saber liberar la memoria para evitar duplicidad en la información, usted se preguntará a donde es mejor definir la queue en la local o global.
Le voy a explicar el tema con más detalle para que tenga una percepción de la diferencia entre ambas, resulta que si definimos las variables localmente, hay que saber cuál va ser el objetivo de la salida, Si solamente es para ver el resultado en una pantalla o quizás luego lo quiere exportar a Excel o Word, le recomiendo que hagas sus definiciones localmente, la ventaja que tiene esta forma es que cuando usted cierre el procedimiento los datos de memoria local sea liberado automáticamente, ahora si usted va hacer consultas sucesivas le recomiendo que debe crear un botón para limpiar los datos de memoria local. La desventaja de esta forma, es que sí usted quiere rehusar o utilizar los campos y la Queue local en otros procedimientos lo va tener que volver a crear.
Cuando definimos la Queue y los campos de los filtros en variables globales, cuando me refiero a campos globales estos son los campos participantes en los filtros, no pueden estar definidos en la Queue sino independientemente fuera de ella, cual es la ventajas de esta forma, es que se pueden reutilizar en varios procedimientos los mismos campos y la Queue sin tenerlos que volverlo a crear.
La desventaja que tiene es que debemos tener en cuenta que mientras el sistema está arriba o sea corriendo, debemos saber cómo liberar o limpiar la memoria Global para evitar duplicidad en la información. En el post anterior hice un ejemplo de una definición vista
sin filtro así:
Código: Seleccionar todo
VistaCliente VIEW(Clientes)
PROJECT(CLIentes:CodigoCliente)
PROJECT(CLIentes:Nombres)
PROJECT(CLIentes:Apellidos)
PROJECT(CLIentes:Direccion)
PROJECT(CLIentes:Sector)
PROJECT(CLIentes:Ciudad)
END
Esta vista va a mostrar todos los datos de la tabla clientes, el código para cargar los datos sería así.
Código: Seleccionar todo
!Cargar datos vista Clientes
Open(vistaClientes) !abro la vista
set(vistaClientes) !Hago el llamado
Loop !hago el barrido
Next(vistaClientes) !Mostrar los datos
if error() then break.
!Campos para cargar los datos
Qcli:IdCliente =CLIentes:CodigoCliente
Qcli:Nombres =clip(CLIentes:Nombres) &' '&Clip(CLIentes:Apellidos)
Qcli:Direccion =CLIentes:Direccion
Qcli:Sector =CLIentes:Sector
Qcli:Ciudad =CLIentes:Ciudad
Add(QClientes)
End
Close(vistaClientes) !Cerrando vista
OTRAS MANERA DE DEFINIR UNA VISTA
Ahora voy a crear tres procedimientos distintos, pero que hagan los mismos, estos servirán para determinar cuántas veces un determinado artículo se ha vendido en todos el sistemas, el objetivo es como enseñarle hacer estos tres métodos.
1) Cantidad Vendidas de un articulo A
Para esto creamos una ventanita o una Windows y colocamos el campo IdArticulos y le creamos dos botones uno llamado procesar y otro limpiar. Así como se muestra en la Imagen.
https://www.dropbox.com/s/j0zn8hb9qdve2 ... A.png?dl=0.
Este procedimiento va a tener una gran diferencias con los dos siguientes que voy a desarrollar, ya que en este no va a tener una definición de vista, sino que voy a crear lo que hacemos normalmente en clarion usando un loop para barrer la tabla, lo primero que hago es definir una ventanita inicializadora, en la misma ventana del procedimiento, el código va en el embido local data, luego en otra declaración así:
Código: Seleccionar todo
!Creacion de ventanita Inicializadora
VentanaEspera WINDOW('Procesando Registros'),AT(,,102,22),FONT('MS Sans Serif',8,,FONT:regular),CENTER, |
GRAY,DOUBLE
STRING(''),AT(31,3),USE(?LineaUno),FONT(,,,FONT:bold,CHARSET:ANSI)
STRING('Espere por favor '),AT(15,5),USE(?String3)
STRING(''),AT(31,13),USE(?LineaDos),FONT(,,,FONT:bold,CHARSET:ANSI)
END
Código: Seleccionar todo
!Dactivando Procedar
Disable(?Procesar)
Código: Seleccionar todo
!Este codigo sirve para buscar con el IdArticulo en la tabla de articulos, se coloca en el aceptar del campo de memoria
!en este caso Glo:IdArticulo es una global
!Buscando en la tabla Producto o articulos
CLEAR(Pro:Record) !Limpiando cola
PRO:Codigo=Glo:IdArticulo !Igualando campos
GET(Producto,PRO:PorCodigoProductoKey) !La busqueda por la tabla y la llave
IF ERRORcode()
message('Código Producto No Exite','Aviso') !mensaje de existencia
Select(?Glo:IdArticulo)
clear(Glo:IdArticulo) !limpiando la Variable Global
end
Descripcion=Pro:Descripcion !Cargando el nombre del articulo
Enable(?Procesar) !Habilito el boton procesar
!Display() !refresco
ThisWindow.reset(true) !Refrescando
Código: Seleccionar todo
!Este codigo va en el aceptar del control event Handling, beforegenerado pp 4000
If Glo:IdArticulo ='0000000' then
Message('Codigo de Producto es requerido','Aviso')
Select(Glo:IdArticulo)
End
Código: Seleccionar todo
!Este codigo realiza un barrido a la tabla detalle factura con el objetivo de calcular la cantidad vendida de un determinado articulos el mismo se coloca en el aceptar del boton calcular
SETCURSOR(Cursor:Wait) !Este comando para esperar
Open(VentanaEspera)!abriendo la ventana
ACCEPT
IF EVENT() = Event:OpenWindow
!Filtrando el detallefactura
Loc:Cantidad =0
!Buscando en Detallefactura
DET:CodigoProducto=Glo:IdArticulo
SET(DET:PorCodigoProducto,DET:PorCodigoProducto)!Utilizo set la llave por la llave
LOOP Until Access:detalleFactura.Next()
If DET:CodigoProducto<>Glo:IdArticulo then break. !aplico Fitro idenetico
!if DET:NroFactura<>FAC:NroFactura then cycle.
Loc:Cantidad+=DET:Cantidad !Sumando cantidad de la tabla detallefactura
Display(Loc:Cantidad)
End
POST(EVENT:CloseWindow) !Cerrando la ventana
End !Del Evento de la ventana
End !Del loop
Close(VentanaEspera)!Cerrando la Ventanas
SETCURSOR() !Cerrando la espera
Disable(?Procesar)!Desahabilitando el boton Procesar
Enable(?Limpiar)!Habilito el boton Limpiar
If Loc:Cantidad='0' Then !Validando la cantidad cuando el inventario sea cero
Message('No hay cantidad despachada De '& CLIP(Descripcion)&'','Aviso',ICON:Exclamation)!Despliegue de mensaje
End ! La validacion de la cantidad
ThisWindow.reset(true) !Refrescando
Código: Seleccionar todo
!Limpiando las variable de memoria y el Calculo realizado
Clear(Glo:IdArticulo)
Clear(Descripcion)
Clear(Loc:Cantidad)
Disable(?Limpiar)
Enable(?Procesar)!Hablito el boton procesar
ThisWindow.reset(true)
https://www.dropbox.com/s/tizsygrkj7cub ... A.png?dl=0
Con esto termino este procedimiento por favor siga cada pasos para que le dé buenos resultados.
2) Cantidad Vendidas de un articulo B
Para este procedimiento hago lo mismo que hice en anterior creo una ventanita o una window y colocamos los campo IdArticulos, descripción y cantidad y le creamos dos botones uno llamado procesar y otro limpiar. Así como se muestra en la Imagen.
https://www.dropbox.com/s/9lnz2v69eeem0 ... B.png?dl=0.
En este procedimiento va a tener una diferencia con el anterior porque aquí sí defino una estructura de vista, mi objetivo es enseñarle dos procedimientos que hacen los mismos, pero con diferentes técnicas en su implementación. Definiendo la estructura de la vista, para eso no vamos a local data luego en otra declaración así:
https://www.dropbox.com/s/ji067u8s7b21x ... 7.png?dl=0
Ahora aquí defino mi código de la vista así:
Código: Seleccionar todo
!Definiendo la vista de la tabla Detallefactura
CalculaVventa VIEW(DetalleFactura),filter('DET:CodigoProducto=Glo:IdArticulo'),Order('DET:NroFactura')!Nombre de la vista y filtro
PROJECT(DET:CodigoProducto)
PROJECT(DET:Cantidad)
PROJECT(DET:Envanse)
PROJECT(DET:Descripcion)
PROJECT(DET:PrecioUnitario)
PROJECT(DET:Importe)
PROJECT(DET:NroFactura)
JOIN(PRO:PorCodigoProductoKey,DET:CodigoProducto)
PROJECT(PRO:ExistenciaFinal)
PROJECT(PRO:Codigo)
END
END
Esto que usted vez así, es el nombre de la vista CalculaVventa, este es el filtro que voy aplicar así DET:CodigoProducto=Glo:IdArticulo y este es el campo que quiere salga ordenada Order('DET:NroFactura').
Ahora hacemos los mismo que en el anterior en la open Windows colocamos este código para desactivar el botón procesar
Código: Seleccionar todo
!Dactivando Procedar
Disable(?Procesar)
Código: Seleccionar todo
!Este codigo sirve para buscar el idArticulo se coloca en el aceptar del campo de memoria
!en este caso Glo:IdArticulo es una global y Buscamos en tabla Producto o articulos
CLEAR(Pro:Record) !Limpiando cola
PRO:Codigo=Glo:IdArticulo
GET(Producto,PRO:PorCodigoProductoKey) !La busqueda por la tabla y la llave
IF ERRORcode()
message('Código Producto No Exite','Aviso') !mensaje de existencia
Select(?Glo:IdArticulo)
clear(Glo:IdArticulo) !limpiando la Variable Global
end
Descripcion=Pro:Descripcion !Cargando el nombre del articulo
Enable(?Procesar) !Habilito el boton procesar
Display() !refresco
En control Event Handling, Before generated code, en el aceptar coloco este codigo para validar el IdArticulo así:
Código: Seleccionar todo
!Este codigo va en el aceptar del control event Handling, beforegenerado pp 4000
If Glo:IdArticulo ='0000000' then
Message('Codigo de Producto es requerido','Aviso')
Select(Glo:IdArticulo)
End
Código: Seleccionar todo
!Este codigo va el aceptar de de boton calcular !Sirve para hacer los calculos de las cantidades vendidas de un determinado articulos
!Bindeando los campo que participante en el los filtros
BIND('DET:CodigoProducto',DET:CodigoProducto)
BIND('Glo:IdArticulo',Glo:IdArticulo)
Open(CalculaVventa)!abriento la vista
Set(CalculaVventa) !Barriendo la vista
Loop
Next(CalculaVventa)
If DET:CodigoProducto<>Glo:IdArticulo then break.
Loc:Cantidad+=DET:Cantidad
end
UnBIND('DET:CodigoProducto')
UnBIND('Glo:IdArticulo')
Close(CalculaVventa)
Disable(?Procesar)
Enable(?Limpiar)
ThisWindow.reset(true)
Código: Seleccionar todo
!Limpiando Calculo
Clear(Glo:IdArticulo)
Clear(Descripcion)
Clear(Loc:Cantidad)
Disable(?Limpiar)
Enable(?Procesar)
Open(CalculaVventa)
ThisWindow.reset(true)
Nota muy importante este mismos código debe colocarse en el botón cancelar y también en el evento de la Window event
CloseDown y en CloseWindow, esto es para limpiar la variables de memoria, cuando salimos dandoles click a la crucecita de la ventanita.
Código: Seleccionar todo
!Limpiando Calculo
Clear(Glo:IdArticulo)
Clear(Descripcion)
Clear(Loc:Cantidad)
Disable(?Limpiar)
Enable(?Procesar)
Open(CalculaVventa)
ThisWindow.reset(true)
Con esto termino este procedimiento por favor siga cada pasos para que le dé buenos resultados.
3) Cantidad Compradas de un artículo C
Con este procedimiento cierro esta segunda parte sobre este tema de las vistas en tps con Clarion. Como dije anteriormente que iba a crear tres procedimientos diferentes pero que hacen los mismos, ahora voy a crear el tercero, que es igual al anterior, la diferencia está, en que antes buscamos la cantidad vendidas de un terminado artículo en sistema, ahora vamos a buscar la cantidad compradas de un terminado artículo en todo el sistema.
Para crear este procedimiento hacemos lo mismo que hice en el anterior creo mi ventanita o una window y colocamos los campo Id Artículos, descripción y cantidad y les creamos dos botones uno llamado procesar y otro limpiar. Así como se muestra en la Imagen.
https://www.dropbox.com/s/gcr2x7dqbxzvh ... s.png?dl=0
El Objetivo de esta parte es enseñarles cómo crear un procedimiento que sirva para calcular la cantidad compradas de un determinado artículo en el inventario. ¿Que es una entrada? Es una compras de artículos o productos realizada a un suplidor o proveedor, sirve para alimentar el inventarios. Recuerde que le dije anteriormente que en un sistema de facturación hay dos movimientos principales que son: Salida del inventario, estas se realizan a traves de las ventas o facturas y la otra es Entrada al inventario, que son las compras de artículos a los suplidores o proveedores.
Ahora los primero que vamos hacer es definir en la ventanita nuestra estructura de Vista, para eso nos vamos a local Data, luego otra declaración, ahí colocamos el código de definición de Vista así, como se muestra en la imagen.
Código: Seleccionar todo
¡Definiendo la vista de la tabla DetalleEntrada
CalcularCompras VIEW(DetalleEntrada),filter('DETAE:Codigoproducto=Glo:IdArticulo')
,Order('DETAE:NumeroEntrada')
PROJECT(DETAE:Codigoproducto)
PROJECT(DETAE:Cantidad)
PROJECT(DETAE:Envanse)
PROJECT(DETAE:Descripcion)
PROJECT(DETAE:PrecioUnitario)
PROJECT(DETAE:Importe)
PROJECT(DETAE:NumeroEntrada)
JOIN(PRO:PorCodigoProductoKey,DETAE:Codigoproducto)
PROJECT(PRO:ExistenciaFinal)
PROJECT(PRO:Codigo)
END
END
VIEW(DetalleEntrada) Este es el comando View seguido con el nombre de la tabla entre paréntesis por la cual usted va a definir la vista. filter('DETAE:Codigoproducto=Glo:IdArticulo') Este el comando Filter o filtro y los campos que están en los paréntesis son los campos que se van a emplear para hacer el filtros.
Order('DETAE:NumeroEntrada') y finalmente vemos el comando order o orden con un campos entres paréntesis, esto significa que nuestra vista va a estar ordenada por el número de Entrada en la tabla detalleEntrada.
Ahora hacemos los mismo que hicimos en el anterior en la open Windows colocamos este código para desactivar el botón procesar
Código: Seleccionar todo
!Dactivando Procedar
Disable(?Procesar)
Código: Seleccionar todo
!Este codigo sirve para buscar el idArticulo se coloca en el aceptar del campo de memoria
!en este caso Glo:IdArticulo es una global y Buscamos en tabla Producto o articulos
CLEAR(Pro:Record) !Limpiando cola
PRO:Codigo=Glo:IdArticulo
GET(Producto,PRO:PorCodigoProductoKey) !La busqueda por la tabla y la llave
IF ERRORcode()
message('Código Producto No Exite','Aviso') !mensaje de existencia
Select(?Glo:IdArticulo)
clear(Glo:IdArticulo) !limpiando la Variable Global
end
Descripcion=Pro:Descripcion !Cargando el nombre del articulo
Enable(?Procesar) !Habilito el boton procesar
Display() !refresco
En control Event Handling, Before generated code, en el aceptar coloco este código para validar el IdArticulo así:
Código: Seleccionar todo
!Este codigo va en el aceptar del control event Handling, beforegenerado pp 4000
If Glo:IdArticulo ='0000000' then
Message('Codigo de Producto es requerido','Aviso')
Select(Glo:IdArticulo)
End
Código: Seleccionar todo
!Calcular Compras, este codigo se coloca en el aceptar de de boton calcular !Sirve para calcular la cantidad compradas de un determinados
!..............................................................................
!Bindeando los campo que participante en el los filtros
BIND('DETAE:Codigoproducto',DETAE:Codigoproducto)! Bindeando los campos la de la vista
BIND('Glo:IdArticulo',Glo:IdArticulo)
Open(CalcularCompras)!abriento la vista
Set(CalcularCompras) !Barriendo la vista
Loop !loop para el barrido de la vista definida
Next(CalcularCompras) !Nombre de la vista definida
If DETAE:Codigoproducto<>Glo:IdArticulo then break. !Aplicando filtro
Loc:Cantidad+=DETAE:Cantidad
end
UnBIND('DETAE:Codigoproducto')
UnBIND('Glo:IdArticulo')
Close(Calcularcompras)
Disable(?Procesar)
Enable(?Limpiar)
ThisWindow.reset(true)
Código: Seleccionar todo
!Limpiando Calculo
Clear(Glo:IdArticulo)
Clear(Descripcion)
Clear(Loc:Cantidad)
Disable(?Limpiar)
Enable(?Procesar)
Open(CalculaVventa)
ThisWindow.reset(true)
Nota muy importante: este mismos código debe colocarse en el botón cancelar y también en el evento de la Window event
CloseDown y en CloseWindow, esto es para limpiar la variables de memoria, cuando salimos dandoles click a la crucecita de la ventanita.
Código: Seleccionar todo
!Limpiando Calculo
Clear(Glo:IdArticulo)
Clear(Descripcion)
Clear(Loc:Cantidad)
Disable(?Limpiar)
Enable(?Procesar)
Open(CalculaVventa)
ThisWindow.reset(true)
Finalmente con esto termino esta serie de procedimientos, por favor siga cada pasos para que le dé buenos resultados.
Voy a dejar esta parte hasta aquí, para no alargar muchos este post, en nuestro próximo tema trataré:
Consultando los datos en el sistema.
Les recuerdo que en la parte III, le dejaré la aplicación Demo utilizada en el desarrollo de este tutorial sobre el tema de las vistas.
Espero que busquen el link y lo descargue, estará en la versión de Clarion 6.3 y en la 9.0
Reciban ricas y abundantes bendiciones