Цвет строк, ячеек и отчётов в 1С 8.3: от настройки списка до кода

· 9 мин

Содержание

Чтобы выделить цветом строки или ячейки в 1С 8.3, используют условное оформление: в списке это Ещё → Настроить список → Условное оформление, в отчёте — Настройки → Расширенный → Оформление. Правило задаёт три вещи: что красить (цвет фона, цвет текста, шрифт), при каком условии и какие поля. Программисту доступно то же самое из кода — через УсловноеОформление формы или настройки компоновки — плюс прямые свойства ЦветФона и ЦветТекста у элементов формы и ячеек табличного документа.

Механизм общий для платформы: он одинаково работает в Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и других конфигурациях на управляемых формах. Различается только то, где именно лежит команда настроек у конкретной формы или отчёта.

ЗадачаГде делатьНужен Конфигуратор
Подсветить строки в журнале или справочникеНастройка списка, вкладка «Условное оформление»Нет
Раскрасить отчёт по условиюНастройки отчёта в расширенном режимеНет
Заложить раскраску в отчёт для всехСхема компоновки данных, вкладка «Настройки»Да
Подсветить строку табличной части документаУсловное оформление формы или кодДа
Покрасить ячейку печатной формыМакет или код табличного документаДа

Подсветка строк в списках без программиста

Это самый частый случай: бухгалтер хочет видеть непроведённые документы, просроченные счета или контрагентов без ИНН сразу, не листая журнал. Делается за минуту и сохраняется в настройках пользователя.

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

  1. Откройте нужный список, например журнал счетов покупателям.
  2. Нажмите Ещё → Настроить список.
  3. Перейдите на вкладку Условное оформление и нажмите Добавить.
  4. В поле Оформление нажмите на ссылку и задайте цвет фона, цвет текста или шрифт (например, полужирный).
  5. В поле Условие добавьте отбор: поле, вид сравнения и значение. Пример — Проведен Равно Нет.
  6. В поле Оформляемые поля выберите колонки. Если оставить пусто, раскрасится вся строка.
  7. Нажмите Завершить редактирование.

Правил можно добавить несколько. Например:

  • 🔴 сумма больше 500 000 — красный текст;
  • 🟡 документ не проведён — бледно-жёлтый фон;
  • ⚪ помечен на удаление — серый текст.

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

Как вернуть всё как было

Пользовательское оформление хранится отдельно от конфигурации. Если раскраска мешает, в том же окне настройки списка выберите Ещё → Установить стандартные настройки. Удалятся отборы и сортировки, которые вы задавали в этом списке, — учтите это.

Условное оформление в отчётах на СКД

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

В режиме пользователя

  1. Сформируйте отчёт, например Анализ субконто или Оборотно-сальдовая ведомость.
  2. Нажмите Настройки.
  3. Переключите вид настроек на Расширенный.
  4. Откройте вкладку Оформление и добавьте новое правило.
  5. Укажите оформление, условие и поля так же, как в списке.
  6. Нажмите Закрыть и сформировать.

Чтобы раскраска не терялась при следующем открытии, сохраните настройки как вариант отчёта: Ещё → Сохранить вариант отчёта (или аналогичная команда в меню вариантов вашей формы отчёта).

В Конфигураторе: оформление для всех пользователей

Если правило должно быть у всех, его закладывают в саму схему.

  1. Откройте отчёт и схему компоновки данных.
  2. Перейдите на вкладку Настройки.
  3. Внизу, рядом с выбранными полями и отбором, откройте вкладку Условное оформление.
  4. Добавьте элемент: оформление, условие, оформляемые поля.

Хитрость практиков — область действия правила. В свойствах элемента условного оформления есть флажки, где применять его: в группировке, в иерархической группировке, в общем итоге, в заголовке полей и т. д. Снимите «в общем итоге» — и строка «Итого» не покраснеет вместе с отрицательными остатками.

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

Правки схемы типового отчёта снимают его с поддержки. Безопаснее скопировать отчёт во внешний или вынести изменения в расширение конфигурации (расширения доступны с платформы 8.3.6).

Программная установка цвета на управляемой форме

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

Цвет всей колонки или поля

Если цвет не зависит от данных, достаточно свойства элемента:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	Элементы.Комментарий.ЦветФона = WebЦвета.СветлоЖелтый;
	Элементы.ТоварыСумма.ЦветТекста = Новый Цвет(200, 0, 0);

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

Колонка ТоварыСумма станет красной целиком, во всех строках. Для раскраски «по условию» этот способ не подходит.

Цвет строки по условию

Чтобы покрасить только строки табличной части Товары, где количество равно нулю, добавьте элемент условного оформления формы:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	ЭлементОформления = УсловноеОформление.Элементы.Добавить();

	// Что сделать: фон и цвет текста
	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255, 230, 230));
	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);

	// Когда: количество в строке равно нулю
	ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Объект.Товары.Количество");
	ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = 0;

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

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

Главное отличие, на котором спотыкаются: в условии указывают путь к данным (Объект.Товары.Количество), а в оформляемых полях — имя элемента формы (ТоварыКоличество). Перепутаете — правило молча не сработает.

Условие пересчитывается платформой само: пользователь ввёл количество — строка перекрасилась, отдельный обработчик не нужен.

Динамический список

Для формы списка правило строят так же, только путь в условии начинается с имени реквизита списка: Список.Проведен, Список.СуммаДокумента. В условие можно ставить только поля, которые есть в запросе динамического списка. Нужен расчётный признак — добавьте его в запрос списка полем, а потом сравнивайте.

В обычных формах (толстый клиент 8.2) строки красили в обработчике ПриВыводеСтроки. В управляемых формах 8.3 такого события у таблицы нет, его заменяет условное оформление.

Цвет ячеек в табличном документе

Табличный документ — это печатные формы, результаты отчётов и любые таблицы .mxl. У каждой области ячеек есть свойства ЦветФона, ЦветТекста, ЦветРамки и Шрифт.

В макете

  1. Откройте макет печатной формы в Конфигураторе.
  2. Выделите ячейки мышью.
  3. Откройте палитру свойств (Alt+Enter).
  4. Задайте ЦветФона и ЦветТекста, при необходимости — Шрифт.

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

Из кода после вывода

Когда цвет зависит от данных, его ставят на уже выведенную строку. Номер последней строки даёт ВысотаТаблицы:

ТабДок.Вывести(ОбластьСтрока);

Если ДанныеСтроки.Сумма < 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?
Цвет фона, текста и шрифт ячеек переносятся при сохранении табличного документа в формат xlsx. Условие при этом не переносится: в Excel придёт уже раскрашенная таблица, а не правило.
Можно ли менять цвет строки по значению из другого справочника?
Можно, если это значение доступно через точку: например, Список.Контрагент.ОсновнойМенеджер. Для динамического списка надёжнее добавить такое поле в запрос.
Замедляет ли условное оформление список?
Несколько правил по полям, которые уже есть в запросе, на скорость заметно не влияют. Тормозить начинает условие через длинную цепочку ссылок, потому что платформа добавляет соединения в запрос.
Можно ли выделить цветом поле на форме документа без доступа к Конфигуратору?
Через пользовательские настройки формы — только видимость и порядок полей, а не цвет. Раскраска реквизитов документа делается в Конфигураторе или расширением.