При разработке или анализе конфигураций 1С часто возникает задача выгрузить структуру метаданных, чтобы понять, какие поля являются обязательными для заполнения. Вручную проверять сотни справочников — неэффективно. Рассмотрим, как автоматизировать этот процесс, используя встроенный язык 1С и обращение к объекту Метаданные.
Для решения задачи нам потребуется перебрать все справочники, представленные в конфигурации, проанализировать их свойства и отфильтровать те реквизиты, у которых установлена проверка заполнения. Основным ключом здесь выступает свойство ПроверкаЗаполнения.
Разберем процесс поэтапно:
Метаданные.Справочники.СтандартныеРеквизиты и Реквизиты.ПроверкаЗаполнения. Нас интересует значение Метаданные.СвойстваОбъектов.ПроверкаЗаполнения.ВыдаватьОшибку.Давайте посмотрим, как это выглядит на практике. Мы создадим таблицу значений и наполним её данными о проблемных (обязательных) полях.
// Создаем таблицу для хранения данных
ТаблицаРеквизитов = Новый ТаблицаЗначений;
ТаблицаРеквизитов.Колонки.Добавить("Справочник");
ТаблицаРеквизитов.Колонки.Добавить("ИмяРеквизита");
ТаблицаРеквизитов.Колонки.Добавить("Синоним");
// Перебираем все справочники
Для Каждого СправочникМетаданные Из Метаданные.Справочники Цикл
// Проверяем стандартные реквизиты
Для Каждого Реквизит Из СправочникМетаданные.СтандартныеРеквизиты Цикл
Если Реквизит.ПроверкаЗаполнения = Метаданные.СвойстваОбъектов.ПроверкаЗаполнения.ВыдаватьОшибку Тогда
Строка = ТаблицаРеквизитов.Добавить();
Строка.Справочник = СправочникМетаданные.Имя;
Строка.ИмяРеквизита = Реквизит.Имя;
Строка.Синоним = Реквизит.Синоним;
КонецЕсли;
КонецЦикла;
// Проверяем пользовательские реквизиты
Для Каждого Реквизит Из СправочникМетаданные.Реквизиты Цикл
Если Реквизит.ПроверкаЗаполнения = Метаданные.СвойстваОбъектов.ПроверкаЗаполнения.ВыдаватьОшибку Тогда
Строка = ТаблицаРеквизитов.Добавить();
Строка.Справочник = СправочникМетаданные.Имя;
Строка.ИмяРеквизита = Реквизит.Имя;
Строка.Синоним = Реквизит.Синоним;
КонецЕсли;
КонецЦикла;
КонецЦикла;
При выполнении анализа учитывайте следующие особенности, которые помогут сделать отчет более качественным:
Стандартные реквизиты: Не забывайте, что такие поля как Код и Наименование также могут иметь настройки проверки заполнения. Их обязательно нужно включать в отчет, обращаясь к коллекции СтандартныеРеквизиты.
Типизация данных: Если вам требуется глубже проанализировать структуру, выводите свойство Тип для каждого реквизита. Это свойство возвращает объект ОписаниеТипов, который наглядно показывает, какие данные ожидаются в поле (строки, числа, ссылки на другие справочники).
Функциональные опции: Важно понимать, что программный анализ метаданных покажет все реквизиты, для которых установлено свойство ПроверкаЗаполнения, вне зависимости от того, включены ли в данный момент ФункциональныеОпции, скрывающие эти реквизиты в интерфейсе пользователя. Если реквизит скрыт опцией, система 1С технически не будет требовать его заполнения при записи объекта, даже если в метаданных стоит флаг проверки. Будьте внимательны при интерпретации данных, если в вашей конфигурации активно используются функциональные опции.
Визуализация: Для удобства пользователей рекомендуется выводить Синоним, а не только техническое Имя. Это значительно упрощает коммуникацию с бизнес-заказчиками, которые будут проверять полученный отчет.
Используя этот подход, вы сможете быстро получить полный срез настроек обязательности заполнения данных по всей конфигурации, независимо от количества справочников в ней.