Ejecución de Procesos en 1er y Tercer Plano


([N3] blanyi) #1

Buenos días a todos.
Se me presenta una situación que quiero comentar con todos ustedes para ver si alguien puede decirme que es lo que sucede.
Desde un evento de un formulario llamo a un proceso que he creado en la caja de datos y como es una buena cantidad de registros que deben ser procesados llamo al proceso en tercer plano, logicamente para que sea mucho más rápido.

El proceso lo que hace es cargar una lista de una tabla temporal, recorrer esa lista en lectura/escritura, luego cargar los plurales de otra trabaja (hija de la tabla maestra). Luego se recorren estos plurales por cada maestro para sumar algunos datos de allí y finalmente, volviendo a la ficha del maestro, modificar unos campos con base en las sumas hechas en los plurales.

La situación está en que si el proceso lo mando a ejecutar en primer plano, me funciona bien, pero es muy lento; pero si lo ejecuto en tercer plano, lo hace super rápido, pero no calcula nada, es como si no llamara al proceso, y en la rejilla me muestra los registro con los datos que me interesan en cero (0).

Adjunto dos archivos PDFS, uno con el contenido del evento y otro con el contenido del proceso. En el evento he señalado con un rectangulo rojo el llamado al proceso, y en el proceso he sañalado con rojo también las ordenes para modificar los campos.

Agradezco que alguien me indique si estoy es que estoy haciendo algo mal, si me falta algo, o si es un bug de Velneo.

Dios les bendiga.

YIMY MORA ACONCHA

CAL_SALDOS_CR_DATOS.pdf (21.3 KB)

EVENTO-BUSCAR_OK_ESTA_FUNCIONANDO.pdf (20.4 KB)


([N2] AyudaVelneo) #2

Hola Yimy:

Dependerá de donde cargues los registros en la tabla temporal. Si se cargan en el cliente, serán locales a la máquina que ejecute la aplicación con vClient. Por lo tanto al mandar el proceso a tercer plano (servidor) en esta tabla no habrá ningún registro.

Un saludo


([N3] blanyi) #3

Hola José Vila Martín, muchisimas gracias por responder.
Entiendo lo que dices, pero entonces como haría yo en mi caso para pasar lo registros a la tabla temporal si para ello utilizo un tubo de lista y los tubos de lista no se pueden usar en un proceso creado en la caja de datos, como es el caso que tengo yo, que el proceso lo he creado en la caja de datos.

Será que tendré que crear el proceso en la caja de aplicación e incluir las instrucciones que llenan la tabla temporal y ejecutar este proceso con estas nuevas instrucciones en tercer plano?

Una vez más gracias.

YIMY MORA ACONCHA


([N3] blanyi) #4

Buenos días.
Para informar que he creado el proceso en la caja de aplicaciones y lo he mandado a ejecutar en tercer plano y tampoco me funciona.

YIMY MORA ACONCHA


([N1] wikan) #5

Buenos días,
por lo que entiendo estas cargando una tabla en memoria en el cliente y la estás intentando procesar en el servidor.

Si el cliente conoce esos datos, hazlo todo en el servidor. Si es un recálculo de saldos supongo que al final guardarás ese dato en el cliente, asi que el cliente tendrá acceso al dato posteriormente.


([N2] AyudaVelneo) #6

Hola Yimy:

No es un problema de que el proceso lo crees en la caja de datos o en la caja de aplicación. Es un problema de planos de ejecución.

Si tienes una tabla en memoria en primer plano… el servidor no se entera de lo que tienes en esa tabla puesto que estará en la memoria del cliente… al contrario ocurre exactamente lo mismo. Si lo ejecutas en la memoria del servidor, los distintos clientes no sabrán de la existencia de esa información.

Siempre puedes crear una tabla en disco para operaciones o cálculos puntuales… Le añades el campo usuario a la tabla y rellenas los registros en base al usuario. Al inicio del proceso cargas la lista de esta tabla por el indice usuario y eliminas los registros que encuentre para volver a realizar otro cálculo.

Un saludo


([N4] mittosoftware) #7

No he leido a fondo, pero me parece que este tipo de problema (estructuras temporales para representar resultados de consultas complejas a la BD, sin necesidad de crear tablas en el proyecto respectivo), se resolvería si esta idea fuera resuelta favorablemente.

http://velneo.zendesk.com/entries/23622456-Equivalente-a-Vistas-SQL-en-v7

Y que esta idea no tenga mas votos, también me intriga, con lo útiles que son las vistas en SQL.


([N3] blanyi) #8

Gracias a todos por ayudar.
Hola José Vila Martín, de acuerdo con lo que dices y con las pruebas que he realizado, entonces de nada me sirve tener una tabla con persistencia en memoria y ejecutar un proceso en tercer plano para rellenarla y luego pretender mostrar los datos de esa tabla en una rejilla porque nunca me va a mostrar nada.

La lección que se aprende entonces es: los datos de una tabla en memoria se se procesan en tercer plano solo serviran para ese plano, si los quiero manejar o presentar en la interfaz se debe actualizar la tabla en memoria en primer plano.

cribera estoy completamente de acuerdo contigo y de hecho ya vote la idea, aunque no estoy seguro que mi voto valga por lo que en este momento estoy como Nivel 1. Ciertamente llama poderosamente la atención que pareciera que a nadie más le interesara.

Feliz día.

YIMY MORA ACONCHA


([N1] percyleoncio) #9

Es el mismo problema que tengo solo que a diferencia de YIMI yo utilizo los datos de las tablas en disco y tampoco me funciona en 3er plano solo en 1er plano, llamo al proceso en un manejador de evento a la pérdida de foco de un campo.
A alguien mas le habrá sucedido lo mismo?
Saludos



([N2] AyudaVelneo) #10

Hola Percyleoncio:

¿cómo ejecutas ese proceso? ¿Tienes que pasarle variables?

Desde un manejador de evento, lo mas lógico es lanzar el proceso usando un manejador de objeto (así le puedes pasar valores al proceso).

Mírate este ejemplo de mi blog para ver si resuelves las dudas que puedas tener.

Un saludo


([N1] percyleoncio) #11

Gracias amigo Vila por contestar, las variables internas del proceso solo hacen uso de los valores de la tabla asociada al mismo, no hay ningún valor de fuera. Al proceso lo llamo desde un manejador de evento con una única línea: Ejecutar proceso(“nombre del proceso”, 3° plano: Servidor (síncrono), ) a la pérdida de foco del campo respectivo.
La única finalidad del proceso es guardar un campo de la tabla asociada con el valor que se procesa.


([N4] velavisual) #12

@percyleoncio

Si estás ejecutando el proceso en tercer plano desde un manajedor de evento de un formulario de ficha, el origen del proceso seguro que es ficha, por lo tanto los contenidos de los campos no viajan entre primer plano y tercer plano.

Deberías:

1.- Poner el proceso sin origen alguno
2.- Crear variables locales que necesites en el proceso y usarlas en lo que estés haciendo.
3.- Pasarle valores a las variables locales del proceso mediante un manejador de objetos disparado desde el manejador de eventos de la ficha.
4.- Mira el ejemplo que te menciona Ayudavelneo en el comentario anterior