Каждый разработчик 1С рано или поздно сталкивается с ситуацией: создана внешняя обработка или печатная форма, она успешно зарегистрирована в справочнике «Дополнительные отчеты и обработки», но при попытке отладить ее код точки останова в конфигураторе упорно игнорируются. Сообщения на экран выводятся, код выполняется, но отладчик «пролетает» мимо нужных строк. Особенно часто эта проблема проявляется в конфигурациях на базе БСП (Библиотеки Стандартных Подсистем), таких как 1С:Документооборот, 1С:ERP, 1С:Комплексная автоматизация или 1С:Управление торговлей.
В этой статье мы подробно разберем, почему так происходит, проанализируем внутренние механизмы платформы и БСП, а также рассмотрим несколько надежных практических способов, которые гарантированно помогут вам зайти отладчиком в модуль внешней обработки.
В старых версиях платформы 1С:Предприятие внешние обработки при запуске физически сохранялись во временный каталог на диске компьютера. Разработчик мог открыть этот временный файл через конфигуратор, расставить точки останова, и они успешно срабатывали.
В современных конфигурациях на управляемых формах архитектура работы с дополнительными отчетами и обработками кардинально изменилась. Проанализируем этот процесс изнутри:
Справочник.ДополнительныеОтчетыИОбработки).ВнешниеОбработкиМенеджер.Подключить(), передавая адрес этого временного хранилища.Поскольку конфигуратор пытается сопоставить локальный файл обработки (например, лежащий у вас на рабочем столе) с исполняемым кодом, а платформа выполняет объект из временной памяти, отладчик не может связать эти два объекта. Для него это абсолютно разные программные модули, поэтому точки останова в вашем локальном файле не срабатывают.
Ниже мы подробно разберем по шагам, как обойти это ограничение и настроить полноценную отладку.
Чтобы заставить БСП запускать именно ваш локальный файл с диска (в котором расставлены точки останова), мы можем временно перехватить процедуру подключения внешней обработки с помощью небольшого расширения. Этот способ хорош тем, что нам не нужно снимать основную конфигурацию с поддержки.
Выполним следующие шаги для настройки:
ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку (или аналогичную функцию, отвечающую за подключение, в зависимости от версии БСП) и применим к ней аннотацию &Вместо.Посмотрим на пример переопределения функции в расширении:
&Вместо("ПодключитьВнешнююОбработку")
Функция Мой_ПодключитьВнешнююОбработку(СсылкаИлиДанные, ПутьКФайлу = "") Экспорт
// Вместо стандартного получения данных из справочника БСП
// мы жестко прописываем путь к нашей локальной обработке на диске
ИмяФайлаНаДиске = "C:\Debug\MyExternalProcessing.epf";
// Подключаем внешнюю обработку напрямую из файла без использования безопасного режима
ИмяОбработки = ВнешниеОбработки.Подключить(ИмяФайлаНаДиске, , Ложь);
Возврат ИмяОбработки;
КонецФункции
После этого вам достаточно открыть файл C:\Debug\MyExternalProcessing.epf в конфигураторе, расставить нужные точки останова в модуле формы или модуля объекта и запустить отладку. При выполнении команды в режиме Предприятия БСП обратится к файлу на диске, и отладчик мгновенно сработает на ваших точках останова. Более того, вы сможете редактировать код обработки в конфигураторе, сохранять его, и изменения будут сразу применяться без необходимости перезапускать сеанс 1С.
Это классический «партизанский» метод отладки, который упоминали участники форума. Он выручает, когда нет возможности быстро создать расширение или изменить код общего модуля. Суть метода заключается в принудительном вызове исключения в коде внешней обработки.
Разберем по шагам, как это реализовать:
ВыполнитьКоманду) добавьте заведомо ошибочный код внутри блока обработки исключений:
Попытка
ЧислоНоль = 0;
ВызватьОшибку = 1 / ЧислоНоль;
Исключение
// Пустой блок, чтобы программа не упала с критической ошибкой для пользователя
КонецПопытки;
Попытка...Исключение).При выполнении строки деления на ноль платформа сгенерирует внутреннее исключение. Так как в конфигураторе включена остановка по ошибке, система автоматически приостановит работу сеанса и откроет временную копию модуля обработки прямо на строке с ошибкой. Отсюда вы сможете продолжить пошаговую отладку (клавишей F10 или F11) и просматривать значения переменных на панели вычислений.
Важное примечание: Если этот способ не сработал у вас (как у автора темы), это сигнализирует об одной из двух проблем: либо обработка выполняется в безопасном режиме, либо код выполняется в фоновом задании на сервере, где отладка не подключена. Рассмотрим, как решить эти проблемы.
Очень часто методы внешних обработок выполняются на стороне сервера приложений 1С:Предприятия. Если ваша база работает в клиент-серверном варианте (SQL), то по умолчанию отладка серверных вызовов может быть отключена на самом сервере 1С.
Выясним, как проверить и включить серверную отладку:
services.msc).-debug.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3...) и добавить параметр -debug в строку запуска службы. После этого запустите службу заново.Платформа 1С накладывает жесткие ограничения на выполнение отладочных действий над кодом, который выполняется в безопасном режиме. Безопасный режим часто принудительно включается для внешних обработок с целью защиты системы.
Если в модуле объекта вашей обработки в функции СведенияОВнешнейОбработке указано:
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
Этого может быть недостаточно! Администратор системы при регистрации обработки в режиме Предприятия мог вручную взвести флаг безопасного режима в карточке элемента справочника «Дополнительные отчеты и обработки».
Проанализируем необходимые действия в интерфейсе программы:
Современная БСП часто запускает серверный код внешних обработок асинхронно в фоновых заданиях, чтобы пользовательский интерфейс не «зависал» во время длительных расчетов. По умолчанию отладчик не переходит в фоновые задания автоматически.
Чтобы решить эту проблему, мы можем настроить конфигуратор так, чтобы все фоновые вызовы выполнялись синхронно в рамках текущего сеанса отладки:
РежимОтладки (в зависимости от версии платформы может потребоваться формат /C РежимОтладки или /РежимОтладки для платформы 8.3.25 и выше).Этот параметр заставляет БСП выполнять все алгоритмы обработки в основном потоке клиентского приложения. Это существенно упрощает отладку, позволяя легко проходить по шагам любые серверные процедуры и функции. Для таких сценариев также подойдёт инструмент для отладки внешних печатных форм и обработок.