К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как сделать поиск по коду 1С: практическое руководство

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

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

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

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

Чем глобальный поиск отличается от поиска в модуле

Обычный поиск (Ctrl+F) работает только внутри открытого текстового документа или модуля. Он удобен, когда нужно быстро переместиться к функции в длинном модуле, но не даёт представления об использовании кода в других объектах конфигурации.

Глобальный поиск (Ctrl+Shift+F) сканирует модули всех объектов: общие модули, модули форм, модули объектов, модули менеджеров, модули команд, модуль приложения и модуль сеанса. Результат выводится списком с указанием объекта, процедуры и строки, поэтому по нему сразу видно, где именно используется искомый фрагмент.

Оба инструмента доступны через меню «Правка»: «Поиск» — для текущего модуля, «Глобальный поиск» — для всей конфигурации. Горячие клавиши можно переопределить через настройки конфигуратора, если стандартные сочетания конфликтуют с другими программами.

Как выполнить глобальный поиск по шагам

Откройте конфигурацию в конфигураторе. Если конфигурация закрыта, сначала выполните «Конфигурация — Открыть конфигурацию» и дождитесь построения дерева метаданных — без этого глобальный поиск будет недоступен или неполон.

Нажмите Ctrl+Shift+F или выберите «Правка — Глобальный поиск». В открывшемся окне укажите искомую строку. Обратите внимание на флажки: «Учитывать регистр», «Слово целиком» и «Регулярные выражения» — они существенно меняют результат.

Запустите поиск кнопкой «Искать». В окне результатов двойной щелчок по строке открывает соответствующий модуль на нужной позиции. Результаты можно сохранить или отфильтровать, повторив поиск уже по списку найденных строк.

Порядок действий
  1. 1
    Откройте конфигурацию в конфигураторе и дождитесь загрузки дерева метаданных
  2. 2
    Нажмите Ctrl+Shift+F или выберите «Правка — Глобальный поиск»
  3. 3
    Введите строку поиска и установите флажки: регистр, слово целиком, регулярные выражения
  4. 4
    При необходимости ограничьте область поиска конкретными объектами
  5. 5
    Нажмите «Искать» и дождитесь завершения сканирования
  6. 6
    Перейдите двойным щелчком к каждому найденному вхождению и проверьте контекст

Как ограничить область поиска

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

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

Если искомая строка встречается и в комментариях, и в рабочем коде, полезно искать «слово целиком» с учётом регистра — это отсечёт часть шума. Полностью исключить комментарии штатными средствами нельзя, поэтому результаты придётся просматривать глазами.

Поиск с регулярными выражениями

Флажок «Регулярные выражения» превращает строку поиска в шаблон. Это позволяет находить не точное совпадение, а класс строк: например, все вызовы, где первый аргумент — строковый литерал, или все присваивания определённой переменной.

Типичные шаблоны: Найти\(.*\) — вызовы метода Найти с любыми аргументами; ^\s*Процедура\s+Проверка — процедуры, имя которых начинается с «Проверка»; Сообщить\("[^"]*ошиб — сообщения, содержащие слово «ошиб».

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

Поиск по файлам выгрузки и внешние инструменты

Конфигурацию можно выгрузить в файлы через «Конфигурация — Выгрузить конфигурацию в файлы». В результате модули сохраняются как текстовые файлы, и по ним можно искать любым инструментом: «Найти в файлах» в редакторе, grep, PowerShell или файловым менеджером.

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

Пример поиска строки по всем выгруженным модулям через PowerShell:

Get-ChildItem -Path "C:\Выгрузка" -Recurse -Include .bsl,.txt |

Select-String -Pattern "ВыполнитьОбменДанными" |

Select-Object Path, LineNumber, Line

powershell
Get-ChildItem -Path "C:\Выгрузка" -Recurse -Include *.bsl | Select-String -Pattern "ИскомаяСтрока" | Select-Object Path, LineNumber, Line

Поиск в 1C:EDT и особенности среды разработки

В 1C:EDT поиск организован иначе, чем в конфигураторе. Комбинация Ctrl+H открывает диалог поиска с вкладками: поиск по файлам, поиск по метаданным и поиск ссылок на объект. Последний вариант особенно ценен — он находит не текстовые совпадения, а реальные использования процедуры или объекта метаданных.

Поиск ссылок (аналог «Find References») работает за счёт индексации проекта. Если индекс не построен или устарел, результаты будут неполными — в этом случае нужно дождаться завершения фоновой индексации или выполнить обновление проекта.

Для текстового поиска в EDT используется вкладка «File Search» с поддержкой регулярных выражений и фильтрации по типам файлов. Она заметно мощнее встроенного поиска конфигуратора, поэтому при регулярной доработке крупных конфигураций EDT даёт преимущество.

Сравнение вариантов

Глобальный поиск в конфигураторе

Подходит для разовых задач и небольших конфигураций; не требует настройки, но медленен на больших объёмах

Поиск по файлам выгрузки

Быстрый и гибкий, поддерживает мощные регулярные выражения; требует выгрузки и ручного сопоставления строк с объектами

Поиск ссылок в 1C:EDT

Находит реальные использования объектов, а не текстовые совпадения; требует проекта в EDT и актуального индекса

Типичные ошибки и как проверить полноту результата

Самая частая ошибка — поиск без учёта синонимов имён. В 1С одна и та же операция может вызываться через русское и английское написание (Найти и Find), а обращение к процедуре — через точку от общего модуля. Если искать только один вариант, часть вызовов будет пропущена.

Вторая ошибка — забытые внешние источники: расширения конфигурации, внешние обработки и отчёты. Глобальный поиск основной конфигурации их не охватывает. Каждое расширение нужно открыть и просканировать отдельно, внешние файлы — искать по содержимому средствами ОС.

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

Типичные ошибки
01
Искать только русское имя метода и пропустить вызовы через английский синтаксис
02
Запускать поиск по всей конфигурации без фильтров и тонуть в тысячах лишних вхождений
03
Забыть про расширения и внешние обработки — глобальный поиск их не охватывает
04
Использовать регулярное выражение без проверки на одном модуле и получить пустой или шумный результат
05
Не дождаться окончания индексации в EDT и сделать вывод по неполному списку ссылок

Частые вопросы о поиске по коду 1С

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

Чаще всего причина в установленных флажках: включён «Учитывать регистр» или «Слово целиком», либо область поиска ограничена частью объектов. Также проверьте, что конфигурация полностью открыта, а искомый код не находится в расширении или внешней обработке — они сканируются отдельно.

Можно ли искать сразу по нескольким конфигурациям?

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

Как найти, откуда вызывается конкретная процедура?

В конфигураторе выполните глобальный поиск по имени процедуры без скобок — так найдутся и объявление, и все вызовы. В 1C:EDT удобнее использовать поиск ссылок на объект: он покажет именно вызовы, исключая случайные текстовые совпадения и комментарии.

Ищет ли глобальный поиск в макетах и запросах?

Тексты запросов, написанные в модулях как строковые литералы, находятся обычным поиском. А вот содержимое макетов, схем компоновки данных и запросов в консоли СКД глобальный поиск по модулям не охватывает — их нужно проверять отдельно или через выгрузку в файлы.

Что делать, если поиск в конфигураторе работает очень медленно?

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

Можно ли сохранить результаты поиска для дальнейшей работы?

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

Итог

Что важно запомнить

Глобальный поиск (Ctrl+Shift+F) — основной инструмент поиска по коду конфигурации; сужайте область поиска, учитывайте русские и английские имена методов, помните про расширения и внешние обработки, а для массовых задач и анализа ссылок используйте выгрузку в файлы или 1C:EDT.