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

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

В процессе разработки и доработки типовых конфигураций (например, Управление торговлей или ERP Управление предприятием) часто возникает задача найти готовую экспортную процедуру или функцию по ключевому слову из предметной области. Типичная сложность заключается в том, что точное наименование метода неизвестно, а простой текстовый поиск возвращает тысячи строк с вызовами методов, переменными и комментариями вместо самих объявлений. Разберем особенности работы штатных механизмов поиска платформы 1С и эффективные альтернативные способы решения этой задачи.

Ограничения стандартного конфигуратора 1С

Проанализируем, как устроен поиск в классическом конфигураторе. В платформе 1С:Предприятие 8 предусмотрены два основных встроенных инструмента навигации по коду:

  1. Список процедур и функций модуля (комбинация клавиш Ctrl+Alt+P). Позволяет быстро отфильтровать список методов по подстроке и перейти к нужному объявлению. Главное ограничение этого механизма — он работает строго локально в пределах одного открытого модуля.
  2. Поиск во всех текстах (комбинация клавиш Ctrl+Shift+F). Выполняет сплошной текстовый поиск по всем метаданным и модулям конфигурации. Однако штатный поиск не строит семантического индекса символов и не различает, где метод объявляется ключевыми словами Процедура или Функция, а где просто вызывается в коде.

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

Использование штатного глобального поиска по модулям

Рассмотрим, как можно оптимизировать стандартный глобальный поиск в конфигураторе, если нет возможности использовать сторонние утилиты.

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

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

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

Поиск по выгруженным файлам конфигурации с помощью регулярных выражений

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

Разберем по шагам, как настроить такой поиск:

  1. Выполним выгрузку конфигурации в файлы исходного кода через меню конфигуратора (Конфигурация — Выгрузить конфигурацию в файлы...) или через командную строку пакетного запуска с параметром /DumpConfigToFiles.
  2. Откроем полученный каталог с исходными кодами (файлы с расширением .bsl) в любом текстовом редакторе или специализированной утилите с поддержкой регулярных выражений.
  3. Зададим шаблон регулярного выражения, который находит только строки объявления процедур и функций, содержащие искомый корень слова.

Посмотрим на пример универсального регулярного выражения для поиска объявлений методов:

^\s*(Процедура|Функция)\s+\w*Скидк\w*\s*\(

Разберем структуру этого регулярного выражения:

  1. Символ ^ и \s* указывают на начало строки с возможными пробельными отступами.
  2. Группа (Процедура|Функция) гарантирует, что поиск выполняется только по заголовкам методов.
  3. Конструкция \s+\w*Скидк\w* находит любое имя процедуры или функции, внутри которого встречается подстрока Скидк (в начале, середине или конце названия).
  4. Символ \( фиксирует открывающую круглую скобку списка параметров, исключая ложные совпадения.

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

Использование современных сред разработки (EDT и языковые серверы)

Если проект переведен на современный стек разработки, поиск методов выполняется штатными средствами среды:

  1. 1C:Enterprise Development Tools (EDT): среда строит полное синтаксическое дерево (AST) и глобальный индекс проекта. С помощью диалога быстрого перехода к типам и методам (комбинация клавиш Ctrl+Shift+T или Ctrl+Alt+Shift+T) можно искать именно объявления методов по маске и подстроке по всему проекту.
  2. Редакторы с языковым сервером 1С (LSP): при открытии каталога исходников выгруженной конфигурации доступна функция Поиск символа в рабочей области (Workspace Symbol Search). Ввод подстроки выводит список всех объявленных процедур, функций и объектов метаданных без мусорных текстовых совпадений.

Исследование логики через стек вызовов отладчика и контекстную подсказку

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

  1. Анализ через стек вызовов отладчика: находим в пользовательском режиме команду или документ, где предположительно выполняется расчет скидок или аналогичная операция. Устанавливаем точку останова в обработчике команды или модуля формы и пошагово прослеживаем выполнение через стек вызовов. Это позволяет увидеть реальные цепочки вызовов экспортных функций общих модулей в контексте исполняемого бизнес-процесса.
  2. Контекстная подсказка по общим модулям: в типовых решениях большинство универсальных функций сгруппировано в специализированных общих модулях подсистем (например, модули с префиксами СкидкиДинамические, СкидкиНаценкиСервер, РасчетСкидок). Набрав в коде имя предполагаемого модуля и поставив точку, мы получаем полный список всех доступных экспортных функций модуля с их параметрами.
← На главную