При работе в 1С:Документообороте (ДГУ) часто возникает ситуация, когда необходимо просто проинформировать пользователя о событии, например, о завершении согласования документа в другом подразделении. Стандартный механизм «Ознакомления» в процессах не всегда удобен, так как он создает задачу, которую пользователь обязан «исполнить» (нажать кнопку «Ознакомился»). Это создает лишний информационный шум и требует лишних действий. В этой статье мы разберем, как реализовать «легкие» уведомления в «колокольчик» или на почту, не прибегая к созданию задач.
Рассмотрим ситуацию: в одном подразделении завершилось согласование исходящего документа. Нужно, чтобы сотрудники другого отдела просто узнали об этом факте. Если мы добавим этап «Ознакомление» в комплексный процесс, у пользователя в списке «Задачи мне» появится новая запись. Пока он её не откроет и не нажмет кнопку завершения, она будет висеть в списке и влиять на показатели исполнительской дисциплины. Проанализируем альтернативные варианты, которые позволяют отправить сообщение в «колокольчик» или по электронной почте напрямую.
Это наиболее архитектурно верный и гибкий способ для 1С:Документооборота. Система уже содержит механизм бизнес-событий, которые фиксируют изменения в объектах. Нам остается только «подписаться» на нужное событие и выполнить код отправки уведомления. Разберем этот процесс по шагам.
Перейдем в раздел Настройка и администрирование — Бизнес-события — Дополнительные обработчики. Здесь мы можем создать скрипт на языке 1С, который выполнится при наступлении события (например, при установке статуса «Согласован» у документа). Основное преимущество — нам не нужно менять конфигурацию в конфигураторе.
Пример логики обработчика, который проверяет условия и формирует запись для отправки:
// Проверяем, что событие относится к нужному нам виду документа
Если ТипЗнч(Источник) = Тип("СправочникСсылка.ВнутренниеДокументы") Тогда
Если Источник.Статус = Перечисления.СтатусыДокументов.Согласован Тогда
// Логика определения получателей (например, из подразделения Б)
МассивПолучателей = ПолучитьПолучателейУведомления(Источник.Подразделение);
Для Каждого Получатель Из МассивПолучателей Цикл
// Вызываем процедуру отправки
РаботаСУведомлениями.ОтправитьУведомлениеОбОбъекте(Источник, Получатель, "Документ согласован!");
КонецЦикла;
КонецЕсли;
КонецЕсли;
Выясним, как работает система уведомлений «под капотом». Когда система хочет что-то отправить пользователю, она делает запись в регистр сведений ОчередьУведомлений. Специальное регламентное задание периодически считывает этот регистр и рассылает сообщения по настроенным каналам (почта, SMS, окно программы). Мы можем напрямую использовать этот механизм.
Рассмотрим пример кода, который можно вставить в модуль документа или в обработку, чтобы «вбросить» уведомление в систему:
НоваяЗапись = РегистрыСведений.ОчередьУведомлений.СоздатьМенеджерЗаписи();
НоваяЗапись.Период = ТекущаяДата();
НоваяЗапись.Пользователь = НужныйПользовательСсылка;
НоваяЗапись.Объект = СсылкаНаДокумент;
НоваяЗапись.ВидСобытия = Справочники.ВидыБизнесСобытий.НайтиПоНаименованию("Прочее");
НоваяЗапись.ТекстУведомления = "Уважаемый коллега, документ " + СсылкаНаДокумент + " прошел согласование.";
НоваяЗапись.Записать();
Этот метод хорош тем, что он не создает задач. Пользователь получит сообщение в свой «центр оповещений» (тот самый колокольчик) и на почту, если у него это включено в персональных настройках.
В современных версиях ДГУ (начиная с 2.1 и в 3.0) предусмотрена гибкая настройка через интерфейс. Зайдем в Настройки — Настройки уведомлений — По объектам. Здесь можно создать правило, которое будет срабатывать при завершении процесса.
Посмотрим на возможности этого метода:
Важный момент: если стандартных условий фильтрации в правилах не хватает, всё равно придется вернуться к Способу 1 с написанием небольшого фрагмента кода в пользовательском режиме.
Если в вашей организации развернут сервер взаимодействия, это отличный способ уведомлять пользователей мгновенно и без лишнего мусора в почте. Сообщение придет пользователю в чат 1С, и он сможет сразу перейти к документу по навигационной ссылке.
Проанализируем пример отправки сообщения в чат программным путем:
// Получаем обсуждение (контекстное или личное)
ТекстСообщения = "Документ согласован. Ссылка: " + ПолучитьНавигационнуюСсылку(Объект.Ссылка);
Сообщение = СистемаВзаимодействия.СоздатьСообщение(ИдентификаторОбсуждения);
Сообщение.Текст = ТекстСообщения;
Сообщение.Записать();
Этот метод является наиболее современным и «легким» для восприятия пользователем, так как напоминает привычные мессенджеры и не требует формального завершения каких-либо задач.
Выясним, какой метод подойдет именно вам:
ОчередьУведомлений.Таким образом, мы убедились, что в 1С:Документообороте существует множество способов уведомить пользователя без создания «зависающих» задач ознакомления. Правильный выбор механизма позволит сделать систему более отзывчивой и удобной для конечных сотрудников.