Цвет строки в 1С: табличный документ, форма и отчёт на СКД

· 9 мин

Содержание

Цвет строки в 1С задаётся тремя разными способами, и выбор зависит от того, где строка находится. В печатной форме и макете красят область табличного документа кодом. В списках, документах и таблицах форм используют условное оформление. В отчётах на СКД оформление настраивают на вкладке «Настройки» схемы компоновки.

Общее правило одно: цвет привязывают к условию («сумма больше 100 000», «документ не проведён»), а не к конкретной строке. Тогда он сам следует за данными. Ниже каждый способ с примерами для платформы 8.3 с интерфейсом «Такси».

Покрасить строку в табличном документе кодом

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

Строка целиком

Область = ТабДок.Область("R5");
Область.ЦветФона = Новый Цвет(255, 244, 179);
Область.ЦветТекста = Новый Цвет(160, 0, 0);

R5 — пятая строка целиком, от первой до последней колонки. Обращение R5C2:R5C6 красит только колонки со второй по шестую. Тот же результат даёт ТабДок.Область(5, 2, 5, 6): номера идут в порядке «начальная строка, начальная колонка, конечная строка, конечная колонка».

Строку красят после вывода

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

Для Каждого Строка Из Выборка Цикл
	ТабДок.Вывести(Секция);
	Если Строка.Сумма > 100000 Тогда
		НомерСтроки = ТабДок.ВысотаТаблицы;
		ТабДок.Область(НомерСтроки, 1, НомерСтроки, 6).ЦветФона = Новый Цвет(255, 244, 179);
	КонецЕсли;
КонецЦикла;

ВысотаТаблицы возвращает число уже выведенных строк, то есть номер последней. Если секция занимает несколько строк, берите диапазон от ВысотаТаблицы - КоличествоСтрокСекции + 1 до ВысотаТаблицы.

Если красят макет, а не результат

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

Хранить цвет лучше в одном месте. Заведите в модуле функцию ЦветПредупреждения(), которая возвращает Новый Цвет(...), и вызывайте её из всех печатных форм. Менять придётся одну строку.

Условное оформление в форме: список, документ, таблица

В управляемых формах цвет строки меняет условное оформление. Оно работает для динамических списков, табличных частей и любых таблиц формы.

Через конфигуратор, без кода

  1. Откройте форму списка или документа в конфигураторе.
  2. Выберите элемент формы (таблицу) и перейдите на вкладку «Условное оформление» в палитре свойств формы.
  3. Добавьте элемент оформления.
  4. В поле «Оформление» задайте цвет текста, цвет фона или шрифт.
  5. В «Условии» добавьте отбор: поле, вид сравнения, значение.
  6. В «Поля» выберите колонки, на которые распространяется оформление. Пустой список полей означает все колонки, то есть строку целиком.

Если нужно покрасить только одну ячейку, укажите в «Полях» одну колонку. Условие при этом может ссылаться на другую.

То же самое кодом

Код нужен, когда условия строятся динамически. Для табличной части или таблицы формы объект называется УсловноеОформление, у динамического списка — Список.УсловноеОформление.

&НаСервере
Процедура НастроитьОформление()
	Элемент = УсловноеОформление.Элементы.Добавить();
	Элемент.Использование = Истина;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255, 244, 179));
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Новый Цвет(160, 0, 0));

	Поле = Элемент.Поля.Элементы.Добавить();
	Поле.Поле = Новый ПолеКомпоновкиДанных("Сумма");
	Поле.Использование = Истина;

	Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сумма");
	Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
	Отбор.ПравоеЗначение = 100000;
	Отбор.Использование = Истина;
КонецПроцедуры

Процедуру вызывают из ПриСозданииНаСервере. Для табличной части поле называют с именем таблицы: Новый ПолеКомпоновкиДанных("Товары.Сумма").

Если поле, по которому стоит отбор, не попало в запрос динамического списка, цвет не сработает. Добавьте реквизит в список и оставьте его невидимым: на оформление это не влияет.

Что можно задать в оформлении

ПараметрЧто делает
ЦветФонаЗаливка ячейки или строки
ЦветТекстаЦвет шрифта
ШрифтЖирный, курсив, размер
ТекстПодмена выводимого текста
ВидимостьСкрывает значение в ячейке

Цвета можно брать не только как Новый Цвет, но и из стиля: ЦветаСтиля.ПоясняющийОшибкуТекст. Такой цвет подстроится под оформление платформы и не будет выбиваться из интерфейса.

Раскраска строк в отчёте на СКД

В отчётах на системе компоновки данных оформление живёт в настройках варианта. Править его можно и в конфигураторе, и в пользовательском режиме.

В конфигураторе

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

Область применения («Поля») здесь тоже работает: если оставить её пустой, оформление применяется ко всем полям группировки.

Отдельные поля и итоги

Условие может зависеть от поля, которое в отчёте не показано. Поле должно быть в наборе данных, после чего его можно использовать в отборе, но не выводить.

Для итогов строки оформление применяют к соответствующей группировке. Если раскрасить детальные записи, итоговая строка останется прежней.

Вывод в табличный документ

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

Форматированная строка и цветной текст в ячейке

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

Цвет = ЦветаСтиля.ПоясняющийОшибкуТекст;
Строка = Новый ФорматированнаяСтрока("Просрочено", , Цвет);

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

Составной текст собирают из частей:

Текст = Новый ФорматированнаяСтрока(
	"Долг: ",
	Новый ФорматированнаяСтрока("120 000 руб.", Новый Шрифт(, , Истина), WebЦвета.Красный));

Форматированную строку присваивают реквизиту формы с типом «Форматированная строка» или выводят в поле надписи. В колонку динамического списка её напрямую не положить: колонка получает значение из запроса.

Готовые условия для типовых задач

Раскраска нужна не ради красоты: она показывает, куда смотреть в первую очередь. Вот условия, которые встречаются в списках чаще всего.

Непроведённые и помеченные на удаление

В списках документов платформа уже подсвечивает помеченные на удаление и непроведённые документы значками. Если нужна именно заливка, добавьте элемент оформления с условием по реквизиту «Проведён» (равно «Ложь») или «Пометка удаления» (равно «Истина»). Не забудьте, что эти поля есть в динамическом списке документа, но могут отсутствовать в списке справочника.

Просроченные даты

Условие «срок оплаты меньше текущей даты» строится сравнением поля с датой. В отборе оформления сравнивают поле с датой через вид сравнения Меньше, а в правой части указывают значение, которое вы подставите в коде:

Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СрокОплаты");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
Отбор.ПравоеЗначение = НачалоДня(ТекущаяДата());
Отбор.Использование = Истина;

НачалоДня(ТекущаяДата()) отсекает время, и документы, у которых срок наступает сегодня, не будут считаться просроченными. На сервере для текущей даты используйте ТекущаяДатаСеанса(): она учитывает часовой пояс сеанса.

Диапазоны сумм

Для градации «до 10 000 — без цвета, от 10 000 до 100 000 — жёлтый, свыше — красный» создайте два элемента. Для жёлтого поставьте два отбора в группе «И»: Больше или равно 10000 и Меньше 100000. Для красного хватит одного отбора. Границы не должны пересекаться, иначе итоговый цвет будет зависеть от порядка элементов.

Чередование строк

Заливку через одну строку («зебру») делают отдельным свойством: у таблицы формы есть настройка чередования строк, и условное оформление для неё не нужно. В печатной форме, выводимой кодом, чётность строки определяют остатком от деления номера на 2 и красят только чётные.

Если НомерСтроки % 2 = 0 Тогда
	ТабДок.Область(НомерСтроки, 1, НомерСтроки, 6).ЦветФона = Новый Цвет(242, 242, 242);
КонецЕсли;

Если в таблице есть объединённые ячейки, диапазон нужно считать по границам объединения, иначе заливка «поедет».

Как подобрать цвета

Три-четыре цвета на всю систему — потолок. Когда в списке красный, оранжевый, жёлтый, зелёный и синий одновременно, пользователь перестаёт различать смысл.

  • 🔸 Красный оставьте для ошибок и просрочек, к которым нужно вернуться.
  • 🔸 Жёлтый или светло-оранжевый подходит для «на согласовании» и «требует внимания».
  • 🔸 Зелёный нужен редко: нормальное состояние красить не надо.
  • 🔸 Серый текст хорошо показывает неактуальные записи.

Проверяйте цвета на мониторе с низким контрастом и на печати. То, что видно на вашем экране, на проекторе в переговорной может слиться с фоном.

Где красить строку?

Дать пользователю настраивать цвета самому

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

Включить пользовательскую настройку

У каждого элемента условного оформления в СКД и в списке есть режим отображения: недоступен, быстрый доступ, обычный. Выбрав «Быстрый доступ» или «Обычный», вы выводите элемент в пользовательские настройки. Тогда пользователь отключает его, меняет цвет или условие в окне настроек отчёта или списка.

Что запоминается

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

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

Типичные проблемы с цветом

Если цвета нет или он не тот, посмотрите по очереди:

  • 🔹 Нет поля в списке. Реквизит из отбора не входит в запрос динамического списка.
  • 🔹 Не включено использование. У элемента или у отбора стоит Использование = Ложь. В коде это забывают чаще всего.
  • 🔹 Перекрыл другой элемент. Оформления применяются сверху вниз, поэтому последнее подходящее условие перекрывает предыдущие. Переставьте элементы.
  • 🔹 Красится не то. Пустое поле в «Полях» красит строку, заполненное — только выбранную колонку.
  • 🔹 Цвет в отчёте задан кодом, но пропал после обновления. Код выполнялся до компоновки. Выполняйте его после вывода результата.
  • 🔹 На печати цвет слабый. Светлая заливка на принтере выходит почти белой, а на чёрно-белом совсем теряется. Для печатных форм берите заметную заливку или добавляйте жирный шрифт.
Перед тем как настраивать цвет
Выполнено: 0 / 5

Частые вопросы

Как покрасить строку табличной части документа?
Добавьте условное оформление на вкладке свойств самой таблицы формы, а в отборе обращайтесь к полю с префиксом имени таблицы, например Товары.Сумма.
Можно ли красить строки динамического списка по статусу документа?
Да. Поле статуса или признак проведения должен быть в запросе списка, тогда на него можно поставить условие в оформлении.
Почему цвет не виден в выбранной строке?
Выбранная строка подсвечивается цветом выделения платформы и перекрывает вашу заливку. Переведите курсор на другую строку, и заливка появится снова.
Как вернуть исходный цвет?
Отключите элемент условного оформления (Использование = Ложь) или удалите его. Цвет табличной области, заданный кодом, сбрасывается повторным выводом секции из макета: новая область получает оформление макета.
Какие цвета лучше использовать?
Приглушённые заливки, которые не мешают читать. Для текста используйте контрастный цвет, а для предупреждений — цвета стиля, чтобы они подходили темам оформления.