При проведении аудита базы, проектировании интеграций или составлении технического задания бизнес-аналитикам и разработчикам часто требуется получить полный список справочников системы вместе с их реквизитами, типами данных и описанием. Разберем основные способы решения этой задачи: от использования штатных инструментов конфигуратора до написания собственной компактной обработки.
В платформе 1С:Предприятие 8 уже встроен инструмент документирования структуры базы данных, который не требует установки дополнительных внешних обработок. Среди начинающих специалистов распространено заблуждение, что данный отчет формирует лишь общий список объектов без детализации полей. Рассмотрим, как правильно настроить данный отчет для получения подробного перечня реквизитов и типов данных:
Конфигурация и выберем пункт Отчет по конфигурации....Справочники.ТабличныйДокумент с полным описанием выбранных объектов.Файл — Сохранить как... и укажем формат Лист Excel (*.xlsx) или текстовый документ.Важное ограничение: при формировании отчета по всей конфигурации целиком на крупных типовых решениях (таких как ERP или Комплексная автоматизация) процесс может завершиться аварийно с ошибкой нехватки оперативной памяти (Out of Memory). Рекомендуется всегда снимать флаги с ненужных объектов и формировать отчет точечно по интересующим веткам метаданных.
Проверенным и удобным инструментом выгрузки структуры метаданных является сервисная обработка, входящая в комплект поставки конфигурации «Конвертация данных 2.1» (файл MD83Exp.epf или аналогичный для требуемой версии платформы). Посмотрим на алгоритм работы с ней:
Файл — Открыть....Если сторонних обработок под рукой нет, а штатный отчет кажется слишком громоздким по оформлению, напишем собственную внешнюю обработку. Проанализируем программный обход коллекции Метаданные.Справочники.
Главный подводный камень здесь заключается в том, что коллекция Реквизиты объекта метаданных хранит только те поля, которые добавлены разработчиком вручную. Системные поля — такие как «Код», «Наименование», «Родитель», «Владелец» — хранятся в отдельной системной коллекции СтандартныеРеквизиты. Чтобы не потерять ключевые поля справочников, необходимо обходить обе коллекции.
Посмотрим на пример процедуры, которая формирует и сразу сохраняет таблицу со структурой в файл формата XLSX:
ТабДок = Новый ТабличныйДокумент;
Секция = Новый ТабличныйДокумент;
НомерСтроки = 1;
Для Каждого МдСправочник Из Метаданные.Справочники Цикл
ТабДок.Область("R" + НомерСтроки + "C1").Текст = МдСправочник.Имя;
ТабДок.Область("R" + НомерСтроки + "C2").Текст = "Справочник";
ТабДок.Область("R" + НомерСтроки + "C3").Текст = МдСправочник.Синоним;
НомерСтроки = НомерСтроки + 1;
// Обходим стандартные реквизиты (Код, Наименование, Ссылка и т.д.)
Для Каждого Реквизит Из МдСправочник.СтандартныеРеквизиты Цикл
ТабДок.Область("R" + НомерСтроки + "C2").Текст = Реквизит.Имя;
ТабДок.Область("R" + НомерСтроки + "C3").Текст = "Стандартный";
ТабДок.Область("R" + НомерСтроки + "C4").Текст = Строка(Реквизит.Тип);
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
// Обходим пользовательские реквизиты объекта
Для Каждого Реквизит Из МдСправочник.Реквизиты Цикл
ТабДок.Область("R" + НомерСтроки + "C2").Текст = Реквизит.Имя;
ТабДок.Область("R" + НомерСтроки + "C3").Текст = "Реквизит";
ТабДок.Область("R" + НомерСтроки + "C4").Текст = Строка(Реквизит.Тип);
ТабДок.Область("R" + НомерСтроки + "C5").Текст = Реквизит.Подсказка;
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
// Обходим табличные части и их состав
Для Каждого ТЧ Из МдСправочник.ТабличныеЧасти Цикл
ТабДок.Область("R" + НомерСтроки + "C2").Текст = ТЧ.Имя;
ТабДок.Область("R" + НомерСтроки + "C3").Текст = "Табличная часть";
НомерСтроки = НомерСтроки + 1;
Для Каждого РеквизитТЧ Из ТЧ.Реквизиты Цикл
ТабДок.Область("R" + НомерСтроки + "C3").Текст = РеквизитТЧ.Имя;
ТабДок.Область("R" + НомерСтроки + "C4").Текст = Строка(РеквизитТЧ.Тип);
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
КонецЦикла;
КонецЦикла;
ТабДок.Записать("C:\Temp\СтруктураСправочников.xlsx", ТипФайлаТабличногоДокумента.XLSX);
Метод Записать с параметром ТипФайлаТабличногоДокумента.XLSX преобразует сформированный документ в файл Excel без необходимости устанавливать пакет MS Office на рабочий компьютер или сервер.
В ситуациях, когда выгрузка структуры требуется для построения прямых SQL-запросов к СУБД или организации внешней интеграции на уровне базы данных, информации из дерева метаданных 1С бывает недостаточно. В этом случае выясним реальные физические имена полей с помощью глобальной функции ПолучитьСтруктуруХраненияБазыДанных().
Разберем, как получить и проанализировать эту таблицу:
МассивИмен = Новый Массив;
Для Каждого Спр Из Метаданные.Справочники Цикл
МассивИмен.Добавить(Спр.ПолноеИмя());
КонецЦикла;
// Получаем таблицу соответствия имен метаданных и физических таблиц СУБД
ТаблицаХранения = ПолучитьСтруктуруХраненияБазыДанных(МассивИмен, Истина);
// Таблицу значений можно выгрузить в табличный документ или обработать циклом
Для Каждого СтрокаТаблицы Из ТаблицаХранения Цикл
ИмяОбъекта = СтрокаТаблицы.ИмяТаблицы;
ИмяВБазеSQL = СтрокаТаблицы.ИмяТаблицыХранения;
ПоляОбъекта = СтрокаТаблицы.Поля; // Вложенная таблица с именами колонок СУБД
КонецЦикла;
Параметр Истина во втором аргументе функции указывает платформе вернуть подробные сведения обо всех полях каждой таблицы, включая системные идентификаторы и разделители.
Если требуется полный анализ структуры средствами внешних языков программирования (например, Python), используем команду Конфигуратора Конфигурация — Выгрузить конфигурацию в файлы.... Платформа создаст каталог со структурированными XML-файлами для каждого справочника, где описаны все типы данных, ограничения длины строк, точность чисел и синонимы.