Как раскрасить динамический список в 1С 8.3 при использовании произвольного запроса?

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

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

Причина проблемы: Почему оформление не отображается?

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

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

Решение 1: Настройка через свойства динамического списка

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

  1. Откроем форму, на которой расположен список, и выберем элемент Список в дереве объектов.
  2. В панели свойств найдем строку Настройка списка и нажмем «Открыть».
  3. Перейдем на вкладку Запрос. Если используется произвольный запрос, убедимся, что нужное нам поле (например, Филиал) явно прописано в тексте запроса (ВЫБРАТЬ Склад.Филиал КАК Филиал...).
  4. Важный момент: Перейдем на вкладку Набор данных (в том же окне настройки списка). Найдем наше поле в списке и установим для него флажок Использовать всегда. Это гарантирует, что значение поля будет получено из базы данных, даже если колонка скрыта от пользователя.
  5. Теперь перейдем на вкладку Условное оформление.
  6. Добавим новый элемент оформления: выберем цвет фона или текста, установим условие (Филиал Равно Истина) и, если нужно, укажем Оформляемые поля. Если оставить список полей пустым, раскрасится вся строка целиком.

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

Иногда требуется гибко управлять оформлением в зависимости от различных параметров, которые нельзя жестко задать в конфигураторе. В этом случае мы воспользуемся программным кодом в процедуре ПриСозданииНаСервере. Рассмотрим пример, как программно раскрасить проведенные документы в динамическом списке.

Разберем следующий код:


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

В данном примере мы обращаемся к свойству УсловноеОформление самой формы. Однако стоит помнить, что у динамического списка есть свой компоновщик настроек. Если вы хотите, чтобы оформление было «намертво» привязано именно к списку, лучше использовать Список.КомпоновщикНастроек.ФиксированныеНастройки.УсловноеОформление. Это исключит конфликты, если пользователь решит самостоятельно поменять настройки списка через меню «Еще».

Различие между оформлением формы и оформлением списка

Проанализируем ситуацию, когда на форме есть несколько списков. В 1С существует два уровня настройки:

1. Условное оформление формы. Оно находится в свойствах самой формы. Это глобальный механизм. В нем можно задать правила для любых элементов формы, включая декорации, кнопки и ячейки разных таблиц. Если в условии указать поле динамического списка, система попытается применить оформление к соответствующей строке таблицы.

2. Условное оформление динамического списка. Оно «живет» внутри объекта ДинамическийСписок. Это более профессиональный подход при работе со списками данных, так как эти настройки учитываются платформой при формировании пакета данных для отображения. Это снижает нагрузку на клиентское приложение.

Совет: Если ваша задача касается только конкретной таблицы данных, всегда используйте оформление внутри настроек динамического списка. Оформление формы используйте только для простых объектов или когда условие зависит от реквизитов формы, не входящих в список.

Нюансы работы с цветами и производительностью

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

Рекомендации для оптимизации:

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

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

← На главную