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