Obtener Id de registro (rejilla) y luego modificar campo desde otro boton


([N1] leonardo daniel velazquez fuentes) #1

Hola a todos, pues tengo una rejilla en la cual debo seleccionar un registro, y tengo opcion de despacharlo (aun trabajo en eso), y la opcion de cancelar ese viaje, al hacer click sobre cancelar, se debe marcar el campo status_viaje con “C” de cancelado y refrescar la rejilla…

Tengo un evento para capturar el click simple de la rejilla y guardo el ID del viaje en una variable local “NO_VIAJE” pero siento que es lento el proceso o lo hice mal…

Interfaz: Procesar ( LISTA_VIAJES, Todas )
Modificar ficha seleccionada
Get campo ( ID, NO_VIAJE )
Libre

el segundo proceso es el boton cancelar… debe poner una “C” al registro seleccionado y lo hace, pero al hacer el refresco de la rejilla, la deja en blanco

If ( NO_VIAJE > 0 )
Interfaz: Procesar ( LISTA_VIAJES, Todas )
Modificar ficha seleccionada
Modificar campo ( STATUS_VIAJE, “C” )
Interfaz: Recalcular ( LISTA_VIAJES )
Libre


([N3] blavan) #2

Debes de utilizar cesta local

En lugar de recalcular, Interfaz procesar
cortar lista(0)
cesta agregar a la lista en curso

Muy rápido con cientos de miles de registros


([N1] leonardo daniel velazquez fuentes) #3

Hola amigo estoy muy verde aun en Velneo… me podrias ayudar a hacer este proceso para pasarlo a Cesta, la verdad no me sale, jaja

If ( NO_VIAJE > 0 )
Interfaz: Procesar ( LISTA_VIAJES, Todas )
Modificar ficha seleccionada
Modificar campo ( STATUS_VIAJE, “C” )
Interfaz: Recalcular ( LISTA_VIAJES )
Libre

[quote quote=42886]Debes de utilizar cesta local

En lugar de recalcular, Interfaz procesar
cortar lista(0)
cesta agregar a la lista en curso

Muy rápido con cientos de miles de registros

[/quote]

([N1] aztecmexico) #4

Buen día,

Dependiendo de lo que quieras hacer puedes o no utilizar una cesta, en este caso en concreto no es necesario (desde mi punto de vista)

Te recomiendo pruebes lo siguiente:

A). En la rejilla donde muestras los registros tendrás que hacer lo siguiente:
1. Crear un manejador de evento, ID_REG_SEL, con el siguiente código:
Interfaz: Procesar ( , Seleccionadas ) Seleccionar ficha por posición ( 1 ) Leer ficha seleccionada Set ( VL_ID_REG, #ID )
2. Crear 2 (dos) conexiones de eventos que ejecuten en ambos casos el manejador de evento creado anteriormente, uno con la señal Item: Simple click y otro con la señal Iten: Cambio de seleccionado.
¿Porqué dos conexiones de eventos?, pues no sé, se supone que con uno debería de funcionar, pero en mi experiendia al utilizar esos dos SIEMPRE garantizo capturar el registro de la rejilla, sobre todo cuando embebo la rejilla en otros formularios y desde allá deseo realizar operaciones, pero ese es otro tema.
3. MUY IMPORTANTE, en la rejilla crea la variable local de tipo numérico donde almacenaras el valor del ID del registro seleccionado.
4. Eso es todo en la rejillla, ahora, en el formulario donde embebes o insertas la rejilla lo primero es crear tambien una variable local (que se llame igual que en la rejilla) donde almacenarás el ID del registro seleccionado en la rejilla.
Para esto creas un nuevo manejador de evento en el formulario, yo lo llamo igual que en la rejilla, ID_REG_SEL, con el siguiente código:
Interfaz: Get variable local de vista de datos ( DIR_REJ, VL_ID_REG, VL_ID_REG )

Ahora creas una nueva conexión de evento en el formulario, que se active por Item: simple click, en el control donde insertas la rejilla.

Lo que hace ese evento es tomar el valor de la variable local de la rejilla, misma que almacenó el valor del registro seleccionado al simple click o al cambiar de seleccionado.

No olvides inicializar el valor de la variable local donde almacenas el ID del registro a 0 al arrancar el formularioo.

Ahora en el proceso de tu botón ya solo pon el siguiente código,

cargar lista (tu tabla de viajes), por el indice ID, Tu variable donde almacenaste el ID
 Seleccionar ficha por posicion (1)
 modificar ficha seleccionada
    Modificar campo ( STATUS_VIAJE, “C” )
Interfaz: Recalcular ( LISTA_VIAJES )

Creo que sería todo, con eso te debe funcionar.

Saludos


([N1] leonardo daniel velazquez fuentes) #5

Gracias AztecMexico, ya vi y no debo usar el interfaz: Recalcular( rejilla ) ya que la rejilla la lleno con un manajedor de evento y una conexion de evento post-inicializacion, entonces si lo marca como cancelado, pero no refresca la rejilla…

con interfaz: recalcular… la deja en blanco (evidente ya que la rejilla se llena con un manejador de evento)

Manejador: Cancelar Viaje
*

If ( NO_VIAJE > 0 )
      Cargar lista ( VIAJES@vAztecaDat, ID, NO_VIAJE, , , )
            Seleccionar ficha por posición ( 1 )
            Modificar ficha seleccionada
                  Modificar campo ( STATUS_VIAJE, "C" )
                  Interfaz: Recalcular ( LISTA_VIAJES )
                  Interfaz: Ejecutar manejador de evento ( BUSCAR, )
                  Libre

Manejador: Buscar viajes disponibles
*

Cesta: Crear cesta local ( VIAJES@vAztecaDat, cesta )
Crear manejador de objeto ( busqueda, Búsqueda VIAJES_DISPONIBLES@vAztecaApp )
Disparar objeto ( busqueda, No aplicable, )
      Cesta: Agregar lista a la cesta ( cesta )
Interfaz: Procesar ( LISTA_VIAJES, Todas )
      Cortar lista ( 0, )
      Cesta: Agregar a la lista en curso ( cesta )
      Libre

Busqueda: Viajes_disponibles
Indice Status -> normal, modo -> parte izquierda clave, limite inicial-> Status(“R”)
indice date -> Mezcla -> cruzar , modo -> todo el fichero

para que me filtre los viajes registrados y ordenado por fecha