namespace ConsoleApplication
public void Connect(string path, string user = "", string password = "")
dynamic connector = Activator.CreateInstance(Type.GetTypeFromProgID("V82.COMConnector"));
string connectionString = "File=\"" + path + "\"";
connectionString += ";Usr=\"" + user + "\"";
connectionString += ";Pwd=\"" + password + "\"";
Connection = connector.Connect(connectionString);
public void Export(string path)
XmlTextWriter xml = new XmlTextWriter(path, Encoding.UTF8);
xml.Formatting = Formatting.Indented;
xml.WriteStartDocument();
xml.WriteStartElement("database");
foreach (dynamic catalog in Connection.Metadata.Catalogs)
xml.WriteStartElement("catalog");
xml.WriteAttributeString("name", catalog.Name);
dynamic query = Connection.NewObject("Query");
query.Text = "select * from catalog." + catalog.Name;
dynamic items = query.Execute().Unload();
for (int i = 0; i < items.Count(); i++)
xml.WriteStartElement("item");
for (int j = 0; j < items.Columns.Count(); j++)
xml.WriteStartElement("attribute");
xml.WriteAttributeString("name", items.Columns.Get(j).Name);
xml.WriteAttributeString("value", Connection.XMLString(items.Get(i).Get(j)));
foreach (dynamic document in Connection.Metadata.Documents)
dynamic query = Connection.NewObject("Query");
query.Text = "select * from document." + document.Name;
dynamic table = query.Execute().Unload();
for (int i = 0; i < table.Count(); i++)
xml.WriteStartElement("document");
xml.WriteAttributeString("name", document.Name);
for (int j = 0; j < table.Columns.Count(); j++)
xml.WriteStartElement("attribute");
string field = table.Columns.Get(j).Name;
xml.WriteAttributeString("name", field);
dynamic tabular = document.TabularSections.Find(field);
xml.WriteAttributeString("value", Connection.XMLString(table.Get(i).Get(j)));
docref = table.Get(i).Get(j);
dynamic subquery = Connection.NewObject("Query");
subquery.Text = "select * from document." + document.Name + "." + field +
" as lines where lines.Ref=&Ref";
subquery.SetParameter("Ref", docref);
dynamic lines = subquery.Execute().Unload();
for (int line = 0; line < lines.Count(); line++)
xml.WriteStartElement("line");
for (int col = 0; col < lines.Columns.Count(); col++)
xml.WriteStartElement("attribute");
xml.WriteAttributeString("name", lines.Columns.Get(col).Name);
string value = Connection.XMLString(lines.Get(line).Get(col));
xml.WriteAttributeString("value", value);
public static void Main(string[] args)
Export1C export = new Export1C();
export.Connect("D:\\TestBase", "User", "pass");
export.Export("D:\\Export.xml");