v8.2: Программное создание таблицы в управляемой форме

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. bela88 25.05.10 10:40 Сейчас в теме
Мне необходимо программным образом в справочник Пользователи( в управляемую форму списка) добавить таблицу, отображающую регистр сведений "Контактная информация". Проблема в том, что не получается у этой таблицы объявить поля(колонки), если таблица представляет собой динамический список.

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

\\создание элемента
Элемент = Элементы.Добавить("Поле", Тип("ТаблицаФормы"), ЭтаФорма);
Элемент.ПутьКДанным = "Поле";
Элемент.Видимость = Истина;

При попытке создать элемент, являющийся колонкой таблицы, выдается ошибка:
{Справочник.Пользователи.Форма.ФормаСписка.Форма(211)}: Ошибка при вызове метода контекста (Добавить): Недопустимое значение параметров
Элемент1 = Элементы.Добавить("Представление",Тип("Строка"),Элемент);
по причине:
Недопустимое значение параметров

Ниже код, где возникает ошибка:
Элемент1 = Элементы.Добавить("Представление",Тип("Строка"),Элемент); \\ ошибка возникает здесь!
Элемент1.Вид = ВидПоляФормы.ПолеВвода;
Элемент1.ПутьКДанным = "Поле.Представление";

Может, кто-нибудь сталкивался с подобной ситуацией? Помогите :-)

Можно для динамического списка задать свой запрос, но проблема та же((( Не могу создать колонки с соответствующими полями в запросе.
axeffect; +1
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Душелов 4017 25.05.10 18:21 Сейчас в теме
Вот код из моей обработки http://infostart.ru/public/65597/

Создает ТЗ на форме у реквизита "НайденныеОбъекты"

&НаСервере
Процедура СоздатьКолонки(ТЗ, МассивРеквизитовПоУмолчанию = Неопределено) Экспорт
	ТаблицаЭлемент = Элементы.НайденныеОбъекты;
	
	//очистка
	Для Каждого ДобавленныйЭлемент Из ДобавленныеЭлементы Цикл
		Элементы.Удалить(Элементы[ДобавленныйЭлемент.Значение]);
	КонецЦикла;
	ДобавленныеЭлементы.Очистить();
	
	//добавляем реквизиты
	МассивРеквизитов = Новый Массив;
	Для Каждого Колонка Из ТЗ.Колонки Цикл
		Если МассивРеквизитовПоУмолчанию <> Неопределено 
			И МассивРеквизитовПоУмолчанию.Найти(Колонка.Имя) <> Неопределено Тогда
			Продолжить;
		КонецЕсли;
		
		ТипКолонки = Строка(Колонка.ТипЗначения);
		Если Колонка.Имя = "Представление" ИЛИ Найти(ТипКолонки, "Хранилище значения") > 0 Тогда
			Продолжить;
		КонецЕсли;
		
		РеквизитФормы = Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, ТаблицаЭлемент.Имя);
		МассивРеквизитов.Добавить(РеквизитФормы);
	КонецЦикла;
	
	ИзменитьРеквизиты(МассивРеквизитов, ДобавленныеРеквизиты.ВыгрузитьЗначения());
	ДобавленныеРеквизиты.Очистить();
	
	//добавляем элементы управления
	Для Каждого Реквизит Из МассивРеквизитов Цикл
		ДобавленныеРеквизиты.Добавить(Реквизит.Путь + "." + Реквизит.Имя);
		
		Элемент = Элементы.Добавить(ТаблицаЭлемент.Имя + Реквизит.Имя, Тип("ПолеФормы"), ТаблицаЭлемент);
		Элемент.Вид = ВидПоляФормы.ПолеВвода;
		Элемент.ПутьКДанным = ТаблицаЭлемент.Имя + "." + Реквизит.Имя;
		Элемент.ТолькоПросмотр = Истина;
		
		ДобавленныеЭлементы.Добавить(Элемент.Имя);
	КонецЦикла;
	
	//заполнение данными
	РедТЗ = РеквизитФормыВЗначение(ТаблицаЭлемент.Имя);
	РедТЗ.Очистить();
	Для Каждого Стр ИЗ ТЗ Цикл
		НовСтр = РедТЗ.Добавить();
		ЗаполнитьЗначенияСвойств(НовСтр, Стр);
		
		НовСтр.Выбрать = Истина;
		
		Если ОбъектПоиска = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		
		Если ОбъектПоиска.Тип = "Справочник" Тогда
			Если Стр.Объект.ЭтоГруппа Тогда
				Если Стр.Объект.ПометкаУдаления Тогда
					НовСтр.Картинка = 3;
				Иначе
					НовСтр.Картинка = 0;
				КонецЕсли;
			Иначе
				Если Стр.Объект.ПометкаУдаления Тогда
					НовСтр.Картинка = 4;
				Иначе
					НовСтр.Картинка = 1;
				КонецЕсли;
			КонецЕсли;
		Иначе
			Если Стр.Объект.Проведен Тогда
				НовСтр.Картинка = 7;
			ИначеЕсли Стр.Объект.ПометкаУдаления Тогда
				НовСтр.Картинка = 8;
			Иначе
				НовСтр.Картинка = 6;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	ЗначениеВРеквизитФормы(РедТЗ, ТаблицаЭлемент.Имя);
КонецПроцедуры
Показать
kote; bforce; +2
3. bela88 27.05.10 10:58 Сейчас в теме
Все, разобралась!!! Надо было так:
Элемент1 = Элементы.Добавить("Представление",Тип("ПолеФормы"),Элементы.Поле);
Элемент1.Вид = ВидПоляФормы.ПолеВвода;
Элемент1.ПутьКДанным = "Поле.Представление";
+
4. пользователь 26.01.12 11:37
Сообщение было скрыто модератором.
...
5. garkynov 10.08.12 11:17 Сейчас в теме
   ТаблицаЭлемент = Элементы.ТаблТоваров;
   
   МассивРеквизитов = Новый Массив;
   Для Каждого Колонка Из ТаблицаТовары.Колонки Цикл           
      РеквизитФормы = Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, ТаблицаЭлемент.Имя, Колонка.Заголовок);
      МассивРеквизитов.Добавить(РеквизитФормы);
   КонецЦикла;
   
   ИзменитьРеквизиты(МассивРеквизитов);
   
   Для Каждого Реквизит Из МассивРеквизитов Цикл
  	Элемент = Элементы.Добавить(ТаблицаЭлемент.Имя + Реквизит.Имя, Тип("ПолеФормы"), ТаблицаЭлемент);
  	Элемент.Вид = ВидПоляФормы.ПолеВвода;
  	Элемент.ПутьКДанным = ТаблицаЭлемент.Имя + "." + Реквизит.Имя;
  	Элемент.ТолькоПросмотр = Истина;
  КонецЦикла;
    
  ЗначениеВРеквизитФормы(ТаблицаТовары, ТаблицаЭлемент.Имя);
Показать
tolpekin; ArtemiFD; gemini76; +3
6. matashin 29.08.12 21:40 Сейчас в теме
создавать реквизиты и элементы просто, но вот вопрос, надо ли их за собой удалять?
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот