Как отладить скрипт в схеме обработки документа в 1С:Документооборот 3.0

Программист 1С v8.3 (Управляемые формы) 1С:Документооборот IT и автоматизация бизнеса
← На главную

Переход на редакцию 1С:Документооборот 3.0 принес множество архитектурных изменений, одно из которых касается механизмов обработки документов. Часто разработчики сталкиваются с ситуацией: в схему обработки добавлен блок Скрипт или Условие, в коде вызывается процедура общего модуля, установлена точка останова, но при выполнении процесса отладчик просто игнорирует этот участок кода. Разберем подробно, почему так происходит и как заставить отладку работать.

Выясним причину: почему не срабатывает точка останова

Проанализируем ситуацию. В 1С:Документооборот 2.1 многие действия выполнялись непосредственно в контексте сеанса пользователя или бизнес-процесса. В версии 3.0 выполнение скриптов в схемах обработки вынесено в Очередь заданий. Для этого есть консоль кода и управление фоновыми заданиями. Это означает, что код исполняется не вашим текущим сеансом (Тонким клиентом), а отдельным фоновым заданием на сервере.

Более того, код самого скрипта, написанный внутри блока схемы, выполняется платформенным методом Выполнить() (редактор скриптов может облегчить работу). К сожалению, точка останова, поставленная непосредственно в текстовом поле настройки схемы, никогда не сработает — это ограничение платформы. Отладка возможна только в том случае, если скрипт вызывает процедуру Общего модуля, и точка останова стоит уже внутри этой процедуры — для этой задачи есть инструмент для отладки кода в режиме 1С:Предприятие.

Способ 1. Настройка автоматического подключения фоновых заданий

Поскольку скрипт выполняется в фоне, нам необходимо «поймать» этот фоновый сеанс отладчиком. Рассмотрим, как правильно настроить параметры подключения:

  1. Откроем конфигуратор и перейдем в меню ОтладкаПодключение.
  2. В открывшемся окне нажмем кнопку Автоматическое подключение.
  3. Убедимся, что установлены флажки напротив пунктов Сервер и Фоновые задания. Если база работает через веб-сервер, также проверьте протокол (HTTP или TCP).
  4. Важный нюанс: Сервер «1С:Предприятия» должен быть запущен в режиме отладки (с ключом -debug для TCP или соответствующими настройками для HTTP). Без этого отладка на сервере в принципе невозможна.

После этих настроек, когда система дойдет до блока скрипта, отладчик должен автоматически создать новое соединение и остановиться на вашей точке в общем модуле.

Способ 2. Отключение отложенного выполнения процессов

Если автоматическое подключение к фоновым заданиям не помогает (например, из-за специфических настроек сети или сервера), мы можем пойти другим путем — заставить систему выполнить код «здесь и сейчас». Для этого разберем настройку отложенного выполнения:

В 1С:Документооборот 3.0 существует регламентное задание Диспетчер обработки очереди заданий (удобно через автоматизация уведомлений и событий в 1С:ДО). Именно оно подхватывает задачи из очереди. Чтобы отладить скрипт в контексте своего сеанса, попробуем следующее:

  1. Перейдем в раздел НастройкаНастройка программыПроцессы и задачи.
  2. Найдем опцию Выполнять процессы и задачи отложенно и временно отключим её.
  3. В этом случае система может попытаться выполнить обработку схемы немедленно в вашем сеансе, что позволит «провалиться» в отладку без ожидания фонового задания.

Способ 3. Анализ параметров и использование Журнала регистрации

Иногда точка останова не срабатывает просто потому, что выполнение скрипта прерывается ошибкой еще до вызова вашей процедуры. Рассмотрим пример кода, который часто вызывает вопросы у разработчиков:


// Фрагмент скрипта в схеме
Документ = Параметры.ОбработкаОбъект.Владелец.ПолучитьОбъект(); 
ОМ_ОбщийМодульСервер.ТестСхемыОбработки(Документ);

Проанализируем ситуацию: в ДО 3.0 состав структуры Параметры в блоках схемы может отличаться от привычного по ДО 2.1. Если вы обращаетесь к Параметры.ОбработкаОбъект.Владелец, и это свойство не определено, скрипт «упадет» с ошибкой. Посмотрим, как это проверить:


Инфо = ТипЗнч(Параметры.ОбработкаОбъект);
ЗаписьЖурналаРегистрации("ОтладкаСкрипта", УровеньЖурналаРегистрации.Информация, , , "Тип объекта: " + Инфо);

Метод «Остановки через задержку» (Advanced Debugging)

Если фоновое задание пролетает слишком быстро, и отладчик не успевает к нему подключиться, применим профессиональную хитрость. Добавим в начало процедуры общего модуля код, который искусственно замедлит выполнение:


Процедура ТестСхемыОбработки(Документ) Экспорт
    
    // Включаем зацикливание на 10-15 секунд для ручного подключения
    ТекущийМомент = ТекущаяДата();
    Пока ТекущаяДата() < ТекущийМомент + 15 Цикл
        // Ждем
    КонецЦикла;
    
    // Ваша логика
    ДокументОбъект = Документ.ПолучитьОбъект();
    // ...
    
КонецПроцедуры

За это время мы успеем зайти в окно Отладка — Подключение, найти появившееся фоновое задание в списке доступных и нажать Подключить вручную.

Резюме по объектам и правам

Напоследок проверим еще два важных момента. Во-первых, убедитесь, что ваш общий модуль имеет флаг Вызов сервера или Сервер. Во-вторых, помните, что скрипты в схемах обработки часто выполняются под системной учетной записью или под пользователем, инициировавшим процесс. Если у этого пользователя нет прав на чтение данных, к которым обращается скрипт, процедура может не вызваться из-за ошибки прав доступа — для этого пригодится управление правами доступа в 1С:Документооборот 3.0. Всегда проверяйте Журнал регистрации — это ваш главный помощник при отладке асинхронных процессов в 1С:Документооборот 3.0.

← На главную