При переходе с версии 1С:Документооборот 2.1 на 3.0 многие разработчики сталкиваются с тем, что привычные методы программного выполнения задач перестают работать. Это связано с глубоким изменением архитектуры системы: теперь основной фокус смещен с бизнес-процессов на Действия. В данной статье мы разберем, как правильно реализовать программное согласование (или отклонение) задачи, чтобы процесс корректно продвинулся на следующий этап, а все регистры состояний обновились штатно.
Проанализируем ситуацию: в версии 2.1 выполнение задачи часто сводилось к манипуляциям с объектом ЗадачаИсполнителя. В версии 3.0 выполнение задачи неразрывно связано с документом ДействиеЗадачи. Этот документ выступает своего рода «контейнером» для результата. Если мы попытаемся просто вызвать Задача.ВыполнитьЗадачу(), система может не обновить связанные данные, и процесс «зависнет». Рассмотрим правильный подход, который использует штатные механизмы конфигурации.
Для начала рассмотрим базовый способ, который подходит для простых случаев. Мы можем воспользоваться общим модулем ВыполнениеЗадачСервер. Для этого нам потребуется ссылка на задачу и структура параметров.
// Подготовим параметры выполнения
ПараметрыВыполнения = Новый Структура;
// В качестве результата передаем соответствующее значение (согласовано/не согласовано)
ПараметрыВыполнения.Вставить("РезультатВыполнения", Результат);
// Вызываем штатный метод
ВыполнениеЗадачСервер.ВыполнитьЗадачу(СсылкаНаЗадачу, ПараметрыВыполнения);
Однако, как показывает практика, этого не всегда достаточно для того, чтобы стрелка в визуальной схеме процесса перепрыгнула на следующий этап, особенно если речь идет о сложных процессах обработки документов.
Выясним причину, почему первый способ может не сработать. В 1С:ДО 3.0 за выполнение этапа отвечает объект ДействиеЗадачи. Именно через него система понимает, что действие завершено. Разберем по шагам наиболее надежный вариант программного кода, который имитирует нажатие кнопки в форме согласования.
Шаг 1. Подготовка данных. Нам необходимо получить массив ссылок на действия задач и определить результат выполнения из справочника РезультатыДействийЗадач.
Шаг 2. Формирование параметров. Используем программный интерфейс для создания структуры параметров выполнения.
Шаг 3. Вызов метода выполнения. Используем функцию ВыполнитьДействиеЗадачи из модуля РаботаСЗадачамиВызовСервера.
Посмотрим на пример реализации:
// 1. Формируем массив действий (обычно это одно действие, связанное с нашей задачей)
ДействияЗадач = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ДействиеЗадачиСсылка);
// 2. Находим нужный результат (например, "Согласовано")
// Важно: лучше использовать поиск по предопределенным или через настройки,
// но для примера найдем по наименованию
РезультатДействия = Справочники.РезультатыДействийЗадач.НайтиПоНаименованию("Согласовано");
// 3. Инициализируем стандартные параметры выполнения
ПараметрыВыполнения = РаботаСЗадачамиКлиентСервер.НовыйПараметрыВыполненияДействийЗадач();
// 4. Выполняем действие на сервере
ДанныеВыполнения = РаботаСЗадачамиВызовСервера.ВыполнитьДействиеЗадачи(
ДействияЗадач,
РезультатДействия,
ПараметрыВыполнения);
Проанализируем возвращаемое значение ДанныеВыполнения. Это критически важно для надежной синхронизации. Метод может вернуть структуру, в которой поле ТребуетсяИнтерактивноеДействие будет установлено в значение Истина. Это происходит в следующих случаях:
РезультатДействияТекстом в объекте ДействиеЗадачи.Рассмотрим, как добавить комментарий программно перед выполнением:
ОбъектДействия = ДействиеЗадачиСсылка.ПолучитьОбъект();
ОбъектДействия.РезультатДействияТекстом = "Согласовано через внешнюю систему ERP";
ОбъектДействия.Записать();
Если после выполнения кода вы видите, что задача закрылась, но процесс не перешел к следующему исполнителю, проанализируем состояние очереди заданий. В 1С:Документооборот 3.0 многие процессы обработки происходят в фоновом режиме. Убедитесь, что:
ОбработкаОчередиЗаданий) выполняется без ошибок.Совет: При интеграции с внешними системами всегда логируйте результат, возвращаемый функцией ВыполнитьДействиеЗадачи. Если в массиве предупреждений есть записи, ваша синхронизация должна уметь передать эту информацию обратно во внешнюю систему или администратору для ручного вмешательства.
Таким образом, мы рассмотрели основной механизм программного управления процессами в 1С:ДО 3.0. Использование связки ДействиеЗадачи и штатных серверных модулей позволяет корректно встроить систему документооборота в общий ИТ-ландшафт предприятия. Для практического примера интеграции с внешними системами можно рассмотреть руководство по программному управлению бизнес-процессом в 1С:ДО.