Условное оформление в СКД 1С: как задать в настройках и программно
Элемент условного оформления СКД — это тройка: Оформление
(УстановитьЗначениеПараметра("ЦветФона", …)), Отбор
(когда применять) и Поля (к чему применять). Если коллекция
Поля пуста — оформление ложится на всю строку;
если в ней указаны конкретные поля — только на них.
Программно элемент добавляется в
Настройки.УсловноеОформление.Элементы.Добавить(). Область применения
по уровням отчёта задаётся флагами ИспользоватьВГруппировке,
ИспользоватьВЗаголовке, ИспользоватьВОбщемИтоге и другими.
Как задать условное оформление в СКД
В конструкторе схемы условное оформление отчёта СКД настраивается на закладке
Настройки → Условное оформление. Каждая строка списка — отдельный элемент
типа ЭлементУсловногоОформленияКомпоновкиДанных с четырьмя колонками:
- Оформление — набор параметров:
ЦветФона,ЦветТекста,Шрифт,Формат,Текст,Отступ. - Условие — отбор, при выполнении которого оформление применяется. Пустое условие означает «всегда».
- Оформляемые поля — на какие поля ложится оформление. Пусто — на всю строку.
- Представление — имя элемента для пользователя в настройках отчёта.
Тот же список доступен пользователю в форме отчёта, если у элемента выставлен
РежимОтображения и задан
ИдентификаторПользовательскойНастройки — тогда правило оформления можно
менять без конфигуратора.
Область применения: поля и группировки
Область применения условного оформления СКД задаётся в двух независимых плоскостях.
Первая — горизонтальная: коллекция Поля типа
ОформляемыеПоляКомпоновкиДанных. Вторая — вертикальная:
флаги применения по уровням отчёта у самого элемента.
ПолеОформления = Элемент.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Остаток");
ПолеОформления.Использование = Истина;
У добавленного поля заполняются два свойства: Поле (путь к данным через
Новый ПолеКомпоновкиДанных(<ПутьКДаннымПоля>)) и
Использование. Вертикальную область применения задают булевы свойства
элемента:
ИспользоватьВГруппировкеиИспользоватьВИерархическойГруппировке— строки группировок;ИспользоватьВЗаголовке,ИспользоватьВЗаголовкеПолей,ИспользоватьВЗаголовкеПолейРесурсов— шапки;ИспользоватьВОбщемИтогеиИспользоватьВЗаголовкеПолейРесурсовОбщегоИтога— строка итогов;ИспользоватьВОтбореиИспользоватьВПараметрах— области вывода настроек.
Если оформление «поехало» на итоги или на шапку — почти всегда причина в том, что эти флаги оставлены по умолчанию. Снимите лишние явно.
Условия отбора для оформления
Условие — это обычный отбор компоновки данных: коллекция
Элемент.Отбор.Элементы типа
КоллекцияЭлементовОтбораКомпоновкиДанных. Элементы внутри неё соединяются
по «И», для «ИЛИ» добавляется группа.
ЭлементОтбора = Элемент.Отбор.Элементы.Добавить(
Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Остаток");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ЭлементОтбора.ПравоеЗначение = 0;
ЭлементОтбора.Использование = Истина;
Виды сравнения берутся из ВидСравненияКомпоновкиДанных:
Больше, МеньшеИлиРавно, ВСписке,
ВИерархии, Заполнено, НеЗаполнено,
НачинаетсяС и другие. В ЛевоеЗначение всегда кладётся
ПолеКомпоновкиДанных, в ПравоеЗначение — константа, ссылка
или другое поле.
Оформление по значению ресурса: выделить цветом строку
Классическая задача — в СКД выделить цветом строку, если ресурс вышел за границу:
отрицательный остаток, просроченная задолженность, нулевая маржа. Правило одно:
чтобы покрасить строку целиком, коллекцию Поля оставляют
пустой.
Элемент.Оформление.УстановитьЗначениеПараметра(
"ЦветФона", Новый Цвет(255, 230, 230));
Элемент.Оформление.УстановитьЗначениеПараметра(
"ЦветТекста", Новый Цвет(180, 0, 0));
Элемент.Оформление.УстановитьЗначениеПараметра(
"Шрифт", Новый Шрифт(, , Истина));
Проверить, задан ли параметр, можно методом
НайтиЗначениеПараметра(<Параметр>) — он вернёт
ЗначениеПараметраКомпоновкиДанных или Неопределено.
Важный нюанс: отбор по ресурсу работает по агрегированному значению
той строки, к которой применяется оформление. Для строки группировки сравнивается
итог группировки, для детальной записи — значение записи. Поэтому одно и то же
правило по-разному подсвечивает детали и итоги — управляйте этим флагами
ИспользоватьВГруппировке и ИспользоватьВОбщемИтоге.
Программная установка элемента условного оформления
Программно условное оформление СКД собирается в
КоллекцияЭлементовУсловногоОформленияКомпоновкиДанных — это свойство
Элементы объекта УсловноеОформлениеКомпоновкиДанных.
Настройки = КомпоновщикНастроек.Настройки;
Элемент = Настройки.УсловноеОформление.Элементы.Добавить();
Элемент.Представление = "Отрицательный остаток";
Элемент.Использование = Истина;
// область применения: только строки группировок
Элемент.ИспользоватьВГруппировке = Истина;
Элемент.ИспользоватьВОбщемИтоге = Ложь;
Элемент.ИспользоватьВЗаголовке = Ложь;
// условие
ЭлементОтбора = Элемент.Отбор.Элементы.Добавить(
Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Остаток");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ЭлементОтбора.ПравоеЗначение = 0;
// оформление
Элемент.Оформление.УстановитьЗначениеПараметра(
"ЦветФона", Новый Цвет(255, 230, 230));
Коллекция поддерживает полный набор операций: Вставить(<Индекс>),
Получить(<Индекс>), Индекс(<Элемент>),
Количество(), Сдвинуть(<Элемент>, <Смещение>),
Удалить(<Элемент>) и Очистить().
Сдвинуть() здесь не косметика — он меняет приоритет (см. следующий раздел).
Найти уже существующий элемент по идентификатору помогает
УсловноеОформление.ПолучитьОбъектПоИдентификатору(<Идентификатор>),
обратная операция — ПолучитьИдентификаторПоОбъекту(<Объект>).
Приоритет оформления при пересечении правил
Когда на одну ячейку претендуют несколько элементов, действуют два правила.
-
Порядок в коллекции. Элементы применяются сверху вниз. При
конфликте по одному и тому же параметру (например, оба задают
ЦветФона) побеждает элемент, расположенный ниже. Параметры, которые не пересекаются, складываются: один элемент дал фон, другой — шрифт. -
Уровень настроек. Условное оформление есть не только у отчёта
целиком, но и у каждой группировки (
ГруппировкаКомпоновкиДанных,ГруппировкаТаблицыКомпоновкиДанных,ГруппировкаДиаграммыКомпоновкиДанных) и у таблицы (ТаблицаКомпоновкиДанных). Оформление вложенного уровня применяется после общего и перекрывает его.
Отсюда практический вывод: не пытайтесь «победить» чужое правило добавлением своего
выше по списку — сдвиньте его вниз через Сдвинуть() либо задайте
оформление на уровне нужной группировки.
Очистка и переопределение оформления группировки
Чтобы снять условное оформление с конкретного элемента структуры (группировки,
таблицы, диаграммы), у НастройкиКомпоновкиДанных есть парные методы.
Настройки = КомпоновщикНастроек.Настройки;
Группировка = Настройки.Структура[0];
Если Настройки.НаличиеУсловногоОформленияУЭлемента(Группировка) Тогда
Настройки.ОчиститьУсловноеОформлениеЭлемента(Группировка);
КонецЕсли;
Проверка НаличиеУсловногоОформленияУЭлемента(<Элемент>) нужна
потому, что собственные настройки у вложенного элемента могут отсутствовать — тогда он
наследует оформление верхнего уровня, и «очищать» там нечего. Полный сброс правил
отчёта — Настройки.УсловноеОформление.Элементы.Очистить().
Условное оформление в пользовательских настройках
Чтобы пользователь мог включать и выключать правило прямо в форме отчёта, элементу задают идентификатор и представление пользовательской настройки:
Элемент.ИдентификаторПользовательскойНастройки = "ПодсветкаДолга";
Элемент.ПредставлениеПользовательскойНастройки = "Подсвечивать просроченный долг";
Элемент.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
Свойство Использование при этом становится тем самым флажком, который
видит пользователь. Такие же свойства
(ИдентификаторПользовательскойНастройки,
ПредставлениеПользовательскойНастройки, РежимОтображения)
есть и у контейнера УсловноеОформлениеКомпоновкиДанных — они выносят в
настройки весь список правил целиком.
Частые ошибки при настройке условного оформления СКД
-
Заполнены «Оформляемые поля», а ждали покраску строки. Как только
в коллекции
Поляпоявился хотя бы один элемент, оформление применяется только к нему. Чтобы выделить цветом строку целиком — коллекция должна быть пустой. -
Отбор по полю, которого нет в выбранных полях отчёта. Поле должно
присутствовать в наборе данных и быть доступно на нужном уровне; иначе правило
молча не срабатывает. Ориентир —
ДоступныеПоляОтбораобъекта условного оформления. -
Ожидание, что элементы «складываются» по одному параметру. Два
правила с
ЦветФонане смешиваются: выигрывает нижнее. Разводите правила по разным параметрам или по порядку. -
Оформление уехало в шапку и итоги. Флаги
ИспользоватьВЗаголовке,ИспользоватьВОбщемИтоге,ИспользоватьВЗаголовкеПолейРесурсовне выставлены явно. Ограничьте область применения. -
Правка настроек после компоновки макета. Изменения
КомпоновщикНастроек.Настройкидолжны выполняться доВыполнитьКомпоновку, иначе макет уже построен со старым оформлением. -
Строка вместо
ПолеКомпоновкиДанных. ВЛевоеЗначениеи вОформляемоеПоле.Поленужен объектНовый ПолеКомпоновкиДанных("ИмяПоля"), а не строка.
Частые вопросы об условном оформлении в СКД
Как в СКД выделить цветом строку целиком, а не одну ячейку?
Оставьте коллекцию «Оформляемые поля» пустой. Если в ней указано хотя бы одно поле,
параметр ЦветФона применится только к этому полю. Пустая коллекция
означает применение ко всей строке вывода.
Как программно добавить элемент условного оформления в СКД?
Через Настройки.УсловноеОформление.Элементы.Добавить() — метод
возвращает ЭлементУсловногоОформленияКомпоновкиДанных. Дальше
заполняются Отбор, Поля и Оформление
методом УстановитьЗначениеПараметра().
Какой элемент условного оформления победит, если условия пересеклись?
По одному и тому же параметру оформления выигрывает элемент, стоящий ниже в списке. Оформление, заданное на уровне группировки или таблицы, применяется после общего оформления отчёта и перекрывает его.
ИИ Консоль запросов 1С
Лайт
Для ознакомления с возможностями
- Полный набор инструментов без урезаний
- Без ввода карты
Старт
Популярный выборДля индивидуального использования
- До 5ти конфигураций
-
≈ 100 задач Подробнее про лимиты
- Техническая поддержка
Продвинутый
Для интенсивного использования или команд
- До 15-ти конфигураций
-
≈ 300 задач Подробнее про лимиты
- Техническая поддержка