Как реализовать вывод уведомлений и всплывающих сообщений пользователям в 1С

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

В процессе совместной работы сотрудников в базах данных 1С часто возникает необходимость оперативного информирования. Типичный сценарий: один пользователь создает документ (например, Задание или Заказ покупателя), а другой пользователь, которому адресован этот документ, должен мгновенно или в плановом порядке получить всплывающее уведомление в интерфейсе программы.

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

Вариант №1. Использование подсистемы «Напоминания пользователя» БСП

В большинство современных конфигураций 1С, построенных на базе Библиотеки стандартных подсистем (БСП), интегрирован стандартный механизм напоминаний. Он хранит данные в регистре сведений НапоминанияПользователя и выводит сообщения с помощью периодического опроса базы данных на стороне клиента.

Рассмотрим ситуацию, когда разработчики пытаются записать напоминание напрямую в регистр сведений через менеджер записи (как показано в одном из сообщений форума):


Рег = РегистрыСведений.НапоминанияПользователя.СоздатьМенеджерЗаписи();
Рег.Активность = Истина;
Рег.ВремяСобытия = ЭтотОбъект.Дата + 120; // напомнить через 2 минуты
Рег.Источник = ЭтотОбъект.Ссылка;
Рег.ИнтервалВремениНапоминания = 30;
Рег.Описание = ЭтотОбъект.Наименование;
Рег.Пользователь = ЭтотОбъект.Исполнитель;
Рег.СрокНапоминания = ЭтотОбъект.СрокПроверки;
Рег.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.Периодически;
Рег.Записать();

Проанализируем, почему такой код может работать некорректно или вызывать задержки:

  1. Интервал фонового опроса. По умолчанию обработка ожидания, которая проверяет наличие новых напоминаний в базе данных (процедура ПроверитьТекущиеНапоминания), запускается на клиенте с определенной периодичностью (обычно раз в 5–15 минут). Поэтому созданное напоминание отобразится у получателя не сразу, а только при очередном срабатывании обработчика ожидания в его сеансе.
  2. Права доступа. Подсистема БСП по умолчанию рассчитана на то, что пользователь создает напоминания «для себя». При попытке записать строку в регистр для другого пользователя под обычной учетной записью (не администратора) платформа может выдать ошибку прав доступа.

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


// Пример корректной установки напоминания другому пользователю через API БСП
ТекстНапоминания = "Вам назначено новое задание: " + СокрЛП(ЭтотОбъект.Наименование);
ВремяНачала = ТекущаяДата() + 5; // Напомнить практически сразу

// Используем безопасный метод БСП
НапоминанияПользователя.УстановитьНапоминание(
    ТекстНапоминания,
    ВремяНачала,
    0, // Интервал до события в секундах
    ЭтотОбъект.Ссылка,
    "КонтрольЗадачи" // Идентификатор напоминания
);

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

Вариант №2. Система взаимодействия (СВ) — мгновенные уведомления

Если перед нами стоит задача сделать «мгновенную» доставку сообщения без фризов интерфейса и без постоянной фоновой нагрузки на СУБД, то лучшим решением будет использование Системы взаимодействия. Это встроенный механизм платформы 1С:Предприятие, использующий протокол WebSockets.

В отличие от обработки ожидания, которая постоянно «дергает» сервер запросами к СУБД каждые несколько секунд (что при большом числе пользователей утилизирует ресурсы сервера), Система взаимодействия доставляет сообщения мгновенно по схеме Push-уведомлений.

Многие ошибочно считают, что для работы Системы взаимодействия обязательно нужна дорогостоящая КОРП-лицензия. На самом деле для большинства сценариев достаточно пройти бесплатную регистрацию на публичном сервере 1С (1c-dialog.com) непосредственно из панели администрирования вашей базы данных.

Рассмотрим пример отправки сообщения конкретному пользователю через Систему взаимодействия:


// Выясним идентификатор пользователя Системы взаимодействия
ПользовательСВ = СистемыВзаимодействия.ПолучитьПользователя(ИсполнительСсылка);

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

Такое сообщение мгновенно всплывет на экране у получателя в правом нижнем углу в виде стандартного оповещения операционной системы или платформы 1С, даже если конфигурация свернута.

Вариант №3. Использование механизма «Мои задачи» и Бизнес-процессов

Когда требуется жесткий контроль исполнения (чтобы напоминание не просто «всплыло и закрылось», а висело перед глазами пользователя до тех пор, пока он не примет задачу в работу), стандартные напоминания БСП не подходят — пользователь может случайно нажать кнопку «Прекратить», и задача затеряется.

Для таких целей в ERP, КА и УТ используется встроенная подсистема «Бизнес-процессы и задачи»:

Сравнение подходов к реализации уведомлений

Выберем наиболее подходящий способ информирования в зависимости от требований к системе:

  1. Программный регистр «Напоминания пользователя» БСП:
    • Плюсы: не требует сторонних серверов, легко программируется, интегрирован в типовые решения.
    • Минусы: задержка отображения (зависит от интервала опроса), создает дополнительную паразитную нагрузку на сервер БД при частых запросах.
  2. Система взаимодействия:
    • Плюсы: мгновенная доставка сообщений, полное отсутствие лагов интерфейса и нагрузки на СУБД, современный UI.
    • Минусы: требуется подключение к интернету для связи с публичным сервером либо развертывание собственного локального сервера взаимодействия.
  3. Бизнес-процессы и задачи:
    • Плюсы: строгий контроль выполнения, фиксация просрочки, невозможно «забыть» задачу.
    • Минусы: требует выполнения регламентных процедур (принятие к исполнению, отметка о завершении), более сложный документооборот для простых уведомлений.

Таким образом, для простых задач информирования в фоновом режиме отлично подходит встроенный механизм напоминаний БСП, использующий метод НапоминанияПользователя.УстановитьНапоминание. Если же вам критически важна мгновенная доставка сообщений без ущерба для производительности системы, делайте выбор в пользу Системы взаимодействия.

← На главную