Программное создание задачи и бизнес-процесса в документообороте из другой системы
1С:CRM ПРОФ, КОРП
1С:Бухгалтерия государственного учреждения
1С:Документооборот
Бизнес-процессы
Windows
Требуется программно создать БП "Ознакомление" при определенных условиях с помощью Интеграции С 1СДокументооборот
Что известно:
- нужно использовать класс "DMBusinessProcessAcquaintance"
на данный момент остановился на добавлении исполнителей
на этом этапе уже ругается , что так добавлять исполнителей нельзя
также не могу себе представить как добавить описание задачи
Что известно:
- нужно использовать класс "DMBusinessProcessAcquaintance"
на данный момент остановился на добавлении исполнителей
Прокси = ИнтеграцияС1СДокументооборотПовтИсп.ПолучитьПрокси();
Запрос = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMBusinessProcessAcquaintance");
Запрос.performers.Добавить(Справочники.Пользователи.НайтиПоНаименованию("Тест"));
на этом этапе уже ругается , что так добавлять исполнителей нельзя
также не могу себе представить как добавить описание задачи
По теме из базы знаний
- Модуль "Интеграция с 1С:Документооборот 2.1 и 3.0" для УПП/КА/УТ 10.3/БГУ 1.0/ЗБУ 1.0. 1С-Совместимо
- Видеокурс-самоучитель "1С:Документооборот 2.1 и 3.0" для самостоятельного внедрения
- Дополнительные функции для 1С:Документооборот
- История создания успешной системы чат-ботов на 1С
- Внедрение 1С:Документооборот для оптимизации управления документами на предприятии любого масштаба
Найденные решения
(3) Вот пример с отбором по подразделению
Прокси = ИнтеграцияС1СДокументооборотПовтИсп.ПолучитьПрокси();
Если ЗначениеЗаполнено(ПодразделениеИД) Тогда
//получение руководителя текущего подразделения
Подразделения = ИнтеграцияС1СДокументооборот.ПолучитьОбъект(Прокси, "DMSubdivision", ПодразделениеИД);
Если Подразделения.objects[0].Установлено("head") Тогда
IDРуководителя = Подразделения.objects[0].head.objectId.id;
КонецЕсли;
КонецЕсли;
//заполнение списка пользователей
Запрос = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMGetObjectListRequest");
Запрос.Type = "DMUser";
Если ЗначениеЗаполнено(ПодразделениеИД) Тогда
УсловияОтбораОбъектов = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMObjectListQuery");
ПодразделениеXDTO = ИнтеграцияС1СДокументооборот.СоздатьObjectID(Прокси, ПодразделениеИД, "DMSubdivision");
Условие = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси,"DMObjectListCondition");
Условие.property = "Subdivision";
Условие.value = ПодразделениеXDTO;
УсловияОтбораОбъектов.conditions.Добавить(Условие);
Запрос.query = УсловияОтбораОбъектов;
КонецЕсли;
Результат = Прокси.execute(Запрос);
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Результат);
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Класс DMBusinessProcessTaskExecutor
Описывает исполнителя бизнес-процесса. С помощью данного класса реализуется персональная и ролевая адресация бизнес-процессов.
Свойство Тип Обязательное Список Описание
mainAddressingObject DMMainAddressingObject Нет Нет Основной объект адресации для роли. Заполняется, если в Документообороте для указанной в свойстве Role роли исполнителей настроено использование объектов адресации.
role DMBusinessProcessExecutorRole Нет Нет Роль исполнителя в Документообороте.
secondaryAddressingObject DMSecondaryAddressingObject Нет Нет Дополнительный объект адресации для роли. Заполняется, если в Документообороте для указанной в свойстве Role роли исполнителей помимо использования основного объекта адресации настроено использование дополнительного объекта адресации.
user DMUser Нет Нет Пользователь в Документооборот. Если заполнено данное свойство, то нет необходимости заполнять свойства Role, MainAddressingObject, SecondaryAddressingObject.
Производные классы:
DMBusinessProcessApprovalParticipant
DMBusinessProcessApprovalParticipant_1.2.1.11
DMBusinessProcessInvitationParticipant
DMBusinessProcessPerformanceParticipant
DMBusinessProcessPerformanceParticipant_1.2.1.11
Добавить нужно не ссылку а XDTO c классом DMBusinessProcessTaskExecutor
Добавить
Класс DMBusinessProcessTaskExecutor
Описывает исполнителя бизнес-процесса. С помощью данного класса реализуется персональная и ролевая адресация бизнес-процессов.
Свойство Тип Обязательное Список Описание
mainAddressingObject DMMainAddressingObject Нет Нет Основной объект адресации для роли. Заполняется, если в Документообороте для указанной в свойстве Role роли исполнителей настроено использование объектов адресации.
role DMBusinessProcessExecutorRole Нет Нет Роль исполнителя в Документообороте.
secondaryAddressingObject DMSecondaryAddressingObject Нет Нет Дополнительный объект адресации для роли. Заполняется, если в Документообороте для указанной в свойстве Role роли исполнителей помимо использования основного объекта адресации настроено использование дополнительного объекта адресации.
user DMUser Нет Нет Пользователь в Документооборот. Если заполнено данное свойство, то нет необходимости заполнять свойства Role, MainAddressingObject, SecondaryAddressingObject.
Производные классы:
DMBusinessProcessApprovalParticipant
DMBusinessProcessApprovalParticipant_1.2.1.11
DMBusinessProcessInvitationParticipant
DMBusinessProcessPerformanceParticipant
DMBusinessProcessPerformanceParticipant_1.2.1.11
Добавить нужно не ссылку а XDTO c классом DMBusinessProcessTaskExecutor
(3) Вот пример с отбором по подразделению
Прокси = ИнтеграцияС1СДокументооборотПовтИсп.ПолучитьПрокси();
Если ЗначениеЗаполнено(ПодразделениеИД) Тогда
//получение руководителя текущего подразделения
Подразделения = ИнтеграцияС1СДокументооборот.ПолучитьОбъект(Прокси, "DMSubdivision", ПодразделениеИД);
Если Подразделения.objects[0].Установлено("head") Тогда
IDРуководителя = Подразделения.objects[0].head.objectId.id;
КонецЕсли;
КонецЕсли;
//заполнение списка пользователей
Запрос = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMGetObjectListRequest");
Запрос.Type = "DMUser";
Если ЗначениеЗаполнено(ПодразделениеИД) Тогда
УсловияОтбораОбъектов = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMObjectListQuery");
ПодразделениеXDTO = ИнтеграцияС1СДокументооборот.СоздатьObjectID(Прокси, ПодразделениеИД, "DMSubdivision");
Условие = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси,"DMObjectListCondition");
Условие.property = "Subdivision";
Условие.value = ПодразделениеXDTO;
УсловияОтбораОбъектов.conditions.Добавить(Условие);
Запрос.query = УсловияОтбораОбъектов;
КонецЕсли;
Результат = Прокси.execute(Запрос);
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Результат);
Показать
(3) Либо Сразу запрос конкретного пользователя
Прокси = ИнтеграцияС1СДокументооборотПовтИсп.ПолучитьПрокси();
Запрос = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMRetrieveRequest");
ОбъектИд = ИнтеграцияС1СДокументооборот.СоздатьObjectID(Прокси, ГУИДПОЛЬЗОВАТЕЛЯ, "DMUser");
Запрос.objectIds.Добавить(ОбъектИд);
Результат = Прокси.execute(Запрос); //Класс DMRetrieveResponse
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Результат);
Прокси = ИнтеграцияС1СДокументооборотПовтИсп.ПолучитьПрокси();
Запрос = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMRetrieveRequest");
ОбъектИд = ИнтеграцияС1СДокументооборот.СоздатьObjectID(Прокси, ГУИДПОЛЬЗОВАТЕЛЯ, "DMUser");
Запрос.objectIds.Добавить(ОбъектИд);
Результат = Прокси.execute(Запрос); //Класс DMRetrieveResponse
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Результат);
(6)вроде немного продвинулся
но запустить процесс все равно не выходит
что на данный момент есть:
в результате получаю такую ошибку (в прикрепе)
но запустить процесс все равно не выходит
что на данный момент есть:
Прокси = ИнтеграцияС1СДокументооборотПовтИсп.ПолучитьПрокси();
Запрос = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMBusinessProcessAcquaintance");
//заполнение списка пользователей
ЗапросПользователи = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMGetObjectListRequest");
ЗапросПользователи.Type = "DMUser";
Результат = Прокси.execute(ЗапросПользователи);
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Результат);
ТаблицаПользователей = Новый ТаблицаЗначений;
ТаблицаПользователей.Колонки.Добавить("Пользователь");
ТаблицаПользователей.Колонки.Добавить("ПользовательID");
ТаблицаПользователей.Колонки.Добавить("ПользовательТип");
Для Каждого ПользовательВСписке Из Результат.Items Цикл
НоваяСтрока = ТаблицаПользователей.Добавить();
НоваяСтрока.Пользователь = ПользовательВСписке.object.name;
НоваяСтрока.ПользовательID = ПользовательВСписке.object.objectId.id;
НоваяСтрока.ПользовательТип = ПользовательВСписке.object.objectId.type;
КонецЦикла;
//исполнители
Для Каждого Строка Из ТаблицаПользователей Цикл
Исполнитель = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMBusinessProcessTaskExecutor");
Обработки.ИнтеграцияС1СДокументооборот.ЗаполнитьОбъектXDTOИзОбъектногоРеквизита(Прокси, Строка, "Пользователь", Исполнитель.user, "DMUser");
Исполнитель.user.name = Строка.Пользователь;
Исполнитель.user.objectId.id = Строка.ПользовательID;
Исполнитель.user.objectId.type = Строка.ПользовательТип;
Если Строка.Пользователь = "Администратор" Тогда
Запрос.performers.Добавить(Исполнитель);
КонецЕсли;
КонецЦикла;
Запрос1 = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMLaunchBusinessProcessRequest");
Запрос1.businessProcess = Запрос;
Ответ = ИнтеграцияС1СДокументооборот.ВыполнитьЗапрос(Прокси, Запрос1);
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Ответ);
Показатьв результате получаю такую ошибку (в прикрепе)
Прикрепленные файлы:
не знаю насколько это верное решение, но новые задачи в ДО добавляются
Прокси = ИнтеграцияС1СДокументооборотПовтИсп.ПолучитьПрокси();
ЗапросСоздание = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMGetNewBusinessProcessRequest");
ЗапросСоздание.type = "DMBusinessProcessAcquaintance";
БП = ИнтеграцияС1СДокументооборот.ВыполнитьЗапрос(Прокси, ЗапросСоздание);
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, ЗапросСоздание);
БП.object.name = "тестовый";
БП.object.description = "тестовый";
БП.object.beginDate = ТекущаяДата();
//заполнение списка пользователей
ЗапросПользователи = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMGetObjectListRequest");
ЗапросПользователи.Type = "DMUser";
Результат = Прокси.execute(ЗапросПользователи);
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Результат);
ТаблицаПользователей = Новый ТаблицаЗначений;
ТаблицаПользователей.Колонки.Добавить("Пользователь");
ТаблицаПользователей.Колонки.Добавить("ПользовательID");
ТаблицаПользователей.Колонки.Добавить("ПользовательТип");
Для Каждого ПользовательВСписке Из Результат.Items Цикл
НоваяСтрока = ТаблицаПользователей.Добавить();
НоваяСтрока.Пользователь = ПользовательВСписке.object.name;
НоваяСтрока.ПользовательID = ПользовательВСписке.object.objectId.id;
НоваяСтрока.ПользовательТип = ПользовательВСписке.object.objectId.type;
КонецЦикла;
//исполнители
Для Каждого Строка Из ТаблицаПользователей Цикл
Исполнитель = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMBusinessProcessTaskExecutor");
Обработки.ИнтеграцияС1СДокументооборот.ЗаполнитьОбъектXDTOИзОбъектногоРеквизита(Прокси, Строка, "Пользователь", Исполнитель.user, "DMUser");
Исполнитель.user.name = Строка.Пользователь;
Исполнитель.user.objectId.id = Строка.ПользовательID;
Исполнитель.user.objectId.type = Строка.ПользовательТип;
Если Строка.Пользователь = "Администратор" Тогда
БП.object.performers.Добавить(Исполнитель);
КонецЕсли;
КонецЦикла;
ЗапросЗапуск = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMLaunchBusinessProcessRequest");
ЗапросЗапуск.businessProcess = БП.object;
Ответ1 = ИнтеграцияС1СДокументооборот.ВыполнитьЗапрос(Прокси, ЗапросЗапуск);
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Ответ1);
Показать
(8) на первый взгляд пойдет. Вроде не нужно всех пользователей получать
//заполнение списка пользователей
ЗапросПользователи = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMGetObjectListRequest");
ЗапросПользователи.Type = "DMUser";
Результат = Прокси.execute(ЗапросПользователи);
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Результат);
Достаточно отбором получить администратора.
Еще есть нюансы с адресацией. Иногда исполнитель это роль, а не пользователь.
//заполнение списка пользователей
ЗапросПользователи = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMGetObjectListRequest");
ЗапросПользователи.Type = "DMUser";
Результат = Прокси.execute(ЗапросПользователи);
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Результат);
Достаточно отбором получить администратора.
Еще есть нюансы с адресацией. Иногда исполнитель это роль, а не пользователь.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот