www.clarioneros.com

El rincón de los desarrolladores
Fecha actual Mar Nov 21, 2017 9:59 am

Todos los horarios son UTC




Nuevo tema Responder al tema  [ 4 mensajes ] 
Autor Mensaje
NotaPublicado: Sab Ago 09, 2014 2:23 pm 
Desconectado

Registrado: Lun Feb 07, 2011 4:45 pm
Mensajes: 358
Ubicación: Santo Domingo,Rep.Dominicana
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í:
Código:
!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')

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.
Código:
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:
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

Por últimos lo que hacemos es cerrar la vista y liberar los bind y ahora usamos el comando unbind
Código:
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:
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:
!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/j0zn8hb9qdve20y/cantididadvendidadarticulosA.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:
!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

Ahora en el open Window de la ventanta coloco este codigo
Código:
!Dactivando Procedar
Disable(?Procesar)

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í:
Código:
!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

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:
Código:
!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

Luego en el mismo botón procesar en el aceptar coloco próximo codigo así:
Código:
!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

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í:
Código:
!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)

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/tizsygrkj7cubvr/EsquematicoA.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/9lnz2v69eeem06u/cantididadvendidadarticulosB.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/ji067u8s7b21x99/Captura%20de%20pantalla%202014-08-06%2010.15.07.png?dl=0
Ahora aquí defino mi código de la vista así:
Código:
!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:
!Dactivando Procedar
Disable(?Procesar)

Recuerde que en el aceptar del campo global IdArticulo colocamos el siguiente código.
Código:
!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

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í:
Código:
!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

Luego en el mismo botón procesar en el aceptar coloco el próximo código así:
Código:
!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)

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í:
Código:
!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:
!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/gcr2x7dqbxzvhs7/CandidadCompradasArticulos.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:
¡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

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
Código:
!Dactivando Procedar
Disable(?Procesar)

Recuerde que en el aceptar del campo global IdArticulo colocamos el siguiente código.
Código:
!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

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í:
Código:
!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

Luego en el mismo botón procesar en el aceptar coloco el próximo código así:
Código:
!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)

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í:
Código:
!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:
!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

_________________
Ing. R. Pacheco
Analista Programador
Pachecoramon@hotmail.com, Skype:pachecoramon
Santo Domingo, Rep. Dominicana
CRISTO DIJO: "Yo soy el camino, y la verdad,y la vida; nadie viene al Padre, sino por mí". S. Juan 14:6


Última edición por R.Pacheco el Lun Ene 26, 2015 4:18 am, editado 5 veces en total

Arriba
 Perfil Email  
 
NotaPublicado: Mar Dic 23, 2014 4:13 pm 
Desconectado

Registrado: Vie Sep 26, 2014 6:15 pm
Mensajes: 5
Buen día.

Hice todo al, pie de la letra en varios ejemplos y funciona muy bien. Pero al momento de correrlo en la red, a veces funciona muy bien y otras veces demasiado lento. Se me estará pasando algo?

Saludos

Tomás Espinoza


Arriba
 Perfil Email  
 
NotaPublicado: Mié Dic 24, 2014 1:15 pm 
Desconectado

Registrado: Lun Feb 07, 2011 4:45 pm
Mensajes: 358
Ubicación: Santo Domingo,Rep.Dominicana
Hola
Tomas
Dios te bendiga

En cuando a tu inquietud te puedo decir, debe tener en cuenta el tpos variables que esta usando sí usa una queue globales debe buscar la forma de limpiar los datos, ya que tu memoria se satura mientras el sistemas esté arriba, si usa una queue locales debe crear la forma de cerrar el procedimiento y que limpie todas las Queue
y las variables que este usando.

Cualquier cosar me avisa, no te quede con dudas.

Recibe ricas y abundantes bendiciones

_________________
Ing. R. Pacheco
Analista Programador
Pachecoramon@hotmail.com, Skype:pachecoramon
Santo Domingo, Rep. Dominicana
CRISTO DIJO: "Yo soy el camino, y la verdad,y la vida; nadie viene al Padre, sino por mí". S. Juan 14:6


Arriba
 Perfil Email  
 
NotaPublicado: Mié Ago 31, 2016 1:12 am 
Desconectado

Registrado: Vie Sep 26, 2014 6:15 pm
Mensajes: 5
R.Pacheco escribió:
Hola
Tomas
Dios te bendiga

En cuando a tu inquietud te puedo decir, debe tener en cuenta el tpos variables que esta usando sí usa una queue globales debe buscar la forma de limpiar los datos, ya que tu memoria se satura mientras el sistemas esté arriba, si usa una queue locales debe crear la forma de cerrar el procedimiento y que limpie todas las Queue
y las variables que este usando.

Cualquier cosar me avisa, no te quede con dudas.

Recibe ricas y abundantes bendiciones


Buen Día Ramón...

Volví a retomar el tema, e hice varias pruebas de nuevo y me funciona bien, siempre y cuando solo se esté trabajando en una terminal, pero cuando la consulta se hace en dos terminales accediendo al mismo procedimiento una de ellas se vuelve exageradamente lenta... Estoy hablando de una vista con 26.000 registros, siento que no es muy grande; La terminal la lee en unos 2 segundos, pero cuando otra terminal accede a la misma consulta esos dos segundos se convierten en poco mas de 2 minutos... No creo que esto sea normal.
Ojala y pueda contar con tu comentario Ramón... Espero tu respuesta...
Saludos...

Atentamente
Tomás Espinoza

Saludos Cordiales...


Arriba
 Perfil Email  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 4 mensajes ] 

Todos los horarios son UTC


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Saltar a:  
cron
Powered by phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com