Имя: Пароль:
1C
1С v8
Динамическая таблица значений (управляемая форма)
,
0 Uzumaki
 
22.05.13
18:15
Добрый день всем!
Приступил к изучению режима управляемого приложения и вот первая проблема которую не смог решить на пару с гуглом. Создал внешнюю обработку для отладки запросов, то есть на форме многострочное текстовое поле, результатирующая таблица и кнопка выполнить. В качестве типа результатирующей таблицы выбирал динамический список и таблицу значений. В обоих случаях всё проходит без ошибок, однако, данные на форме не обновляются. Можно через удаление/добавление колонок (чтобы обновлялась таблица), однако, тогда придется парсить текст запроса, а это как бы изобретение велосипеда.
Вопрос, в какую сторону копать, чтобы обновлять реквизит на форме не имея представления о структуре таблицы данных?
1 lapinio
 
22.05.13
18:19
Динамический список не обновляется?
2 lapinio
 
22.05.13
18:23
Какой то велосипед. Есть консоль запросов зачем свою писать не понятно. Если динамический список, у него есть свойство текст запроса туда любой текст добавляешь  и все ок.
3 Uzumaki
 
22.05.13
18:31
Динамический список не обновляется.
За консоль запросов спасибо, я на диске ИТС я нашел только для обычного приложения.
4 lapinio
 
22.05.13
18:46
1) В дополнительных параметрах запуска написать /RunModeOrdinaryApplication и открыть эту консоль
2) Вставить в конфу консоль и поставить свойство открывать обычные формы в уФ
3) Скачать консоль для УФ
4)ОповеститьОбИзменении команда для динамического списка
5 Mitriy
 
22.05.13
18:46
консоль не имеет смысла городить в управляемом интерфейсе, потому что конструктор запроса все равно доступен только в толстом клиенте... а в толстом клиенте и обычные формы работают в управляемом приложении...
6 Uzumaki
 
22.05.13
18:55
(4) ОповеститьОбИзменении - это немного не то. Допустим, если текст запроса "ВЫБРАТЬ 1 КАК ОДИН". Нет у динамического списка основной таблицы.
(5) Мне конструктор запроса не интересен, только текст.
7 Mitriy
 
22.05.13
18:57
(6) ты конечно не поверишь, но динамическому списку основная таблица не нужна...
8 Uzumaki
 
22.05.13
19:09
(7) я охотно верю, но вот из описания:
Уведомления не влияют на динамические списки, у которых не задана основная таблица.
Реквизит обязательный, что туда пихать?
9 Mitriy
 
22.05.13
19:15
ничего не пихай...
10 Uzumaki
 
22.05.13
19:44
(9) Спасибо, не буду...

Я так понимаю, динамический список не может автоматически менять набор реквизитов-колонок после смены текста? Потому что запрос "ВЫБРАТЬ 1 КАК ПОЛЕ1" после указания в конфигураторе добавляет колонку ПОЛЕ1, после открытия формы в тонком клиенте в результатирующей таблице появляется строка с значением 1. При этом меняем программно текст запроса, допустим, на "ВЫБРАТЬ Ссылка КАК ПОЛЕ1 ИЗ Справочник.Любой" - все работает. Но тут же "ВЫБРАТЬ Ссылка КАК ПОЛЕ2 ИЗ Справочник.Любой" - не проходит, остается пустая таблица с одной колонкой ПОЛЕ1.
11 Uzumaki
 
23.05.13
12:57
Решил проблему так:
&НаСервере
Процедура ВыполнитьЗапросНаСервере(ТекстЗапроса)
   
   Запрос = Новый Запрос;
   Запрос.Текст = ТекстЗапроса;
   ТЗ = Запрос.Выполнить().Выгрузить();
   
   МассивУдаляемыхРеквизитов = ЭтаФорма.ПолучитьРеквизиты("РезультатирующаяТаблица");
   МассивИменУдаляемыхРеквизитов = Новый Массив;
   
   Для Каждого Реквизит Из МассивУдаляемыхРеквизитов Цикл
       Элементы.Удалить(Элементы.Найти(Реквизит.Имя));    
       МассивИменУдаляемыхРеквизитов.Добавить("РезультатирующаяТаблица." + Реквизит.Имя);    
   КонецЦикла;
       
   МассивДобавляемыхРеквизитов = Новый Массив;
   Для Каждого Колонка Из ТЗ.Колонки Цикл
       МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "РезультатирующаяТаблица", Колонка.Имя));    
   КонецЦикла;
   
   ИзменитьРеквизиты(МассивДобавляемыхРеквизитов, МассивИменУдаляемыхРеквизитов);
   
   Для Каждого Колонка Из ТЗ.Колонки Цикл
         Элемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), Элементы.РезультатирующаяТаблица);
         Элемент.Вид = ВидПоляФормы.ПолеВвода;
         Элемент.ПутьКДанным = "РезультатирующаяТаблица." + Колонка.Имя;
   КонецЦикла;

   ЭтаФорма.РезультатирующаяТаблица.Загрузить(ТЗ);
   
КонецПроцедуры

Через динамический список не получилось.