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