Как найти места вызова процедуры в 1С и узнать, как формируются её параметры?

Программист 1С v8.3 (Управляемые формы) Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

Способ 1. Использование механизма «Поиск ссылок в конфигурации»

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

  1. Откроем модуль, в котором объявлена нужная процедура.
  2. Установим курсор на имя процедуры (например, ЗаполнитьТаблицуПроводок).
  3. Нажмем сочетание клавиш Ctrl + Alt + F или вызовем контекстное меню правой кнопкой мыши и выберем пункт «Поиск ссылок в конфигурации» (или «Поиск ссылок на метод»).
  4. Проанализируем окно результатов в нижней части экранной области Конфигуратора, где отобразятся все найденные места обращения.

Способ 2. Глобальный поиск по конфигурации (Ctrl + Shift + F)

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

  1. Нажмем комбинацию клавиш Ctrl + Shift + F для вызова окна глобального поиска.
  2. В поле «Искать» введем имя процедуры. Если мы ищем прямые вызовы, можно указать имя с открывающей скобкой: ЗаполнитьТаблицуПроводок(. Если есть вероятность неявного вызова, укажем только имя процедуры: ЗаполнитьТаблицуПроводок.
  3. В области поиска убедимся, что выбрана вся конфигурация (модули, формы, макеты).
  4. Нажмем кнопку «Искать» и изучим список совпадений в окне результатов.

Способ 3. Отладка и стек вызовов

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

  1. Перейдем к объявлению процедуры в общем модуле и установим точку останова на первой исполняемой строке кода (клавиша F9).
  2. Запустим режим 1С:Предприятие в режиме отладки.
  3. Выполним в пользовательском режиме действие, при котором должна запускаться исследуемая логика (например, проведем соответствующий документ или сформируем отчет).
  4. При срабатывании точки останова и остановке выполнения кода откроем окно «Стек вызовов» (через верхнее меню «Отладка» -> «Стек вызовов» или комбинацией Ctrl + Alt + C).
  5. В окне стека вызовов отследим цепочку процедур снизу вверх. Двойной клик по предыдущей процедуре в стеке перенесет нас в точку вызова, где можно посмотреть, какими выражениями формировался параметр Выборка перед передачей в процедуру.

Почему процедура не находится обычным поиском?

Разберем ситуации, когда глобальный поиск по тексту конфигурации возвращает только само объявление процедуры, но логика в системе явно исполняется:

  1. Неявный вызов через Выполнить() или Вычислить(): Код может вызывать процедуру динамически, где имя процедуры собирается из строк.
  2. Подписки на события: Экспортная процедура общего модуля может быть указана в качестве обработчика события в объекте метаданных ПодпискаНаСобытие. В этом случае текстового вызова в других модулях нет — имя процедуры задано в свойстве Обработчик подписки.
  3. Вызовы через механизмы БСП (Библиотеки Стандартных Подсистем): Имя процедуры может передаваться строковым параметром во фреймворки длительных операций, фоновые задания или обработчики оповещений.
  4. Расширения конфигурации: Код вызова может находиться в одном из подключенных расширений. При глобальном поиске следует убедиться, что область поиска захватывает модули расширений.
  5. Внешние обработки, отчеты и интеграции: Процедура может вызываться из внешних .epf/.erf файлов, либо снаружи через COM-соединение (COMConnector), HTTP- или Web-сервисы.

Дополнительные методы отслеживания при сложных вызовах

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

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


Попытка
    ВызватьИсключение "";
Исключение
    ЗаписьЖурналаРегистрации("ОтладкаПоискаВызова", 
        УровеньЖурналаРегистрации.Информация,,, 
        ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;

После выполнения операции в Журнале регистрации появится запись, содержащая полное дерево вызовов с указанием модулей и номеров строк.

2. Настройка автоматического подключения отладчика:
Убедимся, что в Конфигураторе включено автоматическое подключение к фоновым заданиям и внешним сеансам. Для этого перейдем в меню «Отладка» -> «Настройка подключения» -> «Автоматическое подключение» и установим флаги напротив пунктов «Фоновые задания», «HTTP-сервисы» и «Web-сервисы».

← На главную