Разработка и Конфигурация · 12 мин
Как сделать уведомления в 1С 8
Способы показать уведомления в 1С 8.3: ПоказатьПредупреждение, ПоказатьОповещениеПользователя, система взаимодействия и напоминания. Примеры кода и настройка.
В 1С:Предприятии 8 уведомления показывают пользователю важные события: завершение обработки, ошибку проведения документа, напоминание о задаче. Платформа предлагает несколько механизмов — от простого всплывающего оповещения в углу экрана до полноценной системы взаимодействия с обсуждениями. Выбор зависит от того, кто должен увидеть сообщение, требуется ли реакция пользователя и работает ли база в файловом или клиент-серверном режиме.
Основные инструменты разработчика: метод ПоказатьОповещениеПользователя() для ненавязчивых сообщений, ПоказатьПредупреждение() и ПоказатьВопрос() для модального взаимодействия, объект СообщениеПользователю для привязки ошибок к полям формы, а также подсистема напоминаний из Библиотеки стандартных подсистем (БСП) и система взаимодействия для push-уведомлений между пользователями.
Ниже разобраны все варианты с примерами кода, условиями применения и типичными ошибками. Примеры приведены для управляемых форм и тонкого клиента — именно этот режим используется в современных конфигурациях.
Какие виды уведомлений есть в 1С 8 и что выбрать
Платформа 1С 8.3 предлагает пять основных механизмов уведомлений, и у каждого своё назначение. Ошибка выбора приводит либо к тому, что пользователь пропускает важное сообщение, либо к тому, что модальные окна блокируют пакетную обработку данных.
| Механизм | Как выглядит | Когда применять |
|---|---|---|
| ПоказатьОповещениеПользователя | Всплывающее окно в панели оповещений | Информационные сообщения, не требующие реакции |
| ПоказатьПредупреждение | Модальное окно с кнопкой ОК | Критичные сообщения, которые нельзя пропустить |
| ПоказатьВопрос | Модальное окно с вариантами ответа | Запрос подтверждения действия |
| СообщениеПользователю | Строка в панели сообщений с привязкой к полю | Ошибки заполнения при проведении и записи |
| Система взаимодействия | Уведомления в центре оповещений, обсуждения | Сообщения между пользователями, фоновые события |
Общее правило: если пользователь может продолжить работу без прочтения сообщения — используйте оповещение; если сообщение влияет на дальнейшие действия — предупреждение; если сообщение относится к конкретному реквизиту объекта — сообщение пользователю с привязкой к данным.
Как выбрать механизм
Простое оповещение через ПоказатьОповещениеПользователя
Это самый частый способ уведомлений в 1С 8. Метод выводит сообщение в специальной панели оповещений (в тонком клиенте — в правом нижнем углу), не блокирует интерфейс и может содержать навигационную ссылку, по которой пользователь перейдёт к объекту.
ПоказатьОповещениеПользователя(
НСтр("ru = 'Обработка завершения'"),
ПолучитьНавигационнуюСсылку(Объект.Ссылка),
СтрШаблон(НСтр("ru = 'Проведено документов: %1'"), СчетчикДокументов),
БиблиотекаКартинок.Информация,
СтатусОповещенияПользователя.Важное);Параметры метода: текст заголовка, навигационная ссылка (можно опустить), пояснение, картинка и статус (Обычное или Важное). Важное оповещение визуально выделяется и дольше остаётся на экране. Если навигационная ссылка не нужна, передайте Неопределено или пропустите параметр.
Учтите ограничение: оповещение показывается только в том клиентском сеансе, где выполнен код. Если обработка запущена в фоновом задании на сервере, пользователь ничего не увидит — для этого случая нужна система взаимодействия или запись в регистр сведений с последующим чтением на клиенте.
Модальные предупреждения и вопросы
Когда сообщение нельзя пропустить, используйте ПоказатьПредупреждение(). Это асинхронный метод: выполнение кода продолжается после закрытия окна, а результат обрабатывается в описании оповещения. Старый синхронный метод Предупреждение() в тонком клиенте без модальности не работает — используйте только асинхронные варианты.
&НаКлиенте
Процедура УдалитьДокументы(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("УдалитьДокументыЗавершение", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения,
НСтр("ru = 'Отмеченные документы будут удалены. Продолжить?'"),
РежимДиалогаВопрос.ДаНет,
20,
КодВозвратаДиалога.Нет);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьДокументыЗавершение(Результат, ДопПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
УдалитьДокументыНаСервере();
КонецЕсли;
КонецПроцедурыОбратите внимание на параметр таймаута: если пользователь не ответит за указанное число секунд, диалог закроется со значением по умолчанию. Для деструктивных операций значением по умолчанию всегда делайте безопасный вариант (Нет, Отмена) — это защитит от случайного подтверждения и от автоматического срабатывания по таймауту.
Сообщения пользователю с привязкой к полям объекта
Объект СообщениеПользователю предназначен для сообщений об ошибках заполнения. Его ключевое преимущество — привязка к конкретному реквизиту: при двойном щелчке по сообщению курсор переходит к полю с ошибкой. Именно этот механизм используется в типовых конфигурациях при проверке заполнения.
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = НСтр("ru = 'Не заполнен склад отгрузки'");
Сообщение.Поле = "Склад";
Сообщение.ПутьКДанным = "Объект";
Сообщение.УстановитьДанные(Объект);
Сообщение.Сообщить();Сообщения, вызванные в обработчиках ОбработкаПроверкиЗаполнения и ПередЗаписью на сервере, автоматически доставляются клиенту. Если установить параметр Отказ = Истина, запись объекта будет заблокирована — это стандартный способ валидации данных в 1С.
Частая ошибка — забыть заполнить ПутьКДанным при работе из формы. Без него платформа не сможет связать сообщение с элементом управления, и переход к полю не сработает, хотя само сообщение появится.
Напоминания и уведомления по расписанию
Если конфигурация построена на Библиотеке стандартных подсистем (УТ 11, ERP, Бухгалтерия 3.0, ЗУП 3.1), в ней уже есть подсистема «Напоминания пользователя». Она позволяет создавать уведомления, привязанные к времени или к событию объекта, без написания собственных механизмов хранения.
// Требуется подсистема БСП "Напоминания пользователя"
ПараметрыНапоминания = НапоминанияПользователяКлиентСервер.ОписаниеНапоминания();
ПараметрыНапоминания.Пользователь = Пользователи.ТекущийПользователь();
ПараметрыНапоминания.Описание = "Проверить контрагента по реестру";
ПараметрыНапоминания.ВремяСобытия = ТекущаяДатаСеанса() + 3600;
ПараметрыНапоминания.Источник = ДокументСсылка;
НапоминанияПользователя.УстановитьНапоминание(ПараметрыНапоминания);Чтобы напоминания работали, в настройках пользователя должна быть включена соответствующая опция (в типовых: раздел «Администрирование» → «Органайзер» или персональные настройки пользователя). Проверка наступления срока выполняется на клиенте по таймеру, поэтому при закрытом сеансе напоминание покажется при следующем входе.
Если БСП в конфигурации нет, напоминания реализуются собственным регистром сведений (пользователь, дата и время, текст, объект) и обработчиком ожидания на клиенте, который периодически проверяет наступившие записи. Это трудоёмко, поэтому при возможности подключите подсистему БСП.
Уведомления между пользователями через систему взаимодействия
Система взаимодействия (регистрация в настройках базы: «Администрирование» → «Обсуждения») позволяет отправлять уведомления другим пользователям, в том числе когда они не в программе — сообщение появится при следующем входе. Это единственный штатный способ доставить уведомление из фонового задания конкретному пользователю.
Если СистемаВзаимодействия.ИнформационнаяБазаЗарегистрирована() Тогда
ИдентификаторПользователя = СистемаВзаимодействия.ПолучитьИдентификаторПользователя(
ПользователиИнформационнойБазы.НайтиПоИмени("ИвановИИ").УникальныйИдентификатор);
Сообщение = СистемаВзаимодействия.СоздатьСообщение();
Сообщение.Текст = "Загрузка прайсов завершена с ошибками";
Сообщение.Получатели.Добавить(ИдентификаторПользователя);
Сообщение.Записать();
КонецЕсли;Ограничения: система взаимодействия требует регистрации базы на сервере взаимодействия (для файловых баз — через сервис 1С, для клиент-серверных — собственный или арендованный сервер). В крупных базах обсуждения увеличивают нагрузку, поэтому для массовых рассылок лучше подходят внешние каналы — email через интернет-почту или мессенджеры через HTTP-запросы к их API.
Сравнение каналов доставки
Штатно, без внешних сервисов, но требует регистрации базы и работает только внутри 1С
Дошедёт даже при закрытой 1С, но нужна настройка учётной записи и есть задержка доставки
Мгновенная доставка на телефон, но требует разработки HTTP-интеграции и хранения токенов
Проверка результата и типичные ошибки
После внедрения уведомлений проверьте их в реальных сценариях: в тонком клиенте, в веб-клиенте и при фоновом выполнении. Поведение механизмов в разных клиентах отличается — например, в веб-клиенте панель оповещений выглядит иначе, а модальные окна могут блокироваться браузером при неправильной настройке режима использования модальности.
Как проверить результат
Сообщение появляется в панели оповещений, ссылка открывает объект
Сообщения нет — код выполнен на сервере
Двойной щелчок по сообщению активирует нужное поле формы
Сообщение есть, но переход к полю не работает — не задан ПутьКДанным
В назначенное время появляется окно напоминания
Напоминаний нет — отключена опция в настройках пользователя
Пользователь получает сообщение системы взаимодействия
Уведомление теряется — использован клиентский метод на сервере
Что важно запомнить
Информационные уведомления — через ПоказатьОповещениеПользователя, критичные — через ПоказатьПредупреждение с описанием оповещения, ошибки полей — через СообщениеПользователю, периодические — через напоминания БСП, а сообщения между пользователями и из фоновых заданий — через систему взаимодействия. Всегда проверяйте, на клиенте или на сервере выполняется код.
Частые вопросы
Как показать уведомление всем пользователям базы одновременно?
Штатного метода широковещательной рассылки нет. Варианты: сообщение в общее обсуждение системы взаимодействия, запись в регистр сведений с проверкой на клиенте по обработчику ожидания, либо вывод текста в начальной странице (рабочем столе) через настройку форм.
Почему оповещение не появляется при проведении документа?
Проведение выполняется на сервере, а ПоказатьОповещениеПользователя — клиентский метод. Перенесите вызов в клиентский обработчик ПослеЗаписи формы либо используйте СообщениеПользователю, который платформа сама доставит на клиента.
Можно ли отправить уведомление на email или в Telegram из 1С?
Да. Для email используется объект ИнтернетПочта с настроенным профилем, для Telegram — HTTPСоединение с вызовом метода sendMessage API бота. Оба способа работают на сервере и подходят для фоновых заданий, но требуют хранения паролей и токенов — храните их в защищённом хранилище, а не в коде.
Как сделать, чтобы уведомление не исчезало, пока пользователь его не закроет?
Панель оповещений сама по себе не закрывается — сообщение остаётся там до явного закрытия пользователем. Если нужен гарантированный показ, используйте ПоказатьПредупреждение без таймаута: окно будет ждать реакции бессрочно.
Работают ли уведомления в обычном приложении (8.2)?
В обычном приложении действуют другие методы: синхронные Предупреждение() и Вопрос() работают напрямую, а ПоказатьОповещениеПользователя недоступен. Приведённые в статье примеры рассчитаны на управляемые формы 8.3.
Как отключить пользователю лишние всплывающие сообщения?
Часть оповещений управляется настройками конфигурации (например, напоминания — в персональных настройках пользователя). Программно добавьте в код проверку функциональной опции или настройки пользователя перед вызовом уведомления, чтобы не показывать его тем, кто отказался от таких сообщений.