|
Как программно создать динамический список? | ☑ | ||
---|---|---|---|---|
0
megabax
14.11.16
✎
14:52
|
Добрый день. Пытаюсь создать на форме динамический список, в ПриСозданииНаСервере вставил код:
ДобавляемыеРеквизиты = Новый Массив; МассивТипов = новый Массив; МассивТипов.Добавить(Тип("ДинамическийСписок")); Реквизит = Новый РеквизитФормы("ПолеВводаСтроки",новый ОписаниеТипов(МассивТипов),, "Поле ввода строки", Истина); ДобавляемыеРеквизиты.Добавить(Реквизит); ИзменитьРеквизиты(ДобавляемыеРеквизиты); Реквизит.ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 10 | Номенклатура.Код, | Номенклатура.Наименование, | Номенклатура.Артикул |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | НЕ Номенклатура.ЭтоГруппа" ; Элемент = ЭтаФорма.Элементы.Добавить("Список", Тип("ТаблицаФормы"), ЭтаФорма); Элемент.Ширина=100; Элемент.Высота=30; Элемент.ПутьКДанным="ПолеВводаСтроки"; На строке "Реквизит.ТекстЗапроса =" вылетает с ошибкой "{Форма.Форма.Форма(20)}: Поле объекта не обнаружено (ТекстЗапроса) Реквизит.ТекстЗапроса =" Подскажите пожалуйста, как это делается праивльно? |
|||
1
sandal_r
14.11.16
✎
14:58
|
пользуйтесь конструктором запросов с обработкой результата
ну или перед "Реквизит.ТекстЗапроса" добавьте: Реквизит = Новый Запрос(); |
|||
2
megabax
14.11.16
✎
15:02
|
(1) Тут это не прокатит, надо программное создать динамический список и вставить его в форму.
Но, собственно с этим разобрался, оказывается надо так: ЭтаФорма.ПолеВводаСтроки.ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 10 | Номенклатура.Код, | Номенклатура.Наименование, | Номенклатура.Артикул |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | НЕ Номенклатура.ЭтоГруппа" ; Но вопрос все равно еще открыт, так как почему то добавленный динамический список на форме не отображается. Что еще надо добавить в код: Элемент = ЭтаФорма.Элементы.Добавить("Список", Тип("ТаблицаФормы"), ЭтаФорма); Элемент.Ширина=100; Элемент.Высота=30; Элемент.ПутьКДанным="ПолеВводаСтроки"; ??? |
|||
3
Timon1405
14.11.16
✎
15:07
|
||||
4
megabax
14.11.16
✎
15:26
|
(3) Спасибо.
сделал вот так: ДобавляемыеРеквизиты = Новый Массив; МассивТипов = новый Массив; МассивТипов.Добавить(Тип("ДинамическийСписок")); Реквизит = Новый РеквизитФормы("ПолеСписка",новый ОписаниеТипов(МассивТипов),, "Поле ввода строки", Истина); ДобавляемыеРеквизиты.Добавить(Реквизит); ИзменитьРеквизиты(ДобавляемыеРеквизиты); ЭтаФорма.ПолеСписка.ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 10 | Номенклатура.Код | Номенклатура.Наименование, | Номенклатура.Артикул |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | НЕ Номенклатура.ЭтоГруппа" ; Элемент = ЭтаФорма.Элементы.Добавить("Список", Тип("ТаблицаФормы"), ЭтаФорма); Элемент.Ширина=100; Элемент.Высота=30; Элемент.ПутьКДанным="ПолеСписка"; НоваяКолонкаТаблицы = Элементы.Добавить("КолонкаКод", Тип("ПолеФормы"), Элемент); НоваяКолонкаТаблицы.ПутьКДанным = "ПолеСписка.Код"; НоваяКолонкаТаблицы = Элементы.Добавить("КолонкаНаименование", Тип("ПолеФормы"), Элемент); НоваяКолонкаТаблицы.ПутьКДанным = "ПолеСписка.Наименование"; НоваяКолонкаТаблицы = Элементы.Добавить("КолонкаАртикул", Тип("ПолеФормы"), Элемент); НоваяКолонкаТаблицы.ПутьКДанным = "ПолеСписка.Артикул"; но почему то вылетает с ошибкой: "{Форма.Форма.Форма(39)}: Ошибка при установке значения атрибута контекста (ПутьКДанным) НоваяКолонкаТаблицы.ПутьКДанным = "ПолеСписка.Код"; по причине: Недопустимое значение" Как вообще определить, какой путь к данным является допустимым? |
|||
5
mikecool
14.11.16
✎
15:39
|
(4) посмотри, что у добавленных в гуи прописано
|
|||
6
mikecool
14.11.16
✎
15:39
|
полесписка - это не зарезервировано?
|
|||
7
apokrit
14.11.16
✎
15:40
|
(0) А зачем вообще программно создавать динамический список?
|
|||
8
megabax
14.11.16
✎
15:41
|
(7) Чтобы не трогать форму, чтобы обновлять легче потом было
|
|||
9
megabax
14.11.16
✎
15:43
|
(6) ПолеСписка поменял на ПолеСписка1, не помогло.
|
|||
10
apokrit
14.11.16
✎
15:45
|
(8) Ясно.
А то что при этом время открытия такой формы увеличится в разы, это учтено? Может стоит попробовать как-нибудь расширения вместо такого извращения задействовать? |
|||
11
НЕА123
14.11.16
✎
15:46
|
> НоваяКолонкаТаблицы = Элементы.Добавить("КолонкаКод", Тип("ПолеФормы"), Элемент);
НоваяКолонкаТаблицы = Элементы.Добавить("КолонкаКод", Тип("ПолеФормы"), Элементы.Список); |
|||
12
НЕА123
14.11.16
✎
15:46
|
(11) сторно
|
|||
13
НЕА123
14.11.16
✎
15:47
|
Для Каждого Реквизит Из Массив Цикл
Эл = Элементы.Добавить(Реквизит.Имя, Тип("ПолеФормы"), Элементы.ТЗ1); Эл.вид = ВидПоляФормы.ПолеВвода; Эл.доступныеТипы = Новый ОписаниеТипов(Колонка.ТипЗначения); Эл.ПутьКДанным = "ТЗ1."+Эл.Имя; Эл.Формат = "ЧГ=0"; КонецЦикла; |
|||
14
megabax
14.11.16
✎
15:49
|
(13) Че за Массив, откуда этот массив взять?
|
|||
15
НЕА123
14.11.16
✎
15:50
|
(14)
имеется ввиду, что надо до определения ПутькДанным определить что-то. |
|||
16
megabax
14.11.16
✎
16:15
|
Когда взял пример из http://its.1c.ru/db/pubmanagedui#content:247:hdoc:_top, заработало, но как-то попытался использовать параметры, вот в таком коде:
// Добавить реквизит "Динамический список". ТипыРеквизита = Новый Массив; ТипыРеквизита.Добавить(Тип("ДинамическийСписок")); ОписаниеТиповДляРеквизита = Новый ОписаниеТипов(ТипыРеквизита); НовыйРеквизит = Новый РеквизитФормы("РеквизитПроводки", // имя ОписаниеТиповДляРеквизита, // тип , // путь "СписокТоваров", // заголовок Истина); // сохраняемые данные ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); ИзменитьРеквизиты(ДобавляемыеРеквизиты); // Задать текст запроса и другие свойства динамического списка. РеквизитСписок = ЭтаФорма["РеквизитПроводки"]; РеквизитСписок.ТекстЗапроса = "ВЫБРАТЬ | Хозрасчетный.СчетДт, | Хозрасчетный.СчетКт, | Хозрасчетный.Организация, | Хозрасчетный.Сумма, | Хозрасчетный.КоличествоДт, | Хозрасчетный.КоличествоКт, | Хозрасчетный.Содержание |ИЗ | РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный |ГДЕ | Хозрасчетный.Регистратор = &Регистратор"; //РеквизитСписок.ОсновнаяТаблица = "Справочник.Товары"; РеквизитСписок.Параметры.Регистратор=Док; // Добавить элемент формы и связать его с реквизитом. НовыйЭлемент = Элементы.Добавить("ЭлементПроводки", Тип("ТаблицаФормы")); НовыйЭлемент.ПутьКДанным = "РеквизитПроводки"; // Создать колонки и связать их с данными. НоваяКолонкаТаблицы = Элементы.Добавить("СчетДт", Тип("ПолеФормы"), НовыйЭлемент); НоваяКолонкаТаблицы.ПутьКДанным = "РеквизитПроводки.СчетДт"; НоваяКолонкаТаблицы = Элементы.Добавить("СчетКт", Тип("ПолеФормы"), НовыйЭлемент); НоваяКолонкаТаблицы.ПутьКДанным = "РеквизитПроводки.СчетКт"; Почему то вылетает на РеквизитСписок.Параметры.Регистратор=Док; с сообщением "{Форма.Форма.Форма(37)}: Поле объекта не обнаружено (Регистратор) РеквизитСписок.Параметры.Регистратор=Док;" |
|||
17
FIXXXL
14.11.16
✎
16:49
|
(16) установитьПараметры
|
|||
18
FIXXXL
14.11.16
✎
16:50
|
(14) это массив созданных ранее реквизитов :)
|
|||
19
megabax
14.11.16
✎
17:29
|
(17) Спасибо, вот так
РеквизитСписок.Параметры.УстановитьЗначениеПараметра("Регистратор",Док); прокатило |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |