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

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

Как в 1С отправить сообщение пользователю

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

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

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

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

Способ 1. Вывод сообщения через Сообщить()

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

&НаКлиенте

Процедура КомандаПроверить(Команда)

Сообщить("Проверка заполнения завершена. Ошибок не найдено.");

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

У процедуры есть второй параметр — СтатусСообщения, который задаёт визуальное оформление: Обычное, Информация, Важное, Внимание и ОченьВажное. Статусы «Важное» и выше визуально выделяют сообщение, что уместно для предупреждений.

Сообщить("Не заполнен склад отгрузки!", СтатусСообщения.Важное);

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

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

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

&НаСервере

Процедура ПроверитьДанныеНаСервере()

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

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

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

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

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

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

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

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

Способ 3. Всплывающее оповещение ПоказатьОповещениеПользователя()

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

&НаКлиенте

Процедура ПослеЗавершенияОбмена(Результат, ДопПараметры) Экспорт

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

"Обмен завершён",

,

"Загружено 150 документов. Ошибок нет.",

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

СтатусОповещенияПользователя.Информация);

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

Второй параметр — НавигационнаяСсылка: при клике на оповещение откроется указанный объект, например сформированный документ или журнал ошибок. Это удобно, когда пользователь должен перейти к результату операции одним кликом.

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

Способ 4. Диалоги: предупреждение и вопрос пользователю

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

&НаКлиенте

Процедура УдалитьДокумент(Команда)

Оповещение = Новый ОписаниеОповещения("УдалитьДокументЗавершение", ЭтотОбъект);

ПоказатьВопрос(Оповещение,

"Документ будет помечен на удаление. Продолжить?",

РежимДиалогаВопрос.ДаНет,

20,

КодВозвратаДиалога.Нет);

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

&НаКлиенте

Процедура УдалитьДокументЗавершение(Ответ, ДопПараметры) Экспорт

Если Ответ = КодВозвратаДиалога.Да Тогда

ПометитьНаУдалениеНаСервере();

КонецЕсли;

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

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

Способ 5. Сообщение другому пользователю через систему взаимодействия

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

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

Порядок подключения обсуждений
  1. 1
    Откройте раздел Администрирование и найдите настройку Обсуждения (Система взаимодействия)
  2. 2
    Нажмите Настроить и выберите тип сервера взаимодействия
  3. 3
    Зарегистрируйте информационную базу и дождитесь подтверждения подключения
  4. 4
    Проверьте, что у пользователей появилась панель обсуждений и доступен обмен сообщениями

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

bsl
Сообщение = СистемаВзаимодействия.СоздатьСообщение(ИдентификаторОбсуждения);
Сообщение.Текст = "Вам назначена задача: согласовать договор № 145.";
Сообщение.Получатели.Добавить(ИдентификаторПользователяСВ);
Сообщение.Записать();

Как выбрать подходящий способ

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

Сравнение вариантов

Сообщить / СообщениеПользователю

Служебные сообщения в текущем сеансе: ошибки проверки, результаты обработки. Не требуют реакции, легко пропустить

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

Ненавязчивые уведомления о завершении операций. Исчезает само, не подходит для ошибок

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

Когда нужна реакция или гарантированное информирование. Останавливает сценарий до ответа или таймаута

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

Переписка между пользователями, обсуждения объектов, уведомления другому сотруднику. Требует настройки сервера взаимодействия

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

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

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

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

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

Двойной клик по сообщению об ошибке
Норма

Курсор переходит к незаполненному полю формы

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

Ничего не происходит — не задано Поле или ПутьКДанным

Оповещение после длительной операции
Норма

Появляется одно окно с результатом и навигационной ссылкой

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

Несколько наложенных окон или отсутствие оповещения

Обсуждения у пользователя
Норма

Панель обсуждений доступна, сообщения доставляются

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

Панели нет — база не зарегистрирована в системе взаимодействия

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

Итог

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

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

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

Почему Сообщить() не показывает текст пользователю в фоновом задании?

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

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

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

Что делать, если пункт «Обсуждения» не активен в настройках?

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

Можно ли запретить модальные окна и что использовать вместо них?

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

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

Задайте свойство Поле в формате «Товары[0].Цена», где Товары — имя табличной части, индекс — номер строки (начиная с нуля), Цена — имя реквизита. Дополнительно вызовите УстановитьДанные(Объект) или укажите ПутьКДанным, чтобы навигация по двойному клику работала корректно.

Почему оповещения пользователя не появляются в веб-клиенте?

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