Pues yo haría campos calculados...
Agregas los campos calculados a la tabla cabecera
En el evento OnGetText de cada campo abres el detalle, lo recorres y el resultado se lo asignas a Text.
Código Delphi
[-]
procedure TDataModule.TablaCabeceraTOTALGetText(Sender: TField; var Text: string; DisplayText: boolean);
var
Q : TQuery;
Total : Real;
begin
Q := TQuery.Create(nil) ;
try
try
SQL.Text := 'SELECT SUM(IMPORTE) FROM TABLA_DETALLE WHERE CABECERA=?CABECERA';
Params.ByName['CABECERA'].AsInteger := TablaCabeceraCABECERA.AsInteger;
ExecSQL;
Total := FieldByName['SUM'].AsFloat;
except
Total := 0;
end
finally
Q:Free;
end;
Text := FormatFloat(Total);
end;