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