Forráskód Böngészése

优化速度,具体包括:
1. 保存清单处,报表所需数据;
2. 台账界面,颜色显示
3. 导入Excel(除签约清单),写入数据部分

MaiXinRong 9 éve
szülő
commit
0693ec49c4

+ 17 - 25
DataModules/BillsDm.pas

@@ -141,7 +141,7 @@ end;
 
 procedure TBillsData.Save;
 
-  procedure ResolveCode(ARec: TsdDataRecord);
+  procedure ResolveCode(ARec: TBillsRecord);
   var
     sgs: TStrings;
     i: Integer;
@@ -150,7 +150,7 @@ procedure TBillsData.Save;
     sgs := TStringList.Create;
     try
       sgs.Delimiter := '-';
-      sgs.DelimitedText := ARec.ValueByName('Code').AsString;
+      sgs.DelimitedText := ARec.Code.AsString;
       case sgs.Count of
         1: sXiangCode := '';
         2: sXiangCode := ChinessNum(StrToIntDef(sgs[1], 0));
@@ -166,14 +166,10 @@ procedure TBillsData.Save;
         end;
       end;
     finally
-      if (ARec.ValueByName('XiangCode').AsString <> sXiangCode) then
-        ARec.ValueByName('XiangCode').AsString := sXiangCode;
-      if (ARec.ValueByName('MuCode').AsString <> sMuCode) then
-        ARec.ValueByName('MuCode').AsString := sMuCode;
-      if (ARec.ValueByName('JieCode').AsString <> sJieCode) then
-        ARec.ValueByName('JieCode').AsString := sJieCode;
-      if (ARec.ValueByName('XiMuCode').AsString <> sXiMuCode) then
-        ARec.ValueByName('XiMuCode').AsString := sXiMuCode;
+      ARec.SetStrValue(ARec.XiangCode, sXiangCode);
+      ARec.SetStrValue(ARec.MuCode, sMuCode);
+      ARec.SetStrValue(ARec.JieCode, sJieCode);
+      ARec.SetStrValue(ARec.XimuCode, sXiMuCode);
       sgs.Free;
     end;
   end;
@@ -181,7 +177,7 @@ procedure TBillsData.Save;
   procedure SaveReportsRela;
   var
     iIndex: Integer;
-    stnNode: TsdIDTreeNode;
+    stnNode: TBillsIDTreeNode;
     iLeafXmjParentID: Integer;
     sIndexCode: string;
   begin
@@ -190,34 +186,30 @@ procedure TBillsData.Save;
       with TProjectData(FProjectData).BillsCompileData do
         for iIndex := 0 to BillsCompileTree.Count - 1 do
         begin
-          stnNode := BillsCompileTree.Items[iIndex];
+          stnNode := TBillsIDTreeNode(BillsCompileTree.Items[iIndex]);
           // 分项清单排序
-          if (stnNode.Rec.ValueByName('SerialNo').AsString = '') or
-              (stnNode.MajorIndex <> stnNode.Rec.ValueByName('SerialNo').AsInteger) then
-            stnNode.Rec.ValueByName('SerialNo').AsInteger := stnNode.MajorIndex;
+          if (stnNode.Rec.SerialNo.AsString = '') or
+              (stnNode.MajorIndex <> stnNode.Rec.SerialNo.AsInteger) then
+            stnNode.Rec.SerialNo.AsInteger := stnNode.MajorIndex;
 
           // 叶子节点
-          if (stnNode.Rec.ValueByName('IsLeaf').asBoolean <> not stnNode.HasChildren) then
-            stnNode.Rec.ValueByName('IsLeaf').AsBoolean := not stnNode.HasChildren;
+          stnNode.Rec.SetBoolValue(stnNode.Rec.IsLeaf, stnNode.HasChildren);
 
           // 最底项目节父节点ID
-          if (stnNode.Rec.ValueByName('B_Code').AsString <> '') then
+          if (stnNode.Rec.B_Code.AsString <> '') then
             iLeafXmjParentID := GetLeafXmjParentID(stnNode.ID)
           else
             iLeafXmjParentID := -1;
-          if (stnNode.Rec.ValueByName('LeafXmjParentID').AsInteger <> iLeafXmjParentID) then
-            stnNode.Rec.ValueByName('LeafXmjParentID').AsInteger := iLeafXmjParentID;
+          stnNode.Rec.SetIntValue(stnNode.Rec.LeafXmjParentID, iLeafXmjParentID);
 
           // 分解项目节编号为项、目、节、细目
-          if stnNode.Rec.ValueByName('Code').AsString <> '' then
+          if stnNode.Rec.Code.AsString <> '' then
             ResolveCode(stnNode.Rec);
 
           // 工程量清单排序Code
-          if (stnNode.Rec.ValueByName('B_Code').AsString <> '') then
+          if (stnNode.Rec.B_Code.AsString <> '') then
           begin
-            sIndexCode := B_CodeToIndexCode(stnNode.Rec.ValueByName('B_Code').AsString);
-            if (stnNode.Rec.ValueByName('IndexCode').AsString <> sIndexCode) then
-              stnNode.Rec.ValueByName('IndexCode').AsString := sIndexCode;
+            stnNode.Rec.SetStrValue(stnNode.Rec.IndexCode, sIndexCode);
           end;
         end;
     finally

+ 37 - 36
DataModules/StageDm.pas

@@ -572,48 +572,49 @@ end;
 procedure TStageData.CopyPrePhaseData;
 var
   iRecord: Integer;
-  Rec, NewRec: TsdDataRecord;
+  Rec: TBillsRecord;
+  NewRec: TStageRecord;
 begin
   BeforeBatchOperation;
   try
     with TProjectData(TPhaseData(FPhaseData).ProjectData).BillsData do
       for iRecord := 0 to sddBills.RecordCount - 1 do
       begin
-        Rec := sddBills.Records[iRecord];
-        if (Rec.ValueByName('AddGatherTotalPrice').AsFloat = 0) and
-           (Rec.ValueByName('AddDealTotalPrice').AsFloat = 0) and
-           (Rec.ValueByName('AddQcTotalPrice').AsFloat = 0) and
-           (Rec.ValueByName('AddPcTotalPrice').AsFloat = 0) and
-           (Rec.ValueByName('PM_AddTotalPrice').AsFloat = 0) then Continue;
-
-        NewRec := sddStage.Add;
-        NewRec.ValueByName('BillsID').AsInteger := Rec.ValueByName('ID').AsInteger;
-        NewRec.ValueByName('EndDealQuantity').AsFloat := Rec.ValueByName('AddDealQuantity').AsFloat;
-        NewRec.ValueByName('EndDealTotalPrice').AsFloat := Rec.ValueByName('AddDealTotalPrice').AsFloat;
-        NewRec.ValueByName('EndQcQuantity').AsFloat := Rec.ValueByName('AddQcQuantity').AsFloat;
-        NewRec.ValueByName('EndQcTotalPrice').AsFloat := Rec.ValueByName('AddQcTotalPrice').AsFloat;
-        NewRec.ValueByName('EndQcBGLCode').AsString := Rec.ValueByName('AddQcBGLCode').AsString;
-        NewRec.ValueByName('EndQcBGLNum').AsString := Rec.ValueByName('AddQcBGLNum').AsString;
-        NewRec.ValueByName('EndPcQuantity').AsFloat := Rec.ValueByName('AddPcQuantity').AsFloat;
-        NewRec.ValueByName('EndPcTotalPrice').AsFloat := Rec.ValueByName('AddPcTotalPrice').AsFloat;
-        NewRec.ValueByName('EndPcBGLCode').AsString := Rec.ValueByName('AddPcBGLCode').AsString;
-        NewRec.ValueByName('EndPcBGLNum').AsString := Rec.ValueByName('AddPcBGLNum').AsString;
-        NewRec.ValueByName('EndGatherQuantity').AsFloat := Rec.ValueByName('AddGatherQuantity').AsFloat;
-        NewRec.ValueByName('EndGatherTotalPrice').AsFloat := Rec.ValueByName('AddGatherTotalPrice').AsFloat;
-        NewRec.ValueByName('PreDealQuantity').AsFloat := Rec.ValueByName('AddDealQuantity').AsFloat;
-        NewRec.ValueByName('PreDealTotalPrice').AsFloat := Rec.ValueByName('AddDealTotalPrice').AsFloat;
-        NewRec.ValueByName('PreQcQuantity').AsFloat := Rec.ValueByName('AddQcQuantity').AsFloat;
-        NewRec.ValueByName('PreQcTotalPrice').AsFloat := Rec.ValueByName('AddQcTotalPrice').AsFloat;
-        NewRec.ValueByName('PreQcBGLCode').AsString := Rec.ValueByName('AddQcBGLCode').AsString;
-        NewRec.ValueByName('PreQcBGLNum').AsString := Rec.ValueByName('AddQcBGLNum').AsString;
-        NewRec.ValueByName('PrePcQuantity').AsFloat := Rec.ValueByName('AddPcQuantity').AsFloat;
-        NewRec.ValueByName('PrePcTotalPrice').AsFloat := Rec.ValueByName('AddPcTotalPrice').AsFloat;
-        NewRec.ValueByName('PrePcBGLCode').AsString := Rec.ValueByName('AddPcBGLCode').AsString;
-        NewRec.ValueByName('PrePcBGLNum').AsString := Rec.ValueByName('AddPcBGLNum').AsString;
-        NewRec.ValueByName('PreGatherQuantity').AsFloat := Rec.ValueByName('AddGatherQuantity').AsFloat;
-        NewRec.ValueByName('PreGatherTotalPrice').AsFloat := Rec.ValueByName('AddGatherTotalPrice').AsFloat;
-
-        NewRec.ValueByName('PM_PreTotalPrice').AsFloat := Rec.ValueByName('PM_AddTotalPrice').AsFloat;
+        Rec := TBillsRecord(sddBills.Records[iRecord]);
+        if (Rec.AddGatherTotalPrice.AsFloat = 0) and
+           (Rec.AddDealTotalPrice.AsFloat = 0) and
+           (Rec.AddQcTotalPrice.AsFloat = 0) and
+           (Rec.AddPcTotalPrice.AsFloat = 0) and
+           (Rec.PM_AddTotalPrice.AsFloat = 0) then Continue;
+
+        NewRec := TStageRecord(sddStage.Add);
+        NewRec.BillsID.AsInteger := Rec.ID.AsInteger;
+        NewRec.EndDealQuantity.AsFloat := Rec.AddDealQuantity.AsFloat;
+        NewRec.EndDealTotalPrice.AsFloat := Rec.AddDealTotalPrice.AsFloat;
+        NewRec.EndQcQuantity.AsFloat := Rec.AddQcQuantity.AsFloat;
+        NewRec.EndQcTotalPrice.AsFloat := Rec.AddQcTotalPrice.AsFloat;
+        NewRec.EndQcBGLCode.AsString := Rec.AddQcBGLCode.AsString;
+        NewRec.EndQcBGLNum.AsString := Rec.AddQcBGLNum.AsString;
+        NewRec.EndPcQuantity.AsFloat := Rec.AddPcQuantity.AsFloat;
+        NewRec.EndPcTotalPrice.AsFloat := Rec.AddPcTotalPrice.AsFloat;
+        NewRec.EndPcBGLCode.AsString := Rec.AddPcBGLCode.AsString;
+        NewRec.EndPcBGLNum.AsString := Rec.AddPcBGLNum.AsString;
+        NewRec.EndGatherQuantity.AsFloat := Rec.AddGatherQuantity.AsFloat;
+        NewRec.EndGatherTotalPrice.AsFloat := Rec.AddGatherTotalPrice.AsFloat;
+        NewRec.PreDealQuantity.AsFloat := Rec.AddDealQuantity.AsFloat;
+        NewRec.PreDealTotalPrice.AsFloat := Rec.AddDealTotalPrice.AsFloat;
+        NewRec.PreQcQuantity.AsFloat := Rec.AddQcQuantity.AsFloat;
+        NewRec.PreQcTotalPrice.AsFloat := Rec.AddQcTotalPrice.AsFloat;
+        NewRec.PreQcBGLCode.AsString := Rec.AddQcBGLCode.AsString;
+        NewRec.PreQcBGLNum.AsString := Rec.AddQcBGLNum.AsString;
+        NewRec.PrePcQuantity.AsFloat := Rec.AddPcQuantity.AsFloat;
+        NewRec.PrePcTotalPrice.AsFloat := Rec.AddPcTotalPrice.AsFloat;
+        NewRec.PrePcBGLCode.AsString := Rec.AddPcBGLCode.AsString;
+        NewRec.PrePcBGLNum.AsString := Rec.AddPcBGLNum.AsString;
+        NewRec.PreGatherQuantity.AsFloat := Rec.AddGatherQuantity.AsFloat;
+        NewRec.PreGatherTotalPrice.AsFloat := Rec.AddGatherTotalPrice.AsFloat;
+
+        NewRec.PM_PreTotalPrice.AsFloat := Rec.PM_AddTotalPrice.AsFloat;
       end;
   finally
     AfterBatchOperation;

+ 15 - 15
Frames/BillsCompileFme.pas

@@ -5,7 +5,7 @@ interface
 uses
   BillsCompileDm, UtilMethods, BillsClipboard, sdIDTree, BatchReplaceBillsFrm,
   CheckAndClearFrm, DealBillsFrm, BillsPasteSelectFrm,
-  sdDB,
+  sdDB, BillsTree,
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
   Dialogs, ActnList, sdGridDBA, sdGridTreeDBA, dxBar, ZJGrid, StdCtrls,
   ExtCtrls;
@@ -110,7 +110,7 @@ implementation
 
 uses
   MainFrm, BatchInsertBillsFrm, ExportExcel, ProjectData, mEncryptEditions,
-  ExcelImport, DetailExcelImport;
+  ExcelImport, DetailExcelImport, mDataRecord;
 
 {$R *.dfm}
 
@@ -240,19 +240,19 @@ end;
 procedure TBillsCompileFrame.zgBillsCompileCellGetColor(Sender: TObject;
   ACoord: TPoint; var AColor: TColor);
 var
-  stnNode: TsdIDTreeNode;
+  stnNode: TBillsIDTreeNode;
   iCreatePhaseID: Integer;
 begin
   if ACoord.Y > stdBillsCompile.IDTree.Count + 2 then Exit;
-  stnNode := stdBillsCompile.IDTree.Items[ACoord.Y - 3];
+  stnNode := TBillsIDTreeNode(stdBillsCompile.IDTree.Items[ACoord.Y - 3]);
   if not Assigned(stnNode) then Exit;
-  iCreatePhaseID := stnNode.Rec.ValueByName('CreatePhaseID').AsInteger;
+  iCreatePhaseID := stnNode.Rec.CreatePhaseID.AsInteger;
   if stnNode.ParentID = 1 then
     AColor := $00FBCAC4
-  else if (stnNode.Rec.ValueByName('B_Code').AsString = '') and (stnNode.Level > 0) then
+  else if (stnNode.Rec.B_Code.AsString = '') and (stnNode.Level > 0) then
     AColor := $00F9E8DF;
   // 书签
-  if stnNode.Rec.ValueByName('HasBookmark').AsBoolean then
+  if stnNode.Rec.HasBookMark.AsBoolean then
     AColor := $00CFE2F9;
   // 根据节点创建期数底色不同
   if iCreatePhaseID > 0 then
@@ -260,7 +260,7 @@ begin
     // 当前期不存在节点,底色为灰色提示用户
     if iCreatePhaseID > TProjectData(FBillsCompileData.ProjectData).PhaseIndex then
       AColor := $00D5D5D5
-    // 当前期新增节点,底色为黄色提示用户  
+    // 当前期新增节点,底色为黄色提示用户
     else if iCreatePhaseID = TProjectData(FBillsCompileData.ProjectData).PhaseIndex then
       AColor := $00A7FDFD;
   end;
@@ -473,19 +473,19 @@ end;
 
 procedure TBillsCompileFrame.actnSetBillsBookmarkExecute(Sender: TObject);
 var
-  Rec: TsdDataRecord;
+  Rec: TBillsRecord;
 begin
-  Rec := stdBillsCompile.IDTree.Selected.Rec;
-  if Rec.ValueByName('HasBookmark').AsBoolean then
+  Rec := TBillsRecord(stdBillsCompile.IDTree.Selected.Rec);
+  if Rec.HasBookMark.AsBoolean then
   begin
-    Rec.ValueByName('HasBookmark').AsBoolean := False;
-    Rec.ValueByName('MarkMemo').AsString := '';
+    Rec.HasBookMark.AsBoolean := False;
+    Rec.MarkMemo.AsString := '';
   end
   else
-    Rec.ValueByName('HasBookmark').AsBoolean := True;
+    Rec.HasBookMark.AsBoolean := True;
   TProjectData(FBillsCompileData.ProjectData).BillsBookmarkData.RefreshBillsBookmark;
   if Assigned(FOnAfterSetBookmark) then
-    FOnAfterSetBookmark(Rec.ValueByName('HasBookmark').AsBoolean);
+    FOnAfterSetBookmark(Rec.HasBookMark.AsBoolean);
   zgBillsCompile.InvalidateRow(zgBillsCompile.CurRow);
 end;
 

+ 7 - 7
Frames/BillsMeasureFme.pas

@@ -189,7 +189,7 @@ procedure TBillsMeasureFrame.zgBillsMeasureCellGetColor(Sender: TObject; ACoord:
 var
   stnNode: TBillsIDTreeNode;
   iCreatePhaseID: Integer;
-  StageRec: TsdDataRecord;
+  StageRec: TStageRecord;
   fDiffer: Double;
 begin
   AColor := clWindow;
@@ -206,7 +206,7 @@ begin
   if TProjectData(FBillsMeasureData.ProjectData).ProjProperties.PhaseCount > 0 then
   begin
     StageRec := TBillsIDTreeNode(stnNode).StageRec;
-    if Assigned(StageRec) and StageRec.ValueByName('HasBookmark').AsBoolean then
+    if Assigned(StageRec) and StageRec.HasBookMark.AsBoolean then
       AColor := $00CFE2F9;
   end;
   // 根据节点创建期数底色不同
@@ -441,16 +441,16 @@ begin
     vNode.StageRec := StageRec;
   end;
 
-  if StageRec.ValueByName('HasBookmark').AsBoolean then
+  if StageRec.HasBookMark.AsBoolean then
   begin
-    StageRec.ValueByName('HasBookmark').AsBoolean := False;
-    StageRec.ValueByName('MarkMemo').AsString := '';
+    StageRec.HasBookMark.AsBoolean := False;
+    StageRec.MarkMemo.AsString := '';
   end
   else
-    StageRec.ValueByName('HasBookmark').AsBoolean := True;
+    StageRec.HasBookMark.AsBoolean := True;
   TProjectData(FBillsMeasureData.ProjectData).BillsBookmarkData.RefreshStageBookmark;
   if Assigned(FOnAfterSetBookmark) then
-    FOnAfterSetBookmark(StageRec.ValueByName('HasBookmark').AsBoolean);
+    FOnAfterSetBookmark(StageRec.HasBookMark.AsBoolean);
   zgBillsMeasure.InvalidateRow(zgBillsMeasure.CurRow);
 end;
 

+ 41 - 41
Units/ExcelImport.pas

@@ -4,7 +4,7 @@ interface
 
 uses
   Classes, SMXLS, SMCells, ProjectData, MCacheTree, ZhAPI, sdDB,
-  Forms, Controls, ProgressHintFrm;
+  Forms, Controls, ProgressHintFrm, mDataRecord;
 
 type
   TExcelImport = class
@@ -309,16 +309,16 @@ end;
 procedure TBillsExcelImport.WriteNode(ADataSet: TsdDataSet;
   ANode: TBillsCacheNode);
 var
-  Rec: TsdDataRecord;
-begin
-  Rec := ADataSet.Add;
-  Rec.ValueByName('ID').AsInteger := ANode.ID;
-  Rec.ValueByName('ParentID').AsInteger := ANode.ParentID;
-  Rec.ValueByName('NextSiblingID').AsInteger := ANode.NextSiblingID;
-  Rec.ValueByName('Code').AsString := ANode.Code;
-  Rec.ValueByName('B_Code').AsString := ANode.B_Code;
-  Rec.ValueByName('Name').AsString := ANode.Name;
-  Rec.ValueByName('Units').AsString := ANode.Units;
+  Rec: TBillsRecord;
+begin
+  Rec := TBillsRecord(ADataSet.Add);
+  Rec.ID.AsInteger := ANode.ID;
+  Rec.ParentID.AsInteger := ANode.ParentID;
+  Rec.NextSiblingID.AsInteger := ANode.NextSiblingID;
+  Rec.Code.AsString := ANode.Code;
+  Rec.B_Code.AsString := ANode.B_Code;
+  Rec.Name.AsString := ANode.Name;
+  Rec.Units.AsString := ANode.Units;
   //Rec.ValueByName('LockedLevel').AsBoolean := ANode.CanDelete;
 end;
 
@@ -556,7 +556,7 @@ end;
 procedure TBillsEdtExcelImport.WriteNode(ADataSet: TsdDataSet;
   ANode: TBillsCacheNode);
 var
-  Rec: TsdDataRecord;
+  Rec: TBillsRecord;
 begin
   if ANode.Code <> '' then
     UpdateProgressHint('写入读取的Excel数据 ' + ANode.Code)
@@ -565,20 +565,20 @@ begin
   else
     UpdateProgressHint('写入读取的Excel数据 ' + ANode.Name);
 
-  Rec := ADataSet.Add;
-  Rec.ValueByName('ID').AsInteger := ANode.ID;
-  Rec.ValueByName('ParentID').AsInteger := ANode.ParentID;
-  Rec.ValueByName('NextSiblingID').AsInteger := ANode.NextSiblingID;
-  Rec.ValueByName('Code').AsString := ANode.Code;
-  Rec.ValueByName('B_Code').AsString := ANode.B_Code;
-  Rec.ValueByName('Name').AsString := ANode.Name;
-  Rec.ValueByName('Units').AsString := ANode.Units;
-  Rec.ValueByName('Price').AsFloat := PriceRoundTo(ANode.Price);
-  Rec.ValueByName('OrgQuantity').AsFloat := QuantityRoundTo(ANode.Quantity);
-  Rec.ValueByName('DgnQuantity1').AsFloat := QuantityRoundTo(ANode.DgnQuantity1);
-  Rec.ValueByName('DgnQuantity2').AsFloat := QuantityRoundTo(ANode.DgnQuantity2);
-  Rec.ValueByName('DrawingCode').AsString := ANode.DrawingCode;
-  Rec.ValueByName('MemoStr').AsString := ANode.MemoStr;
+  Rec := TBillsRecord(ADataSet.Add);
+  Rec.ID.AsInteger := ANode.ID;
+  Rec.ParentID.AsInteger := ANode.ParentID;
+  Rec.NextSiblingID.AsInteger := ANode.NextSiblingID;
+  Rec.Code.AsString := ANode.Code;
+  Rec.B_Code.AsString := ANode.B_Code;
+  Rec.Name.AsString := ANode.Name;
+  Rec.Units.AsString := ANode.Units;
+  Rec.Price.AsFloat := PriceRoundTo(ANode.Price);
+  Rec.OrgQuantity.AsFloat := QuantityRoundTo(ANode.Quantity);
+  Rec.DgnQuantity1.AsFloat := QuantityRoundTo(ANode.DgnQuantity1);
+  Rec.DgnQuantity2.AsFloat := QuantityRoundTo(ANode.DgnQuantity2);
+  Rec.DrawingCode.AsString := ANode.DrawingCode;
+  Rec.MemoStr.AsString := ANode.MemoStr;
 end;
 
 procedure TBillsEdtExcelImport.WriteNodes(ADataSet: TsdDataSet);
@@ -690,15 +690,15 @@ procedure TBillsPriceExcelImport.UpdateBillsPrice(const AB_Code: string;
   APrice: Double);
 var
   iIndex: Integer;
-  Rec: TsdDataRecord;
+  Rec: TBillsRecord;
 begin
   with FProjectData.BillsData do
   begin
     for iIndex := 0 to sddBills.RecordCount - 1 do
     begin
-      Rec := sddBills.Records[iIndex];
-      if SameText(AB_Code, Rec.ValueByName('B_Code').AsString) then
-        Rec.ValueByName('Price').AsFloat := PriceRoundTo(APrice);
+      Rec := TBillsRecord(sddBills.Records[iIndex]);
+      if SameText(AB_Code, Rec.B_Code.AsString) then
+        Rec.Price.AsFloat := PriceRoundTo(APrice);
     end;
   end;
 end;
@@ -910,25 +910,25 @@ end;
 procedure TGclBillsExcelImport.WriteNode(ADataSet: TsdDataSet;
   ANode: TGclCacheNode);
 var
-  Rec: TsdDataRecord;
+  Rec: TBillsRecord;
 begin
   if ANode.B_Code <> '' then
     UpdateProgressHint('写入读取的Excel数据 ' + ANode.B_Code)
   else
     UpdateProgressHint('写入读取的Excel数据 ' + ANode.Name);
 
-  Rec := ADataSet.Add;
-  Rec.ValueByName('ID').AsInteger := ANode.ID;
+  Rec := TBillsRecord(ADataSet.Add);
+  Rec.ID.AsInteger := ANode.ID;
   if ANode.ParentID = -1 then
-    Rec.ValueByName('ParentID').AsInteger := ParentID
+    Rec.ParentID.AsInteger := ParentID
   else
-    Rec.ValueByName('ParentID').AsInteger := ANode.ParentID;
-  Rec.ValueByName('NextSiblingID').AsInteger := ANode.NextSiblingID;
-  Rec.ValueByName('B_Code').AsString := ANode.B_Code;
-  Rec.ValueByName('Name').AsString := ANode.Name;
-  Rec.ValueByName('Units').AsString := ANode.Units;
-  Rec.ValueByName('Price').AsFloat := PriceRoundTo(ANode.Price);
-  Rec.ValueByName('OrgQuantity').AsFloat := QuantityRoundTo(ANode.Quantity);
+    Rec.ParentID.AsInteger := ANode.ParentID;
+  Rec.NextSiblingID.AsInteger := ANode.NextSiblingID;
+  Rec.B_Code.AsString := ANode.B_Code;
+  Rec.Name.AsString := ANode.Name;
+  Rec.Units.AsString := ANode.Units;
+  Rec.Price.AsFloat := PriceRoundTo(ANode.Price);
+  Rec.OrgQuantity.AsFloat := QuantityRoundTo(ANode.Quantity);
 end;
 
 end.

+ 10 - 3
Units/mDataRecord.pas

@@ -11,6 +11,7 @@ type
     procedure SetFloatValue(AValue: TsdValue; AFloat: Double);
     procedure SetIntValue(AValue: TsdValue; AInt: Integer);
     procedure SetBoolValue(AValue: TsdValue; ABool: Boolean);
+    procedure SetStrValue(AValue: TsdValue; AStr: string);
 
     procedure AddDifferValue(AValue: TsdValue; ADiffer: Double);
   end;
@@ -24,7 +25,7 @@ type
     // ±¨±íרÓÃ
     FSerialNo: TsdValue;
     FIsLeaf: TsdValue;
-    FLeafXmjID: TsdValue;
+    FLeafXmjParentID: TsdValue;
     FXiangCode: TsdValue;
     FMuCode: TsdValue;
     FJieCode: TsdValue;
@@ -112,7 +113,7 @@ type
 
     property SerialNo: TsdValue read FSerialNo;
     property IsLeaf: TsdValue read FIsLeaf;
-    property LeafXmjID: TsdValue read FLeafXmjID;
+    property LeafXmjParentID: TsdValue read FLeafXmjParentID;
     property XiangCode: TsdValue read FXiangCode;
     property MuCode: TsdValue read FMuCode;
     property JieCode: TsdValue read FJieCode;
@@ -406,7 +407,7 @@ begin
 
   FSerialNo := ValueByName('SerialNo');
   FIsLeaf := ValueByName('IsLeaf');
-  FLeafXmjID := ValueByName('LeafXmjID');
+  FLeafXmjParentID := ValueByName('LeafXmjParentID');
   FXiangCode := ValueByName('XiangCode');
   FMuCode := ValueByName('MuCode');
   FJieCode := ValueByName('JieCode');
@@ -617,4 +618,10 @@ begin
     AValue.AsInteger := AInt;
 end;
 
+procedure TMeasureBaseRecord.SetStrValue(AValue: TsdValue; AStr: string);
+begin
+  if AValue.AsString <> AStr then
+    AValue.AsString := AStr;
+end;
+
 end.