Программное создание задачи и бизнес-процесса в документообороте из другой системы

1. user1024476 17.10.18 06:26 Сейчас в теме
Требуется программно создать БП "Ознакомление" при определенных условиях с помощью Интеграции С 1СДокументооборот
Что известно:
- нужно использовать класс "DMBusinessProcessAcquaintance"

на данный момент остановился на добавлении исполнителей
       
    Прокси = ИнтеграцияС1СДокументооборотПовтИсп.ПолучитьПрокси();
    Запрос = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMBusinessProcessAcquaintance");
    Запрос.performers.Добавить(Справочники.Пользователи.НайтиПоНаименованию("Тест"));


на этом этапе уже ругается , что так добавлять исполнителей нельзя
также не могу себе представить как добавить описание задачи
По теме из базы знаний
Найденные решения
5. dandykry 10 17.10.18 07:33 Сейчас в теме
(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СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Результат);
Показать
jufyti; user1024476; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dandykry 10 17.10.18 07:22 Сейчас в теме
(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
jufyti; user705522_constantin_h; user1024476; +3 Ответить
3. user1024476 17.10.18 07:26 Сейчас в теме
(2)Да, я видел этот класс
но как через него передать конкретных/ного пользователей из справочника документооборота , например
4. dandykry 10 17.10.18 07:32 Сейчас в теме
(3) По логике сначала нужно их запросить с отбором по нужному.
DMGetObjectListRequest
5. dandykry 10 17.10.18 07:33 Сейчас в теме
(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СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Результат);
Показать
jufyti; user1024476; +2 Ответить
6. dandykry 10 17.10.18 07:35 Сейчас в теме
(3) Либо Сразу запрос конкретного пользователя

Прокси = ИнтеграцияС1СДокументооборотПовтИсп.ПолучитьПрокси();
Запрос = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMRetrieveRequest");
ОбъектИд = ИнтеграцияС1СДокументооборот.СоздатьObjectID(Прокси, ГУИДПОЛЬЗОВАТЕЛЯ, "DMUser");
Запрос.objectIds.Добавить(ОбъектИд);


Результат = Прокси.execute(Запрос); //Класс DMRetrieveResponse
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Результат);
user1024476; +1 Ответить
7. user1024476 17.10.18 12:19 Сейчас в теме
(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СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Ответ);
Показать




в результате получаю такую ошибку (в прикрепе)
Прикрепленные файлы:
8. user1024476 17.10.18 13:09 Сейчас в теме
не знаю насколько это верное решение, но новые задачи в ДО добавляются

	Прокси = ИнтеграцияС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);
Показать
9. dandykry 10 17.10.18 13:29 Сейчас в теме
(8) на первый взгляд пойдет. Вроде не нужно всех пользователей получать

//заполнение списка пользователей
ЗапросПользователи = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMGetObjectListRequest");
ЗапросПользователи.Type = "DMUser";
Результат = Прокси.execute(ЗапросПользователи);
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Результат);

Достаточно отбором получить администратора.

Еще есть нюансы с адресацией. Иногда исполнитель это роль, а не пользователь.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот