Prechádzať zdrojové kódy

Merge branch 'master' of http://192.168.1.12:3000/maixinrong/measure

MaiXinRong 8 rokov pred
rodič
commit
57012488df

+ 216 - 4
DataModules/ReportMemoryDm/rmWeiWuZjjlGatherDm.dfm

@@ -7,11 +7,182 @@ object rmWeiWuZjjlGatherData: TrmWeiWuZjjlGatherData
   object cdsZjjl: TClientDataSet
     Active = True
     Aggregates = <>
+    FieldDefs = <
+      item
+        Name = 'Code'
+        DataType = ftWideString
+        Size = 50
+      end
+      item
+        Name = 'CertificateCode'
+        DataType = ftWideString
+        Size = 50
+      end
+      item
+        Name = 'BGLCode'
+        DataType = ftMemo
+        Size = 60535
+      end
+      item
+        Name = 'PegName'
+        DataType = ftWideString
+        Size = 255
+      end
+      item
+        Name = 'BeginPeg'
+        DataType = ftWideString
+        Size = 255
+      end
+      item
+        Name = 'EndPeg'
+        DataType = ftWideString
+        Size = 255
+      end
+      item
+        Name = 'FBFXName'
+        DataType = ftWideString
+        Size = 255
+      end
+      item
+        Name = 'UnitName'
+        DataType = ftWideString
+        Size = 255
+      end
+      item
+        Name = 'DrawingCode'
+        DataType = ftWideString
+        Size = 255
+      end
+      item
+        Name = 'FormulaMemo'
+        DataType = ftMemo
+        Size = 60535
+      end
+      item
+        Name = 'RelaFile'
+        DataType = ftMemo
+        Size = 60535
+      end
+      item
+        Name = 'BillsCode'
+        DataType = ftString
+        Size = 50
+      end
+      item
+        Name = 'BillsName'
+        DataType = ftWideString
+        Size = 255
+      end
+      item
+        Name = 'BillsUnits'
+        DataType = ftWideString
+        Size = 20
+      end
+      item
+        Name = 'BillsPrice'
+        DataType = ftFloat
+      end
+      item
+        Name = 'FilterDrawingCode'
+        DataType = ftWideString
+        Size = 50
+      end
+      item
+        Name = 'BillsCurDealQuantity'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsCurDealTotalPrice'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsCurQcQuantity'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsCurQcTotalPrice'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsCurGatherQuantity'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsCurGatherTotalPrice'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsEndDealQuantity'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsEndDealTotalPrice'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsEndQcQuantity'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsEndQcTotalPrice'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsEndGatherQuantity'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsEndGatherTotalPrice'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsOrgQuantity'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsOrgTotalPrice'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsMisQuantity'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsMisTotalPrice'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsOthQuantity'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsOthTotalPrice'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsQuantity'
+        DataType = ftFloat
+      end
+      item
+        Name = 'BillsTotalPrice'
+        DataType = ftFloat
+      end
+      item
+        Name = 'FenBuName'
+        DataType = ftWideString
+        Size = 50
+      end
+      item
+        Name = 'DanWeiName'
+        DataType = ftWideString
+      end>
+    IndexDefs = <>
     Params = <>
+    StoreDefs = True
     Left = 64
     Top = 32
     Data = {
-      930300009619E0BD01000000180000001C000000000003000000930304436F64
+      9A0400009619E0BD0100000018000000260000000000030000009A0404436F64
       6501004A00000001000557494454480200020064000F43657274696669636174
       65436F646501004A00000001000557494454480200020064000742474C436F64
       6504004B00000002000753554254595045020049000500546578740005574944
@@ -20,7 +191,7 @@ object rmWeiWuZjjlGatherData: TrmWeiWuZjjlGatherData
       0106456E6450656702004A000000010005574944544802000200FE0108464246
       584E616D6502004A000000010005574944544802000200FE0108556E69744E61
       6D6502004A000000010005574944544802000200FE010B44726177696E67436F
-      646501004A00000001000557494454480200020064000B466F726D756C614D65
+      646502004A000000010005574944544802000200FE010B466F726D756C614D65
       6D6F04004B000000020007535542545950450200490005005465787400055749
       4454480200020077EC0852656C6146696C6504004B0000000200075355425459
       504502004900050054657874000557494454480200020077EC0942696C6C7343
@@ -39,7 +210,15 @@ object rmWeiWuZjjlGatherData: TrmWeiWuZjjlGatherData
       6C6C73456E6451635175616E7469747908000400000000001442696C6C73456E
       645163546F74616C507269636508000400000000001642696C6C73456E644761
       746865725175616E7469747908000400000000001842696C6C73456E64476174
-      686572546F74616C507269636508000400000000000000}
+      686572546F74616C507269636508000400000000001042696C6C734F72675175
+      616E7469747908000400000000001242696C6C734F7267546F74616C50726963
+      6508000400000000001042696C6C734D69735175616E74697479080004000000
+      00001242696C6C734D6973546F74616C50726963650800040000000000104269
+      6C6C734F74685175616E7469747908000400000000001242696C6C734F746854
+      6F74616C507269636508000400000000000D42696C6C735175616E7469747908
+      000400000000000F42696C6C73546F74616C5072696365080004000000000009
+      46656E42754E616D6501004A00000001000557494454480200020064000A4461
+      6E5765694E616D6501004A00000001000557494454480200020001000000}
     object cdsZjjlCode: TWideStringField
       FieldName = 'Code'
       Size = 50
@@ -74,8 +253,9 @@ object rmWeiWuZjjlGatherData: TrmWeiWuZjjlGatherData
       Size = 255
     end
     object cdsZjjlDrawingCode: TWideStringField
+      DisplayWidth = 255
       FieldName = 'DrawingCode'
-      Size = 50
+      Size = 255
     end
     object cdsZjjlFormulaMemo: TMemoField
       FieldName = 'FormulaMemo'
@@ -141,5 +321,37 @@ object rmWeiWuZjjlGatherData: TrmWeiWuZjjlGatherData
     object cdsZjjlBillsEndGatherTotalPrice: TFloatField
       FieldName = 'BillsEndGatherTotalPrice'
     end
+    object cdsZjjlBillsOrgQuantity: TFloatField
+      FieldName = 'BillsOrgQuantity'
+    end
+    object cdsZjjlBillsOrgTotalPrice: TFloatField
+      FieldName = 'BillsOrgTotalPrice'
+    end
+    object cdsZjjlBillsMisQuantity: TFloatField
+      FieldName = 'BillsMisQuantity'
+    end
+    object cdsZjjlBillsMisTotalPrice: TFloatField
+      FieldName = 'BillsMisTotalPrice'
+    end
+    object cdsZjjlBillsOthQuantity: TFloatField
+      FieldName = 'BillsOthQuantity'
+    end
+    object cdsZjjlBillsOthTotalPrice: TFloatField
+      FieldName = 'BillsOthTotalPrice'
+    end
+    object cdsZjjlBillsQuantity: TFloatField
+      FieldName = 'BillsQuantity'
+    end
+    object cdsZjjlBillsTotalPrice: TFloatField
+      FieldName = 'BillsTotalPrice'
+    end
+    object cdsZjjlFenBuName: TWideStringField
+      FieldName = 'FenBuName'
+      Size = 50
+    end
+    object cdsZjjlDanWeiName: TWideStringField
+      FieldName = 'DanWeiName'
+      Size = 0
+    end
   end
 end

+ 151 - 24
DataModules/ReportMemoryDm/rmWeiWuZjjlGatherDm.pas

@@ -3,7 +3,7 @@ unit rmWeiWuZjjlGatherDm;
 interface
 
 uses
-  SysUtils, Classes, ProjectData, DB, sdDB, DBClient;
+  SysUtils, Classes, ProjectData, DB, sdDB, DBClient, sdIDTree, BillsTree;
 
 type
   TZjjl = class
@@ -39,11 +39,23 @@ type
     FBillsEndGatherQuantity: Double;
     FBillsEndGatherTotalPrice: Double;
 
+    FBillsOrgQuantity: Double;
+    FBillsOrgTotalPrice: Double;
+    FBillsMisQuantity: Double;
+    FBillsMisTotalPrice: Double;
+    FBillsOthQuantity: Double;
+    FBillsOthTotalPrice: Double;
+    FBillsQuantity: Double;
+    FBillsTotalPrice: Double;
+
+    FFenBuName: string;
+    FDanWeiName: string;
+
     function MergeStr(AStr1, AStr2: string): string;
   public
-    constructor Create(ARec, ABillsRec, AStageRec: TsdDataRecord);
+    constructor Create(ARec, AStageRec: TsdDataRecord; ANode: TBillsIDTreeNode);
 
-    procedure Merge(ARec, ABillsRec, AStageRec: TsdDataRecord);
+    procedure Merge(ARec, AStageRec: TsdDataRecord; ANode: TBillsIDTreeNode);
   end;
 
   TrmWeiWuZjjlGatherData = class(TDataModule)
@@ -62,7 +74,7 @@ type
     cdsZjjlBillsCode: TStringField;
     cdsZjjlBillsName: TWideStringField;
     cdsZjjlBillsUnits: TWideStringField;
-    cdsZjjlBillsPrice: TFloatField; 
+    cdsZjjlBillsPrice: TFloatField;
     cdsZjjlFilterDrawingCode: TWideStringField;
     cdsZjjlBillsCurDealQuantity: TFloatField;
     cdsZjjlBillsCurDealTotalPrice: TFloatField;
@@ -76,9 +88,19 @@ type
     cdsZjjlBillsEndQcTotalPrice: TFloatField;
     cdsZjjlBillsEndGatherQuantity: TFloatField;
     cdsZjjlBillsEndGatherTotalPrice: TFloatField;
+    cdsZjjlBillsOrgQuantity: TFloatField;
+    cdsZjjlBillsOrgTotalPrice: TFloatField;
+    cdsZjjlBillsMisQuantity: TFloatField;
+    cdsZjjlBillsMisTotalPrice: TFloatField;
+    cdsZjjlBillsOthQuantity: TFloatField;
+    cdsZjjlBillsOthTotalPrice: TFloatField;
+    cdsZjjlBillsQuantity: TFloatField;
+    cdsZjjlBillsTotalPrice: TFloatField;
+    cdsZjjlFenBuName: TWideStringField;
+    cdsZjjlDanWeiName: TWideStringField;
   private
     FZjjlList: TList;
-    function FindZjjl(ARec, ABillsRec: TsdDataRecord): TZjjl;
+    function FindZjjl(ARec: TsdDataRecord; ANode: TBillsIDTreeNode): TZjjl;
 
     procedure GatherZjjl(AProjectData: TProjectData);
     procedure WriteData;
@@ -89,7 +111,7 @@ type
 implementation
 
 uses
-  ZhAPI, PhaseData, UtilMethods;
+  ZhAPI, PhaseData, UtilMethods, BillsMeasureDm;
 
 {$R *.dfm}
 
@@ -110,9 +132,75 @@ begin
   end;
 end;
 
+function GetLeafXmj(ANode: TBillsIDTreeNode): TBillsIDTreeNode;
+begin
+  Result := ANode;
+  while Assigned(Result) and (Result.Rec.B_Code.AsString <> '') do
+    Result := TBillsIDTreeNode(Result.Parent);
+end;
+
+function GetLeafXmjDrawingCode(ANode: TBillsIDTreeNode): String;
+var
+  vLeafXmj: TsdIDTreeNode;
+begin
+  Result := '';
+  vLeafXmj := GetLeafXmj(ANode);
+  if Assigned(vLeafXmj) then
+    Result := vLeafXmj.Rec.ValueByName('DrawingCode').AsString;
+end;
+
 { TZjjl }
 
-constructor TZjjl.Create(ARec, ABillsRec, AStageRec: TsdDataRecord);
+constructor TZjjl.Create(ARec, AStageRec: TsdDataRecord; ANode: TBillsIDTreeNode);
+
+  // 取树结构的第ALevel层节点的名称(level从0开始)
+  function GetNameByLevel(ANode: TBillsIDTreeNode; ALevel: Integer): string;
+  begin
+    Result := '';
+    if not Assigned(ANode) then Exit;
+    if ANode.Level = ALevel then
+      Result := ANode.Rec.Name.AsString
+    else if ANode.Level > ALevel then
+      Result := GetNameByLevel(TBillsIDTreeNode(ANode.Parent), ALevel);
+  end;
+
+  function GetNameDanWei(ANode: TBillsIDTreeNode): string;
+  begin
+    // 取树结构的第二层节点的名称
+    Result := GetNameByLevel(ANode, 1);
+  end;
+
+  // ANode为计量单元节点,APegNode为桩号节点
+  function GetNameFenBu(ANode, APegNode: TBillsIDTreeNode): string;
+  var
+    vCurNode: TBillsIDTreeNode;
+  begin
+    // 如果计量单元节点的名称为桩号(转化为判断计量单元节点与桩号节点为同一个)
+    if not Assigned(APegNode) or (ANode.ID = APegNode.ID) then
+      // 取树结构的第三层节点的名称
+      Result := GetNameByLevel(ANode, 2)
+    // 否则,取桩号节点的子节点的名称
+    else
+    begin
+      vCurNode := ANode;
+      while vCurNode.Level > APegNode.Level + 1 do
+        vCurNode := TBillsIDTreeNode(vCurNode.Parent);
+      Result := vCurNode.Rec.Name.AsString;
+    end;
+  end;
+
+  function GetPegNode(ANode: TBillsIDTreeNode): TBillsIDTreeNode;
+  begin
+    Result := nil;
+    if not Assigned(ANode) then Exit;
+    if CheckPeg(ANode.Rec.Name.AsString) then
+      Result := ANode
+    else
+      Result := GetPegNode(TBillsIDTreeNode(ANode.Parent));
+  end;
+
+var
+  vLeafXmj, vPegNode: TBillsIDTreeNode;
 begin
   FCode := ARec.ValueByName('Code').AsString;
   FCertificateCode := ARec.ValueByName('CertificateCode').AsString;
@@ -126,11 +214,11 @@ begin
   FFormulaMemo := ARec.ValueByName('FormulaMemo').AsString;
   FRelaFile := ARec.ValueByName('RelaFile').AsString;
 
-  FBillsCode := ABillsRec.ValueByName('B_Code').AsString;
-  FBillsName := ABillsRec.ValueByName('Name').AsString;
-  FBillsUnits := ABillsRec.ValueByName('Units').AsString;
-  FBillsPrice := ABillsRec.ValueByName('Price').AsFloat;
-  FFilterDrawingCode := GetThirdPartString(ABillsRec.ValueByName('DrawingCode').AsString);
+  FBillsCode := ANode.Rec.ValueByName('B_Code').AsString;
+  FBillsName := ANode.Rec.ValueByName('Name').AsString;
+  FBillsUnits := ANode.Rec.ValueByName('Units').AsString;
+  FBillsPrice := ANode.Rec.ValueByName('Price').AsFloat;
+  FFilterDrawingCode := GetThirdPartString(GetLeafXmjDrawingCode(ANode));
 
   if Assigned(AStageRec) then
   begin
@@ -148,9 +236,23 @@ begin
     FBillsEndGatherQuantity := AStageRec.ValueByName('GatherQuantity').AsFloat;
     FBillsEndGatherTotalPrice := AStageRec.ValueByName('GatherTotalPrice').AsFloat;
   end;
+
+  FBillsOrgQuantity := ANode.Rec.OrgQuantity.AsFloat;
+  FBillsOrgTotalPrice := ANode.Rec.OrgTotalPrice.AsFloat;
+  FBillsMisQuantity := ANode.Rec.MisQuantity.AsFloat;
+  FBillsMisTotalPrice := ANode.Rec.MisTotalPrice.AsFloat;
+  FBillsOthQuantity := ANode.Rec.OthQuantity.AsFloat;
+  FBillsOthTotalPrice := ANode.Rec.OthTotalPrice.AsFloat;
+  FBillsQuantity := ANode.Rec.Quantity.AsFloat;
+  FBillsTotalPrice := ANode.Rec.TotalPrice.AsFloat;
+
+  vLeafXmj := GetLeafXmj(ANode);
+  vPegNode := GetPegNode(ANode);
+  FFenBuName := GetNameFenBu(vLeafXmj, vPegNode);
+  FDanWeiName := GetNameDanWei(vLeafXmj);
 end;
 
-procedure TZjjl.Merge(ARec, ABillsRec, AStageRec: TsdDataRecord);
+procedure TZjjl.Merge(ARec, AStageRec: TsdDataRecord; ANode: TBillsIDTreeNode);
 begin
   FCertificateCode := MergeStr(FCertificateCode, ARec.ValueByName('CertificateCode').AsString);
   FBGLCode := MergeRelaBGL(FBGLCode, ARec.ValueByName('BGLCode').AsString);
@@ -174,6 +276,15 @@ begin
     FBillsEndGatherQuantity := FBillsEndGatherQuantity + AStageRec.ValueByName('GatherQuantity').AsFloat;
     FBillsEndGatherTotalPrice := FBillsEndGatherTotalPrice + AStageRec.ValueByName('GatherTotalPrice').AsFloat;
   end;
+
+  FBillsOrgQuantity := FBillsOrgQuantity + ANode.Rec.OrgQuantity.AsFloat;
+  FBillsOrgTotalPrice := FBillsOrgTotalPrice + ANode.Rec.OrgTotalPrice.AsFloat;
+  FBillsMisQuantity := FBillsMisQuantity + ANode.Rec.MisQuantity.AsFloat;
+  FBillsMisTotalPrice := FBillsMisTotalPrice + ANode.Rec.MisTotalPrice.AsFloat;
+  FBillsOthQuantity := FBillsOthQuantity + ANode.Rec.OthQuantity.AsFloat;
+  FBillsOthTotalPrice := FBillsOthTotalPrice + ANode.Rec.OthTotalPrice.AsFloat;
+  FBillsQuantity := FBillsQuantity + ANode.Rec.Quantity.AsFloat;
+  FBillsTotalPrice := FBillsTotalPrice + ANode.Rec.TotalPrice.AsFloat;
 end;
 
 function TZjjl.MergeStr(AStr1, AStr2: string): string;
@@ -213,18 +324,18 @@ begin
   end;
 end;
 
-function TrmWeiWuZjjlGatherData.FindZjjl(ARec, ABillsRec: TsdDataRecord): TZjjl;
+function TrmWeiWuZjjlGatherData.FindZjjl(ARec: TsdDataRecord; ANode: TBillsIDTreeNode): TZjjl;
 var
   sCode, sName, sUnits, sDrawingCode: string;
   fPrice: Double;
   i: Integer;
   vZ: TZjjl;
 begin
-  sCode := ABillsRec.ValueByName('B_Code').AsString;
-  sName := ABillsRec.ValueByName('Name').AsString;
-  sUnits := ABillsRec.ValueByName('Units').AsString;
-  sDrawingCode := GetThirdPartString(ABillsRec.ValueByName('DrawingCode').AsString);
-  fPrice := ABillsRec.valueByName('Price').AsFloat;
+  sCode := ANode.Rec.ValueByName('B_Code').AsString;
+  sName := ANode.Rec.ValueByName('Name').AsString;
+  sUnits := ANode.Rec.ValueByName('Units').AsString;
+  sDrawingCode := GetThirdPartString(GetLeafXmjDrawingCode(ANode));
+  fPrice := ANode.Rec.valueByName('Price').AsFloat;
 
   Result := nil;
   for i := 0 to FZjjlList.Count - 1 do
@@ -243,24 +354,25 @@ end;
 procedure TrmWeiWuZjjlGatherData.GatherZjjl(AProjectData: TProjectData);
 var
   i: Integer;
+  vNode: TBillsIDTreeNode;
   Rec, BillsRec, StageRec: TsdDataRecord;
   vZ: TZjjl;
 begin
   for i := 0 to AProjectData.PhaseData.ZJJLData.sddZJJL.RecordCount - 1 do
   begin
     Rec := AProjectData.PhaseData.ZJJLData.sddZJJL.Records[I];
-    BillsRec := AProjectData.BillsData.sddBills.FindKey('idxID', Rec.ValueByName('BillsID').AsInteger);
+    vNode := TBillsIDTreeNode(AProjectData.BillsMeasureData.BillsMeasureTree.FindNode(Rec.ValueByName('BillsID').AsInteger));
     StageRec := AProjectData.PhaseData.StageData.StageRecord(Rec.ValueByName('BillsID').AsInteger);
-    if Assigned(Rec) and Assigned(BillsRec) then
+    if Assigned(Rec) and Assigned(vNode) then
     begin
-      vZ := FindZjjl(Rec, BillsRec);
+      vZ := FindZjjl(Rec, vNode);
       if not Assigned(vZ) then
       begin
-        vZ := TZjjl.Create(Rec, BillsRec, StageRec);
+        vZ := TZjjl.Create(Rec, StageRec, vNode);
         FZjjlList.Add(vZ);
       end
       else
-        vZ.Merge(Rec, BillsRec, StageRec);
+        vZ.Merge(Rec, StageRec, vNode);
     end;
   end;
 end;
@@ -286,6 +398,8 @@ begin
     cdsZjjlFBFXName.AsString := vZ.FFBFXName;
     cdsZjjlUnitName.AsString := vZ.FUnitName;
     cdsZjjlDrawingCode.AsString := vZ.FDrawingCode;
+    cdsZjjlFormulaMemo.AsString := vZ.FFormulaMemo;
+    cdsZjjlRelaFile.AsString := vZ.FRelaFile;
 
     cdsZjjlBillsCode.AsString := vZ.FBillsCode;
     cdsZjjlBillsName.AsString := vZ.FBillsName;
@@ -306,6 +420,19 @@ begin
     cdsZjjlBillsEndQcTotalPrice.AsFloat := vZ.FBillsEndQcTotalPrice;
     cdsZjjlBillsEndGatherQuantity.AsFloat := vZ.FBillsEndGatherQuantity;
     cdsZjjlBillsEndGatherTotalPrice.AsFloat := vZ.FBillsEndGatherTotalPrice;
+
+    cdsZjjlBillsOrgQuantity.AsFloat := vZ.FBillsOrgQuantity;
+    cdsZjjlBillsOrgTotalPrice.AsFloat := vZ.FBillsOrgTotalPrice;
+    cdsZjjlBillsMisQuantity.AsFloat := vZ.FBillsMisQuantity;
+    cdsZjjlBillsMisTotalPrice.AsFloat := vZ.FBillsMisTotalPrice;
+    cdsZjjlBillsOthQuantity.AsFloat := vZ.FBillsOthQuantity;
+    cdsZjjlBillsOthTotalPrice.AsFloat := vZ.FBillsOthTotalPrice;
+    cdsZjjlBillsQuantity.AsFloat := vZ.FBillsQuantity;
+    cdsZjjlBillsTotalPrice.AsFloat := vZ.FBillsTotalPrice;
+
+    cdsZjjlFenBuName.AsString := vZ.FFenBuName;
+    cdsZjjlDanWeiName.AsString := vZ.FDanWeiName;
+
     cdsZjjl.Post;
   end;
 end;

+ 2 - 1
Units/UtilMethods.pas

@@ -909,7 +909,8 @@ end;
 
 function GetTempFilePath: string;
 begin
-  Result := GetTempFileDir + '\';
+  //Result := GetTempFileDir + '\';
+  Result := GetAppTempPath;
 end;
 
 function GetTempName(ALength: Integer): string;