HelpF.pro

Табличное поле ~ Дополнительная вычисляемая или текстовая колонка в табличной части, списке, журнале

Как добавить дополнительную колонку в табличном поле?
Добавляете колонку, а все вычисления реализуются с помощью события ПриВыводеСтроки табличного поля:
Код 1C v 8.х
 // 1-й вариант:
Процедура НоменклатураПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
СамаЯчейка = ОформлениеСтроки.Ячейки.ИмяЯчейки;
СамаЯчейка.ОтображатьТекст = Истина;
СамаЯчейка.Текст = "Лалала";
КонецПроцедуры

// 2-й вариант:
Процедура НоменклатураПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки.Ячейки.ИмяЯчейки.УстановитьТекст("Лалала");
КонецПроцедуры

// 3-й вариант:
Процедура НоменклатураПриПолученииДанных(Элемент, ОформленияСтрок)
Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
СамаЯчейка = ОформлениеСтроки.Ячейки.ИмяЯчейки;
СамаЯчейка.ОтображатьТекст = Истина;
СамаЯчейка.Текст = "Лалала";
КонецЦикла;
КонецПроцедуры



С помощью этого события можно выводить не только текст, но также флажки и картинки, например:
Картинка:
Код 1C v 8.х
 Ячейка = ОформлениеСтроки.Ячейки.ТипСобытия;
Ячейка.ОтображатьТекст = Ложь;
Ячейка.ОтображатьФлажок = Ложь;
Ячейка.ОтображатьКартинку = Истина;
Ячейка.ИндексКартинки = 1;

// или другой пример:
ТЗ=Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ПометкаУдаления",,"ПометкаУдаления");
ТЗ.Колонки.Добавить("Проведен",,"Проведен");

КолонкаКартинки=ЭлементыФормы.ТЗ.Колонки.Вставить(0,"<");
КолонкаКартинки.Имя="Картинка";
КолонкаКартинки.Ширина=5;
КолонкаКартинки.ДанныеКартинки="ИндексКартинки";
КолонкаКартинки.КартинкиСтрок= БиблиотекаКартинок.СостоянияДокумента;

Процедура ТЗПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Если ДанныеСтроки.Проведен Тогда
ОформлениеСтроки.Ячейки.Картинка.ИндексКартинки=0;
ИначеЕсли НЕ ДанныеСтроки.Проведен Тогда
ОформлениеСтроки.Ячейки.Картинка.ИндексКартинки=2;
ИначеЕсли ДанныеСтроки.ПометкаУдаления Тогда
ОформлениеСтроки.Ячейки.Картинка.ИндексКартинки=1;
КонецЕсли;


Флажки:
Код 1C v 8.х
 ОформлениеСтроки.Ячейки.Колонка2.ОтображатьФлажок= Истина;
ОформлениеСтроки.Ячейки.Колонка2.УстановитьТекст("");
ОформлениеСтроки.Ячейки.Колонка2.Флажок = Истина;


Еще можно менять цвет фона и текста, шрифт и другие характеристики оформления:
Код 1C v 8.х
 ОформлениеСтроки.Ячейки.<ИмяКолонки>.ЦветФона = Новый Цвет (255,100,100);
ОформлениеСтроки.Ячейки.<ИмяКолонки>.Шрифт = Новый Шрифт(,,Истина);


Можно также управлять доступностью отдельных строк и ячеек табличного поля:
Код 1C v 8.х
 ОформлениеСтроки.Ячейки.Назв.ТолькоПросмотр = Истина;   


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

Но здесь нужно быть осторожным! Событие ПриВыводеСтроки вызывается довольно часто при перерисовке табличного поля. Поэтому процедура должна отрабатывать довольно быстро, чтобы не тормозить вывод списка. Если в ней происходит обращение к базе данных, то вывод может резко замедлиться.

Если начались тормоза, то рекомендуется сделать следующее:
1. Кеширование результата запроса в переменной модуля формы (таблица значений или массив, еще можно использовать соответствие, которое индексируется для примитивных типов данных, например, код товара или артикул)
2. При отключенной колонке (видимость) запрос к базе НЕ должен выполняться.
По умолчанию колонку держать выключенной, включение только по кнопке в форме или при личных настройках определенного пользователя.
3. Лучше выполнять один большой запрос на несколько товаров, чем несколько маленьких запросов на один товар.
4. Список товаров нужно передавать как ПАРАМЕТР виртуальной таблицы Остатки, а не как параметр условия ГДЕ.
5. При повышенных требованиях к скорости отображения списка и большом количестве пользователей можно завести регистр сведений, хранящий актуальные остатки. Для поддержки его актуальности можно создать последовательность.
6. Еще вариант через обработчик - при ПолученииДанных (вроде так называется)... Там сразу передается массив ОформленияСтрок - в нем все строки сразу и вызывается он реже, чем при выводе строки...
7. Завести в табличной части реквизит, куда при открытии формы и по мере надобности помещать остатки, это значительно ускорит вывод остатков, правда будет не лучшим образом влиять на флаг Модифицированность.

Источник.
Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq8/view/671.html