Мне необходимо программным образом в справочник Пользователи( в управляемую форму списка) добавить таблицу, отображающую регистр сведений "Контактная информация". Проблема в том, что не получается у этой таблицы объявить поля(колонки), если таблица представляет собой динамический список.
\\Создание реквизита
реквизиты = Новый Массив;
реквизиты.Добавить(Новый РеквизитФормы("Поле", Новый ОписаниеТипов ("ДинамическийСписок"),,"Поле таблицы"));
ЭтаФорма.ИзменитьРеквизиты(реквизиты);
ЭтаФорма.Поле.ОсновнаяТаблица="РегистрСведений.КонтактнаяИнформация";
При попытке создать элемент, являющийся колонкой таблицы, выдается ошибка:
{Справочник.Пользователи.Форма.ФормаСписка.Форма(211)}: Ошибка при вызове метода контекста (Добавить): Недопустимое значение параметров
Элемент1 = Элементы.Добавить("Представление",Тип("Строка"),Элемент);
по причине:
Недопустимое значение параметров
Ниже код, где возникает ошибка:
Элемент1 = Элементы.Добавить("Представление",Тип("Строка"),Элемент); \\ ошибка возникает здесь!
Элемент1.Вид = ВидПоляФормы.ПолеВвода;
Элемент1.ПутьКДанным = "Поле.Представление";
Может, кто-нибудь сталкивался с подобной ситуацией? Помогите :-)
Можно для динамического списка задать свой запрос, но проблема та же((( Не могу создать колонки с соответствующими полями в запросе.
Создает ТЗ на форме у реквизита "НайденныеОбъекты"
&НаСервере
Процедура СоздатьКолонки(ТЗ, МассивРеквизитовПоУмолчанию = Неопределено) Экспорт
ТаблицаЭлемент = Элементы.НайденныеОбъекты;
//очистка
Для Каждого ДобавленныйЭлемент Из ДобавленныеЭлементы Цикл
Элементы.Удалить(Элементы[ДобавленныйЭлемент.Значение]);
КонецЦикла;
ДобавленныеЭлементы.Очистить();
//добавляем реквизиты
МассивРеквизитов = Новый Массив;
Для Каждого Колонка Из ТЗ.Колонки Цикл
Если МассивРеквизитовПоУмолчанию <> Неопределено
И МассивРеквизитовПоУмолчанию.Найти(Колонка.Имя) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ТипКолонки = Строка(Колонка.ТипЗначения);
Если Колонка.Имя = "Представление" ИЛИ Найти(ТипКолонки, "Хранилище значения") > 0 Тогда
Продолжить;
КонецЕсли;
РеквизитФормы = Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, ТаблицаЭлемент.Имя);
МассивРеквизитов.Добавить(РеквизитФормы);
КонецЦикла;
ИзменитьРеквизиты(МассивРеквизитов, ДобавленныеРеквизиты.ВыгрузитьЗначения());
ДобавленныеРеквизиты.Очистить();
//добавляем элементы управления
Для Каждого Реквизит Из МассивРеквизитов Цикл
ДобавленныеРеквизиты.Добавить(Реквизит.Путь + "." + Реквизит.Имя);
Элемент = Элементы.Добавить(ТаблицаЭлемент.Имя + Реквизит.Имя, Тип("ПолеФормы"), ТаблицаЭлемент);
Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.ПутьКДанным = ТаблицаЭлемент.Имя + "." + Реквизит.Имя;
Элемент.ТолькоПросмотр = Истина;
ДобавленныеЭлементы.Добавить(Элемент.Имя);
КонецЦикла;
//заполнение данными
РедТЗ = РеквизитФормыВЗначение(ТаблицаЭлемент.Имя);
РедТЗ.Очистить();
Для Каждого Стр ИЗ ТЗ Цикл
НовСтр = РедТЗ.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр, Стр);
НовСтр.Выбрать = Истина;
Если ОбъектПоиска = Неопределено Тогда
Продолжить;
КонецЕсли;
Если ОбъектПоиска.Тип = "Справочник" Тогда
Если Стр.Объект.ЭтоГруппа Тогда
Если Стр.Объект.ПометкаУдаления Тогда
НовСтр.Картинка = 3;
Иначе
НовСтр.Картинка = 0;
КонецЕсли;
Иначе
Если Стр.Объект.ПометкаУдаления Тогда
НовСтр.Картинка = 4;
Иначе
НовСтр.Картинка = 1;
КонецЕсли;
КонецЕсли;
Иначе
Если Стр.Объект.Проведен Тогда
НовСтр.Картинка = 7;
ИначеЕсли Стр.Объект.ПометкаУдаления Тогда
НовСтр.Картинка = 8;
Иначе
НовСтр.Картинка = 6;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЗначениеВРеквизитФормы(РедТЗ, ТаблицаЭлемент.Имя);
КонецПроцедуры
Все, разобралась!!! Надо было так:
Элемент1 = Элементы.Добавить("Представление",Тип("ПолеФормы"),Элементы.Поле);
Элемент1.Вид = ВидПоляФормы.ПолеВвода;
Элемент1.ПутьКДанным = "Поле.Представление";
ТаблицаЭлемент = Элементы.ТаблТоваров;
МассивРеквизитов = Новый Массив;
Для Каждого Колонка Из ТаблицаТовары.Колонки Цикл
РеквизитФормы = Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, ТаблицаЭлемент.Имя, Колонка.Заголовок);
МассивРеквизитов.Добавить(РеквизитФормы);
КонецЦикла;
ИзменитьРеквизиты(МассивРеквизитов);
Для Каждого Реквизит Из МассивРеквизитов Цикл
Элемент = Элементы.Добавить(ТаблицаЭлемент.Имя + Реквизит.Имя, Тип("ПолеФормы"), ТаблицаЭлемент);
Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.ПутьКДанным = ТаблицаЭлемент.Имя + "." + Реквизит.Имя;
Элемент.ТолькоПросмотр = Истина;
КонецЦикла;
ЗначениеВРеквизитФормы(ТаблицаТовары, ТаблицаЭлемент.Имя);