Problemas con las actualizaciones de tablas.


(ame) #1

Buenos días a todos,

 

Resulta que estoy teniendo problemas de cálculos con las actualizaciones. El caso es que cuando doy de alta un nuevo registro de histórico, me acumula correctamente la cantidad en cuestión en el campo de la tabla maestra.

El problema viene cuando doy de baja el registro de histórico que acabo de crear. Se supone que Velneo calcula automáticamente la operación inversa, y debería dejar el campo de maestro con la cantidad inicial que tenía antes de dar de alta la ficha histórico. Pues no ocurre así, me hace un cálculo sin sentido, y me arroja un dato que no tiene nada que ver.

Por poneros un ejemplo. Yo estoy trabajando con la OpenApp vGestión, pues bien, en la tabla de "entidades de gestión" he creado 2 campos númericos: DEBE y HABER, y un campo fórmula SALDO. Cuando se da de alta una factura por ejemplo de un determinado cliente, inicialmente esta factura no está pagada, así que su importe (campo TOT de la tabla VTA_FAC) se acumula al campo DEBE del cliente mediante su correspondiente actualización. Imaginaos que el importe de la factura ha sido de 10€ y que el DEBE inicial era de 100€, pues efectivamente en el DEBE del cliente me aparece 110€, pero cuando me da por eliminar la factura, obviamente tendría que quedarse nuevamente a 100€, ¿cierto? Pues me aparece una cantidad sin sentido que no tiene nada que ver, no entiendo por qué ocurre esto. ¿Hago algo mal?

Si os hacen falta capturas decirmelo.

 

Saludos.

 

José Luis.

 


(ame) #2

Sigo con mas dudas con respecto a este tema.

 

A ver si conseguís darme una solución a lo que quiero hacer, porque de la forma que lo estoy haciendo yo no me sale.

Os explico:

Partiendo de lo anteriormente explicado, en resumen, la situación es la siguiente:

En la tabla de "entidades de gestión" tengo 3 nuevos campos: #DEBE, #HABER y #SALDO.

En la de facturas de venta tengo uno nuevo: #PAGADA.

Cuando a un cliente se le hace una factura, al principio no está pagada, por tanto se le debería de acumular el importe de esta factura al "debe" que tiene actualmente ese cliente. Cuando el cliente paga la factura, tiene que hacer el mismo proceso, pero esta vez para el campo #HABER.

Ejemplo:

Cliente 1 -> #DEBE = 0, #HABER = 0, #SALDO = 0

Alta factura 1 -> #PAGADA = 0, #TOT = 10

Cliente 1 -> #DEBE = 10, #HABER = 0, #SALDO = -10

Modificación factura 1 -> #PAGADA = 1, #TOT = 10

Cliente 1 -> #DEBE = 10, #HABER = 10, #SALDO = 0

¿Se entiende? Espero vuestras respuestas, muchas gracias de antemano.

 

Saludos.


([N4] eic) #3

Hola.

Sería interesante saber cómo tienes configuradas las actualizaciones (sobre todo, las condiciones para las mismas).

Por lo que veo, quieres que:

- El total de una factura vaya siempre al DEBE.

- Si está pagada, además, ese importe vaya al HABER.

Para eso tienes que tener dos actualizaciones:

- Una, sin condiciones, al campo DEBE (porque siempre actúa)

- Otra, con la condición PAGADA, al campo HABER.

No sé si te estoy entendiendo bien, ¿es esto lo que quieres?

Saludos,

Fran Varona

 








([N4] innovadb) #4

Sobre los importes sin sentido creo que el tamaño del campo no es suficiente o bien intentas meter negativos en un campo que no tiene la propiedad signo en verdadero.

 

Un saludo


(ame) #5

@Fran Varona

Efectivamente, lo has entendido 100%. Respondiendo a tu solución, tengo un problema, no puedo realizar dos actualizaciones sobre un mismo campo maestro.

 

@innovadb

Voy a revisar los campos, ahora os cuento.

 

Gracias a los dos.

 

 

[attachment=10547,1001] [attachment=10547,1002]


([N4] eic) #6

Hola.

No entiendo bien lo de "no puedo realizar dos actualizaciones sobre un campo maestro". Según lo que te dije, hay dos actualizaciones, exactamente lo mismo que tienes. Sin embargo, en la actualización al DEBE, quitaría la fórmula de condición que tiene que ver con #PAGADA, ya que la actualización al DEBE debe actuar tanto si la factura está pagada como si no está pagada. 

Saludos,

Fran Varona

 


(ame) #7

Pues me refiero a esto:

[attachment=10549,1003]

Que no puedo crear otra actualización sobre el mismo campo, vamos, que no me deja tener 2 actualizaciones sobre un mismo campo.

Por otro lado, aquí os pongo cómo tengo definidos los campos:

[attachment=10549,1004]

[attachment=10549,1005]

[attachment=10549,1006]

 

 


([N4] Fran) #8

Buenas tardes:

 

Las actualizaciones se crean desde el panel de subobjetos. El botón que muestras en la captura de pantalla siempre está "apagado".

 

Un saludo,

 

Fran.

EfeUno Consultores de Gestión y Software, S.L.

www.efeuno.org

fjpnovo@efeuno.org

 


([N4] eic) #9

Hola.

Cuando hablaba de "dos actualizaciones" me refería, claro, a dos "componentes de actualización". Justo lo que tienes.

Creo que la clave está en dos cosas:

- Las condiciones de los componentes de actualización (la del DEBE no debe incluir el campo PAGADA)

- El tipo de campo del campo DEBE, que debe ser con signo y con el tamaño suficiente.

Saludos,

Fran Varona

 





(ame) #10

Vaya, pues acabamos de detectar un bug en vDevelop. Resulta, y lo acabo de comprobar, que sobre un campo de enlace a maestro, si no existen actualizaciones, el botón de crear una nueva actualización aparece habilitado. Ahora bien, como ese campo ya tenga una, sale deshabilitado. Esto era lo que me tenía a mí confundido, que creía que no se podían crear más actualizaciones sobre el mismo campo, por eso creé dos componentes en la misma actualización, obteniendo por consiguiente el efecto no deseado. Ya lo tengo hecho de la manera que me has indicado y funciona perfectamente ;).

Gracias, un saludo.


(ame) #11

Ya he puesto los campos con signo, y ahora funciona, pero la lógica no me cuadra. ¿Por qué tengo que ponerles que es con signo, si lo que va a ir a parar a esos campos siempre va a ser positivo? Es decir, el importe de una factura, que siempre va ser > 0. Distinto es el saldo, que sí que puede ser negativo... pero los otros dos campos, no lo entiendo vamos.

Y por último, al final vale tanto crear una sóla actualización con dos componentes, como crear dos actualizaciones cada una con un sólo componente. No sé si existirá alguna diferencia adicional que haga que una opción sea preferible usarla frente a la otra en determinadas situaciones.

 

Saludos.

 


([N4] eic) #12

Hola.

Pues... creo que seguimos sin entendernos.

Cuando deseas realizar actualizaciones sobre dos campos de la misma tabla maestra, lo que hay que hacer es una sola actualización (porque van a la misma tabla) y dos componentes (porque quieres actualizar dos campos). Así es como se hace (que, por otro lado, es igual que 6.x, aunque quizá ahí las ventanas te guían un poco más).

Y es lo que me parecía ver en tu primera captura de pantallas: una sola actualización (CLI_SALDO) y dos componentes (DEBE y HABER).

De todos modos, me alegro que ahora te funcione.

Saludos,

Fran Varona

 


([N1] Velasco) #13

Buenas ame.

Eso que comentas no es un bug, o yo no lo entiendo así.

Esta habilitado para que crees la actualización.

Una vez creada la actualización lo que debes hacer es crear los distintos componentes de la actualización, es decir a los campos de la tabla maestra que quieras actualizar.

Un saludo.

 

 


Jorge Velasco Fernández

jvelasco@theseedsc.com

www.theseedsc.com


([N4] eic) #14

Hola.

Vaya, nos hemos cruzado.

Lo de los campos con signo: yo los pondría con signo, porque aunque parece que nunca vaya a hacer falta, siempre puede pasar que ocurra "algo" (inesperado) que haga que el importe sea negativo. Sobre todo, porque es un campo que va a recibir actualizaciones, es decir, sumas y restas (por eliminaciones o modificaciones).

En cuanto a las actualizaciones, creo que lo más cómodo es usar una sola actualización y dos componentes. No debería haber diferencias.

Saludos,

Fran Varona

 








(ame) #15

@Fran Varona,

No te preocupes, sí que nos hemos entendido, lo único que dije que también se podía hacer: en vez de una sola actualización con dos componentes, tener dos actualizaciones cada una con un sólo componente, vamos, que al final es lo mismo.

@Jorge,

Realmente no es que sea un bug, simplemente lo dije así porque no me cuadraba que por un lado te deje crear más de 1 actualización sobre un mismo campo, y por otro lado, el botón de crear nueva actualización se quedara deshabilitado cuando ya había una actualización sobre ese campo. Es cuestión de formas de verlo.

 

[attachment=10557,1007]

 


(ame) #16

Bueno, habiendo solucionado lo anterior (os doy las gracias de nuevo), os voy a seguir dando la vara si me permitís.

Ahora resulta que creo una factura, se me pone en el campo #DEBE del cliente el importe, y hasta ahí bien. Pero imaginad por ejemplo que me he equivocado, o lo que sea, y la quiero borrar, al borrar la factura tendría que quedar la cantidad del #DEBE a su estado anterior, ¿verdad? Pues me sale la cantidad del importe de la factura que he borrado pero en negativo, o sea, si por ejemplo, le he hecho una factura a un cliente con un importe total de 10€, en el #DEBE aparece 10€, genial, pero cuando borro la factura aparece en el #DEBE -10 [¿...?]. ¿Esto es así? ¿No debería haberse puesto en 0, o bueno, la cantidad que había antes de haberse creado la factura?

Saludos.

José Luis.








([N4] cyf) #17

Hola, quisiera hacer una recomendacion que a mi me funciona muy bien : Intento evitar por todos los medios las condiciones en las actualizaciones porque te llevan muy facilmente a error. ¿Como lo hago?. Cuando son cantidades que deben actualizar o no, por una codicion, normalmente puedo controlar esa condicion con un booleano. Y lo que hago es actualizar con una formula que sea el resultado de multiplicar la cantidad por el booleano. Para mi, el proceso es mucho mas claro. Siempre se realiza la actualizacion, pero el contenido de la actualizacion es cero o la cantidad en cuestion. Como el booleano interviene en la formula de la actualizacion, cuando este cambia se ejecuta la actualizacion. Un saludo


(ame) #18

Buenos días, cyf.ecocyf,

Gracias por tu aportación. El problema de ese método es, si mal no te he entendido, que siempre voy a obtener un resultado de 0 o mayor que 0 (el importe de la factura), y también me hacen falta valores negativos, ya que como puse en mi anterior post, al eliminar una factura debe restar su importe al campo #DEBE del cliente.

Gracias de todos modos, se tendrá en cuenta para otras situaciones.

Saludos.

José Luis.




([N1] Pepeto) #19

@ame

Ese metodo tambien te permite valores negativos, recuerda que cualquer NUMERO (positivo o negativo) multiplicado por 1 es el mismo NUMERO, y su signo no cambia ;)

un saludo

Jose

Edito: (tabla del 1)

Casillas x Casillas = Casillas

Casillas x Puyol = Puyol

Casillas x Torres = Torres

:D

 

 


(ame) #20

@Pepeto,

No si ahí estás en lo cierto, el caso es que el problema no es de la variable booleana, sino de la del importe de la factura, que siempre es positivo, por tanto:

0 ⋅ x = 0; ∀x > 0

1 ⋅ x = +x; ∀x > 0

Y esto está muy bien cuando voy realizando facturas, que se me van acumulando los importes en el campo #DEBE del cliente, pero cuando elimino una factura, me hace falta restarle al campo #DEBE ese importe, que siempre es positivo. El problema es que ese cálculo no lo hago yo, ya lo realiza (deduce) Velneo automáticamente a partir de la actualización. Y tampoco me vale crear una copia de factura en negativo para que me cuadren los cálculos, ya que para mí al menos, esto es un poco chapuza.

Aquí la cuestión está en que la primera parte ya la tengo solucionada. Me va acumulando bien los importes en el #DEBE, y cuando marco la casilla de "factura pagada" también se me va acumulando el #HABER. Si la desmarco, se vuelve a des-acumular. Lo que no entiendo es, ¿por qué si borro la factura, me hace como 2 restas? Es decir, el cliente tiene un "debe" de 10€ asociado a una factura, si elimino esa factura, tendría que quedarse en 0€, pues se me queda en -10€, hace 2 restas!!

Seguiré investigando, gracias por vuestro interés.

Saludos.