function GetTotal(DS: TDataSet): Currency;
var
BM: Pointer;
begin
Result := 0;
BM := DS.GetBookmark;
DS.DisableControls;
try
DS.First;
while not DS.Eof do
begin
Result := Result + DS.FieldByName('SUBTOTAL').AsCurrency;
DS.Next;
end;
finally
DS.EnableControls;
DS.GotoBookmark(BM);
DS.FreeBookmark(BM);
end;
end;