РАССЫЛКИ УВЕДОМЛЕНИЙ ЗУП 3.1 КОРП

1. frkbvfnjh 809 30.03.22 13:39 Сейчас в теме
Всем привет! Кто нибудь работал с подсистемой рассылки уведомлений в КОРП версии ЗУП 3.1?
Требуется сделать новый вид уведомлений со своим шаблоном и реквизитами, но нигде не могу найти информации о том как это устроено. По коду тоже не могу разобраться до конца как оно устроено и что где нужно подправить, уже несколько дней мучаюсь. Может кто подсказать основные моменты как добавить свое уведомление? Или подтолкнуть в нужном направлении... Заранее спасибо!
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
9. user1765037 31.03.22 16:41 Сейчас в теме
2. laperuz 47 30.03.22 14:11 Сейчас в теме
Я буквально 3 дня назад именно эту задачу делал. Какие вопросы возникли?Там все довольно просто делается по аналогии с существующими рассылками.
3. frkbvfnjh 809 31.03.22 08:19 Сейчас в теме
(2) Здравствуйте. Правильно ли я понял, что для фактического создания нужно будет вызвать метод УведомленияСервер.ОбновитьВидыУведомлений()?
Для каждой подсистемы формируется свой вид уведомления, например: в модуле КадровыйУчетУведомления подсистемы кадрового учета есть метод ПриЗаполненииСпискаВидовУведомлений который описывает структуру уведомления. Туда я добавил свое уведомление, нам например нужно уведомить об окончание срока замещения и самого сотрудника и начальника подразделения. Потом ниже нужно прописать метод вида ИнициализацияВидаУведомления<НазваниеВидаУведомления>. Например возьмем уже имеющийся метод одного из уведомлений

Процедура ИнициализацияВидаУведомленияПервыйРабочийДень(ОписаниеДанных) Экспорт	
	ОписаниеДанных.ТипПредмета = Новый ОписаниеТипов("ДокументСсылка.ПриемНаРаботу");	
	УведомленияСервер.ДобавитьПолучателя(ОписаниеДанных, "Предмет", НСтр("ru = 'Сотрудник'"), Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица"));

	УведомленияСервер.ДобавитьОтбор(ОписаниеДанных, "Организация",		НСтр("ru='Организация'"), Новый ОписаниеТипов("СправочникСсылка.Организации"));
	УведомленияСервер.ДобавитьОтбор(ОписаниеДанных, "Подразделение",	НСтр("ru='Подразделение'"), Новый ОписаниеТипов("СправочникСсылка.ПодразделенияОрганизаций"));
	УведомленияСервер.ДобавитьОтбор(ОписаниеДанных, "Должность",		НСтр("ru='Должность'"), Новый ОписаниеТипов("СправочникСсылка.Должности"));
	УведомленияСервер.ДобавитьОтбор(ОписаниеДанных, "Пол",				НСтр("ru='Пол'"), Новый ОписаниеТипов("ПеречислениеСсылка.ПолФизическогоЛица"));	
КонецПроцедуры
Показать


Я, например не могу понять первые 2 строки метода - что такое ТипПредмета, что туда нужно присваивать, обязательно ли какой-то документ. И почему во второй параметр метода ДобавитьПолучателя(), который называется "ИмяПолучателя", передается слово "Предмет"? Что это за слово, почему "Предмет"?

Так же, как я понял, в этот модуль нужно добавить метод вида ПолучениеДанныхВидаУведомления<ИмяУведомления>, но по коду имеющихся методов получения данных для уведомления я не могу понять принцип, типа нужно вернуть какую то таблицу результата в выходной параметр, но я не понимаю что из себя должна представлять эта таблица, что в ней должно быть, что бы правильно создалось уведомление на нужную дату.
Так же я не нашел, где создаётся шаблон для нового вида уведомлений и как добавлять поля, которые можно было бы добавить в шаблон, где этот кусок кода находится, по какому принципу формируется состав допустимых полей при настройке шаблона?
4. laperuz 47 31.03.22 09:41 Сейчас в теме
(3)
Правильно ли я понял, что для фактического создания нужно будет вызвать метод УведомленияСервер.ОбновитьВидыУведомлений()?


Да.

Тип предмета и предмет - это то, кому уйдет уведомление, в форме новой рассылки отражается в блоке "Кого уведомлять". В общем случае там физическое лицо. Почему ТипПредмета в конкретном данном уведомлении именно ПриемНаРаботу - не знаю. Я в своем новом уведомлении делал СправочникСсылка.ФизическиеЛица.

Дальше поясню на примере общего модуля ОбучениеРазвитие, т.к. я именно его дорабатывал.

Предмет - не обязательно именно такое слово, главное, чтобы в процедуре вида ПолучениеДанных<ИмяУведомления> в таблице была колонка, совпадающая с данным словом. Т.е. если тот, кому вы хотите отправить уведомление, в этой таблице будет в колонке "ФизическоеЛицо", то и в качестве параметра вместо слова "Предмет" вы передадите "ФизическоеЛицо".

Что касается возвращаемой таблицы - колонки таблицы должны совпадать с тем, что вы описываете в ПриПодготовкеШаблонаСообщенияПоУведомлению(). Т.е. если в этой процедуре в шаблоне вы описали поля должность, подразделение, то и в получении данных таблица, которую вернет метод, должна содержать эти колонки. В дальнейшем эти колонки можно использовать в шаблоне в пользовательском режиме.
frkbvfnjh; +1 Ответить
5. frkbvfnjh 809 31.03.22 10:53 Сейчас в теме
(4) Аааааа, ну вот все стало на много понятнее, спасибо большое. Сейчас попробую доделать уведомлении на основании полученных знаний. Буду писать ещё, не прощаюсь...
6. frkbvfnjh 809 31.03.22 13:11 Сейчас в теме
(4)
Почему ТипПредмета в конкретном данном уведомлении именно ПриемНаРаботу - не знаю. Я в своем новом уведомлении делал СправочникСсылка.ФизическиеЛица.

Да, действительно интересно, сейчас столкнулись с тем, что в форме уведомления "Отпуск по графику", не получается добавить дополнительных получателей. В процедуре инициализации заменил
ОписаниеДанных.ТипПредмета = Новый ОписаниеТипов("ДокументСсылка.ГрафикОтпусков");
на
ОписаниеДанных.ТипПредмета = Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица");
и все заработало как надо. Такое ощущение, что кто то дорабатывал уже уведомления, но никаких комментов нет. Не могли же ошибиться в типовой конфигурации...
7. frkbvfnjh 809 31.03.22 13:42 Сейчас в теме
(4) Так, посмотрел несколько процедур вида ПолучениеДанныхВидаУведомления<ИмяУведомления>(СтруктураПериода, Знач Отборы, ТаблицаРезультата). Всем передается период через параметр СтруктураПериода и запросы строятся всегда с учетом этого периода. Вот хотелось бы узнать по какому принципу период передается в метод? Что это за период? Параметр Отборы вроде понятен - это отборы которые настроили в форме уведомлений, ТаблицаРезультата - это таблица с предопределенным составом колонок, в которую нужно поместить наш результат и во всех случая и судя по коду там 3 обязательных колонки Предмет, ДатаСобытия, ПараметрыСобытия. Что помещать в предмет, вроде понятно, а вот что дату события я по смыслу не понял, вот в колонку ПараметрыСобытия структурой передаются как раз данные из полей которые описаны в данных шаблона. Хотелось бы еще пояснений по поводу передаваемого периода и даты события. И как можно запустить процесс формирования события так что бы можно было отладить выбранный методы ПолучениеДанныхВидаУведомления<ИмяУведомления>, что бы посмотреть, что туда передается при выполнении регламентного задания? Может тогда я смогу понять как мне правильно запрос построить...
8. frkbvfnjh 809 31.03.22 14:17 Сейчас в теме
(4) Еще в методе ПриЗаполненииСпискаВидовУведомлений я заметил, что не во всех описаниях уведомлений указывается свойство ОписаниеВидаУведомления.ПолучениеДанных, т.е. имя выполняемого метода, как тогда работает формирование уведомлений? Так же не понятно что за ОписаниеВидаУведомления.КатегорияСобытия, что это и за что отвечает? Всего доступно 2: Перечисления.КатегорииВидовУведомлений.ВЫборкаДанных и Перечисления.КатегорииВидовУведомлений.ИзменениеОбъекта.
10. frkbvfnjh 809 05.04.22 13:33 Сейчас в теме
Выяснил, что вызов метода УведомленияСервер.ОбновитьВидыУведомлений() недостаточно - новый вид уведомления создается но не создается шаблон для него. Шаблоны уведомлений подсистемы создаются методом ПриНачальномЗаполненииДанныхПодсистемыУведомлений общего модуля <ИмяПодсистемы>Уведомления, а сам этот метод зарегистрирован как обработчик в методе ЗарегистрироватьОбработчикиОбновления того же модуля:

Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики)Экспорт
	
	Обработчик = Обработчики.Добавить();
	Обработчик.Версия = "3.1.10.10";
	Обработчик.Процедура = "КадровыйУчетУведомления.ПриНачальномЗаполненииДанныхПодсистемыУведомлений";
	Обработчик.РежимВыполнения = "Отложенно";
	Обработчик.НачальноеЗаполнение = Истина;
	Обработчик.Идентификатор = Новый УникальныйИдентификатор("f7c97a46-5c7a-4ecc-83cd-40936467db8d");
	Обработчик.Комментарий = НСтр("ru = 'Начальное заполнение данных системы уведомлений: дни рождения сотрудников.'");
	
	Обработчик = Обработчики.Добавить();
	Обработчик.Версия = "3.1.14.176";
	Обработчик.Процедура = "КадровыйУчетУведомления.ПриНачальномЗаполненииДанныхПодсистемыУведомлений";
	Обработчик.РежимВыполнения = "Отложенно";
	Обработчик.НачальноеЗаполнение = Истина;
	Обработчик.Идентификатор = Новый УникальныйИдентификатор("62b04792-e465-424b-b7d3-c2c3b13aea75");
	Обработчик.Комментарий = НСтр("ru = 'Начальное заполнение данных системы уведомлений.'");
	
КонецПроцедуры
Показать
11. frkbvfnjh 809 05.04.22 13:39 Сейчас в теме
Теперь ищу как вызвать этот метод, видимо нужно запустить процедуру обновления
12. frkbvfnjh 809 06.04.22 06:30 Сейчас в теме
Процедура обновления не помогла - метод ЗарегистрироватьОбработчикиОбновления вызвался, но закрепленный обработчик КадровыйУчетУведомления.ПриНачальномЗаполненииДанныхПодсистемыУведомлений не выполнился, видимо требуются какие то дополнительные условия. В итоге вызвал КадровыйУчетУведомления.ПриНачальномЗаполненииДанныхПодсистемыУведомлений на прямую, может это и не совсем правильно и не универсально, но зато работает. В итоге шаблон для нового уведомления появился.
13. LNick 06.04.22 11:22 Сейчас в теме
Таки я оказался прав, в соседней теме. Данный обработчик - отложенный. Смотрите в ЗарегистрироватьОбработчикиОбновления модуля КадровыйУчетУведомления. Режим выполнения - Отложенно.
Цитата с ИТС:
Отложенно – если обработчик обновления необходимо выполнять в фоне после того, как завершено выполнение монопольных (оперативных) обработчиков, и пользователям уже разрешен вход в программу.

Отложенные обработчики предназначены для обработки той части данных ИБ, которые не препятствуют пользователям начинать свою работу с новой версией программы, не дожидаясь завершения обработки этих данных.

Примеры отложенных обработчиков: обработка больших архивов данных за закрытые/прошлые периоды, неактивных позиций номенклатуры, различных данных, отключенных в данный момент функциональными опциями и т.п.

Взято отсюда
14. frkbvfnjh 809 07.04.22 06:06 Сейчас в теме
Оставьте свое сообщение

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