Документооборот КОРП, ПРОФ и ДГУ
27.01.2016
Уведомления по объектам и событиям
Общая информация
Чтобы держать пользователей в курсе изменения важных данных и наступления важных событий в "1С:Документообороте" предусмотрены уведомления. Существует два типа уведомлений:
- уведомления о событиях,
- уведомления по объектам.
Уведомления о событиях сообщают пользователю о важных для него событиях, при этом программа самостоятельно проверяет важность события для пользователя. Примером такого уведомления служит уведомление о новых задачах: если пользователь подписан на такое уведомление, то он будет получать уведомления обо всех задачах, которые адресованы ему, роли, исполнителем которой он является, или пользователю, который делегировал ему права работы с задачами.
Уведомления по объектам сообщают пользователю о событиях по конкретному объекту, на который он подписался. Например, уведомление о появлении новых файлах в конкретной папке.
Метаданные
Используемые метаданные отнесены к подсистеме Уведомления. Рассмотрим эти метаданные подробнее.
Общие модули
В общих модулях РаботаСУведомлениями и РаботаСУведомлениямиПереопределяемый реализована основная логика работы подсистемы уведомлений. Подробнее данные модули описаны ниже.
Регламентные задания
- Особое внимание следует уделить регламентному заданию ОбработкаПроизошедшихБизнесСобытий, хотя оно и не относится к подсистеме Уведомлений. Это регламентное задание играет ключевую роль в рассылке уведомлений. Именно в нем происходит обработка бизнес-событий, выполняется проверка прав доступа и формируется очередь уведомлений. Помимо формирования очереди уведомлений, регзадание используется для автоматического запуска бизнес-процессов и пользовательских обработчиков событий. В связи с этим рекомендуется запускать это задание как можно чаще - каждую минуту.
- Регламентное задание КонтрольОкончанияСрокаДействия отвечает за контроль документов, у которых подходит к концу или истек срок действия. Формирует очередь уведомлений, выполняет проверку прав доступа. Данное задание рекомендуется запускать один раз в день в начале рабочего дня.
- Регламентное задание КонтрольСрокаЗадач отвечает за контроль просроченных задач и задач с истекающим сроком исполнения. Формирует очередь уведомлений, выполняет проверку прав доступа. Задание рекомендуется запускать один раз в день в начале рабочего дня. Если требуется реализовать оперативное уведомление о задачах, просроченных в течение дня, - следует настроить более частый запуск данного задания и, при необходимости, более частый запуск задания УведомлениеПользователейОСобытиях.
- Регламентное задание КонтрольСрокаКонтроля отвечает за проверку контрольных карточек, просроченных и с истекающем сроком. Формирует очередь уведомлений, выполняет проверку прав доступа. Данное задание рекомендуется запускать один раз в день в начале рабочего дня.
- Регламентное задание УведомлениеПользователейОСобытиях отвечает за рассылку сообщений из очереди уведомлений. Рекомендуется запускать не чаще, чем регламентное задание ОбработкаПроизошедшихБизнесСобытий. В данном задании проверка прав доступа не выполняется, выполняется только рассылка. Рекомендуемое расписание - каждые 10 минут.
Функциональные опции
- Функциональная опция ИспользоватьУведомленияПользователя используется для включения возможности настройки уведомлений, персональной настройки уведомлений, подписки на уведомления по объектам, обработки событий в регламентных заданиях, контроля сроков в регламентных заданиях, рассылки уведомлений из очереди уведомлений.
Общие формы
- Общая форма НастройкаУведомлений предназначена для администратора. В ней устанавливаются настройки уведомлений, используемые по умолчанию - если пользователь никогда не настраивал себе уведомления, то он будет получать именно уведомления, указанные в данной форме. Отсюда можно управлять возможностью изменения настроек уведомлений пользователя под себя - за это отвечает настройка Разрешить пользователями изменять настройки уведомлений. Команда Установить настройки по умолчанию всем пользователям позволяет удалить все персональные настройки уведомлений пользователей, заменив настройками по умолчанию. В данной форме доступна настройка адреса публикации на веб-сервере, который используется при формировании ссылок на уведомления. Из данной формы можно выполнять настройку адресов уведомлений для всех пользователей, при этом пользователи у которых не настроены адреса уведомления будут выделены особым образом. Данную форму можно открыть так: Настройка и администрирование - Настройка программы - Общие настройки - гиперссылка Настроить возле флажка Использовать уведомления.
- Общая форма ПодпискиПользователя предназначена для пользователей. В ней устанавливаются персональные настройки уведомлений по событиям, можно просмотреть все подписки на уведомления по объектам, доступно указание адресов для уведомлений. Если администратор запретил изменять персональные настройки уведомлений, то для пользователи не смогут отказаться от уведомлений, установленных по умолчанию. При этом сохраняется возможность подписаться или отказаться от уведомлений, для которых не установлена подписка по умолчанию. Данная форма доступна через раздел Настройка - Персональные настройки - гиперссылка Уведомления.
- Общая форма ПодпискаНаУведомленияПоОбъекту предназначена для пользователей. В ней устанавливаются подписки на уведомления по конкретному объекту. Подписка по объекту может принимать одно из трёх значений - Да, Нет, Авто. По умолчанию установлено значение Авто или Нет - в зависимости от того, возможна ли подписка на уведомления по данному событию. Данную форму можно открыть из карточки объекта, по которому возможно подписка. Например, из карточки процесса Еще – Подписаться.
- Да означает, что пользователь хочет получать уведомление по объекту, например, получать уведомления о ходе выполнения процесса, автором которого он не является.
- Нет означает что пользователь не хочет получать уведомление по объекту, например, не получать уведомления о ходе процесса, автором которого он является.
- Авто означает, что пользователь хочет получать уведомление в соответствии с настройками уведомлений о событиях. Например, получать уведомления о ходе процесса, автором которого он является.
Константы
- Константа АдресПубликацииНаВебСервере отвечает за формирование ссылок при рассылке уведомлений по почте. С помощью этойконстанты можно настроить рассылку уведомлений на внешние почтовые клиенты с возможностью перехода в веб-клиент по ссылке. Данная константа доступна в общей форме НастройкаУведомлений.
- Константа ИспользоватьУведомления отвечает за использование подсистемы уведомлений. К этой константе привязана функциональная опция ИспользоватьУведомленияПользователя. Данная константа доступна в разделе Настройка и администрирование - Настройка программы - Общие настройки.
- Константа РазрешитьИзменятьНастройкиУведомлений отвечает за доступность изменения настроек уведомлений по умолчанию для пользователей. Данная константа доступна в общей форме НастройкаУведомлений.
Перечисления
Перечисление НастройкиУведомлений содержит в себе настройки уведомлений, доступные для настройки:
- ВыполнениеЗадачПоПочте отвечает за использование пользователями возможности выполнения задач по почте.
- Подписка отвечает за подписку на определенное событие (например, подписка на уведомление о просроченных задачах).
- СрокУведомления отвечает за срок, за который следует оповещать о приближении события (например, оповещать о подходе сроки задачи за 3 дня).
- УведомленияПрограммы отвечает за использование уведомлений программы.
- ЧастотаУведомления отвечает за частоту, с которой следует оповещать о наступившем событии (например, оповещать о просроченной задаче каждый день).
Перечисление СобытияУведомлений содержит в себе события, о которых можно рассылать уведомления, но которые при этом невозможно классифицировать как бизнес-события (например, факт, что задача просрочена, нельзя отнести к бизнес-событиям).
Перечисление СпособыУведомления содержит в себе различные способы уведомления пользователей. В текущей реализации используется только один способ уведомления - по почте.
Регистры сведений
- Регистры сведений НастройкиУведомлений, НастройкиУведомленияОЗадачах, НастройкиУведомленияОКонтроле, НастройкиУведомленияОкончанияСрокаДействия предназначены для хранения настроек уведомлений, относящихся к персональным настройкам пользователей.
- Регистр сведений НастройкиУведомленийПоУмолчанию предназначен для хранения настроек уведомлений по умолчанию.
- Регистр сведений ПодпискиНаУведомления отвечает за информацию о подписках на уведомление пользователей. При обработке произошедших бизнес-событий данные об активных подписках берутся из этого регистра.
- Регистр сведений СпособыУведомленияПользователей отвечает за адреса рассылки пользователей. При рассылке уведомлений адреса для уведомлений берутся из контактных данных пользователя и из этого регистра.
- Регистр сведений ОбработанныеУведомления содержит информацию о дате обработки объекта по конкретному виду события. Регистр предназначен для управления частотой рассылки уведомлений. Именно благодаря этому регистру уведомление о просроченных задачах рассылается не каждый раз при запуске регламентного задания, а с определенной частотой - всего один раз, каждый день или реже. Заполняется и используется в регламентных заданиях КонтрольОкончанияСрокаДействия, КонтрольСрокаЗадач, КонтрольСрокаКонтроля.
- Регистр сведений ОчередьУведомлений содержит информацию о конкретных событиях, о которых следует выполнить рассылку уведомлений. Заполняется в регламентном задании ОбработкаПроизошедшихБизнесСобытий, КонтрольОкончанияСрокаДействия, КонтрольСрокаЗадач, КонтрольСрокаКонтроля. Используется в регламентном задании УведомлениеПользователейОСобытиях.
Внутреннее устройство
Права доступа, роли, делегаты
Уведомления рассылаются с учетом прав доступа. Если у пользователя нет прав на чтение объекта, с которым произошло событие, он не получит уведомление. Проверка прав доступа осуществляется при формировании очереди уведомлений в регламентных заданиях ОбработкаПроизошедшихБизнесСобытий, КонтрольОкончанияСрокаДействия, КонтрольСрокаЗадач, КонтрольСрокаКонтроля. В регистр сведений ОчередьУведомлений попадают только те объекты, по которым уже выполнена проверка прав доступа. Дополнительная проверка прав доступа перед рассылкой не требуется.
Для исполнителей задач используется ролевое уведомление. Если исполнителем задачи является роль, то уведомления получат все исполнители этой роли. Для каждого исполнителя роли проверка прав выполняется независимо. В регистр сведений ОчередьУведомлений попадают записи для рассылки уже по конкретным исполнителям роли, а не по роли в целом.
Делегаты получают уведомления по событиям тех пользователей, права которых они получили. Для пользователя, от которого делегированы права, и для каждого делегата проверка прав выполняется независимо. В регистр сведений ОчередьУведомлений попадают записи для рассылки уже по конкретным пользователям, включая делегатов.
Настройка уведомлений
В модуле РаботаСУведомлениями за настройку уведомлений отвечают следующие процедуры и функции:
- ПолучитьСписокВидовБизнесСобытий определяет список подписок, доступных по объекту в форме ПодпискаНаУведомленияПоОбъекту.
- ПолучитьПредставлениеБизнесСобытия определяет представление событий в форме ПодпискаНаУведомленияПоОбъекту.
- ПолучитьВозможностьПодпискиНаСобытие определяет доступно ли возможность подписка на событие, т.е. делает доступным вариант подписки Авто в форме ПолучитьВозможностьПодпискиНаСобытие.
В модуле РаботаСУведомлениямиПереопределяемый за настройку уведомление отвечают следующие процедуры и функции:
- ПолучитьДоступныеУведомления определяет доступные для подписки уведомления по событию.
- ПолучитьНастройкиУведомленийПользователя определяет получение настроек уведомлений для пользователя.
- ЗаписатьНастройкуУведомленияПользователя определяет способ записи настроек пользователя в базу данных.
- ПриИзмененииНастройки определяет особое поведение при изменении настройки пользователя. Например, отмечает что по документам с истекшим сроком действия пользователь уже получал уведомления.
- ПолучитьСтандартноеЗначениеНастройки определяет стандартное значение настройки в программе.
- ВосстановитьНастройкиПоУмолчанию выполняет очистку всех пользовательских настроек уведомлений.
- ОпределитьЗначениеНастройки определяет значение настройки уведомлений с учетом настроек по умолчанию.
- СкорректироватьПерсональныеНастройки выполняет корректировку персональных настроек при изменении настроек по умолчанию.
Обработка бизнес-событий
Обработка бизнес-событий начинается в модуле РаботаСУведомлениями в процедуре ОбработатьБизнесСобытие. При обработке бизнес-события из него обрабатываются следующие важные поля:
- ВидСобытия - вид бизнес-события.
- Источник - объект, для которого произошло бизнес-событие.
- Автор - пользователь, который инициировал бизнес-событие.
- КонтекстСобытия - произвольные данные, связанные с событием. Например, для события перенаправления задачи данный реквизит содержит данные по предыдущему и новому исполнителю.
Основная логика формирования очереди прописана в процедурах, вызываемых из процедуры ДобавитьУведомлениеПоОбъекту. Пример такой процедуры - ДобавитьУведомленияПоБизнесПроцессу. В ней прописана особая логика обработки бизнес-событий для процессов различных событий. Например, в ветке события ВыполнениеЗадачи прописано логика работы подписки на событие Ход выполнения процесса:
- Уведомлять автора процесса, если это не он выполнил задачу.
- Уведомлять контролера процесса, если это не он выполнил задачу.
- Передавать событие для дальнейшей обработки в ведущие и главные задачи.
- Уведомлять подписчиков по объекту.
Доступны следующие служебные процедуры, которые используются для формирования очереди уведомлений:
- ДобавитьУведомленияПодписчиковПоСобытию - помещает в очередь уведомление для подписчиков по событию. С помощью параметра можно регулировать настройку: уведомлять делегатов или нет.
- ДобавитьУведомленияПодписчиковПоОбъекту - помещает в очередь уведомление для подписчиков по объекту.
- ДобавитьУведомленияИсполнителейЗадачи - помещает в очередь уведомления по событию и по объекту для исполнителей задачи. При этом если исполнителем является роль, формирует уведомления для всех исполнителей роли (без учета делегатов исполнителей роли).
- ДобавитьУведомлениеПоОбъекту - обрабатывает формирование очереди для того же объекта уведомления, но с другим объектом подписки (например, для события создания документа вызывается с объектом подписки папка документа).
- ДобавитьУведомление - выполняет непосредственное помещение в очередь уведомлений для конкретного пользователя. При этом выполняет проверки подписки на уведомление данного пользователь и проверка прав доступа.
- ПолучитьНастройкуУведомления - в данной функции прописана логика получения настроек уведомлений. Например, не уведомлять помеченных на удаление и недействительных пользователей, учет подписок на уведомления по умолчанию, различные особые случаи, завязанные на реквизитах объектов (не посылать уведомление о новом сообщении автору сообщения).
Контроль сроков
Контроль сроков для уведомлений выполняется в модуле РаботаСУведомлениями в процедурах КонтрольСрокаЗадача, КонтрольОкончанияСрокаДействия, КонтрольСрокаКонтроля. Данные процедуры состоят из двух этапов - из этапа контроля срока и этапа контроля просроченных.
В первую очередь формируется состав данных с подписчиками, по которым могут быть уведомления. Выбираются данные, на которые оформлена подписка (с учетом делегирования и ролевой адресации) и которые подходят с точки зрения прикладной логики (например, активные задачи), Это формирование данных вынесено в следующие функции:
- ВыбратьАктивныеЗадачиСПодписчиками.
- ВыбратьПросроченныеЗадачиСПодписчиками.
- ВыбратьАктивныеКонтролиСПодписчиками.
- ВыбратьПросроченныйКонтрольСПодписчиками.
- ВыбратьАктивныеЗадачиСПодписчиками.
- ВыбратьПросроченныйКонтрольСПодписчиками.
После формирования данных, по которым могут отправляться уведомления, выполняется формирование подписчиков (исходя из сформированных ранее данных) и чтение настроек подписчиков.
После этого начинается обработка каждой записи из сформированных ранее данных: проверяются настройки подписчиков, удовлетворяет ли запись конкретной настройке конкретного подписчика; выполняется проверка прав. Если проверка выполнена успешно, формируется запись в очереди уведомлений, а данная запись отмечается как обработанная. Отметка записи как обработанной необходима для контроля частоты рассылки уведомлений в соответствии с настройками - уведомления рассылаются не каждый раз при запуске задания, а только когда подойдет срок в соответствии с указанной частотой и датой последней обработки.
Рассылка уведомлений
Рассылка уведомлений выполняется в модуле РаботаСУведомлениями в процедуре ОбработатьУведомленияВОчередиУведомлений. В рамках данной процедуры выполняется отправка ранее сформированных уведомлений из очереди. Для каждого уведомления из очереди выполняется три попытки отправки. При успешной отправке запись удаляется из очереди. При неуспешной отправке запись остается в регистре. После трех неудачных попыток запись больше не обрабатывается и остается в очереди уведомлений. В журнале регистрации записи о рассылке уведомлений сохраняются по событию Уведомление о новых событиях.
Перед рассылкой выполняется попытка группировки уведомлений по получателю с помощью процедуры СформироватьУведомленияПоВидуБизнесСобытия. Например, уведомление о 10 новых задачах будет сгруппировано в одно письмо именно с помощью данной процедуры.
- Изменить стандартный порядок группировки можно с помощью функции СформироватьУведомленияПоВидуБизнесСобытияПереопределяемый общего модуля РаботаСУведомлениямиПереопределяемый.
- Состав видов событий, по которым происходит группировка, определяется в функции ВидыСобытийДляГруппировки. Изменить его можно в процедуре ВидыСобытийДляГруппировкиПереопределяемый общего модуля РаботаСУведомлениямиПереопределяемый.
- Тема письма будет сформирована в функции СформироватьТемуУведомленияПоОбъектамУведомления. Изменить её можно с помощью функции СформироватьТемуУведомленияПоОбъектамУведомленияПереопределяемый общего модуля РаботаСУведомлениямиПереопределяемый.
- Текст письма будет сформирован в функции СформироватьТекстУведомленияПоОбъектамУведомления. Изменить его можно с помощью функции СформироватьТекстУведомленияПоОбъектамУведомленияПереопределяемый общего модуля РаботаСУведомлениямиПереопределяемый.
- Файлы письма будут сформированы в функции СформироватьФайлыУведомленияПоОбъектамУведомления. Изменить их можно с помощью функции СформироватьФайлыУведомленияПоОбъектамУведомленияПереопределяемый общего модуля РаботаСУведомлениямиПереопределяемый.
При включенной настройке выполнения задач по почте уведомление о новых задачах не группируется. Темы, тексты и файлы писем при этом формируются в модуле ВыполнениеЗадачПоПочтеСервер в функциях СформироватьТемуУведомленияПоЗадачеСВозможностьюВыполненияПоПочте, СформироватьТекстУведомленияПоЗадачеСВозможностьюВыполненияПоПочте и СформироватьФайлыУведомленияПоЗадачеСВозможностьюВыполненияПоПочте.
По несгруппированным уведомлениям будет выполнено формирование тем и текстов в СформироватьУведомленияПоСобытиям. Например, при выполнении задач по почте уведомление о новой задаче будет отправлено отдельным письмом с помощью данной процедуры.
- Изменить стандартный порядок формирования уведомлений без группировки можно с помощью функции СформироватьУведомленияПоСобытиямПереопределяемый общего модуля РаботаСУведомлениямиПереопределяемый.
- Тема письма будет сформирована в функции СформироватьТемуУведомленияПоСобытию. Изменит её можно с помощью функции СформироватьТемуУведомленияПоСобытиюПереопределяемый общего модуля РаботаСУведомлениямиПереопределяемый.
- Текст письма будет сформирован в функции СформироватьТекстУведомленияПоСобытию. Изменить его можно с помощью функции СформироватьТекстУведомленияПоСобытиюПереопределяемый общего модуля РаботаСУведомлениямиПереопределяемый.
- Файлы письма будут сформированы в функции СформироватьФайлыУведомленияПоСобытию. Изменить их можно с помощью функции СформироватьФайлыУведомленияПоСобытиюПереопределяемый общего модуля РаботаСУведомлениямиПереопределяемый.
В целом формирование текстов уведомлений для всех видов событий одинаково - формируется описание по всем объектам уведомлений. Формирование описания происходит в функциях, вызываемых из СформироватьПредставлениеОбъекта. Для изменения порядка формирования представления для объекта следует внести изменения в функцию СформироватьПредставлениеОбъектаПереопределяемый общего модуля РаботаСУведомлениямиПереопределяемый.
Навигационные ссылки, используемые в уведомлениях, формируются особым образом. Формирование ссылок происходит в функции ПолучитьНавигационнуюСсылкуУведомления - ссылка формируется с учетом адреса публикации на веб-сервере.
Непосредственная рассылка уведомлений производится в ОтправитьУведомлениеПоПочте. Адреса для рассылки формируются из контактной информации пользователя и дополнительных адресов для рассылки уведомлений, указанных в персональных настройках. Данная логика прописана в функции ПолучитьДанныеСпособаУведомления. Рассылка может выполняться по внешней и внутренней маршрутизации. При этом исходящие письма в базе не сохраняются.
Рекомендации по поддержке
Как настроить уведомления в первый раз
Настройка уведомлений выполняется следующим образом:
- Перейти в раздел Настройка и администрирование - Настройка программы - Общие настройки и установить флажки Использовать бизнес-события и Использовать уведомления.
- Перейти по гиперссылке Настроить возле флажка Использовать уведомления.
- На закладке Уведомления выбрать состав уведомлений, которые будут рассылаться всем пользователям по умолчанию.
- Если необходимо использовать открытие веб-клиента по ссылкам из уведомлений - указать адрес публикации на веб-сервере.
- На закладке Частота и сроки уведомлений настроить частоту и срок некоторых уведомлений.
- На закладке Адреса для уведомлений проверить, что нет пользователей без указания адреса. Если такие пользователи есть, для них следует указать адрес в контактной информации.
- На закладке Дополнительные настройки определить необходимость использования выполнения задач по почте.
- Перейти в раздел Настройка и администрирование - Учетные записи и выполнить настройку предопределенной системной учетной записи. Учетная запись должна быть настроена для "легкой" почты. После настройки следует проверить работоспособность учетной записи с помощью команды Проверить учетную запись.
- Перейти Настройка и администрирование - Поддержка и обслуживание - Регламентные и фоновые задания. Следует включить и настроить расписание для регламентных заданий Обработка произошедших бизнес-событий, Контроль приближения окончания срока действия, Контроль приближения сроков задач, Контроль приближения сроков контроля, Уведомление пользователей о произошедших событиях.
Что делать, если не приходят уведомления
Если не приходят уведомления, то для начала следует убедиться, что настройка уведомлений в первый раз выполнена. Если настройка выполнена верно, то уведомления должны приходить. Далее следует проверить журнал регистрации по событию Уведомление о новых событиях. При наличии ошибок информация, предоставленная в журнале регистрации, должна помочь избавиться от источника проблемы (например, невозможно подключиться к почтовому серверу).
Если первая настройка выполнена корректно и в журнале регистрации нет ошибок, то следует выявить, на каком именно этапе возникает проблема:
- Создаём задачу для пользователя. Проверяем, что в регистре сведений Произошедшие бизнес-события были созданы соответствующие записи о создании задачи.
- Выполняем регламентное задание Обработка произошедших бизнес-событий. Проверяем, что в регистре сведений Произошедшие бизнес-события запись была отмечена как обработанная. Проверяем, что в регистре сведений Очередь уведомлений появилась соответствующая запись для уведомления пользователя. Если записи не появились - ошибка возникает на этапе обработки бизнес-событий. Следует проверить активность подписки пользователей, наличие у пользователя прав доступа, является ли он исполнителем роли или настроено ли корректно делегирование.
- Выполняем регламентное задание Уведомление пользователей о произошедших событиях. Проверяем, что в регистре сведений Очередь уведомлений соответствующая запись пропала. Проверяем, что в журнале регистрации появилась запись вида Уведомления успешно отправлены на адрес ***. Проверяем, что пришло письмо с уведомлением на указанную почту (возможно, только по внутренней маршрутизации, если заведена соответствующая учетная запись).
- Если запись не пропала из регистра Очередь уведомлений, а число попыток увеличилось - следует проверить журнал регистрации, там будет ошибка по событию Уведомление о новых событиях.
- Если же запись пропала, но письмо пришло - следует проверить работу почты, корректно ли она отправляется и принимается.
Что делать, если приходят уведомления о просроченных задачах, хотя задача уже выполнена
Скорее всего, где-то развернута копия базы, которая рассылает уведомления. Это либо серверная копия базы, на которой не включена блокировка регламентных заданий, либо файловая база. Для исправления ошибки следует либо выявить данную копию базу и заблокировать работу регламентных заданий, либо сменить в рабочей базе пароль на системную учетную запись, с которой выполняется рассылка уведомлений.
Рекомендации по доработке
Как изменить текст уведомления
Изменить тексты уведомлений можно с помощью доработки конфигурации, внося изменения в общий модуль РаботаСУведомлениямиПереопределяемый.
В первую очередь необходимо определиться, что нужно изменить:
- Представление объекта в уведомлении;
- Представление объекта в уведомлении, связанное с событием уведомления;
- Текст задач, поступающих для выполнения на почту.
Пример
Рассмотрим второй вариант (доработку представления объекта в уведомлении, связанное с событием уведомления) на примере уведомления о новой задаче. Считаем, что исполнение задач по почте не используется.
1. Откажемся от группировки уведомлений о новых задачах. Пусть по каждой задаче приходит отдельное письмо.
Для этого необходимо внести изменения в процедуру ВидыСобытийДляГруппировкиПереопределяемый общего модуля РаботаСУведомлениямиПереопределяемый , удалив из стандартного состава видов событий для группировки, группировка по созданию задачи.
Копировать в буфер обмена
Процедура ВидыСобытийДляГруппировкиПереопределяемый(ВидыСобытий, ПолучательУведомления)
Индекс = ВидыСобытий.Найти(Справочники.ВидыБизнесСобытий.СозданиеЗадачи);
Если Индекс <> Неопределено Тогда
ВидыСобытий.Удалить(Индекс);
КонецЕсли;
КонецПроцедуры
2. Изменим тему писем с уведомлениями.
Для этого необходимо внести изменения в функцию СформироватьТемуУведомленияПоСобытиюПереопределяемый общего модуля РаботаСУведомлениямиПереопределяемый – для создания новой задачи будем формировать тему уведомления. При этом для остальных уведомлений важно оставить результат работы функции в значении пустой строки, чтобы обозначить необходимость использования стандартного формирования темы письма.
Копировать в буфер обмена
Функция СформироватьТемуУведомленияПоСобытиюПереопределяемый(
ОбъектПодписки,
ВидСобытия,
ОбъектУведомления,
ПолучательУведомления,
ДополнительноеОписание)
ТемаУведомления = "Тема";
Если ВидСобытия = Справочники.ВидыБизнесСобытий.СозданиеЗадачи Тогда
НаименованиеЗадачи = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектУведомления, "Наименование");
ТемаУведомления = СтрШаблон(НСтр("ru = 'Вам поступила задача ""%1""'"), НаименованиеЗадачи);
КонецЕсли;
Возврат ТемаУведомления;
КонецФункции
3. Изменим текст писем с уведомлениям.
Для этого необходимо внести изменения в функцию СформироватьТекстУведомленияПоСобытиюПереопределяемый общего модуля РаботаСУведомлениямиПереопределяемый – для создания новой задачи будем формировать текст уведомления. При этом для остальных уведомлений важно оставить результат работы функции в значении пустой строки, чтобы обозначить необходимость использования стандартного формирования текста письма.
Копировать в буфер обмена Функция
СформироватьТекстУведомленияПоСобытиюПереопределяемый(
ОбъектПодписки,
ВидСобытия,
ОбъектУведомления,
ПолучательУведомления,
ДополнительноеОписание)
ТекстУведомления = "";
Если ВидСобытия = Справочники.ВидыБизнесСобытий.СозданиеЗадачи Тогда
РеквизитыЗадачи = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОбъектУведомления, "СрокИсполнения, Наименование");
НеУказанПредставление = НСтр("ru = 'Не указан'");
ФорматнаяСтрока = СтрШаблон("ДФ='dd.MM.yyyy HH:mm'; ДП='%1'", НеУказанПредставление);
ПредставлениеСрока = Формат(РеквизитыЗадачи.СрокИсполнения, ФорматнаяСтрока);
ТекстУведомления = СтрШаблон(НСтр("ru = 'Уважаемый (ая) %1!
|
|Вам поступила задача "%2".
|Крайний срок исполнения задачи: %3.
|Вы можете перейти к задаче, нажав на ссылку: <a href="/db/content/metod8dev/src/developers/doc8dev/%254">Перейти к выполнению задачи</a> |
|С уважением,
|Сервис уведомлений 1С:Документооборота"),
ПолучательУведомления,
РеквизитыЗадачи.Наименование,
ПредставлениеСрока,
РаботаСУведомлениями.ПолучитьНавигационнуюСсылкуУведомления(
ОбъектУведомления));
КонецЕсли;
Возврат ТекстУведомления;
КонецФункции
В результате пользователь будет получать уведомление о новых задачах следующего вида:
Как изменить логику формирования очереди уведомлений
Для изменения логики формирования очереди уведомлений необходима доработка конфигурации.
Рассмотрим пример изменения логики работы для папки файлов. В первую очередь необходимо определить, для какого объекта необходимо внести изменения. Допустим, мы хотим, чтобы при подписке на папку файлов уведомления приходили не только при добавлении в данную папку, но и при добавлении во все вложенные папки.
Основная логика добавления уведомлений прописана в модуле РаботаСУведомлениями в процедуре ДобавитьУведомлениеПоОбъекту. Находим ветку для нужного объекта - в нашем случае это ДобавитьУведомленияПоПапкеФайлов. Чтобы обработать произошедшие событие и для подписок на родительскую папку, необходимо сделать вызов ДобавитьУведомлениеПоОбъекту, передав в него папку родителя.
Чтобы логика работы поменялась только для одного вида события, создадим ветку, соответствующую данному виду бизнес-события. Старый код вынесем в отдельную ветку, чтобы сохранить прежнее поведение для всех остальных бизнес-событий.
Копировать в буфер обмена Процедура ДобавитьУведомленияПоПапкеФайлов(ПроизошедшееСобытие, Папка, ВидСобытия, ОбъектУведомления)
Если ВидСобытия = Справочники.ВидыБизнесСобытий.СозданиеФайла Тогда
Если ЗначениеЗаполнено(Папка.Родитель) Тогда
ДобавитьУведомлениеПоОбъекту(
ПроизошедшееСобытие,
Папка.Родитель,
ВидСобытия,
ОбъектУведомления);
КонецЕсли;
ДобавитьУведомленияПодписчиковПоОбъекту(Папка, ВидСобытия, ОбъектУведомления);
Иначе
ДобавитьУведомленияПодписчиковПоОбъекту(Папка, ВидСобытия, ОбъектУведомления);
КонецЕсли;
КонецПроцедуры
Другие рекомендации
При добавлении нового объекта, по которому возможна подписка (например, вид документа, если необходимо добавить возможность подписаться на событие по конкретному виду документа):
- Добавить его в измерение ОбъектПодписки регистра сведений ОчередьУведомлений;
- Добавить его в измерение ОбъектПодписки регистра сведений ПодпискиНаУведомления;
- Добавить в форму объекта команду Подписаться для возможности подписки по объекту, которая должна открывать форму ОбщаяФорма.ПодпискаНаУведомленияПоОбъекту с передачей параметра ОбъектПодписки.
- В общем модуле РаботаСУведомлениями в функции ПолучитьСписокВидовБизнесСобытий добавить ветку кода для объекта подписки, указав события по которым возможна подписка по объекту;
- В общем модуле РаботаСУведомлениями в функции ПолучитьПредставлениеБизнесСобытия добавить ветку кода для объекта подписки, указав представление событий при подписке на объект;
- В общем модуле РаботаСУведомлениями в функции ПолучитьВозможностьПодпискиНаСобытие добавить ветку кода для объекта подписки, указав, используется ли подписка на событие по данному объекту подписки (влияет на возможность установки значения подписки в Авто).
- В общем модуле РаботаСУведомлениями в соответствующие ветки в ДобавитьУведомлениеПоОбъекту добавить необходимые в соответствии с логикой работы вызовы ДобавитьУведомленияПодписчиковПоСобытию, ДобавитьУведомленияПодписчиковПоОбъекту, ДобавитьУведомленияИсполнителейЗадачи по данному объекту подписки. Например, для вида внутреннего документа в ДобавитьУведомленияПоВнутреннемуДокументу в необходимые места нужно будет добавить вызов ДобавитьУведомлениеПоОбъекту(ПроизошедшееСобытие, ВнутреннийДокумент.ВидДокумента, ВидСобытия, ОбъектУведомления).
При добавлении нового объекта, по которому возможна рассылка уведомлений (например, вид документа, если необходимо уведомлять об изменении в настройках вида документа):
- Добавить его в измерение ОбработанныеУведомления в регистре сведений ОбработанныеУведомления;
- Добавить его в измерение Объект в регистре сведений ОчередьУведомлений;
- Скорее всего по данному объекту понадобится возможность подписки, поэтому необходимо выполнить описанные ранее шаги для добавления нового объекта, по которому возможна подписка.
- В общем модуле РаботаСУведомлениями в процедуре ДобавитьУведомлениеПоОбъекту добавить свою ветку для обработки объекта данного типа. Минимальный код в данной ветке - вызов ДобавитьУведомленияПодписчиковПоОбъекту для данного объекта. В зависимости от логики уведомлений можно добавлять уведомления подписчиков по событию ДобавитьУведомленияПодписчиковПоСобытию, подписчиков по объекту ДобавитьУведомленияПодписчиковПоОбъекту, исполнителей задачи ДобавитьУведомленияИсполнителейЗадачи, отказываться от добавления уведомлений при определенных условиях, обработать формирование очереди для связанных объектов по тому же событию ДобавитьУведомлениеПоОбъекту.
- Специфические случаи отказа от подписки можно описать в функции ПолучитьНастройкуУведомления в ветке Если ПодпискаПользователя.ПодпискаАктивна Тогда;
- В модуле РаботаСУведомлениями процедуре СформироватьПредставлениеОбъекта следует добавить формирование представление объекта при почтовой рассылке.
При добавлении нового события, по которому возможно уведомление (например, событие изменении настроек вида документа, если необходимо уведомлять об изменении в настройках вида документа):
- Следует добавить предопределенное событие в справочник ВидыБизнесСобытий;
- Следует добавить регистрацию бизнес-события с помощью БизнесСобытияВызовСервера.ЗарегистрироватьСобытие;
- При необходимости возможности добавления подписки на событие следует внести изменения в РаботаСУведомлениямиПереопределяемый в ПолучитьДоступныеУведомления;
- В модуле РаботаСУведомлениями в функции ПолучитьСписокВидовБизнесСобытий следует добавить возможность подписки по объекту на новое событие там, где это необходимо;
- В модуле РаботаСУведомлениями в функции ПолучитьПредставлениеБизнесСобытия следует добавить представление добавленных ранее подписок;
- В модуле РаботаСУведомлениями в функции ПолучитьВозможностьПодпискиНаСобытие следует отметить, возможна ли подписка по событию для конкретных объектов (влияет на возможность установки значения подписки по объекту в Авто).
- В модуле РаботаСУведомлениями в процедуре ДобавитьУведомлениеПоОбъекту в ветках по соответствующим объектам добавить ветки по новому событию, если требуется особая логика формирования очереди. При формировании подписки по событию добавление кода является обязательным.
- В модуле РаботаСУведомлениямиПереопределяемый в функции ВидыСобытийДляГруппировки можно добавить группировку уведомлений при рассылке.
- В модуле РаботаСУведомлениямиПереопределяемый при группировке уведомлений можно использовать функции СформироватьУведомленияПоВидуБизнесСобытияПереопределяемый, СформироватьТемуУведомленияПоОбъектамУведомленияПереопределяемый, СформироватьТекстУведомленияПоОбъектамУведомленияПереопределяемый, СформироватьФайлыУведомленияПоОбъектамУведомленияПереопределяемый, СформироватьПредставлениеОбъектаПереопределяемый для переопределения логики формирования текста уведомлений.
- В модуле РаботаСУведомлениямиПереопределяемый без группировки уведомлений можно использовать функции СформироватьУведомленияПоСобытиямПереопределяемый, СформироватьТемуУведомленияПоСобытиюПереопределяемый, СформироватьТекстУведомленияПоСобытиюПереопределяемый, СформироватьФайлыУведомленияПоСобытиюПереопределяемый, СформироватьПредставлениеОбъектаПереопределяемый для переопределения логики формирования текста уведомлений.
Как включать в уведомление внешние ссылки, открывающие тонкий клиент
Помимо открытия веб-клиента из внешних почтовых ссылок при рассылке уведомлений есть возможность открытия тонкого клиента. Возможность не является типовой и сложна в поддержке, но может оказаться полезной.
При расположении базы на веб-сервере открывать тонкий клиент вместо веб-клиента не получится. При расположении базы на сервере "1С:Предприятия" такая возможность имеется. Для этого необходимо:
- В "1C:Документообороте" в настройках уведомлений в Адрес публикации на веб-сервере вместо адреса публикации на веб-сервере указать адрес базы на сервере "1С:Предприятия". (В таком виде, каким он отображается при попытке получить внешнюю ссылку в базе - например e1c://server/TestServerName/TestBaseName#).
- В реестре Windows зарегистрировать схему e1c, чтобы нажатии ссылке в браузере открывалось "1С:Предприятие" с передачей соответсвующего параметра при открытии с ключом /url. Это необходимо будет сделать вручную на всех клиентских машинах, на которых нужна такая возможность. Такой схемы нет, в платформе возможности регистрации данной схемы нет, в типовую конфигурацию возможность регистрации данной схема не входит. Пример файла e1creg.reg приведен ниже. Возможно, его придется отдредактировать, в зависимости от особенностей установки "1С:Предприятия" на конкретной клиентской машине.
Копировать в буфер обменаREGEDIT4
[HKEY_CLASSES_ROOT\e1c]
@="URL:e1c Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\e1c\DefaultIcon]
@="\"C:\\Program Files (x86)\\1cv82\\common\\1cestart.exe\""
[HKEY_CLASSES_ROOT\e1c\shell]
[HKEY_CLASSES_ROOT\e1c\shell\open]
[HKEY_CLASSES_ROOT\e1c\shell\open\command]
@="\"C:\\Program Files (x86)\\1cv82\\common\\1cestart.exe\" /url \"%1\""