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