Профессия — 1С

Рукопашный бой Карташ

Категории

Оформление ячеек динамического списка

рубрики: Работа с формами | Дата: 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Цвета.ТусклоРозовый);

		КонецЕсли;

	КонецЦикла;

КонецПроцедуры

Как видим, согласно директиве компиляции выполнение кода происходит на сервере без контекста. Поэтому кроме коллекции строк в параметре Строки нам никакие реквизиты формы в этой процедуре недоступны.

И теперь при открытии обработки в режиме предприятия мы получаем следующую картину:

Конечно же здесь приведен простейший случай. На практике, внутри процедуры, обрабатывающей событие ПриПолученииДанныхНаСервере, может содержаться вспомогательный запрос, с помощью которого будет определяться необходимость условного оформления. При этом для параметра Строки бывает целесообразно использовать метод ПолучитьКлючи(), который возвращает массив ключей для всей коллекции строк. И этот массив может передаваться в запрос в качестве параметра.

Кроме условного оформления, событие ПриПолученииДанныхНаСервере может использоваться с целью получения вспомогательных данных для динамического списка, если получение их с помощью запроса динамического списка затруднено или занимает много времени.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

   

2017г. Профессия — 1С. Обмен опытом по программированию в 1С