Как настроить оповещение конкретных пользователей при создании заказа клиента в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При автоматизации торговых процессов часто возникает задача: уведомить ответственных сотрудников о появлении в базе нового документа, например, заказа клиента. Сложность заключается в том, что стандартный клиентский метод ПоказатьОповещениеПользователя выполняется только в контексте текущего сеанса пользователя, создающего документ. Показать всплывающее окно на рабочих местах других сотрудников напрямую с сервера невозможно.

Кроме того, важным требованием часто является сохранение конфигурации на полной поддержке. Разберем детально, как решить эту задачу с помощью типового функционала и современных механизмов платформы 1С:Предприятие 8.3.

Решение через типовую подсистему «Напоминания пользователя» (БСП)

В конфигурациях на базе «Библиотеки стандартных подсистем» (включая «1С:Управление торговлей 11», «1С:ERP», «1С:Комплексная автоматизация») уже реализован универсальный механизм напоминаний. Этот механизм работает через регистр сведений НапоминанияПользователя, записи в котором хранятся в разрезе конкретных пользователей информационной базы.

Клиентское приложение каждого пользователя периодически выполняет опрос этого регистра через внутренний обработчик ожидания. При обнаружении актуальной записи система автоматически выводит стандартное всплывающее окно с напоминанием и возможностью открыть связанный документ.

Проанализируем ключевые реквизиты, необходимые для формирования записи в регистре сведений НапоминанияПользователя:

  1. Пользователь — ссылка на элемент справочника Пользователи, которому адресовано оповещение.
  2. ВремяСобытия и СрокОповещения — дата и время, когда оповещение должно сработать. Если уведомление нужно показать незамедлительно, указывается текущая дата сеанса.
  3. Источник — ссылка на созданный документ ЗаказКлиента. Это позволяет пользователю перейти в заказ прямо из окна оповещения.
  4. Описание — текстовое представление уведомления, отображаемое на экране.
  5. СпособУстановкиВремени — значение перечисления, определяющее логику вычисления момента оповещения.

Рассмотрим пример кода для создания напоминания конкретному пользователю при записи нового заказа клиента:


ЗаписьНапоминания = РегистрыСведений.НапоминанияПользователя.СоздатьМенеджерЗаписи();
ЗаписьНапоминания.Пользователь = НужныйПользователь;
ЗаписьНапоминания.ВремяСобытия = ТекущаяДатаСеанса();
ЗаписьНапоминания.СрокОповещения = ТекущаяДатаСеанса();
ЗаписьНапоминания.Источник = Ссылка;
ЗаписьНапоминания.Описание = "Создан новый заказ клиента № " + СокращенРасширение(Номер) + " от " + Формат(Дата, "ДФ=dd.MM.yyyy");
ЗаписьНапоминания.СпособУстановкиВремени = Перечисления.СпособыУстановкиВремениНапоминания.ВУказанноеВремя;
ЗаписьНапоминания.Записать(Истина);

Также при наличии внедренной БСП для формирования записей можно обращаться к методам экспортного интерфейса общего модуля НапоминанияПользователя или НапоминанияПользователяКлиентСервер.

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

Реализация без изменения конфигурации через расширение

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

  1. Подписка на событие в расширении: создаем собственную подписку на событие ОбработкаПроведения или ПриЗаписи для документа ЗаказКлиента.
  2. Аннотация метода в модуле объекта: расширяем процедуру ОбработкаПроведения с помощью аннотации &После.

Посмотрим на пример расширения модуля объекта документа ЗаказКлиента:


&После("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведенияПосле(Отказ, РежимПроведения)
    Если Отказ Тогда
        Возврат;
    КонецЕсли;
    
    // Формируем список адресатов оповещения
    МассивПользователей = Новый Массив;
    // Заполняем массив нужными ссылками на справочник Пользователи
    // Например, получаем ответственного менеджера или руководителя отдела
    
    Для Каждого Получатель Из МассивПользователей Цикл
        МенеджерЗаписи = РегистрыСведений.НапоминанияПользователя.СоздатьМенеджерЗаписи();
        МенеджерЗаписи.Пользователь = Получатель;
        МенеджерЗаписи.ВремяСобытия = ТекущаяДатаСеанса();
        МенеджерЗаписи.СрокОповещения = ТекущаяДатаСеанса();
        МенеджерЗаписи.Источник = ЭтотОбъект.Ссылка;
        МенеджерЗаписи.Описание = "Создан заказ клиента: " + Строка(ЭтотОбъект.Ссылка);
        МенеджерЗаписи.СпособУстановкиВремени = Перечисления.СпособыУстановкиВремениНапоминания.ВУказанноеВремя;
        МенеджерЗаписи.Записать(Истина);
    КонецЦикла;
КонецПроцедуры

Альтернативные варианты оповещения

Разберем другие подходы к информированию пользователей, которые можно применить в зависимости от инфраструктуры предприятия:

  1. Система взаимодействия (Обсуждения): Если в информационной базе подключена «Система взаимодействия», оповещения можно отправлять через менеджер СистемаВзаимодействия. Это обеспечивает моментальную доставку push-уведомлений в интерфейс 1С без задержек опроса и без дополнительной нагрузки на СУБД. Сообщение можно публиковать как в личный диалог с пользователем, так и в контекстное обсуждение заказа.
  2. Бизнес-процессы и задачи: Если факт ознакомления с заказом требует строгого контроля и подтверждения, рекомендуется использовать подсистему задач БСП. Создание объекта ЗадачаИсполнителя помещает заказ в список «Мои задачи» конкретного сотрудника, требуя нажатия кнопки выполнения, что исключает случайный пропуск события.
  3. Интеграция с корпоративными мессенджерами: Если у пользователей нет постоянного подключения к почте, можно использовать объект платформы HTTPСоединение для отправки сообщений в корпоративные чаты (например, Telegram). В сообщение передается номер заказа, сумма и навигационная ссылка на документ, формируемая методом ПолучитьНавигационнуюСсылку.
← На главную