Откуда вызываются процедуры с префиксом Подключаемый_ в отчетах ERP

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

При работе с типовыми конфигурациями на платформе 1С:Предприятие 8.3 (такими как ERP, КА 2, УТ 11 или ЗУП 3) разработчики часто сталкиваются с ситуацией, когда в модуле формы отчета присутствует процедура, например, Подключаемый_ПроверитьАктуальность(), но глобальный поиск по всей конфигурации не выдает ни одного места, где бы эта процедура вызывалась явным образом. Давайте разберем, как устроена эта «магия» Библиотеки стандартных подсистем (БСП) и почему стандартные методы поиска здесь бессильны.

Причина «невидимости» вызовов в коде

Проанализируем стандартную ситуацию. Вы открываете форму «Оборотно-сальдовой ведомости по счету» и видите в коде обработчик. Однако попытка найти контекстный вызов этой процедуры через Ctrl+F12 или глобальный поиск не дает результата. Выясним причину этого явления. Дело в том, что в типовых решениях используется механизм динамического подключения обработчиков.

В БСП принят стандарт кодирования, согласно которому процедуры, предназначенные для программного подключения, помечаются префиксом Подключаемый_. Это служит сигналом для других разработчиков и для самой системы, что данная процедура не будет вызываться напрямую кодом в теле модуля, а будет «привязана» к событию или обработчику ожидания во время выполнения программы.

Механизм инициализации формы отчета

Рассмотрим по шагам, как происходит регистрация таких процедур. В типовых отчетах ERP в модуле формы в событии ПриСозданииНаСервере обязательно присутствует вызов общего модуля подсистемы «Варианты отчетов»:


Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Инициализация механизмов БСП для отчетов
    ВариантыОтчетов.ПриСозданииНаСервере(ЭтаФорма, Параметры);
КонецПроцедуры

Когда управление передается в общий модуль ВариантыОтчетов, система анализирует состав формы и её реквизиты. Если отчет использует стандартные механизмы формирования (например, фоновое выполнение), БСП «знает», что в форме могут присутствовать определенные стандартные обработчики. Именно здесь кроется ответ: имя процедуры Подключаемый_ПроверитьАктуальность часто формируется динамически путем сложения строк или выбирается из предопределенного списка имен.

Использование обработчиков ожидания

Проанализируем, как именно инициируется выполнение кода. Одной из самых частых причин вызова Подключаемый_ПроверитьАктуальность является необходимость отслеживания состояния отчета. Рассмотрим, как это работает на стороне клиента.

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


// В недрах БСП имя процедуры собирается как строковая переменная
ИмяПроцедуры = "Подключаемый_ПроверитьАктуальность";
ПодключитьОбработчикОжидания(ИмяПроцедуры, ИнтервалПроверки, Истина);

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

Зачем нужна процедура ПроверитьАктуальность?

Разберем функциональное назначение этой конкретной процедуры. В современных версиях ERP отчеты часто формируются в фоновом режиме, чтобы не блокировать интерфейс пользователя. Процедура Подключаемый_ПроверитьАктуальность() выполняет следующие задачи:

  1. Мониторинг фонового задания: Она периодически «опрашивает» сервер, не завершилось ли формирование отчета.
  2. Контроль изменений данных: Если после формирования отчета пользователь изменил какие-то параметры (например, период) или если данные в информационной базе обновились, эта процедура отвечает за вывод информационной панели (баннера) с текстом «Данные отчета неактуальны».
  3. Обновление интерфейса: Она управляет доступностью кнопок «Сформировать», «Остановить» и отображением прогресса выполнения.

Стандарты именования БСП

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

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


// Пример программного назначения обработчика события
НовыйЭлемент = Форма.Элементы.Добавить("ПолеВвода", Тип("ПолеФормы"));
НовыйЭлемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПриИзмененииРеквизита");

В этом случае, как и с обработчиками ожидания, связь между элементом управления и кодом устанавливается в момент выполнения приложения (Runtime), а не в конфигураторе.

Как найти место вызова, если это необходимо?

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

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

Таким образом, мы выяснили, что процедуры с префиксом Подключаемый_ являются частью гибкой архитектуры БСП. Они позволяют создавать универсальные механизмы работы с формами, где логика управления вынесена в общие модули, а конкретная реализация остается в модуле формы для соблюдения контекста выполнения.

← На главную