Детектор БС на согласование документа

1. blandinko 27.03.18 15:02 Сейчас в теме
Всем здравствуйте!

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

Есть идея создать свое бизнес-событие, типа "Документ согласован" и в "Правилах автозапуска процессов" прицепить к нему запуск нужного составного процесса.
Вот только как правильно описать детектор этого нового бизнес-события? Не могу найти никаких примеров...

1С 8.3 ДО 2.1.11.5 ПРОФ
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. CyberBob 4 28.03.18 04:37 Сейчас в теме
Вот у меня был такой детектор на принятие задачи к исполнению:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	ЗадачаИсполнителя.Ссылка
|	
|ИЗ
|	Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
|	ГДЕ 
|		(НЕ ЗадачаИсполнителя.Ссылка В 
|			(ВЫБРАТЬ 
|				ЗадачаИсполнителя.Ссылка
|					ИЗ Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПроизошедшиеБизнесСобытия КАК ПроизошедшиеБизнесСобытия
|						ПО 
|							ЗадачаИсполнителя.Ссылка = ПроизошедшиеБизнесСобытия.Источник
|								ГДЕ
|									ПроизошедшиеБизнесСобытия.ВидСобытия = &ВидСобытия
|									И ПроизошедшиеБизнесСобытия.ПометкаУдаления = &ПометкаУдаления))
|	И ЗадачаИсполнителя.Выполнена = &Выполнена
|	И ЗадачаИсполнителя.ПринятаКИсполнению = &ПринятаКИсполнению
|	И ЗадачаИсполнителя.Дата МЕЖДУ &ДатаНач И &ДатаКон";

Запрос.УстановитьПараметр("ВидСобытия", Справочники.ВидыБизнесСобытий.НайтиПоНаименованию("Принятие к исполнению"));
Запрос.УстановитьПараметр("Выполнена",Ложь);
Запрос.УстановитьПараметр("ПринятаКИсполнению",Истина);
Запрос.УстановитьПараметр("ДатаНач",ТекущаяДата()-7*24*3600);
Запрос.УстановитьПараметр("ДатаКон",ТекущаяДата());
Запрос.УстановитьПараметр("ПометкаУдаления",Ложь);
Рез = Запрос.Выполнить();
Если НЕ Рез.Пустой() Тогда
Выб = рез.Выбрать();
Пока Выб.Следующий() Цикл
	БизнесСобытияВызовСервера.ЗарегистрироватьСобытие(Выб.Ссылка,Справочники.ВидыБизнесСобытий.НайтиПоНаименованию("Принятие к исполнению"));
КонецЦикла;
КонецЕсли;
Показать

Запрос выбирает задачи, принятые к исполнению за неделю назад от текущей даты, исключая те, по которым бизнес-событие уже было зарегистрировано и регистрирует соответствующее событие. Был создан вид бизнес-события в справочнике "Виды бизнес-событий".

У меня версия КОРП, могут быть отличия от ПРОФ.
kiteacat1; +1 Ответить
3. kiteacat1 29.03.18 15:58 Сейчас в теме
Спасибо большое, буду разбираться
4. blandinko 05.04.18 17:42 Сейчас в теме
(2) Вы не могли бы посмотреть, пожалуйста, в чем у меня ошибка:

1. Создала свое БС "Документ согласован" (скрин1)

2. Создала детектор для этого БС по Вашему образцу (скрин2):

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    Согласование.Ссылка
|    
|ИЗ
|    БизнесПроцесс.Согласование Как Согласование
|    ГДЕ 
|        (НЕ Согласование.Ссылка В 
|            (ВЫБРАТЬ 
|                Согласование.Ссылка
|                    ИЗ БизнесПроцесс.Согласование КАК Согласование ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПроизошедшиеБизнесСобытия КАК ПроизошедшиеБизнесСобытия
|                        ПО 
|                            Согласование.Ссылка = ПроизошедшиеБизнесСобытия.Источник
|                                ГДЕ
|                                    ПроизошедшиеБизнесСобытия.ВидСобытия = &ВидСобытия
|                                    И ПроизошедшиеБизнесСобытия.ПометкаУдаления = &ПометкаУдаления))
|    И Согласование.РезультатСогласования = &РезультатСогл
|    И Согласование.Дата МЕЖДУ &ДатаНач И &ДатаКон";

Запрос.УстановитьПараметр("ВидСобытия", Справочники.ВидыБизнесСобытий.НайтиПоНаименованию("Завершение процесса"));
Запрос.УстановитьПараметр("РезультатСогл", Перечисления.РезультатыСогласования.Согласовано);
Запрос.УстановитьПараметр("ДатаНач", ТекущаяДата()-3*3600);
Запрос.УстановитьПараметр("ДатаКон", ТекущаяДата());
Запрос.УстановитьПараметр("ПометкаУдаления", Ложь);
Рез = Запрос.Выполнить();
Если НЕ Рез.Пустой() Тогда
	Выб = Рез.Выбрать();
	Пока Выб.Следующий() Цикл
		//Результат = Истина;
    	БизнесСобытияВызовСервера.ЗарегистрироватьСобытие(Выб.Ссылка,Справочники.ВидыБизнесСобытий.НайтиПоНаименованию("Документ согласован"));
	КонецЦикла;
//Иначе
//	Результат = Ложь;
КонецЕсли;
Показать


БС НЕ регистрируется :(

Кстати, в описании к детекторам есть такое:
//Пример обработки
//Если СобытиеПроизошло Тогда
//Результат = Истина;
//Иначе
//Результат = Ложь;
//КонецЕсли;


Я правильно понимаю, что вместо
БизнесСобытияВызовСервера.ЗарегистрироватьСобытие...
можно указать просто
Результат = Истина
?

(я не программист 1с, спасибо Вам за помощь заранее)
Прикрепленные файлы:
5. Skromnyi 13 05.04.18 19:15 Сейчас в теме
(4)а зачем Вы вообще пишете свой детектор, а не те что есть, например «Завершение процесса» (вроде так называется, на память пишу)?
6. CyberBob 4 06.04.18 04:47 Сейчас в теме
(4) Смотрите, ваш код рабочий (у меня), заменил только Запрос.УстановитьПараметр("ВидСобытия", Справочники.ВидыБизнесСобытий.НайтиПоНаименованию("Завершение процесса")); Вместо "Завершение процесса" - "Документ согласован". Запрос построен таким образом, что если по документу уже было зарегистрировано это событие, то повторно событие не обрабатывается. "Завершение процесса" естественно в журнале уже есть, поэтому детектор стопорился. Если сделать "результат = истина", то событие в журнал криво записывается - можете попробовать.

Можно сделать так, как предлагает Skromnyi, тогда нужно код обработки события рисовать.
blandinko; +1 Ответить
7. blandinko 06.04.18 10:37 Сейчас в теме
(6) Да, действительно, спасибо за исправление. Теперь БС регистрируется, ура!
Вот только "Правило автозапуска процесса" почему-то ничего не запускает...

Может я неправильно понимаю принцип этого механизма? Я считала, что он должен запускать указанный Шаблон процесса с Источником события в качестве предмета, если зарегистрировано указанное в Правиле Бизнес-событие с Источником события в качестве источника события )
9. CyberBob 4 07.04.18 08:56 Сейчас в теме
(7)Смотрите в журнале регистрации какие ошибки.
11. blandinko 09.04.18 09:19 Сейчас в теме
12. CyberBob 4 10.04.18 05:37 Сейчас в теме
(11)У меня, к стати, тоже не получилось(( Событие есть, детектор срабатывает, а автозапуска не происходит, но у меня в ЖР ошибки - дескать тип документа не тот (хотя тот), не победил (на скорую). У себя (для другой задачи) сделал запуск процесса доп. обработчиком.
8. Skromnyi 13 06.04.18 13:07 Сейчас в теме
10. blandinko 09.04.18 09:19 Сейчас в теме
(8) Через доп. обработчик по Вашему примеру все получилось! Спасибо огромное :)
Оставьте свое сообщение

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