Abrir un registro de objeto en concreto al abrir la ventana

SOLVED

Tengo un objeto ZZZ creado que se accede desde un botón  de la pantalla de Pedidos de venta.

El registro que se crea, y luego debe de ser consultable, tiene el mismo número que el Pedido de venta creado.

La forma para abrir este objeto ha sido la de utilizar la accion GOBJETC0 en el botón de la ventana.

La forma que he encontrado para que cargue el registro en concreto es filtrando en la accion FILTRE haciendo que FILTSUP = [F:ZZZ]DOCORIGEN = [M:SOH0]SOHNUM

El problema me surge cuando creo un peticionario grafico para el dashboard.

Si intento linkar desde peticionario SQL, al FILTRE me da error porque [M:SOH0] no existe.

Si añado el IF en FILTRE para indicar que solo haga este filtro cuando GABREV = 'SOH', tampoco me funciona, ya que en cuando se abre el objeto ZZZ, GABREV =ZZZ.

Necesitaria la forma de detectar cuando estoy abriendo el objeto desde un Peticionario grafico / calendario / Peticionario  SQL , o como detectar que Objeto estaba abierto antes de abrir el ZZZ , para detectar asi que venia de SOH.

Alguna sugerencia?

  • 0

    Buenos días  !

    Esperamos que algún miembro pueda darte la respuesta que necesitas, pero mientras tanto  puedes recurrir a los servicios de Postventa o a tu Distribuidor.

    Saludos,

  • +1
    verified answer

    Hola,

    Supongo que tendrás que utilizar alguna estructura de control tipo "If" o "Case" preguntando por el origen de la llamada.

    Hay una variable global que se llama GNAVIG que contiene la pila de llamadas de las funciones. Es una lista que empieza por 1 y hay otra variable global (GPILNAV) que guarda el índice de la última función accedida:


    GNAVIG(1) = "GESSOH" 
    GNAVIG(2) = "GESSDH"
    GNAVIG(3) = "GESSIH"

    GPILNAV = 3

    En este ejemplo primero entra en pedidos (GPILNAV=1), luego salta a entregas (GPILNAV=2) y finalmente termina en facturas (GPILNAV = 3). Cuando el usuario sale de facturas, GPILNAV pasará a 2 y GNAVIG(3) quedará vacío. Creo que funciona así. 

    Esta variable se utiliza mucho en la activación/desactivación de botones (SETBOUT) para no permitir el acceso a un objeto si ya viene de el mismo objeto.

    Se podría hacer algo así:

    If GPILNAV>1
      Case GNAVIG(GPILNAV-1)
        When "GESSOH" : # Viene de pedido de venta
        When "EXEALH" : # Viene de ejecución de consultas
        When Default  : # Viene de cualquier otro lado
      Endcase
    Endif

    También recuerda que puedes utilizar la instrucción clalev para chequear si una clase (pantalla o tabla) es accesible.

    También se suele utilizar una variable global que se llama GFONC1. En teoría guarda el código de función desde la que se ha hecho la llamada a la función actual. Pero no estoy seguro si esta función es gestionada por los procesos de supervisor.

    Espero haber entendido tus necesidades. Un saludo,

    Nacho Alférez.

  • 0 in reply to Nacho_Alferez

    Muchas gracias , no conocia estas variables y va perfecto.

    Te pregunto aquí y si no lo sabes ya haré otra pregunta general.

    Lo que también busco es que desde un peticionario creado como un gadget en la pantalla de inicio del usuario, abra la ventana con el registro que se ha clicado, pero me abre mostrándome el último que se había consultado.

    Conoces alguna forma de capturar el registro que se ha pulsado al peticionario?

    El objeto lo he creado yo.

    Se que de forma estandard en X3 hay objectos que este link funciona perfecto y otros que no, nunca he entendido el motivo.

    gracias!

  • +1 in reply to sergi sole
    verified answer

    Buenos dias , me respondo a mi mismo que ya lo he encontrado.

    es la variable CLE1, que si no esta bien creado el objeto no me cogia el valor del número documento, sinó el código planta.

    Ya lo he solucionado, gracias.