Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Campos calculados, facturas y detalles de facturas. (https://www.clubdelphi.com/foros/showthread.php?t=5035)

Letty 06-11-2003 14:30:07

Campos calculados, facturas y detalles de facturas.
 
Hola a todos. Esta es la primera vez que expongo aquí una cuestión y espero explicarme bien.

A ver, estoy trabajando en delphi 6 con dos tablas entre otras, hechas en formato paradox (7 creo) con el database desktop. Una de las tablas es Detalles_Factura y otra Facturas. Las hice por separado para luego entre otras cosas, poder juntar todos los datos en un quickreport.

Lo que sucede es que en Detalles_Factura tengo que calcular el total del detalle que viene de cantidad*precio_unitario y no sé si crear el campo en la tabla física o ponerlo luego en la ttable del delphi como campo calculado, porque probé a hacer esto y realizar el cálculo en oncalcfields y no me lo actualiza, mejor dicho no me pone ningún dato.

Por otro lado, una vez que se actualice el total del detalle de factura, en facturas se tiene que actualizar el subtotal de la factura, es decir, la suma de todos los totales de detalles de factura cuyo código de factura coincida. Tampoco sé si hacer este campo calculado o cómo.

Ayudadme por favor, le di miles de vueltas a esto y nunca me sale.

Otra cosilla, os suena de algo que hagáis por ejemplo:
Tabla.edit;
Tabla.insert([‘valor1’,’valor2’]);
Tabla.post;
Y k diga que la tabla no está en modo insertar, según me habían explicado para insertar los datos correctamente, habría k hacer esto,no?

Bueno, gracias por adelantado a los que me podáis ayudar. Hasta pronto.

__cadetill 06-11-2003 14:43:42

Por partes....
Cita:

Letty comentó:
A ver, estoy trabajando en delphi 6 con dos tablas entre otras, hechas en formato paradox (7 creo) con el database desktop. Una de las tablas es Detalles_Factura y otra Facturas. Las hice por separado para luego entre otras cosas, poder juntar todos los datos en un quickreport.
Estupendo

Cita:

Letty comentó:
Lo que sucede es que en Detalles_Factura tengo que calcular el total del detalle que viene de cantidad*precio_unitario y no sé si crear el campo en la tabla física o ponerlo luego en la ttable del delphi como campo calculado,....
Eso va a gustos, es cuestión de diseño. êrsonalmente, no suelo tener el campo Total en la BD, sino que es calculado

Cita:

Letty comentó:
....porque probé a hacer esto y realizar el cálculo en oncalcfields y no me lo actualiza, mejor dicho no me pone ningún dato.
mmmmmm, me extraña que no te funcione, porque es de lo más sencillo. Cómo lo haces? Cómo estás definiendo el campo calculado?

Cita:

Letty comentó:
Por otro lado, una vez que se actualice el total del detalle de factura, en facturas se tiene que actualizar el subtotal de la factura, es decir, la suma de todos los totales de detalles de factura cuyo código de factura coincida. Tampoco sé si hacer este campo calculado o cómo.
Otra decisión de diseño y, personalmente, éste sí lo tengo en las tabla sísicamente

Cita:

Letty comentó:
Otra cosilla, os suena de algo que hagáis por ejemplo:
Tabla.edit;
Tabla.insert([‘valor1’,’valor2’]);
Tabla.post;
Y k diga que la tabla no está en modo insertar, según me habían explicado para insertar los datos correctamente, habría k hacer esto,no?
bueno, si lo quieres añadir TODO en la misma linea, debes de utiliar el método Table1.InsertRecord();. Mírate la ayuda que hay un buen ejemplo
Si no lo quieres hacer en una sola linea, decirte que el método Edit es para modificar el registro en el que te encuentras actualmente y, Append o insert es para añadir. El primero añade al final de la tabla y el segundo en la posición donde te encuentres en ese momento (tambien te aconsejo mirarte la ayuda de estos métodos que tambien traen un ejemplo)

Letty 06-11-2003 19:31:08

Muchas gracias por tu respuesta cadetill!.
El campo calculado total de detalles_facturas lo hago así: me pongo en la ttable new field, total, float,calculated y en oncalcfields de detalles_facturas -->
Tb_DetallesTotal.Value:= Tb_DetallesCantidad.Value*Tb_DetallesPrecio_Unit.Value;
Cons_SubTotal.Close;
Cons_SubTotal.ParamByName('Factura').AsString:= DtMod_Adail.Tb_FacturasCod_Fac.Value;
Cons_SubTotal.Open;
Tb_FacturasSubTotal.Value:= Cons_SubTotalSubTotal.Value;

Pero bueno, aunk ponga solo la primera instruccion no va.
En cuanto a la última cuestión, me confundí, lo que pongo siempre es InsertRecord([‘1’,’dos’]); Me comí el record.
El rollo es: si pongo insertrecord... no hace falta poner el edit ni el post¿? O por qué poniendo esto me sale el error ese?

Bueno, muchas gracias por tu ayuda y hasta pronto.

__cadetill 06-11-2003 20:45:38

Hola de nuevo

Cita:

Letty comentó:
Muchas gracias por tu respuesta cadetill!.
El campo calculado total de detalles_facturas lo hago así: me pongo en la ttable new field, total, float,calculated y en oncalcfields de detalles_facturas -->
Tb_DetallesTotal.Value:= Tb_DetallesCantidad.Value*Tb_DetallesPrecio_Unit.Value;
Cons_SubTotal.Close;
Cons_SubTotal.ParamByName('Factura').AsString:= DtMod_Adail.Tb_FacturasCod_Fac.Value;
Cons_SubTotal.Open;
Tb_FacturasSubTotal.Value:= Cons_SubTotalSubTotal.Value;
y con este código el campo Total de Tb_Detalles dices que no tiene ningún valor??? Si es así, estás seguro que los campos Precio_Unit o Cantidad no valen 0 alguno de los 2?? Podrías comprobarlo
Otra cosa, si estás en el OnCalcFields de Tb_Detalles, por qué actualizas el campo SubTotal de TbFacturas? Eso debería de ir en el OnCalcFields de TbFacturas (si el campo es calculado, claro)

Cita:

Letty comentó:
En cuanto a la última cuestión, me confundí, lo que pongo siempre es InsertRecord([‘1’,’dos’]); Me comí el record.
El rollo es: si pongo insertrecord... no hace falta poner el edit ni el post¿?
Bueno, no hace falta poner Insert y Post. Fíjate que digo Insert y no Edit. Como te comentaba en el mensaje anterior, Edit es para modificar un registro, y lo que tu quieres es añadir => Insert o Append.

Letty 07-11-2003 10:12:26

Muchas gracias de nuevo.
Tanto cantidad como precio unitario tenían valores distintos de 0. Lo te el subtotal en la tabla de detalles, lo puse así para k al actualizar detalles me calculara ese campo de facturas, si no lo pongo en el oncalcfields de facturas no va luego?
Hasta pronto.

__cadetill 07-11-2003 10:46:47

Pues es muy extraño que si los 2 valores son distintos de 0, no te de el resultado de la operación. Mira a poner un punto de tuptura (BreakPoint) en este evento y comprueba, primero de que salte y segundo los valores que toman los campos que intervienen

El tema de la otra tabla que actualizas..... si es un campo calculado, no se, no lo he probado nunca, pero diría que no debería de funcionarte. Si es un campo físico.... te fata un Edit - Post del registro, sino te tendría que dar un error :confused:

Letty 07-11-2003 10:58:36

Ya toy akí otra vez!, a ver si pongo insertrecord([valores]) no me los mete en la base, sólo cuando le da la gana, si después de esto pongo applyupdates pues creo k mete más pero a veces tampoco me los mete.... esto no es normal!:mad:

Ya sé lo que pasaba con el total de detalles, yo tengo el campo calculado y realmente me lo calcula pero luego cuando lo muestro lo hago con una consulta en sql k pilla los datos directamente de la tabla, y claro, ahora puse el total como campo en tabla, pero en la tabla física ese campo tiene valor nulo. Por eso antes me ponía los nulos, como hago para k me modifique el valor en la tabla, porque eso lo voy a tener k hacer también después en facturas para el subtotal.... al insertar en la tabla los valores, k se debe poner en el campo calculado? :confused:

Espero no dar mucho más la lata :p , pk si no.. vamos a acabar mal, y yo de analfabeta aun por encima!:rolleyes: . Chao.

__cadetill 07-11-2003 11:19:44

Bueno bueno, ante todo sosiego y calma :)

Cita:

Letty comentó:
...a ver si pongo insertrecord([valores]) no me los mete en la base, sólo cuando le da la gana, si después de esto pongo applyupdates pues creo k mete más pero a veces tampoco me los mete.... esto no es normal!:mad:
Pues no, no es normal, te los debería de añadir siempre. Bueno, si no te funciona eso, prueba a hacerlo a la manera tradicional. Es decir...

Código:

Tabla.Append;
Tabla.FieldByName('Nombre_Campo1').AsXXX := ElQueSea;
Tabla.FieldByName('Nombre_Campo2').AsXXX := ElQueSea;
........
Tabla.Post;

Donde XXX es el tipo de datos del campo, es decir String, Integer, Float,......

Cita:

Letty comentó:
Ya sé lo que pasaba con el total de detalles, yo tengo el campo calculado y realmente me lo calcula pero luego cuando lo muestro lo hago con una consulta en sql k pilla los datos directamente de la tabla, y claro, ahora puse el total como campo en tabla, pero en la tabla física ese campo tiene valor nulo. Por eso antes me ponía los nulos, como hago para k me modifique el valor en la tabla, porque eso lo voy a tener k hacer también después en facturas para el subtotal.... al insertar en la tabla los valores, k se debe poner en el campo calculado? :confused:
Bueno, almenos hemos encontrado el problema :)
Bien, si quieres coger el campo de la tabla, te aconsejo que primero de todo lo informes. Para ello sólo has de lanzar un pequeño SQL desde donde quieras (por ejemplo el SQL-Explorer)

Código:

update Tabla_Detalle
set Total = Quantidad * Precio

Y ya lo tendrás informado ;)


La franja horaria es GMT +2. Ahora son las 17:26:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi