Как быстро и просто найти в конфигурации типы ЛюбаяСсылка, СправочникСсылка и ДокументСсылка?

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

В процессе оптимизации или рефакторинга конфигурации 1С часто возникает задача поиска реквизитов, имеющих обобщенные типы данных, такие как ЛюбаяСсылка, СправочникСсылка или ДокументСсылка. Использование таких типов может негативно сказываться на производительности базы данных (особенно при использовании RLS) и усложнять структуру таблиц SQL. Рассмотрим подробнее все доступные методы поиска этих типов — от простых встроенных инструментов до продвинутого анализа файлов конфигурации.

Метод 1. Программный перебор метаданных

Самый гибкий способ — написать небольшую обработку, которая переберет все интересующие нас объекты. Разберем логику: нам необходимо проверить состав типов у каждого реквизита. Если количество типов в объекте ОписаниеТипов совпадает с общим количеством справочников или документов в системе, значит, перед нами СправочникСсылка или ДокументСсылка соответственно.

Рассмотрим пример кода для поиска таких полей:


Процедура НайтиОбобщенныеТипы()
    // Получаем массивы всех типов ссылок для сравнения
    ВсеСправочники = Справочники.ТипВсеСсылки().Типы();
    ВсеДокументы = Документы.ТипВсеСсылки().Типы();
    
    // Перебираем, например, документы и их реквизиты
    Для Каждого МетаДанноеДокумент Из Метаданные.Документы Цикл
        Для Каждого Реквизит Из МетаДанноеДокумент.Реквизиты Цикл
            ТипыРеквизита = Реквизит.Тип.Типы();
            
            // Проверка на ДокументСсылка (через сравнение массивов типов)
            Если ОбщегоНазначенияКлиентСервер.РазностьМассивов(ВсеДокументы, ТипыРеквизита).Количество() = 0 Тогда
                Сообщить("Документ: " + МетаДанноеДокумент.Имя + ", Реквизит: " + Реквизит.Имя + " имеет тип ДокументСсылка");
            КонецЕсли;
            
            // Проверка на ЛюбаяСсылка (очень много типов в массиве)
            Если ТипыРеквизита.Количество() > 500 Тогда // Условный порог для большой конфигурации
                 Сообщить("Обнаружен подозрительно широкий составной тип в: " + Реквизит.ПолноеИмя());
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
КонецПроцедуры

Метод 2. Стандартный отчет по конфигурации

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

  1. Откройте конфигуратор и перейдите в меню Конфигурация — Отчет по конфигурации.
  2. В настройках отчета выберите интересующие вас объекты (например, справочники, документы, регистры) и обязательно отметьте пункт Реквизиты.
  3. Сформируйте отчет и сохраните его в текстовый формат (.txt) или в табличный документ (.mxl).
  4. Используйте стандартный поиск (Ctrl+F) по строкам "Любая ссылка", "Справочник ссылка" или "Документ ссылка".

Этот метод хорош тем, что не требует навыков программирования, но может быть трудоемким при очень большом объеме метаданных.

Метод 3. Выгрузка конфигурации в XML-файлы

Проанализируем более современный подход, который используют опытные разработчики. При выгрузке конфигурации в файлы вся структура объектов представляется в виде XML. Это открывает возможность использования мощных текстовых поисковиков.

Пошаговый алгоритм:

  1. Выполните команду Конфигурация — Выгрузить конфигурацию в файлы... в пустую папку.
  2. Используйте редактор Visual Studio Code или Notepad++ (функция "Поиск в файлах").
  3. В поле поиска введите специализированные теги, которыми 1С обозначает эти типы в XML-структуре:
    • cfg:AnyRef — соответствует типу ЛюбаяСсылка;
    • cfg:CatalogRef — соответствует типу СправочникСсылка;
    • cfg:DocumentRef — соответствует типу ДокументСсылка.

Этот метод является самым быстрым и точным для поиска во всей конфигурации сразу, включая формы, макеты и параметры команд.

Метод 4. Анализ через 1C:EDT (Enterprise Development Tool)

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

Метод 5. Использование "Инструментов разработчика"

Существует популярный пакет внешних обработок "Инструменты разработчика" (автор С. Старостин). В его составе есть Консоль метаданных. Рассмотрим, чем она полезна: в консоли можно задать произвольный фильтр по свойствам объектов. Например, можно вывести список всех реквизитов, у которых тип данных совпадает с нужным базовым типом. Это избавляет от необходимости писать собственные циклы перебора Метаданные.Документы.

Метод 6. Анализ через SQL-запросы

Проанализируем ситуацию, если база данных работает на SQL-сервере. В структуре таблиц 1С поля с составными типами или обобщенными ссылками выглядят специфично. Как правило, они состоят из нескольких колонок:

Посмотрев на структуру таблиц через INFORMATION_SCHEMA.COLUMNS или системную таблицу _ConfigTable, можно косвенно вычислить реквизиты, имеющие "широкие" типы, так как они всегда создают мультиколоночную структуру в базе данных.

Важное замечание про Определяемые типы

Разберем одну тонкость: часто разработчики создают Определяемый тип (например, ОпределяемыйТип.ВладелецФайла) и устанавливают ему тип ЛюбаяСсылка. В этом случае поиск по строке ЛюбаяСсылка в реквизитах документов ничего не даст, так как реквизиты будут ссылаться на сам ОпределяемыйТип.

Рекомендация: Всегда начинайте анализ с раздела метаданных Общие — Определяемые типы. Если там найдены объекты с обобщенными ссылками, следующим шагом ищите использование этих конкретных определяемых типов по всей конфигурации (через команду "Поиск ссылок в конфигурации").

Резюме

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

← На главную