Цвет строк, ячеек и отчётов в 1С 8.3: от настройки списка до кода
Содержание
Чтобы выделить цветом строки или ячейки в 1С 8.3, используют условное оформление: в списке это Ещё → Настроить список → Условное оформление, в отчёте — Настройки → Расширенный → Оформление. Правило задаёт три вещи: что красить (цвет фона, цвет текста, шрифт), при каком условии и какие поля. Программисту доступно то же самое из кода — через УсловноеОформление формы или настройки компоновки — плюс прямые свойства ЦветФона и ЦветТекста у элементов формы и ячеек табличного документа.
Механизм общий для платформы: он одинаково работает в Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и других конфигурациях на управляемых формах. Различается только то, где именно лежит команда настроек у конкретной формы или отчёта.
| Задача | Где делать | Нужен Конфигуратор |
|---|---|---|
| Подсветить строки в журнале или справочнике | Настройка списка, вкладка «Условное оформление» | Нет |
| Раскрасить отчёт по условию | Настройки отчёта в расширенном режиме | Нет |
| Заложить раскраску в отчёт для всех | Схема компоновки данных, вкладка «Настройки» | Да |
| Подсветить строку табличной части документа | Условное оформление формы или код | Да |
| Покрасить ячейку печатной формы | Макет или код табличного документа | Да |
Подсветка строк в списках без программиста
Это самый частый случай: бухгалтер хочет видеть непроведённые документы, просроченные счета или контрагентов без ИНН сразу, не листая журнал. Делается за минуту и сохраняется в настройках пользователя.
Пошагово: правило условного оформления в списке
- Откройте нужный список, например журнал счетов покупателям.
- Нажмите
Ещё → Настроить список. - Перейдите на вкладку
Условное оформлениеи нажмитеДобавить. - В поле Оформление нажмите на ссылку и задайте цвет фона, цвет текста или шрифт (например, полужирный).
- В поле Условие добавьте отбор: поле, вид сравнения и значение. Пример —
ПроведенРавноНет. - В поле Оформляемые поля выберите колонки. Если оставить пусто, раскрасится вся строка.
- Нажмите
Завершить редактирование.
Правил можно добавить несколько. Например:
- 🔴 сумма больше 500 000 — красный текст;
- 🟡 документ не проведён — бледно-жёлтый фон;
- ⚪ помечен на удаление — серый текст.
Если два правила срабатывают на одной строке и задают один и тот же параметр (например, цвет фона), побеждает одно из них, а не смесь. Чтобы не гадать, разводите правила по разным параметрам: одно красит фон, другое меняет цвет текста.
Как вернуть всё как было
Пользовательское оформление хранится отдельно от конфигурации. Если раскраска мешает, в том же окне настройки списка выберите Ещё → Установить стандартные настройки. Удалятся отборы и сортировки, которые вы задавали в этом списке, — учтите это.
Условное оформление в отчётах на СКД
Почти все отчёты в типовых конфигурациях построены на системе компоновки данных (СКД). У них свой блок оформления, и он умеет больше, чем список: красить отдельные группировки, итоги и заголовки.
В режиме пользователя
- Сформируйте отчёт, например
Анализ субконтоилиОборотно-сальдовая ведомость. - Нажмите
Настройки. - Переключите вид настроек на
Расширенный. - Откройте вкладку
Оформлениеи добавьте новое правило. - Укажите оформление, условие и поля так же, как в списке.
- Нажмите
Закрыть и сформировать.
Чтобы раскраска не терялась при следующем открытии, сохраните настройки как вариант отчёта: Ещё → Сохранить вариант отчёта (или аналогичная команда в меню вариантов вашей формы отчёта).
В Конфигураторе: оформление для всех пользователей
Если правило должно быть у всех, его закладывают в саму схему.
- Откройте отчёт и схему компоновки данных.
- Перейдите на вкладку
Настройки. - Внизу, рядом с выбранными полями и отбором, откройте вкладку
Условное оформление. - Добавьте элемент: оформление, условие, оформляемые поля.
Хитрость практиков — область действия правила. В свойствах элемента условного оформления есть флажки, где применять его: в группировке, в иерархической группировке, в общем итоге, в заголовке полей и т. д. Снимите «в общем итоге» — и строка «Итого» не покраснеет вместе с отрицательными остатками.
Ещё один приём: правило можно задать не на весь отчёт, а на конкретную группировку. Выделите группировку в дереве структуры — и вкладка условного оформления будет относиться только к ней. Так красят, например, только детальные записи, оставляя группировки по контрагентам без цвета.
Правки схемы типового отчёта снимают его с поддержки. Безопаснее скопировать отчёт во внешний или вынести изменения в расширение конфигурации (расширения доступны с платформы 8.3.6).
Программная установка цвета на управляемой форме
Для табличных частей документов пользовательской настройки «Условное оформление» нет. Здесь работает код или условное оформление формы, заданное в Конфигураторе (свойство формы УсловноеОформление).
Цвет всей колонки или поля
Если цвет не зависит от данных, достаточно свойства элемента:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.Комментарий.ЦветФона = WebЦвета.СветлоЖелтый;
Элементы.ТоварыСумма.ЦветТекста = Новый Цвет(200, 0, 0);
КонецПроцедуры
Колонка ТоварыСумма станет красной целиком, во всех строках. Для раскраски «по условию» этот способ не подходит.
Цвет строки по условию
Чтобы покрасить только строки табличной части Товары, где количество равно нулю, добавьте элемент условного оформления формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
// Что сделать: фон и цвет текста
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255, 230, 230));
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
// Когда: количество в строке равно нулю
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Количество");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = 0;
// Какие поля: перечисляем элементы формы (колонки таблицы)
Для Каждого ИмяКолонки Из СтрРазделить("ТоварыНоменклатура,ТоварыКоличество,ТоварыСумма", ",") Цикл
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонки);
КонецЦикла;
КонецПроцедуры
Главное отличие, на котором спотыкаются: в условии указывают путь к данным (Объект.Товары.Количество), а в оформляемых полях — имя элемента формы (ТоварыКоличество). Перепутаете — правило молча не сработает.
Условие пересчитывается платформой само: пользователь ввёл количество — строка перекрасилась, отдельный обработчик не нужен.
Динамический список
Для формы списка правило строят так же, только путь в условии начинается с имени реквизита списка: Список.Проведен, Список.СуммаДокумента. В условие можно ставить только поля, которые есть в запросе динамического списка. Нужен расчётный признак — добавьте его в запрос списка полем, а потом сравнивайте.
В обычных формах (толстый клиент 8.2) строки красили в обработчике ПриВыводеСтроки. В управляемых формах 8.3 такого события у таблицы нет, его заменяет условное оформление.
Цвет ячеек в табличном документе
Табличный документ — это печатные формы, результаты отчётов и любые таблицы .mxl. У каждой области ячеек есть свойства ЦветФона, ЦветТекста, ЦветРамки и Шрифт.
В макете
- Откройте макет печатной формы в Конфигураторе.
- Выделите ячейки мышью.
- Откройте палитру свойств (
Alt+Enter). - Задайте
ЦветФонаиЦветТекста, при необходимости —Шрифт.
Цвет из макета переходит в каждый документ, напечатанный по этому шаблону. Для типовой печатной формы правку лучше делать в копии макета или через расширение.
Из кода после вывода
Когда цвет зависит от данных, его ставят на уже выведенную строку. Номер последней строки даёт ВысотаТаблицы:
ТабДок.Вывести(ОбластьСтрока);
Если ДанныеСтроки.Сумма < 0 Тогда
НомерСтроки = ТабДок.ВысотаТаблицы;
Область = ТабДок.Область(НомерСтроки, 1, НомерСтроки, 6);
Область.ЦветФона = Новый Цвет(255, 223, 22);
Область.Шрифт = Новый Шрифт(Область.Шрифт, , , Истина);
КонецЕсли;
Здесь шесть колонок строки получают жёлтый фон, а шрифт становится полужирным. Конструктор Новый Шрифт берёт за основу текущий шрифт области и меняет только третий параметр — «Жирный».
Отдельную ячейку адресуют строкой в стиле R1C1: ТабДок.Область("R5C3") — пятая строка, третья колонка.
В уже сформированном документе
Если документ открыт в 1С и разрешено редактирование, ячейки можно покрасить вручную через контекстное меню выделенной области и окно её свойств. Состав меню может отличаться в зависимости от формы, в которой открыт документ. Для отчётов на СКД ручная раскраска живёт до следующего «Сформировать» — надёжнее условное оформление.
Палитра 1С: Web-цвета, стиль и свои RGB
Когда вы нажимаете на цвет в любом окне оформления, открывается диалог выбора цвета. В нём несколько источников:
| Источник | Что это | Когда брать |
|---|---|---|
| Web-цвета | Набор именованных цветов (WebЦвета.Красный, WebЦвета.СветлоЗеленый) | Быстрые правила в списках и отчётах |
| Цвета Windows | Системные цвета (ЦветаWindows), меняются вместе с темой ОС | Редко, для элементов, которые должны выглядеть «как система» |
| Цвета стиля | Элементы стиля конфигурации (ЦветаСтиля.<Имя>) | Разработка: единая палитра на всю конфигурацию |
| Абсолютный | Произвольный цвет по каналам R, G, B | Фирменные цвета, точное совпадение с Excel |
Как задать свой цвет из HEX
В 1С нет конструктора цвета из строки вида #FFDF16. HEX переводят в три числа от 0 до 255: FF = 255, DF = 223, 16 = 22. Получается Новый Цвет(255, 223, 22).
Если цвета приходят из настроек или внешней системы строкой, перевод удобно вынести в функцию:
Функция ЦветИзHEX(Знач Строка)
Строка = ВРег(СтрЗаменить(Строка, "#", ""));
Цифры = "0123456789ABCDEF";
Каналы = Новый Массив;
Для Позиция = 0 По 2 Цикл
Старшая = СтрНайти(Цифры, Сред(Строка, Позиция * 2 + 1, 1)) - 1;
Младшая = СтрНайти(Цифры, Сред(Строка, Позиция * 2 + 2, 1)) - 1;
Каналы.Добавить(Старшая * 16 + Младшая);
КонецЦикла;
Возврат Новый Цвет(Каналы[0], Каналы[1], Каналы[2]);
КонецФункции
Проверка: для #FFDF16 вторая пара DF даёт 13 × 16 + 15 = 223, третья 16 — 1 × 16 + 6 = 22. Функция ждёт ровно шесть шестнадцатеричных знаков; короткую запись #FD1 она не разберёт.
Почему стоит пользоваться цветами стиля
Если в двадцати формах вписан Новый Цвет(255, 230, 230), поменять оттенок придётся в двадцати местах. Элемент стиля (ветка Общие → Элементы стиля в дереве конфигурации) меняется один раз — и все формы подхватывают новый цвет.
Для пользовательских правил в списках и отчётах это неважно: там Web-цвета и абсолютные цвета работают без ограничений.
Сочетания, которые читаются
- 🎨 Фон — бледный (каналы 220–255), текст — тёмный. Насыщенный красный фон с чёрным текстом утомляет уже через десять строк.
- 🔤 Для «тревожных» значений хватает цвета текста; фон оставьте для статусов строки.
- 📏 Больше трёх-четырёх цветов на одной таблице превращают её в мозаику, и смысл раскраски теряется.
Почему цвет не появляется: разбор неполадок
Частые вопросы
Можно ли выделить цветом одну ячейку, а не всю строку?
Сохранится ли цвет при выгрузке отчёта в Excel?
Можно ли менять цвет строки по значению из другого справочника?
Список.Контрагент.ОсновнойМенеджер. Для динамического списка надёжнее добавить такое поле в запрос.