При разработке конфигурации с нуля или доработке сложных систем часто возникает ситуация, когда количество справочников исчисляется десятками. В таких условиях легко запутаться в типах реквизитов, связях и составе табличных частей. Разберем подробно, какими способами можно вывести структуру справочников, чтобы навести порядок в метаданных.
Это самый быстрый и наглядный способ, который не требует написания кода. Он позволяет получить детальное описание всех объектов в удобном для чтения текстовом или табличном формате. Рассмотрим алгоритм действий:
Справочники.Проанализируем преимущества этого метода: он показывает логическую структуру, то есть те имена и связи, которыми мы оперируем в коде (например, Справочник.Контрагенты.Реквизит.ИНН), а не физические имена таблиц в базе данных SQL.
Иногда требуется узнать не просто состав реквизитов, а то, как они называются «под капотом» — в базе данных SQL. Для этого в платформе 8.3 существует метод ПолучитьСтруктуруХраненияБазыДанных(). Рассмотрим на примере, как правильно его использовать в обработке.
Выясним причину, почему код автора из обсуждения не выводил результат. Просто вызвать функцию недостаточно, так как она возвращает ТаблицуЗначений, которую нужно отобразить пользователю. Разберем правильный пример реализации в серверной процедуре:
&НаСервере
Процедура ПолучитьИВывестиСтруктуруНаСервере()
// Формируем массив имен метаданных, структуру которых хотим получить
МассивИмен = Новый Массив;
Для Каждого МетаСправочник Из Метаданные.Справочники Цикл
МассивИмен.Добавить("Справочник." + МетаСправочник.Имя);
КонецЦикла;
// Получаем таблицу со структурой хранения
ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных(МассивИмен);
// Для вывода результата используем построитель отчета или выводим в ТабличныйДокумент
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаСтруктуры);
Построитель.Выполнить();
// Предположим, у нас на форме есть реквизит "Результат" с типом ТабличныйДокумент
Построитель.Вывести(Объект.Результат);
КонецПроцедуры
Важно помнить: ПолучитьСтруктуруХраненияБазыДанных возвращает информацию о именах таблиц (например, _Reference45) и полей (_Description, _Code). Это полезно для администраторов баз данных или при написании прямых SQL-запросов, но для логического анализа структуры это может быть избыточным.
Если наша задача — понять связи между справочниками и типы их реквизитов в терминах 1С, лучше всего использовать объект Метаданные. Напишем небольшую процедуру, которая выведет в окно сообщений или в таблицу дерево всех справочников и их составных частей.
Рассмотрим пример кода, который перебирает все справочники и выводит их реквизиты:
Процедура ВывестиЛогическуюСтруктуру()
Для Каждого СправочникИзМетаданных Из Метаданные.Справочники Цикл
Сообщить("--- Справочник: " + СправочникИзМетаданных.Имя + " ---");
// Анализируем стандартные реквизиты (Код, Наименование, Родитель и т.д.)
Для Каждого СтандартныйРеквизит Из СправочникИзМетаданных.СтандартныеРеквизиты Цикл
Сообщить(" [Стандартный] " + СтандартныйРеквизит.Имя + " (Тип: " + СтандартныйРеквизит.Тип + ")");
КонецЦикла;
// Анализируем дополнительные реквизиты, созданные разработчиком
Для Каждого Реквизит Из СправочникИзМетаданных.Реквизиты Цикл
Сообщить(" [Реквизит] " + Реквизит.Имя + " (Тип: " + Реквизит.Тип + ")");
КонецЦикла;
// Посмотрим на табличные части
Для Каждого ТЧ Из СправочникИзМетаданных.ТабличныеЧасти Цикл
Сообщить(" [ТабличнаяЧасть] " + ТЧ.Имя);
Для Каждого РеквизитТЧ Из ТЧ.Реквизиты Цикл
Сообщить(" - " + РеквизитТЧ.Имя + " (Тип: " + РеквизитТЧ.Тип + ")");
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Этот метод позволяет увидеть связи между справочниками. Если в поле Тип вы видите СправочникСсылка.НазваниеДругогоСправочника, значит, между этими объектами установлена связь.
Начиная с версии платформы 8.3.15, в режиме 1С:Предприятие доступен встроенный инструмент для просмотра структуры метаданных. Посмотрим, как им воспользоваться:
Этот инструмент позволяет в древовидном интерфейсе просматривать все объекты конфигурации, их поля, типы и даже индексы. Это гораздо удобнее, чем постоянно переключаться в Конфигуратор.
Если справочников действительно много и нужно увидеть «картину целиком», проанализируем ситуацию графически. Создадим фиктивный отчет на базе Схемы компоновки данных (СКД):
Когда вы будете добавлять справочники в правую часть конструктора, платформа автоматически будет предлагать связи (если они есть по типам данных). Это отличный способ быстро проверить, не забыли ли вы указать Владельца для подчиненного справочника или правильно ли настроены ссылки в реквизитах.
Подведем итоги выбора инструмента в зависимости от цели:
ПолучитьСтруктуруХраненияБазыДанных.Метаданные.Справочники.Использование этих методов в комплексе позволит вам полностью контролировать структуру даже самой масштабной самописной конфигурации.