|
@@ -24,6 +24,8 @@ type
|
|
|
procedure Open(AConnection: TADOConnection);
|
|
|
procedure CalcCacheData(ANode:TsdIDTreeNode; AOrder: Integer; AParentPath: String);
|
|
|
|
|
|
+ procedure RecursiveExportBillsJson(const AFileName: string);
|
|
|
+
|
|
|
property BillsTree: TsdIDTree read FBillsTree;
|
|
|
end;
|
|
|
|
|
@@ -98,4 +100,53 @@ begin
|
|
|
sddStdBills.AddIndex('sddBCode', 'B_Code');
|
|
|
end;
|
|
|
|
|
|
+procedure TStandardBillsData.RecursiveExportBillsJson(
|
|
|
+ const AFileName: string);
|
|
|
+var
|
|
|
+ sgs: TStrings;
|
|
|
+
|
|
|
+ function GetNodeData(ANode: TsdIDTreeNode; AOrder: Integer; AFullPath: string): string;
|
|
|
+ const
|
|
|
+ sBillsJson = '"id": %d, "pid": %d, "order": %d, "full_path": "%s", "level": %d, "is_leaf" : %d, ' +
|
|
|
+ '"code": "%s", "b_code": "%s", "name": "%s", "unit": "%s"';
|
|
|
+ begin
|
|
|
+ Result := Format(sBillsJson, [ANode.ID, ANode.Rec.ValueByName('ParentID').AsInteger, AOrder, AFullPath,
|
|
|
+ ANode.Rec.ValueByName('BillsLevel').AsInteger, Integer(not ANode.HasChildren),
|
|
|
+ ANode.Rec.ValueByName('Code').AsString, ANode.Rec.ValueByName('B_Code').AsString,
|
|
|
+ ANode.Rec.ValueByName('Name').AsString, ANode.Rec.ValueByName('Unit').AsString]);
|
|
|
+ end;
|
|
|
+
|
|
|
+ procedure ExportNode(ANode: TsdIDTreeNode; AOrder: Integer; AParentPath: string);
|
|
|
+ var
|
|
|
+ sNodePath: string;
|
|
|
+ begin
|
|
|
+ if not Assigned(ANode) then Exit;
|
|
|
+
|
|
|
+ if AParentPath = '' then
|
|
|
+ sNodePath := IntToStr(ANode.ID)
|
|
|
+ else
|
|
|
+ sNodePath := AParentPath + '.' + IntToStr(ANode.ID);
|
|
|
+
|
|
|
+ sgs.Strings[sgs.Count - 1] := sgs.Strings[sgs.Count - 1] + '{';
|
|
|
+ sgs.Add(Format(' %s', [AnsiToUtf8(GetNodeData(ANode, AOrder, sNodePath))]));
|
|
|
+ sgs.Add('}');
|
|
|
+ if Assigned(ANode.NextNode) then
|
|
|
+ sgs.Strings[sgs.Count - 1] := sgs.Strings[sgs.Count - 1] + ',';
|
|
|
+
|
|
|
+ ExportNode(ANode.FirstChild, 1, sNodePath);
|
|
|
+ ExportNode(ANode.NextSibling, AOrder + 1, AParentPath);
|
|
|
+ end;
|
|
|
+
|
|
|
+begin
|
|
|
+ sgs := TStringList.Create;
|
|
|
+ try
|
|
|
+ sgs.Add('[');
|
|
|
+ ExportNode(FBillsTree.FirstNode, 1, '');
|
|
|
+ sgs.Strings[sgs.Count - 1] := sgs.Strings[sgs.Count - 1] + ']';
|
|
|
+ sgs.SaveToFile(AFileName);
|
|
|
+ finally
|
|
|
+ sgs.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
end.
|