Как раскрасить строки в динамическом списке 1С 8.3

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

При работе с большими объемами данных в управляемых формах 1С 8.3 пользователям часто требуется визуально выделять важную информацию. Например, подсвечивать проведенные документы зеленым цветом, помечать критические остатки красным или выделять заказы определенного контрагента. В этой статье мы подробно разберем, как реализовать раскраску строк в динамическом списке, используя механизм Условного оформления.

Понятие условного оформления в 1С

Для начала проанализируем ситуацию: почему обычные методы перебора строк здесь не работают? Динамический список — это объект, который подгружает данные порциями по мере прокрутки пользователем. Поэтому мы не можем просто «покрасить» строку при загрузке. Мы должны задать платформе правило, по которому она сама будет определять цвет ячейки или всей строки в момент отрисовки на экране.

Рассмотрим два основных пути настройки: интерактивный (через свойства формы) и программный (с помощью встроенного языка). Оба метода используют коллекцию УсловноеОформление.

Вариант 1: Интерактивная настройка (без программирования)

Если нам не требуется сложная логика, меняющаяся на лету, воспользуемся стандартными средствами проектировщика. Разберем по шагам, как выделить проведенные документы:

  1. Откроем форму списка нужного документа в конфигураторе.
  2. В окне свойств формы (обычно справа внизу) перейдем на закладку «Условное оформление».
  3. Нажмем кнопку «Добавить». Перед нами откроется окно настройки элемента оформления.
  4. В поле «Оформление» выберем параметр ЦветФона или ЦветТекста. Установим нужный цвет (например, Web-цвет «Зеленый»).
  5. В поле «Условие» добавим новый элемент отбора. В качестве левого значения выберем поле Проведен, вид сравнения — «Равно», правое значение — «Да».
  6. В поле «Оформляемые поля» выберем те колонки, которые должны окраситься. Если оставить этот список пустым, будет раскрашена вся строка целиком.

Этот способ хорош тем, что он понятен и не требует написания кода, однако он менее гибок, если условия раскраски зависят от внешних параметров или настроек пользователя.

Вариант 2: Программная настройка условного оформления

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

Допустим, нам нужно выделить строки, где итоговая сумма превышает определенный план. Выясним причину использования программного метода на примере следующего кода:


// Создаем новый элемент условного оформления
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();

// 1. Настраиваем само оформление (что именно меняем)
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый);
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,,Истина)); // Сделаем жирным

// 2. Указываем условие (когда применять оформление)
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Итого");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементОтбора.ПравоеЗначение = 100000;

// 3. Определяем область применения (какие колонки красить)
ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Итого");

Разберем подробнее этот код. Мы используем ПолеКомпоновкиДанных, так как динамический список базируется на системе компоновки данных (СКД). Обратите внимание: при программном добавлении элементов в цикле или при повторном вызове кода важно не забывать выполнять УсловноеОформление.Элементы.Очистить(), чтобы не плодить дублирующие правила, которые замедлят работу системы.

Оптимизация и производительность

Важно помнить, что расчет условного оформления происходит на стороне клиента при каждой перерисовке списка. Если у вас сотни тысяч записей, а условия содержат сложные расчеты, это может привести к «подтормаживанию» интерфейса. Посмотрим на рекомендации по оптимизации:

Использование невидимых полей и произвольных запросов

Иногда логика раскраски требует данных, которых нет в стандартных полях документа. В этом случае мы можем изменить схему запроса динамического списка. Выберем режим «Произвольный запрос» и добавим вычисляемое поле.

Например, нам нужно раскрасить строки документов, по которым есть просрочка оплаты. Мы можем написать в запросе конструкцию ВЫБОР...КОГДА:


ВЫБРАТЬ
    ДокументПродажа.Ссылка,
    ДокументПродажа.Дата,
    ВЫБОР 
        КОГДА ДокументПродажа.ДатаОплаты < &ТекущаяДата И НЕ ДокументПродажа.Оплачено 
        ТОГДА ИСТИНА 
        ИНАЧЕ ЛОЖЬ 
    КОНЕЦ КАК Просрочено
ИЗ
    Документ.Продажа КАК ДокументПродажа

Теперь в настройках условного оформления мы можем просто указать поле Просрочено равно Истина. При этом само поле Просрочено можно скрыть от пользователя в настройках формы, сняв галочку «Видимость» — оформление все равно будет работать корректно.

Дополнительные визуальные эффекты

Помимо цвета, механизм позволяет управлять и другими свойствами. Проанализируем возможности:

Таким образом, мы рассмотрели все основные способы управления визуальным представлением данных в списках. Грамотное использование условного оформления делает интерфейс программы интуитивно понятным и помогает пользователю мгновенно фокусироваться на важных бизнес-событиях.

← На главную