using System; using System.Data; using System.Data.SqlClient; namespace _1CEnumParser { class Program { /// <summary> /// : , , /// </summary> private static void DataTableFill(DataTable aTable, dynamic a1CConn) { foreach (dynamic catalog in a1CConn.Metadata.Enums) { string enumName = catalog.Name; dynamic query = a1CConn.NewObject("Query"); query.Text = "select * from enum." + enumName; dynamic items = query.Execute().Unload(); // for (int i = 0; i < items.Count(); i++) { string enumValue = null; int enumOrder = -1; for (int j = 0; j < items.Columns.Count(); j++) { string colName = items.Columns.Get(j).Name; dynamic colValue; try { colValue = a1CConn.String(items.Get(i).Get(j)); } catch { colValue = "-1"; } switch (colName.ToLower()) { case "": enumValue = colValue.ToString(); break; case "": enumOrder = int.Parse(colValue.ToString()); break; default: throw new ApplicationException("unknown column name in enum.recordset: " + colName); } } // 3 : enumName, enumValue, enumOrder. aTable.Rows.Add(new object[] {enumName, enumValue, enumOrder}); } } } /// <summary> /// , DataTable , /// </summary> /// <param name="aConnectionString1C"></param> /// <param name="aConnectionStringSQL"></param> /// <param name="aTableName"></param> private static void ConnectAndFill(string aConnectionString1C, string aConnectionStringSQL, string aTableName) { // SQL var connSQL = new SqlConnection(aConnectionStringSQL); connSQL.Open(); // 1 var connector1C = new V82.COMConnector(); dynamic conn1C = connector1C.Connect(aConnectionString1C); // var command = new SqlCommand("delete from " + aTableName, connSQL); command.ExecuteNonQuery(); // var da = new SqlDataAdapter("select EnumName, EnumValue, EnumOrder from " + aTableName, connSQL); var thisBuilder = new SqlCommandBuilder(da); var ds = new DataSet(); da.Fill(ds); DataTableFill(ds.Tables[0], conn1C); da.Update(ds); // connSQL.Close(); } static void Main() { string[] args = Environment.GetCommandLineArgs(); string aConnectionString1C = args[1]; string aConnectionStringSQL = args[2]; string aTableName = args[3]; ConnectAndFill(aConnectionString1C, aConnectionStringSQL, aTableName); } } }
1cEnumParser.exe "__1" " __SQL" "__SQL"
CREATE TABLE [dbo].[tbl1CEnums]( [EnumName] [nvarchar](1024) NULL, [EnumValue] [nvarchar](2014) NULL, [EnumOrder] [int] NULL ) ON [PRIMARY]
Source: https://habr.com/ru/post/220863/
All Articles