Разбор от сообщества: Исследуя границы Уведомлений клиента
Встроенные уведомления клиента в 1С — эффективный, но коварный инструмент. Кажется, добавил вызов ПоказатьУведомлениеПользователя — и всё работает. Но в реальных проектах, особенно с фоновыми заданиями, распределёнными сеансами и высокими нагрузками, этот механизм показывает свои границы. Мы разберём ловушку, о которой молчит справка, сравним подходы и дадим готовое решение на базе HTTP-сервисов.
Контекст: что скрывается за простотой встроенного механизма
Специалисты с опытом 5+ лет нередко используют УведомлениеКлиента (платформа 8.3.6+) для push-оповещений в тонком и веб-клиенте. Однако границы этого механизма проявляются, когда уведомление нужно отправить из фонового задания, после закрытия формы, или когда клиент отключён. Стандартная справка ограничивается синтаксисом, но не предупреждает о подводных камнях.
Первое ограничение: уведомления и фоновые задания
Фоновые задания выполняются в отдельном сеансе, который не имеет прямого соединения с клиентом. Вызов УведомлениеКлиента.Отправить() из фонового задания не дойдёт до пользователя — сеанс-отправитель и сеанс-получатель разные, и платформа не гарантирует доставку между ними. Это подтверждается опытом сообщества: уведомление теряется, а разработчик видит, что метод отработал без ошибки.
Ключевой тезис: Встроенное уведомление клиента работает только в пределах одного сеанса и только при активном соединении клиент-сервер. Любой разрыв (тайм-аут, перезагрузка сервера, смена сети) — потеря сообщения.
Как это устроено: почему это происходит
Платформа использует долгоживущее WebSocket-соединение (или long-polling в веб-клиенте) для доставки уведомлений. Когда клиент перестаёт «слушать» (например, закрыл браузер или сеанс завершился по тайм-ауту), шина разрывается. Фоновое задание не управляет этим соединением — оно существует в своём контексте. Поэтому любое уведомление, отправленное извне текущего клиентского сеанса, будет отброшено.
Сравнение подходов: встроенные уведомления и HTTP-сервисы
Альтернатива — построить систему уведомлений на базе внешнего HTTP-сервиса (например, Telegram Bot, Slack Webhook или собственного сервиса очередей). Сравним по ключевым параметрам:
| Характеристика | Встроенные уведомления | HTTP-сервис + очередь |
|---|---|---|
| Гарантия доставки | Нет (доставка «как получится») | Есть (подтверждение от получателя) |
| Работа с офлайн-клиентами | Нет | Да (сообщение хранится в очереди) |
| Массовые рассылки | Ограничение — до нескольких десятков на сеанс | Масштабируется через очередь |
| Сложность реализации | Низкая (пара строк) | Средняя (нужен HTTP-сервис и клиент) |
| Зависимость от сеанса 1С | Полная | Отсутствует (работает через внешний канал) |
Вывод: встроенный механизм подходит только для простых оповещений в рамках одного сеанса. Для корпоративных сценариев (уведомления об обмене данными, ошибках фоновых заданий, согласованиях) необходима внешняя очередь и HTTP-сервис.
Практический разбор: строим надёжную систему уведомлений
Рассмотрим пример: фоновое задание собирает ошибки и отправляет их в Telegram. Для этого создадим регламентное задание, которое читает очередь уведомлений из регистра сведений и вызывает HTTP-сервис.
Формирование записи в очередь
// В фоновом задании — только запись в регистр, без отправки
Если СообщениеОбОшибке.Важное Тогда
Запись = РегистрыСведений.ОчередьУведомлений.СоздатьМенеджерЗаписи();
Запись.ДатаВремя = ТекущаяДата();
Запись.Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
Запись.Текст = "Ошибка в процедуре " + ИмяПроцедуры;
Запись.Канал = "Telegram";
Запись.Записать();
КонецЕсли;
Регламентное задание отправки (через HTTPСоединение)
Процедура ОтправитьНакопленныеУведомления() Экспорт
Запрос = Новый Запрос("
|ВЫБРАТЬ
| ОчередьУведомлений.Ссылка,
| ОчередьУведомлений.Текст,
| ОчередьУведомлений.Пользователь
|ИЗ
| РегистрСведений.ОчередьУведомлений КАК ОчередьУведомлений
|ГДЕ
| ОчередьУведомлений.Отправлен = ЛОЖЬ");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка
Расширение «НОПик» для 1С — встраиваемый коннектор к внешнему AI с интеллектуальным поиском по базе. Задавайте вопросы обычными словами - AI сам найдёт нужное. 45 дней бесплатно.
Попробовать НОПик →
Знаете ответ на такие вопросы не хуже автора статьи? Пройдите бесплатную анонимную проверку уровня на infolimp.ru - 3 практических задачи, 15 минут, публичный токен-профиль, который можно показать работодателю или заказчику. Без регистрации по почте.
Проверить свой уровень бесплатно →