При автоматизации торговых процессов часто возникает задача: уведомить ответственных сотрудников о появлении в базе нового документа, например, заказа клиента. Сложность заключается в том, что стандартный клиентский метод ПоказатьОповещениеПользователя выполняется только в контексте текущего сеанса пользователя, создающего документ. Показать всплывающее окно на рабочих местах других сотрудников напрямую с сервера невозможно.
Кроме того, важным требованием часто является сохранение конфигурации на полной поддержке. Разберем детально, как решить эту задачу с помощью типового функционала и современных механизмов платформы 1С:Предприятие 8.3.
В конфигурациях на базе «Библиотеки стандартных подсистем» (включая «1С:Управление торговлей 11», «1С:ERP», «1С:Комплексная автоматизация») уже реализован универсальный механизм напоминаний. Этот механизм работает через регистр сведений НапоминанияПользователя, записи в котором хранятся в разрезе конкретных пользователей информационной базы.
Клиентское приложение каждого пользователя периодически выполняет опрос этого регистра через внутренний обработчик ожидания. При обнаружении актуальной записи система автоматически выводит стандартное всплывающее окно с напоминанием и возможностью открыть связанный документ.
Проанализируем ключевые реквизиты, необходимые для формирования записи в регистре сведений НапоминанияПользователя:
Пользователи, которому адресовано оповещение.ЗаказКлиента. Это позволяет пользователю перейти в заказ прямо из окна оповещения.Рассмотрим пример кода для создания напоминания конкретному пользователю при записи нового заказа клиента:
ЗаписьНапоминания = РегистрыСведений.НапоминанияПользователя.СоздатьМенеджерЗаписи();
ЗаписьНапоминания.Пользователь = НужныйПользователь;
ЗаписьНапоминания.ВремяСобытия = ТекущаяДатаСеанса();
ЗаписьНапоминания.СрокОповещения = ТекущаяДатаСеанса();
ЗаписьНапоминания.Источник = Ссылка;
ЗаписьНапоминания.Описание = "Создан новый заказ клиента № " + СокращенРасширение(Номер) + " от " + Формат(Дата, "ДФ=dd.MM.yyyy");
ЗаписьНапоминания.СпособУстановкиВремени = Перечисления.СпособыУстановкиВремениНапоминания.ВУказанноеВремя;
ЗаписьНапоминания.Записать(Истина);
Также при наличии внедренной БСП для формирования записей можно обращаться к методам экспортного интерфейса общего модуля НапоминанияПользователя или НапоминанияПользователяКлиентСервер.
Обратите внимание на особенность работы данного механизма: напоминание появляется не строго в миллисекунду проведения документа. Обработчик опроса в интерфейсе пользователя запускается с периодичностью по умолчанию один раз в минуту, поэтому задержка отображения всплывающего окна обычно составляет от нескольких секунд до одной минуты.
Чтобы не снимать конфигурацию с поддержки и не модифицировать типовые процедуры проведения, воспользуемся механизмом расширений конфигурации. Перехват события создания документа реализуется двумя способами:
ОбработкаПроведения или ПриЗаписи для документа ЗаказКлиента.ОбработкаПроведения с помощью аннотации &После.Посмотрим на пример расширения модуля объекта документа ЗаказКлиента:
&После("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведенияПосле(Отказ, РежимПроведения)
Если Отказ Тогда
Возврат;
КонецЕсли;
// Формируем список адресатов оповещения
МассивПользователей = Новый Массив;
// Заполняем массив нужными ссылками на справочник Пользователи
// Например, получаем ответственного менеджера или руководителя отдела
Для Каждого Получатель Из МассивПользователей Цикл
МенеджерЗаписи = РегистрыСведений.НапоминанияПользователя.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Пользователь = Получатель;
МенеджерЗаписи.ВремяСобытия = ТекущаяДатаСеанса();
МенеджерЗаписи.СрокОповещения = ТекущаяДатаСеанса();
МенеджерЗаписи.Источник = ЭтотОбъект.Ссылка;
МенеджерЗаписи.Описание = "Создан заказ клиента: " + Строка(ЭтотОбъект.Ссылка);
МенеджерЗаписи.СпособУстановкиВремени = Перечисления.СпособыУстановкиВремениНапоминания.ВУказанноеВремя;
МенеджерЗаписи.Записать(Истина);
КонецЦикла;
КонецПроцедуры
Разберем другие подходы к информированию пользователей, которые можно применить в зависимости от инфраструктуры предприятия:
СистемаВзаимодействия. Это обеспечивает моментальную доставку push-уведомлений в интерфейс 1С без задержек опроса и без дополнительной нагрузки на СУБД. Сообщение можно публиковать как в личный диалог с пользователем, так и в контекстное обсуждение заказа.ЗадачаИсполнителя помещает заказ в список «Мои задачи» конкретного сотрудника, требуя нажатия кнопки выполнения, что исключает случайный пропуск события.HTTPСоединение для отправки сообщений в корпоративные чаты (например, Telegram). В сообщение передается номер заказа, сумма и навигационная ссылка на документ, формируемая методом ПолучитьНавигационнуюСсылку.