Имя: Пароль:
1C
1С v8
Програмное создание колонок (управляемая форма)
,
0 Mich
 
20.03.12
12:15
Коллеги, добрый день!
Чет никак не пойму почему не работает следующий код:
МассивДобавляемыхРеквизитов = Новый Массив;
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("План", Новый ОписаниеТипов("ТаблицаЗначений")));    
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Номенклатура", Новый ОписаниеТипов("СправочникСсылкаНоменклатура"),"План" ,"Номенклатура"));
ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);    

Реквизит план создается, а колонка нет! что скажите??
1 Нуф-Нуф
 
20.03.12
12:19
может сначала добавить табличное поле, а потом добавлять колонки?
2 Mich
 
20.03.12
12:20
(1) ну это не обязательно, но и так пробовал - код выполняется без ошибок, но колонки не создаются.
3 Mich
 
20.03.12
12:29
подниму
4 Omskdizel
 
20.03.12
12:32
А колонки разве сами должны появиться? Сдается мне их подобным образом надо создавать.
5 lxs
 
20.03.12
12:34
// программно создадим колонки на форме
   ТипыРеквизита = Новый Массив;
   ТипыРеквизита.Добавить(Тип("Строка"));
   
   ОписаниеТиповДляРеквизита = Новый ОписаниеТипов(ТипыРеквизита);
   
   ДобавляемыеРеквизитыТЗ     = Новый Массив;
   УдаляемыеРеквизитыТЗ     = Новый Массив;
   Для Каждого Колонка Из ТЗ.Колонки Цикл
       НоваяКолонка = Новый РеквизитФормы(Колонка.Имя, ОписаниеТиповДляРеквизита, "РеквизитТЗ", Колонка.Заголовок, Истина);
       ДобавляемыеРеквизитыТЗ.Добавить(НоваяКолонка);
   КонецЦикла;
   
   РеквизитТЗРеквизиты = РеквизитФормыВЗначение("РеквизитТЗ");
   Для Каждого Колонка Из РеквизитТЗРеквизиты.Колонки Цикл
       УдаляемыеРеквизитыТЗ.Добавить("РеквизитТЗ." + Колонка.Имя);
   КонецЦикла;
6 sanja26
 
20.03.12
12:34
ТабличноеПоле (TableBox)
СоздатьКолонки (CreateColumns)
Синтаксис:

СоздатьКолонки()
Описание:

Удаляет старые колонки и загружает новые колонки из источника данных.

Доступность:

Толстый клиент.
Пример:

ЭлементыФормы.ТабличноеПоле1.Значение = ТаблицаДанных;
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
7 lxs
 
20.03.12
12:35
8 Mich
 
20.03.12
12:40
(5) по-моему код не дописан и по Вашему я по другому делаю?)
9 Mich
 
20.03.12
12:41
(6) у меня тонкий клиент
10 lxs
 
20.03.12
12:42
(8) допиши)
11 Mich
 
20.03.12
12:44
(10) по твоему я делаю по другому? По моему это то же самое что и у меня, разве нет?
12 lxs
 
20.03.12
12:47
(11) Ну у меня он работает, а у тебя нет.
13 Defender aka LINN
 
20.03.12
12:48
(8) Реквизит формы <> Элемент формы, есличе.
14 Mich
 
20.03.12
12:50
(13) вроде я не слова не говорил об элементах формы. Мне не нужны элементы, мне нужны реквизиты!
15 lxs
 
20.03.12
12:50
(14) дело в последовательности..
16 Mich
 
20.03.12
12:52
(15) не спорю! - а у меня неправильная последовательность?
17 lxs
 
20.03.12
13:04
Попробуй ИзменитьРеквизиты(МассивДобавляемыхРеквизитов) применить дважды, после добавления таблицы, и после добавления реквизита.
18 Лирик
 
20.03.12
13:24
Себе сделал так, работает:

&НаСервере
Функция ПроверитьНаличиеРеквизита(ИмяРеквизита, Форма) Экспорт

   МассивРеквизитов = Форма.ПолучитьРеквизиты();
   
   Для каждого РеквизитФормы Из МассивРеквизитов Цикл
       
       Если РеквизитФормы.Имя = ИмяРеквизита Тогда
           Возврат Истина;    
       КонецЕсли;
       
   КонецЦикла;

   Возврат Ложь;
   
КонецФункции // ПроверитьНаличиеРеквизита()

&НаСервере
Процедура ДобавитьРеквизитТаблица(ИмяРеквизита, ТаблицаРеквизита, Форма) Экспорт

   ТипРеквизита = Новый Массив;
   ТипРеквизита.Добавить(Тип("ТаблицаЗначений"));
   
   ОписаниеТиповРеквизитов = Новый ОписаниеТипов(ТипРеквизита);
   
   НовыйРеквизит = Новый РеквизитФормы(ИмяРеквизита,
                                       ОписаниеТиповРеквизитов);
                                       
   ДобавляемыеРеквизиты = Новый Массив;
   ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
   
   Для каждого КолонкаТаблицы Из ТаблицаРеквизита.Колонки Цикл
       
       ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(КолонкаТаблицы.Имя,
                                       КолонкаТаблицы.ТипЗначения, ИмяРеквизита))
   
   КонецЦикла;
   
   Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);

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