Ver Mensaje Individual
  #2  
Antiguo 11-05-2006
freelance freelance is offline
Registrado
 
Registrado: may 2006
Posts: 9
Reputación: 0
freelance Va por buen camino
Pues ...

No te hace falta hacer tal cosa.

En el evento onBeforePost del Dataset haz el mismo cálculo que haces en el evento OnCalcFields sobre el campo calculado pero usando el campo de la tabla en donde quieres dejar el valor de dicho calculo.

De todas maneras, desde mi punto de vista, es un error el almacenar el total de la suma de las lineas detail en la master, ya que si lo haces, redundas información y "eso va contra las buenas costumbres".
Claro, es cómodo tener el "valor" disponible en la master para ser fácilmente mostrado, pero no es un buen sistema.
El sistema correcto es que cada vez que necesites mostrar el valor de la suma de las líneas detalle utilizes el sistema de "campo calculado" en la master y que sea en el método onCalcFields de dicha master dónde sumes cada una de las lineas detalle sobre dicho campo calculado, recorriendo una a una las líneas detalle para ir sumando. Además en esa suma puedes utilizar el campo calculado de las líneas detalle (el que te calcula el total de la línea) o realizar el cálculo de cada línea nuevamente.
Eso sí, debes hacerlo utilizando otro Dataset de lineas detail diferente al asociado al master para realizar el cálculo pues si no, al ir avanzando en los registros de dicho Dataset provocaras que se refresquen los controles DB del formulario que tengan asociado dicho Dataset o un Datasource del mismo.
Recuerda que ese Dataset "auxiliar" que utilices, debe tamiben tener asociado como MasterSource el Datasource de la Master, o bien, utilizar SetRange para delimitar los registros que intervienen en la suma.

Tambíen es buena idea (ya que tendrás que utilizar ese "total de suma de líneas detail es más de un lugar (otros Forms, Reports, etc...) y para no tener que repetir en cada sitio el mismo procedimiento) el que esbribas una función de librería que haga la suma de las líneas detalle y así lo podrás utilizar en cuantos sitios quieras (en los OncalcFields de la master, en Reports, etc...)

Espero haberte ayudado ...
Responder Con Cita