Refrescar Listbox automáticamente - Cómo hacerlo?

Código útil, tips de programación, etc.
Responder
cesarm
Mensajes: 7
Registrado: Sab Oct 22, 2016 4:09 pm
Contactar:

Refrescar Listbox automáticamente - Cómo hacerlo?

Mensaje por cesarm » Mar Ene 08, 2019 9:41 pm

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.
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.


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

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

Mensaje por HDMadeira » Mié Ene 09, 2019 12:07 am

si cambio el contenido de la variable del filtro, en el embebido acepted de la variable

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

cesarm
Mensajes: 7
Registrado: Sab Oct 22, 2016 4:09 pm
Contactar:

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

Mensaje por cesarm » Jue Ene 10, 2019 7:13 pm

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
**********

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

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

Mensaje por HDMadeira » Vie Ene 11, 2019 1:53 am

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 ?

cesarm
Mensajes: 7
Registrado: Sab Oct 22, 2016 4:09 pm
Contactar:

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

Mensaje por cesarm » Sab Ene 12, 2019 6:23 pm

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.

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

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

Mensaje por HDMadeira » Sab Ene 12, 2019 8:43 pm

tenes Skype ?

cesarm
Mensajes: 7
Registrado: Sab Oct 22, 2016 4:09 pm
Contactar:

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

Mensaje por cesarm » Sab Ene 12, 2019 8:50 pm

cesar_miranda

cesarm
Mensajes: 7
Registrado: Sab Oct 22, 2016 4:09 pm
Contactar:

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

Mensaje por cesarm » Vie Feb 01, 2019 3:25 pm

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


Responder

¿Quién está conectado?

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