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