Почему не работает параметр «Текст» в условном оформлении поля ввода управляемой формы?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке интерфейсов управляемых форм в 1С часто возникает задача подсказать пользователю назначение реквизита или указать действие по умолчанию. Например, когда поле не заполнено, разработчик хочет вывести внутри него серый поясняющий текст: «Создать новый» или «Будет создан новый документ». Интуитивно многие пытаются настроить такое поведение через стандартный механизм Условное оформление формы, задавая условие на незаполненность реквизита и выбирая параметр Текст. Однако при тестировании выясняется странное поведение: цвет фона или шрифта успешно применяется, а текст поля ввода упорно не меняется.

Разберем причины такого поведения платформы 1С:Предприятие 8.3 и рассмотрим правильные способы решения этой задачи.

Выясним причину: почему условное оформление игнорирует параметр «Текст»

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

  1. Область действия параметра «Текст»: переопределение отображаемого значения через параметр оформления Текст поддерживается платформой исключительно для ячеек таблиц. Когда поле ввода привязано к строке таблицы, система может подменить строковое представление значения в конкретной ячейке.
  2. Одиночные поля формы: если элемент ПолеВвода находится на панели формы отдельно, платформа обрабатывает для него только визуальные параметры оформления (ЦветФона, ЦветТекста, Шрифт) и системные параметры доступности (Видимость, Доступность, ТолькоПросмотр). Параметр оформления Текст в этом случае платформой полностью игнорируется.

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

Решение 1. Использование штатного свойства «ПодсказкаВвода»

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

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

Настроить это свойство можно двумя способами:

  1. Статическая настройка в конфигураторе:

    Выделим нужный элемент ПолеВвода в дереве элементов формы, откроем панель свойств и найдем свойство Подсказка ввода. Введем необходимую фразу, например: Будет создан новый документ.

  2. Динамическое управление из встроенного языка:

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

    Рассмотрим пример кода:

    
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
        Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
            Элементы.ПолеДокументОснование.ПодсказкаВвода = "Будет создан новый документ";
        Иначе
            Элементы.ПолеДокументОснование.ПодсказкаВвода = "Выберите документ...";
        КонецЕсли;
    КонецПроцедуры
    

Решение 2. Использование вспомогательного строкового реквизита

Если требуется, чтобы надпись не просто исчезала при вводе, а отображалась как полноценное расчетное значение или статус, поле ввода можно связать со вспомогательным реквизитом формы строкового типа.

Разберем по шагам реализацию этого подхода:

  1. Добавим на форму реквизит ПредставлениеДокумента с типом Строка.
  2. Свяжем элемент формы с этим реквизитом и установим для элемента свойство ТолькоПросмотр = Истина.
  3. В обработчиках событий формы (например, ПриСозданииНаСервере или ПриЧтенииНаСервере) рассчитаем и установим нужное строковое значение программно.

&НаСервере
Процедура ОбновитьПредставлениеПоля()
    Если Не ЗначениеЗаполнено(Объект.ДокументПартии) Тогда
        ПредставлениеДокумента = "Будет создан новый документ автоматически";
    Иначе
        ПредставлениеДокумента = Строка(Объект.ДокументПартии);
    КонецЕсли;
КонецПроцедуры

Решение 3. Использование декорации-надписи или гиперссылки

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

  1. Добавим элемент вида Декорация - Надпись рядом с полем ввода или вместо него, если реквизит еще не заполнен.
  2. Установим у декорации флаг Гиперссылка.
  3. Назначим обработчик события Нажатие, в котором опишем логику создания или подбора нужного объекта.
  4. Управлять видимостью такой надписи можно как через программный код, так и через свойства видимости группы элементов.

Решение 4. Переопределение представления ссылки через модуль менеджера

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

В модуле менеджера соответствующего объекта конфигурации определим процедуру ОбработкаПолученияПредставления:


Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Представление = "Документ по умолчанию (будет создан)";
КонецПроцедуры

Этот подход гарантирует единообразное отображение представления ссылки во всех полях ввода и списках конфигурации.

← На главную