При формировании отчетов или печатных форм в системе 1С:Предприятие часто возникает задача выделить определенные данные визуально. Чаще всего это требуется для акцентирования внимания на важных показателях, таких как задолженность, отрицательные остатки или выполнение плана. В данной статье мы подробно разберем, как программно управлять цветом фона ячеек в объекте ТабличныйДокумент.
Прежде чем менять оформление, нам необходимо определить область, к которой будет применено форматирование. В 1С для этого используется метод Область(). Мы можем обратиться к конкретной ячейке по её адресу (например, "R1C1") или по координатам (номер строки и номер колонки). Разберем стандартный подход к получению области ячейки.
Проанализируем пример кода, в котором мы получаем доступ к ячейке и готовимся изменить её свойства:
// Создаем или получаем существующий табличный документ
ТабДок = Новый ТабличныйДокумент;
// Получаем область конкретной ячейки (строка 2, колонка 3)
ОбластьЯчейки = ТабДок.Область(2, 3, 2, 3);
Важно понимать, что объект ОбластьТабличногоДокумента обладает свойством ЦветФона. Именно это свойство отвечает за визуальное отображение заливки. Данное свойство принимает объект типа Цвет, который можно создать несколькими способами.
Наиболее точный способ задать конкретный оттенок — это использование модели RGB (Red, Green, Blue). Этот метод позволяет программно вычислить нужный цвет в зависимости от бизнес-логики. Рассмотрим, как это реализовать по шагам.
Для создания цвета по модели RGB используется конструктор объекта Цвет с тремя параметрами. Выясним, как применить красный цвет фона для ячейки с отрицательным значением:
// Задаем цвет: Красный = 255, Зеленый = 0, Синий = 0
НужныйЦвет = Новый Цвет(255, 0, 0);
// Применяем к области
ОбластьЯчейки.ЦветФона = НужныйЦвет;
Этот метод удобен тем, что вы можете динамически вычислять интенсивность цвета. Например, чем больше сумма долга, тем насыщеннее может быть оттенок красного. Проанализируем ситуацию, когда нам нужно сделать "градиентную" закраску в зависимости от значения переменной СтепеньРиска:
Если СтепеньРиска > 80 Тогда
ОбластьЯчейки.ЦветФона = Новый Цвет(255, 0, 0); // Ярко-красный
ИначеЕсли СтепеньРиска > 50 Тогда
ОбластьЯчейки.ЦветФона = Новый Цвет(255, 165, 0); // Оранжевый
КонецЕсли;
В платформе 1С предусмотрена коллекция стандартных веб-цветов, которые имеют понятные названия (например, WebColors.Gold или WebColors.LightGreen). Это избавляет разработчика от необходимости подбирать RGB-коды вручную. Посмотрим на пример использования этого метода:
// Используем стандартный светло-зеленый цвет из коллекции WebColors
ОбластьЯчейки.ЦветФона = WebColors.СветлоЗеленый;
Использование WebColors делает код более читаемым и понятным для других разработчиков. Рекомендуется использовать этот способ для стандартных элементов интерфейса, где не требуется уникальный корпоративный брендинг.
Если вы хотите, чтобы ваш отчет гармонично смотрелся в интерфейсе программы и учитывал текущую тему оформления пользователя, следует использовать ЦветаСтиля. Это гарантирует, что при смене цветовой схемы платформы (например, при переходе на темную тему в будущем), ваш отчет останется читабельным.
Разберем пример присвоения цвета, который в конфигурации определен как цвет для выделения отрицательных показателей:
// Применяем цвет из метаданных конфигурации (Стили)
ОбластьЯчейки.ЦветФона = ЦветаСтиля.ЦветОтрицательногоИтога;
Также можно использовать системные цвета операционной системы, такие как ЦветаWindows.КнопкаЛицо или ЦветаWindows.ТекстОкна, но в веб-клиенте они могут отображаться по-разному, поэтому их использование в управляемых формах следует ограничивать.
Часто требуется закрасить не одну ячейку, а всю строку целиком, если выполняется определенное условие (например, товар снят с продажи). Рассмотрим алгоритм решения этой задачи в цикле при обходе результата запроса.
Посмотрим на практическую реализацию этого алгоритма:
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетОтчета");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
// Заполняем параметры области
ОбластьСтрока.Параметры.Заполнить(Выборка);
// Выводим область в документ
ТабДок.Вывести(ОбластьСтрока);
// Проверяем условие для закраски
Если Выборка.Остаток < 0 Тогда
// Определяем номер последней выведенной строки
НомерСтроки = ТабДок.ВысотаТаблицы;
// Получаем область всей строки (от первой до последней колонки)
ОбластьДляЗакраски = ТабДок.Область(НомерСтроки, 1, НомерСтроки, );
// Устанавливаем бледно-красный фон
ОбластьДляЗакраски.ЦветФона = Новый Цвет(255, 230, 230);
КонецЕсли;
КонецЦикла;
При работе с большими табличными документами (десятки тысяч строк) программное изменение оформления каждой ячейки может существенно замедлить формирование отчета. Проанализируем несколько советов по оптимизации:
Во-первых, старайтесь избегать создания новых объектов Цвет внутри цикла. Лучше создать нужные цвета заранее в переменных и использовать их повторно.
ЦветКритический = Новый Цвет(255, 0, 0);
ЦветНормальный = WebColors.Белый;
Пока Выборка.Следующий() Цикл
// Используем уже созданный объект, а не создаем "Новый Цвет" каждый раз
Область.ЦветФона = ?(Выборка.Ошибка, ЦветКритический, ЦветНормальный);
КонецЦикла;
Во-вторых, помните о свойстве Узор. Если вы установите цвет фона, но при этом свойство Узор будет установлено в значение ТипУзораТабличногоДокумента.БезУзора (что является значением по умолчанию для пустых областей), цвет может не отобразиться. Обычно платформа корректно обрабатывает это автоматически при программной установке ЦветФона, но в сложных макетах стоит проверить этот параметр.
В-третьих, учитывайте приоритеты оформления. Если вы используете Систему Компоновки Данных (СКД), то программное изменение цвета в уже сформированном документе может быть перекрыто настройками условного оформления самой компоновки. Если задача позволяет, лучше настраивать цвета через УсловноеОформление в схеме компоновки данных, так как это работает быстрее и легче масштабируется.
Таким образом, мы рассмотрели все основные способы управления цветом фона в 1С. Выбор конкретного метода зависит от ваших задач: используйте RGB для динамических расчетов, WebColors для быстрой разработки и ЦветаСтиля для соблюдения корпоративного стандарта интерфейса.