Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-09-2005
pepitu pepitu is offline
Miembro
 
Registrado: sep 2005
Posts: 25
Poder: 0
pepitu Va por buen camino
PROBLEMA AL CALCULAR CAMPOS (OnCalcFields)

Hola de nuevo (es la 2ª pregunta de hoy al foro).
He estado buscando en los foros sobre el problema que tengo pero sigo sin hallar la solución.
Me viene en mente uno de los mensajes leidos que rezaba:"Que pena tener que preguntar...."...
La otra cara de la moneda es que la solución a mi duda....posiblemente sea muy fácil y no le lleve mucho tiempo (a quien responda).

Tengo un datasource, database y ttable en un datamodulo (DM1)....bien conectados. Estoy con Paradox.
En el form principal tengo un grid y una serie de botones para añadir Facturas, borrarlas, editarlas, buscarlas, ver los detalles (dbedits), etc...

Al editar o añadir una factura, el usuario pondrá los valores de las distintas bases imponibles (BASE0, BASE4, BASE7...) a partir de los cuales se deben calcular otros campos (segun el iva de cada base se calculará los SUBTOTALES y las sumas de los mismos).
El problema lo tengo en esos campos a calcular, por lo que en el evento OnCalcFields del TTable (TableFC) pongo:

Código Delphi [-]
procedure TDM1.TableFCCalcFields(DataSet: TDataSet);
 begin
   {todo el código lo pongo bajo el siguiente condicional
   para que no dé error si el dataset no está en edit.}
   if (dataset.state in [dsEdit, dsInsert])then
   begin
 
     // PARA LA BASE0
     //Como no hay IVA, el subtotal 0% = Base0%
     Dataset.FieldValues['SUBTOTAL0'] := Dataset.FieldByName('BASE0').AsFloat;
 
     //PARA LA BASE4
     {pongo un codicional para evitar algun error en el
     cálculo si el usuario no ha puesto valor a BASE4}
     if TableFC.FieldByName('BASE4').Value <> 0 then
     begin
       Dataset.FieldValues['IVA4'] := Dataset.FieldByName('BASE4').AsFloat * 4 / 100;
       Dataset.FieldValues['SUBTOTAL4'] := Dataset.FieldByName('BASE4').AsFloat
         + Dataset.FieldByName('IVA4').AsFloat;
     end;
 
    //PARA LA BASE7
    {...parecido al anterior}
 
    //PARA LA BASE16
    {...parecido al anterior}
 
    {PARA BASEINVERS: es la base para inversiones. Su IVA puede
    variar (el usuario escoge un valor de un combobox:CBPerIvaInv)}
    if DataSet.FieldValues['BASEINVERS'] > 0 then
    begin
      If StrToInt(Form1.CBPerIvaInv.text) > 0 then
        Dataset.FieldValues['IVAINVERS'] := Dataset.FieldByName('BASEINVERS').AsFloat *
          StrToInt(Form1.CBPerIvaInv.text) / 100
      else
        Dataset.FieldValues['IVAINVERS'] := Dataset.FieldByName('BASEINVERS').AsFloat;
      Dataset.FieldValues['SUBTOTINV'] := Dataset.FieldByName('BASEINVERS').AsFloat +
        Dataset.FieldByName('IVAINVERS').AsFloat;
    end;
 
   //PARA LA SUMA DE SUBTOTALES E IVA'S
   {...parecido. Sin condicionales sumo todos los distintos IVA's del
   registro. Y lo mismo para SUBTOTALES (su suma será el total de la factura)}
 
   {...}
 end;
Me compila bien pero al ejecutar sale error del tipo "stack overflow" señalando error (supongo) en el primer condicional situado debajo de: "//PARA LA BASE4".
Suponiendo que el error podría estar en ese condicional...."a la desesperada" he probado con expresiones del tipo:

Código Delphi [-]
 if DataSet.FieldValues['BASE4'] > 0 then
o
Código Delphi [-]
if Dataset.FieldByName('BASE4').AsFloat > 0 then
pero con igual mal resultado.

Otra cosa....Supongo que no me va a redondear los cálculos a 2 decimales, no?
Gracias

Última edición por dec fecha: 21-09-2005 a las 23:37:08. Razón: ¡¡Encerrad el código fuente entre las etiquetas [DELPHI] ... [/DELPHI]!!
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 15:52:59.


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
Copyright 1996-2007 Club Delphi