Página 1 de 1

Refrescar Listbox automáticamente - Cómo hacerlo?

Publicado: Mar Ene 08, 2019 9:41 pm
por cesarm
Buenas tardes,

He heredado una aplicación de Clarion 6.3 y necesito hacer el siguiente cambio:

Funcionalidad Actual:
1. Al iniciar la aplicación, se presenta una ventana con la lista de clientes. Adicionalmente se muestran varios campos a completar por el usuario
2. Hay un campo "Nombre de Cliente" (Filtro) que una vez completado, refresca la lista y filtra los clientes que contienen el valor de la variable Filtro.
3. Hay un campo de "Número de Pedido" que, una vez completado, verifica que el pedido es valido y también comprueba que el código de cliente es el mismo que el cliente seleccionado en el Listbox.

Funcionalidad Requerida:
Necesito que se pueda seleccionar el cliente en el Listbox a partir del código de cliente que se obtiene al leer un pedido válido. Es decir, independientemente de que el cliente se pueda seleccionar utilizando el campo "Nombre de Cliente", al momento de introducir un número de pedido, entonces se refresque la lista para mostrar el cliente que está asociado al pedido.

En el Listbox, utilizo la variable "Filtro" que es la misma que captura el valor del campo "Nombre de Cliente". Cuando leo el pedido de la tabla, asigno el valor del campo código de cliente a la variable "Filtro" y, tengo entendido que al cambiar el valor de la variable "Filtro", el Listbox debería refrescarse automáticamente pero esto no ocurre. El Listbox queda con la lista de clientes que ya ha sido seleccionada previamente.

Como puedo hacer para que en el momento en que cambio el valor de la variable Filtro, el Listbox se refresque automáticamente y muestro únicamente el cliente que está asociado al pedido.

Adjunto screenshots para mostrar lo que tengo.

Les agradezco su ayuda por adelantado.

Saludos,

Cesar Miranda.

Re: Refrescar Listbox automáticamente - Cómo hacerlo?

Publicado: Mié Ene 09, 2019 12:07 am
por HDMadeira
si cambio el contenido de la variable del filtro, en el embebido acepted de la variable

brw1.resetqueue(reset:queue)
display(?list)

Re: Refrescar Listbox automáticamente - Cómo hacerlo?

Publicado: Jue Ene 10, 2019 7:13 pm
por cesarm
Gracias por tu respuesta, HDMadeira.

He seguido tus indicaciones pero no consigo que refresque la lista con el cliente asociado a Filtro.
Código fuente:

**********
If nropedido>''
PED1:PE_NUM=CLIP(NROPEDIDO)
PED1:EMP_COD=CLIP(GLO:empresa)
! MESSAGE('CICLO 1 Pedido Nº ' & PED1:PE_NUM & ' Variable: ' & NROPEDIDO)
GET(PEDIDOSTPS,PED1:EmpPedKey)
IF ERROR()
nropedido=''
MESSAGE(' Pedido inexistente...Intente nuevamente...')
select(?nropedido)
cycle
end
if PED1:EMP_COD<>GLO:empresa
nropedido=''
MESSAGE('Pedido no pertenece a este cliente en la empresa activa...')
select(?nropedido)
cycle
end
Filtro = PED1:CL_CL_COD
MESSAGE('Codigo de Cliente:' & Filtro)
brw1.resetqueue(reset:queue)
! display(?list:2)
display(?list)
end
**********

Re: Refrescar Listbox automáticamente - Cómo hacerlo?

Publicado: Vie Ene 11, 2019 1:53 am
por HDMadeira
Bien entonces, ejecuta el MESSAGE('Codigo de Cliente:' & Filtro) ?
brw1 es la queue asociada el browse en cuestion ?
?list es el nombre del listbox ?
en el filter del browse dice algo asi como cli:codigo_cliente=filtro ?

Re: Refrescar Listbox automáticamente - Cómo hacerlo?

Publicado: Sab Ene 12, 2019 6:23 pm
por cesarm
Bien entonces, ejecuta el MESSAGE('Codigo de Cliente:' & Filtro) ?
R: Si el mensaje abre la ventana y muestra el Código de Cliente asociado al pedido que se ha introducido. Ese código de cliente se ha asignado a la variable "Filtro"

brw1 es la queue asociada el browse en cuestion ?
R: Si, BRW1 es el nombre del queue asociado al Browse del Listbox

?list es el nombre del listbox ?
R: El nombre del listbox es "?list:2". Hice la prueba cambiando "?List" por "?List2" y el resultado es el mismo.

en el filter del browse dice algo asi como cli:codigo_cliente=filtro ?
R: En el filter del browse coloqué "cli:codigo_cliente=filtro" para comprobar que el listbox podía filtrar. Si inicializo la variable Filtro con un código de cliente válido, el Listbox filtra correctamente la primera vez al abir la ventana. Pero posteriormente, al cambiar el valor de Filtro, no refresca la ventana. Lo he vuelto a colocar como estaba originalmente "CLI1:EMP_COD=glo:empresa", esto hace que la lista muestre sólamente los clientes de la empresa preseleccionada al iniciarse la aplicación.

Alguna idea?

Muchas gracias por tu ayuda.

Re: Refrescar Listbox automáticamente - Cómo hacerlo?

Publicado: Sab Ene 12, 2019 8:43 pm
por HDMadeira
tenes Skype ?

Re: Refrescar Listbox automáticamente - Cómo hacerlo?

Publicado: Sab Ene 12, 2019 8:50 pm
por cesarm
cesar_miranda

Re: Refrescar Listbox automáticamente - Cómo hacerlo?

Publicado: Vie Feb 01, 2019 3:25 pm
por cesarm
Muchísimas gracias por tu ayuda, HDMadeira!
Gracias a tu soporte remoto y conexión en línea he podido resolver este asunto, no solo de manera satisfactoria, sino con un alto nivel de calidad. Es muy positivo tener miembros en el foro con esa capacidad de ayuda y con elevados niveles de conocimiento sobre Clarion.
Quedo a tu disposición y a la del resto de los integrantes del foro en cualquier tema de Clarion en que pueda ser útil.

Por lo pronto, dejo aquí el código fuente final por si es de utilidad a cualquiera:

If nropedido<>''
Filtro=''
filtro_cliente=''
PED1:PE_NUM=CLIP(NROPEDIDO)
PED1:EMP_COD=CLIP(GLO:empresa)
GET(PEDIDOSTPS,PED1:EmpPedKey)
IF ERROR()
nropedido=''
MESSAGE(' Pedido inexistente...Intente nuevamente...')
select(?nropedido)
cycle
end
if PED1:EMP_COD<>GLO:empresa
nropedido=''
MESSAGE('Pedido no pertenece a este cliente en la empresa activa...')
select(?nropedido)
cycle
end
filtro_cliente = PED1:CL_CL_COD
free(queue:browse:1)
DISPLAY()
BRW1.ResetQueue(Reset:Queue)
DISPLAY()
select(?REFERENCIA)
else
if filtro_cliente<>''
filtro=''
filtro_cliente=''
free(queue:browse:1)
DISPLAY()
BRW1.ResetQueue(Reset:Queue)
DISPLAY()
end
end