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