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