Переход на редакцию 1С:Документооборот 3.0 принес множество архитектурных изменений, одно из которых касается механизмов обработки документов. Часто разработчики сталкиваются с ситуацией: в схему обработки добавлен блок Скрипт или Условие, в коде вызывается процедура общего модуля, установлена точка останова, но при выполнении процесса отладчик просто игнорирует этот участок кода. Разберем подробно, почему так происходит и как заставить отладку работать.
Проанализируем ситуацию. В 1С:Документооборот 2.1 многие действия выполнялись непосредственно в контексте сеанса пользователя или бизнес-процесса. В версии 3.0 выполнение скриптов в схемах обработки вынесено в Очередь заданий. Для этого есть консоль кода и управление фоновыми заданиями. Это означает, что код исполняется не вашим текущим сеансом (Тонким клиентом), а отдельным фоновым заданием на сервере.
Более того, код самого скрипта, написанный внутри блока схемы, выполняется платформенным методом Выполнить() (редактор скриптов может облегчить работу). К сожалению, точка останова, поставленная непосредственно в текстовом поле настройки схемы, никогда не сработает — это ограничение платформы. Отладка возможна только в том случае, если скрипт вызывает процедуру Общего модуля, и точка останова стоит уже внутри этой процедуры — для этой задачи есть инструмент для отладки кода в режиме 1С:Предприятие.
Поскольку скрипт выполняется в фоне, нам необходимо «поймать» этот фоновый сеанс отладчиком. Рассмотрим, как правильно настроить параметры подключения:
-debug для TCP или соответствующими настройками для HTTP). Без этого отладка на сервере в принципе невозможна.После этих настроек, когда система дойдет до блока скрипта, отладчик должен автоматически создать новое соединение и остановиться на вашей точке в общем модуле.
Если автоматическое подключение к фоновым заданиям не помогает (например, из-за специфических настроек сети или сервера), мы можем пойти другим путем — заставить систему выполнить код «здесь и сейчас». Для этого разберем настройку отложенного выполнения:
В 1С:Документооборот 3.0 существует регламентное задание Диспетчер обработки очереди заданий (удобно через автоматизация уведомлений и событий в 1С:ДО). Именно оно подхватывает задачи из очереди. Чтобы отладить скрипт в контексте своего сеанса, попробуем следующее:
Иногда точка останова не срабатывает просто потому, что выполнение скрипта прерывается ошибкой еще до вызова вашей процедуры. Рассмотрим пример кода, который часто вызывает вопросы у разработчиков:
// Фрагмент скрипта в схеме
Документ = Параметры.ОбработкаОбъект.Владелец.ПолучитьОбъект();
ОМ_ОбщийМодульСервер.ТестСхемыОбработки(Документ);
Проанализируем ситуацию: в ДО 3.0 состав структуры Параметры в блоках схемы может отличаться от привычного по ДО 2.1. Если вы обращаетесь к Параметры.ОбработкаОбъект.Владелец, и это свойство не определено, скрипт «упадет» с ошибкой. Посмотрим, как это проверить:
Инфо = ТипЗнч(Параметры.ОбработкаОбъект);
ЗаписьЖурналаРегистрации("ОтладкаСкрипта", УровеньЖурналаРегистрации.Информация, , , "Тип объекта: " + Инфо);
Если фоновое задание пролетает слишком быстро, и отладчик не успевает к нему подключиться, применим профессиональную хитрость. Добавим в начало процедуры общего модуля код, который искусственно замедлит выполнение:
Процедура ТестСхемыОбработки(Документ) Экспорт
// Включаем зацикливание на 10-15 секунд для ручного подключения
ТекущийМомент = ТекущаяДата();
Пока ТекущаяДата() < ТекущийМомент + 15 Цикл
// Ждем
КонецЦикла;
// Ваша логика
ДокументОбъект = Документ.ПолучитьОбъект();
// ...
КонецПроцедуры
За это время мы успеем зайти в окно Отладка — Подключение, найти появившееся фоновое задание в списке доступных и нажать Подключить вручную.
Напоследок проверим еще два важных момента. Во-первых, убедитесь, что ваш общий модуль имеет флаг Вызов сервера или Сервер. Во-вторых, помните, что скрипты в схемах обработки часто выполняются под системной учетной записью или под пользователем, инициировавшим процесс. Если у этого пользователя нет прав на чтение данных, к которым обращается скрипт, процедура может не вызваться из-за ошибки прав доступа — для этого пригодится управление правами доступа в 1С:Документооборот 3.0. Всегда проверяйте Журнал регистрации — это ваш главный помощник при отладке асинхронных процессов в 1С:Документооборот 3.0.