Вычисляемые колонки в списках
Необходимость вывода произвольных данных в колонках списка возникает, когда вместе с элементом списка нужно отобразить некоторую вычисляемую информацию.
Мы рассмотрим эту ситуацию на примере отображения актуальной цены в списке справочника "Номенклатура".
Откроем в конфигураторе форму списка справочника "Номенклатура" (или, если ее нет, создадим основную форму списка). Воспользуемся контекстным меню правой кнопки мыши и добавим в табличное поле колонку с именем и текстом шапки "Цена":
В табличное поле списка справочника Номенклатура добавим колонку Цена...
Создадим обработчик события табличного поля "При выводе строки", и добавим в него следующий текст:
Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
//для элементов отобразим цену и ...
Если Не ДанныеСтроки.ЭтоГруппа Тогда
ОтборНоменклатуры = Новый Структура;
ОтборНоменклатуры.Вставить("Номенклатура", ДанныеСтроки.Ссылка); [524]
ОформлениеСтроки.Ячейки.Цена.ОтображатьТекст = Истина;
АктуальнаяЦена = РегистрыСведений.Цены.ПолучитьПоследнее(, ОтборНоменклатуры).Цена;
ОформлениеСтроки.Ячейки.Цена.Текст = АктуальнаяЦена;
//низкие цены выделим другим цветом
Если АктуальнаяЦена < 500 Тогда
ОформлениеСтроки.Ячейки.Цена.ЦветТекста = WEBЦвета.Васильковый;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Обработчик события табличного поля "При выводе строки" передает три параметра: "Элемент" – само табличное поле, для которого было вызвано это событие, "ОформлениеСтроки" – объект, содержащий оформление выводимой строки табличного поля и "ДанныеСтроки" – элемент выборки справочника "Номенклатура", отображаемый в выводимой строке.
Первое, что мы делаем в этом обработчике – проверяем, что выводимый элемент справочника не является группой. В этом случае мы создаем вспомогательную структуру для описания отбора ("ОтборНоменклатуры") и помещаем в ячейку "Цена" актуальное значение цены, полученной из периодического регистра сведений "Цены".
Затем мы анализируем значение выведенной цены и если оно находится в нижнем ценовом диапазоне (менее 500 рублей), выделяем это значение васильковым цветом. Для указания цвета мы используем системный набор значений WEBЦвета.
Запустим 1С:Предприятие в режиме отладки и посмотрим, какой внешний вид примет теперь справочник "Номенклатура":
[525]
При использовании обработчика события "При выводе строки" нужно быть крайне внимательным и всегда стараться минимизировать обращения к данным, которые не содержатся в параметре "ДанныеСтроки".
Дело в том, что обработчик этого события вызывается каждый раз при возникновении необходимости перерисовки видимой области табличного поля и отрабатывает столько раз, сколько строк содержит видимая область. Необходимость перерисовки видимой области табличного поля возникает в результате многих событий, связанных как с самим табличным полем, так и с формой. Если проанализировать работу обработчиков событий формы и табличного поля, можно увидеть, что простое добавление новой строки в табличное поле вызовет, скорее всего, не одну, а несколько перерисовок табличного поля.
Поэтому обращение в этом обработчике не к данным строки, а к данным, содержащимся в базе данных (получение значений через точку, обращение к итогам регистров и т.д.), может сильно замедлить вывод формы на экран. Возможно, в некоторых случаях следует отказаться от создания вычисляемых колонок в списках, и выводить вычисляемые данные только для текущей строки списка в дополнительные поля, расположенные на форме. [526]