Как найти в конфигурации объекты с типом «Любая ссылка»?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки или оптимизации конфигурации 1С часто возникает задача поиска объектов (реквизитов справочников, документов, ресурсов регистров), тип которых определен как «Любая ссылка». Это важно не только для поддержания порядка в метаданных, но и для обеспечения производительности системы. В этой статье мы подробно разберем, как программно и интерактивно вычислить такие объекты, и почему их наличие может быть критичным для базы данных.

Различие между «Неопределено» и «Любая ссылка»

Прежде всего, проанализируем терминологию, так как на форумах часто возникает путаница. Значение Неопределено — это специфическое значение типа ТипЗнч(Неопределено), которое обычно принимает реквизит с составным типом, если он не заполнен. Однако, когда мы говорим о поиске в конфигураторе, чаще всего подразумевается поиск реквизитов, у которых в палитре свойств не выбран конкретный объект, а установлена общая категория ссылочных типов. Рассмотрим, как это выглядит в коде.

Программный поиск через перебор метаданных

Для того чтобы найти такие объекты программно, нам необходимо создать эталонный объект ОписаниеТипов, который будет содержать в себе все возможные ссылочные типы конфигурации. Затем мы сможем сравнить типы каждого реквизита с этим эталоном. Разберем по шагам, как сформировать такое описание.

Рассмотрим пример формирования полного описания всех ссылочных типов:


// Создаем пустое описание типов
ВсеСсылкиОписание = Новый ОписаниеТипов;

// Последовательно добавляем все типы ссылок по коллекциям метаданных
ВсеСсылкиОписание = Новый ОписаниеТипов(ВсеСсылкиОписание, Справочники.ТипВсеСсылки().Типы());
ВсеСсылкиОписание = Новый ОписаниеТипов(ВсеСсылкиОписание, Документы.ТипВсеСсылки().Типы());
ВсеСсылкиОписание = Новый ОписаниеТипов(ВсеСсылкиОписание, Перечисления.ТипВсеСсылки().Типы());
ВсеСсылкиОписание = Новый ОписаниеТипов(ВсеСсылкиОписание, ПланыСчетов.ТипВсеСсылки().Типы());
ВсеСсылкиОписание = Новый ОписаниеТипов(ВсеСсылкиОписание, ПланыВидовХарактеристик.ТипВсеСсылки().Типы());
ВсеСсылкиОписание = Новый ОписаниеТипов(ВсеСсылкиОписание, Задачи.ТипВсеСсылки().Типы());
ВсеСсылкиОписание = Новый ОписаниеТипов(ВсеСсылкиОписание, ПланыВидовРасчета.ТипВсеСсылки().Типы());
ВсеСсылкиОписание = Новый ОписаниеТипов(ВсеСсылкиОписание, ПланыОбмена.ТипВсеСсылки().Типы());
ВсеСсылкиОписание = Новый ОписаниеТипов(ВсеСсылкиОписание, БизнесПроцессы.ТипВсеСсылки().Типы());
ВсеСсылкиОписание = Новый ОписаниеТипов(ВсеСсылкиОписание, БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().Типы());

После формирования такого объекта ВсеСсылкиОписание, мы можем организовать цикл по метаданным. Проанализируем ситуацию: если количество типов в реквизите совпадает или близко к количеству типов в нашем эталоне, вероятно, перед нами «Любая ссылка».

Универсальный способ формирования описания типов

Существует более изящный способ собрать все ссылки, используя коллекцию Метаданные.Объекты (если ваша версия платформы поддерживает подобные обращения). Посмотрим на пример кода:


ЭталонноеОписание = Новый ОписаниеТипов;
Для каждого Коллекция Из Метаданные Цикл
    // Проверяем наличие метода ТипВсеСсылки у коллекции
    Попытка
        ТипыКоллекции = Коллекция.ТипВсеСсылки().Типы();
        ЭталонноеОписание = Новый ОписаниеТипов(ЭталонноеОписание, ТипыКоллекции);
    Исключение
        // Коллекция не является ссылочной (например, константы или регистры)
    КонецПопытки;
КонецЦикла;

Интерактивные методы поиска

Если нет желания писать обработку, выясним причину и воспользуемся встроенными инструментами конфигуратора. Рассмотрим два эффективных метода:

  1. Отчет по конфигурации. Перейдем в меню Конфигурация — Отчет по конфигурации. В настройках укажем только интересующие нас объекты (справочники, документы) и их реквизиты. После формирования отчета в текстовом виде достаточно нажать Ctrl + F и выполнить поиск по фразе «Любая ссылка».
  2. Выгрузка конфигурации в файлы. Этот метод позволяет проанализировать структуру XML. Выгрузим конфигурацию через меню Конфигурация — Выгрузить конфигурацию в файлы. В полученной папке с помощью любого текстового редактора (например, Notepad++), поддерживающего поиск по файлам, ищем теги <Type>, которые не содержат конкретных ссылок на объекты метаданных, или специфические идентификаторы, отвечающие за неопределенный ссылочный тип.

Использование Enterprise Development Tools (EDT)

Проанализируем возможности современной среды разработки EDT. Если ваша конфигурация импортирована в проект EDT, поиск упрощается в разы. В панели Search можно настроить фильтры по свойствам объектов метаданных. Использование запросов XPath позволяет мгновенно отобрать все реквизиты, у которых тип данных соответствует максимально широкому набору ссылок.

Почему важно избавляться от типа «Любая ссылка»?

Выясним, чем опасен такой тип данных с точки зрения системного администрирования и производительности:

Совет: Всегда старайтесь ограничивать состав типов в ОписаниеТипов только теми объектами, которые действительно необходимы для решения бизнес-задачи. Если же вам все же нужно найти все такие места в старой конфигурации, используйте приведенный выше программный метод перебора Метаданные.Справочники, Метаданные.Документы и т.д., проверяя свойство Тип у каждого реквизита.

← На главную