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
if (dataset.state in [dsEdit, dsInsert])then
begin
Dataset.FieldValues['SUBTOTAL0'] := Dataset.FieldByName('BASE0').AsFloat;
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;
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;
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