Как найти, в каких объектах конфигурации 1С используется конкретный тип данных или объект метаданных?

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

В процессе доработки или поддержки сложных конфигураций «1С:Предприятие» разработчики часто сталкиваются с необходимостью найти все места, где задействован тот или иной объект метаданных. Например, мы создали нетиповой справочник с определенным префиксом в названии и теперь хотим выяснить, в каких реквизитах документов, измерениях регистров сведений или табличных частях он выбран в качестве типа данных. Напрямую перебирать вручную сотни объектов конфигурации — задача неблагодарная и неэффективная. К счастью, платформа 1С и сопутствующая экосистема предоставляют несколько отличных инструментов для решения этой задачи. Разберем по шагам все доступные методы, начиная от самых простых штатных средств и заканчивая программным поиском.

Способ 1. Штатный поиск ссылок в дереве метаданных Конфигуратора

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

Проанализируем алгоритм наших действий:

  1. Откроем Конфигуратор и развернем дерево метаданных.
  2. Найдем интересующий нас объект (например, наш нетиповой справочник или документ).
  3. Нажмем на него правой кнопкой мыши и в контекстном меню выберем пункт «Поиск ссылок на объект» (также это действие доступно через кнопку «Действия» на панели дерева метаданных).
  4. Платформа выполнит поиск и выведет все найденные связи в стандартное окно «Результаты поиска».

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

Способ 2. Глобальный текстовый поиск (Ctrl + Shift + F)

Если нам необходимо найти упоминание объекта не только в типах данных реквизитов, но и в программном коде (модулях), текстах запросов, макетах или СКД, то на помощь приходит глобальный поиск.

Рассмотрим подробнее, как его правильно настроить:

  1. Нажмем сочетание клавиш Ctrl + Shift + F для вызова окна глобального поиска.
  2. В поле «Что искать» введем имя нашего объекта метаданных. Например, если мы ищем нетиповой справочник, введем его точное имя Префикс_МойСправочник. Если мы хотим найти все объекты с определенным префиксом, можно ввести этот префикс (например, Префикс_).
  3. В области поиска мы можем гибко настроить фильтры. Обязательно укажем поиск в модулях, свойствах, текстах запросов и макетах.
  4. Нажмем кнопку «Искать».

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

Способ 3. Получение и анализ описания структуры метаданных

Малоизвестный, но крайне полезный штатный инструмент — выгрузка полного текстового описания конфигурации. Он позволяет получить один большой текстовый файл, в котором описаны абсолютно все свойства всех объектов.

Выполним следующие шаги:

  1. В главном меню Конфигуратора перейдем в раздел «Конфигурация» -> «Описание структуры метаданных».
  2. Платформа сформирует и откроет текстовый документ, содержащий детальное описание всей конфигурации.
  3. Нажмем Ctrl + F в этом документе и введем имя нашего объекта.

Этот метод позволяет быстро проанализировать структуру "глазами" и увидеть контекст использования типов данных в едином файле.

Способ 4. Выгрузка конфигурации в XML-файлы для глубокого анализа

Что делать, если нужно найти скрытые свойства, настройки прав доступа (роли), условия RLS или сложные отборы в схемах компоновки данных (СКД), которые обычный поиск Конфигуратора обходит стороной? Для таких ультимативных задач отлично подходит выгрузка конфигурации в XML.

Разберем этот процесс по шагам:

  1. В Конфигураторе выберем пункт меню «Конфигурация» -> «Выгрузка конфигурации в файлы...» и укажем пустую папку на диске.
  2. Дождемся окончания выгрузки. Платформа преобразует всю конфигурацию в структурированный набор файлов XML.
  3. Откроем полученную папку в любом продвинутом текстовом редакторе, например, VS Code или Notepad++.
  4. Запустим поиск по всей папке (обычно это сочетание клавиш Ctrl + Shift + F в самом редакторе).
  5. В строке поиска укажем полное системное имя нашего объекта, например, Catalog.Префикс_ИмяСправочника.

В результатах мы увидим абсолютно все упоминания. Такой подход позволяет найти даже те связи, которые скрыты глубоко внутри XML-структур форм или настроек компоновки.

Способ 5. Программный поиск через встроенный язык 1С

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

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


Процедура НайтиИспользованиеТипаНаСервере(ИмяИскомогоОбъекта) Экспорт
    
    // Формируем тип ссылки искомого объекта (например, справочника)
    Попытка
        ИскомыйТип = Тип("СправочникСсылка." + ИмяИскомогоОбъекта);
    Исключение
        Сообщить("Не удалось определить тип для справочника: " + ИмяИскомогоОбъекта);
        Возврат;
    КонецПопытки;

    Сообщить("=== НАЧАЛО ПОИСКА ДЛЯ ТИПА: " + ИмяИскомогоОбъекта + " ===");

    // 1. Поиск в справочниках
    Для Каждого Справочник Из Метаданные.Справочники Цикл
        // Проверяем реквизиты справочника
        Для Каждого Реквизит Из Справочник.Реквизиты Цикл
            Если Реквизит.Тип.СодержитТип(ИскомыйТип) Тогда
                Сообщить("Найдено в реквизите справочника: " + Справочник.ПолноеИмя() + "." + Реквизит.Имя);
            КонецЕсли;
        КонецЦикла;
        
        // Проверяем табличные части
        Для Каждого ТабличнаяЧасть Из Справочник.ТабличныеЧасти Цикл
            Для Каждого РеквизитТЧ Из ТабличнаяЧасть.Реквизиты Цикл
                Если РеквизитТЧ.Тип.СодержитТип(ИскомыйТип) Тогда
                    Сообщить("Найдено в табличной части справочника: " + Справочник.ПолноеИмя() + "." + ТабличнаяЧасть.Имя + "." + РеквизитТЧ.Имя);
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;

    // 2. Поиск в документах
    Для Каждого Документ Из Метаданные.Документы Цикл
        Для Каждого Реквизит Из Документ.Реквизиты Цикл
            Если Реквизит.Тип.СодержитТип(ИскомыйТип) Тогда
                Сообщить("Найдено в реквизите документа: " + Документ.ПолноеИмя() + "." + Реквизит.Имя);
            КонецЕсли;
        КонецЦикла;
        
        Для Каждого ТабличнаяЧасть Из Документ.ТабличныеЧасти Цикл
            Для Каждого РеквизитТЧ Из ТабличнаяЧасть.Реквизиты Цикл
                Если РеквизитТЧ.Тип.СодержитТип(ИскомыйТип) Тогда
                    Сообщить("Найдено в табличной части документа: " + Документ.ПолноеИмя() + "." + ТабличнаяЧасть.Имя + "." + РеквизитТЧ.Имя);
                КонецЕсли;
            EndЕсли;
        КонецЦикла;
    КонецЦикла;

    // 3. Поиск в регистрах сведений (особенно актуально для измерений)
    Для Каждого Регистр Из Метаданные.РегистрыСведений Цикл
        // Проверяем измерения
        Для Каждого Измерение Из Регистр.Измерения Цикл
            Если Измерение.Тип.СодержитТип(ИскомыйТип) Тогда
                Сообщить("Найдено в измерении регистра сведений: " + Регистр.ПолноеИмя() + "." + Измерение.Имя);
            КонецЕсли;
        КонецЦикла;
        
        // Проверяем ресурсы
        Для Каждого Ресурс Из Регистр.Ресурсы Цикл
            Если Ресурс.Тип.СодержитТип(ИскомыйТип) Тогда
                Сообщить("Найдено в ресурсе регистра сведений: " + Регистр.ПолноеИмя() + "." + Ресурс.Имя);
            КонецЕсли;
        КонецЦикла;
        
        // Проверяем реквизиты
        Для Каждого Реквизит Из Регистр.Реквизиты Цикл
            Если Реквизит.Тип.СодержитТип(ИскомыйТип) Тогда
                Сообщить("Найдено в реквизите регистра сведений: " + Регистр.ПолноеИмя() + "." + Реквизит.Имя);
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;

    Сообщить("=== ПОИСК ЗАВЕРШЕН ===");

КонецПроцедуры

Этот программный код обходит основные типы объектов метаданных (справочники, документы, регистры сведений) и проверяет, входит ли наш искомый тип в описание типов каждого реквизита. Вы можете расширить данный алгоритм, добавив обход регистров накопления, регистров бухгалтерии, бизнес-процессов, задач и определяемых типов.

Способ 6. Использование среды разработки 1С:EDT (Enterprise Development Tools)

Если ваша команда осуществляет разработку в современной среде 1С:EDT на базе Eclipse, то задача поиска связей упрощается в разы. Благодаря непрерывному фоновому индексированию проекта, EDT строит полноценную семантическую карту связей конфигурации.

Выясним, как воспользоваться этим преимуществом:

Скорость работы этого механизма в EDT значительно выше, чем у классического Конфигуратора, поскольку поиск осуществляется по уже готовому предрассчитанному индексу.

В зависимости от конкретной задачи (нужно ли быстро проверить один реквизит, написать скрипт автоматической проверки метаданных или сделать полный аудит кода перед удалением объекта), вы можете комбинировать эти методы для достижения наилучшего результата.

← На главную