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

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

Как оповестить пользователя в 1С: способы, код и настройка

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

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

Частая ошибка начинающих разработчиков — использовать один метод «Сообщить» для всех случаев. В результате важные предупреждения тонут в потоке служебных сообщений, а формы не узнают об изменениях данных в других окнах. Ниже разобраны основные способы оповещения с примерами кода, условиями применения и ограничениями каждого.

Материал ориентирован на управляемые формы (режим «Такси»), поскольку именно в них работает большинство современных конфигураций. Для обычных форм часть механизмов недоступна или работает иначе — это оговорено отдельно.

Как выбрать способ оповещения под задачу

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

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

Как выбрать действие

Нужно вывести текст о результате операции в текущем сеансеИспользуйте Сообщить() или объект СообщениеПользователю
Нужно короткое всплывающее уведомление, не требующее вниманияИспользуйте ПоказатьОповещениеПользователя()
Нужен ответ пользователя: Да/Нет, ОК, выбор вариантаИспользуйте ПоказатьВопрос() или ПоказатьПредупреждение() с описанием оповещения
Нужно сообщить другой открытой форме об изменении данныхИспользуйте Оповестить() и обработчик ОбработкаОповещения
Нужно напомнить о событии в будущемИспользуйте подсистему напоминаний БСП или регламентное задание

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

Простые сообщения через Сообщить и СообщениеПользователю

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

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

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Не заполнен контрагент в документе";

Сообщение.Поле = "Контрагент";

Сообщение.УстановитьДанные(Объект);

Сообщение.Сообщить();

Такое сообщение отображается рядом с полем «Контрагент» на форме документа. Это стандартный способ валидации при проведении и записи: пользователь видит не абстрактную ошибку, а конкретное место, которое нужно исправить.

Всплывающие оповещения и диалоги с пользователем

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

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

"Заказ создан",

ПолучитьНавигационнуюСсылку(СсылкаНаЗаказ),

"Заказ № " + НомерЗаказа,

БиблиотекаКартинок.Информация);

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

Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопрос", ЭтотОбъект);

ПоказатьВопрос(Оповещение, "Удалить помеченные элементы?",

РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет);

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

Оповещения между формами через Оповестить

Когда одна форма должна узнать о событии в другой — например, список документов должен обновиться после записи нового документа — используется механизм оповещений. Метод Оповестить() рассылает событие всем открытым формам, а каждая форма решает, реагировать ли на него, в обработчике ОбработкаОповещения.

// В форме, где произошло событие:

Оповестить("ЗаписанНовыйДоговор", СсылкаНаДоговор, ЭтотОбъект);

// В форме списка:

&НаКлиенте

Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

Если ИмяСобытия = "ЗаписанНовыйДоговор" Тогда

Элементы.Список.Обновить();

КонецЕсли;

КонецПроцедуры

Имя события — произвольная строка, но она должна быть уникальной и согласованной между формами. Платформа также рассылает стандартные оповещения, например «Запись_Номенклатура» при записи элемента справочника, поэтому для своих событий выбирайте имена, которые не пересекаются со стандартными.

Дополнительно существует ОповеститьОбИзменении(Ссылка) — платформа сама уведомит все формы, где отображается этот объект, и они обновят представление данных. Это самый простой способ синхронизации, если речь идёт именно об изменении объекта базы данных.

Типичные ошибки
01
Опечатка в имени события в одной из форм — оповещение молча не срабатывает, ошибки в журнале не будет
02
Вызов Оповестить до записи объекта — форма-приёмник обновляет список, но данных в базе ещё нет
03
Игнорирование параметра Источник — форма реагирует на собственные же оповещения и уходит в цикл
04
Отсутствие обновления списка в ОбработкаОповещения — событие получено, но пользователь ничего не видит

Напоминания и отложенные уведомления

Если оповестить пользователя нужно не сейчас, а в заданный момент — о сроке оплаты, окончании договора, плановой задаче, — разовые методы не подходят. В типовых конфигурациях на базе Библиотеки стандартных подсистем есть механизм «Напоминания»: пользователь или программа создаёт напоминание с датой и текстом, и в назначенное время появляется окно уведомления.

Программно напоминание создаётся через подсистему НапоминанияПользователя. Пользователь также может создать напоминание вручную из карточки объекта, если подсистема включена в настройках. Проверьте, что в конфигурации подсистема подключена и у пользователя есть соответствующие права.

Для массовых или системных уведомлений — например, ежедневной сводки менеджерам — применяют регламентные задания. Задание по расписанию формирует данные и рассылает уведомления по электронной почте через объект ИнтернетПочта или через встроенную подсистему работы с почтовыми сообщениями БСП.

Порядок настройки email-уведомлений через регламентное задание
  1. 1
    Создайте общий модуль с процедурой рассылки, которая формирует список получателей и текст письма
  2. 2
    Настройте учётную запись почты в подсистеме «Работа с почтовыми сообщениями» (сервер, порт, аутентификация)
  3. 3
    Создайте регламентное задание, укажите расписание и метод — вашу процедуру рассылки
  4. 4
    Убедитесь, что на сервере 1С разрешено выполнение регламентных заданий и есть доступ к почтовому серверу
  5. 5
    Отправьте тестовое письмо и проверьте журнал регистрации на ошибки доставки

Сравнение способов оповещения

Ниже сведены основные характеристики механизмов, чтобы быстро сориентироваться при выборе.

СпособРеакция пользователяКогда срабатываетТипичное применение
Сообщить / СообщениеПользователюНе требуетсяСразуОшибки заполнения, лог операций
ПоказатьОповещениеПользователяНе требуетсяСразуПодтверждения завершения операции
ПоказатьВопрос / ПоказатьПредупреждениеОбязательнаСразуПодтверждение удаления, критичные предупреждения
Оповестить между формамиНе требуетсяСразуОбновление открытых списков и карточек
НапоминанияНеобязательнаПо расписаниюСроки оплат, задачи, события
Email через регламентное заданиеНе требуетсяПо расписаниюСводки, уведомления вне 1С

Сравнение вариантов диалогов

ПоказатьВопрос

Нужен осознанный выбор пользователя; требует ОписаниеОповещения и отдельной процедуры-обработчика

ПоказатьПредупреждение

Нужно лишь донести критичную информацию; кнопка одна, логика проще

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

Информация второстепенная; не прерывает работу, но может быть не замечено

Проверка результата и отладка

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

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

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

Оповещение между формами
Норма

Форма-приёмник обновила данные сразу после события

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

Данные обновляются только после ручного обновления списка

Диалог с вопросом
Норма

После ответа выполняется нужная ветка кода

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

Ошибка о модальности или код выполняется до ответа

Email-уведомление
Норма

Письмо доставлено, в журнале регистрации нет ошибок

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

В журнале ошибки аутентификации или подключения к SMTP

Напоминание
Норма

Окно напоминания появилось в заданное время

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

Напоминание создано, но не показывается — проверьте права и настройки подсистемы

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

Итог

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

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

Часто задаваемые вопросы

Почему Оповестить не срабатывает в другой форме?

Чаще всего не совпадает имя события в Оповестить и в ОбработкаОповещения, либо форма-приёмник не открыта в момент вызова — оповещения получают только открытые формы. Также проверьте, что обработчик объявлен на клиенте и не отфильтровывает событие по параметру Источник.

Как показать сообщение конкретному пользователю, а не всем?

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

Можно ли отправить push-уведомление на мобильное приложение 1С?

Да, в мобильной платформе есть механизм локальных уведомлений и поддержка push-уведомлений через сервисы доставки. Это отдельная разработка под мобильную платформу с собственным API, отличным от стандартных методов тонкого клиента.

Чем отличается Сообщить от СообщениеПользователю?

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

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

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

Работают ли оповещения между формами в веб-клиенте?

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