При разработке интерфейсов управляемых форм в 1С часто возникает задача подсказать пользователю назначение реквизита или указать действие по умолчанию. Например, когда поле не заполнено, разработчик хочет вывести внутри него серый поясняющий текст: «Создать новый» или «Будет создан новый документ». Интуитивно многие пытаются настроить такое поведение через стандартный механизм Условное оформление формы, задавая условие на незаполненность реквизита и выбирая параметр Текст. Однако при тестировании выясняется странное поведение: цвет фона или шрифта успешно применяется, а текст поля ввода упорно не меняется.
Разберем причины такого поведения платформы 1С:Предприятие 8.3 и рассмотрим правильные способы решения этой задачи.
Механизм условного оформления управляемой формы разрабатывался в первую очередь для работы с табличными данными — динамическими списками, табличными частями, таблицами и деревьями значений. Для отдельных элементов управления, расположенных непосредственно на форме вне таблиц, действуют строгие ограничения платформы:
Текст поддерживается платформой исключительно для ячеек таблиц. Когда поле ввода привязано к строке таблицы, система может подменить строковое представление значения в конкретной ячейке.ПолеВвода находится на панели формы отдельно, платформа обрабатывает для него только визуальные параметры оформления (ЦветФона, ЦветТекста, Шрифт) и системные параметры доступности (Видимость, Доступность, ТолькоПросмотр). Параметр оформления Текст в этом случае платформой полностью игнорируется.Таким образом, настроить подмену текста для отдельного поля через условное оформление невозможно на уровне архитектуры платформы. Для этой задачи предназначены другие механизмы.
Проанализируем базовый способ, заложенный разработчиками платформы. Для вывода серого неактивного текста в незаполненном поле ввода существует специальное свойство — ПодсказкаВвода (InputHint).
Когда поле не содержит значения, в нем автоматически отображается заданная строка полупрозрачным серым шрифтом. Как только пользователь активирует поле или вводит данные, подсказка исчезает. Если данные удаляются, подсказка появляется вновь.
Настроить это свойство можно двумя способами:
Выделим нужный элемент ПолеВвода в дереве элементов формы, откроем панель свойств и найдем свойство Подсказка ввода. Введем необходимую фразу, например: Будет создан новый документ.
Если текст подсказки должен зависеть от условий в документе, вида операции или прав текущего пользователя, мы можем изменять его программно как на клиенте, так и на сервере.
Рассмотрим пример кода:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
Элементы.ПолеДокументОснование.ПодсказкаВвода = "Будет создан новый документ";
Иначе
Элементы.ПолеДокументОснование.ПодсказкаВвода = "Выберите документ...";
КонецЕсли;
КонецПроцедуры
Если требуется, чтобы надпись не просто исчезала при вводе, а отображалась как полноценное расчетное значение или статус, поле ввода можно связать со вспомогательным реквизитом формы строкового типа.
Разберем по шагам реализацию этого подхода:
ПредставлениеДокумента с типом Строка.ТолькоПросмотр = Истина.ПриСозданииНаСервере или ПриЧтенииНаСервере) рассчитаем и установим нужное строковое значение программно.
&НаСервере
Процедура ОбновитьПредставлениеПоля()
Если Не ЗначениеЗаполнено(Объект.ДокументПартии) Тогда
ПредставлениеДокумента = "Будет создан новый документ автоматически";
Иначе
ПредставлениеДокумента = Строка(Объект.ДокументПартии);
КонецЕсли;
КонецПроцедуры
В сценариях, когда надпись «Создать новый» подразумевает интерактивное действие, лучшей практикой будет использование элемента формы Декорация (вид Надпись).
Декорация - Надпись рядом с полем ввода или вместо него, если реквизит еще не заполнен.Гиперссылка.Нажатие, в котором опишем логику создания или подбора нужного объекта.Если поле ввода отображает ссылочный тип данных (например, справочник или документ), и требуется изменить текст уже выбранного значения в зависимости от условий, не следует прибегать к условному оформлению формы. Для этого в платформе предусмотрен механизм переопределения представления.
В модуле менеджера соответствующего объекта конфигурации определим процедуру ОбработкаПолученияПредставления:
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Представление = "Документ по умолчанию (будет создан)";
КонецПроцедуры
Этот подход гарантирует единообразное отображение представления ссылки во всех полях ввода и списках конфигурации.