Actualizar contenido inicial en tablas de extención


([N3] frugulletti) #1

Buenos días amigos, tengo la siguiente situación en la cual necesito una mano:

Tengo una solución A y una solución B que hereda a A, en B tengo una extensión de una tabla que esta en el proyecto heredado, uno de los campos que esta en esa tabla extendida posee como contenido inicial un par de campos que esta en la tabla original. El tema se presenta cuando modifico uno de los campos de esa tabla que componen parte de la formula del campo de la tabla de de extensión, pues no refresca el contenido del campo.

Ya he probado varias cosas, como la configuración de la extensión de ficha en el formulario y nada, también lo hice directo por el vDataClient pero en efecto no refresca el valor del campo, solo al momento de crearse o modificar otra campo directo en la tabla de extensión.

Así que no se si se trata de una falla de velneo o es que debo configurar o activar algo que se me esté escapando o tocará hacerlo a nivel de procesos :-/


([N3] pacosatu) #2

Hola frugulletti.

El funcionamiento es el correto.
Tienes que entender que las fórmulas de Contenido inicial SOLO se refrescan cuando cambia alguno de los campos que intervienen en la Fórmula.

En tu caso, la Tabla de extensión de B usa el puntero a maestro de la Tabla principal de A, es decir, el campo #ID.
Por lo tanto, cuando das de alta el registro en B, el valor #ID (puntero al maestro A) toma un valor que ya no cambiará nunca ya que la relación 1:1 es permanente.

Aunque cambies los valores de los campos de la Tabla princiapl en A, como el puntero #ID no cambia, la fórmula de la tabla en B no se actualiza automáticamente.

En este caso no necesitas tener el campo con el contenido inicial en B, ya que siempre podrás acceder a los valores de la tabla en A a través del puntero a maestro #ID.

Saludos
Paco Satué


([N3] frugulletti) #3

Buenos días Seh, esa parte la tango clara, el tema es que el contenido inicial de uno de mis campos en la tabla B es otro campos de la tabla A, nada que ver con el ID, por ejemplo que en la tabla A tenga Cantidad e Precio y en mi tabla B tenga Importe cuyo contenido inicial es (Cantidad * Precio).

Lo que esperaba es que si cambio la cantidad o el precio en la tabla A me refresque el importe en la extensión.


([N2] AyudaVelneo) #4

Hola frugulletti:

El problema es el mismo.

Imagina que Velneo funcionase como dices y que por ejemplo, en una línea de venta tuviésemos que el campo total fuese (#CANTIDAD * #ARTICULO.PVP ). En ese caso, cada vez que se cambiase el PVP de la ficha del artículo, se modificarían todas las ventas realizadas.

Si quieres que Velneo recalcule el importe, pon el campo cde tipo fórmula con contenido inicial o fuerza el cambio en el id (cosa que no puedes al ser maestro de extensión)

Un saludo


([N3] frugulletti) #5

Ah ok, gracias José, ok es que no había comprendido el comportamiento de las tablas de extensión, que en si no son más que una especie de submaestra de la tabla extendida, suponía que tratándose de una extensión ésta tomaría las mismas propiedades de la tabla extendida, siendo como comentas ya me queda totalmente claro.
Hice esa extensión justo porque necesito cumular en una tabla maestra este resultado, pero si la solución para refrescar los cambios es con un campo tipo formula, recuerda también que velneo no recomienda el uso de campos tipo formula para actualizaciones, me podrías recomendar allí una alternativa, por favor ?


([N1] wikan) #6

Te podría funcionar esto
Lo pones como trigger en la tabla maestra y si cambia cantidad o precio, recálculas el campo de la extendida.


([N3] frugulletti) #7

Ok gracias Manuel, voy a probar también lo del Hook a ver de que va.


([N1] wikan) #8

Puedes no complicarte y añadir las instrucciones directamente en el trigger posterior a modificación. Si cambian los campos, actualizas la extensión


([N3] frugulletti) #9

Ok, pero en este caso no creo que me sirva el trigger puesto que la tabla de extensión no habrá percibido el cambio sino la tabla original y justo ese es el detalle que no quiero tocar el proyecto heredado.


([N1] wikan) #10

Ya te entiendo, de ahí nacio la idea de los hooks, para poder ejecutar procesos en herencia, es lo que falta para poder completar la herencia.

Lo único es documentar ese proceso y tenerlo en cuenta en posibles actualizaciones.


([N3] pacosatu) #11

Hola frugulletti.

Entiendo que lo que quieres hacer es tener siempre un campo actualizado extendido #IMPORTE en el proyecto B que sea el producto de los campos principales #PRECIO y #CANTIDAD del proyecto A.

Para que siempre tengas el valor de #IMPORTE actualizado no tienes más remedio que usar, como te indica Vila, un campo Fórmula numérico #IMPORTE = #ID.PRECIO * #ID.CANTIDAD.

En este caso el campo fórmula no ralentizará las consultas porque los 2 punteros utilizados en la fórmula son a la tabla maestra principal y ésta siempre estará cacheada. Es como cuando se lee un campo de un maestro normal.

Otro tema es acumular los valores del campo #IMPORTE en una tabla maestra. Al ser #IMPORTE un campo fórmula las Actualizaciones no van a funcionar porque no es un campo que transaccione.

Siempre te quedará la posibilidad de tener un proceso que ejecutes bajo demanda (3P o 4P) o programado como Tarea en el vServer y que haga el cálculo de los acumulados.

Saludos
Paco Satué


([N3] frugulletti) #12

Buenas tardes Paco, tienes razón no había pensado en ello pero es una alternativa viable con tal de no tocar el fuente original y poder actualizar el registro de la tabla maestra, seria como dispararlo a través de un demonio, lo otro también es procurar colocar esa verificación en cualquier evento inmediato que pueda, como por ejemplo un previo a la contabilización o algo así.

Mil gracias a todos, espero pasen una feliz navidad.