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

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

Особое внимание уделим практическим примерам: выделение строк по условию (например, если сумма превышает лимит), динамическая смена цвета при выборе строки, а также нюансы работы с тонким клиентом и веб-клиентом. Все решения протестированы на актуальных релизах платформы 1С:Предприятие 8.3.22 и выше.

1. Условное оформление: самый простой способ без программирования

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

Чтобы настроить условное оформление:

  1. Откройте нужную форму в режиме конфигуратора (например, справочник Номенклатура или документ РеализацияТоваровУслуг).
  2. Выделите табличное поле (например, ТаблицаДокументов или Список).
  3. В палитре свойств найдите раздел Условное оформление и нажмите на кнопку ... для открытия редактора.
  4. Добавьте новое правило, указав условие (например, Количество < 0) и выбрав цвет фона или шрифта.

Преимущества метода:

  • 🔹 Не требует знания языка — настраивается через интерфейс.
  • 🔹 Работает и в управляемых, и в обычных формах.
  • 🔹 Правила сохраняются в конфигурации и применяются ко всем пользователям.
⚠️ Внимание: Условное оформление не поддерживает динамическое изменение цветов в реальном времени (например, при изменении данных в строке). Для таких задач потребуется программный код.
📊 Какой тип форм вы чаще используете в 1С?
Управляемые формы
Обычные формы
Оба типа примерно одинаково
Не знаю, в чём разница

2. Программное выделение строк в управляемых формах

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

Пример кода для выделения строки при выборе (аналог "подсветки" в Excel):

&НаКлиенте

Процедура ТаблицаТоваровПриАктивизацииСтроки(Элемент, Строка, Колонка, СтандартнаяОбработка)

Если Строка <> Неопределено Тогда

Для Каждого Ячейка Из Строка.Ячейки Цикл

Если Строка.Выделена Тогда

Ячейка.Оформление.ЦветФона = ВебЦвет.Желтый

Иначе

Ячейка.Оформление.ЦветФона = Неопределено

КонецЕсли;

КонецЦикла;

КонецЕсли;

КонецПроцедуры

Ключевые моменты:

  • 🔹 Для изменения цвета всей строки перебирайте коллекцию Строка.Ячейки.
  • 🔹 Цвета задаются через объект ВебЦвет (например, ВебЦвет.Красный, ВебЦвет.Зеленый).
  • 🔹 Для динамического обновления используйте события ПриИзменении или ПриАктивизацииСтроки.

☑️ Подготовка к программному выделению строк

Выполнено: 0 / 4

Если нужно выделить строки по условию (например, если сумма превышает 100 000 рублей), используйте обработчик ПриОтображенииСтроки:

&НаКлиенте

Процедура ТаблицаДокументовПриОтображенииСтроки(Элемент, ОформляемаяСтрока, ДанныеСтроки)

Если ДанныеСтроки.СуммаДокумента > 100000 Тогда

ОформляемаяСтрока.Оформление.ЦветФона = ВебЦвет.Оранжевый

КонецЕсли;

КонецПроцедуры

⚠️ Внимание: В веб-клиенте некоторые цвета могут отображаться иначе, чем в тонком клиенте. Всегда тестируйте оформление в целевом режиме работы.

3. Выделение строк в обычных формах: особенности и ограничения

В обычных формах (унаследованный интерфейс) механизм выделения строк отличается от управляемых форм. Здесь нет свойства Оформление для строк, поэтому приходится работать напрямую с элементами интерфейса через Windows API или использовать обходные пути.

Самый надёжный способ для обычных форм — использование расширения возможностей табличного поля через свойство ЦветФона ячейки. Пример кода для выделения строки по условию:

Процедура ПриАктивизацииСтроки(Элемент, Строка)

Если Товары[Строка].Количество < 0 Тогда

Для НомКол = 1 По Товары.Колонки.Количество() Цикл

Элемент.ЦветФона(Строка, НомКол) = RGB(255, 200, 200) // Светло-красный

КонецЦикла;

Иначе

Элемент.ЦветФона(Строка) = Неопределено // Сбросить цвет

КонецЕсли;

КонецПроцедуры

Ограничения обычных форм:

  • 🔹 Нет встроенной поддержки ВебЦвет — цвета задаются через RGB().
  • 🔹 Динамическое обновление требует явного вызова Обновить().
  • 🔹 Не все визуальные эффекты (например, градиенты) поддерживаются.
💡

Для обычных форм можно использовать Элемент.ЦветТекста(Строка, Колонка), чтобы изменить цвет шрифта без фона. Это полезно для выделения отдельных значений в строке (например, отрицательных чисел красным).

4. Динамическое изменение цвета при редактировании данных

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

Пример реализации для управляемой формы:

&НаКлиенте

Процедура ЦенаПриИзменении(Элемент)

Строка = Элементы.ТаблицаТоваров.ТекущаяСтрока;

Если Строка.Цена <= 0 Тогда

Строка.Оформление.ЦветФона = ВебЦвет.Розовый

Иначе

Строка.Оформление.ЦветФона = ВебЦвет.СветлоЗеленый

КонецЕсли;

КонецПроцедуры

Для сложной логики (например, проверка остатков на складе при изменении количества) лучше вынести валидацию на сервер:

&НаСервере

Функция ПроверитьДоступноеКоличество(Товар, Количество)

Доступно = ТоварыНаСкладах[Товар].Количество;

Если Доступно < Количество Тогда

Возврат Ложь; // Недостаточно товара

Иначе

Возврат Истина;

КонецЕсли;

КонецФункции

&НаКлиенте

Процедура КоличествоПриИзменении(Элемент)

Товар = Элементы.ТаблицаТоваров.ТекущаяСтрока.Товар;

Если Не ПроверитьДоступноеКоличество(Товар, Элемент.Значение) Тогда

Элементы.ТаблицаТоваров.ТекущаяСтрока.Оформление.ЦветФона = ВебЦвет.Красный;

Иначе

Элементы.ТаблицаТоваров.ТекущаяСтрока.Оформление.ЦветФона = Неопределено;

КонецЕсли;

КонецПроцедуры

Как ускорить обновление цвета при массовом редактировании?

Для оптимизации производительности при изменении большого количества строк отключите визуальное обновление таблицы на время обработки:

Элементы.ТаблицаТоваров.АвтоОбновление = Ложь;

// Массовое изменение данных

Элементы.ТаблицаТоваров.АвтоОбновление = Истина;

Элементы.ТаблицаТоваров.Обновить();

Это уменьшит "мерцание" интерфейса.

5. Выделение строк в отчётах и печатных формах

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

Пошаговая инструкция для отчёта на СКД:

  1. Откройте схему компоновки данных в конфигураторе.
  2. Перейдите на закладку Условное оформление.
  3. Добавьте новое правило, например:
    • Условие: [СуммаДокумента] > 100000
    • Оформление: ЦветФона = Красный, ЦветТекста = Белый
  4. Примените оформление к нужным полям (например, к группе Таблица).
  5. Для печатных форм (макеты Word/Excel) используйте обработчики ПриКомпоновкеРезультата:

    Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, ДанныеСтроки, Колонка)
    

    Если ДанныеСтроки.Сумма < 0 Тогда

    ДанныеСтроки.Оформление.ЦветФона = ВебЦвет.Желтый;

    КонецЕсли;

    КонецПроцедуры

    Особенности работы с отчётами:

    Тип отчёта Поддерживаемые цвета Ограничения
    СКД (Система компоновки данных) Любые цвета через ВебЦвет или RGB Не поддерживает динамическое изменение после формирования
    Табличный документ Ограниченная палитра (16 цветов) Цвета зависят от драйвера печати
    Excel-макет Полная палитра Excel Требует настройки стилей в макете
    ⚠️ Внимание: При экспорте отчёта в PDF или Excel цвета могут искажаться. Всегда проверяйте результат в целевом формате.

    6. Распространённые ошибки и как их избежать

    При работе с выделением строк в 1С 8.3 разработчики часто сталкиваются с типичными проблемами. Вот самые частые из них и способы их решения:

    1. Цвета не применяются к строке

    • 🔸 Причина: Ошибка в имени свойства (например, ЦветФона вместо Оформление.ЦветФона).
    • 🔸 Решение: Используйте отладчик (F5) для проверки доступных свойств объекта.

    2. Цвета сбрасываются после обновления таблицы

    • 🔸 Причина: Отсутствует обработчик ПриОтображенииСтроки.
    • 🔸 Решение: Перенесите логику оформления в этот обработчик.

    3. В веб-клиенте цвета отображаются некорректно

    • 🔸 Причина: Использование нестандартных цветов (RGB вместо ВебЦвет).
    • 🔸 Решение: Замените RGB(255, 0, 0) на ВебЦвет.Красный.

    4. Медленная работа при большом количестве строк

    • 🔸 Причина: Избыточные расчёты в обработчике ПриОтображенииСтроки.
    • 🔸 Решение: Кэшируйте результаты проверок или используйте АвтоОбновление = Ложь.
    💡

    Всегда тестируйте оформление в том клиенте (тонкий/веб/толстый), в котором будет работать пользователь. Цвета могут.render по-разному из-за особенностей рендеринга.

    7. Альтернативные подходы: иконки, шрифты и стили

    Выделение цветом — не единственный способ акцентировать внимание на строках. В некоторых случаях эффективнее использовать:

    1. Значки (иконки) в ячейках

    Вместо изменения цвета фона можно добавить в колонку таблицы иконку (например, ⚠️ для предупреждений или ✅ для успешных операций). Это реализуется через свойство Картинка ячейки:

    Строка.Ячейки.КолонкаПредупреждение.Картинка = Новый Картинка("WarningIcon");

    2. Изменение шрифта

    Для выделения критичных данных можно использовать Оформление.Шрифт:

    Строка.Оформление.Шрифт.Жирный = Истина;
    

    Строка.Оформление.Шрифт.Цвет = ВебЦвет.Красный;

    3. Группировка и разделители

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

    Элементы.ТаблицаДокументов.Отображение = ОтображениеТаблицы.Иерархический;

    4. Всплывающие подсказки

    Для строк с дополнительной информацией можно использовать Подсказка:

    Строка.Подсказка = "Документ просрочен на " + Строка.ДнейПросрочки + " дней";

    Преимущества альтернативных методов:

    • 🔹 Меньше нагрузки на интерфейс (по сравнению с перерисовкой цветов).
    • 🔹 Лучше воспринимаются пользователями с дальтонизмом.
    • 🔹 Работают в мобильном клиенте 1С, где поддержка цветов ограничена.

    FAQ: Частые вопросы по выделению строк в 1С 8.3

    Можно ли выделить строку цветом в мобильном клиенте 1С?

    В мобильном клиенте поддержка цветового оформления ограничена. Вместо изменения цвета фона строки рекомендуется:

    • Использовать иконки в колонках (⚠️, ✅).
    • Применять жирный шрифт или курсив для выделения.
    • Добавлять текстовые пометки (например, "[ПРОСРОЧЕНО]").

    Цвета фонов строк в мобильной версии могут не отображаться или выглядеть иначе, чем в десктопном клиенте.

    Как сделать чередующиеся цвета строк (зебра)?

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

    &НаКлиенте
    

    Процедура ТаблицаПриОтображенииСтроки(Элемент, ОформляемаяСтрока, ДанныеСтроки)

    Если ОформляемаяСтрока.Индекс % 2 = 0 Тогда

    ОформляемаяСтрока.Оформление.ЦветФона = ВебЦвет.СветлоСерый

    Иначе

    ОформляемаяСтрока.Оформление.ЦветФона = ВебЦвет.Белый

    КонецЕсли;

    КонецПроцедуры

    Для больших таблиц это может замедлить отображение. В таком случае лучше использовать CSS-стили через расширение функциональности (требует доработки конфигурации).

    Почему после обновления платформы 1С перестали работать цвета в отчётах?

    При обновлении платформы 1С:Предприятие (особенно с версии 8.3.18 на 8.3.20+) могли измениться:

    • Синтаксис работы с ВебЦвет (например, добавлены новые константы).
    • Логика применения условного оформления в СКД.
    • Поддержка цветов в веб-клиенте.

Проверьте:

  1. Совместимость вашей конфигурации с текущей версией платформы.
  2. Наличие ошибок в журнале регистрации (Администрирование → Журнал регистрации).
  3. Обновления в документации по УсловноеОформлениеКомпоновкиДанных.
Как выделить строку в таблице значений программно?

Для таблицы значений (не привязанной к форме) используйте свойство Оформление ячейки:

Таблица = Новый ТаблицаЗначений;

Таблица.Колонки.Добавить("Наименование");

Таблица.Колонки.Добавить("Сумма");

// Добавляем строку

Строка = Таблица.Добавить();

Строка.Наименование = "Товар 1";

Строка.Сумма = 1000;

// Выделяем строку

Для Каждого Колонка Из Таблица.Колонки Цикл

Таблица.Оформление(Строка, Колонка.Имя) = Новый ОформлениеЯчейкиТаблицы;

Таблица.Оформление(Строка, Колонка.Имя).ЦветФона = ВебЦвет.Желтый;

КонецЦикла;

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

Можно ли сохранить настройки цветов для конкретного пользователя?

Да, для этого:

  1. Создайте справочник НастройкиПользователей с полями Пользователь (тип СправочникСсылка.Пользователи) и ЦветаОформления (тип Структура).
  2. При загрузке формы читайте настройки текущего пользователя:
Настройки = НастройкиПользователей.НайтиПоРеквизиту("Пользователь", ТекущийПользователь());

Если Настройки <> Неопределено Тогда

ЦветПредупреждения = Настройки.ЦветаОформления.ЦветПредупреждения;

КонецЕсли;

  1. Применяйте сохранённые цвета в обработчиках оформления.

Для хранения настроек также можно использовать ХранилищеНастроек или РегистрСведений.