Разработка и Конфигурация · 9 мин
Как вывести сообщение пользователю в управляемой форме 1С
Как вывести сообщение пользователю в управляемой форме 1С: объект СообщениеПользователю, привязка к полям, СтатусСообщения, ПоказатьОповещениеПользователя.
В управляемых формах 1С классическое Сообщить() работает иначе, чем в обычных формах: сообщение уходит в окно сообщений без привязки к конкретному полю, а при тонком клиенте может вообще потеряться среди служебного вывода. Правильный инструмент — объект СообщениеПользователю, который поддерживает привязку к данным объекта, подсветку поля с ошибкой и контекстное отображение рядом с элементом формы.
Основная сложность для разработчиков — серверный контекст. В управляемой форме большинство проверок выполняется на сервере (&НаСервере или в модуле объекта), а интерактивные диалоги там недоступны. Поэтому сообщения формируются на сервере, накапливаются и выводятся пользователю после возврата управления.
Ниже разобраны рабочие способы: от простого вывода текста до привязки сообщения к реквизиту объекта с автоматической подсветкой ошибочного поля, а также альтернативы — оповещения и предупреждения, которые уместны в других сценариях.
Базовый вывод сообщения через СообщениеПользователю
Объект создаётся конструктором Новый СообщениеПользователю, после чего заполняются свойства и вызывается метод Сообщить(). Минимальный вариант — только текст:
&НаСервере
Процедура ПроверитьДанныеНаСервере()
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не заполнен контрагент в документе.";
Сообщение.Сообщить();
КонецПроцедуры
Такое сообщение попадёт в панель сообщений в нижней части окна. Пользователь увидит его после завершения серверного вызова. Если проверок несколько, можно выводить сообщения по одному в цикле — платформа корректно покажет все.
Важно понимать: метод Сообщить() у объекта СообщениеПользователю работает и на сервере, и на клиенте. Это делает его универсальным, в отличие от интерактивных диалогов, доступных только на клиенте.
Привязка сообщения к полю формы
Главное преимущество СообщениеПользователю — возможность указать, к какому реквизиту относится текст. Тогда платформа подсветит поле, и при двойном щелчке по сообщению курсор перейдёт к нему. Для этого заполняются свойства Поле и ПутьКДанным.
Сообщение для реквизита объекта
Если форма работает с объектом (например, документом), привязка выполняется к реквизиту объекта:
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Поле ""Контрагент"" не заполнено";
Сообщение.Поле = "Контрагент";
Сообщение.ПутьКДанным = "Объект";
Сообщение.Сообщить();
Свойство Поле содержит имя реквизита, а ПутьКДанным — путь к основному реквизиту формы (обычно Объект). При такой связке платформа найдёт элемент формы, отображающий это поле, и выделит его.
Сообщение для строки табличной части
Для табличной части дополнительно указывается индекс строки через свойство КлючДанных не нужен — достаточно сформировать имя поля с индексом:
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "В строке 2 не указано количество";
Сообщение.Поле = "Товары[1].Количество";
Сообщение.ПутьКДанным = "Объект";
Сообщение.Сообщить();
Индексация в пути — с нуля, поэтому вторая строка имеет индекс 1. При ошибке в индексе или имени поля привязка просто не сработает: сообщение выведется без подсветки, исключения не возникнет.
- 1Создайте объект: Новый СообщениеПользователю
- 2Заполните Текст понятной формулировкой с указанием проблемы
- 3Укажите Поле — имя реквизита объекта или реквизита формы
- 4Укажите ПутьКДанным — обычно Объект для формы объекта
- 5Вызовите Сообщить() и проверьте, что поле подсвечивается при двойном щелчке по сообщению
Идентификатор назначения и сообщения из модуля объекта
Когда проверка выполняется в модуле объекта (например, в ОбработкаПроверкиЗаполнения), сообщения выводятся через параметр Отказ и стандартный механизм. Но если нужно вывести сообщение вне проверки заполнения, потребуется свойство ИдентификаторНазначения — иначе сообщение может не отобразиться в нужной форме.
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Сумма по документу превышает лимит.";
Сообщение.КлючДанных = Объект.Ссылка;
Сообщение.ИдентификаторНазначения = ИдентификаторФормы;
Сообщение.Сообщить();
Свойство КлючДанных содержит ссылку на объект — оно используется платформой для навигации к объекту из сообщения. ИдентификаторНазначения — это УникальныйИдентификатор формы, в панель сообщений которой нужно направить вывод. В модуле формы этот идентификатор доступен как УникальныйИдентификатор (свойство формы).
Если сообщение формируется в общем модуле, передайте туда идентификатор формы параметром. Это типовой приём для проверок, вынесенных из формы в переиспользуемый код.
Альтернативы: оповещения, предупреждения и статус
Не каждая ситуация требует сообщения в панель. У платформы есть несколько механизмов с разным поведением, и выбор зависит от срочности и контекста.
ПоказатьОповещениеПользователя() выводит всплывающее окно в правом нижнем углу, которое исчезает само. Подходит для информационных уведомлений: «Документ записан», «Печатная форма сформирована». Работает только на клиенте.
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
ПоказатьОповещениеПользователя(
"Запись выполнена",
,
"Документ успешно записан",
БиблиотекаКартинок.Информация);
КонецПроцедуры
ПоказатьПредупреждение() — модальный диалог, требующий нажатия кнопки. Используйте его, когда пользователь обязан прочитать текст перед продолжением. Тоже только на клиенте, с обработчиком оповещения при необходимости.
Сравнение вариантов
Ошибки заполнения, привязка к полям, работа на сервере. Сообщение остаётся в панели до закрытия.
Несрочные информационные уведомления. Только клиент, исчезает автоматически, без привязки к полям.
Критичная информация, требующая подтверждения. Только клиент, блокирует работу до нажатия кнопки.
Быстрая отладка. Нет привязки к полям и управления назначением, в продуктивном коде нежелательно.
Проверка результата и типичные ошибки
После внедрения проверьте поведение вручную: оставьте обязательное поле пустым, вызовите проверку и убедитесь, что сообщение появилось в панели, а двойной щелчок по нему активирует нужное поле. Если подсветки нет — почти всегда причина в неверном ПутьКДанным или имени поля.
Для реквизитов формы (не объекта) ПутьКДанным не указывается, а в Поле пишется имя реквизита формы. Смешение этих вариантов — самая частая причина «молчаливой» потери привязки.
Как проверить результат
Текст виден в панели сообщений после серверного вызова
Панель пуста — проверьте ИдентификаторНазначения и контекст вызова
Двойной щелчок по сообщению активирует нужное поле, оно подсвечено
Фокус не переходит — неверные Поле или ПутьКДанным
Подсвечивается ячейка именно той строки, где ошибка
Подсвечивается другая строка — индекс в Поле смещён
FAQ
Почему сообщение не появляется, хотя Сообщить() вызван?
Чаще всего код выполняется в контексте, где сообщение уходит «в никуда»: например, в фоновом задании или при несовпадающем ИдентификаторНазначения. Проверьте, что вызов происходит в контексте формы, и что идентификатор формы передан корректно. Также убедитесь, что процедура действительно выполняется — поставьте точку останова.
Как вывести сообщение без привязки к объекту, к реквизиту формы?
Заполните только Поле именем реквизита формы, а ПутьКДанным оставьте пустым. Платформа найдёт элемент формы, связанный с этим реквизитом, и подсветит его.
Можно ли очистить ранее выведенные сообщения?
Да, методом глобального контекста или объекта формы. В типовых механизмах проверки заполнения платформа очищает старые сообщения автоматически при повторной проверке. При ручном выводе ориентируйтесь на то, что сообщения живут в панели до закрытия формы или явной очистки.
Чем отличается КлючДанных от ПутьКДанным?
КлючДанных — это ссылка на объект информационной базы, используется для навигации к объекту из сообщения. ПутьКДанным — строковый путь к реквизиту формы (обычно «Объект»), нужен для привязки сообщения к элементу управления. Это независимые свойства, заполнять можно оба.
Как вывести сообщение из ОбработкаПроверкиЗаполнения в модуле объекта?
Там используется стандартный механизм: создаётся СообщениеПользователю с заполненным Полем, вызывается Сообщить(), а параметру Отказ присваивается Истина. Платформа сама доставит сообщение в форму — ИдентификаторНазначения указывать не нужно.
Что важно запомнить
В управляемой форме используйте СообщениеПользователю с привязкой через Поле и ПутьКДанным — так пользователь получит подсветку ошибочного поля. Для информационных уведомлений подойдёт ПоказатьОповещениеПользователя, для критичных — ПоказатьПредупреждение, но оба работают только на клиенте. Избегайте массового вывода сообщений в цикле и проверяйте привязку двойным щелчком по сообщению.