ソースを参照

导出0号台账Excel,取消固定ID节点时,提示用户

MaiXinRong 9 年 前
コミット
8f0c0709b9
2 ファイル変更105 行追加1 行削除
  1. 65 1
      Units/ExcelImport.pas
  2. 40 0
      Units/MCacheTree.pas

+ 65 - 1
Units/ExcelImport.pas

@@ -82,6 +82,8 @@ type
     FMemoCol: Integer;
     FLevelCol: Integer;
 
+    procedure CheckFixedIDNodes;
+
     procedure BeginImport; override;
     procedure EndImport; override;
 
@@ -171,7 +173,7 @@ type
 implementation
 
 uses Variants, CacheTree, SysUtils, UtilMethods, sdDataSet, BillsDm,
-  DealBillsDm, SheetSelectFrm, ADODB, Math;
+  DealBillsDm, SheetSelectFrm, ADODB, Math, ConstUnit;
 
 { TExcelImport }
 
@@ -361,6 +363,10 @@ procedure TBillsEdtExcelImport.EndImport;
 begin
   // For Test
   // FCacheTree.SaveTreeToFile('E:\Tree.txt');
+
+  if FWithLevelCode then
+    CheckFixedIDNodes;
+
   FFixedIDNodes.Free;
   FBaseTree.Free;
   FProjectData.BillsData.EnableEvents;
@@ -598,6 +604,64 @@ begin
   UpdateProgressPosition(100, 100);
 end;
 
+procedure TBillsEdtExcelImport.CheckFixedIDNodes;
+
+  function GetHintStr(ANode: TBillsCacheNode): string;
+  begin
+    Result := '';
+    if ANode.Code <> '' then
+      Result := Result + '编号:' + ANode.Code + ';';
+    if ANode.Name <> '' then
+      Result := Result + '名称:' + ANode.Name + ';';
+  end;
+
+  function GetInvalidModel(ANoPM: Boolean; ACount: Integer): string;
+  begin
+    if ANoPM then
+    begin
+      if ACount > 1 then
+        Result := '价差功能,部分报表'
+      else
+        Result := '价差功能'
+    end
+    else
+      Result := '部分报表';
+    Result := Result + '将不可使用' + #13#10 + '如有疑问,请联系纵横客服,企业QQ:800003850 电话:(0756)3850888';
+  end;
+
+var
+  sgs: TStrings;
+  iBase: Integer;
+  vBase, vImport: TBillsCacheNode;
+  sHint: string;
+  bNoPM: Boolean;
+begin
+  bNoPM := False;
+  sgs := TStringList.Create;
+  try
+    sgs.Add('缺少如下固定清单节点:');
+    for iBase := 0 to FBaseTree.FixedIDNodes.Count - 1 do
+    begin
+      vBase := TBillsCacheNode(FBaseTree.FixedIDNodes.Items[iBase]);
+
+      vImport := FCacheTree.FindFixedIDNode(vBase.ID);
+      if not Assigned(vImport) then
+      begin
+        sgs.Add(GetHintStr(vBase));
+        if vBase.ID = iPriceMarginID then
+          bNoPM := True;
+      end;
+    end;
+  finally
+    if sgs.Count > 1 then
+    begin
+      sgs.Add(GetInvalidModel(bNoPM, sgs.Count - 1));
+      WarningMessage(sgs.Text);
+    end;
+    sgs.Free;
+  end;
+end;
+
 { TBillsPriceExcelImport }
 
 procedure TBillsPriceExcelImport.BeginImport;

+ 40 - 0
Units/MCacheTree.pas

@@ -42,6 +42,8 @@ type
     FLastNode: TCacheNode;
     FSeparateChar: Char;
     FAutoSort: Boolean;
+
+    FFixedIDNodes: TList;
     function GetNewNode(AID: Integer = -1): TBillsCacheNode; overload;
 
     function FindNode(const ACode: string): TBillsCacheNode; overload;
@@ -51,6 +53,9 @@ type
 
     procedure SetSeparateChar(const Value: Char);
   public
+    constructor Create; override;
+    destructor Destroy; override;
+
     function AddNode(AParent: TCacheNode; ANextSibling: TCacheNode = nil; AFixedID: Integer = -1): TBillsCacheNode;
     function AddNodeByCode(const ACode: string; AFixedID: Integer = -1): TBillsCacheNode;
     function AddLeafBillsNode(const AB_Code: string): TBillsCacheNode;
@@ -58,11 +63,15 @@ type
     function FindXmjChild(AParent: TBillsCacheNode; const ACode, AName: string): TBillsCacheNode;
     function FindGclChild(AParent: TBillsCacheNode; const AB_Code, AName, AUnits: string; APrice: Double): TBillsCacheNode;
 
+    function FindFixedIDNode(AID: Integer): TBillsCacheNode;
+
     // Only for Debugging lot of Data
     procedure SaveTreeToFile(const AFileName: string);
 
     property SeparateChar: Char read FSeparateChar write SetSeparateChar;
     property AutoSort: Boolean read FAutoSort write FAutoSort;
+
+    property FixedIDNodes: TList read FFixedIDNodes;
   end;
 
   // 此树仅用于导入工程量清单,禁止作为它用
@@ -402,6 +411,8 @@ begin
   else
     Result := TBillsCacheNode.Create(Self, AID);
   CacheNodes.Add(Result);
+  if Result.ID < 100 then
+    FFixedIDNodes.Add(Result);
 end;
 
 function TBillsCacheTree.AddNode(AParent, ANextSibling: TCacheNode;
@@ -508,6 +519,35 @@ begin
   end;
 end;
 
+constructor TBillsCacheTree.Create;
+begin
+  inherited;
+  FFixedIDNodes := TList.Create;
+end;
+
+destructor TBillsCacheTree.Destroy;
+begin
+  FFixedIDNodes.Free;
+  inherited;
+end;
+
+function TBillsCacheTree.FindFixedIDNode(AID: Integer): TBillsCacheNode;
+var
+  iNode: Integer;
+  vNode: TCacheNode;
+begin
+  Result := nil;
+  for iNode := 0 to FFixedIDNodes.Count - 1 do
+  begin
+    vNode := TCacheNode(FFixedIDNodes.Items[iNode]);
+    if vNode.ID = AID then
+    begin
+      Result := TBillsCacheNode(vNode);
+      Break;
+    end;
+  end;
+end;
+
 { TReportCacheNode }
 
 constructor TReportCacheNode.Create(ACacheTree: TCacheTree; AID,