Establecer entrada de un proceso por manejador de objeto


([N1] sergi.esteve) #1

Hola a todos, a ver si a alguien le ha pasado esto.

Tengo un proceso que hace comprobaciones sobre una línea de albarán, éste proceso tiene como entrada una ficha de “Linea de Albaran”.

Desde un manejador de evento me creo una ficha en memoria de “Linea de Albaran”

Para ejecutar las comprobaciones hago (uso llaves para simular anidado):

Crear ficha en memoria(Lin)
{


modificaciones de campos de la ficha en memoria

  • Crear manejador de objeto (pTest,PROCESO_TEST)
  • Añadir ficha al objeto(pTest)
  • Disparar el objeto(pTest)
    }

El problema que tengo es que el proceso no recibe como entrada la ficha que le he añadido, es como si no recibiera nada.

¿Sabéis a qué puede ser debido?, ¿estoy confundido en la forma de hacerlo y hay que hacerlo de otra forma?, es por reutilizar ese código del proceso y no tener que repetirlo en otros sitios.

Cualquier ayuda es bienvenida, un saludo.


([N1] wikan) #2

Buenas, no se en que plano estás ejecutando el proceso.
De todas formas si una comprobación, en teoría la ficha ya esta dada de alta, por que es posible que el problema sea que la ficha no está en disco.

Podrías o bien controlar en el formulario lo que necesites antes de aceptar, a nivel de tabla con un trigger ( sin tener que reutilizar, usado en cualquier punto ) o un proceso de ficha ( reutilizable )


([N1] sergi.esteve) #3

Hola wikan.

El proceso es en primer plano.

Lo suyo sería en trigger, el problema es que no puedo sacar mensajes de error porque no llegan a la interfaz, y el user no sabe lo que ha pasado, a no ser que cree variables globales y devuelva por ahí el estado.

Lo del disco es posible, no se, intentaré usar una cesta para pasarle la ficha en lugar de ponerselo en la entrada a ver si así funciona.

Gracias.


([N4] eic) #4

Hola.

Creo que el problema es lo que te dice Manuel: La instrucción Crear ficha en memoria no da de alta la ficha, hasta que usas la instrucción “Alta de ficha”. Puedes trabajar con ella desde el propio evento, pero no la puedes pasar como entrada a un proceso, porque no está en disco.

Una posibilidad: aunque no reutilices, copia el código del proceso en el evento, y arreglado. A veces, lo mejor es enemigo de lo bueno.


([N1] sergi.esteve) #5

Hola.

Es cierto, al estar en memoria no sale del ámbito donde lo creas, he probado con una cesta y pasa exáctamente lo mismo.

Al final he tenido que copiarlo, el tema es que esas comprobaciones ya las tengo que hacer en 3 formularios distintos y siempre son las mismas, en uno de los sitios ya está en disco pero en otros no, por lo quería hacer un sólo proceso por mantenimiento, pero vamos, por lo que veo va a estar imposible. Me da rabia porque me parece chapucero tener que hacerlo así.


([N4] eic) #6

Hola.

Puedes hacer la siguiente prueba (aunque no lo he probado):

En vez de hacer la comprobación desde el evento en que se crea la ficha, puedes hacerla en el botón Aceptar del formulario, llamando al proceso que tienes. Es posible que, en este caso, sí que te funcione. Y eso te serviría tanto en el caso de que des un alta desde evento como si es desde otro sitio.


([N3] pacosatu) #7

Hola Sergi.

Leyendo tu primer Post, creo que planteas mal tu diseño.

Dices:
Tengo un proceso que hace comprobaciones sobre una línea de albarán, éste proceso tiene como entrada una ficha de “Linea de Albaran”.

Si la entrada es una Ficha de Albarán, esto implica que la Ficha de Albarán ya existe en Disco y por lo tanto hacer comprobaciones sobre algo ya grabado puede tener efectos indeseables si esa Ficha es editada por más de un Usuario.

Consideras que un Trigger no cumple tus requisitos porque necesitas Interfaz, entonces usas un proceso.

El proceso PROCESO_TEST debe realizar comprobaciones en una Línea de Albarán que va a ser dada de Alta. Como Velneo no puede pasar un Objeto “Ficha en Memoria” de un proceso a otro, pues tienes que montar PROCESO_TEST con variables locales, una por cada campo de la Línea de albarán que quieras comprobar. Existe también el objeto Función en el que puedes encapsular Comprobaciones para toda la Aplicación.

En cualquier caso, si esta comprobación pertenece a la Lógica de Negocio, yo sí soy partidario de diseñar algo que permita reutilizar el código y evitar repetirlo en los formularios, que luego viene el mantenimiento de la Aplicación.

Yo estoy aprendiendo VELNEO y resulta duro programar cosas que son triviales en otros entornos, pero el diseño de la Aplicación debe ser el mismo independientemente del entorno.

Saludos
Paco Satué


([N1] abel) #8

Hola Sergi

Empiezas este post comentandonos:"Tengo un proceso que hace comprobaciones sobre una línea de albarán, éste proceso tiene como entrada una ficha de “Linea de Albaran”.

Podrías ser mas especifico, sobre tu necesidad concreta, necesidad funcional, no a como la estas intentando resolver.

En Velneo ya se comenta que hay que cambiar el Chip, muy probablemente la solución a tu problema sea mucho mas fácil y obvia que lo que estas haciendo y sinceramente creo que estas buscando un paralelismo con tu antigua herramienta, esto lo hacía antes así en XXXX y en Velneo debe ser algo parecido.

Tan solo debes pensar en la cantidad de programas que se han hecho antes en Velneo V7 y 6.x que lanzan un formulario de linea de albaran (Miles o decenas de miles tal vez?)

Por tanto, si en ese punto, para controlar los datos de un simple formulario de albaran, nadie ha tenido esa necesidad, lo mas probable es que existan otros caminos o estés intentando controlar algo que ya controla la plataforma.

Dinos algo más para poderte ayudar. Pero hablanos del qué, no del cómo o de ayudarte a solucionar ese cómo al que tu has llegado y no consigues implementar


([N1] abel) #9

Te pongo un sencillo ejemplo, sobre lo que estoy pensando.
Te pongo un ejemplo

No hace mucho, vi una aplicacion con un complejo sistema de almacenes, en los que se quería garantizar la compatibilidad entre el tipo de articulo y el tipo de almacén donde podría almacenarse este (Temperatura, tamaño, etc).

Este control en un progrma Visual Basic, era un farragoso proceso que se realizaba en todos los formularios que implicaban movimeinto de almacen.

En Velneo, esto no había que controlarlo, ya que con ayuda de punteros indirectos y una nueva tabla gestionada por el usuario de compatibildiades de almacenamiento, era la propia base de datos quien lo gestionaba automaticamente. Por tanto todo ese control era innecesario, simplemente era imposible introducir algo incoherente. Estaba programado pero en la Base de Datos.

No se si será tu caso similar, pero para eso dinos el “Qué”, dudo mucho que algo tan sencillo y básico en Velneo, como los controles habituales en la lógica al introducir una linea de albarán, no quede mucho mas limpio .