Как программно отправить уведомление конкретному пользователю в 1С?

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

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

Метод 1: Использование «Системы взаимодействия»

Начиная с версии платформы 8.3.10, 1С предоставляет мощный инструмент — Систему взаимодействия. Это встроенный мессенджер, который позволяет не только переписываться пользователям, но и отправлять программные уведомления. Это самый современный и рекомендуемый способ для интерактивного общения внутри программы.

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

  1. Проверить, подключена ли система в текущей информационной базе.
  2. Найти обсуждение (контекстное или неконтекстное) между системой (ботом) и целевым пользователем.
  3. Создать и отправить сообщение.

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


// Пример программной отправки сообщения через Систему взаимодействия
Участники = Новый Массив;
Участники.Добавить(НужныйПользовательИД); // Идентификатор пользователя Системы взаимодействия

ОписаниеОбсуждения = СистемаВзаимодействия.СоздатьОбсуждение();
ОписаниеОбсуждения.Ключ = "УведомлениеОбОшибке_" + Объект.Ссылка.УникальныйИдентификатор();
ОписаниеОбсуждения.Наименование = "Важное уведомление";
ОписаниеОбсуждения.Участники = Участники;
ОписаниеОбсуждения.Записать();

НовоеСообщение = СистемаВзаимодействия.СоздатьСообщение(ОписаниеОбсуждения.Идентификатор);
НовоеСообщение.Текст = "Вам назначена проверка документа: " + Представление(Объект.Ссылка);
НовоеСообщение.Записать();

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

Метод 2: Регистр сведений «Напоминания пользователя» (БСП)

Если ваша конфигурация построена на базе Библиотеки стандартных подсистем (БСП), например, это ERP 2.4/2.5, Комплексная автоматизация или Управление торговлей 11, то в вашем распоряжении есть готовый механизм напоминаний. Этот способ не требует подключения внешних сервисов и работает на уровне базы данных.

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

Давайте разберем по шагам, как реализовать это программно. Обратите внимание, что работа с менеджером записи должна происходить на сервере.


// Создаем запись в регистре напоминаний для конкретного пользователя
// ПользовательСсылка - ссылка на справочник Пользователи
// Источник - ссылка на объект (например, ДокументСсылка), к которому привязано напоминание
// Описание - текст, который увидит пользователь

РСНапоминания = РегистрыСведений.НапоминанияПользователя.СоздатьМенеджерЗаписи();
РСНапоминания.Пользователь = ПользовательСсылка;
РСНапоминания.ВремяСобытия = ТекущаяДата(); // Когда должно сработать
РСНапоминания.Источник = Источник;
РСНапоминания.СрокНапоминания = ТекущаяДата();
РСНапоминания.Описание = "Вам необходимо проверить документ!";
РСНапоминания.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ОтносительноТекущегоВремени;
РСНапоминания.ИнтервалВремениНапоминания = 60; // Напомнить через минуту, если нужно отложить
РСНапоминания.ПредставлениеИсточника = Строка(Источник);

РСНапоминания.Записать();

Проанализируем ключевые поля этого регистра:

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

Метод 3: Бизнес-процессы и задачи

В крупных учетных системах уведомление пользователя часто связано с каким-либо бизнес-процессом. В этом случае правильнее использовать объект Задача. Когда вы программно создаете задачу и назначаете её исполнителю, она автоматически появляется в его списке «Мои задачи».

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

  1. Программа создает объект ЗадачаИсполнителя.
  2. Указывается Исполнитель (пользователь или роль).
  3. При записи задачи система проверяет настройки уведомлений пользователя.
  4. Если настроено оповещение по почте, формируется письмо.

Ограничения метода «ПоказатьОповещениеПользователя»

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

Выясним причины, почему код может не работать

Если вы внедрили код записи в регистр напоминаний, но уведомление не появляется, проверьте следующие моменты:

Подводя итог, выбор метода зависит от ваших целей. Для мгновенного чата и быстрых уведомлений идеально подходит Система взаимодействия. Для строгих учетных механизмов и напоминаний о документах лучше использовать регистр НапоминанияПользователя или функционал Задач.

← На главную