Как настроить вывод текста и цвета вместо числового значения в колонке списка 1С

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

При разработке и доработке управляемых форм 1С программисты часто сталкиваются с ситуацией, когда в колонке таблицы выводится понятный текстовый статус (например, «Сквитировано») с определенным цветом фона или текста, хотя реквизит базы данных имеет числовой тип (например, 1 или 0). При попытке найти, где именно задано такое поведение, разработчик открывает свойства динамического списка, проверяет его запрос и условное оформление, но не находит там никаких настроек. Разберем подробнее, почему так происходит, где именно скрываются эти настройки и как правильно реализовывать подобную функциональность в соответствии со стандартами 1С.

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

Проанализируем архитектуру управляемых форм. В платформе 1С:Предприятие 8.3 механизм условного оформления (УО) разделен на два независимых уровня:

  1. Условное оформление динамического списка (ДинамическийСписок.УсловноеОформление): обрабатывается при формировании запроса к базе данных и компоновке результатов. Оно отвечает за оформление данных самого списка.
  2. Условное оформление формы (ЭтаФорма.УсловноеОформление): применяется на клиенте непосредственно к элементам интерфейса управляемой формы.

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

Как условное оформление меняет число на текстовое представление

Механизм условного оформления платформы 1С позволяет изменять не только цвета (ЦветФона, ЦветТекста) или параметры шрифта, но и текстовое представление значения с помощью параметра «Текст».

При этом важно понимать следующие технические нюансы:

Пошаговая настройка условного оформления формы в конфигураторе

Рассмотрим по шагам, как интерактивно проверить или настроить вывод текста вместо числа в управляемой форме:

  1. Откроем нужную управляемую форму в режиме конфигуратора.
  2. В окне элементов и реквизитов формы выделим корень — элемент «Форма» (самый верхний элемент дерева).
  3. В панели свойств формы найдем строку «Условное оформление» (строка УсловноеОформление) и нажмем кнопку открытия диалога.
  4. В открывшемся окне создадим новый элемент оформления.
  5. В разделе «Оформление» укажем необходимые параметры:
    • В строке Текст введем нужную строку (например, Сквитировано).
    • В строке ЦветТекста или ЦветФона выберем желаемый цвет.
  6. В разделе «Отбор» добавим условие равенства: левое значение — поле списка (например, Список.СтатусКвитирования), вид сравнения — Равно, правое значение — число 1.
  7. В разделе «Оформляемые поля» укажем конкретный элемент таблицы формы (колонку), к которому должно применяться данное оформление.

Программная установка условного оформления в ПриСозданииНаСервере

По стандартам разработки фирмы «1С» интерактивное добавление условного оформления в свойствах формы или списка не рекомендуется. Настройки, сделанные мышью в конфигураторе, усложняют групповую разработку, контроль версий (Git / EDT) и могут тихо сломаться при переименовании реквизитов.

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// 1. Создаем новый элемент условного оформления формы
	ЭлементОформления = УсловноеОформление.Элементы.Добавить();
	
	// 2. Устанавливаем оформляемые поля (колонку таблицы)
	ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("СписокСтатусКвитирования");
	ОформляемоеПоле.Использование = Истина;
	
	// 3. Задаем отбор (условие, при котором сработает подмена)
	ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.СтатусКвитирования");
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = 1;
	ЭлементОтбора.Использование = Истина;
	
	// 4. Устанавливаем параметры отображения (Текст и Цвет)
	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", "Сквитировано");
	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Зеленый);
	
КонецПроцедуры

Написание оформления кодом гарантирует, что синтаксический контроль и автоматическая проверка кода (АПК) вовремя обнаружат ошибки при переименовании полей.

Альтернативные способы вывода текста вместо чисел

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

  1. Конструкция ВЫБОР КОГДА в запросе динамического списка:

    Текст подставляется непосредственно на уровне SQL-запроса базы данных. В этом случае запрос списка выглядит следующим образом:

    
    ВЫБОР 
    	КОГДА Квитанция.Статус = 1 ТОГДА "Сквитировано"
    	КОГДА Квитанция.Статус = 0 ТОГДА "Не сквитировано"
    	ИНАЧЕ "Не определено"
    КОНЕЦ КАК СтатусПредставление
    

    Плюс: Условное оформление требуется только для цвета, а сам текст формируется автоматически.
    Минус: По текстовому полю сортировка происходит по алфавиту, а не по исходному порядку чисел.

  2. Событие ПриПолученииДанныхНаСервере таблицы формы:

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

  3. Использование свойства СписокВыбора элемента управления:

    Для элемента формы задается соответствие значений (например, 1 — "Сквитировано"). Однако данный способ лучше подходит для редактируемых полей ввода в формах объектов, а в динамических списках не всегда обеспечивает корректное отображение без дополнительной настройки.

Таким образом, если в форме списка вы видите текстовые статусы в числовой колонке, первым делом проверяйте условное оформление формы и код процедуры ПриСозданииНаСервере.

← На главную