Всем привет! Кто нибудь работал с подсистемой рассылки уведомлений в КОРП версии ЗУП 3.1?
Требуется сделать новый вид уведомлений со своим шаблоном и реквизитами, но нигде не могу найти информации о том как это устроено. По коду тоже не могу разобраться до конца как оно устроено и что где нужно подправить, уже несколько дней мучаюсь. Может кто подсказать основные моменты как добавить свое уведомление? Или подтолкнуть в нужном направлении... Заранее спасибо!
(2) Здравствуйте. Правильно ли я понял, что для фактического создания нужно будет вызвать метод УведомленияСервер.ОбновитьВидыУведомлений()?
Для каждой подсистемы формируется свой вид уведомления, например: в модуле КадровыйУчетУведомления подсистемы кадрового учета есть метод ПриЗаполненииСпискаВидовУведомлений который описывает структуру уведомления. Туда я добавил свое уведомление, нам например нужно уведомить об окончание срока замещения и самого сотрудника и начальника подразделения. Потом ниже нужно прописать метод вида ИнициализацияВидаУведомления<НазваниеВидаУведомления>. Например возьмем уже имеющийся метод одного из уведомлений
Процедура ИнициализацияВидаУведомленияПервыйРабочийДень(ОписаниеДанных) Экспорт
ОписаниеДанных.ТипПредмета = Новый ОписаниеТипов("ДокументСсылка.ПриемНаРаботу");
УведомленияСервер.ДобавитьПолучателя(ОписаниеДанных, "Предмет", НСтр("ru = 'Сотрудник'"), Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица"));
УведомленияСервер.ДобавитьОтбор(ОписаниеДанных, "Организация", НСтр("ru='Организация'"), Новый ОписаниеТипов("СправочникСсылка.Организации"));
УведомленияСервер.ДобавитьОтбор(ОписаниеДанных, "Подразделение", НСтр("ru='Подразделение'"), Новый ОписаниеТипов("СправочникСсылка.ПодразделенияОрганизаций"));
УведомленияСервер.ДобавитьОтбор(ОписаниеДанных, "Должность", НСтр("ru='Должность'"), Новый ОписаниеТипов("СправочникСсылка.Должности"));
УведомленияСервер.ДобавитьОтбор(ОписаниеДанных, "Пол", НСтр("ru='Пол'"), Новый ОписаниеТипов("ПеречислениеСсылка.ПолФизическогоЛица"));
КонецПроцедуры
Показать
Я, например не могу понять первые 2 строки метода - что такое ТипПредмета, что туда нужно присваивать, обязательно ли какой-то документ. И почему во второй параметр метода ДобавитьПолучателя(), который называется "ИмяПолучателя", передается слово "Предмет"? Что это за слово, почему "Предмет"?
Так же, как я понял, в этот модуль нужно добавить метод вида ПолучениеДанныхВидаУведомления<ИмяУведомления>, но по коду имеющихся методов получения данных для уведомления я не могу понять принцип, типа нужно вернуть какую то таблицу результата в выходной параметр, но я не понимаю что из себя должна представлять эта таблица, что в ней должно быть, что бы правильно создалось уведомление на нужную дату.
Так же я не нашел, где создаётся шаблон для нового вида уведомлений и как добавлять поля, которые можно было бы добавить в шаблон, где этот кусок кода находится, по какому принципу формируется состав допустимых полей при настройке шаблона?
Правильно ли я понял, что для фактического создания нужно будет вызвать метод УведомленияСервер.ОбновитьВидыУведомлений()?
Да.
Тип предмета и предмет - это то, кому уйдет уведомление, в форме новой рассылки отражается в блоке "Кого уведомлять". В общем случае там физическое лицо. Почему ТипПредмета в конкретном данном уведомлении именно ПриемНаРаботу - не знаю. Я в своем новом уведомлении делал СправочникСсылка.ФизическиеЛица.
Дальше поясню на примере общего модуля ОбучениеРазвитие, т.к. я именно его дорабатывал.
Предмет - не обязательно именно такое слово, главное, чтобы в процедуре вида ПолучениеДанных<ИмяУведомления> в таблице была колонка, совпадающая с данным словом. Т.е. если тот, кому вы хотите отправить уведомление, в этой таблице будет в колонке "ФизическоеЛицо", то и в качестве параметра вместо слова "Предмет" вы передадите "ФизическоеЛицо".
Что касается возвращаемой таблицы - колонки таблицы должны совпадать с тем, что вы описываете в ПриПодготовкеШаблонаСообщенияПоУведомлению(). Т.е. если в этой процедуре в шаблоне вы описали поля должность, подразделение, то и в получении данных таблица, которую вернет метод, должна содержать эти колонки. В дальнейшем эти колонки можно использовать в шаблоне в пользовательском режиме.
(4) Аааааа, ну вот все стало на много понятнее, спасибо большое. Сейчас попробую доделать уведомлении на основании полученных знаний. Буду писать ещё, не прощаюсь...
Почему ТипПредмета в конкретном данном уведомлении именно ПриемНаРаботу - не знаю. Я в своем новом уведомлении делал СправочникСсылка.ФизическиеЛица.
Да, действительно интересно, сейчас столкнулись с тем, что в форме уведомления "Отпуск по графику", не получается добавить дополнительных получателей. В процедуре инициализации заменил
ОписаниеДанных.ТипПредмета = Новый ОписаниеТипов("ДокументСсылка.ГрафикОтпусков");
на
ОписаниеДанных.ТипПредмета = Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица");
и все заработало как надо. Такое ощущение, что кто то дорабатывал уже уведомления, но никаких комментов нет. Не могли же ошибиться в типовой конфигурации...
(4) Так, посмотрел несколько процедур вида ПолучениеДанныхВидаУведомления<ИмяУведомления>(СтруктураПериода, Знач Отборы, ТаблицаРезультата). Всем передается период через параметр СтруктураПериода и запросы строятся всегда с учетом этого периода. Вот хотелось бы узнать по какому принципу период передается в метод? Что это за период? Параметр Отборы вроде понятен - это отборы которые настроили в форме уведомлений, ТаблицаРезультата - это таблица с предопределенным составом колонок, в которую нужно поместить наш результат и во всех случая и судя по коду там 3 обязательных колонки Предмет, ДатаСобытия, ПараметрыСобытия. Что помещать в предмет, вроде понятно, а вот что дату события я по смыслу не понял, вот в колонку ПараметрыСобытия структурой передаются как раз данные из полей которые описаны в данных шаблона. Хотелось бы еще пояснений по поводу передаваемого периода и даты события. И как можно запустить процесс формирования события так что бы можно было отладить выбранный методы ПолучениеДанныхВидаУведомления<ИмяУведомления>, что бы посмотреть, что туда передается при выполнении регламентного задания? Может тогда я смогу понять как мне правильно запрос построить...
(4) Еще в методе ПриЗаполненииСпискаВидовУведомлений я заметил, что не во всех описаниях уведомлений указывается свойство ОписаниеВидаУведомления.ПолучениеДанных, т.е. имя выполняемого метода, как тогда работает формирование уведомлений? Так же не понятно что за ОписаниеВидаУведомления.КатегорияСобытия, что это и за что отвечает? Всего доступно 2: Перечисления.КатегорииВидовУведомлений.ВЫборкаДанных и Перечисления.КатегорииВидовУведомлений.ИзменениеОбъекта.
Выяснил, что вызов метода УведомленияСервер.ОбновитьВидыУведомлений() недостаточно - новый вид уведомления создается но не создается шаблон для него. Шаблоны уведомлений подсистемы создаются методом ПриНачальномЗаполненииДанныхПодсистемыУведомлений общего модуля <ИмяПодсистемы>Уведомления, а сам этот метод зарегистрирован как обработчик в методе ЗарегистрироватьОбработчикиОбновления того же модуля:
Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики)Экспорт
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.1.10.10";
Обработчик.Процедура = "КадровыйУчетУведомления.ПриНачальномЗаполненииДанныхПодсистемыУведомлений";
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.НачальноеЗаполнение = Истина;
Обработчик.Идентификатор = Новый УникальныйИдентификатор("f7c97a46-5c7a-4ecc-83cd-40936467db8d");
Обработчик.Комментарий = НСтр("ru = 'Начальное заполнение данных системы уведомлений: дни рождения сотрудников.'");
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.1.14.176";
Обработчик.Процедура = "КадровыйУчетУведомления.ПриНачальномЗаполненииДанныхПодсистемыУведомлений";
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.НачальноеЗаполнение = Истина;
Обработчик.Идентификатор = Новый УникальныйИдентификатор("62b04792-e465-424b-b7d3-c2c3b13aea75");
Обработчик.Комментарий = НСтр("ru = 'Начальное заполнение данных системы уведомлений.'");
КонецПроцедуры
Процедура обновления не помогла - метод ЗарегистрироватьОбработчикиОбновления вызвался, но закрепленный обработчик КадровыйУчетУведомления.ПриНачальномЗаполненииДанныхПодсистемыУведомлений не выполнился, видимо требуются какие то дополнительные условия. В итоге вызвал КадровыйУчетУведомления.ПриНачальномЗаполненииДанныхПодсистемыУведомлений на прямую, может это и не совсем правильно и не универсально, но зато работает. В итоге шаблон для нового уведомления появился.
Таки я оказался прав, в соседней теме. Данный обработчик - отложенный. Смотрите в ЗарегистрироватьОбработчикиОбновления модуля КадровыйУчетУведомления. Режим выполнения - Отложенно.
Цитата с ИТС:
Отложенно – если обработчик обновления необходимо выполнять в фоне после того, как завершено выполнение монопольных (оперативных) обработчиков, и пользователям уже разрешен вход в программу.
Отложенные обработчики предназначены для обработки той части данных ИБ, которые не препятствуют пользователям начинать свою работу с новой версией программы, не дожидаясь завершения обработки этих данных.
Примеры отложенных обработчиков: обработка больших архивов данных за закрытые/прошлые периоды, неактивных позиций номенклатуры, различных данных, отключенных в данный момент функциональными опциями и т.п.