Browse Source

* Clear aggregate list on first pass initialization of aggregate variable (bug ID 0033629)

git-svn-id: trunk@38810 -
michael 7 years ago
parent
commit
2a80d2ada0
1 changed files with 13 additions and 4 deletions
  1. 13 4
      packages/fcl-report/src/fpreport.pp

+ 13 - 4
packages/fcl-report/src/fpreport.pp

@@ -22,7 +22,7 @@ unit fpreport;
 // Global debugging
 // Global debugging
 { $define gdebug}
 { $define gdebug}
 // Separate for aggregate variables
 // Separate for aggregate variables
-{ $define gdebuga}
+{$define gdebuga}
 
 
 interface
 interface
 
 
@@ -1450,6 +1450,7 @@ type
     FResetValueExpressionNode: TFPExprNode;
     FResetValueExpressionNode: TFPExprNode;
     FDataName : String;
     FDataName : String;
     procedure CheckType(aType: TResultType);
     procedure CheckType(aType: TResultType);
+    procedure ClearAggregateValues;
     function GetAsBoolean: Boolean;
     function GetAsBoolean: Boolean;
     function GetAsCurrency: Currency;
     function GetAsCurrency: Currency;
     function GetAsDateTime: TDateTime;
     function GetAsDateTime: TDateTime;
@@ -3190,8 +3191,18 @@ begin
 end;
 end;
 
 
 destructor TFPReportVariable.Destroy;
 destructor TFPReportVariable.Destroy;
+begin
+  ClearAggregateValues;
+  FAggregateValues.Free;
+  ReleaseExpressionNodes;
+  inherited Destroy;
+end;
+
+procedure TFPReportVariable.ClearAggregateValues;
+
 var
 var
   lResult: PFPExpressionResult;
   lResult: PFPExpressionResult;
+
 begin
 begin
   While FAggregateValues.Count >0 do
   While FAggregateValues.Count >0 do
   begin
   begin
@@ -3199,9 +3210,6 @@ begin
     Dispose(lResult);
     Dispose(lResult);
     FAggregateValues.Delete(FAggregateValues.Count-1);
     FAggregateValues.Delete(FAggregateValues.Count-1);
   end;
   end;
-  FAggregateValues.Free;
-  ReleaseExpressionNodes;
-  inherited Destroy;
 end;
 end;
 
 
 procedure TFPReportVariable.SaveValue;
 procedure TFPReportVariable.SaveValue;
@@ -3228,6 +3236,7 @@ begin
   fAggregateValuesIndex:=0;
   fAggregateValuesIndex:=0;
   if Not IsFirstPass then
   if Not IsFirstPass then
     exit;
     exit;
+  ClearAggregateValues;
   Expr.Expression:=Expression;
   Expr.Expression:=Expression;
   Expr.ExtractNode(FExpressionNode);
   Expr.ExtractNode(FExpressionNode);
   FIsAggregate:=FExpressionNode.IsAggregate;
   FIsAggregate:=FExpressionNode.IsAggregate;