К статье
Практический материал

Разработка и Конфигурация · 12 мин

Как сделать уведомления в 1С 8

Способы показать уведомления в 1С 8.3: ПоказатьПредупреждение, ПоказатьОповещениеПользователя, система взаимодействия и напоминания. Примеры кода и настройка.

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

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

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

Какие виды уведомлений есть в 1С 8 и что выбрать

Платформа 1С 8.3 предлагает пять основных механизмов уведомлений, и у каждого своё назначение. Ошибка выбора приводит либо к тому, что пользователь пропускает важное сообщение, либо к тому, что модальные окна блокируют пакетную обработку данных.

МеханизмКак выглядитКогда применять
ПоказатьОповещениеПользователяВсплывающее окно в панели оповещенийИнформационные сообщения, не требующие реакции
ПоказатьПредупреждениеМодальное окно с кнопкой ОККритичные сообщения, которые нельзя пропустить
ПоказатьВопросМодальное окно с вариантами ответаЗапрос подтверждения действия
СообщениеПользователюСтрока в панели сообщений с привязкой к полюОшибки заполнения при проведении и записи
Система взаимодействияУведомления в центре оповещений, обсужденияСообщения между пользователями, фоновые события

Общее правило: если пользователь может продолжить работу без прочтения сообщения — используйте оповещение; если сообщение влияет на дальнейшие действия — предупреждение; если сообщение относится к конкретному реквизиту объекта — сообщение пользователю с привязкой к данным.

Маршрут решения

Как выбрать механизм

Нужно просто сообщить о завершении операцииПоказатьОповещениеПользователя
Ошибка критична и работу продолжать нельзяПоказатьПредупреждение
Ошибка связана с конкретным полем документаСообщениеПользователю с установкой Поле и ПутьКДанным
Уведомить другого пользователя о событииСистема взаимодействия или регистр оповещений

Простое оповещение через ПоказатьОповещениеПользователя

Это самый частый способ уведомлений в 1С 8. Метод выводит сообщение в специальной панели оповещений (в тонком клиенте — в правом нижнем углу), не блокирует интерфейс и может содержать навигационную ссылку, по которой пользователь перейдёт к объекту.

bsl
ПоказатьОповещениеПользователя(
    НСтр("ru = 'Обработка завершения'"),
    ПолучитьНавигационнуюСсылку(Объект.Ссылка),
    СтрШаблон(НСтр("ru = 'Проведено документов: %1'"), СчетчикДокументов),
    БиблиотекаКартинок.Информация,
    СтатусОповещенияПользователя.Важное);

Параметры метода: текст заголовка, навигационная ссылка (можно опустить), пояснение, картинка и статус (Обычное или Важное). Важное оповещение визуально выделяется и дольше остаётся на экране. Если навигационная ссылка не нужна, передайте Неопределено или пропустите параметр.

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

Модальные предупреждения и вопросы

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

bsl
&НаКлиенте
Процедура УдалитьДокументы(Команда)
    ОписаниеОповещения = Новый ОписаниеОповещения("УдалитьДокументыЗавершение", ЭтотОбъект);
    ПоказатьВопрос(ОписаниеОповещения,
        НСтр("ru = 'Отмеченные документы будут удалены. Продолжить?'"),
        РежимДиалогаВопрос.ДаНет,
        20,
        КодВозвратаДиалога.Нет);
КонецПроцедуры

&НаКлиенте
Процедура УдалитьДокументыЗавершение(Результат, ДопПараметры) Экспорт
    Если Результат = КодВозвратаДиалога.Да Тогда
        УдалитьДокументыНаСервере();
    КонецЕсли;
КонецПроцедуры

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

Сообщения пользователю с привязкой к полям объекта

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

bsl
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = НСтр("ru = 'Не заполнен склад отгрузки'");
Сообщение.Поле = "Склад";
Сообщение.ПутьКДанным = "Объект";
Сообщение.УстановитьДанные(Объект);
Сообщение.Сообщить();

Сообщения, вызванные в обработчиках ОбработкаПроверкиЗаполнения и ПередЗаписью на сервере, автоматически доставляются клиенту. Если установить параметр Отказ = Истина, запись объекта будет заблокирована — это стандартный способ валидации данных в 1С.

Частая ошибка — забыть заполнить ПутьКДанным при работе из формы. Без него платформа не сможет связать сообщение с элементом управления, и переход к полю не сработает, хотя само сообщение появится.

Напоминания и уведомления по расписанию

Если конфигурация построена на Библиотеке стандартных подсистем (УТ 11, ERP, Бухгалтерия 3.0, ЗУП 3.1), в ней уже есть подсистема «Напоминания пользователя». Она позволяет создавать уведомления, привязанные к времени или к событию объекта, без написания собственных механизмов хранения.

bsl
// Требуется подсистема БСП "Напоминания пользователя"
ПараметрыНапоминания = НапоминанияПользователяКлиентСервер.ОписаниеНапоминания();
ПараметрыНапоминания.Пользователь = Пользователи.ТекущийПользователь();
ПараметрыНапоминания.Описание = "Проверить контрагента по реестру";
ПараметрыНапоминания.ВремяСобытия = ТекущаяДатаСеанса() + 3600;
ПараметрыНапоминания.Источник = ДокументСсылка;
НапоминанияПользователя.УстановитьНапоминание(ПараметрыНапоминания);

Чтобы напоминания работали, в настройках пользователя должна быть включена соответствующая опция (в типовых: раздел «Администрирование» → «Органайзер» или персональные настройки пользователя). Проверка наступления срока выполняется на клиенте по таймеру, поэтому при закрытом сеансе напоминание покажется при следующем входе.

Если БСП в конфигурации нет, напоминания реализуются собственным регистром сведений (пользователь, дата и время, текст, объект) и обработчиком ожидания на клиенте, который периодически проверяет наступившие записи. Это трудоёмко, поэтому при возможности подключите подсистему БСП.

Уведомления между пользователями через систему взаимодействия

Система взаимодействия (регистрация в настройках базы: «Администрирование» → «Обсуждения») позволяет отправлять уведомления другим пользователям, в том числе когда они не в программе — сообщение появится при следующем входе. Это единственный штатный способ доставить уведомление из фонового задания конкретному пользователю.

bsl
Если СистемаВзаимодействия.ИнформационнаяБазаЗарегистрирована() Тогда
    ИдентификаторПользователя = СистемаВзаимодействия.ПолучитьИдентификаторПользователя(
        ПользователиИнформационнойБазы.НайтиПоИмени("ИвановИИ").УникальныйИдентификатор);
    Сообщение = СистемаВзаимодействия.СоздатьСообщение();
    Сообщение.Текст = "Загрузка прайсов завершена с ошибками";
    Сообщение.Получатели.Добавить(ИдентификаторПользователя);
    Сообщение.Записать();
КонецЕсли;

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

Сравнение каналов доставки

Система взаимодействия

Штатно, без внешних сервисов, но требует регистрации базы и работает только внутри 1С

Email через ИнтернетПочта

Дошедёт даже при закрытой 1С, но нужна настройка учётной записи и есть задержка доставки

Telegram/мессенджер по API

Мгновенная доставка на телефон, но требует разработки HTTP-интеграции и хранения токенов

Проверка результата и типичные ошибки

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

Контрольные точки

Как проверить результат

Оповещение из клиентской процедуры
Норма

Сообщение появляется в панели оповещений, ссылка открывает объект

Тревожный признак

Сообщения нет — код выполнен на сервере

Сообщение с привязкой к полю
Норма

Двойной щелчок по сообщению активирует нужное поле формы

Тревожный признак

Сообщение есть, но переход к полю не работает — не задан ПутьКДанным

Напоминание БСП
Норма

В назначенное время появляется окно напоминания

Тревожный признак

Напоминаний нет — отключена опция в настройках пользователя

Уведомление из фонового задания
Норма

Пользователь получает сообщение системы взаимодействия

Тревожный признак

Уведомление теряется — использован клиентский метод на сервере

Типичные ошибки
01
Вызов ПоказатьОповещениеПользователя в серверном коде — уведомление молча теряется
02
Использование синхронных Предупреждение() и Вопрос() — ошибка в режиме без модальности
03
Модальное окно внутри цикла обработки — блокировка пакетной операции
04
Отсутствие проверки регистрации системы взаимодействия — исключение при отправке
05
Значение по умолчанию «Да» в вопросе об удалении — риск потери данных по таймауту
Итог

Что важно запомнить

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

Частые вопросы

Как показать уведомление всем пользователям базы одновременно?

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

Почему оповещение не появляется при проведении документа?

Проведение выполняется на сервере, а ПоказатьОповещениеПользователя — клиентский метод. Перенесите вызов в клиентский обработчик ПослеЗаписи формы либо используйте СообщениеПользователю, который платформа сама доставит на клиента.

Можно ли отправить уведомление на email или в Telegram из 1С?

Да. Для email используется объект ИнтернетПочта с настроенным профилем, для Telegram — HTTPСоединение с вызовом метода sendMessage API бота. Оба способа работают на сервере и подходят для фоновых заданий, но требуют хранения паролей и токенов — храните их в защищённом хранилище, а не в коде.

Как сделать, чтобы уведомление не исчезало, пока пользователь его не закроет?

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

Работают ли уведомления в обычном приложении (8.2)?

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

Как отключить пользователю лишние всплывающие сообщения?

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