|
v8: УФ Программная работа с элементами формы и Динамическим списком | ☑ | ||
---|---|---|---|---|
0
ProgerLink
19.01.12
✎
10:20
|
Всем привет. Подскажите, у меня следующая задумка. В зависимости от отборов и настроек пользователя на форме, у меня формируется "произвольный запрос" для динамического списка. Основа запроса одна и та же, но добавляются некоторые поля и таблицы для запроса, чтобы без надобности не грузить систему. Так вот, когда запрос "тянет" дополнительные поля, необходимо их отображать на форме в таблице. В конфигураторе добавил новую колонку, но без привязки "Путь к данным", что не дает ей отображаться у клиента, как и на превьюве в самом конфигураторе, но и программно до нее не достучаться, чтобы в нужный момент установить ей "Путь к данным". Скажите, возможно ли вообще реализовать задачу таким образом, либо к колонке созданной на этапе конфигурирования, либо и колонку создать программно с установлением ей данных??? Как вариант вижу пока такой путь решения, на этапе конф-ия сразу прописать путь к данным, но в нужный момент запрос в это поле будет возвращать актуальные данные, а иначе просто колонка из запроса с не важно каким значением. Ну и разумеется управлять видимостью этой колонки.
P.S. Основная таблица для динамического списка: документ Всем спасибо |
|||
1
vmv
19.01.12
✎
10:22
|
можно, уже убсудали динамику колонок и реквизитов УФ, в том числе и я - мои вставки идеальны, хвастаюсь)
ищи) |
|||
2
RomaH
naïve
19.01.12
✎
10:22
|
есть возможность добавлять поля формы програмно ... вроде
почему програмно не удается поле добавить? |
|||
3
Гот
19.01.12
✎
10:23
|
//Опишем тип реквизита "Динамический список"
ТипыРеквизитаДинамическийСписок = Новый Массив; ТипыРеквизитаДинамическийСписок.Добавить(Тип("ДинамическийСписок")); ОписаниеТиповДляРеквизита = Новый ОписаниеТипов(ТипыРеквизитаДинамическийСписок); //Выберем из метаданных все регистры бухгалтерии, созда Для Индекс = 0 По Метаданные.РегистрыБухгалтерии.Количество() - 1 Цикл МетаданныеРегистра = Метаданные.РегистрыБухгалтерии.Получить(Индекс); ИмяРеквизита = СтрЗаменить(МетаданныеРегистра.ПолноеИмя(),".","_"); //Создадим страницу для каждого регистра СтраницаРегистра = Элементы.Добавить("_стр" + ИмяРеквизита,Тип("ГруппаФормы"),Элементы.СтраницыСписокРегистрыБухгалтерии); СтраницаРегистра.Вид = ВидГруппыФормы.Страница; СтраницаРегистра.Заголовок = МетаданныеРегистра.Представление(); //Создадим на форме группу для каждого регистра ГруппаРегистра = Элементы.Добавить("_гр" + ИмяРеквизита,Тип("ГруппаФормы"),СтраницаРегистра); ГруппаРегистра.Вид = ВидГруппыФормы.ОбычнаяГруппа; //Создадим новый реквизит формы ТаблЗначений = Новый РеквизитФормы("_т" + ИмяРеквизита, ОписаниеТиповДляРеквизита); ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(ТаблЗначений); //Изменим структуру реквизитов формы ИзменитьРеквизиты(ДобавляемыеРеквизиты); //Теперь у формы есть реквизит, к которому можно обратиться по имени и изменить различные параметры // укажем для него основную таблицу - Движения с субконто РеквизитТаблЗначений = ЭтаФорма["_т" + ИмяРеквизита]; РеквизитТаблЗначений.ОсновнаяТаблица = МетаданныеРегистра.ПолноеИмя() + ".ДвиженияССубконто"; //Теперь на форме создадим таблицу формы ТаблицаФормы = Элементы.Добавить("_ф" + ИмяРеквизита, Тип("ТаблицаФормы"),ГруппаРегистра); ТаблицаФормы.ПутьКДанным = "_т" + ИмяРеквизита; //Создадим колонки, используя доступные поля отбора СКД ДоступныеПоляОтбора = ЭтаФорма["_т" + ИмяРеквизита].Отбор.ДоступныеПоляОтбора; Для Каждого Реквизит Из ДоступныеПоляОтбора.Элементы Цикл Попытка НоваяКолонкаТаблицы = Элементы.Добавить("Колонка" + Реквизит.Поле, Тип("ПолеФормы"), ТаблицаФормы); НоваяКолонкаТаблицы.ПутьКДанным = "_т" + ИмяРеквизита + "."+ Реквизит.Поле; Исключение //Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЦикла; КонецЦикла; |
|||
4
1с-кин
19.01.12
✎
10:26
|
(1) и ну и дал бы ссылки, у тебя ж отобор по темем есть, и сам лучше помнишь, в каких темах было :)
|
|||
5
1с-кин
19.01.12
✎
10:27
|
*отбор и "темам"
|
|||
6
Гот
19.01.12
✎
10:29
|
Вот этот код работает. (Не претендую на правильность, меня
" ДоступныеПоляОтбора = ЭтаФорма["_т" + ИмяРеквизита].Отбор.ДоступныеПоляОтбора; Для Каждого Реквизит Из ДоступныеПоляОтбора.Элементы Цикл " смущает. Но, принцип такой... 1. Объявляешь тип реквизита формы: ТипыРеквизитаДинамическийСписок = Новый Массив; ТипыРеквизитаДинамическийСписок.Добавить(Тип("ДинамическийСписок")); ОписаниеТиповДляРеквизита = Новый ОписаниеТипов(ТипыРеквизитаДинамическийСписок); 2. Создаешь РЕКВИЗИТ формы: ТаблЗначений = Новый РеквизитФормы("_т" + ИмяРеквизита, ОписаниеТиповДляРеквизита); ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(ТаблЗначений); 3. Обновляешь реквизиты: ИзменитьРеквизиты(ДобавляемыеРеквизиты); 4. Получаешь доступ к свойствам реквизита. Текст запроса тоже будет доступен РеквизитТаблЗначений = ЭтаФорма["_т" + ИмяРеквизита]; РеквизитТаблЗначений.ОсновнаяТаблица = МетаданныеРегистра.ПолноеИмя() + ".ДвиженияССубконто"; 5. Ну, теперь создаешь элементы формы ТаблицаФормы = Элементы.Добавить("_ф" + ИмяРеквизита, Тип("ТаблицаФормы"),ГруппаРегистра); ТаблицаФормы.ПутьКДанным = "_т" + ИмяРеквизита; и колонки: НоваяКолонкаТаблицы = Элементы.Добавить("Колонка" + Реквизит.Поле, Тип("ПолеФормы"), ТаблицаФормы); НоваяКолонкаТаблицы.ПутьКДанным = "_т" + ИмяРеквизита + "."+ Реквизит.Поле; |
|||
7
ProgerLink
19.01.12
✎
10:39
|
Добавил 2 строчки кода, для добавления колонки с установлением "Путь к данным" :
НоваяКолонкаТаблицы = Элементы.Добавить("Колонка_1", Тип("ПолеФормы"), Элементы.Список); НоваяКолонкаТаблицы.ПутьКДанным = "Документ_СпецификацияККонтракту.Вложение"; На этапе события, пишет: {Документ._СпецификацияККонтракту.Форма.ФормаСпискаУправляемая.Форма(22)}: Ошибка при вызове метода контекста (Добавить) НоваяКолонкаТаблицы = Элементы.Добавить("Колонка_1", Тип("ПолеФормы"), Элементы.Список); по причине: Изменение состава элементов недоступно |
|||
8
ProgerLink
19.01.12
✎
10:42
|
Хотя вторая строка наверное должна быть такой:
НоваяКолонкаТаблицы.ПутьКДанным = "Список.Вложение"; Но суть ошибки не меняет, все так же не доступно изменение состава элементов |
|||
9
ProgerLink
19.01.12
✎
10:46
|
Господа, это я обшибся, добавление должно происходить на сервере. Всем спасибо большое !!!!
|
|||
10
Гот
19.01.12
✎
10:53
|
0_0
|
|||
11
ProgerLink
19.01.12
✎
16:15
|
Подведу итог, может кому пригодится. Колонка программно создавалась без проблем, ей были установлены следующие свойства:
.Вид = ВидПоляФормы.ПолеКартинки; и .КартинкаЗначений = БиблиотекаКартинок.ТолькоСкрепка; Но в форме списка картинок не появлялось, пока не добавил одну строчку. Вся процедура: Процедура УправлениеКолонкой_Вложение(РежимДобавить) КолонкаТаблицы = Элементы.Найти("КолонкаВложение"); Если КолонкаТаблицы = Неопределено Тогда КолонкаТаблицы = Элементы.Вставить("КолонкаВложение", Тип("ПолеФормы"), Элементы.Список, Элементы.Найти("Дата")); КолонкаТаблицы.ПутьКДанным = "Список.Вложение"; КолонкаТаблицы.Вид = ВидПоляФормы.ПолеКартинки; КолонкаТаблицы.Заголовок = " "; КолонкаТаблицы.КартинкаЗначений = БиблиотекаКартинок.ТолькоСкрепка; Список.УстановитьОбязательноеИспользование("КолонкаВложение", Истина); // <- Та самая строчка //КолонкаТаблицы.Картинка.Вид = ВидКартинки.ИзБиблиотеки; Иначе Если РежимДобавить Тогда КолонкаТаблицы.Видимость = Истина; Иначе КолонкаТаблицы.Видимость = Ложь; КонецЕсли; КонецЕсли; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |