Разработка внешних обработок и печатных форм — это стандартная задача для любого программиста 1С. Однако часто мы сталкиваемся с ситуацией, когда обработка запускается не через Файл — Открыть, а программно, например, через механизмы Библиотеки стандартных подсистем (БСП). В этом случае стандартная точка останова в модуле формы может просто не сработать. Это происходит потому, что платформа загружает код из временного хранилища (двоичных данных), и конфигуратор «не понимает», какому исходному файлу на диске соответствует этот исполняемый контекст.
В данной статье мы подробно разберем, как преодолеть это ограничение, проанализируем различные подходы и научимся попадать отладчиком в модуль формы внешней обработки даже при сложном программном вызове.
Если ваша конфигурация построена на базе БСП (что верно для большинства современных конфигураций, таких как ERP, КА, УТ 11, БП 3.0), разработчики уже предусмотрели специальный механизм. Разберем по шагам, как его активировать:
.epf прямо на диске.Благодаря этому конфигуратор устанавливает прямую связь между выполняемым кодом и файлом, открытым в среде разработки, и ваши точки останова в модуле формы начнут срабатывать штатно.
Рассмотрим ситуацию, когда первый метод недоступен или не срабатывает. В таком случае мы можем использовать «хитрость» с прерыванием выполнения. Проанализируем, как это сделать правильно.
Обычная вставка деления на ноль может быть перехвачена внутренними блоками Попытка — Исключение в коде БСП, и мы так и не попадем в отладку. Чтобы этого избежать, выполним следующие настройки:
После этого в начало процедуры ПриСозданииНаСервере модуля формы нашей внешней обработки вставим следующий код:
// Временный код для инициации отладки
А = 1 / 0;
При запуске системы выполнение прервется на этой строке, и платформа предложит войти в режим отладки. Вы попадете именно в контекст модуля формы, после чего сможете удалить или закомментировать строку с ошибкой и продолжить выполнение по шагам (F10, F11).
Выясним еще одну интересную особенность: отладчик 1С гораздо стабильнее работает с объектами, которые уже находятся в его «поле зрения». Если мы не можем зайти напрямую, попробуем зайти «с черного входа».
Разберем алгоритм действий:
ОбщегоНазначенияКлиентСервер или любой ваш кастомный модуль).Когда выполнение дойдет до вызова, отладчик остановится в общем модуле. Теперь самое главное: откроем окно Стек вызовов (Call Stack). В этом окне мы увидим, что текущая процедура вызвана из нашей внешней обработки. Щелкнув дважды по строке стека, предшествующей текущей, мы переместимся в модуль формы внешней обработки. Теперь точки останова внутри этого модуля станут активными и «живыми».
Проанализируем технический момент подключения. В БСП обычно используется метод Менеджеры.ВнешниеОбработки.Подключить(АдресВоВременномХранилище, ...). Проблема здесь в том, что система работает с временным объектом в памяти.
Если вы имеете возможность временно изменить код вызывающей стороны (через расширение или напрямую), попробуйте заменить передачу адреса из хранилища на прямой путь к файлу на диске:
// Вместо этого:
// ИмяОбработки = ВнешниеОбработки.Подключить(АдресХранилища);
// Используем это (только для отладки!):
ИмяОбработки = ВнешниеОбработки.Подключить("C:\MyWorks\MyProcessing.epf", Ложь);
При таком способе подключения платформа жестко связывает контекст исполнения с файлом, и отладка модуля формы работает безупречно.
Важно помнить, что внешние обработки часто подключаются в безопасном режиме. В этом режиме возможности отладки и доступа к некоторым ресурсам могут быть ограничены. Если вы перепробовали все методы, но отладчик все равно игнорирует точки останова, убедитесь, что при вызове метода Подключить параметр БезопасныйРежим установлен в значение Ложь.
Существуют готовые инструменты, такие как «Инструменты разработчика» (ИР). В их составе есть консоли отладки, которые умеют «подцепляться» к процессам и корректно сопоставлять временные файлы обработок. Если вам приходится часто отлаживать сложные внешние механизмы, использование подобных консолей сэкономит массу времени. При необходимости можно воспользоваться инструментом для отладки внешних печатных форм и обработок, вызываемых из форм документов.
Подведем итог: наиболее надежным и современным способом является использование штатного механизма отладки БСП через указание пути к файлу в справочнике дополнительных обработок. Если же вы работаете в условиях, где это невозможно, метод со стеком вызовов или принудительной остановкой по всем ошибкам всегда придет на помощь. Мы рекомендуем всегда держать открытым файл обработки в конфигураторе во время сеанса отладки — это помогает платформе быстрее сопоставить идентификаторы модулей.