|
ТаблицаЗначений на управляемой форме | ☑ | ||
---|---|---|---|---|
0
Zheka_zloy
05.07.16
✎
18:19
|
Всем привет.
есть обработка которая выводить в табличную часть (созданную в конфигураторе) реквизиты выбранного объекта, потом перебераются табличные части (выбранного объекта) и для каждой таб. части создается "ТаблицаФормы" (программно) и в неё добавляются реквизиты таб. части, для каждой таб.части новая "ТаблицаФормы". код: &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Элементы.ВсеОбъекты.РежимВыбораИзСписка = Истина; Для Каждого ОдинИзДокументов Из Метаданные.Документы Цикл Элементы.ВсеОбъекты.СписокВыбора.Добавить(ОдинИзДокументов.Имя); КонецЦикла; Для Каждого ОдинИзСправочников Из Метаданные.Справочники Цикл Элементы.ВсеОбъекты.СписокВыбора.Добавить(ОдинИзСправочников.Имя); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ВсеОбъектыПриИзменении(Элемент) ВсеОбъектыПриИзмененииНаСервере(Элемент.ВыделенныйТекст); КонецПроцедуры &НаСервере Процедура ВсеОбъектыПриИзмененииНаСервере(ИмяОбъекта) // определяем что выбранно документ или спавочник Попытка ВыбранныйОбъект = Метаданные.НайтиПоПолномуИмени("Документ." + ИмяОбъекта); Исключение ВыбранныйОбъект = Метаданные.НайтиПоПолномуИмени("Справочник." + ИмяОбъекта); КонецПопытки; // устанавливаем заголовок таблицы реквизиты Элементы.РеквизитыОбъекта.Заголовок = ВыбранныйОбъект.Синоним; // заполняем таблицу реквизитов объекта Для Каждого ОдинИзРеквизитов Из ВыбранныйОбъект.Реквизиты Цикл НоваяСтрока = Объект.РеквизитыОбъекта.Добавить(); НоваяСтрока.Имя = ОдинИзРеквизитов.Имя; НоваяСтрока.Синоним = ОдинИзРеквизитов.Синоним; КонецЦикла; // здесь будут лежать все табличные части ВсеТабличныеЧасти = Новый Структура; // массив добавляемых реквизитов МассивТипаВыбора = Новый Массив; МассивТипаВыбора.Добавить(Тип("ТаблицаЗначений")); ОписаниеТипаВыбора = Новый ОписаниеТипов(МассивТипаВыбора); МассивРеквизитов = Новый Массив; // перебор табличных частей Для Каждого ОднаИзТабличныхЧастей Из ВыбранныйОбъект.ТабличныеЧасти Цикл // таблица значений для текущей табличной части ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Имя"); ТЗ.Колонки.Добавить("Синоним"); ТЗ.Колонки.Добавить("Заполняющий"); МассивРеквизитов.Добавить(Новый РеквизитФормы(ОднаИзТабличныхЧастей.Имя, ОписаниеТипаВыбора, "", ОднаИзТабличныхЧастей.Синоним)); // заполняем ТЗ реквизитами текущей табличной части Для Каждого СтрокаТабличнойЧасти Из ОднаИзТабличныхЧастей.Реквизиты Цикл НоваяСтрока = ТЗ.Добавить(); НоваяСтрока.Имя = СтрокаТабличнойЧасти.Имя; НоваяСтрока.Синоним = СтрокаТабличнойЧасти.Синоним; КонецЦикла; // добавляем ТЗ в структуру ВсеТабличныеЧасти.Вставить(ОднаИзТабличныхЧастей.Имя, ТЗ); // добавляем реквизиты(колонки) Для Каждого Колонка Из ТЗ.Колонки Цикл МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, ОднаИзТабличныхЧастей.Имя)); КонецЦикла; КонецЦикла; ИзменитьРеквизиты(МассивРеквизитов); Для Каждого ОднаИзТЗ Из ВсеТабличныеЧасти Цикл ТаблицаПолейВыбора = Неопределено; ТаблицаПолейВыбора = Элементы.Добавить(ОднаИзТЗ.Ключ, Тип("ТаблицаФормы")); ТаблицаПолейВыбора.ПутьКДанным = ОднаИзТЗ.Ключ; ТаблицаПолейВыбора.Отображение = ОтображениеТаблицы.Список; НовыйЭлемент = Неопределено; Для Каждого Колонка Из ОднаИзТЗ.Значение.Колонки Цикл // в следующей строке возникает ОШИБКА если табличных частей больше одной НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ТаблицаПолейВыбора); НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; НовыйЭлемент.ПутьКДанным = ОднаИзТЗ.Ключ + "." + Колонка.Имя; КонецЦикла; ЗначениеВРеквизитФормы(ТЗ, ОднаИзТЗ.Ключ); КонецЦикла; КонецПроцедуры Ошибка возникает если у объекта больше одной таб. части буду признателен за помощь |
|||
1
Euguln
05.07.16
✎
18:23
|
НовыйЭлемент = Элементы.Добавить(ОднаИзТЗ.Ключ+Колонка.Имя, Тип("ПолеФормы"), ТаблицаПолейВыбора);
|
|||
2
Zheka_zloy
06.07.16
✎
10:24
|
спасибо доброму человеку что просветил балбеса
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |