浏览代码

优化速度,审核比较,只显示本期。
测试项目,佛清从1标16期,50秒优化20秒

MaiXinRong 9 年之前
父节点
当前提交
336cdf4940
共有 5 个文件被更改,包括 160 次插入26 次删除
  1. 6 7
      DataModules/PhaseCompareDm.pas
  2. 1 0
      DataModules/StageCompareDm.dfm
  3. 44 18
      DataModules/StageCompareDm.pas
  4. 1 1
      Frames/ProjectFme.pas
  5. 108 0
      Units/mDataRecord.pas

+ 6 - 7
DataModules/PhaseCompareDm.pas

@@ -110,7 +110,8 @@ type
 implementation
 
 uses
-  ProjectData, PhaseData, StageDm, StageCompareDm, UtilMethods;
+  ProjectData, PhaseData, StageDm, StageCompareDm, UtilMethods,
+  ProjectProperty;
 
 {$R *.dfm}
 
@@ -126,6 +127,7 @@ begin
   vColumn.LookupKeyFields := 'BillsID';
   vColumn.LookupResultField := Format('Quantity%d', [AStageIndex]);
   vColumn.LookupDataSet := TProjectData(FProjectData).PhaseData.StageCompareData.sddStageCompare;
+  vColumn.DisplayFormat := TProjectData(FProjectData).ProjProperties.QuantityFormat;
 
   vColumn := sdvPhaseCompare.Columns.Add;
   vColumn.FieldName := Format('TotalPrice%d', [AStageIndex]);
@@ -133,6 +135,7 @@ begin
   vColumn.LookupKeyFields := 'BillsID';
   vColumn.LookupResultField := Format('TotalPrice%d', [AStageIndex]);
   vColumn.LookupDataSet := TProjectData(FProjectData).PhaseData.StageCompareData.sddStageCompare;
+  vColumn.DisplayFormat := TProjectData(FProjectData).ProjProperties.TotalPriceFormat;
 end;
 
 procedure TPhaseCompareData.ClearStageColumn;
@@ -241,12 +244,8 @@ procedure TPhaseCompareData.sdvPhaseCompareGetText(var Text: String;
   ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
   DisplayText: Boolean);
 begin
-  if (Pos('TotalPrice', AColumn.FieldName) > 0) or
-     (Pos('Quantity', AColumn.FieldName) > 0) then
-  begin
-    if Assigned(AValue) and (AValue.AsFloat = 0) then
-      Text := '';
-  end;
+  if Assigned(AValue) and (AValue.DataType = ftFloat) and (AValue.AsFloat = 0) then
+    Text := '';
 end;
 
 end.

+ 1 - 0
DataModules/StageCompareDm.dfm

@@ -12,6 +12,7 @@ object StageCompareData: TStageCompareData
   object sddStageCompare: TsdDataSet
     Active = False
     Provider = sdpStageCompare
+    OnGetRecordClass = sddStageCompareGetRecordClass
     Left = 72
     Top = 96
     FieldListData = {

+ 44 - 18
DataModules/StageCompareDm.pas

@@ -8,7 +8,7 @@ unit StageCompareDm;
 interface
 
 uses
-  SysUtils, Classes, sdDB, sdProvider, ADODB;
+  SysUtils, Classes, sdDB, sdProvider, ADODB, mDataRecord;
 
 const
   TableDeleteSql = 'Drop Table StageCompare';
@@ -40,10 +40,29 @@ const
               '    Set S.Quantity%d = A.GatherQuantity, S.TotalPrice%d = A.GatherTotalPrice'+
               '  Where S.BillsID = A.BillsID';
 
+  DeleteCacheSql = 'Delete From StageCompare Where '+
+                   '  (IsNull(Quantity0) or Quantity0 = 0) and (IsNull(TotalPrice0) or TotalPrice0 = 0)'+
+                   '   and (IsNull(Quantity1) or Quantity1 = 0) and (IsNull(TotalPrice1) or TotalPrice1 = 0)'+
+                   '   and (IsNull(Quantity2) or Quantity2 = 0) and (IsNull(TotalPrice2) or TotalPrice2 = 0)'+
+                   '   and (IsNull(Quantity3) or Quantity3 = 0) and (IsNull(TotalPrice3) or TotalPrice3 = 0)'+
+                   '   and (IsNull(Quantity4) or Quantity4 = 0) and (IsNull(TotalPrice4) or TotalPrice4 = 0)'+
+                   '   and (IsNull(Quantity5) or Quantity5 = 0) and (IsNull(TotalPrice5) or TotalPrice5 = 0)'+
+                   '   and (IsNull(Quantity6) or Quantity6 = 0) and (IsNull(TotalPrice6) or TotalPrice6 = 0)'+
+                   '   and (IsNull(Quantity7) or Quantity7 = 0) and (IsNull(TotalPrice7) or TotalPrice7 = 0)'+
+                   '   and (IsNull(Quantity8) or Quantity8 = 0) and (IsNull(TotalPrice8) or TotalPrice8 = 0)'+
+                   '   and (IsNull(Quantity9) or Quantity9 = 0) and (IsNull(TotalPrice9) or TotalPrice9 = 0)'+
+                   '   and (IsNull(Quantity10) or Quantity10 = 0) and (IsNull(TotalPrice10) or TotalPrice10 = 0)'+
+                   '   and (IsNull(Quantity11) or Quantity11 = 0) and (IsNull(TotalPrice11) or TotalPrice11 = 0)'+
+                   '   and (IsNull(Quantity12) or Quantity12 = 0) and (IsNull(TotalPrice12) or TotalPrice12 = 0)'+
+                   '   and (IsNull(Quantity13) or Quantity13 = 0) and (IsNull(TotalPrice13) or TotalPrice13 = 0)'+
+                   '   and (IsNull(Quantity14) or Quantity14 = 0) and (IsNull(TotalPrice14) or TotalPrice14 = 0)';
+
 type
   TStageCompareData = class(TDataModule)
     sdpStageCompare: TsdADOProvider;
     sddStageCompare: TsdDataSet;
+    procedure sddStageCompareGetRecordClass(
+      var ARecordClass: TsdRecordClass);
   private
     FPhaseData: TObject;
 
@@ -120,27 +139,27 @@ end;
 
 function TStageCompareData.HasPhaseData(AID: Integer): Boolean;
 var
-  Rec: TsdDataRecord;
+  Rec: TStageCompareRecord;
 begin
   Result := False;
-  Rec := sddStageCompare.FindKey('idxID', AID);
+  Rec := TStageCompareRecord(sddStageCompare.FindKey('idxID', AID));
   if not Assigned(Rec) then Exit;
 
-  Result := (Rec.ValueByName('TotalPrice0').AsFloat <> 0)
-         or (Rec.ValueByName('TotalPrice1').AsFloat <> 0)
-         or (Rec.ValueByName('TotalPrice2').AsFloat <> 0)
-         or (Rec.ValueByName('TotalPrice3').AsFloat <> 0)
-         or (Rec.ValueByName('TotalPrice4').AsFloat <> 0)
-         or (Rec.ValueByName('TotalPrice5').AsFloat <> 0)
-         or (Rec.ValueByName('TotalPrice6').AsFloat <> 0)
-         or (Rec.ValueByName('TotalPrice7').AsFloat <> 0)
-         or (Rec.ValueByName('TotalPrice8').AsFloat <> 0)
-         or (Rec.ValueByName('TotalPrice9').AsFloat <> 0)
-         or (Rec.ValueByName('TotalPrice10').AsFloat <> 0)
-         or (Rec.ValueByName('TotalPrice11').AsFloat <> 0)
-         or (Rec.ValueByName('TotalPrice12').AsFloat <> 0)
-         or (Rec.ValueByName('TotalPrice13').AsFloat <> 0)
-         or (Rec.ValueByName('TotalPrice14').AsFloat <> 0);
+  Result := (Rec.TotalPrice0.AsFloat <> 0)
+         or (Rec.TotalPrice1.AsFloat <> 0)
+         or (Rec.TotalPrice2.AsFloat <> 0)
+         or (Rec.TotalPrice3.AsFloat <> 0)
+         or (Rec.TotalPrice4.AsFloat <> 0)
+         or (Rec.TotalPrice5.AsFloat <> 0)
+         or (Rec.TotalPrice6.AsFloat <> 0)
+         or (Rec.TotalPrice7.AsFloat <> 0)
+         or (Rec.TotalPrice8.AsFloat <> 0)
+         or (Rec.TotalPrice9.AsFloat <> 0)
+         or (Rec.TotalPrice10.AsFloat <> 0)
+         or (Rec.TotalPrice11.AsFloat <> 0)
+         or (Rec.TotalPrice12.AsFloat <> 0)
+         or (Rec.TotalPrice13.AsFloat <> 0)
+         or (Rec.TotalPrice14.AsFloat <> 0);
 end;
 
 procedure TStageCompareData.InsertLastesyStageData(AIndex: Integer;
@@ -175,6 +194,7 @@ begin
       for iStage := 0 to AuditCount - 1 do
         UpdateHistoryStageData(iStage, StageTableName[iStage]);
   end;
+  ExecuteSql(DeleteCacheSql);
 end;
 
 procedure TStageCompareData.UpdateHistoryStageData(AIndex: Integer;
@@ -186,4 +206,10 @@ begin
   ExecuteSql(sSql);
 end;
 
+procedure TStageCompareData.sddStageCompareGetRecordClass(
+  var ARecordClass: TsdRecordClass);
+begin
+  ARecordClass := TStageCompareRecord;
+end;
+
 end.

+ 1 - 1
Frames/ProjectFme.pas

@@ -1349,7 +1349,7 @@ end;
 procedure TProjectFrame.ExpandCurPhase;
 begin
   Screen.Cursor := crHourGlass;
-  UpdateSysProgress(0, '正在显示至项目节');
+  UpdateSysProgress(0, '正在显示至本期');
   try
     case jpsMain.ActivePageIndex of
       1: FBillsMeasureFrame.ExpandCurPhase;

+ 108 - 0
Units/mDataRecord.pas

@@ -376,6 +376,76 @@ type
     property RelaProjectGL: TProjectGLRecord read FRelaProjectGL write FRelaProjectGL;
   end;
 
+  TStageCompareRecord = class(TMeasureBaseRecord)
+  private
+    FID: TsdValue;
+    FQuantity0: TsdValue;
+    FTotalPrice0: TsdValue;
+    FQuantity1: TsdValue;
+    FTotalPrice1: TsdValue;
+    FQuantity2: TsdValue;
+    FTotalPrice2: TsdValue;
+    FQuantity3: TsdValue;
+    FTotalPrice3: TsdValue;
+    FQuantity4: TsdValue;
+    FTotalPrice4: TsdValue;
+    FQuantity5: TsdValue;
+    FTotalPrice5: TsdValue;
+    FQuantity6: TsdValue;
+    FTotalPrice6: TsdValue;
+    FQuantity7: TsdValue;
+    FTotalPrice7: TsdValue;
+    FQuantity8: TsdValue;
+    FTotalPrice8: TsdValue;
+    FQuantity9: TsdValue;
+    FTotalPrice9: TsdValue;
+    FQuantity10: TsdValue;
+    FTotalPrice10: TsdValue;
+    FQuantity11: TsdValue;
+    FTotalPrice11: TsdValue;
+    FQuantity12: TsdValue;
+    FTotalPrice12: TsdValue;
+    FQuantity13: TsdValue;
+    FTotalPrice13: TsdValue;
+    FQuantity14: TsdValue;
+    FTotalPrice14: TsdValue;
+  protected
+    procedure DoAfterAddFields; override;
+  public
+    property ID: TsdValue read FID;
+    property Quantity0: TsdValue read FQuantity0;
+    property TotalPrice0 : TsdValue read FTotalPrice0;
+    property Quantity1: TsdValue read FQuantity0;
+    property TotalPrice1 : TsdValue read FTotalPrice0;
+    property Quantity2: TsdValue read FQuantity0;
+    property TotalPrice2 : TsdValue read FTotalPrice0;
+    property Quantity3: TsdValue read FQuantity0;
+    property TotalPrice3: TsdValue read FTotalPrice0;
+    property Quantity4: TsdValue read FQuantity0;
+    property TotalPrice4 : TsdValue read FTotalPrice0;
+    property Quantity5: TsdValue read FQuantity0;
+    property TotalPrice5 : TsdValue read FTotalPrice0;
+    property Quantity6: TsdValue read FQuantity0;
+    property TotalPrice6 : TsdValue read FTotalPrice0;
+    property Quantity7: TsdValue read FQuantity0;
+    property TotalPrice7 : TsdValue read FTotalPrice0;
+    property Quantity8: TsdValue read FQuantity0;
+    property TotalPrice8 : TsdValue read FTotalPrice0;
+    property Quantity9: TsdValue read FQuantity0;
+    property TotalPrice9 : TsdValue read FTotalPrice0;
+    property Quantity10: TsdValue read FQuantity0;
+    property TotalPrice10 : TsdValue read FTotalPrice0;
+    property Quantity11: TsdValue read FQuantity0;
+    property TotalPrice11 : TsdValue read FTotalPrice0;
+    property Quantity12: TsdValue read FQuantity0;
+    property TotalPrice12 : TsdValue read FTotalPrice0;
+    property Quantity13: TsdValue read FQuantity0;
+    property TotalPrice13 : TsdValue read FTotalPrice0;
+    property Quantity14: TsdValue read FQuantity0;
+    property TotalPrice14 : TsdValue read FTotalPrice0;
+
+  end;
+
 implementation
 
 { TBillsRecord }
@@ -599,4 +669,42 @@ begin
     AValue.AsInteger := AInt;
 end;
 
+{ TStageCompareRecord }
+
+procedure TStageCompareRecord.DoAfterAddFields;
+begin
+  inherited;
+  FID := ValueByName('ID');
+  FQuantity0 := ValueByName('Quantity0');
+  FTotalPrice0 := ValueByName('TotalPrice0');
+  FQuantity1 := ValueByName('Quantity1');
+  FTotalPrice1 := ValueByName('TotalPrice1');
+  FQuantity2 := ValueByName('Quantity2');
+  FTotalPrice2 := ValueByName('TotalPrice2');
+  FQuantity3 := ValueByName('Quantity3');
+  FTotalPrice3 := ValueByName('TotalPrice3');
+  FQuantity4 := ValueByName('Quantity4');
+  FTotalPrice4 := ValueByName('TotalPrice4');
+  FQuantity5 := ValueByName('Quantity5');
+  FTotalPrice5 := ValueByName('TotalPrice5');
+  FQuantity6 := ValueByName('Quantity6');
+  FTotalPrice6 := ValueByName('TotalPrice6');
+  FQuantity7 := ValueByName('Quantity7');
+  FTotalPrice7 := ValueByName('TotalPrice7');
+  FQuantity8 := ValueByName('Quantity8');
+  FTotalPrice8 := ValueByName('TotalPrice8');
+  FQuantity9 := ValueByName('Quantity9');
+  FTotalPrice9 := ValueByName('TotalPrice9');
+  FQuantity10 := ValueByName('Quantity10');
+  FTotalPrice10 := ValueByName('TotalPrice10');
+  FQuantity11 := ValueByName('Quantity11');
+  FTotalPrice11 := ValueByName('TotalPrice11');
+  FQuantity12 := ValueByName('Quantity12');
+  FTotalPrice12 := ValueByName('TotalPrice12');
+  FQuantity13 := ValueByName('Quantity13');
+  FTotalPrice13 := ValueByName('TotalPrice13');
+  FQuantity14 := ValueByName('Quantity14');
+  FTotalPrice14 := ValueByName('TotalPrice14');
+end;
+
 end.