|   |   | 
| 
 | Как программно создать динамический список? | ☑ | ||
|---|---|---|---|---|
| 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) Спасибо, вот так
 РеквизитСписок.Параметры.УстановитьЗначениеПараметра("Регистратор",Док); прокатило | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |