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

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

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

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

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

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

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

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

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

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

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

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

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

Для перехода к конкретному номеру строки, известному из сообщения об ошибке или стека вызовов, используйте команду «Правка → Перейти к строке» (Ctrl+G). Введите номер — курсор встанет на нужную строку. Это самый быстрый способ попасть в место ошибки, если в сообщении указан модуль и строка.

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

Как найти нужную процедуру или функцию

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

Внутри открытого модуля удобен выпадающий список процедур и функций в верхней части окна модуля — он показывает все методы текущего модуля по алфавиту и позволяет мгновенно перейти к нужному. В модулях с областями (#Область ... #КонецОбласти) дополнительно помогает сворачивание областей: видна структура модуля без прокрутки.

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

Поиск места ошибки по сообщению и журналу регистрации

Частый сценарий: пользователь прислал текст ошибки, и нужно найти строку кода, которая её вызвала. Сообщение об ошибке платформы обычно содержит имя модуля и номер строки в фигурных скобках, например: {ОбщийМодуль.РасчетЦен.Модуль(152)}: Деление на ноль. Откройте указанный общий модуль и нажмите Ctrl+G для перехода к строке 152.

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

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

Поиск через отладчик, когда текст строки неизвестен

Иногда неизвестен ни текст строки, ни имя процедуры — известно только действие пользователя, которое приводит к проблеме. В этом случае используйте отладчик: включите отладку в конфигураторе («Отладка → Подключение»), установите точку останова на предполагаемом обработчике (например, «ПриЗаписи» документа) и выполните действие в режиме предприятия.

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

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

Типичные ошибки при поиске кода
01
Поиск с включённым учётом регистра — часть совпадений теряется из-за разного написания
02
Поиск только в открытом модуле, когда нужный код находится в общем модуле или подписке на событие
03
Игнорирование внешних обработок и расширений — глобальный поиск конфигурации их не охватывает
04
Исправление строки по номеру из ошибки без проверки версии кода в рабочей базе
05
Массовая замена без проверки совпадений в строковых литералах и комментариях

Особые случаи: расширения, внешние обработки и запросы

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

Отдельный случай — текст запроса внутри кода. Строки запросов (на языке запросов 1С) находятся тем же глобальным поиском, но ищите по уникальному имени таблицы или поля, например РегистрНакопления.Продажи, а не по слову «ВЫБРАТЬ» — оно встретится тысячи раз.

Для конфигураций на поддержке с доработками полезно сравнение конфигураций («Конфигурация → Сравнить, объединить с конфигурацией из файла»): оно показывает, какие строки изменены относительно типовой, и сужает зону поиска до доработанных модулей.

Маршрут решения

Как выбрать способ поиска

Известен фрагмент текста строкиГлобальный поиск Ctrl+Shift+F по всей конфигурации
Известен номер строки из сообщения об ошибкеОткройте указанный модуль и перейдите по Ctrl+G
Известно только действие пользователя, вызывающее проблемуОтладчик с точкой останова или остановкой по ошибке
Код в расширении или внешней обработкеОткройте расширение или файл в конфигураторе и ищите внутри него
Нужно найти все места вызова методаГлобальный поиск по имени с опцией «Слово целиком»

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

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

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

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

Выполните глобальный поиск по имени процедуры с опцией «Слово целиком». В результатах объявление отличается словом «Процедура» или «Функция», остальные строки — места вызовов. Учтите вызовы через Выполнить("ИмяПроцедуры()") — их видно по строковому литералу с именем.

Можно ли искать код в 1С без конфигуратора?

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

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

Значит, в базе выполняется другая версия кода. Обновите конфигурацию базы данных (F7 в конфигураторе), убедитесь, что ошибка пришла именно из этой базы, и проверьте, не применяется ли расширение, которое подменяет модуль.

Как быстро перейти к нужной процедуре в большом модуле?

Используйте выпадающий список процедур и функций над текстом модуля — он показывает все методы по алфавиту. Дополнительно помогают сворачивание областей и поиск по Ctrl+F с именем метода.

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

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

Итог

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

Основной инструмент — глобальный поиск по Ctrl+Shift+F с правильно выбранной областью и отключённым учётом регистра. Номер строки из ошибки открывайте через Ctrl+G в указанном модуле, предварительно убедившись, что версия кода в базе актуальна. Когда текст строки неизвестен, место проблемы находит отладчик с остановкой по ошибке. Перед любыми правками найденного кода делайте резервную копию.