1С-Предприятие 8.0. Практическое пособие разработчика

Вычисляемые колонки в списках


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

Мы рассмотрим эту ситуацию на примере отображения актуальной цены в списке справочника "Номенклатура".

Откроем в конфигураторе форму списка справочника "Номенклатура" (или, если ее нет, создадим основную форму списка). Воспользуемся контекстным меню правой кнопки мыши и добавим в табличное поле колонку с именем и текстом шапки "Цена":

В табличное поле списка справочника Номенклатура добавим колонку Цена...

Создадим обработчик события табличного поля "При выводе строки", и добавим в него следующий текст:

Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

   //для элементов отобразим цену и ...



   Если Не ДанныеСтроки.ЭтоГруппа Тогда

       ОтборНоменклатуры = Новый Структура;

       ОтборНоменклатуры.Вставить("Номенклатура", ДанныеСтроки.Ссылка); [524]

       ОформлениеСтроки.Ячейки.Цена.ОтображатьТекст = Истина;

       АктуальнаяЦена = РегистрыСведений.Цены.ПолучитьПоследнее(, ОтборНоменклатуры).Цена;

       ОформлениеСтроки.Ячейки.Цена.Текст = АктуальнаяЦена;

       //низкие цены выделим другим цветом

       Если АктуальнаяЦена < 500 Тогда

           ОформлениеСтроки.Ячейки.Цена.ЦветТекста = WEBЦвета.Васильковый;

       КонецЕсли;

   КонецЕсли;

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

Обработчик события табличного поля "При выводе строки" передает три параметра: "Элемент" – само табличное поле, для которого было вызвано это событие, "ОформлениеСтроки" – объект, содержащий оформление выводимой строки табличного поля и "ДанныеСтроки" – элемент выборки справочника "Номенклатура", отображаемый в выводимой строке.




Первое, что мы делаем в этом обработчике – проверяем, что выводимый элемент справочника не является группой. В этом случае мы создаем вспомогательную структуру для описания отбора ("ОтборНоменклатуры") и помещаем в ячейку "Цена" актуальное значение цены, полученной из периодического регистра сведений "Цены".

Затем мы анализируем значение выведенной цены и если оно находится в нижнем ценовом диапазоне (менее 500 рублей), выделяем это значение васильковым цветом. Для указания цвета мы используем системный набор значений WEBЦвета.

Запустим 1С:Предприятие в режиме отладки и посмотрим, какой внешний вид примет теперь справочник "Номенклатура":



[525]

При использовании обработчика события "При выводе строки" нужно быть крайне внимательным и всегда стараться минимизировать обращения к данным, которые не содержатся в параметре "ДанныеСтроки".

Дело в том, что обработчик этого события вызывается каждый раз при возникновении необходимости перерисовки видимой области табличного поля и отрабатывает столько раз, сколько строк содержит видимая область. Необходимость перерисовки видимой области табличного поля возникает в результате многих событий, связанных как с самим табличным полем, так и с формой. Если проанализировать работу обработчиков событий формы и табличного поля, можно увидеть, что простое добавление новой строки в табличное поле вызовет, скорее всего, не одну, а несколько перерисовок табличного поля.

Поэтому обращение в этом обработчике не к данным строки, а к данным, содержащимся в базе данных (получение значений через точку, обращение к итогам регистров и т.д.), может сильно замедлить вывод формы на экран. Возможно, в некоторых случаях следует отказаться от создания вычисляемых колонок в списках, и выводить вычисляемые данные только для текущей строки списка в дополнительные поля, расположенные на форме. [526]


Содержание раздела