Цвет строки в 1С: табличный документ, форма и отчёт на СКД
Содержание
Цвет строки в 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 до ВысотаТаблицы.
Если красят макет, а не результат
Постоянный цвет фона можно задать прямо в макете: выделите ячейки, откройте палитру на панели форматирования и выберите цвет фона. Для условной раскраски макет не годится: цвет в нём неизменен.
Хранить цвет лучше в одном месте. Заведите в модуле функцию ЦветПредупреждения(), которая возвращает Новый Цвет(...), и вызывайте её из всех печатных форм. Менять придётся одну строку.
Условное оформление в форме: список, документ, таблица
В управляемых формах цвет строки меняет условное оформление. Оно работает для динамических списков, табличных частей и любых таблиц формы.
Через конфигуратор, без кода
- Откройте форму списка или документа в конфигураторе.
- Выберите элемент формы (таблицу) и перейдите на вкладку «Условное оформление» в палитре свойств формы.
- Добавьте элемент оформления.
- В поле «Оформление» задайте цвет текста, цвет фона или шрифт.
- В «Условии» добавьте отбор: поле, вид сравнения, значение.
- В «Поля» выберите колонки, на которые распространяется оформление. Пустой список полей означает все колонки, то есть строку целиком.
Если нужно покрасить только одну ячейку, укажите в «Полях» одну колонку. Условие при этом может ссылаться на другую.
То же самое кодом
Код нужен, когда условия строятся динамически. Для табличной части или таблицы формы объект называется УсловноеОформление, у динамического списка — Список.УсловноеОформление.
&НаСервере
Процедура НастроитьОформление()
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Использование = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255, 244, 179));
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Новый Цвет(160, 0, 0));
Поле = Элемент.Поля.Элементы.Добавить();
Поле.Поле = Новый ПолеКомпоновкиДанных("Сумма");
Поле.Использование = Истина;
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сумма");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
Отбор.ПравоеЗначение = 100000;
Отбор.Использование = Истина;
КонецПроцедуры
Процедуру вызывают из ПриСозданииНаСервере. Для табличной части поле называют с именем таблицы: Новый ПолеКомпоновкиДанных("Товары.Сумма").
Если поле, по которому стоит отбор, не попало в запрос динамического списка, цвет не сработает. Добавьте реквизит в список и оставьте его невидимым: на оформление это не влияет.
Что можно задать в оформлении
| Параметр | Что делает |
|---|---|
ЦветФона | Заливка ячейки или строки |
ЦветТекста | Цвет шрифта |
Шрифт | Жирный, курсив, размер |
Текст | Подмена выводимого текста |
Видимость | Скрывает значение в ячейке |
Цвета можно брать не только как Новый Цвет, но и из стиля: ЦветаСтиля.ПоясняющийОшибкуТекст. Такой цвет подстроится под оформление платформы и не будет выбиваться из интерфейса.
Раскраска строк в отчёте на СКД
В отчётах на системе компоновки данных оформление живёт в настройках варианта. Править его можно и в конфигураторе, и в пользовательском режиме.
В конфигураторе
- Откройте схему компоновки данных отчёта.
- Перейдите на вкладку «Настройки» и выберите нужную группировку или весь отчёт.
- Откройте вкладку «Условное оформление».
- Добавьте элемент: в «Оформление» выберите цвет, в «Отбор» задайте условие.
Область применения («Поля») здесь тоже работает: если оставить её пустой, оформление применяется ко всем полям группировки.
Отдельные поля и итоги
Условие может зависеть от поля, которое в отчёте не показано. Поле должно быть в наборе данных, после чего его можно использовать в отборе, но не выводить.
Для итогов строки оформление применяют к соответствующей группировке. Если раскрасить детальные записи, итоговая строка останется прежней.
Вывод в табличный документ
Когда отчёт выводят процессором вывода в табличный документ, оформление применяется само. Дополнительно красить результат кодом не нужно, а если красить, то уже после компоновки и по номерам строк, как в первом разделе.
Форматированная строка и цветной текст в ячейке
Условное оформление красит всю ячейку. Чтобы выделить часть текста, используют форматированную строку.
Цвет = ЦветаСтиля.ПоясняющийОшибкуТекст;
Строка = Новый ФорматированнаяСтрока("Просрочено", , Цвет);
Параметры конструктора идут в таком порядке: строка, шрифт, цвет текста, цвет фона, навигационная ссылка. Пропущенные параметры оставляют пустыми запятыми.
Составной текст собирают из частей:
Текст = Новый ФорматированнаяСтрока(
"Долг: ",
Новый ФорматированнаяСтрока("120 000 руб.", Новый Шрифт(, , Истина), WebЦвета.Красный));
Форматированную строку присваивают реквизиту формы с типом «Форматированная строка» или выводят в поле надписи. В колонку динамического списка её напрямую не положить: колонка получает значение из запроса.
Готовые условия для типовых задач
Раскраска нужна не ради красоты: она показывает, куда смотреть в первую очередь. Вот условия, которые встречаются в списках чаще всего.
Непроведённые и помеченные на удаление
В списках документов платформа уже подсвечивает помеченные на удаление и непроведённые документы значками. Если нужна именно заливка, добавьте элемент оформления с условием по реквизиту «Проведён» (равно «Ложь») или «Пометка удаления» (равно «Истина»). Не забудьте, что эти поля есть в динамическом списке документа, но могут отсутствовать в списке справочника.
Просроченные даты
Условие «срок оплаты меньше текущей даты» строится сравнением поля с датой. В отборе оформления сравнивают поле с датой через вид сравнения Меньше, а в правой части указывают значение, которое вы подставите в коде:
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СрокОплаты");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
Отбор.ПравоеЗначение = НачалоДня(ТекущаяДата());
Отбор.Использование = Истина;
НачалоДня(ТекущаяДата()) отсекает время, и документы, у которых срок наступает сегодня, не будут считаться просроченными. На сервере для текущей даты используйте ТекущаяДатаСеанса(): она учитывает часовой пояс сеанса.
Диапазоны сумм
Для градации «до 10 000 — без цвета, от 10 000 до 100 000 — жёлтый, свыше — красный» создайте два элемента. Для жёлтого поставьте два отбора в группе «И»: Больше или равно 10000 и Меньше 100000. Для красного хватит одного отбора. Границы не должны пересекаться, иначе итоговый цвет будет зависеть от порядка элементов.
Чередование строк
Заливку через одну строку («зебру») делают отдельным свойством: у таблицы формы есть настройка чередования строк, и условное оформление для неё не нужно. В печатной форме, выводимой кодом, чётность строки определяют остатком от деления номера на 2 и красят только чётные.
Если НомерСтроки % 2 = 0 Тогда
ТабДок.Область(НомерСтроки, 1, НомерСтроки, 6).ЦветФона = Новый Цвет(242, 242, 242);
КонецЕсли;
Если в таблице есть объединённые ячейки, диапазон нужно считать по границам объединения, иначе заливка «поедет».
Как подобрать цвета
Три-четыре цвета на всю систему — потолок. Когда в списке красный, оранжевый, жёлтый, зелёный и синий одновременно, пользователь перестаёт различать смысл.
- 🔸 Красный оставьте для ошибок и просрочек, к которым нужно вернуться.
- 🔸 Жёлтый или светло-оранжевый подходит для «на согласовании» и «требует внимания».
- 🔸 Зелёный нужен редко: нормальное состояние красить не надо.
- 🔸 Серый текст хорошо показывает неактуальные записи.
Проверяйте цвета на мониторе с низким контрастом и на печати. То, что видно на вашем экране, на проекторе в переговорной может слиться с фоном.
Область.ЦветФона.Список.УсловноеОформление.Дать пользователю настраивать цвета самому
Часто бухгалтеру нужно, чтобы просроченные документы выделялись, а условие он подберёт сам. Есть два пути.
Включить пользовательскую настройку
У каждого элемента условного оформления в СКД и в списке есть режим отображения: недоступен, быстрый доступ, обычный. Выбрав «Быстрый доступ» или «Обычный», вы выводите элемент в пользовательские настройки. Тогда пользователь отключает его, меняет цвет или условие в окне настроек отчёта или списка.
Что запоминается
Пользовательские настройки списка и отчёта платформа сохраняет для каждого пользователя отдельно. Для отчётов они привязаны к варианту. Сохранение настройки в общий вариант делается отдельно, и для этого нужны права на изменение вариантов.
Цвета, заданные в самой форме в конфигураторе, пользователь не меняет. Они действуют для всех одинаково.
Типичные проблемы с цветом
Если цвета нет или он не тот, посмотрите по очереди:
- 🔹 Нет поля в списке. Реквизит из отбора не входит в запрос динамического списка.
- 🔹 Не включено использование. У элемента или у отбора стоит
Использование = Ложь. В коде это забывают чаще всего. - 🔹 Перекрыл другой элемент. Оформления применяются сверху вниз, поэтому последнее подходящее условие перекрывает предыдущие. Переставьте элементы.
- 🔹 Красится не то. Пустое поле в «Полях» красит строку, заполненное — только выбранную колонку.
- 🔹 Цвет в отчёте задан кодом, но пропал после обновления. Код выполнялся до компоновки. Выполняйте его после вывода результата.
- 🔹 На печати цвет слабый. Светлая заливка на принтере выходит почти белой, а на чёрно-белом совсем теряется. Для печатных форм берите заметную заливку или добавляйте жирный шрифт.
Частые вопросы
Как покрасить строку табличной части документа?
Товары.Сумма.Можно ли красить строки динамического списка по статусу документа?
Почему цвет не виден в выбранной строке?
Как вернуть исходный цвет?
Использование = Ложь) или удалите его. Цвет табличной области, заданный кодом, сбрасывается повторным выводом секции из макета: новая область получает оформление макета.