Выделение строк цветом в отчётах 1С:Предприятие — это не просто эстетическая доработка, а мощный инструмент визуального анализа данных. Когда в таблице сотни строк с цифрами, цветовые акценты помогают мгновенно выявить критические отклонения: просроченные платежи, отрицательные остатки или превышение лимитов. Однако многие пользователи не знают, что в 1С 8.3 и 8.2 есть как минимум 5 способов реализовать такое выделение — от простых настроек без программирования до сложных алгоритмов на встроенном языке.
В этой статье мы разберём все методы по шагам: от условного оформления в конструкторе отчётов до написания кода в модуле объекта. Особое внимание уделим скрытым возможностям платформы, которые позволяют динамически менять цвета в зависимости от данных из других таблиц или регистров. Примеры будут актуальны для конфигураций 1С:Бухгалтерия, 1С:Зарплата и Управление Персоналом, 1С:Управление Торговлей и других типовых решений.
1. Условное оформление в конструкторе отчётов (без программирования)
Самый доступный способ — использовать встроенное условное оформление, которое доступно прямо в конструкторе отчёта. Этот метод не требует знания языка 1С и подходит для большинства типовых отчётов, таких как Оборотно-сальдовая ведомость или Анализ счёта.
Чтобы настроить выделение:
- 📊 Откройте нужный отчёт через меню
Отчёты → Стандартные отчётыили через разделОтчётыв рабочей области. - ⚙️ Нажмите кнопку
Настройки(илиПоказать настройкив новых версиях). - 🎨 Перейдите на вкладку
Условное оформление(в некоторых конфигурациях она может называтьсяЦветовые схемы). - ➕ Добавьте новое правило с помощью кнопки
Добавитьи задайте условия, например:СуммаОборота < 0. - 🖌️ Выберите цвет фона или шрифта для строк, удовлетворяющих условию (например, красный для отрицательных значений).
Этот метод работает для большинства стандартных отчётов, но имеет ограничение: правила применяются только к тем полям, которые видно в текущей структуре отчёта. Если вам нужно выделить строки на основе данных, не отображаемых в таблице (например, по скрытому реквизиту), придётся использовать программные методы.
⚠️ Внимание: В некоторых конфигурациях (например, 1С:ERP) вкладкаУсловное оформлениеможет быть скрыта в упрощённом режиме работы. Чтобы её увидеть, переключитесь вПолный интерфейсчерез менюСервис → Параметры.
2. Программное выделение строк в модуле отчёта
Если условное оформление не покрывает ваши задачи (например, нужно выделить строки на основе сложной логики или данных из других регистров), придётся писать код. Для этого используется событие ПриВыводеСтроки в модуле отчёта.
Пример кода для выделения строк с отрицательным остатком:
Процедура ОборотноСальдоваяВедомостьПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Если ДанныеСтроки.ОстатокНачальный < 0 Тогда
ОформлениеСтроки.ЦветФона = ВебЦвет.Красный;
ОформлениеСтроки.ЦветТекста = ВебЦвет.Белый;
КонецЕсли;
КонецПроцедуры
Где:
ДанныеСтроки— объект, содержащий данные текущей строки (доступны все поля отчёта).ОформлениеСтроки— объект для настройки внешнего вида (цвет фона, шрифт, начертание).ВебЦвет— встроенная коллекция цветов (ВебЦвет.Зелёный,ВебЦвет.Жёлтыйи т.д.).
Для применения этого кода:
- Откройте отчёт в режиме
Конфигуратор(потребуются права администратора). - Найдите модуль отчёта в дереве объектов (например,
Отчёты → ОборотноСальдоваяВедомость → Модуль объекта). - Добавьте процедуру
ПриВыводеСтроки(если её нет) и вставьте код. - Сохраните конфигурацию и обновите базу данных.
Открыть конфигуратор с правами администратора
Найти модуль нужного отчёта в дереве объектов
Создать процедуру ПриВыводеСтроки (если отсутствует)
Проверить синтаксис кода перед сохранением
Обновить конфигурацию базы данных-->
3. Использование стилей оформления (CSS-подобный синтаксис)
В современных версиях 1С:Предприятие 8.3 (начиная с 8.3.14) появилась поддержка стилей оформления — аналога CSS для управлением внешним видом отчётов. Это позволяет гибко настраивать цвета, шрифты и границы без глубокого программирования.
Пример создания стиля для выделения строк:
// В модуле отчёта
Процедура ПриСозданииНаСервере(Отказ)
Стиль = Новый СтильОформления("ВыделеннаяСтрока");
Стиль.ЦветФона = ВебЦвет.Жёлтый;
Стиль.ЦветТекста = ВебЦвет.Чёрный;
Стиль.Шрифт = Новый Шрифт("Arial", 10, True); // Жирный шрифт
ЭтотОбъект.Стили.Добавить(Стиль);
КонецПроцедуры
Процедура ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Если ДанныеСтроки.Сумма > 1000000 Тогда
ОформлениеСтроки.Стиль = ЭтотОбъект.Стили.ВыделеннаяСтрока;
КонецЕсли;
КонецПроцедуры
Преимущества этого метода:
- 🎨 Централизованное управление стилями — изменяете в одном месте, применяется везде.
- 🔄 Переиспользование — один стиль можно применить к нескольким отчётам.
- 🖥️ Адаптивность — стили автоматически подстраиваются под тему оформления 1С (тёмную/светлую).
⚠️ Внимание: Стили оформления не работают в тонком клиенте версий 1С 8.2 и ранних сборках 8.3 (до 8.3.14). Перед использованием проверьте версию платформы в меню Справка → О программе.
4. Выделение строк на основе данных из других таблиц
Часто требуется выделить строки в отчёте на основе данных, которых нет в самой таблице. Например, в отчёте по продажам вы хотите пометить строки с клиентами, у которых есть просроченная дебиторская задолженность. Для этого нужно:
- Получить дополнительные данные из регистра или справочника.
- Сравнить их с данными текущей строки.
- Применить оформление при совпадении.
Пример кода для отчёта по продажам:
Процедура ПродажиПоКлиентамПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
// Получаем задолженность клиента из регистра
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ СУММА(РасчётыСКонтрагентамиОстатки.СуммаОстаток) КАК Задолженность
ИЗ РегистрНакопления.РасчётыСКонтрагентами.Остатки КАК РасчётыСКонтрагентамиОстатки
ГДЕ РасчётыСКонтрагентамиОстатки.Контрагент = &Контрагент
И РасчётыСКонтрагентамиОстатки.СуммаОстаток < 0";
Запрос.УстановитьПараметр("Контрагент", ДанныеСтроки.Клиент);
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
ОформлениеСтроки.ЦветФона = ВебЦвет.Оранжевый;
КонецЕсли;
КонецПроцедуры
Ключевые моменты:
- 🔍 Используйте
Запросдля получения данных из других источников (регистров, справочников). - ⚡ Для ускорения работы добавьте индексы на поля, по которым идёт выборка (в примере —
Контрагент). - 📌 Кэшируйте результаты запросов, если отчёт выводит много строк (например, с помощью
Соответствие).
Как ускорить работу отчёта с дополнительными запросами?
Если в отчёте много строк, и для каждой выполняется запрос к регистру, это может сильно замедлить работу. Оптимизируйте код так:
1. Заранее получите все нужные данные одним запросом (например, список должников).
2. Сохраните результаты в Соответствие (ключ — идентификатор строки, значение — признак выделения).
3. В процедуре ПриВыводеСтроки берите данные из соответствия, а не выполняйте новый запрос.
5. Динамическое выделение с использованием расшифровки
В некоторых случаях цвет строки должен зависеть от расшифровки — например, в отчёте по остаткам товаров вы хотите выделить строки, где при расшифровке видно, что товар просрочен. Для этого используйте событие ПриВыводеЯчейки:
Процедура ОстаткиТоваровПриВыводеЯчейки(Элемент, ОформлениеЯчейки, ДанныеСтроки, Колонка)
Если Колонка.Имя = "Товар" Тогда
// Получаем данные о сроке годности товара
Товар = ДанныеСтроки.Товар;
Если Товар.СрокГодности < ТекущаяДата() Тогда
ОформлениеЯчейки.ЦветФона = ВебЦвет.Красный;
ОформлениеЯчейки.Подсказка = "Товар просрочен!";
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Отличия от ПриВыводеСтроки:
| Метод | Когда используется | Уровень детализации | Производительность |
|---|---|---|---|
ПриВыводеСтроки |
Выделение всей строки | Применяется ко всей строке | Выше (один вызов на строку) |
ПриВыводеЯчейки |
Выделение отдельных ячеек | Применяется к конкретной ячейке | Ниже (вызов для каждой ячейки) |
Условное оформление |
Простые правила без кода | Ограничено полями отчёта | Самая высокая |
6. Выделение строк во внешних обработках отчётов
Если вам нужно выделить строки в внешней обработке (например, в отчёте, созданном партнёром 1С), алгоритм будет аналогичным, но с некоторыми нюансами:
- Откройте обработку в
Конфигураторе(файл с расширением.epf). - Найдите модуль объекта и добавьте процедуру
ПриВыводеСтроки. - Используйте
ЭтотОбъект.Параметрыдля доступа к данным отчёта.
Пример для внешней обработки:
Процедура ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
// Пример: выделяем строки с нулевым остатком
Если ДанныеСтроки.Остаток = 0 Тогда
ОформлениеСтроки.ЦветФона = ВебЦвет.Серый;
ОформлениеСтроки.ЦветТекста = ВебЦвет.ТёмноСерый;
КонецЕсли;
КонецПроцедуры
Особенности работы с внешними обработками:
- 🔧 Нет доступа к базе напрямую — используйте параметры отчёта или временные таблицы.
- 📤 Обновление обработки — после изменений сохраните файл
.epfи перезагрузите его в 1С. - 🛡️ Безопасность — обработки с кодом могут блокироваться антивирусом или политиками 1С.
Если внешняя обработка не сохраняет изменения оформления, проверьте настройки прав доступа в 1С. Иногда требуется добавить обработку в список доверенных в меню Сервис → Параметры → Безопасность.
Типичные ошибки и как их избежать
При выделении строк цветом пользователи часто сталкиваются с следующими проблемами:
- Цвета не применяются:
- Проверьте, что процедура
ПриВыводеСтрокиправильно объявлена (с точно таким же именем, как в модуле отчёта). - Убедитесь, что отчёт пересобран после изменений (в Конфигураторе нажмите
F7).
- Проверьте, что процедура
- Избегайте выполнения запросов внутри
ПриВыводеСтроки— получайте данные заранее. - Используйте
Соответствиедля кэширования результатов.
- При экспорте в
ExcelилиPDFпроверьте настройки экспорта (иногда нужно включить опциюСохранять оформление). - В 1С 8.2 цвета могут не экспортироваться из-за ограничений формата.
⚠️ Внимание: В веб-клиенте 1С некоторые цвета могут отображаться иначе из-за особенностей браузера. Перед публикацией отчёта на портале проверьте его внешний вид вChrome,EdgeиFirefox.
Для ускорения отчётов с динамическим оформлением всегда кэшируйте данные. Например, получите список просроченных документов одним запросом до вывода строк, а не проверяйте каждый раз в процедуре ПриВыводеСтроки.
FAQ: Частые вопросы по выделению строк в 1С
Можно ли выделить строку цветом в отчёте, созданном в 1С:Предприятие 8.2?
Да, но с ограничениями:
- В 8.2 нет стилей оформления (доступно только с 8.3.14).
- Для программного выделения используйте процедуру
ПриВыводеСтроки(синтаксис аналогичный). - Условное оформление в конструкторе работает, но может отсутствовать в некоторых конфигурациях.
Как выделить строку, если нужно учитывать данные из другого отчёта?
Используйте один из двух подходов:
- Объединение данных в запросе: Создайте запрос, который сразу возвращает все нужные поля (включая признаки для выделения).
- Временные таблицы: Заранее сохраните данные из второго отчёта во временную таблицу и обращайтесь к ней в процедуре
ПриВыводеСтроки.
Пример кода для временной таблицы:
Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, Результат)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ... В ТВ"; // Запрос для создания временной таблицы
Запрос.Выполнить();
КонецПроцедуры
Почему после обновления 1С перестали работать цвета в отчёте?
Вероятные причины:
- Изменилась структура отчёта (переименованы колонки или параметры).
- Обновилась платформа, и старый код стал несовместим (например, изменился синтаксис
ВебЦвет). - Сбросились настройки условного оформления (проверьте вкладку
Условное оформление).
Решение: откройте отчёт в Конфигураторе и сравните текущий код с резервной копией (если есть).
Можно ли выделить строку градиентом или узором, а не сплошным цветом?
В стандартных механизмах 1С такой возможности нет. Однако есть обходные пути:
- Используйте внешние компоненты (например, 1C:Enterprise Development Tools) для рисования кастомных стилей.
- Экспортируйте отчёт в
Excelи применяйте градиенты там. - Для веб-клиента можно использовать
CSS-стили через расширения (требуются знанияHTML/JS).
Как сделать, чтобы цвет строки зависел от права доступа пользователя?
Используйте объект ПользовательИнформационнойБазы и проверяйте его права в процедуре ПриВыводеСтроки:
Процедура ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ТекущийПользователь = ПользовательИнформационнойБазы.ТекущийПользователь();
Если НЕ ТекущийПользователь.ПроверитьПрава("ПросмотрКонфиденциальныхДанных") Тогда
ОформлениеСтроки.ЦветФона = ВебЦвет.Серый;
ОформлениеСтроки.ЦветТекста = ВебЦвет.Чёрный;
КонецЕсли;
КонецПроцедуры
Для этого пользователь должен быть привязан к ролям с соответствующими правами.