Использует три SQL-базы - [Adv] - собственно, сама база 1С, [Tools] - база, где находится аггрегирующая функция Concatenate и база [AdvDW], куда помещается итоговая таблица связей Relations. Названия баз следует поменять на свои. Использовать три разных базы особой необходимости нет, просто мне так удобно.
Идея работы скрипта состоит в том, что 1С использует единый ключ типа binary(16) для всех таблиц. Поэтому, если связать (Select * from Ti inner join Tj on Ti.IDNi=Tj.IDNj) попарно все поля binary(16) всех таблиц и проверить, существует для каждого соединения хотя бы одна запись, то можно установить, существует ли связь между этими таблицами.
Аггрегирующая функция Concatenate служит для построения динамического sql. Это просто конкатенация строк заданной таблицы, описано подробно здесь http://msdn.microsoft.com/ru-ru/library/ms131056.aspx. Собственно, в сети можно найти аналоги без использования clr, но эта удобнее.
Чтобы проще понять, как все работает, можно раскомментировать Print.
Буду благодарен за любую конструктивную критику. Особо интересно оценить скорость работы на больших (минимум 10 млн. проводок ) живых базах.
Связи между таблицами без конфигуратора (sql)
Разработка - Инструментарий разработчика
См. также
Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах
10000 руб.
02.09.2020 128188 691 389
Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3
18000 руб.
06.10.2023 8680 25 6