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

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

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

Анализ проблемы: почему нельзя просто добавить пользователя

Типичная ошибка начинающих разработчиков заключается в попытке напрямую добавить ссылку на справочник Пользователи в коллекцию исполнителей бизнес-процесса. Проанализируем ситуацию: веб-сервисы 1С:ДО работают с объектами XDTO, и структура данных в них строго регламентирована. Для описания исполнителя в системе используется специальный класс-обертка — DMBusinessProcessTaskExecutor. Он позволяет реализовать не только персональную, но и ролевую адресацию (например, когда задача назначается не конкретному Иванову, а «Главному бухгалтеру»).

Шаг 1: Получение прокси и инициализация объекта процесса

Для начала взаимодействия нам необходимо получить прокси-объект веб-сервиса. Рекомендуется использовать метод DMGetNewBusinessProcessRequest для инициализации нового процесса. Это правильнее, чем создавать объект «с нуля», так как система вернет структуру с уже заполненными значениями по умолчанию. Разберем этот этап на примере кода:


Прокси = ИнтеграцияС1СДокументооборотПовтИсп.ПолучитьПрокси();

// Формируем запрос на создание нового объекта бизнес-процесса типа "Ознакомление"
ЗапросСоздание = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMGetNewBusinessProcessRequest");
ЗапросСоздание.type = "DMBusinessProcessAcquaintance";

// Выполняем запрос к веб-сервису
БПResponse = ИнтеграцияС1СДокументооборот.ВыполнитьЗапрос(Прокси, ЗапросСоздание);
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, БПResponse);

// Получаем сам объект бизнес-процесса из ответа
БизнесПроцессОбъект = БПResponse.object;

Шаг 2: Поиск исполнителя в 1С:Документообороте

Прежде чем назначить задачу, нам нужно найти соответствующего пользователя в базе 1С:ДО. Мы не можем использовать ссылку из текущей базы напрямую. Рассмотрим вариант поиска пользователя по его уникальному идентификатору (GUID) или через запрос списка. Самый надежный способ — получение объекта DMUser по идентификатору, если он известен:


// Создаем идентификатор объекта для поиска
ОбъектИд = ИнтеграцияС1СДокументооборот.СоздатьObjectID(Прокси, ГУИД_Пользователя_В_ДО, "DMUser");

// Формируем запрос на получение данных пользователя
ЗапросПользователя = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMRetrieveRequest");
ЗапросПользователя.objectIds.Добавить(ОбъектИд);

РезультатПоиска = Прокси.execute(ЗапросПользователя);
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, РезультатПоиска);

// Если пользователь найден, он будет в первом элементе коллекции предметов
ДанныеПользователя = РезультатПоиска.Items[0].object;

Шаг 3: Заполнение исполнителей через DMBusinessProcessTaskExecutor

Теперь перейдем к самому важному моменту — заполнению коллекции performers. Как мы выяснили ранее, нам нужно создать объект класса DMBusinessProcessTaskExecutor и поместить в его свойство user найденного нами пользователя. Проанализируем, как это сделать программно:


// Создаем объект-исполнитель
ИсполнительXDTO = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMBusinessProcessTaskExecutor");

// Заполняем данные пользователя в исполнителе
// Важно: передаем объект DMUser, полученный на предыдущем шаге
ИсполнительXDTO.user = ДанныеПользователя;

// Добавляем исполнителя в список бизнес-процесса
БизнесПроцессОбъект.performers.Добавить(ИсполнительXDTO);

Обратите внимание: Если вы планируете использовать ролевую адресацию, вместо свойства user необходимо заполнять свойство role, используя объект типа DMBusinessProcessExecutorRole.

Шаг 4: Установка описания и сроков

Бизнес-процесс не будет информативным без названия и описания. Заполним основные реквизиты:


БизнесПроцессОбъект.name = "Ознакомиться с приказом №123";
БизнесПроцессОбъект.description = "Просьба ознакомиться с внутренним регламентом до конца недели.";
БизнесПроцессОбъект.beginDate = ТекущаяДата();
// Можно также установить важность (DMImportance: Обычная, Высокая, Низкая)
БизнесПроцессОбъект.importance = "High"; 

Шаг 5: Привязка предмета (документа)

Чаще всего ознакомление запускается по конкретному документу. Для этого используется коллекция subjects. Рассмотрим, как добавить основной предмет задачи:


ПредметБП = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMBusinessProcessSubject");
ПредметБП.subject = ИнтеграцияС1СДокументооборот.СоздатьObjectID(Прокси, ИД_Документа_В_ДО, "DMDocument");
ПредметБП.role = "Основной"; // Роль предмета в процессе

БизнесПроцессОбъект.subjects.Добавить(ПредметБП);

Шаг 6: Запуск бизнес-процесса

Финальный этап — отправка сформированного объекта обратно в 1С:Документооборот для его фактического запуска. Для этого используется метод DMLaunchBusinessProcessRequest. Выясним, как правильно обработать результат:


ЗапросЗапуск = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMLaunchBusinessProcessRequest");
ЗапросЗапуск.businessProcess = БизнесПроцессОбъект;

ОтветЗапуска = ИнтеграцияС1СДокументооборот.ВыполнитьЗапрос(Прокси, ЗапросЗапуск);
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, ОтветЗапуска);

// В переменной ОтветЗапуска будет содержаться идентификатор созданного БП в 1С:ДО
Сообщить("Бизнес-процесс успешно запущен. ID: " + ОтветЗапуска.objectId.id);

Дополнительные рекомендации для оптимизации

Проанализируем несколько советов, которые помогут сделать вашу интеграцию более надежной:

  1. Использование шаблонов: Вместо ручного заполнения всех параметров, рассмотрите возможность запуска процесса по заранее настроенному шаблону в 1С:ДО. В этом случае достаточно указать template в запросе DMGetNewBusinessProcessRequest, и большинство полей (исполнители, сроки) заполнятся автоматически согласно настройкам в Документообороте.
  2. Контроль прав доступа: Убедитесь, что пользователь, под которым выполняется подключение к веб-сервису, обладает достаточными правами на создание бизнес-процессов и просмотр документов, указанных в предметах.
  3. Версии Документооборота: Помните, что в версии 3.0 логика работы с процессами изменилась в сторону «Обработки документов». Если ваша система обновлена до 3.0, используйте объекты DMProcess и соответствующие методы запуска действий обработки.

Таким образом, мы разобрали полный цикл программного создания задачи. Главное — соблюдать иерархию XDTO-объектов и использовать правильные классы для передачи данных исполнителей и предметов.

← На главную