Выделение строк цветом в отчётах 1С:Предприятие — это не просто эстетическая доработка, а мощный инструмент визуального анализа данных. Когда в таблице сотни строк с цифрами, цветовые акценты помогают мгновенно выявить критические отклонения: просроченные платежи, отрицательные остатки или превышение лимитов. Однако многие пользователи не знают, что в 1С 8.3 и 8.2 есть как минимум 5 способов реализовать такое выделение — от простых настроек без программирования до сложных алгоритмов на встроенном языке.

В этой статье мы разберём все методы по шагам: от условного оформления в конструкторе отчётов до написания кода в модуле объекта. Особое внимание уделим скрытым возможностям платформы, которые позволяют динамически менять цвета в зависимости от данных из других таблиц или регистров. Примеры будут актуальны для конфигураций 1С:Бухгалтерия, 1С:Зарплата и Управление Персоналом, 1С:Управление Торговлей и других типовых решений.

1. Условное оформление в конструкторе отчётов (без программирования)

Самый доступный способ — использовать встроенное условное оформление, которое доступно прямо в конструкторе отчёта. Этот метод не требует знания языка и подходит для большинства типовых отчётов, таких как Оборотно-сальдовая ведомость или Анализ счёта.

Чтобы настроить выделение:

  • 📊 Откройте нужный отчёт через меню Отчёты → Стандартные отчёты или через раздел Отчёты в рабочей области.
  • ⚙️ Нажмите кнопку Настройки (или Показать настройки в новых версиях).
  • 🎨 Перейдите на вкладку Условное оформление (в некоторых конфигурациях она может называться Цветовые схемы).
  • ➕ Добавьте новое правило с помощью кнопки Добавить и задайте условия, например: СуммаОборота < 0.
  • 🖌️ Выберите цвет фона или шрифта для строк, удовлетворяющих условию (например, красный для отрицательных значений).

Этот метод работает для большинства стандартных отчётов, но имеет ограничение: правила применяются только к тем полям, которые видно в текущей структуре отчёта. Если вам нужно выделить строки на основе данных, не отображаемых в таблице (например, по скрытому реквизиту), придётся использовать программные методы.

📊 Какой способ выделения строк в 1С вы используете чаще?
Условное оформление в конструкторе
Программный код в модуле отчёта
Внешние обработки
Стили оформления (CSS)
Не знаю, как это сделать
⚠️ Внимание: В некоторых конфигурациях (например, 1С:ERP) вкладка Условное оформление может быть скрыта в упрощённом режиме работы. Чтобы её увидеть, переключитесь в Полный интерфейс через меню Сервис → Параметры.

2. Программное выделение строк в модуле отчёта

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

Пример кода для выделения строк с отрицательным остатком:

Процедура ОборотноСальдоваяВедомостьПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

Если ДанныеСтроки.ОстатокНачальный < 0 Тогда

ОформлениеСтроки.ЦветФона = ВебЦвет.Красный;

ОформлениеСтроки.ЦветТекста = ВебЦвет.Белый;

КонецЕсли;

КонецПроцедуры

Где:

  • ДанныеСтроки — объект, содержащий данные текущей строки (доступны все поля отчёта).
  • ОформлениеСтроки — объект для настройки внешнего вида (цвет фона, шрифт, начертание).
  • ВебЦвет — встроенная коллекция цветов (ВебЦвет.Зелёный, ВебЦвет.Жёлтый и т.д.).

Для применения этого кода:

  1. Откройте отчёт в режиме Конфигуратор (потребуются права администратора).
  2. Найдите модуль отчёта в дереве объектов (например, Отчёты → ОборотноСальдоваяВедомость → Модуль объекта).
  3. Добавьте процедуру ПриВыводеСтроки (если её нет) и вставьте код.
  4. Сохраните конфигурацию и обновите базу данных.

Открыть конфигуратор с правами администратора

Найти модуль нужного отчёта в дереве объектов

Создать процедуру ПриВыводеСтроки (если отсутствует)

Проверить синтаксис кода перед сохранением

Обновить конфигурацию базы данных-->

3. Использование стилей оформления (CSS-подобный синтаксис)

В современных версиях 1С:Предприятие 8.3 (начиная с 8.3.14) появилась поддержка стилей оформления — аналога CSS для управлением внешним видом отчётов. Это позволяет гибко настраивать цвета, шрифты и границы без глубокого программирования.

Пример создания стиля для выделения строк:

// В модуле отчёта

Процедура ПриСозданииНаСервере(Отказ)

Стиль = Новый СтильОформления("ВыделеннаяСтрока");

Стиль.ЦветФона = ВебЦвет.Жёлтый;

Стиль.ЦветТекста = ВебЦвет.Чёрный;

Стиль.Шрифт = Новый Шрифт("Arial", 10, True); // Жирный шрифт

ЭтотОбъект.Стили.Добавить(Стиль);

КонецПроцедуры

Процедура ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

Если ДанныеСтроки.Сумма > 1000000 Тогда

ОформлениеСтроки.Стиль = ЭтотОбъект.Стили.ВыделеннаяСтрока;

КонецЕсли;

КонецПроцедуры

Преимущества этого метода:

  • 🎨 Централизованное управление стилями — изменяете в одном месте, применяется везде.
  • 🔄 Переиспользование — один стиль можно применить к нескольким отчётам.
  • 🖥️ Адаптивность — стили автоматически подстраиваются под тему оформления (тёмную/светлую).
⚠️ Внимание: Стили оформления не работают в тонком клиенте версий 1С 8.2 и ранних сборках 8.3 (до 8.3.14). Перед использованием проверьте версию платформы в меню Справка → О программе.

4. Выделение строк на основе данных из других таблиц

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

  1. Получить дополнительные данные из регистра или справочника.
  2. Сравнить их с данными текущей строки.
  3. Применить оформление при совпадении.

Пример кода для отчёта по продажам:

Процедура ПродажиПоКлиентамПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

// Получаем задолженность клиента из регистра

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ СУММА(РасчётыСКонтрагентамиОстатки.СуммаОстаток) КАК Задолженность

ИЗ РегистрНакопления.РасчётыСКонтрагентами.Остатки КАК РасчётыСКонтрагентамиОстатки

ГДЕ РасчётыСКонтрагентамиОстатки.Контрагент = &Контрагент

И РасчётыСКонтрагентамиОстатки.СуммаОстаток < 0";

Запрос.УстановитьПараметр("Контрагент", ДанныеСтроки.Клиент);

Результат = Запрос.Выполнить();

Если НЕ Результат.Пустой() Тогда

ОформлениеСтроки.ЦветФона = ВебЦвет.Оранжевый;

КонецЕсли;

КонецПроцедуры

Ключевые моменты:

  • 🔍 Используйте Запрос для получения данных из других источников (регистров, справочников).
  • ⚡ Для ускорения работы добавьте индексы на поля, по которым идёт выборка (в примере — Контрагент).
  • 📌 Кэшируйте результаты запросов, если отчёт выводит много строк (например, с помощью Соответствие).
Как ускорить работу отчёта с дополнительными запросами?

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

1. Заранее получите все нужные данные одним запросом (например, список должников).

2. Сохраните результаты в Соответствие (ключ — идентификатор строки, значение — признак выделения).

3. В процедуре ПриВыводеСтроки берите данные из соответствия, а не выполняйте новый запрос.

5. Динамическое выделение с использованием расшифровки

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

Процедура ОстаткиТоваровПриВыводеЯчейки(Элемент, ОформлениеЯчейки, ДанныеСтроки, Колонка)

Если Колонка.Имя = "Товар" Тогда

// Получаем данные о сроке годности товара

Товар = ДанныеСтроки.Товар;

Если Товар.СрокГодности < ТекущаяДата() Тогда

ОформлениеЯчейки.ЦветФона = ВебЦвет.Красный;

ОформлениеЯчейки.Подсказка = "Товар просрочен!";

КонецЕсли;

КонецЕсли;

КонецПроцедуры

Отличия от ПриВыводеСтроки:

Метод Когда используется Уровень детализации Производительность
ПриВыводеСтроки Выделение всей строки Применяется ко всей строке Выше (один вызов на строку)
ПриВыводеЯчейки Выделение отдельных ячеек Применяется к конкретной ячейке Ниже (вызов для каждой ячейки)
Условное оформление Простые правила без кода Ограничено полями отчёта Самая высокая

6. Выделение строк во внешних обработках отчётов

Если вам нужно выделить строки в внешней обработке (например, в отчёте, созданном партнёром ), алгоритм будет аналогичным, но с некоторыми нюансами:

  1. Откройте обработку в Конфигураторе (файл с расширением .epf).
  2. Найдите модуль объекта и добавьте процедуру ПриВыводеСтроки.
  3. Используйте ЭтотОбъект.Параметры для доступа к данным отчёта.

Пример для внешней обработки:

Процедура ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

// Пример: выделяем строки с нулевым остатком

Если ДанныеСтроки.Остаток = 0 Тогда

ОформлениеСтроки.ЦветФона = ВебЦвет.Серый;

ОформлениеСтроки.ЦветТекста = ВебЦвет.ТёмноСерый;

КонецЕсли;

КонецПроцедуры

Особенности работы с внешними обработками:

  • 🔧 Нет доступа к базе напрямую — используйте параметры отчёта или временные таблицы.
  • 📤 Обновление обработки — после изменений сохраните файл .epf и перезагрузите его в .
  • 🛡️ Безопасность — обработки с кодом могут блокироваться антивирусом или политиками .
💡

Если внешняя обработка не сохраняет изменения оформления, проверьте настройки прав доступа в . Иногда требуется добавить обработку в список доверенных в меню Сервис → Параметры → Безопасность.

Типичные ошибки и как их избежать

При выделении строк цветом пользователи часто сталкиваются с следующими проблемами:

  1. Цвета не применяются:
    • Проверьте, что процедура ПриВыводеСтроки правильно объявлена (с точно таким же именем, как в модуле отчёта).
    • Убедитесь, что отчёт пересобран после изменений (в Конфигураторе нажмите F7).
  • Медленная работа отчёта:
    • Избегайте выполнения запросов внутри ПриВыводеСтроки — получайте данные заранее.
    • Используйте Соответствие для кэширования результатов.
    • Цвета не сохраняются при экспорте:
      • При экспорте в Excel или PDF проверьте настройки экспорта (иногда нужно включить опцию Сохранять оформление).
      • В 1С 8.2 цвета могут не экспортироваться из-за ограничений формата.
    ⚠️ Внимание: В веб-клиенте некоторые цвета могут отображаться иначе из-за особенностей браузера. Перед публикацией отчёта на портале проверьте его внешний вид в Chrome, Edge и Firefox.
    💡

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

    FAQ: Частые вопросы по выделению строк в 1С

    Можно ли выделить строку цветом в отчёте, созданном в 1С:Предприятие 8.2?

    Да, но с ограничениями:

    • В 8.2 нет стилей оформления (доступно только с 8.3.14).
    • Для программного выделения используйте процедуру ПриВыводеСтроки (синтаксис аналогичный).
    • Условное оформление в конструкторе работает, но может отсутствовать в некоторых конфигурациях.
    Как выделить строку, если нужно учитывать данные из другого отчёта?

    Используйте один из двух подходов:

    1. Объединение данных в запросе: Создайте запрос, который сразу возвращает все нужные поля (включая признаки для выделения).
    2. Временные таблицы: Заранее сохраните данные из второго отчёта во временную таблицу и обращайтесь к ней в процедуре ПриВыводеСтроки.

    Пример кода для временной таблицы:

    Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, Результат)
    

    Запрос = Новый Запрос;

    Запрос.Текст = "ВЫБРАТЬ ... В ТВ"; // Запрос для создания временной таблицы

    Запрос.Выполнить();

    КонецПроцедуры

    Почему после обновления перестали работать цвета в отчёте?

    Вероятные причины:

    • Изменилась структура отчёта (переименованы колонки или параметры).
    • Обновилась платформа, и старый код стал несовместим (например, изменился синтаксис ВебЦвет).
    • Сбросились настройки условного оформления (проверьте вкладку Условное оформление).

    Решение: откройте отчёт в Конфигураторе и сравните текущий код с резервной копией (если есть).

    Можно ли выделить строку градиентом или узором, а не сплошным цветом?

    В стандартных механизмах такой возможности нет. Однако есть обходные пути:

    • Используйте внешние компоненты (например, 1C:Enterprise Development Tools) для рисования кастомных стилей.
    • Экспортируйте отчёт в Excel и применяйте градиенты там.
    • Для веб-клиента можно использовать CSS-стили через расширения (требуются знания HTML/JS).
    Как сделать, чтобы цвет строки зависел от права доступа пользователя?

    Используйте объект ПользовательИнформационнойБазы и проверяйте его права в процедуре ПриВыводеСтроки:

    Процедура ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    

    ТекущийПользователь = ПользовательИнформационнойБазы.ТекущийПользователь();

    Если НЕ ТекущийПользователь.ПроверитьПрава("ПросмотрКонфиденциальныхДанных") Тогда

    ОформлениеСтроки.ЦветФона = ВебЦвет.Серый;

    ОформлениеСтроки.ЦветТекста = ВебЦвет.Чёрный;

    КонецЕсли;

    КонецПроцедуры

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