Разработчики при создании дополнительных обработок для Библиотеки Стандартных Подсистем (БСП) часто сталкиваются с проблемой: точки останова в модуле управляемой формы внешней обработки просто не срабатывают. Особенно это актуально для обработок с видом ЗаполнениеОбъекта и типом запуска ОткрытиеФормы.
Проблема кроется в механизме работы БСП. При вызове команды система берет двоичные данные обработки из справочника ДополнительныеОтчетыИОбработки, помещает их во временное хранилище и подключает обработку динамически из оперативной памяти. В результате конфигуратор не может сопоставить выполняемый код с вашим локальным файлом .epf на диске. В этой статье мы подробно разберем, как обойти это ограничение платформы и успешно отладить код.
Прежде чем переходить к способам отладки, проанализируем, какие именно параметры система передает во внешнюю обработку при ее вызове. Это поможет нам понять контекст выполнения. При открытии формы дополнительной обработки БСП автоматически передает структуру со следующими стандартными параметрами:
ОбъектыНазначения (тип Массив) — содержит ссылки на объекты (документы или элементы справочников), из формы или списка которых была вызвана команда.ДополнительнаяОбработкаСсылка (тип СправочникСсылка.ДополнительныеОтчетыИОбработки) — ссылка на элемент справочника, под которым зарегистрирована ваша обработка.ИдентификаторКоманды (тип Строка) — уникальное имя команды, заданное при регистрации в функции СведенияОВнешнейОбработке.ИмяФормы (тип Строка) — имя формы, из которой была запущена обработка.Чтобы принять эти параметры и использовать их в своей логике, в модуле управляемой формы внешней обработки в процедуре ПриСозданииНаСервере мы должны написать следующий код:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Проверяем, переданы ли параметры заполнения из БСП
Если Параметры.Свойство("ОбъектыНазначения") Тогда
МассивОбъектов = Параметры.ОбъектыНазначения;
Для Каждого СсылкаНаОбъект Из МассивОбъектов Цикл
// Реализуем логику анализа или заполнения данных
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Для файлового варианта работы существует простой и быстрый лайфхак, который позволяет платформе «сцепить» выполняемый код БСП с локальным файлом обработки на вашем жестком диске. Выполним следующие шаги:
СведенияОВнешнейОбработке() обязательно установим параметр безопасного режима в значение Ложь:
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
.epf в режиме «1С:Предприятие» напрямую через главное меню Файл -> Открыть. Сразу после открытия форму обработки можно закрыть. Благодаря этому платформа поместит путь к физическому файлу в кэш сеанса.ПриСозданииНаСервере) и установим обычную точку останова (клавиша F9).Важное ограничение: Этот способ работает исключительно в файловых базах данных. В клиент-серверном варианте код формы инициализируется на сервере приложений 1С, который ничего не знает о локальном кэше вашего клиентского компьютера, поэтому сопоставить файлы не удастся.
Если разработка и отладка ведутся в клиент-серверной базе, и у вас есть возможность вносить временные изменения в конфигурацию (на тестовой базе), мы можем применить ручной перехват вызова в общем модуле БСП. Проделаем следующие действия:
ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(Ссылка).
ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим);
// Временный код для отладки на сервере
ИмяОбработки = Менеджер.Подключить("C:\Debug\MyExternalProcessing.epf", "DebugProcessing", Ложь);
C:\Debug\MyExternalProcessing.epf в Конфигураторе, расставим точки останова в модуле формы или объекта. Теперь при вызове команды система проигнорирует хранилище базы данных и выполнит код напрямую из вашего файла на диске. Отладка сработает без проблем.Чтобы каждый раз не править код конфигурации и не переписывать пути вручную, профессиональные разработчики используют специальные расширения для отладки дополнительных отчетов и обработок.
Принцип работы таких расширений основан на механизме аннотаций &Вместо. Расширение перехватывает управление в функции ПодключитьВнешнююОбработку общего модуля БСП. В интерфейсе расширения вы один раз указываете сопоставление: какой именно элемент справочника дополнительных обработок нужно заменить на локальный файл .epf с диска.
При запуске команды расширение подменяет вызов из хранилища на загрузку файла с диска. Вы получаете возможность беспрепятственно вести разработку и отладку как в файловом, так и в серверном варианте работы, просто сохраняя изменения в файл обработки.
Даже при использовании правильных методик сопоставления файлов отладка может пройти мимо, если не настроены параметры самого Конфигуратора. Проанализируем ключевые моменты, которые нужно перепроверить перед началом работы: