рубрики: Работа с формами | Дата: 18 августа, 2017
Скачать обработку с примерами из статьи: professia1c_DynamicListCellAppearance.epf
Платформа 8.3.10; Тип формы: управляемая.
Конечно же все, кто работал с управляемыми формами в 1С:Предприятии 8, сталкивались с таким объектом как Динамический список. И конечно же знают, что он тесно связан с системой компоновки данных, что позволяет в том числе настраивать условное оформление для строк списка.
То есть в зависимости от каких-то условий можно установить цвет фона, параметры шрифта и т.д. Причем делать это можно в пользовательском режиме — не прибегая к программированию. С другой стороны для осуществления условного оформления может потребоваться наличие вспомогательных полей, которые не содержаться в исходной таблице динамического списка. Это влечет за собой необходимость соединения таблиц, что при большом их количестве может замедлить работу динамического списка и сделать работу пользователя некомфортной. Поэтому начиная с версии 8.3.10 у динамического списка появилось новый обработчик события — ПриПолученииДанныхНаСервере в котором мы можем программно обработать текущую коллекцию строк динамического списка, а также программно выполнить условное оформление ячеек. Здесь можно провести аналогию с событием ПриПолученииДанных для табличных частей в 8.2.
Для примера воспользуемся таблицей, которую я уже неоднократно использовал в последних статьях:
КодТовара | Наименование | Страна | Вкус | Цена | Количество |
---|---|---|---|---|---|
001 | Яблоки | Россия | Кисло-сладкий | 50 | 100 |
002 | Апельсины | Турция | Сладкий | 90 | 150 |
003 | Мандарины | Марокко | Обалденный | 80 | 200 |
004 | Дуриан | Таиланд | Странный | 350 | 0 |
Так же как и в прошлые разы, для того чтобы вы могли скачать обработку и экспериментировать с ней независимо от конфигурации, жестко пропишу эту таблицу в запросе динамического списка:
То есть при открытии обработки в режиме предприятия она будет выглядеть вот так:
А теперь добавим в свойствах элемента формы СписокТовары событие ПриПолученииДанныхНаСервере
и программно раскрасим ячейки со «странным» вкусом в розовый цвет:
&НаСервереБезКонтекста
Процедура СписокТоварыПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
Для каждого СтрокаСписка Из Строки Цикл
Если СтрокаСписка.Значение.Данные.Вкус = "Странный" Тогда
СтрокаСписка.Значение.Оформление["Вкус"].УстановитьЗначениеПараметра("ЦветФона", WebЦвета.ТусклоРозовый);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Как видим, согласно директиве компиляции выполнение кода происходит на сервере без контекста. Поэтому кроме коллекции строк в параметре Строки нам никакие реквизиты формы в этой процедуре недоступны.
И теперь при открытии обработки в режиме предприятия мы получаем следующую картину:
Конечно же здесь приведен простейший случай. На практике, внутри процедуры, обрабатывающей событие ПриПолученииДанныхНаСервере, может содержаться вспомогательный запрос, с помощью которого будет определяться необходимость условного оформления. При этом для параметра Строки бывает целесообразно использовать метод ПолучитьКлючи(), который возвращает массив ключей для всей коллекции строк. И этот массив может передаваться в запрос в качестве параметра.
Кроме условного оформления, событие ПриПолученииДанныхНаСервере может использоваться с целью получения вспомогательных данных для динамического списка, если получение их с помощью запроса динамического списка затруднено или занимает много времени.
Спасибо большое за статью! Пару дней с условным оформлением мучалась, ничего не получалось, а с таким способом все сразу ок!