|
Таблица в управляемой форме | ☑ | ||
---|---|---|---|---|
0
ArPlus
28.06.12
✎
22:34
|
В обычной мы использовали СоздатьКолонки(), а как это проделать в управляемой?
При изменении Вида номенклатуры, должна выводится таблица с различными колонками, в зависимости от самого вида. Первая таблица получается. При выборе второй ошибка на ЗначениеВРеквизитФормы(ТЗначение,"ТаблицаРеквизитов"); &НаСервере Процедура ЗаполнитьТаблицуНаСервере(ВидНоменклатуры) ИдКоллекции="ТаблицаРеквизитов"; ИдТаблицы="ТаблицаРеквизитовПред"; КоллФормы = РеквизитФормыВЗначение("ТаблицаРеквизитов"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураДополнительныеРеквизиты.Ссылка.Ссылка КАК Номенклатура, | НоменклатураДополнительныеРеквизиты.Ссылка.Артикул, | НоменклатураДополнительныеРеквизиты.Свойство, | НоменклатураДополнительныеРеквизиты.Значение |ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты |ГДЕ | НоменклатураДополнительныеРеквизиты.Ссылка.ВидНоменклатуры = &ВидНоменклатуры | |СГРУППИРОВАТЬ ПО | НоменклатураДополнительныеРеквизиты.Ссылка.Ссылка, | НоменклатураДополнительныеРеквизиты.Свойство, | НоменклатураДополнительныеРеквизиты.Значение, | НоменклатураДополнительныеРеквизиты.Ссылка.Артикул"; Запрос.УстановитьПараметр("ВидНоменклатуры", ВидНоменклатуры); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); МассивРеквизитов = Новый ТаблицаЗначений; МассивРеквизитов.Колонки.Добавить("НомерКолонки"); МассивРеквизитов.Колонки.Добавить("Свойство"); ТЗначение = Новый ТаблицаЗначений; ТЗначение.Колонки.Добавить("Номенклатура"); ТЗначение.Колонки.Добавить("Артикул"); Пока Выборка.Следующий() Цикл Отбор = Новый Структура; Отбор.Вставить("Номенклатура"); НС = ТЗначение.НайтиСтроки(Отбор); Если НС.Количество()=0 Тогда НС = ТЗначение.Добавить(); НС.Номенклатура = Выборка.Номенклатура; НС.Артикул = Выборка.Артикул; Иначе НС = НС[0]; КонецЕСли; МС = МассивРеквизитов.НайтиСтроки(Новый Структура("Свойство",Выборка.Свойство)); Если МС.Количество()=0 Тогда НСМС = МассивРеквизитов.Добавить(); НСМС.НомерКолонки = МассивРеквизитов.Количество()+1; НСМС.Свойство = Выборка.Свойство; ТЗначение.Колонки.Добавить("Стр"+СокрЛП(Строка(НСМС.НомерКолонки)),Выборка.Свойство.ТипЗначения,Строка(Выборка.Свойство.Наименование)); Иначе НСМС = МС[0]; КонецЕсли; НС["Стр"+СокрЛП(Строка(НСМС.НомерКолонки))]=Выборка.Значение; КонецЦикла; ЗначениеВРеквизитФормы(ТЗначение,"ТаблицаРеквизитов"); СодержимоеТаблицы = ТЗначение; МассивУдаляемыхРеквизитов = Новый Массив; Для каждого ТекКол из КоллФормы.Колонки Цикл МассивУдаляемыхРеквизитов.Добавить("ТаблицаРеквизитов"+"."+ТекКол.Имя); КонецЦикла; МассивДобавляемыхРеквизитов = Новый Массив; Для Каждого Колонка Из СодержимоеТаблицы.Колонки Цикл Если Лев(Колонка.Имя,3) <> "Стр" Тогда Колонка.Заголовок = Колонка.Имя; Иначе Колонка.Заголовок = МассивРеквизитов.Найти(Число(СтрЗаменить(Колонка.Имя,"Стр","")),"НомерКолонки").Свойство.Наименование; КонецеСли; РеквизитФормы = Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "ТаблицаРеквизитов", Колонка.Имя); МассивДобавляемыхРеквизитов.Добавить(РеквизитФормы); КонецЦикла; ИзменитьРеквизиты(МассивДобавляемыхРеквизитов,МассивУдаляемыхРеквизитов); //ЭлТаб=Элементы.Найти("ТаблицаРеквизитовНаФорме"); //Если ЭлТаб<>Неопределено Тогда // Элементы.Удалить(ЭлТаб); //КонецЕсли; //Элементы.Добавить("ТаблицаРеквизитовНаФорме",Тип("ТаблицаЗначений"),ЭтаФорма); ЭлТаб=Элементы.Найти("ТаблицаРеквизитовНаФорме"); // Элементы.Удалить(ТаблицаРеквизитовНаФорме); // создаем элементы Для Каждого Колонка Из СодержимоеТаблицы.Колонки Цикл Если Лев(Колонка.Имя,3) <> "Стр" Тогда Колонка.Заголовок = Колонка.Имя; Иначе Колонка.Заголовок = МассивРеквизитов.Найти(Число(СтрЗаменить(Колонка.Имя,"Стр","")),"НомерКолонки").Свойство.Наименование; КонецеСли; Элемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ЭлТаб); Элемент.Заголовок = Колонка.Заголовок; Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.ПутьКДанным = "ТаблицаРеквизитов." + Колонка.Имя; КонецЦикла; ЭтаФорма.ТаблицаРеквизитов.Загрузить(СодержимоеТаблицы); КонецПроцедуры |
|||
1
Anton_2011
28.06.12
✎
22:40
|
Ошибка на! И кто это мы???
|
|||
2
ArPlus
28.06.12
✎
22:41
|
&НаСервере
Процедура ЗаполнитьТаблицуНаСервере(ВидНоменклатуры) //"ТаблицаРеквизитов" - Объект ТаблицаЗначений (Пустая); //"ТаблицаРеквизитовНаФорме" - Элемент на самой форме Таблица //Чтоб найти колонки, которые есть в таблице до этого КоллФормы = РеквизитФормыВЗначение("ТаблицаРеквизитов"); ... Формирую саму таблицу ТЗначение (ТаблицаЗначений) ЗначениеВРеквизитФормы(ТЗначение,"ТаблицаРеквизитов"); СодержимоеТаблицы = ТЗначение; МассивУдаляемыхРеквизитов = Новый Массив; Для каждого ТекКол из КоллФормы.Колонки Цикл МассивУдаляемыхРеквизитов.Добавить("ТаблицаРеквизитов"+"."+ТекКол.Имя); КонецЦикла; МассивДобавляемыхРеквизитов = Новый Массив; Для Каждого Колонка Из СодержимоеТаблицы.Колонки Цикл РеквизитФормы = Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "ТаблицаРеквизитов", Колонка.Имя); МассивДобавляемыхРеквизитов.Добавить(РеквизитФормы); КонецЦикла; ИзменитьРеквизиты(МассивДобавляемыхРеквизитов,МассивУдаляемыхРеквизитов); ЭлТаб=Элементы.Найти("ТаблицаРеквизитовНаФорме"); Для Каждого Колонка Из СодержимоеТаблицы.Колонки Цикл Элемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ЭлТаб); Элемент.Заголовок = Колонка.Заголовок; Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.ПутьКДанным = "ТаблицаРеквизитов." + Колонка.Имя; КонецЦикла; ЭтаФорма.ТаблицаРеквизитов.Загрузить(СодержимоеТаблицы); КонецПроцедуры |
|||
3
ArPlus
28.06.12
✎
22:42
|
В Обычной форме все одной строкой:
ЭлементыФормы.ТабличноеПоле.СоздатьКолонки(); |
|||
4
Anton_2011
28.06.12
✎
22:43
|
УФ - не нужны!
|
|||
5
ArPlus
28.06.12
✎
22:45
|
Они есть... Это данность, данная нам в ощущение... :)
|
|||
6
Anton_2011
28.06.12
✎
22:48
|
Да, оно есть, но сия данность вам навязана. Что же теперь делать если всё запущено - ждите, мож спец по УФ нарисуется и ответит по существу.
ЗЫ Сори. |
|||
7
oleg_prg
29.06.12
✎
00:41
|
Вот накидал для УП примеры с таблицей, и программное создание колонок и раскраска и заполнение чтохочешь.... Лови
http://files.mail.ru/H552I7 Вот код из обработки //ivansoft &НаСервере Процедура СоздатьЭлементы() //Эта процедура программно создает элемент диалога "таблица" на форме мКолонки = Новый Массив; //Создадим массив для хранения колонок Элемент1 = Новый РеквизитФормы("Поле1",Новый ОписаниеТипов("Строка"),Элементы.ДанныеТЗ.Имя); //Создаем елементы интерфейса - колонки Элемент2 = Новый РеквизитФормы("Поле2",Новый ОписаниеТипов("Строка"),Элементы.ДанныеТЗ.Имя); мКолонки.Добавить(Элемент1); //Добавим в массив колонки мКолонки.Добавить(Элемент2); ЭтаФорма.ИзменитьРеквизиты(мКолонки); //см help Для Каждого Реквизит Из мКолонки Цикл //В цикле добавим элементы в таблицу Элемент = Элементы.Добавить(Элементы.ДанныеТЗ.Имя + Реквизит.Имя, Тип("ПолеФормы"),Элементы.ДанныеТЗ); //Добавление элемента Элемент.Вид = ВидПоляФормы.ПолеВвода; //Разрешим вводить пользователю данные в таблицу Элемент.ПутьКДанным = Элементы.ДанныеТЗ.Имя + "." + Реквизит.Имя; //Назначим путь к данным, только после этого таблица появится на форме :) Элемент.ТолькоПросмотр = ложь; //Дадим пользователю право редактировать таблицу КонецЦикла; КонецПроцедуры &НаСервере Функция ВключитьРаскраску() ЭтаФорма.УсловноеОформление.Элементы.Очистить(); ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДанныеТЗПоле2"); ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДанныеТЗ.Поле2"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит; ЭлементОтбора.ПравоеЗначение = "5"; ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Бирюзовый); ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДанныеТЗПоле2"); ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДанныеТЗ.Поле2"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит; ЭлементОтбора.ПравоеЗначение = "1"; ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Желтый); КонецФункции &НаКлиенте Процедура ПриОткрытии(Отказ) СоздатьЭлементы(); //А вто еще фишка - как максимизировать окно на весь экран :) Попытка WSHShell = новый COMОбъект("WScript.Shell"); WSHShell.SendKeys("%"); WSHShell.SendKeys("{LEFT}{LEFT}{ENTER}"); Исключение КонецПопытки; ВключитьРаскраску(); КонецПроцедуры &НаКлиенте Процедура ИзменитьТекст(Команда) Кол = 1; Для Каждого Эл Из ДанныеТЗ Цикл Эл.ПолучитьИдентификатор(); Эл.Поле2 = СокрЛП(Кол)+" это новая строка :)"; Кол = Кол + 1; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура Добавить(Команда) НовыйЭлемент = ДанныеТЗ.Добавить(); НовыйЭлемент.Поле1 = "Добавлено поле1 !!!"; НовыйЭлемент.Поле2 = "Добавлено поле2 !!!"; КонецПроцедуры &НаКлиенте Процедура ЦветВключить(Команда) ВключитьРаскраску(); КонецПроцедуры &НаКлиенте Процедура ЦветВыключить(Команда) ВыключитьЦветНаСервере(); КонецПроцедуры &НаСервере Процедура ВыключитьЦветНаСервере() ЭтаФорма.УсловноеОформление.Элементы.Очистить(); КонецПроцедуры |
|||
8
ArPlus
29.06.12
✎
18:42
|
Спасибо. Таблица создалась. Но!!! При выполнении некой команды мне надо так же программно изменить колонки этой таблицы. Если запускаю твою обработку, то говорит, что Неуникальное имя реквизита ЭтаФорма.ИзменитьРеквизиты(мКолонки); Мне надо удалить все старые и создать новые.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |