Ir al contenido


Foto

[RESUELTO] Como trabajar con campos calculados


  • Por favor identifícate para responder
3 respuestas en este tema

#1 anubis

anubis

    Advanced Member

  • Miembros
  • PipPipPip
  • 53 mensajes
  • LocationMéxico

Escrito 31 enero 2010 - 02:45

Hola

Estoy haciendo un programita donde hago ciertos calculos y tengo un problema con algunos campos calculados.

Intentaré explicarles, tengo 2 tablas una donde obtengo costos de materiales y otra donde tengo los diferentes descuentos dependiendo de algunas variables.

En la tabla donde quiero ir agregando productos tengo llaves foráneas hacia el ID del producto y el ID del descuento.

Para hacer esto estoy utilizando un IBDataSource donde agrego algunos campos.

Producto y TipoDescuento que son de tipo lookup
Importe, Descuento y Total de tipo Moneda y que los utilizo como campos calculados.

Finalmente tengo un DBGrid donde muestro los datos

Deberia mostrarse de esta forma.

Producto      TipoDescuento      Cantidad      Importe        Descuento      Total
PALO GOLF      NORMAL                1          $1,200.00        $120.00    $1,080.00
PELOTAS      MAYOREO                50        $    20.00        $300.00    $  700.00


Sin embargo me repite el ultimo dato capturado, lo que no se es porque si está obteniendo bien los datos dependiendo de su ID Producto y ID descuento se actualiza todos los registros con el mismo valor.

Producto      TipoDescuento      Cantidad      Importe        Descuento      Total
PALO GOLF      NORMAL                1          $    20.00            $6.00    $    14.00
PELOTAS      MAYOREO                50        $    20.00        $300.00    $  700.00


En el evento OnCalcFields estoy haciendo esto.



delphi
  1. procedure TDataModule2.ibVENTASCalcFields(DataSet: TDataSet);
  2. begin
  3.   ibVENTASImporte.Value := ibPRODUCTOSImporte.Value;
  4.   ibVENTASDescuento.Value := ibVENTASImporte.Value * ibDESCUENTOSPorcentaje.Value / 100;
  5.   ibVENTASTotal.Value := ibVENTASIMPORTE.Value - ibVENBTASDescuento.Value;
  6. end;



¿Que estos haciendo mal?

saludos


  • 0

#2 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 01 febrero 2010 - 08:00

Saludos.

A simple vista se ve que no estas multiplicando las cantidades por el importe.

Es extraño que muestre el mismo importe para distintos productos, a menos que en la base de datos este almacenado de esa manera, te exhorto a revisar la data y a cambiar el calculo incluyéndole la multiplicación por la cantidad.
  • 0

#3 pcicom

pcicom

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 267 mensajes
  • LocationMéxico

Escrito 01 febrero 2010 - 11:50


Producto      TipoDescuento      Cantidad      Importe        Descuento      Total
PALO GOLF      NORMAL                1          $    20.00            $6.00    $    14.00
PELOTAS      MAYOREO                50        $    20.00        $300.00    $  700.00



Lo que yo aprecio es que la tabla de PRODUCTOS no cambia con cada registro que lees, es decir no lo tienes relacionado con la tabla de VENTAS..

De tal forma que siempre el IMPORTE es $20..

SALUDOS,.

  • 0

#4 anubis

anubis

    Advanced Member

  • Miembros
  • PipPipPip
  • 53 mensajes
  • LocationMéxico

Escrito 01 febrero 2010 - 02:02

Saludos.

A simple vista se ve que no estas multiplicando las cantidades por el importe.

Es extraño que muestre el mismo importe para distintos productos, a menos que en la base de datos este almacenado de esa manera, te exhorto a revisar la data y a cambiar el calculo incluyéndole la multiplicación por la cantidad.


Gracias Rolphy Reyes, si, no puse el código donde hace la multiplicación, pero si lo tiene. Muchas gracias.




Producto      TipoDescuento      Cantidad      Importe        Descuento      Total
PALO GOLF      NORMAL                1          $    20.00            $6.00    $    14.00
PELOTAS      MAYOREO                50        $    20.00        $300.00    $  700.00



Lo que yo aprecio es que la tabla de PRODUCTOS no cambia con cada registro que lees, es decir no lo tienes relacionado con la tabla de VENTAS..

De tal forma que siempre el IMPORTE es $20..

SALUDOS,.


Muchas gracias pcicom

Si, tenias razón me faltaba ese dato, pequeño detalle que me traía loco :)

Al final quedó así



delphi
  1. procedure TDataModule2.ibVENTASCalcFields(DataSet: TDataSet);
  2. begin
  3.  
  4.   IBQuery1.Close;
  5.   IBQuery1.ParamByName('Producto').Value := ibVENTASProducto.Value;
  6.   IBQuery1.Open;
  7.  
  8.   ibVENTASImporte.Value := IBQuery1Importe.Value;
  9.  
  10.   ibVENTASDescuento.Value := (ibVENTASImporte.Value * ibDESCUENTOSPorcentaje.Value / 100)  * ibVENTASCantidad.Value;
  11.  
  12.   ibVENTASTotal.Value := (ibVENTASIMPORTE.Value - ibVENBTASDescuento.Value)  * ibVENTASCantidad.Value;
  13. end;



saludos y gracias.

  • 0




IP.Board spam blocked by CleanTalk.