powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Где увидеть полный список классов, методов и свойств V82.COMConnector ?
4 сообщений из 29, страница 2 из 2
Где увидеть полный список классов, методов и свойств V82.COMConnector ?
    #38625239
autsaiderСоздайте вьюхи на все объекты:

CREATE VIEW Перечисление_ЮридическоеФизическоеЛицо AS
SELECT
_IDRRef AS Ссылка
, _EnumOrder AS Порядок
, case _EnumOrder when 0 then 'ЮридическоеЛицо' when 1 then 'ФизическоеЛицо' end AS Значение
, case _EnumOrder when 0 then 'Юридическое лицо' when 1 then 'Физическое лицо' end AS Синоним
, case _EnumOrder when 0 then '' when 1 then '' end AS Комментарий
FROM _Enum776
...
Ну и надо не забывать пересоздавать вьюхи после реструктуризации БД.

У вас хардкод получается.
Вот в том то и дело, что надо пересоздавать вьюхи после реструктуризации, что очень плохо:
я откуда могу знать какие они засунут туда значения завтра?

Так что для того, чтобы было гибко, я ничего лучшего не придумал кроме как вытягивания всех значений своей прогой.
Код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
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);
        }
    }
}
...
Рейтинг: 0 / 0
Где увидеть полный список классов, методов и свойств V82.COMConnector ?
    #38625271
autsaider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь БобакУ вас хардкод получается.
Вот в том то и дело, что надо пересоздавать вьюхи после реструктуризации, что очень плохо:
я откуда могу знать какие они засунут туда значения завтра?


В чем проблема вьюхи пересоздавать регламентным заданием несколько раз в сутки?
Или перед запуском вашего обмена производить верификацию вьюх и пересоздавать нужные при необходимости.

С COMConnector-ом тоже не все всегда гладко. После установки нового релиза платформы выясняется, что зарегистрирован COMConnector от старого релиза или зарегистрирована x64 версия, когда нужна x86 или что-нибудь в таком духе.
...
Рейтинг: 0 / 0
Где увидеть полный список классов, методов и свойств V82.COMConnector ?
    #38625464
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
autsaiderС COMConnector-ом тоже не все всегда гладко. После установки нового релиза платформы выясняется, что зарегистрирован COMConnector от старого релиза или зарегистрирована x64 версия, когда нужна x86 или что-нибудь в таком духе.

+ доменная авторизация/права (от кого запущено)... в принципе все это решаемо, но гиморой иногда доставляет
...
Рейтинг: 0 / 0
Где увидеть полный список классов, методов и свойств V82.COMConnector ?
    #38626496
autsaiderВ чем проблема вьюхи пересоздавать регламентным заданием несколько раз в сутки?
Или перед запуском вашего обмена производить верификацию вьюх и пересоздавать нужные при необходимости.

Есть два варианта:
1) регламентное задание будет перезаполнять таблицу с полями EnumName, EnumValue, EnumOrder, вычитывая из 1С программно все енумы (приведенный выше код)
2) регламентное задание будет вычитывать енумы, генерировать код вьюх, запускать alter скрипты на базе

И какая разница что будет делать регламентное задание?
Ему всеравно надо вычитать все перечисления - от этого не убежишь.
...
Рейтинг: 0 / 0
4 сообщений из 29, страница 2 из 2
Форумы / [игнор отключен] [закрыт для гостей] / Где увидеть полный список классов, методов и свойств V82.COMConnector ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]