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

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

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

Архитектурная разница между версиями 2.1 и 3.0

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

Способ 1: Использование серверного метода ВыполнитьЗадачу

Для начала рассмотрим базовый способ, который подходит для простых случаев. Мы можем воспользоваться общим модулем ВыполнениеЗадачСервер. Для этого нам потребуется ссылка на задачу и структура параметров.


// Подготовим параметры выполнения
ПараметрыВыполнения = Новый Структура;
// В качестве результата передаем соответствующее значение (согласовано/не согласовано)
ПараметрыВыполнения.Вставить("РезультатВыполнения", Результат); 

// Вызываем штатный метод
ВыполнениеЗадачСервер.ВыполнитьЗадачу(СсылкаНаЗадачу, ПараметрыВыполнения);

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

Способ 2: Использование документа ДействиеЗадачи (рекомендуемый)

Выясним причину, почему первый способ может не сработать. В 1С:ДО 3.0 за выполнение этапа отвечает объект ДействиеЗадачи. Именно через него система понимает, что действие завершено. Разберем по шагам наиболее надежный вариант программного кода, который имитирует нажатие кнопки в форме согласования.

Шаг 1. Подготовка данных. Нам необходимо получить массив ссылок на действия задач и определить результат выполнения из справочника РезультатыДействийЗадач.

Шаг 2. Формирование параметров. Используем программный интерфейс для создания структуры параметров выполнения.

Шаг 3. Вызов метода выполнения. Используем функцию ВыполнитьДействиеЗадачи из модуля РаботаСЗадачамиВызовСервера.

Посмотрим на пример реализации:


// 1. Формируем массив действий (обычно это одно действие, связанное с нашей задачей)
ДействияЗадач = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ДействиеЗадачиСсылка);

// 2. Находим нужный результат (например, "Согласовано")
// Важно: лучше использовать поиск по предопределенным или через настройки, 
// но для примера найдем по наименованию
РезультатДействия = Справочники.РезультатыДействийЗадач.НайтиПоНаименованию("Согласовано");

// 3. Инициализируем стандартные параметры выполнения
ПараметрыВыполнения = РаботаСЗадачамиКлиентСервер.НовыйПараметрыВыполненияДействийЗадач();

// 4. Выполняем действие на сервере
ДанныеВыполнения = РаботаСЗадачамиВызовСервера.ВыполнитьДействиеЗадачи(
    ДействияЗадач,
    РезультатДействия,
    ПараметрыВыполнения);

Важные нюансы и обработка ошибок

Проанализируем возвращаемое значение ДанныеВыполнения. Это критически важно для надежной синхронизации. Метод может вернуть структуру, в которой поле ТребуетсяИнтерактивноеДействие будет установлено в значение Истина. Это происходит в следующих случаях:

  1. Обязательный комментарий: Если в настройках процесса указано, что при данном результате (например, «Не согласовано») комментарий обязателен, система не закроет задачу без текста. В этом случае нужно предварительно заполнить поле РезультатДействияТекстом в объекте ДействиеЗадачи.
  2. Заполнение реквизитов: Если для завершения этапа требуется заполнить дополнительные данные в предмете или самом действии.
  3. Блокировки: Если документ или задача в данный момент заблокированы другим пользователем или фоновым процессом.

Рассмотрим, как добавить комментарий программно перед выполнением:


ОбъектДействия = ДействиеЗадачиСсылка.ПолучитьОбъект();
ОбъектДействия.РезультатДействияТекстом = "Согласовано через внешнюю систему ERP";
ОбъектДействия.Записать();

Проблема «подвисания» этапов и фоновое выполнение

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

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

Таким образом, мы рассмотрели основной механизм программного управления процессами в 1С:ДО 3.0. Использование связки ДействиеЗадачи и штатных серверных модулей позволяет корректно встроить систему документооборота в общий ИТ-ландшафт предприятия. Для практического примера интеграции с внешними системами можно рассмотреть руководство по программному управлению бизнес-процессом в 1С:ДО.

← На главную