anchor.diff:    public
       constructor Create;
       procedure Assign(const aSource : TmSummaryDefinition);
  +    class function CheckOperatorCompatibility (const aOperator : TmSummaryOperator; const aFieldType : TFieldType) : boolean;
   
       property FieldName : string read FFieldName write SetFieldName;
       property Caption : string read FCaption write FCaption;
  
positive.code: 
    function TmSummaryOperatorToString (const aOperator : TmSummaryOperator) : String;
  
  implementation
  
  uses
  
negative.code:   FCaption := aSource.FCaption;
    FFieldType := aSource.FFieldType;
    FSummaryOperator := aSource.FSummaryOperator;
  end;
  
  class function TmSummaryDefinition.CheckOperatorCompatibility(const aOperator: TmSummaryOperator; const aFieldType: TFieldType): boolean;
  begin
    // soCount, soCountDistinct, soSum, soMax, soMin, soAverage, soAverageNotNull
    if (aOperator = soSum) or (aOperator = soAverage) or (aOperator = soAverageNotNull) then
      Result := aFieldType in [ftInteger, ftFloat, ftCurrency, ftLargeint, ftSmallint]
    else
      Result := true;
  end;
  
  { TmSummaryValues }
  