1с программно добавить колонку в табличную часть
Связь колонок табличного поля с колонками источника данных
Для того чтобы в колонках табличного поля отображались данные связанного с ним списка, необходимо , чтобы колонки табличного поля были связаны с колонками отображаемого списка. Существует два способа связи колонок списка с колонками табличного поля :
- Можно использовать метод СоздатьКолонки() табличного поля . В этом случае табличное поле создаст набор колонок по умолчанию и свяжет их с соответствующими колонками источника данных . Набор создаваемых колонок зависит от типа отображаемого списка :
- Для списков справочников, планов видов характеристик и планов видов расчета создаются колонка Картинка, и колонки Код и Наименование, если их длина установлена не равной нулю.
- Для списка документов создаются колонки Картинка, Номер (если его длина не равна нулю), Дата и Проведен .
- Для списка плана счетов создаются колонка Картинка, и колонки Код, Наименование и Порядок, если их длина установлена не равной нулю.
- Для списков регистров и соответствующих им наборов записей создаются колонки для всех существующих измерений, ресурсов и реквизитов, а также колонки картинки, регистратора и периода.
- Для таблицы значений, дерева значений и табличной части создаются все существующие колонки.
- Можно создать программно необходимые колонки в табличном поле и связать их с соответствующими колонками списка. Для этого необходимо использовать метод Добавить() коллекции колонок табличного поля. После добавления колонки необходимо привязать ее к соответствующей колонке списка, используя свойство Данные колонки табличного поля , которому необходимо присвоить имя колонки списка . Для того чтобы отображать в колонке табличного поля флажки, необходимо использовать свойство ДанныеФлажка , которому необходимо присвоить имя колонки, содержащей значения флажков. Данный способ удобен тем, что позволяет создавать только необходимые колонки. Поясним использование данного способа на следующем примере. Пусть требуется получить все записи списка справочника "Номенклатура", у которых страной происхождения является Китай , загрузить их в таблицу значений и отобразить значения колонок Код, Наименование и ПометкаУдаления в табличном поле . Для этого выгрузим эти записи при помощи запроса в таблицу значений , установим эту таблицу значений табличному полю в качестве источника данных и добавим в табличное поле три колонки : Копировать в буфер обмена
После добавления колонки может потребоваться настроить редактирование. Для этого у колонки необходимо сбросить свойство ТолькоПросмотр и установить элемент управления - редактор, используя метод УстановитьЭлементУправления() колонки табличного поля. В приведенном ниже примере в табличное поле СправочникНоменклатура добавляется колонка Артикул, которой в качестве редактора значения устанавливается поле ввода :
Встречалась такое. Надо было выводить динамически колонки со скидками/наценками от данной цены. Вот часть кода:
Выборка = Справочники.СкидкиНаценки.Выбрать(. "Процент");
НовыеКолонки = Новый Массив;
Пока Выборка.Следующий() Цикл
Если Выборка.ПометкаУдаления ИЛИ Выборка.Процент=0 Тогда Продолжить;КонецЕсли;
Если Выборка.Процент < 0 Тогда
Список.Вставить(0,Выборка.Процент); // список здесь реквизит формы "список значений"
Иначе
Список.Добавить(Выборка.Процент);
КонецЕсли;
КонецЦикла;
ном = 1;
// заполняем массив реквизитов ТЧ
// элементы формы создаются конструктором "Новый РеквизитФормы"
Для Каждого елем Из Список Цикл
елем.Представление = "Колонка"+ном;
ТипЧисло = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10));
НовыеКолонки.Добавить(Новый РеквизитФормы(елем.Представление,
ТипЧисло,
"Объект.Номенклатура",
?(елем.Значение<0,"Скидка "+-елем.Значение+"%","Наценка "+елем.Значение+"%")));
ном = ном+1;
КонецЦикла;
ИзменитьРеквизиты(НовыеКолонки); // ключевая процедура, которая добавляет ревизиты
//добавляем элементы формы и связываем их с ревизитами
Для каждого Колонка Из НовыеКолонки Цикл
НовыйЭлемент = Элементы.Добавить("Номенклатура"+Колонка.Имя,Тип("ПолеФормы"),Элементы.Номенклатура);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Объект.Номенклатура."+Колонка.Имя;
НовыйЭлемент.ТолькоПросмотр = Истина;
КонецЦикла;
//////////////////////////////////////////////////////////// /////
В общем ключевая здесь является процедура управляемой формы ИзменитьРеквизиты(), которая добавляет/изменяет реквизиты переданные ей в массиве.
Общий порядок действий:
1)В начале создаем массив и заполняем его новыми реквизитами (Новый РеквизитФормы()).
2)Затем с помощью ИзменитьРеквизиты() динамически добавляем все реквизиты сразу
3)После создаем элементы формы(Элементы.Добавить()) и связваем их с новыми реквизитами
Более подробно можно прочитать Руководстве разработчика 8.2 , глава 7.7.2
Читайте также: