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

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

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

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

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

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

Что нужно понять перед поиском

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

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

Способ 1: поиск использования в конфигураторе

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

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

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

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

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

Способ 2: отладчик и стек вызовов

Когда статический поиск не даёт результата, переходите к отладке. Установите точку останова (F9) на первой строке внутри процедуры, запустите отладку (F5) и выполните в пользовательском режиме действие, которое приводит к вызову.

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

Способ 3: поиск динамических вызовов

Процедуры, вызываемые через Выполнить, Оповестить, ПодключитьОбработчикОжидания или НачатьВыполнениеМетода, не находятся поиском использования, потому что имя передаётся строкой. Ищите отдельно:

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

Способ 4: замер производительности и журнал регистрации

Если процедура вызывается непредсказуемо и воспроизвести момент вызова сложно, помогает замер производительности: «Отладка — Замер производительности». После выполнения действий в режиме предприятия откройте результат — в нём видно, какие процедуры вызывались, сколько раз и кем.

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

1c
ЗаписьЖурналаРегистрации("Отладка", УровеньЖурналаРегистрации.Информация,,, "Вызвана МояПроцедура. Стек: " + ПолучитьИнформациюОбОшибкеВызова());
В типовых конфигурациях многие «бесхозные» процедуры на самом деле являются обработчиками стандартных подсистем БСП — например, вызываются через механизм переопределяемых модулей. Перед выводом о том, что метод нигде не используется, проверьте одноимённые процедуры в модулях с постфиксом «Переопределяемый» и «ВызовСервера».
ПЗ
Практическое замечание

Типичные ошибки при поиске вызовов

Типичные ошибки
01
Искать только через Ctrl+F12 и пропустить динамические вызовы через Выполнить и оповещения — метод ошибочно считается неиспользуемым
02
Забыть про расширения конфигурации — вызов может находиться в расширении, а не в основной конфигурации
03
Искать без учёта контекста: одноимённые методы разных модулей смешиваются в результатах поиска
04
Не проверить подписки на события и регламентные задания — частый источник «невидимых» вызовов
05
Проводить поиск в старой версии конфигурации, не обновив её из хранилища

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

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

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

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

Поиск использования (Ctrl+F12)
Норма

Найдены все прямые вызовы, список просмотрен

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

В списке только объявление — возможны динамические вызовы

Глобальный поиск строки с именем
Норма

Нет вхождений в строковых литералах и Выполнить

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

Есть вхождения в кавычках — динамический вызов не учтён

Подписки и регламентные задания
Норма

Метод не привязан к событиям и заданиям

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

Метод указан как обработчик — удалять нельзя

Отладка со стеком вызовов
Норма

Цепочка вызова полностью видна и понятна

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

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

FAQ

Почему Ctrl+F12 не находит вызовы процедуры, хотя она точно выполняется?

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

Как найти, кто вызывает обработчик события формы, например ПриОткрытии?

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

Что делать, если точка останова в серверной процедуре не срабатывает?

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

Можно ли найти вызовы процедуры из расширения конфигурации?

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

Как быстро понять цепочку вызовов без точки останова?

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

Итог

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

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