ACTUALIZACIONES ... Sugerencia


([N1] Segura) #1

Hola...Estoy haciendo una aplicación sencilla de control de inventarios en donde una de las tablas es el Maestro de Movimientos y Su tabla respectiva de Detalle de Movimientos ( Sub-Maestra), en donde esta el producto, cantidad, precio, etc... y las tablas respectivas del Maestro de Articulos y Existencia de Productos por Bodega...Las definiciones de actualizacion de la tabla de Detalle de Movimientos, funcionan adecuadamente, es decir se actualiza la existencia del Producto y tambien la existencia del producto en la bodega respectiva... Lo que necesito hacer es una cancelacion del documento ( es decir una vez ya capturado el documento y ya despues de haber echo la actualización respectiva ) poner el status del Documento como cancelado, lo que hace que se invalida este docuemento, y obviamente las existencias se ven afectadas. Esto lo ´puedo hacer mediante procesos o funciones, lo que ando buscando es hacerlo de una manera transparente, y que se encargue la propia definicion de las tablas.
He estado probando de diferentes formas, para que se ejecute la actualización, pero esta no se realiza ya que el campo cantidad, realmente no sufre algun cambio...( intente modificar el campo cantidad al multiplicarlo por uno ..para que "se realizara algun cambio en este campo" ) El unico cambio realizado es en la tabla de Maestro de Movimientos, al cambiar el status del Documento de Activa a Cancelada.. en espera de alguna sugerencia.


([N1] Pepeto) #2

Deduzco que pretendes, al Cancelar un documento, es dejar el documento almacenado pero anular el moviento en el stock.

Si las lineas de movimiento tienen 2 estados ( Activa / Cancelada ) , lo unico que debes hacer es poner una condicion en la actualizacion para que dicha actualizacion se realice solo cuando el movimiento este Activo, asi al cambiar el estado a Cancelado, la actualizacion se anulara automaticamente.

un saludo
Jose Luis
http://www.ascsl.com


([N1] Segura) #3

Gracias Pepeto...Pero la actualizacion se debe de ejecutar, tanto cuando esta activa como cancelado el documento.. Me explico mejor.
Al dar de alta el Movimiento ( Factura, Compra, Entrada al Almacen, Salida de Almacen, etc), las actualizaciones funcionan como es debido, incrementan o decrementan las existencias en las dos tablas Productos ( Existencia Total ) y Productos por Bodega ( existencias por bodega), en este Momento el registro queda como Status de ACTIVA, pero al cancelar este movimiento, las existencias de estos productos deben de reflejar esta cancelacion ( incrementar o decrementar ) en el sentido inverso de la naturaleza del movimiento .
Es decir si el movimiento original era una salida ( este movimiento disminuye la existencia) pero al cancelar el documento, la cancelacion debe de "incrementar" la existencia..
Saludos y mil gracias por tu respuesta.


([N1] Segura) #4

Ampliacion de la Pregunta...Pepeto..yo creo deberia de cambiar la pregunta, y preguntar bajo que condiciones funciona una actualizacion... Leyendo el manual de Velneo..encuentro esta defincion de la funcionalidad de la actualizacion ...
"Una actualización es un subobjeto de tabla que permite actualizar el valor de los campos de un registro de una tabla enlazada cada vez que se produce un alta, una modificación o una baja en la tabla origen en la que definimos las actualizaciones."
y el cambio que se refleja en la tabla es del campo de Status pasa de Activa a Cancelada, pero los campos de cantidad o importe no sufren ningun cambio.... Pienso ..si internamente ... el sistema de alguna forma detecta la actualizacion ( compara el antes y despues ) y dispara la actualizacion ( en este caso el antes y despues de los campos cantidad y precio son los mismos )
no se, si mi reflexion al respecto tenga cierta validez.
Saludos


([N1] Pepeto) #5

Me reitero en mi respuesta.

Quizá no me expliqué bien, con lo de anular el movimiento, NO queria decir eliminar el registro, sino indicar que ese movimiento ya no debe afectar a stock y por tanto la actualización debe ser anulada y volver a su estado anterior

Prueba a poner la condición en la actualización, primero prueba y luego me cuentas de nuevo.

O es eso, o estoy un poco espeso.

un saludo
Jose Luis
http://www.ascsl.com


([N1] Segura) #6

Mil gracias Pepeto por tu Interes....Pero deja te platico ...que debido a la duda que me surgio en cuanto al funcionamiento de las actualizaciones, decidi mandar un Post a Soporte tecnico...y te copio la respuesta..

" Tal y como se indica en el texto que Vd. ha transcrito del manual de referencia de Velneo V7, una actualización solamente se disparará cuando cambie en la ficha que la tiene definida alguno de los campos que intervengan en su definición.
En el caso que comenta la actualización nunca será disparada ya que dicho cambio no se produce. "

O sea que debido a que los campos de Cantidad e importe no sufren cambio alguno al cancelar el documento, la actualizacion respectiva no se realizaria.

Me sugieren crear un registro en en la Tabla de detalle para registrar la cancelacion, es decir un registro por cada producto que contenga el movimiento.

Anteriormente habia considerado crear dos campos adicionales en el mismo registro de movimientos Cantidad e Importe Total, que se utilizarian unicamente para el caso de una cancelacion y que actualizarian las mismas tablas maestras, solo que a la inversa del movimiento original

Saludos y gracias Nuevamente


([N1] Pepeto) #7

Te vuelvo a decir que funciona y ya no lo repito mas veces, ¿has hecho la prueba?

La respuesta de soporte es correcta, "Si un campo de la tabla no interviente en la actualizacion, esta no se dispara", pero hay 2 formulas que intervienen en la actualizacion:

1. Formula de actualizacion: "Puedes indicar campos o expresiones, y si cambia el valor de un campo, la actualiacion se dispara"
2. Formula de condicion: "Aqui tambien aparece el campo de la tabla, y si cambia su valor, ha actualizacion tambien se dispara"

1. Formula de actualizacion: #CANTIDAD
2. Formula de condicion: #STATUS="A"

De todas formas, si aun asi no estas convencido, tambien puedes usar una expresion en la Formula de la actualización:

choose( #STATUS="A", #CANTIDAD, 0 )

un saludo
Jose Luis
http://www.ascsl.com

Edito: he corregido la formula


([N1] Segura) #8

Pepeto...para salir de dudas, probe de las dos formas que me mencionas..y no funciono
la formula de actualización seria asi choose(#STATUS = 0, #CANTIDAD*#AFECTA, - #CANTIDAD*#AFECTA)

El campo status es un campo booleano 0 = Activo, 1 = Cancelado
Campo #AFECTA ,,determina si incremente o decrementa las existencias contiene 1 o -1

AL dar de alta el Movimiento, realiza la actualizacion correcta (Status = 0 )
AL cancelar el Movimiento no se realiza la actualizacion ( #STATUS = 1 )... Al cancelar el documento se debe de producir la actualizacion inversa del movimiento

A manera de prueba cambie la formula del choose(#STATUS = 1, - #CANTIDAD*#AFECTA, #CANTIDAD*#AFECTA) y ocurre de la misma forma...al dar de alta el movimiento si actualiza, al cancelarlo...no se produce la actualizacion

Saludos


([N2] zaiffer22) #9

Estoy creando una aplicación, que también maneja inventario. Estuve leyendo lo anterior, y según veo, parece ser que hubiera una inconsistencia en este tema, ya que a mi tampoco me funciona. Se supone que si una formula en una condición de actualización cambia, la actualización se dispararía, pero esto no sucede. Debo pasar a estado “anulado”, un documento, y como en el caso de Felipe Segura, este debe afectar el stock. Curiosamente, aunque tiene las condiciones, de que, si el encabezado pasa a estado “anulado”, las actualizaciones en el detalle no se deben cumplir y por tanto el stock debe volver a su cantidad original, pero, estas quedan intactas. En lo único en que se aplican las fórmulas de condiciones, es cuando sucede cualquier evento dentro de la ficha, no desde otra tabla como por ejemplo su maestra. He intentando de muchas maneras, y no encuentro alguna manera de que funcione correctamente. Teniendo en cuenta que para que se actualice el stock, debe haber previamente un evento en la ficha, supongo que habrá que colocar un campo de estado donde se pase a “anulado” cada ficha para poder que ese evento dispare las actualizaciones, como lo que formuló Felipe Segura en el comentario #13286

Si se encuentra alguna manera de hacer esto de una forma mas ágil, agradecería que lo mencionaran, ya que, con base en este funcionamiento diseñe muchas cosas en la aplicación, las cuales, tendré que cambiar.


([N4] spereira) #10

 

No lei la todos los post pq no son horas y aun no abri bien los ojos :stuck_out_tongue: pero vamos que tiene que funcionar bien, solo teneis que poner el estado del documento en las lineas (no en la cabecera) o en su defecto en los dos sitios, por ejemplo #esta_activo.

Vale pues la condición para que actualice tiene que ser #esta_activo = 1, no vale poner #cabecera.esta_activo=1, ya que con la segunda opción no se entera la base de datos de que tiene que desactualizar. Con lo cual cuando tendreis que propagar el check a las líneas.

 

La actualizacion solo tiene que ser #cantidad (sin signos ni nada).

Un saludo.


([N3] blavan) #11

Hice las pruebas correspondientes y si funciona.

Es demasiado importante y vital en nuestras aplicaciones como para que eso fallase pero en la interpretación del uso siempre surgen problemillas.

Lo que dice spereira tiene toda la lógica del mundo, se actualiza desactualiza sobre el contenido del campo de una ficha, si la condición está en la cabecera que sabe el programa a cual de las fichas del histórico le tiene que afectar la desactualización?