Разбор от сообщества: Исследуя границы Уведомлений клиента | infolimp.ru

Разбор от сообщества: Исследуя границы Уведомлений клиента

22 сентября 2026 · infolimp.ru

Встроенные уведомления клиента в 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 минут, публичный токен-профиль, который можно показать работодателю или заказчику. Без регистрации по почте.

Проверить свой уровень бесплатно →