В процессе разработки интерфейсов в системе «1С:Предприятие» часто возникает задача визуального выделения важных данных. Яркий пример — необходимость окрасить строку таблицы в определенный цвет (например, нежно-синий), когда пользователь или система устанавливает флажок (булево значение Истина) в этой строке. Это значительно повышает эргономику интерфейса и помогает пользователям быстрее ориентироваться в больших массивах информации.
В этой статье мы подробно разберем, как правильно реализовать такое выделение в современных управляемых формах 1С 8.3. Мы проанализируем, почему старые методы отрисовки больше не работают, пошагово настроим оформление через Конфигуратор и напишем гибкий программный код, соответствующий стандартам разработки фирмы «1С».
Если вы ранее работали с обычными формами (в толстом клиенте 1С 8.2 или 8.1), то наверняка помните события таблицы ПриВыводеСтроки или ПриПолученииДанных. В этих обработчиках разработчики напрямую управляли свойствами ячеек и строк, изменяя их цвет «на лету» в коде.
Рассмотрим, почему в управляемом приложении (1С v8.3) этот подход использовать категорически нельзя (и платформа физически не предоставит вам таких событий):
Выяснив архитектурные особенности, перейдем к первому и самому простому способу решения нашей задачи — интерактивной настройке условного оформления в Конфигураторе.
Если вам нужно настроить статическое оформление, которое не будет меняться в зависимости от сложных алгоритмов в процессе работы пользователя, проще всего сделать это визуально в редакторе формы. Разберем этот процесс по шагам:
Alt + Enter, предварительно выбрав форму), чтобы открыть палитру свойств всей управляемой формы.Цвет фона. Мы настоятельно рекомендуем не выбирать ядовито-синий цвет (RGB 0, 0, 255), так как на его фоне черный текст станет абсолютно нечитаемым. Вместо этого выберите мягкий пастельный оттенок, например, из палитры Web-цветов — WebЦвета.Лазурный или задайте его вручную через RGB (например, 220, 235, 255). Нажмите «ОК».Левое значение выберите ваш реквизит-флажок (путь будет выглядеть примерно так: Объект.ИмяТабличнойЧасти.ИмяРеквизитаФлажка). В качестве вида сравнения укажите Равно, а в колонке Правое значение выберите Да (что соответствует значению Истина).ТабличнаяЧасть1). Если же требуется раскрасить только конкретную ячейку с флажком или соседнее поле, укажите именно эти элементы (колонки) таблицы формы.Теперь при открытии формы и при интерактивном изменении флажка пользователем платформа будет автоматически перерисовывать строку в приятный синий цвет.
Несмотря на простоту интерактивного метода, стандарты разработки фирмы «1С» (изложенные на ИТС) рекомендуют выполнять настройку условного оформления программно. Рассмотрим подробнее преимущества этого подхода:
Проанализируем пример кода, который решает нашу задачу. Этот код необходимо разместить в модуле управляемой формы в обработчике события ПриСозданииНаСервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Инициализируем настройку оформления при создании формы
НастроитьПодсветкуСтрокТаблицы();
КонецПроцедуры
&НаСервере
Процедура НастроитьПодсветкуСтрокТаблицы()
// 1. Создаем новый элемент условного оформления формы
НовыйЭлементОформления = УсловноеОформление.Элементы.Добавить();
// 2. Указываем оформление: задаем нежно-синий цвет фона
// Мы используем объект Цвет, определяя его по компонентам RGB
НежноСинийЦвет = Новый Цвет(220, 235, 255);
НовыйЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", НежноСинийЦвет);
// 3. Формируем условие применения оформления
ЭлементОтбора = НовыйЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
// Обратите внимание: левое значение — это путь к данным реквизита формы
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ИмяВашейТабличнойЧасти.ИмяРеквизитаФлажка");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
ЭлементОтбора.Использование = Истина;
// 4. Указываем, какие поля на форме подлежат оформлению
// Для окрашивания всей строки добавляем саму таблицу формы как элемент оформления
ОформляемоеПоле = НовыйЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ИмяЭлементаТаблицыНаФорме");
ОформляемоеПоле.Использование = Истина;
КонецПроцедуры
Давайте подробно разберем ключевые моменты этого кода:
УсловноеОформление, которая доступна непосредственно в модуле управляемой формы на стороне сервера.УстановитьЗначениеПараметра("ЦветФона", ...). Помимо фона, вы можете управлять и другими параметрами, например, свойством Шрифт (чтобы сделать текст жирным) или ЦветТекста.ЛевоеЗначение отбора мы прописываем путь к данным через объектную модель (начиная с Объект...), а в оформляемых полях (свойство Поле) мы указываем имя самого визуального элемента (колонки или таблицы), расположенного на управляемой форме. Ошибка в путях — самая частая причина, по которой программное оформление может не взлететь.Если ваша таблица на форме является не просто табличной частью документа, а отображает данные базы через Динамический список (например, список документов или справочник), то настраивать условное оформление нужно немного иначе.
У динамического списка есть свое собственное свойство условного оформления. Если настроить оформление на уровне всей формы для динамического списка, это может негативно сказаться на производительности. Для списков стандартами 1С рекомендуется обращаться к свойству компоновщика настроек самого списка. Посмотрим на пример кода:
&НаСервере
Процедура НастроитьОформлениеДинамическогоСписка()
// Адресация идет через настройки компоновщика конкретного динамического списка
НовыйЭлемент = Список.КомпоновщикНастроек.Настройки.УсловноеОформление.Элементы.Добавить();
// Задаем цвет фона
НовыйЭлемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоСиний);
// Условие: если поле "ФлагАктивности" равно Истина
ЭлементОтбора = НовыйЭлемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФлагАктивности"); // Без префикса "Объект"
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
// Оформляемые поля
ПолеОформления = НовыйЭлемент.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ФлагАктивности"); // Имя колонки в списке
КонецПроцедуры
В случае динамического списка в путях компоновки данных (ПолеКомпоновкиДанных) мы указываем чистые имена полей из запроса динамического списка, без префиксов типа Объект.ТабличнаяЧасть. Это делает код чище и логичнее.
Мы успешно решили задачу выделения строк с установленным флажком синим фоном. Подводя итог, выделим несколько золотых правил работы с условным оформлением в 1С:
ПриСозданииНаСервере — это защитит вашу конфигурацию от ошибок при будущем обновлении и переименовании реквизитов.КомпоновщикНастроек.Настройки самого списка, а для обычных таблиц значений и табличных частей — на уровне свойств формы.Используя эти простые и эффективные практики, вы сможете сделать интерфейсы ваших прикладных решений в 1С 8.3 максимально дружелюбными, современными и быстрыми!