Имя: Пароль:
1C
 
УФ : Визуализировать на форме массив в виде ТЗ
0 bvb
 
28.10.22
17:51
Имею :
МассивСДанными = ПрочитатьJSON(ЧтениеJSON);

Нужно визуализировать данный массив на форме в виде таблицы значений (те заполнить таблицу значений - реквизит формы и визуализировать ее на форме, динамически создав колонки).
Состав колонок ясно дело произвольный

Гуглил примеры. Что нашел - нерабочие;

Таблицу могу создать из массива, функцией на сервере,  но проблема передать ее на клиент в ДанныеФормыКоллекция
1 vicof
 
28.10.22
18:01
Наверное, нужно подумать, почему нерабочий.
2 lodger
 
28.10.22
18:15
Наверное, надо осознать что суть есть ДанныеФормыКоллекция на клиенте, и чем это отличается от ТаблицаЗначений.
там же всего 1.5 шага до конечного результата, раз уж типизированная Таблица уже в руках.
3 Garykom
 
гуру
28.10.22
18:15
(0) Не тупи.
Динамический список на форме, произвольный запрос, свою ТЗ как параметр туда, запрос с ВТ
4 Сергиус
 
28.10.22
21:04
(3)[Состав колонок ясно дело произвольный] Не смущает? Для ДС придется вручную перетаскивать нужные колонки на форму. Автор же хочет, чтобы оно всё автоматом было)
5 Сергиус
 
28.10.22
21:06
(0)Зачем передавать таблицу на клиент? Заполнил на сервере и всё выведет и так.
6 Garykom
 
гуру
28.10.22
22:35
(4) Программно можно
7 bvb
 
29.10.22
15:50
(2) Реквизит формы типа ТаблицаЗначений под отладчиком видится как ДанныеФормыКоллекция
При этом таблица значений на клиенте не живет и на клиент не передается

Сейчас буду искать в направлении динамического создания колонок в таблице значений на форме
Возможно массив в ТЗ преобразовывать не нужно а сразу создать структуру на клиеннте
8 bvb
 
31.10.22
17:14
Вот сделал :

МассивСДанными = ПрочитатьJSON(ЧтениеJSON);
СоздатьИЗаполнитьСтруктуруКолонок(МассивСДанными);


&НаСервере
Процедура СоздатьИЗаполнитьСтруктуруКолонок (МассивСДанными)
    
    ТЗ = ПреобразованиеМассивВТаблицуЗначений(МассивСДанными);
    
    МассивКолонок = Новый Массив;    
    
    
    Для Каждого КолонкаТЗ ИЗ ТЗ.колонки Цикл
        ИмяКолонки = КолонкаТЗ.Имя;
        нРеквизитФормы = Новый РеквизитФормы(ИмяКолонки, Новый ОписаниеТипов("Строка", , ,Новый КвалификаторыСтроки(150)), "ТЗ_Отчета", ИмяКолонки);
           МассивКолонок.Добавить(нРеквизитФормы);                  
    КонецЦикла;
    
    // добавим реквизиты на форму
    ИзменитьРеквизиты(МассивКолонок);
    
        
    Для Каждого КолонкаТЗ ИЗ ТЗ.колонки Цикл
        ИмяКолонки = КолонкаТЗ.Имя;
        нЭлемент = Элементы.Добавить(ИмяКолонки, Тип("ПолеФормы"), Элементы.ТЗ_Отчета);
        нЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        нЭлемент.ПутьКДанным = "ТЗ_Отчета." + ИмяКолонки;
    КонецЦикла;
    
    ТЗ_Отчета.Загрузить(ТЗ);
    
КонецПроцедуры    

&НаСервере
Функция ПреобразованиеМассивВТаблицуЗначений(Массив)

   ТЗ = Новый ТаблицаЗначений;

   Для Каждого СтрокаМассива Из Массив Цикл

       Если ТЗ.Колонки.Количество() = 0 Тогда
           Для Каждого ЭлементМассива Из СтрокаМассива Цикл
               ТЗ.Колонки.Добавить(ЭлементМассива.Ключ);
           КонецЦикла;
       КонецЕсли;

       НоваяСтрока = ТЗ.Добавить();
       Для Каждого ЭлементМассива Из СтрокаМассива Цикл
           НоваяСтрока[ЭлементМассива.Ключ] = ЭлементМассива.Значение;
       КонецЦикла;
   КонецЦикла;
  
   Возврат ТЗ;

КонецФункции
9 bvb
 
31.10.22
17:16
Одно непонятно :
Как понять при повторной загрузке понять что колонки созданы чтобы не создавать их
Или очисть коллекцию
10 mistеr
 
31.10.22
17:40
(0) В табдоке визуализируй.
11 bvb
 
31.10.22
18:20
Сделал проще :
Если ЭтаФорма.Элементы.Найти(ИмяКолонки) = Неопределено  Тогда
12 ДедМорроз
 
31.10.22
19:05
Если мы хотим динамически создать таблицу:
1. Удалить все элементы на форме с прошлой таблицв.
2. В массив удаления загнать все реквизиты таблицы (дочерние) и саму таблицу значений.
3. Создать новый реквизит ТаблицаЗначений и создать дочерние реквизиты для колонок таблицы.
4. Вызвать ИзменитьРеквизиты,передав массивы из 2 и 3.
5. Создать на форме таблицу и поля для видимых колонок таблицы значений,прописав пути до реквизитов.
6. Заполнить таблицу значений данными.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс