Ver Mensaje Individual
  #3  
Antiguo 09-02-2011
delphijm delphijm is offline
Miembro
 
Registrado: abr 2008
Posts: 47
Reputación: 0
delphijm Va por buen camino
Hola,

No son exactamente tablas de facturas - lineas pero parecido... Te comento lo que hago como si fueran facturas - lineas...

Para cada registro de una factura tengo en el dataset de detalle sus lineas...
Cada registro de lineas tiene como datos el codigo del articulo y la cantidad...
El dataset maestro lo tengo vinculado a un TDBGrid...
En este TDBGrid quiero mostrar, ademas de la informacion de la cabecera, el total de cantidad de cada codigo de articulo, de esta forma:

Factura + Cliente + FechaFact + cantidArticulo_A + cantidArticulo_B

Los campos cantidArticulo_A y cantidArticulo_B no estan en la tabla maestra, pero los añado en tiempo de ejecucion como campos fkCalculated porque si los añado como campos fkData, al hacer un post intentaria actualizar la BBDD y no son campos de ella.

Hasta aqui aparentemente bien...

El tema esta en que en el evento AfterOpen de la tabla maestra programo lo necesario para llenar estos nuevos campos en funcion de los registros de la tabla detalle de lineas de factura.

Lo que hago es un bucle while de la tabla maestra y para cada registro hago un bucle anidado while de los registros de la tabla de detalle...
De la tabla de detalle voy acumulando las cantidades por codigo de articulo y cuando acabo este bucle detalle asigno los valores a los nuevos campos de totales de la tabla maestra...

En el entorno de desarrollo tengo dos registros de factura cada uno de ellos con 2 o 3 lineas de detalle...

El tema esta en que me acumula los campos de totales bien para cada factura pero cuando se visualiza el dataset maestro en el TDBGrid en lugar de ver los dos registros de las 2 facturas lo que veo son 20 o 30 facturas que son las dos que deberia haber pero repetidas constantemente.

He observado que el problema esta en el bucle anidado que uso para recorrer el dataset de las lineas...

Se trata de un bucle asi:
cdsLin.first
while not cdsLin.eof do
begin
.... sentencias....
next;
end;

Si elimino las sentencias continua el problema...
Pero si elimino la linea de cdsLin.first me funciona bien para la primera factura pero no para la/las siguentes porque supongo que el puntero de la tabla de detalle se ha posicionado al final en la primera pasada...

No se si el problema puede estar en que los campos que he añadido son de tipo fkCalculated i estos solo estan pensados para asignarles valor en el evento OnCalcFields o deberia replantearme otro evento diferente de AfterOpen de la tabla maestra para hacer estos calculos?

La base de datos que uso es MySQL pero en principio no me interesa que estos totales me vengan ya desde la base de datos porque las cantidades de las lineas van a poder modificarlas el usuario y entonces debere de recalcularlos en local.

No se si esto da alguna pista adicional???

Un saludo y gracias
Responder Con Cita