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