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

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

Как найти строку в коде 1С

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

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

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

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

Поиск строки внутри открытого модуля

Если модуль уже открыт, самый быстрый способ — стандартный поиск по тексту. Нажмите Ctrl+F или выберите пункт меню «Правка → Найти». Введите искомую строку и используйте кнопки «Найти далее» / «Найти предыдущее» для перехода между вхождениями.

При поиске доступны полезные опции: «Учитывать регистр», «Слово целиком» и направление поиска (вперёд или назад). Опция «Слово целиком» особенно важна, когда ищется короткое имя — например, переменная «Код» без этого фильтра будет найдена и внутри слов «Кодировать», «КодОперации» и т.п.

Для замены используется сочетание Ctrl+H. Будьте осторожны с режимом «Заменить все»: в большом модуле массовая замена без фильтра «Слово целиком» легко повреждает имена переменных и процедур.

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

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

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

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

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

Поиск мест использования объекта и процедуры

Часто задача ставится иначе: не найти текст, а понять, откуда вызывается конкретная процедура или где используется справочник, реквизит, документ. Для этого предназначен поиск ссылок: в дереве конфигурации щёлкните по объекту правой кнопкой и выберите «Поиск ссылок на объект» (или «Поиск ссылок в объекте» — для обратной задачи).

Для процедур и функций удобен альтернативный приём: установите курсор на имя процедуры в модуле и нажмите F12 («Перейти к определению») — конфигуратор перенесёт вас к объявлению. Обратный переход — поиск всех вызовов — выполняется через глобальный поиск по имени процедуры с опцией «Слово целиком».

Учтите ограничение: если процедура вызывается динамически, например через Выполнить("ИмяПроцедуры()") или через описание оповещения со строковым именем, поиск ссылок и переход по F12 такие места не покажут. Их приходится искать глобальным поиском по строковому литералу с именем.

Настройки, фильтры и тонкости поиска

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

ОпцияЧто делаетКогда включать
Учитывать регистрРазличает заглавные и строчные буквыКогда ищется точный литерал сообщения или строка в запросе
Слово целикомИсключает вхождения внутри других словПри поиске коротких имён переменных и процедур
Фильтр по типам модулейОграничивает область поискаКогда примерно известно, где искать (формы, общие модули)
Фильтр по объектамПоиск только в выбранных объектах дерева конфигурацииПри работе с одним подразделом функциональности

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

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

Перед глобальным поиском по длинной строке из сообщения об ошибке сократите её до уникального фрагмента из 3–5 слов. Полное совпадение может не найтись из-за подстановки параметров через СтрШаблон или конкатенацию строк в коде.
ПЗ
Практическое замечание

Поиск в расширениях и внешних файлах

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

Для внешних обработок и отчётов (файлы .epf, .erf) текст модулей внутри файла недоступен глобальному поиску конфигурации. Такие файлы открываются через «Файл → Открыть», и поиск выполняется локально внутри открытого объекта. Альтернатива — выгрузить обработку в исходные файлы (XML) и искать по ним любым внешним инструментом, например поиском по содержимому файлов в редакторе или файловом менеджере.

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

Типичные ошибки и как их избежать

Самая частая ошибка — поиск длинной строки целиком, когда в коде она собирается из частей. Сообщение «Не удалось провести документ №123 от 01.01» в коде выглядит как шаблон с параметрами, и точное совпадение не находится. Ищите устойчивый фрагмент без переменных частей.

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

Наконец, не стоит путать поиск в конфигураторе с поиском в режиме «Предприятие». В пользовательском режиме ищутся данные (документы, элементы справочников), а не код. Поиск по коду возможен только в конфигураторе.

Типичные ошибки
01
Искать полный текст сообщения с подставляемыми параметрами — совпадений нет, потому что строка собирается в коде из частей
02
Забыть сбросить фильтр областей поиска от прошлого сеанса — результат пустой, хотя строка в конфигурации есть
03
Искать код в режиме «Предприятие» — там доступны только данные, а не модули
04
Искать текст модуля внешней обработки глобальным поиском конфигурации — файлы .epf и .erf в область поиска не входят

Как проверить, что найдено именно то место

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

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

Контрольные точки

Как проверить результат

Контекст найденной строки
Норма

Строка находится внутри исполняемой процедуры, не закомментирована

Тревожный признак

Строка в комментарии, в неиспользуемой процедуре или в модуле, который не вызывается в нужном сценарии

Подтверждение через отладку
Норма

Точка останова на строке срабатывает при воспроизведении операции

Тревожный признак

Отладчик не останавливается — код не выполняется в этом сценарии

Полнота результатов поиска
Норма

Проверены все вхождения из списка, включая строковые литералы с именем

Тревожный признак

Проверено только первое вхождение — динамические вызовы могут быть пропущены

Частые вопросы

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

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

Как найти, откуда выводится конкретное сообщение пользователю?

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

Можно ли искать по коду с регулярными выражениями?

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

Как найти все места, где используется реквизит или справочник?

В дереве конфигурации щёлкните правой кнопкой по объекту и выберите «Поиск ссылок на объект». Результат покажет все объекты и модули, где есть обращения. Дополнительно выполните глобальный поиск по имени объекта с опцией «Слово целиком», чтобы поймать обращения через строковые литералы.

Ищется ли код в расширении конфигурации обычным глобальным поиском?

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

Что делать, если нужно найти строку в закрытом модуле поставщика?

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

Итог

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

Внутри модуля ищите через Ctrl+F, по всей конфигурации — через глобальный поиск Ctrl+Shift+F с фильтрами областей и опцией «Слово целиком». Места использования объектов находятся через «Поиск ссылок», а динамические вызовы — только поиском по строковым литералам. Перед правками найденного кода делайте резервную копию базы.