В процессе разработки и доработки типовых конфигураций (например, Управление торговлей или ERP Управление предприятием) часто возникает задача найти готовую экспортную процедуру или функцию по ключевому слову из предметной области. Типичная сложность заключается в том, что точное наименование метода неизвестно, а простой текстовый поиск возвращает тысячи строк с вызовами методов, переменными и комментариями вместо самих объявлений. Разберем особенности работы штатных механизмов поиска платформы 1С и эффективные альтернативные способы решения этой задачи.
Проанализируем, как устроен поиск в классическом конфигураторе. В платформе 1С:Предприятие 8 предусмотрены два основных встроенных инструмента навигации по коду:
Ctrl+Alt+P). Позволяет быстро отфильтровать список методов по подстроке и перейти к нужному объявлению. Главное ограничение этого механизма — он работает строго локально в пределах одного открытого модуля.Ctrl+Shift+F). Выполняет сплошной текстовый поиск по всем метаданным и модулям конфигурации. Однако штатный поиск не строит семантического индекса символов и не различает, где метод объявляется ключевыми словами Процедура или Функция, а где просто вызывается в коде.Если мы введем в глобальный поиск короткую подстроку (например, Скидк), конфигуратор вернет огромное количество результатов: присвоения переменных, реквизиты объектов, обращения к методам и комментарии во всех модулях конфигурации. Перебирать такой список вручную крайне неэффективно.
Рассмотрим, как можно оптимизировать стандартный глобальный поиск в конфигураторе, если нет возможности использовать сторонние утилиты.
Если мы предполагаем структуру названия метода, можно задать поиск с ключевым словом объявления. Разберем несколько вариантов поисковых запросов:
Функция Скидк или Функция РассчитатьСкидк. В этом случае отсекаются все строки с присвоениями и вызовами, а в результатах останутся только заголовки методов, начинающиеся с указанного слова.Процедура Скидк или Процедура ЗаполнитьСкидк.СкидкиТовара(. Наличие открывающей скобки сразу исключит строки, где слово используется как простая переменная или имя реквизита.Чтобы ускорить поиск в больших конфигурациях, обязательно настраивайте область поиска в диалоге Поиск во всех текстах. Выбирайте только ветку Общие модули или модули конкретных подсистем, исключая формы, макеты и справку.
Когда точное имя функции неизвестно, а подстрока может находиться в любой части названия (например, ПрименитьСкидкуТовара, СкидкиПартнера или ПересчитатьСкидки), наиболее быстрым решением является выгрузка конфигурации в файлы и поиск с использованием регулярных выражений.
Разберем по шагам, как настроить такой поиск:
Конфигурация — Выгрузить конфигурацию в файлы...) или через командную строку пакетного запуска с параметром /DumpConfigToFiles..bsl) в любом текстовом редакторе или специализированной утилите с поддержкой регулярных выражений.Посмотрим на пример универсального регулярного выражения для поиска объявлений методов:
^\s*(Процедура|Функция)\s+\w*Скидк\w*\s*\(
Разберем структуру этого регулярного выражения:
^ и \s* указывают на начало строки с возможными пробельными отступами.(Процедура|Функция) гарантирует, что поиск выполняется только по заголовкам методов.\s+\w*Скидк\w* находит любое имя процедуры или функции, внутри которого встречается подстрока Скидк (в начале, середине или конце названия).\( фиксирует открывающую круглую скобку списка параметров, исключая ложные совпадения.Такой подход мгновенно выдаст компактный список только тех строк, где метод действительно декларируется, независимо от общего объема конфигурации.
Если проект переведен на современный стек разработки, поиск методов выполняется штатными средствами среды:
Ctrl+Shift+T или Ctrl+Alt+Shift+T) можно искать именно объявления методов по маске и подстроке по всему проекту.Поиск символа в рабочей области (Workspace Symbol Search). Ввод подстроки выводит список всех объявленных процедур, функций и объектов метаданных без мусорных текстовых совпадений.Когда требуется изучить логику работы прикладного решения без сплошного сканирования модулей, разберем два практических приема:
СкидкиДинамические, СкидкиНаценкиСервер, РасчетСкидок). Набрав в коде имя предполагаемого модуля и поставив точку, мы получаем полный список всех доступных экспортных функций модуля с их параметрами.