Часто при формировании отчетов или печатных форм в 1С возникает задача динамического оформления: например, нужно выделить цветом выходные дни или пустые ячейки. В процессе работы разработчики часто сталкиваются с тем, что окрашивание «ломается» или захватывает не те области, которые планировалось. Давайте разберем, как сделать это профессионально и предсказуемо.
Основная проблема заключается в том, что начинающие разработчики пытаются манипулировать макетом напрямую. Важно понимать разницу: макет — это шаблон, а табличный документ — это итоговый результат вывода. Когда вы используете методы Вывести() или Присоединить(), вы работаете с живым объектом. Если обращаться к ячейкам по жестким координатам (например, R1C1), при изменении структуры таблицы цвета «поедут», так как координаты перестанут соответствовать ожидаемым данным.
Самый надежный способ управления оформлением — работа с объектом ОбластьЯчеекТабличногоДокумента, который возвращается методами вывода. Вместо того чтобы вычислять, где находится ячейка, мы просто берем то, что только что вывели, и меняем ему свойства.
Рассмотрим, как это выглядит на практике:
// Предположим, мы выводим секцию с данными
ОбластьМакета = Макет.ПолучитьОбласть("СтрокаДанных");
ОбластьМакета.Параметры.Дата = ТекущаяДата;
// Выводим область и сразу получаем ссылку на неё
ВыведеннаяОбласть = ТабличныйДокумент.Вывести(ОбластьМакета);
// Теперь можем безопасно менять цвет именно у этой строки
Если ДеньНедели(ТекущаяДата) > 5 Тогда
ВыведеннаяОбласть.ЦветФона = WebЦвета.Желтый;
КонецЕсли;
Этот метод гарантирует, что вы покрасите именно ту строку, которую только что добавили в документ, независимо от того, сколько строк было в нем до этого.
Если ваша логика вывода сложнее (например, вы используете Присоединить()), можно ориентироваться на свойство ВысотаТаблицы. Это позволяет точно найти последнюю добавленную строку в результирующем табличном документе.
Разберем пример цикла:
Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(Область.Параметры, Выборка);
ТабличныйДокумент.Вывести(Область);
// Если это выходной, красим конкретную колонку в последней выведенной строке
Если Выборка.ЭтоВыходной Тогда
// Формируем адрес ячейки через строку
Адрес = СтрШаблон("R%1C7", ТабличныйДокумент.ВысотаТаблицы);
ТабличныйДокумент.Область(Адрес).ЦветФона = WebЦвета.Желтый;
КонецЕсли;
КонецЦикла;
Область() приведет к окрашиванию всей группы. Это может быть как преимуществом, так и причиной «лишних» закрашенных зон.ТабличныйДокумент.Область("ИмяЯчейки").ЦветФона = ....Если вы строите отчет на системе компоновки данных (СКД), забудьте о ручном окрашивании в коде. Механизм Условного оформления в настройках СКД — это стандарт индустрии. Вы просто создаете правило «Если поле Выходной = Истина, то Цвет фона = Желтый», и платформа сама применит его ко всем ячейкам автоматически. Это избавляет от необходимости перебора строк в цикле и делает отчеты намного быстрее и легче в поддержке.
Подводя итог, можно сказать: всегда старайтесь работать с возвращаемыми объектами ОбластьЯчеекТабличногоДокумента вместо жесткого указания координат. Это сделает ваш код профессиональным, понятным и избавленным от ошибок позиционирования.