MaiXinRong пре 5 година
родитељ
комит
cd0e656b83

+ 111 - 14
DataModules/ReportMemoryDm/rmBillsGatherDm.dfm

@@ -984,11 +984,6 @@ object rmBillsGatherData: TrmBillsGatherData
         DataType = ftFloat
       end
       item
-        Name = 'DgnQuantityCompare3'
-        DataType = ftString
-        Size = 20
-      end
-      item
         Name = 'DgnQuantity1Compare3'
         DataType = ftFloat
       end
@@ -997,6 +992,11 @@ object rmBillsGatherData: TrmBillsGatherData
         DataType = ftFloat
       end
       item
+        Name = 'DgnQuantityCompare3'
+        DataType = ftString
+        Size = 20
+      end
+      item
         Name = 'B_Code'
         DataType = ftString
         Size = 50
@@ -1029,6 +1029,56 @@ object rmBillsGatherData: TrmBillsGatherData
       item
         Name = 'FinalDgnQty2'
         DataType = ftFloat
+      end
+      item
+        Name = 'FinalDgnQtyA'
+        DataType = ftString
+        Size = 50
+      end
+      item
+        Name = 'FinalDgnQtyA1'
+        DataType = ftFloat
+      end
+      item
+        Name = 'FinalDgnQtyA2'
+        DataType = ftFloat
+      end
+      item
+        Name = 'PASQuantity'
+        DataType = ftFloat
+      end
+      item
+        Name = 'PASTotalPrice'
+        DataType = ftFloat
+      end
+      item
+        Name = 'PASDgnQuantity'
+        DataType = ftString
+        Size = 50
+      end
+      item
+        Name = 'PASDgnQuantity1'
+        DataType = ftFloat
+      end
+      item
+        Name = 'PASDgnQuantity2'
+        DataType = ftFloat
+      end
+      item
+        Name = 'PASDgnPrice'
+        DataType = ftFloat
+      end
+      item
+        Name = 'DgnPrice'
+        DataType = ftFloat
+      end
+      item
+        Name = 'FinalDgnPriceA'
+        DataType = ftFloat
+      end
+      item
+        Name = 'DifferPercent1'
+        DataType = ftFloat
       end>
     IndexDefs = <>
     Params = <>
@@ -1036,7 +1086,7 @@ object rmBillsGatherData: TrmBillsGatherData
     Left = 32
     Top = 80
     Data = {
-      010700009619E0BD010000001800000044000000000003000000010709586961
+      1E0800009619E0BD0100000018000000500000000000030000001E0809586961
       6E67436F64650100490000000100055749445448020002000A00064D75436F64
       650100490000000100055749445448020002000A00074A6965436F6465010049
       00000001000557494454480200020014000858694D75436F6465010049000000
@@ -1083,16 +1133,25 @@ object rmBillsGatherData: TrmBillsGatherData
       0200020014001444676E5175616E7469747931436F6D70617265320800040000
       0000001444676E5175616E7469747932436F6D70617265320800040000000000
       105175616E74697479436F6D7061726533080004000000000012546F74616C50
-      72696365436F6D706172653308000400000000001344676E5175616E74697479
-      436F6D706172653301004900000001000557494454480200020014001444676E
-      5175616E7469747931436F6D706172653308000400000000001444676E517561
-      6E7469747932436F6D7061726533080004000000000006425F436F6465010049
+      72696365436F6D706172653308000400000000001444676E5175616E74697479
+      31436F6D706172653308000400000000001444676E5175616E7469747932436F
+      6D706172653308000400000000001344676E5175616E74697479436F6D706172
+      6533010049000000010005574944544802000200140006425F436F6465010049
       000000010005574944544802000200320005507269636508000400000000000A
       504444676E507269636508000400000000000B43444444676E50726963650800
       0400000000000A414244676E507269636508000400000000000B46696E616C44
       676E51747901004900000001000557494454480200020014000C46696E616C44
       676E5174793108000400000000000C46696E616C44676E517479320800040000
-      0000000000}
+      0000000C46696E616C44676E5174794101004900000001000557494454480200
+      020032000D46696E616C44676E517479413108000400000000000D46696E616C
+      44676E517479413208000400000000000B5041535175616E7469747908000400
+      000000000D504153546F74616C507269636508000400000000000E5041534467
+      6E5175616E7469747901004900000001000557494454480200020032000F5041
+      5344676E5175616E746974793108000400000000000F50415344676E5175616E
+      746974793208000400000000000B50415344676E507269636508000400000000
+      000844676E507269636508000400000000000E46696E616C44676E5072696365
+      4108000400000000000E44696666657250657263656E74310800040000000000
+      0000}
     object cdsEstimateBillsXiangCode: TStringField
       FieldName = 'XiangCode'
       Size = 10
@@ -1270,15 +1329,15 @@ object rmBillsGatherData: TrmBillsGatherData
     object cdsEstimateBillsTotalPriceCompare3: TFloatField
       FieldName = 'TotalPriceCompare3'
     end
-    object cdsEstimateBillsDgnQuantityCompare3: TStringField
-      FieldName = 'DgnQuantityCompare3'
-    end
     object cdsEstimateBillsDgnQuantity1Compare3: TFloatField
       FieldName = 'DgnQuantity1Compare3'
     end
     object cdsEstimateBillsDgnQuantity2Compare3: TFloatField
       FieldName = 'DgnQuantity2Compare3'
     end
+    object cdsEstimateBillsDgnQuantityCompare3: TStringField
+      FieldName = 'DgnQuantityCompare3'
+    end
     object cdsEstimateBillsB_Code: TStringField
       FieldName = 'B_Code'
       Size = 50
@@ -1304,6 +1363,44 @@ object rmBillsGatherData: TrmBillsGatherData
     object cdsEstimateBillsFinalDgnQty2: TFloatField
       FieldName = 'FinalDgnQty2'
     end
+    object cdsEstimateBillsFinalDgnQtyA: TStringField
+      FieldName = 'FinalDgnQtyA'
+      Size = 50
+    end
+    object cdsEstimateBillsFinalDgnQtyA1: TFloatField
+      FieldName = 'FinalDgnQtyA1'
+    end
+    object cdsEstimateBillsFinalDgnQtyA2: TFloatField
+      FieldName = 'FinalDgnQtyA2'
+    end
+    object cdsEstimateBillsPASQuantity: TFloatField
+      FieldName = 'PASQuantity'
+    end
+    object cdsEstimateBillsPASTotalPrice: TFloatField
+      FieldName = 'PASTotalPrice'
+    end
+    object cdsEstimateBillsPASDgnQuantity: TStringField
+      FieldName = 'PASDgnQuantity'
+      Size = 50
+    end
+    object cdsEstimateBillsPASDgnQuantity1: TFloatField
+      FieldName = 'PASDgnQuantity1'
+    end
+    object cdsEstimateBillsPASDgnQuantity2: TFloatField
+      FieldName = 'PASDgnQuantity2'
+    end
+    object cdsEstimateBillsPASDgnPrice: TFloatField
+      FieldName = 'PASDgnPrice'
+    end
+    object cdsEstimateBillsDgnPrice: TFloatField
+      FieldName = 'DgnPrice'
+    end
+    object cdsEstimateBillsFinalDgnPriceA: TFloatField
+      FieldName = 'FinalDgnPriceA'
+    end
+    object cdsEstimateBillsDifferPercent1: TFloatField
+      FieldName = 'DifferPercent1'
+    end
   end
   object cdsProjectGclBills: TClientDataSet
     Active = True

+ 46 - 7
DataModules/ReportMemoryDm/rmBillsGatherDm.pas

@@ -32,11 +32,12 @@ type
     bgtG_Final06_1: 粤竣06-1表,bgtEstimate的特殊情况,仅汇总土地(固定id21),且汇总初步设计、施工图设计
                     可理解为bgtEstimate扩展为Fx,然后再限制为汇总固定id下的数据,汇总后的结果写入cdsEstimateBills
     bgtG_Final04: 粤竣04表,在bgtXmj的基础上增加了设计数量、经济指标等数据,且增加了一行公路基本造价汇总行
+    bgtQgcZj: 在bgtEstimate的基础上,汇总工程可行性研究数据,结果写入cdsEstimateBills
   ----------------------------------}
   TbgType = (bgtFx, bgtXmj, bgtGcl, bgtMultiXmj, bgtEstimate,
     bgtEstimate1, bgtFinal07, bgtFinal08, bgtFinal09, bgtFinal11,
     bgtFinal12, bgtFinal16, bgtFinal17, bgtFinal18, bgtFinal19,
-    bgtG_Final06_1, bgtG_Final04);
+    bgtG_Final06_1, bgtG_Final04, bgtQgcZj);
 
   TrmBillsGatherData = class(TDataModule)
     // 决算04, 05[竣04]
@@ -229,6 +230,18 @@ type
     cdsBGLFlowPrice: TFloatField;
     cdsBGLFlowTotalPrice: TFloatField;
     cdsBGLFlowBGTotalPrice: TFloatField;
+    cdsEstimateBillsPASQuantity: TFloatField;
+    cdsEstimateBillsPASTotalPrice: TFloatField;
+    cdsEstimateBillsPASDgnQuantity1: TFloatField;
+    cdsEstimateBillsPASDgnQuantity2: TFloatField;
+    cdsEstimateBillsPASDgnQuantity: TStringField;
+    cdsEstimateBillsPASDgnPrice: TFloatField;
+    cdsEstimateBillsDgnPrice: TFloatField;
+    cdsEstimateBillsFinalDgnPriceA: TFloatField;
+    cdsEstimateBillsDifferPercent1: TFloatField;
+    cdsEstimateBillsFinalDgnQtyA: TStringField;
+    cdsEstimateBillsFinalDgnQtyA1: TFloatField;
+    cdsEstimateBillsFinalDgnQtyA2: TFloatField;
   private
     FCacheTree: TReportCacheTree;
     FGclList: TGclGatherList;
@@ -323,7 +336,7 @@ begin
     // 项目节
     4: if ANode.Rec.ValueByName('B_Code').AsString <> '' then Exit;
   end;
-  if GatherType in [bgtXmj, bgtMultiXmj, bgtEstimate, bgtEstimate1, bgtFinal08, bgtFinal09] then
+  if GatherType in [bgtXmj, bgtMultiXmj, bgtEstimate, bgtEstimate1, bgtFinal08, bgtFinal09, bgtQgcZj] then
     if ANode.Rec.ValueByName('B_Code').AsString <> '' then Exit; // 仅汇总项目节
   ACur := AddBillsNode(ANode, AParent, AProjectIndex, ASelectProject);
   AddBills(ANode.FirstChild, ACur, AProjectIndex, ASelectProject);
@@ -368,7 +381,7 @@ begin
       Result.Units := ValueByName('Units').AsString;
     end;
 
-    if (GatherType in [bgtEstimate, bgtG_Final06_1]) and (ASelectProject.IsPD or ASelectProject.IsCDD) then
+    if (GatherType in [bgtEstimate, bgtG_Final06_1, bgtQgcZj]) and (ASelectProject.IsPD or ASelectProject.IsCDD or ASelectProject.IsPAS) then
     begin
       if ASelectProject.IsPD then
       begin
@@ -386,6 +399,14 @@ begin
         Result.CDDDesignQuantity2 := ValueByName('DgnQuantity2').AsFloat;
         Result.CDDDesignPrice := ValueByName('DgnPrice').AsFloat;
       end
+      else if ASelectProject.IsPAS then
+      begin
+        Result.PASQuantity := ValueByName('Quantity').AsFloat;
+        Result.PASTotalPrice := ValueByName('TotalPrice').AsFloat;
+        Result.PASDesignQuantity1 := ValueByName('DgnQuantity1').AsFloat;
+        Result.PASDesignQuantity2 := ValueByName('DgnQuantity2').AsFloat;
+        Result.PASDesignPrice := ValueByName('DgnPrice').AsFloat;
+      end;
     end
     else if (GatherType = bgtEstimate1) and ASelectProject.IsAB then
     begin
@@ -460,7 +481,7 @@ begin
         Result := cdsFxBills;
       bgtGcl: Result := cdsGclBills;
       bgtMultiXmj, bgtFinal16: Result := cdsProjectBills;
-      bgtEstimate, bgtEstimate1, bgtG_Final06_1: Result := cdsEstimateBills;
+      bgtEstimate, bgtEstimate1, bgtG_Final06_1, bgtQgcZj: Result := cdsEstimateBills;
       bgtFinal07, bgtFinal11, bgtFinal19: Result := cdsProjectGclBills;
       bgtFinal12: Result := cdsBGLFlow;
     end;
@@ -618,7 +639,7 @@ begin
       WriteGclNode;
     bgtMultiXmj, bgtFinal16:
       WriteProjectsData;
-    bgtEstimate, bgtEstimate1, bgtG_Final06_1:
+    bgtEstimate, bgtEstimate1, bgtG_Final06_1, bgtQgcZj:
       WriteEstimateData;
     bgtFinal07, bgtFinal11, bgtFinal19: // 07&11特别的,其中还写入了部分固定ID节点  !!丧心病狂的报表!!
       WriteProjectsGclData;
@@ -1129,7 +1150,7 @@ begin
     // 项目节
     4: if ANode.Rec.ValueByName('B_Code').AsString <> '' then Exit;
   end;
-  if GatherType in [bgtXmj, bgtMultiXmj, bgtEstimate, bgtEstimate1] then
+  if GatherType in [bgtXmj, bgtMultiXmj, bgtEstimate, bgtEstimate1, bgtQgcZj] then
     if ANode.Rec.ValueByName('B_Code').AsString <> '' then Exit;
   ACur := AddBillsNode(ANode, AParent, AProjectIndex, ASelectProject);
   AddBills(ANode.FirstChild, ACur, AProjectIndex, ASelectProject);
@@ -1153,7 +1174,7 @@ end;
 
 procedure TrmBillsGatherData.CalculateGatherData;
 begin
-  if GatherType in [bgtFinal08, bgtFinal16, bgtEstimate, bgtEstimate1, bgtG_Final04] then
+  if GatherType in [bgtFinal08, bgtFinal16, bgtEstimate, bgtEstimate1, bgtG_Final04, bgtQgcZj] then
     FCacheTree.ReCalcGatherData;
   if GatherType in [bgtFinal07, bgtFinal11, bgtFinal19] then
     FGclList.ReCalcualteGatherNode;
@@ -1231,6 +1252,7 @@ begin
   cdsEstimateBillsDgnQuantity2.AsFloat := ANode.DesignQuantity2;
   cdsEstimateBillsDgnQuantity.AsString :=
       GetDgnQuantity(cdsEstimateBillsDgnQuantity1.AsFloat, cdsEstimateBillsDgnQuantity2.AsFloat);
+  cdsEstimateBillsDgnPrice.AsFloat := ANode.DesignPrice;
 
   cdsEstimateBillsAddDealQuantity.AsFloat := ANode.AddDealQuantity;
   cdsEstimateBillsAddDealTotalPrice.AsFloat := ANode.AddDealTotalPrice;
@@ -1245,6 +1267,8 @@ begin
   cdsEstimateBillsTotalPriceAdjust.AsFloat :=
       cdsEstimateBillsAddGatherTotalPrice.AsFloat - cdsEstimateBillsPDTotalPrice.AsFloat;
 
+  cdsEstimateBillsDifferPercent1.AsFloat := ANode.DifferPercent1;
+
   cdsEstimateBillsDealDgnQuantity1.AsFloat := ANode.DealDesignQuantity1;
   cdsEstimateBillsDealDgnQuantity2.AsFloat := ANode.DealDesignQuantity2;
   cdsEstimateBillsDealDgnQuantity.AsString :=
@@ -1264,6 +1288,21 @@ begin
   cdsEstimateBillsFinalDgnQty.AsString := GetDgnQuantity(
       cdsEstimateBillsFinalDgnQty1.AsFloat, cdsEstimateBillsFinalDgnQty2.AsFloat);
 
+
+  cdsEstimateBillsFinalDgnQtyA1.AsFloat := cdsEstimateBillsDealDgnQuantity1.AsFloat + cdsEstimateBillsCDgnQuantity1.AsFloat;
+  cdsEstimateBillsFinalDgnQtyA2.AsFloat := cdsEstimateBillsDealDgnQuantity2.AsFloat + cdsEstimateBillsCDgnQuantity2.AsFloat;
+  cdsEstimateBillsFinalDgnQtyA.AsString := GetDgnQuantity(
+      cdsEstimateBillsFinalDgnQtyA1.AsFloat, cdsEstimateBillsFinalDgnQtyA2.AsFloat);
+  cdsEstimateBillsFinalDgnPriceA.AsFloat := ANode.FinalDesignPrice;
+
+  cdsEstimateBillsPASQuantity.AsFloat := ANode.PASQuantity;
+  cdsEstimateBillsPASTotalPrice.AsFloat := ANode.PASTotalPrice;
+  cdsEstimateBillsPASDgnQuantity1.AsFloat := ANode.PASDesignQuantity1;
+  cdsEstimateBillsPASDgnQuantity2.AsFloat := ANode.PASDesignQuantity2;
+  cdsEstimateBillsPASDgnQuantity.AsString :=
+      GetDgnQuantity(cdsEstimateBillsPASDgnQuantity1.AsFloat, cdsEstimateBillsPASDgnQuantity2.AsFloat);
+  cdsEstimateBillsPASDgnPrice.AsFloat := ANode.PASDesignPrice;
+
   cdsEstimateBillsPDQuantity.AsFloat := ANode.PDQuantity;
   cdsEstimateBillsPDTotalPrice.AsFloat := ANode.PDTotalPrice;
   cdsEstimateBillsPDDgnQuantity1.AsFloat := ANode.PDDesignQuantity1;

+ 41 - 23
DataModules/ReportMemoryDm/rmBillsPhaseGatherDm.dfm

@@ -87,6 +87,19 @@ object rmBillsPhaseGatherData: TrmBillsPhaseGatherData
         DataType = ftFloat
       end
       item
+        Name = 'DgnQty1'
+        DataType = ftFloat
+      end
+      item
+        Name = 'DgnQty2'
+        DataType = ftFloat
+      end
+      item
+        Name = 'DgnQty'
+        DataType = ftString
+        Size = 50
+      end
+      item
         Name = 'TotalPrice'
         DataType = ftFloat
       end
@@ -138,6 +151,19 @@ object rmBillsPhaseGatherData: TrmBillsPhaseGatherData
         Size = 50
       end
       item
+        Name = 'DgnQtyA1'
+        DataType = ftFloat
+      end
+      item
+        Name = 'DgnQtyA2'
+        DataType = ftFloat
+      end
+      item
+        Name = 'DgnQtyA'
+        DataType = ftString
+        Size = 50
+      end
+      item
         Name = 'MemoStr'
         DataType = ftWideString
         Size = 255
@@ -148,7 +174,7 @@ object rmBillsPhaseGatherData: TrmBillsPhaseGatherData
     Left = 40
     Top = 32
     Data = {
-      C90200009619E0BD01000000180000001F000000000003000000C90202494404
+      420300009619E0BD010000001800000025000000000003000000420302494404
       0001000000000008506172656E74494404000100000000000D4E657874536962
       6C696E674944040001000000000004436F646501004A00000001000557494454
       48020002006400044E616D6502004A000000010005574944544802000200FE01
@@ -161,16 +187,20 @@ object rmBillsPhaseGatherData: TrmBillsPhaseGatherData
       636508000400000000000A73687444676E5174793108000400000000000A7368
       7444676E5174793208000400000000000973687444676E517479010049000000
       01000557494454480200020032000D736874546F74616C507269636508000400
-      000000000A546F74616C5072696365080004000000000009687444676E517479
-      31080004000000000009687444676E5174793208000400000000000868744467
-      6E517479010049000000010005574944544802000200320009626744676E5174
-      7931080004000000000009626744676E51747932080004000000000008626744
-      676E51747901004900000001000557494454480200020032000F456E64516354
-      6F74616C5072696365080004000000000011456E644465616C546F74616C5072
-      69636508000400000000000A73756D44676E5174793108000400000000000A73
-      756D44676E5174793208000400000000000973756D44676E5174790100490000
-      000100055749445448020002003200074D656D6F53747202004A000000010005
-      574944544802000200FE010000}
+      000000000744676E5174793108000400000000000744676E5174793208000400
+      000000000644676E51747901004900000001000557494454480200020032000A
+      546F74616C5072696365080004000000000009687444676E5174793108000400
+      0000000009687444676E51747932080004000000000008687444676E51747901
+      0049000000010005574944544802000200320009626744676E51747931080004
+      000000000009626744676E51747932080004000000000008626744676E517479
+      01004900000001000557494454480200020032000F456E645163546F74616C50
+      72696365080004000000000011456E644465616C546F74616C50726963650800
+      0400000000000A73756D44676E5174793108000400000000000A73756D44676E
+      5174793208000400000000000973756D44676E51747901004900000001000557
+      494454480200020032000844676E517479413108000400000000000844676E51
+      7479413208000400000000000744676E51747941010049000000010005574944
+      5448020002003200074D656D6F53747202004A00000001000557494454480200
+      0200FE010000}
     object cdsZjtzBillsID: TIntegerField
       FieldName = 'ID'
     end
@@ -231,20 +261,14 @@ object rmBillsPhaseGatherData: TrmBillsPhaseGatherData
       FieldName = 'shtTotalPrice'
     end
     object cdsZjtzBillsDgnQty1: TFloatField
-      FieldKind = fkCalculated
       FieldName = 'DgnQty1'
-      Calculated = True
     end
     object cdsZjtzBillsDgnQty2: TFloatField
-      FieldKind = fkCalculated
       FieldName = 'DgnQty2'
-      Calculated = True
     end
     object cdsZjtzBillsDgnQty: TStringField
-      FieldKind = fkCalculated
       FieldName = 'DgnQty'
       Size = 50
-      Calculated = True
     end
     object cdsZjtzBillsTotalPrice: TFloatField
       FieldName = 'TotalPrice'
@@ -286,20 +310,14 @@ object rmBillsPhaseGatherData: TrmBillsPhaseGatherData
       Size = 50
     end
     object cdsZjtzBillsDgnQtyA1: TFloatField
-      FieldKind = fkCalculated
       FieldName = 'DgnQtyA1'
-      Calculated = True
     end
     object cdsZjtzBillsDgnQtyA2: TFloatField
-      FieldKind = fkCalculated
       FieldName = 'DgnQtyA2'
-      Calculated = True
     end
     object cdsZjtzBillsDgnQtyA: TStringField
-      FieldKind = fkCalculated
       FieldName = 'DgnQtyA'
       Size = 50
-      Calculated = True
     end
     object cdsZjtzBillsMemoStr: TWideStringField
       FieldName = 'MemoStr'

+ 179 - 7
Forms/rmSelectProjectFrm.pas

@@ -13,7 +13,8 @@ type
   // 多合同 Deal
   // 甘肃高管局定制 Mental1
   // 导则 造价台账汇总
-  TMultiSelectType = (mstCommon, mstE_PCD, mstE_A, mstDeal, mstMental1, mstZjtz);
+  TMultiSelectType = (mstCommon, mstE_PCD, mstE_A, mstDeal, mstMental1, mstZjtz,
+    mstQgcZj);
 
   // 所选项目
   TSelectProject = class
@@ -21,6 +22,7 @@ type
     FProjectID: Integer;
     FIsTender: Boolean;
 
+    FIsPAS: Boolean;
     FIsPD: Boolean;
     FIsCDD: Boolean;
     FIsAB: Boolean;
@@ -31,6 +33,8 @@ type
     property ProjectID: Integer read FProjectID write FProjectID;
     property IsTender: Boolean read FIsTender write FIsTender;
 
+    // 工程可行性研究
+    property IsPAS: Boolean read FIsPAS write FIsPAS;
     // 初步设计(概算)项目
     property IsPD: Boolean read FIsPD write FIsPD;
     // 施工图设计(预算)项目
@@ -83,12 +87,14 @@ type
     procedure AddRows(ANode: TsdIDTreeNode);
     procedure RemoveRows(ANode: TsdIDTreeNode);
 
+    procedure SetPASProject(AProjecID: Integer);
     procedure SetPDProject(AProjecID: Integer);
     procedure SetCDDProject(AProjectID: Integer);
     procedure SetABProject(AProjectID: Integer);
     procedure SetCddScProject(AProjectID: Integer);
     procedure SetCddHtProject(AProjectID: Integer);
 
+    function HasPASProject: Boolean;
     function HasPDProject: Boolean;
     function HasCDDProject: Boolean;
     function HasABProject: Boolean;
@@ -168,6 +174,15 @@ begin
             if SelectProject.IsCddHt then
               zgResult.Cells[4, zgResult.RowCount - 1].Text := 'True';
           end;
+        mstQgcZj:
+          begin
+            if SelectProject.IsPAS then
+              zgResult.Cells[2, zgResult.RowCount - 1].Text := 'True';
+            if SelectProject.IsPD then
+              zgResult.Cells[3, zgResult.RowCount - 1].Text := 'True';
+            if SelectProject.IsCDD then
+              zgResult.Cells[4, zgResult.RowCount - 1].Text := 'True';
+          end;
       end;
     end;
   end;
@@ -204,7 +219,7 @@ begin
       iLimitProjectCount := 3
     else if FMultiSelectType = mstE_A then
       iLimitProjectCount := 2
-    else if FMultiSelectType = mstZjtz then
+    else if (FMultiSelectType = mstZjtz) or (FMultiSelectType = mstQgcZj) then
       iLimitProjectCount := 4
     else
       iLimitProjectCount := 2;
@@ -220,6 +235,8 @@ begin
         ModalResult := mrOk
       else if (FMultiSelectType = mstZjtz) and HasPDProject and HasCddScProject and HasCddHtProject then
         ModalResult := mrOk
+      else if (FMultiSelectType = mstQgcZj) and HasPDProject and HasCDDProject and HasPASProject then
+        ModalResult := mrOk
       else if FMultiSelectType in [mstCommon, mstDeal, mstMental1] then
         ModalResult := mrOk;
     end
@@ -458,13 +475,31 @@ procedure TProjectSelectForm.InitResultGrid;
     zgResult.ColWidths[4] := 60;
   end;
 
+  procedure InitQgcZjResultGrid;
+  begin
+    zgResult.ColCount := 5;
+    zgResult.RowCount := 1;
+    zgResult.Cells[1, 0].Text := '所选项目';
+    zgResult.ColWidths[1] := 200;
+    zgResult.Cells[2, 0].Text := '工程可行性研究';
+    zgResult.CellClass.Cols[2] := TZjCheckBoxCell;
+    zgResult.ColWidths[2] := 60;
+    zgResult.Cells[3, 0].Text := '初步设计';
+    zgResult.CellClass.Cols[3] := TZjCheckBoxCell;
+    zgResult.ColWidths[3] := 47;
+    zgResult.Cells[4, 0].Text := '施工图设计';
+    zgResult.CellClass.Cols[4] := TZjCheckBoxCell;
+    zgResult.ColWidths[4] := 50;
+  end;
+
 begin
   case FMultiSelectType of
     mstCommon: InitCommonResultGrid;
     mstE_PCD: InitE_PCDResultGrid;
     mstE_A: InitE_AResultGrid;
     mstDeal: InitDealResultGrid;
-    mstZjtz: InitZjtzResultGrid;
+    mstZjtz: InitZjtzResultGrid; 
+    mstQgcZj: InitQgcZjResultGrid;
   end;
 end;
 
@@ -489,6 +524,11 @@ begin
                   ((ACoord.X = 4) and SelectProject.IsCddHt)
                then Value := 'True'
                else Value := 'False';
+      mstQgcZj: if ((ACoord.X = 2) and SelectProject.IsPAS) or
+                  ((ACoord.X = 3) and SelectProject.IsPD) or
+                  ((ACoord.X = 4) and SelectProject.IsCDD)
+               then Value := 'True'
+               else Value := 'False';
     end;
   end;
 end;
@@ -517,6 +557,13 @@ begin
             SetCddScProject(SelectProject.ProjectID)
           else if ACoord.X = 4 then
             SetCddHtProject(SelectProject.ProjectID);
+        mstQgcZj:
+          if ACoord.X = 2 then
+            SetPASProject(SelectProject.ProjectID)
+          else if ACoord.X = 3 then
+            SetPDProject(SelectProject.ProjectID)
+          else if ACoord.X = 4 then
+            SetCDDProject(SelectProject.ProjectID);
       end
     else
       case FMultiSelectType of
@@ -534,6 +581,13 @@ begin
             SelectProject.IsCddSc := False
           else if ACoord.X = 4 then
             SelectProject.IsCddHt := False;
+        mstQgcZj:
+          if ACoord.X = 2 then
+            SelectProject.IsPAS := False
+          else if ACoord.X = 3 then
+            SelectProject.IsPD := False
+          else if ACoord.X = 4 then
+            SelectProject.IsCDD := False;
       end;
   end;
   zgResult.InvalidateCol(ACoord.X);
@@ -554,12 +608,15 @@ begin
     mstE_A: Caption := Caption + ',并勾选批准概(预)算项目';
     mstDeal: Caption := Caption + ',并勾选其中的多合同项目';
     mstZjtz: Caption := Caption + ',并勾选初步设计、施工图设计审查预算、施工图设计合同费用项目';
+    mstQgcZj: Caption := Caption + ',并勾选工程可行性研究、初步设计、施工图设计项目';
   end;
 
   // 甘肃高管局定制,隐藏结果表
   iWidth := GetSystemMetrics(SM_CXFRAME);
   if FMultiSelectType = mstMental1 then
     ClientWidth := 384
+  else if FMultiSelectType = mstQgcZj then
+    ClientWidth := 799
   else if FMultiSelectType = mstZjtz then
     ClientWidth := 809
   else
@@ -614,8 +671,21 @@ begin
   begin
     SelectProject := TSelectProject(FSelectProjects.Items[i]);
     SelectProject.IsPD := SelectProject.ProjectID = AProjecID;
-    if SelectProject.IsPD and SelectProject.IsCDD then
-      SelectProject.IsCDD := False;
+    if SelectProject.IsPD then
+    begin
+      if SelectProject.IsPAS then
+        SelectProject.IsPAS := False;
+      if SelectProject.IsCDD then
+        SelectProject.IsCDD := False;
+      if SelectProject.IsAB then
+        SelectProject.IsAB := False;
+      if SelectProject.IsDeal then
+        SelectProject.IsDeal := False;
+      if SelectProject.IsCddSc then
+        SelectProject.IsCddSc := False;
+      if SelectProject.IsCddHt then
+        SelectProject.IsCddHt := False;
+    end;
   end;
 end;
 
@@ -628,6 +698,21 @@ begin
   begin
     SelectProject := TSelectProject(FSelectProjects.Items[i]);
     SelectProject.IsAB := SelectProject.ProjectID = AProjectID;
+    if SelectProject.IsAB then
+    begin
+      if SelectProject.IsPAS then
+        SelectProject.IsPAS := False;
+      if SelectProject.IsPD then
+        SelectProject.IsPD := False;
+      if SelectProject.IsCDD then
+        SelectProject.IsCDD := False;
+      if SelectProject.IsDeal then
+        SelectProject.IsDeal := False;
+      if SelectProject.IsCddSc then
+        SelectProject.IsCddSc := False;
+      if SelectProject.IsCddHt then
+        SelectProject.IsCddHt := False;
+    end;
   end;
 end;
 
@@ -640,8 +725,21 @@ begin
   begin
     SelectProject := TSelectProject(FSelectProjects.Items[i]);
     SelectProject.IsCDD := SelectProject.ProjectID = AProjectID;
-    if SelectProject.IsCDD and SelectProject.IsPD then
-      SelectProject.IsPD := False;
+    if SelectProject.IsCDD then
+    begin
+      if SelectProject.IsPAS then
+        SelectProject.IsPAS := False;
+      if SelectProject.IsPD then
+        SelectProject.IsPD := False;
+      if SelectProject.IsAB then
+        SelectProject.IsAB := False;
+      if SelectProject.IsDeal then
+        SelectProject.IsDeal := False;
+      if SelectProject.IsCddSc then
+        SelectProject.IsCddSc := False;
+      if SelectProject.IsCddHt then
+        SelectProject.IsCddHt := False;
+    end;
   end;
 end;
 
@@ -739,6 +837,21 @@ begin
   begin
     SelectProject := TSelectProject(FSelectProjects.Items[i]);
     SelectProject.IsCddHt := SelectProject.ProjectID = AProjectID;
+    if SelectProject.IsCddHt then
+    begin
+      if SelectProject.IsPAS then
+        SelectProject.IsPAS := False;
+      if SelectProject.IsPD then
+        SelectProject.IsPD := False;
+      if SelectProject.IsCDD then
+        SelectProject.IsCDD := False;
+      if SelectProject.IsAB then
+        SelectProject.IsAB := False;
+      if SelectProject.IsDeal then
+        SelectProject.IsDeal := False;
+      if SelectProject.IsCddSc then
+        SelectProject.IsCddSc := False;
+    end;
   end;
 end;
 
@@ -751,6 +864,65 @@ begin
   begin
     SelectProject := TSelectProject(FSelectProjects.Items[i]);
     SelectProject.IsCddSc := SelectProject.ProjectID = AProjectID;
+    if SelectProject.IsCddSc then
+    begin
+      if SelectProject.IsPAS then
+        SelectProject.IsPAS := False;
+      if SelectProject.IsPD then
+        SelectProject.IsPD := False;
+      if SelectProject.IsCDD then
+        SelectProject.IsCDD := False;
+      if SelectProject.IsAB then
+        SelectProject.IsAB := False;
+      if SelectProject.IsDeal then
+        SelectProject.IsDeal := False;
+      if SelectProject.IsCddHt then
+        SelectProject.IsCddHt := False;
+    end;
+  end;
+end;
+
+function TProjectSelectForm.HasPASProject: Boolean;
+var
+  i: Integer;
+  SelectProject: TSelectProject;
+begin
+  Result := False;
+  for i := 0 to FSelectProjects.Count - 1 do
+  begin
+    SelectProject := TSelectProject(FSelectProjects.Items[i]);
+    if SelectProject.IsPAS then
+    begin
+      Result := True;
+      Break;
+    end;
+  end;
+end;
+
+procedure TProjectSelectForm.SetPASProject(AProjecID: Integer);
+var
+  i: Integer;
+  SelectProject: TSelectProject;
+begin
+  for i := 0 to FSelectProjects.Count - 1 do
+  begin
+    SelectProject := TSelectProject(FSelectProjects.Items[i]);
+    SelectProject.IsPAS := SelectProject.ProjectID = AProjecID;
+    if SelectProject.IsPAS then
+    begin
+      if SelectProject.IsPD then
+        SelectProject.IsPD := False;
+      if SelectProject.IsCDD then
+        SelectProject.IsCDD := False;
+      if SelectProject.IsAB then
+        SelectProject.IsAB := False;
+      if SelectProject.IsDeal then
+        SelectProject.IsDeal := False;
+      if SelectProject.IsCddSc then
+        SelectProject.IsCddSc := False;
+      if SelectProject.IsCddHt then
+        SelectProject.IsCddHt := False;
+    end;
   end;
 end;
 

+ 47 - 0
Units/MCacheTree.pas

@@ -150,6 +150,12 @@ type
     FCDesignQuantity1: Double;
     FCDesignQuantity2: Double;
 
+    FPASQuantity: Double;
+    FPASTotalPrice: Double;
+    FPASDesignQuantity1: Double;
+    FPASDesignQuantity2: Double;
+    FPASDesignPrice: Double;
+
     FPDQuantity: Double;
     FPDTotalPrice: Double;
     FPDDesignQuantity1: Double;
@@ -182,6 +188,9 @@ type
     function GetGatherP_TotalPrice: Double;
     function GetAddGatherQuantity: Double;
     function GetAddGatherTotalPrice: Double;
+    function GetDesignPrice: Double;
+    function GetDifferPercent1: Double;
+    function GetFinalDesignPrice: Double;
   public
     constructor Create(ACacheTree: TCacheTree; AID, AProjectCount: Integer);
 
@@ -204,6 +213,7 @@ type
     property RatioPercent: Double read FRatioPercent write FRatioPercent;
     property DesignQuantity1: Double read FDesignQuantity1 write FDesignQuantity1;
     property DesignQuantity2: Double read FDesignQuantity2 write FDesignQuantity2;
+    property DesignPrice: Double read GetDesignPrice;
     // 累计各值
     property AddDealQuantity: Double read FAddDealQuantity write FAddDealQuantity;
     property AddDealTotalPrice: Double read FAddDealTotalPrice write FAddDealTotalPrice;
@@ -219,7 +229,16 @@ type
     property DealDesignQuantity2: Double read FDealDesignQuantity2 write FDealDesignQuantity2;
     property CDesignQuantity1: Double read FCDesignQuantity1 write FCDesignQuantity1;
     property CDesignQuantity2: Double read FCDesignQuantity2 write FCDesignQuantity2;
+    property FinalDesignPrice: Double read GetFinalDesignPrice;
+
+    property DifferPercent1: Double read GetDifferPercent1;
 
+    // 初步设计 Preliminary Design
+    property PASQuantity: Double read FPASQuantity write FPASQuantity;
+    property PASTotalPrice: Double read FPASTotalPrice write FPASTotalPrice;
+    property PASDesignQuantity1: Double read FPASDesignQuantity1 write FPASDesignQuantity1;
+    property PASDesignQuantity2: Double read FPASDesignQuantity2 write FPASDesignQuantity2;
+    property PASDesignPrice: Double read FPASDesignPrice write FPASDesignPrice;
     // ----仅用于汇总生成决算02表----
     // 初步设计 Preliminary Design
     property PDQuantity: Double read FPDQuantity write FPDQuantity;
@@ -779,6 +798,22 @@ begin
   Result := AddDealTotalPrice + AddQcTotalPrice + AddPcTotalPrice;
 end;
 
+function TReportCacheNode.GetDesignPrice: Double;
+begin
+  if DesignQuantity1 <> 0 then
+    Result := TotalPrice / DesignQuantity1
+  else
+    Result := 0;
+end;
+
+function TReportCacheNode.GetDifferPercent1: Double;
+begin
+  if TotalPrice <> 0 then
+    Result := (AddGatherTotalPrice - TotalPrice) / TotalPrice * 100
+  else
+    Result := 0;
+end;
+
 function TReportCacheNode.GetDoubleArrayTotal(
   ADoubleArray: TDoubleArray): Double;
 var
@@ -789,6 +824,17 @@ begin
     Result := Result + ADoubleArray[i];
 end;
 
+function TReportCacheNode.GetFinalDesignPrice: Double;
+var
+  fQuantity: Double;
+begin
+  fQuantity := FDealDesignQuantity1 + FCDesignQuantity1;
+  if fQuantity <> 0 then
+    Result := AddGatherTotalPrice / fQuantity
+  else
+    Result := 0;
+end;
+
 function TReportCacheNode.GetGatherP_TotalPrice: Double;
 begin
   Result := GetDoubleArrayTotal(FP_TotalPrice);
@@ -980,6 +1026,7 @@ begin
     FGatherCacheNode.AddQcTotalPrice := FGatherCacheNode.AddQcTotalPrice + CacheNode.AddQcTotalPrice;
     FGatherCacheNode.AddPcTotalPrice := FGatherCacheNode.AddPcTotalPrice + CacheNode.AddPcTotalPrice;
 
+    FGatherCacheNode.PASTotalPrice := FGatherCacheNode.PASTotalPrice + CacheNode.PASTotalPrice;
     FGatherCacheNode.PDTotalPrice := FGatherCacheNode.PDTotalPrice + CacheNode.PDTotalPrice;
     FGatherCacheNode.CDDTotalPrice := FGatherCacheNode.CDDTotalPrice + CacheNode.CDDTotalPrice;
     FGatherCacheNode.ABTotalPrice := FGatherCacheNode.ABTotalPrice + CacheNode.ABTotalPrice;

+ 9 - 2
Units/ReportManager.pas

@@ -239,6 +239,7 @@ type
     FE_PCDProjects: TList;    // 须选择初步设计,施工图设计
     FE_AProjects: TList;      // 须选择批准概算
     FZjtzProjects: TList;     // 须选择初步设计,施工图设计审查预算,施工图设计合同费用
+    FQgcZjProjects: TList;    // 需选择工程可行性研究,初步设计,施工图设计
     FDealProjects: TList;     // 可选择多合同项目
 
     function OpenProject(ARec: TsdDataRecord): TProjectData;
@@ -683,6 +684,7 @@ begin
   FE_AProjects := TList.Create;
   FDealProjects := TList.Create;
   FZjtzProjects := TList.Create;
+  FQgcZjProjects := TList.Create;
 end;
 
 destructor TMemoryReportManager.Destroy;
@@ -698,6 +700,8 @@ begin
   FDealProjects.Free;
   ClearObjects(FZjtzProjects);
   FZjtzProjects.Free;
+  ClearObjects(FQgcZjProjects);
+  FQgcZjProjects.Free;
 
   FMemoryQuery.Free;
 
@@ -749,7 +753,7 @@ end;
 function TMemoryReportManager.GetMemoryDataSet(
   ADataSetID: Integer; AProjectData: TProjectData): TDataSet;
 begin
-  //ADataSetID := 61;
+  //ADataSetID := 62;
   case ADataSetID of
     1: Result := FrmGridHeaderData.AssginData(AProjectData);   // 各表表头
     2: Result := FrmGclBillsBGData.AssignData(AProjectData, rmtPhaseGather, rmgtGather); // 工程量清单[本期完成]
@@ -770,7 +774,7 @@ begin
        // 内蒙古哈白定制表(支表2, 支表3, 支表14, 支表3-1, 支表4-1, 会签)
        52, 53, 54, 55,
        // 内蒙古306国道定制(支表2, 支表3, 支表3-1, 支表4-1)
-       57, 58, 60, 61:
+       57, 58, 60, 61, 62:
        // 中开高速定制表(支表2, 支表3)
         Result := SelectProjectsAndAssignData(ADataSetID);
     14: Result := FrmGclBillsBGData.AssignData(AProjectData, rmtPhaseDeal, rmgtGather); // 工程量清单[本期合同]
@@ -852,6 +856,7 @@ begin
     32: SelectFrm.MultiSelectType := mstDeal;
     40: SelectFrm.MultiSelectType := mstMental1;
     61: SelectFrm.MultiSelectType := mstZjtz;
+    62: SelectFrm.MultiSelectType := mstQgcZj;
     else SelectFrm.MultiSelectType := mstCommon;
   end;
 
@@ -877,6 +882,7 @@ begin
     20, 36: Projects := FE_AProjects;
     32: Projects := FDealProjects;
     61: Projects := FZjtzProjects;
+    62: Projects := FQgcZjProjects;
     else Projects := FProjects;
   end;
 
@@ -900,6 +906,7 @@ begin
       29: FrmBillsGatherData.GatherType := bgtFinal19;
       33: FrmBillsGatherData.GatherType := bgtG_Final06_1;
       35: FrmBillsGatherData.GatherType := bgtG_Final04;
+      62: FrmBillsGatherData.GatherType := bgtQgcZj;
       39: FrmMentalCustomized1Data.MentalType := 0;
       40: FrmMentalCustomized1Data.MentalType := 1;
     end;