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

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

Разработчики при переходе на современный интерфейс «Такси» часто сталкиваются с неприятной особенностью платформы «1С:Предприятие 8.3»: стандартные свойства элементов формы, такие как ЦветРамки, ВертикальныеЛинии, ГоризонтальныеЛинии или локальный флаг ЧередованиеЦветовСтрок у таблиц и динамических списков, перестают работать или ведут себя не так, как ожидается. Пользователи при этом могут жаловаться на низкую контрастность интерфейса и просить сделать границы ячеек более четкими (например, черными) или выделить строки через одну.

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

Выясняем причину: почему стандартные свойства игнорируются в «Такси»?

Интерфейс «Такси» построен на концепции «flat design» (плоский дизайн). Его основная задача — визуально разгрузить рабочее пространство пользователя, убрать лишние «шумящие» рамки, сетки и сделать фокус на данных. Для обеспечения этого единообразия разработчики платформы применили жесткие правила рендеринга элементов:

  1. Приоритет системного стиля: Если конфигурация запущена в режиме «Такси», платформа намеренно игнорирует локальные настройки цвета рамок и линий для конкретных таблиц формы, чтобы избежать «разношерстности» в оформлении.
  2. Фиксированное чередование строк: Стандартное чередование цветов строк спроектировано очень бледным. Сделать его более контрастным локально в свойствах конкретного динамического списка стандартными свойствами невозможно.

Тем не менее, решить задачу повышения контрастности динамического списка можно. Рассмотрим доступные инструменты.

---

Решение 1. Изменение стилей через расширение конфигурации (Рекомендуемое)

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

Выполним следующие шаги для изменения стилей:

  1. Создайте новое расширение конфигурации (или откройте существующее).
  2. В дереве объектов расширения перейдите в ветку Общие -> Стили оформления.
  3. Добавьте собственный стиль оформления или заимствуйте существующий системный стиль.
  4. В свойствах созданного стиля найдите параметры ЦветРамки, ЦветФонаЧередованияСтрок или свойства, отвечающие за сетки таблиц, и установите для них требуемые контрастные цвета (например, темно-серый или черный для рамок).
  5. Назначьте созданный стиль основным для конфигурации в свойствах корневого элемента расширения.

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

Минусы: Стиль меняется глобально для всей системы (всех таблиц и списков), а не для одного конкретного списка.

---

Решение 2. Использование обработчика «ПриПолученииДанныхНаСервере»

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

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

Проанализируем пример реализации программной раскраски:


&НаСервере
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
    
    // Счетчик для реализации собственного чередования цветов
    Счетчик = 0;
    
    Для Каждого СтрокаСписка Из Строки Цикл
        
        // Определяем цвет в зависимости от четности строки в текущем пакете
        Если Счетчик % 2 = 0 Тогда
            ЦветСтроки = Новый Цвет(240, 240, 240); // Светло-серый
        Иначе
            ЦветСтроки = Новый Цвет(255, 255, 255); // Белый
        EndЕсли;
        
        // Применяем оформление к ячейкам строки
        Для Каждого КлючИЗначение Из СтрокаСписка.Значение.Оформление Цикл
            ЯчейкаОформления = КлючИЗначение.Значение;
            ЯчейкаОформления.УстановитьЗначениеПараметра("ЦветФона", ЦветСтроки);
        КонецЦикла;
        
        Счетчик = Счетчик + 1;
        
    КонецЦикла;
    
КонецПроцедуры

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

---

Решение 3. Трюк с «псевдочередованием» через произвольный запрос

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

Разберем этот метод по шагам:

  1. Откройте свойства динамического списка и переведите его в режим Произвольный запрос.
  2. В тексте запроса добавьте вычисляемое поле, которое будет возвращать числовой признак четности. В качестве основы можно взять числовую часть кода или номера документа.

Посмотрим на пример такого запроса для справочника с числовыми кодами:


ВЫБРАТЬ
    СправочникНоменклатура.Ссылка КАК Ссылка,
    СправочникНоменклатура.Код КАК Код,
    СправочникНоменклатура.Наименование КАК Наименование,
    СправочникНоменклатура.Код % 2 КАК Четность
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура
  1. Перейдите в настройки формы, откройте вкладку Условное оформление и добавьте новое правило:
    • Оформление: Установите желаемый контрастный ЦветФона.
    • Условие: Четность Равно 1.
    • Оформляемые поля: Выделите все поля вашего динамического списка.

Ограничение метода: Чередование является "псевдочередованием". Если в базе данных будут пропущены коды (например, удален элемент с кодом 4, и после 3 идет сразу 5), то на экране окажутся две подряд окрашенные строки. Также этот метод не рекомендуется использовать с тяжелыми математическими расчетами внутри запроса на больших таблицах, чтобы не снижать производительность СУБД.

---

Решение 4. Выделение границ через условное оформление колонок

Если реальные границы (рамки) ячеек таблицы включить не удается из-за ограничений интерфейса «Такси», хорошим UX-решением является визуальное разделение колонок с помощью условного оформления текста или фона отдельных ключевых полей.

Например, мы можем задать для определенных колонок (например, "Статус", "Сумма") индивидуальные фоновые подложки или изменить начертание шрифта. Это компенсирует отсутствие контрастной сетки таблицы и позволит пользователю легко ориентироваться в строках динамического списка.

Для этого в Условном оформлении формы достаточно настроить правила окраски фона конкретных колонок на постоянной основе (без дополнительных условий), что визуально разобьет сплошной плоский список на понятные вертикальные зоны.

← На главную