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

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

1С: как показать подсказку программно

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

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

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

Свойство «Подсказка»: базовый способ пояснить поле

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

Программно значение устанавливается обращением к элементу формы по имени:

Элементы.Комментарий.Подсказка = "Укажите причину возврата товара";

Элементы.Комментарий.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;

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

Подсказка ввода: текст внутри пустого поля

Подсказка ввода — это серый текст внутри пустого поля, который исчезает, как только пользователь начинает печатать. Классический пример: «Начните вводить наименование…» в поле поиска. За это отвечает свойство ПодсказкаВвода, доступное полям ввода и полям таблицы.

Элементы.Наименование.ПодсказкаВвода = "Например: Кресло офисное";

Типичный сценарий программного изменения — динамическая подсказка, зависящая от контекста. Например, в документе поступления поле «Договор» может подсказывать разный текст в зависимости от выбранного вида операции:

Если Объект.ВидОперации = Перечисления.ВидыОпераций.Покупка Тогда

Элементы.Договор.ПодсказкаВвода = "Выберите договор с поставщиком";

Иначе

Элементы.Договор.ПодсказкаВвода = "Выберите договор с покупателем";

КонецЕсли;

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

Расширенная подсказка: форматированный текст и картинки

Когда обычной строки недостаточно — нужен многострочный текст, форматирование, гиперссылки или картинка — используется расширенная подсказка. У элемента формы есть свойство РасширеннаяПодсказка, которое возвращает объект-расширение с собственными свойствами Заголовок, Картинка и РастягиватьПоГоризонтали.

РасшПодсказка = Элементы.СуммаДокумента.РасширеннаяПодсказка;

РасшПодсказка.Заголовок = "Сумма указывается с НДС. " +

"При превышении лимита документ уходит на согласование.";

Элементы.СуммаДокумента.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;

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

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

Разовые сообщения: предупреждения, оповещения и сообщения пользователю

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

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

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

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

"Не заполнен склад отгрузки. Документ не будет проведён.",

10, // таймаут в секундах, 0 — без ограничения

"Проверка заполнения");

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

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

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

Объект СообщениеПользователю — стандартный способ сообщить об ошибке с подсветкой конкретного поля. Если заполнить свойства Поле и ПутьКДанным, сообщение «привяжется» к элементу формы: при двойном клике по сообщению курсор перейдёт в нужное поле, а само поле будет подсвечено.

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

Сообщение.Текст = "Количество не может быть отрицательным";

Сообщение.Поле = "Товары[0].Количество";

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

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

Сравнение способов показа подсказки

Подсказка / ПодсказкаВвода

Постоянная подсказка у поля. Подходит для пояснений формата ввода. Не привлекает внимания при ошибке.

Расширенная подсказка

Длинные пояснения с форматированием. Открывается по кнопке, не загромождает форму.

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

Модальное окно, требует реакции. Только для критичных сообщений — злоупотребление раздражает пользователей.

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

Немодальное уведомление об успешных действиях. Не подходит для ошибок — легко пропустить.

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

Ошибки заполнения с привязкой к полю. Стандарт для проверок в обработчиках.

Пошаговый пример: динамическая подсказка на форме документа

Соберём типовую задачу целиком: при изменении вида операции менять подсказку у поля «Договор» и показывать расширенное пояснение. Все действия выполняются в модуле формы документа.

Порядок действий
  1. 1
    Откройте модуль формы документа и создайте процедуру УстановитьПодсказки() без параметров.
  2. 2
    Внутри процедуры задайте Элементы.Договор.ПодсказкаВвода в зависимости от значения Объект.ВидОперации.
  3. 3
    Установите Элементы.Договор.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка и заполните Элементы.Договор.РасширеннаяПодсказка.Заголовок.
  4. 4
    Вызовите УстановитьПодсказки() из обработчиков ПриСозданииНаСервере и ВидОперацииПриИзменении.
  5. 5
    Откройте форму в режиме предприятия и проверьте: подсказка ввода видна в пустом поле, кнопка с вопросом открывает расширенный текст, при смене вида операции текст меняется.

Ключевой момент — обновлять подсказки и при открытии формы, и при изменении данных. Если вызвать установку только в ПриСозданииНаСервере, то после изменения вида операции пользователь увидит устаревший текст.

&НаКлиенте

Процедура ВидОперацииПриИзменении(Элемент)

УстановитьПодсказки();

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

&НаСервере

Процедура УстановитьПодсказки()

Если Объект.ВидОперации = Перечисления.ВидыОпераций.Покупка Тогда

Элементы.Договор.ПодсказкаВвода = "Договор с поставщиком";

Элементы.Договор.РасширеннаяПодсказка.Заголовок =

"Доступны только договоры с видом «С поставщиком».";

Иначе

Элементы.Договор.ПодсказкаВвода = "Договор с покупателем";

Элементы.Договор.РасширеннаяПодсказка.Заголовок =

"Доступны только договоры с видом «С покупателем».";

КонецЕсли;

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

Частые ошибки и ограничения

Первая типичная ошибка — обращение к Элементы в серверном контексте объекта, а не формы. Свойства элементов формы доступны только в модуле формы; в модуле объекта или менеджера их нет, и попытка обращения приведёт к ошибке исполнения.

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

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

Типичные ошибки
01
Использование Предупреждение() вместо ПоказатьПредупреждение() — код падает в веб-клиенте и при запрете модальности.
02
Установка подсказки только при создании формы — после изменения данных пользователь видит устаревший текст.
03
Обращение к Элементы формы из модуля объекта — ошибка исполнения, свойства элементов доступны только в модуле формы.
04
Злоупотребление модальными предупреждениями для мелких подсказок — пользователи начинают закрывать окна не читая.
05
Привязка СообщениеПользователю к полю без УстановитьДанные() — подсветка поля не работает.

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

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

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

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

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

Подсказка ввода в пустом поле
Норма

Серый текст виден до начала ввода и исчезает при первом символе

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

Текст не отображается или перекрывает введённое значение

Кнопка расширенной подсказки
Норма

Значок вопроса рядом с полем, по клику открывается полный текст

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

Кнопки нет — проверьте ОтображениеПодсказки и заполненность Заголовок

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

Двойной клик по сообщению переводит курсор в нужное поле

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

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

Динамическое обновление
Норма

При смене условий текст подсказки меняется сразу

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

Текст остаётся старым — обновление вызывается не из всех нужных обработчиков

FAQ

Как показать подсказку программно в обычной форме (не управляемой)?

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

Можно ли показать подсказку у элемента, которого нет на форме?

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

Чем отличается Подсказка от ПодсказкаВвода?

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

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

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

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

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

Можно ли вставить ссылку внутрь подсказки?

Да, через расширенную подсказку: сформируйте объект ФорматированнаяСтрока с фрагментом-ссылкой и присвойте его свойству Заголовок. Клик по ссылке обрабатывается в обработчике ОбработкаНавигационнойСсылки формы, где можно открыть нужный объект или внешнюю страницу.

Итог

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

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