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