1с как программно добавить колонку в табличную часть
Часто бывает ситуация, когда необходимо программно управлять составом табличной части в управляемой форме.
В данном примере рассмотрим следующую ситуацию: есть управляемая форма, на управляемой форме есть таблица — связанная с реквизитом формы. Нам надо удалить одни колонки и добавить другие программным способом. Массив удаляемых и добавляемых колонок определен нами заранее.
Перед добавлением новых элементов на форму, необходимо добавить сами реквизиты формы:
Теперь определим удаляемые реквизиты:
После подготовки массивов — редактируем реквизты формы
После редактирования реквизитов можно приступать к редактированию элементов формы:
1С:Заметки
Назначение: код предназначен для добавления колонки в табличную часть.
Номенклатура объектов:
Разработка на форме:
1.Если требуется добавить колонку с реквизитом объекта, то это делается так:
На форме «пкм – добавить колонку» и в поле «Данные» выбираем реквизит.
2.Если требуется добавить колонку с вычисляемым значением, которое не будет храниться в базе, а будет каждый раз вычисляться при открытии формы, то это делается так: 
На форме «пкм – добавить колонку», а поле «Данные» не заполняем. Затем в процедуре «ПриВыводеСтроки» в модуле формы прописываем нужный код.
Как программно добавить колонку в табличную часть формы документа. Форма обычная
Да проще обновлять. Именно за этим такой «изысканный» способ размещения элементов на форме. Вот такой код работает. Спасибо всем за помощь.
ЭлементыФормы.РаботникиОрганизации.Колонки.Добавить(«Колонка1», «Дней компенсации»);
ЭлементыФормы.РаботникиОрганизации.Колонки.Колонка1.Данные = «Колонка1»;
ЭлементыФормы.РаботникиОрганизации.Колонки.Колонка1.УстановитьЭлементУправления(Тип(«ПолеВвода»));
1С 8.x : Табличное поле
Обычно колонка должна быть рассчитываемой, или зависимой от данных, поэтому нужно задействовать второй параметр ДанныеСтроки. Этот механизм можно использовать для отображения остатков товаров в форме подбора, текущих цен, долга контрагента, другой информации по строкам.
Но здесь нужно быть осторожным! Событие ПриВыводеСтроки вызывается довольно часто при перерисовке табличного поля. Поэтому процедура должна отрабатывать довольно быстро, чтобы не тормозить вывод списка. Если в ней происходит обращение к базе данных, то вывод может резко замедлиться.
Если начались тормоза, то рекомендуется сделать следующее:
1. Кеширование результата запроса в переменной модуля формы (таблица значений или массив, еще можно использовать соответствие, которое индексируется для примитивных типов данных, например, код товара или артикул)
2. При отключенной колонке (видимость) запрос к базе НЕ должен выполняться.
По умолчанию колонку держать выключенной, включение только по кнопке в форме или при личных настройках определенного пользователя.
3. Лучше выполнять один большой запрос на несколько товаров, чем несколько маленьких запросов на один товар.
4. Список товаров нужно передавать как ПАРАМЕТР виртуальной таблицы Остатки, а не как параметр условия ГДЕ.
5. При повышенных требованиях к скорости отображения списка и большом количестве пользователей можно завести регистр сведений, хранящий актуальные остатки. Для поддержки его актуальности можно создать последовательность.
6. Еще вариант через обработчик — при ПолученииДанных (вроде так называется). Там сразу передается массив ОформленияСтрок — в нем все строки сразу и вызывается он реже, чем при выводе строки.
7. Завести в табличной части реквизит, куда при открытии формы и по мере надобности помещать остатки, это значительно ускорит вывод остатков, правда будет не лучшим образом влиять на флаг Модифицированность.

Похожие FAQ
Еще в этой же категории
Программное создание таблицы значений с условным оформлением 13
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Поле выбора
Заполнение списка значений в элементе поле выбора на форме 11
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип — Произвольный, Использование — Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Поле выбора
Как ограничить список выбора? 8
Ограничим список элементов, установив отбор в открываемой форме //Пример 1 Процедура СтатьяПДРНачалоВыбора(Элемент, СтандартнаяОбработка) ФормаВыбора = Справочники.ПрочиеДоходыИРасходы.ПолучитьФормуВыбора(, Элемент); ЭлементОтбораВидПДР = Форма Форма
Как активизировать, перевести фокус на необходимый элемент на форме? 7
//Текущему Элементу формы присваиваем элемент котровый необходимо активизировать ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТабличноеПоле; Как программно установить событие для элемента формы? 7
//Привяжем к нашей таблице вызов процедуры обработки //события » ПередОкончаниемРедактирования» . процедура должна существовать . ДействиеОбработкаВыбора = Новый Действие(» ОбработкаВыбораЗнач» ); ЭлементыФормы .УстановитьДействие(» Пере Посмотреть все в категории Работа с Формой (Диалог) и её элементами