Разработка и Конфигурация · 10 мин
Как выделить строку другим цветом в 1С 8.3
Пошаговая инструкция: как выделить строку другим цветом в 1С 8.3 через условное оформление списка, табличной части и динамического списка. Примеры кода.
В 1С 8.3 строку в списке документов, табличной части или динамическом списке можно выделить другим цветом двумя способами: через настройку условного оформления в конфигураторе (без единой строчки кода) и программно — через коллекцию «УсловноеОформление» формы или запроса. Оба подхода работают на управляемых формах и не требуют изменения типовых механизмов платформы.
Условное оформление срабатывает по заданному отбору: например, «если документ не проведён — закрасить строку серым», «если сумма больше лимита — выделить красным». Платформа сама применяет оформление ко всем строкам, удовлетворяющим условию, и обновляет его при изменении данных.
Ниже разобраны оба способа с примерами кода, ограничения для динамических списков, типичные ошибки и способы проверить результат. Материал ориентирован на разработчиков и продвинутых пользователей, работающих в конфигураторе 1С:Предприятие 8.3.
Как работает условное оформление в 1С 8.3
Условное оформление — это механизм платформы, который изменяет внешний вид ячеек и строк таблицы в зависимости от данных. Он состоит из трёх частей: отбор (условие сравнения поля с значением), оформление (цвет фона, цвет текста, шрифт) и область действия (к каким полям таблицы применять).
Ключевой момент: чтобы закрасить всю строку, а не одну ячейку, нужно либо перечислить все видимые колонки в свойстве «Оформляемые поля», либо оставить список полей пустым — тогда оформление применится ко всей строке таблицы. Именно пропущенные поля чаще всего становятся причиной ситуации «закрасилась только одна колонка».
Условное оформление существует у трёх объектов: у формы (применяется к таблицам формы), у динамического списка (настройка в свойствах реквизита формы или в запросе через СКД) и у отчёта на СКД. Способ настройки зависит от того, где находится таблица.
Настройка цвета строки в конфигураторе без кода
Это основной способ для типовых доработок: он не требует программирования и легко переносится через расширения конфигурации. Порядок действий одинаков для списка документов, справочника и табличной части.
- Откройте конфигуратор, найдите нужный объект (например, документ «РеализацияТоваровУслуг») и откройте форму списка.
- В дереве элементов формы выделите таблицу «Список».
- В палитре свойств найдите пункт «Условное оформление» и откройте его (кнопка с тремя точками).
- Нажмите «Добавить». На вкладке «Оформление» установите параметр «Цвет фона» — выберите нужный цвет.
- На вкладке «Условие» добавьте отбор: левое значение — поле списка (например, «Проведен»), вид сравнения — «Равно», правое значение — «Нет» (Ложь).
- На вкладке «Оформляемые поля» либо добавьте все колонки таблицы, либо оставьте список пустым для оформления всей строки.
- Нажмите «ОК», обновите конфигурацию базы данных (F7) и проверьте результат в режиме предприятия.
Для табличной части документа логика та же, но условное оформление настраивается на форме документа, а поля отбора указываются с путём через табличную часть, например «Объект.Товары.Цена». Платформа подставит нужный путь автоматически при выборе поля из списка.
- 1Откройте форму списка и выделите таблицу
- 2Откройте свойство «Условное оформление» и добавьте элемент
- 3Задайте цвет фона на вкладке «Оформление»
- 4Настройте отбор на вкладке «Условие»
- 5Укажите оформляемые поля или оставьте список пустым
- 6Обновите конфигурацию и проверьте в режиме предприятия
Программное выделение строки цветом
Программный способ нужен, когда условие зависит от параметров, известных только во время выполнения: например, цвет задаёт пользователь в настройках, или условие строится по данным другого объекта. Код размещают в модуле формы, обычно в обработчике «ПриСозданииНаСервере».
Процедура УстановитьУсловноеОформление()
ЭлементОформления = ЭтаФорма.УсловноеОформление.Элементы.Добавить();
// Условие: документ не проведён
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Проведен");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Ложь;
ЭлементОтбора.Использование = Истина;
// Оформление: серый фон строки
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Серебристый);
КонецПроцедуры
Обратите внимание на путь к полю: для динамического списка с именем «Список» поле указывается как «Список.Проведен», для табличной части — «Объект.Товары.Сумма». Ошибка в пути — самая частая причина, почему код отрабатывает без исключения, но цвет не применяется.
Если нужно закрасить только конкретные колонки, добавьте оформляемые поля в цикле:
ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
ОформляемоеПоле.Использование = Истина;
Элемент = УсловноеОформление.Элементы.Добавить();
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ПометкаУдаления");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);Особенности для динамических списков
Если список построен на динамическом списке с произвольным запросом, условное оформление формы работает, но с ограничением: поле, по которому строится отбор, должно присутствовать в выборке запроса. Если поля нет в тексте запроса, отбор не сработает — платформа просто не сможет получить значение для сравнения.
Второй вариант — задать условное оформление прямо в настройках динамического списка через свойство «Условное оформление» реквизита формы типа «ДинамическийСписок». Этот способ предпочтительнее, когда список использует основную таблицу без произвольного запроса: настройка хранится вместе со списком и корректно работает с группировками и отборами пользователя.
При включённом свойстве динамического списка «АвтозаполнениеДоступныхПолей» и сложном запросе с соединениями проверяйте, что поле отбора доступно на верхнем уровне выборки, а не только во вложенном запросе. Иначе условное оформление игнорируется без сообщений об ошибке.
Выбор цвета и доступные параметры оформления
Цвет можно задать тремя способами: через перечисление WebЦвета (например, WebЦвета.СветлоЖелтый), через конструктор Новый Цвет(255, 230, 230) с компонентами RGB или через стиль конфигурации (элементы стиля). Для прикладных решений предпочтителен стиль: цвета единообразны во всех формах и меняются централизованно.
Кроме «ЦветФона» доступны параметры «ЦветТекста», «Шрифт» (можно сделать текст жирным или зачёркнутым — удобно для помеченных на удаление объектов), «Текст» (подмена отображаемого значения) и «Доступность». Комбинация нескольких параметров в одном элементе оформления работает корректно.
При выборе цвета учитывайте читаемость: тёмный фон с тёмным текстом делает данные неразличимыми. Проверяйте отображение и в тонком, и в веб-клиенте — оттенки могут слегка различаться, а пользователи веб-клиента чаще всего и жалуются на «пропавший» текст.
Проверка результата и типичные ошибки
После настройки откройте список в режиме предприятия и найдите строки, которые должны попадать под условие. Если данных нет — создайте тестовый документ с нужными значениями. Условное оформление применяется мгновенно при открытии формы и при изменении данных в строке.
Отдельная группа проблем — конфликт нескольких элементов условного оформления. Если два условия пересекаются и задают разный цвет фона одному полю, результат зависит от порядка элементов в коллекции. Чтобы избежать непредсказуемого поведения, делайте условия взаимоисключающими или объединяйте их в один элемент с составным отбором (группа «И»/«ИЛИ»).
Как проверить результат
Фон строки изменился на заданный цвет
Цвет не изменился — проверяйте путь к полю и условие отбора
Цвет появляется или исчезает сразу после записи
Цвет обновляется только после переоткрытия формы — проверьте, что оформление привязано к списку, а не к копии данных
Цвет и контраст текста читаемы
Текст сливается с фоном — скорректируйте пару ЦветФона/ЦветТекста
Частые вопросы
Как закрасить всю строку, а не одну ячейку?
Оставьте список «Оформляемые поля» пустым — тогда оформление распространится на все колонки строки. Если поля уже добавлены, удалите их или перечислите все видимые колонки таблицы вручную.
Почему условное оформление не работает в динамическом списке с произвольным запросом?
Чаще всего поле, по которому построен отбор, отсутствует в выборке запроса или недоступно на верхнем уровне. Добавьте поле в секцию ВЫБРАТЬ запроса и проверьте путь к нему в отборе условного оформления.
Можно ли выделить строку цветом без конфигуратора, прямо в режиме предприятия?
Да, если форма списка поддерживает команду «Ещё — Изменить форму» или настройку списка. В ряде типовых конфигураций в настройке списка доступна вкладка «Условное оформление», где пользователь может добавить свои условия и цвета. Набор возможностей зависит от конкретной конфигурации.
Как выделить строку по условию сравнения двух полей, например «Цена больше МаксимальнойЦены»?
В отборе условного оформления в правом значении выберите тип «Поле компоновки данных» вместо конкретного значения и укажите второе поле. Вид сравнения — «Больше». Это работает и в конфигураторе, и программно.
Применится ли условное оформление в расширении конфигурации?
Да. Расширение позволяет заимствовать форму и добавить в неё элементы условного оформления, не изменяя типовую конфигурацию. Это рекомендуемый способ доработки форм конфигураций на поддержке.
Как убрать ранее добавленное программное условное оформление?
Удалите код добавления элемента из модуля формы — коллекция условного оформления формируется заново при каждом создании формы, поэтому отдельной очистки не требуется. Если элементов несколько и нужно удалить конкретный, найдите его в коллекции ЭтаФорма.УсловноеОформление.Элементы и вызовите метод Удалить.
Что важно запомнить
Строку в 1С 8.3 выделяют цветом через условное оформление: в конфигураторе — без кода, программно — через коллекцию УсловноеОформление формы. Чтобы закрасилась вся строка, оставьте список оформляемых полей пустым. Проверяйте путь к полю отбора и наличие поля в запросе динамического списка, а типовые формы дорабатывайте через расширение.