Перенос таблицы значений между клиентом и сервером

10.12.13

Разработка - Универсальные функции

Всем привет.
Бывают такие моменты, когда необходимо таблицу значений передать с сервера на клиент, увы, Мутабельные значения и т.д.
В тоже время есть возможность перекидывать все это добро через Хранилище, чем собственно разработчики часто пользуются.
Но сегодня я бы хотел вынести на Вашу критику вот такой пример переноса.

Сильно не пинайте.

Все мы сталкивались с ситуацией, когда необходимо с сервера передать данные на клиент. И далеко не всегда это примитивные типы.

Об одном из таких типов я бы сегодня и хотел поговорить.

Речь сегодня о таблицы значений.

Данный тип является мутабельным и при попытке выполнить это действия мы получим ошибку:

{Справочник.НастройкиЗаполненияОбъектов1СДокументооборота.МодульОбъекта(33)}: Ошибка при вызове метода контекста (ПолучитьПрокси)
Прокси = ИнтеграцияС1СДокументооборотВызовСервера.ПолучитьПрокси();
по причине:
Попытка передачи мутабельного значения результата метода ПолучитьПрокси ().

(текст ошибки в каждом случае свой)

 

Сегодня я выношу на Вашу критику и обозрение один из вариантов решения этой проблемы, а именно преобразование в Массив(может передаваться) из структур и обратно в таблицу.

 

Функция "ПреобразоватьТаблицуЗначенийВМассив" выполняется на сервере перед передачей данных, а "ПреобразоватьМассивВТаблицуЗначений" уже на клиенте соответственно.

 

Код этих функций:

 

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

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

Мутабельные Клиент Сервер Перенос таблицы значений

См. также

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    21047    dimanich70    81    

145

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    4156    3    John_d    11    

57

Универсальные функции Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    19339    atdonya    24    

58

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    5599    ke.92@mail.ru    16    

65

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    15094    YA_418728146    7    

169

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3669    57    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    18619    172    sapervodichka    112    

135
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. AlX0id 10.12.13 19:18 Сейчас в теме
ОбщегоНазначения.ТаблицаЗначенийВМассив(Таблица)
не? )
romulanin; pavlov_a; JohnConnor; Istur; user712426; alsegor; Iva_Irina_Iva; user785234; zzz14; HuKuTa88; miphtemp; Jeka44; user865537; Yan_Malyakov; kamsky93; victorree; Elf77; user811769; user1090556; sergio199; Gorus; kar911; Gang031; VrYasuyk; Огонек; NN2P; Silenser; roman77; altek; roofless; elga2012; qwed557; tehas; elian; dim369; Draconus; freezetron; KonstB; +38 Ответить
4. Draconus 84 11.12.13 08:58 Сейчас в теме
(1) AlX0id, опять велосипед изобретаю))
А в обратку кстати какой метод? "МассивВТаблицуЗначений" не нашел...
8. AlX0id 11.12.13 10:16 Сейчас в теме
(4)
А обратно лично я не нашел ) Пришлось писать )
10. Draconus 84 11.12.13 10:41 Сейчас в теме
(8) AlX0id, тогда половина кода не "велосипед" :)
A_Max; Andrei_Ivanov; user865537; klinval; +4 Ответить
12. Bukaska 140 11.12.13 10:52 Сейчас в теме
(4) Мутабельные значения - немножко другая тема..
если у вас модуль серверный и не стоит галка вызов сервера и наоборот... то конечно будет эта тема..
А так для тонкого клиента есть функционал: ДанныеФормыВЗначение и ЗначениеВДанныеФормы
Об этом даже рассказывает Андрей Габец в тестовом доступе УЦ3 , отрывок из курса Оперативных задач
31. AlexeyPapanov 466 01.09.18 13:42 Сейчас в теме
Коллеги, я сейчас решаю озвученную в теме задачу.
Пишу обработку заполнения табличной части (с вызовом клиентского метода).
Юзер указывает ссылку на документ, по которой я на сервере собираю ТЗ, а потом эту ТЗ возвращаю на клиент, чтобы заполнить ТЧ своего документа.

Понимаю, что можно тупо упаковать строки в структуры,, а их в массив, и этот массив вернуть на клиент.

но тут в (12) сказано
А так для тонкого клиента есть функционал: ДанныеФормыВЗначение и ЗначениеВДанныеФормы

это применимо в моей задаче или проще массив из структур швырнуть на клиент?
34. azhilichev 214 03.12.18 09:21 Сейчас в теме
(31) ДанныеФормыВЗначение и ЗначениеВДанныеФормы нельзя открывать от контекста формы. Бесконтекстные вызовы не отработают.
2. KonstB 180 10.12.13 21:48 Сейчас в теме
1. Автор посмотри (0) - сравни. У тебя не оптимально.
2. Функция ПреобразоватьМассивВТаблицуЗначений(мсДанные) - не будет работать в тонком клиенте
ice666999; rpgshnik; +2 Ответить
3. AnryMc 848 10.12.13 21:53 Сейчас в теме
Функция "ПреобразоватьТаблицуЗначенийВМассив" выполняется на сервере перед передачей данных, а "ПреобразоватьМассивВТаблицуЗначений" уже на клиенте соответственно.


&НаСервереБезКонтекста

&НаКлиентеБезКонтекста

40. olbir 18.08.21 15:39 Сейчас в теме
(3)
(3)
Функция "ПреобразоватьТаблицуЗначенийВМассив" выполняется на сервере перед передачей данных, а "ПреобразоватьМассивВТаблицуЗначений" уже на клиенте соответственно.


&НаСервереБезКонтекста

&НаКлиентеБезКонтекста


тзДанные = Новый ТаблицаЗначений; на клиенте не работает
Риник; +1 Ответить
5. soap 67 11.12.13 09:22 Сейчас в теме
Попробовал можно воспользоваться, но при большой таблице чертовски медленно
6. gaglo 11.12.13 09:57 Сейчас в теме
А почему не ЗначениеВСтрокуВнутр ?
jONES1979; myALKleon; +2 Ответить
7. Draconus 84 11.12.13 10:10 Сейчас в теме
(6) gaglo, никто не говорил, что данный вариант - это универсальные методы, которые должны быть у каждого и пользоваться надо только ими)
Это всего лишь один из возможных подходов к решению задач. Кстати как упоминалось в (5) далеко не самый оптимальный. Однако есть вероятность, что кто-то сочтет его полезным для себя.
17. gaglo 12.12.13 10:37 Сейчас в теме
(7) - не ответ, а вот (14) - ответ. Спасибо.
14. kg_am 178 11.12.13 12:01 Сейчас в теме
(6) gaglo,
ЗначениеИзСтрокиВнутр() на тонком клиенте не работает.
METAL; lsnr; vvvalera; gaglo; +4 Ответить
35. user659124_s.kostina 29.07.19 13:37 Сейчас в теме
(6) Пыталась сравнивать этой функций две тз, одна была выгружена из результата запроса, другая сформирована в цикле, и они НЕ были одинаковыми. Сравнила полученный текст, разница, как я поняла в индексах. А вот сравнив массивы, полученные из этих тз, я получила верный результат сравнения.
9. Гость 11.12.13 10:41
если не ошибаюсь, ТаблицаЗначений прекрасно передается на сервер
вот СписокЗначений - не передается
Прикрепленные файлы:
tranay; Трактор; +2 5 Ответить
11. Draconus 84 11.12.13 10:43 Сейчас в теме
(9) barankin, таблица значений с сервера не передается, а вот список значений передаваться должен.
Хотя недавно у меня тоже не передавался, что странно, так как точно помню, что можно было... так же пришлось делать через массив.
13. zarucheisky 11.12.13 10:56 Сейчас в теме
Передача массива структур с клиента на сервер в общем-то очевидна и давно известна.
А вот подобный код в статье публиковать не стОит.

Вложенные циклы по колонкам внутри перебора таблицы выглядят несколько неразумно.

На самом деле, если конечно подумать, и посмотреть как ТЗ отображается в XML, то и решение придет как бы само :)
user1210458; Yashazz; +2 Ответить
18. Yashazz 4794 12.12.13 12:50 Сейчас в теме
(13) Верно, хотя сериализация тоже не всякая прокатывает, особенно если в таблице разности и хитрости понапиханы. Да и городить огород иногда нерационально.
19. zarucheisky 12.12.13 14:14 Сейчас в теме
(18) Понапихай всего разного и посмотри как сериализуется
Грубо говоря, сериализуется ВСЕГДА одинаково, как прописано в xsd-схеме ядра платформы.
21. Yashazz 4794 20.12.13 22:36 Сейчас в теме
(19) Некоторые вещи просто НЕ сериализуются. Иногда - противореча СП, например, "РазмерКартинки". А схему самой 1С я видел, так вот, теоретически должное иногда практически не выходит. Ну, xsd 1С - вообще отдельная история, здесь это оффтоп )))
15. peterxx 23 11.12.13 15:50 Сейчас в теме
Нормально работает, сам пользуюсь, правда преобразую ТЗ в структуру массивов. Массив тоже можно пинать между клиентом и сервером.
16. nixel 1434 12.12.13 01:31 Сейчас в теме
Вот если бы кто написал функции по переводу тз в массив структур с двумя требованиями:
1) обход данного массива так же как и ТЗ (есть)
2) преобразование данного массива в ТЗ с сохранением типов колонок

А то в крайних случаях приходится проходиться по колонке, смотреть все типы и строить ОписаниеТипов для конструктора ТЗ по собранным данным... Медленно и не всегда верно. Особенно если таблица пустая. Колонки потеряли, типы потеряли. Ну это так, мысли о высоком.
20. wunderland 202 13.12.13 13:31 Сейчас в теме
скользкая тема, если в таблице есть значения Null - в этом случае в тонком клиенте и WEB-клиенте код отрабатывает по разному.
22. realEvgenius 2 17.02.15 11:09 Сейчас в теме
А в чем соль, так сказать?

Функция ПреобразоватьМассивВТаблицуЗначений(мсДанные)

Всеравно передает ТЗ с сервера и всеравно вызывает ошибку...

Или я деревянный или чушь какая-то
23. Draconus 84 17.02.15 14:07 Сейчас в теме
(22) realEvgenius

Вариант 1.
1. С помощью ПреобразоватьТаблицуЗначенийВМассив() делаем массив, который гоняем между клиентом и сервером.
2. Обрабатываем его (это уже сами выбираете как)
3. Передаете на клиент обратно МАССИВ, который затем преобразуете в Таблицу значений с помощью ПреобразоватьМассивВТаблицуЗначений().

Вариант 1,5.
1. Делаем массив с помощью ПреобразоватьТаблицуЗначенийВМассив()
2. Получаем на сервере, преобразуем в Таблицу значений с помощью ПреобразоватьМассивВТаблицуЗначений()
3. Работаем с Таблицей значений

З.Ы. Мне надо было для второго варианта.
24. realEvgenius 2 17.02.15 16:17 Сейчас в теме
(23) Вопрос Как в процедуре, которая идет после &НаКлиенте Использовать Таб значений как её туда передать? Ответ - никак. ПреобразоватьМассивВТаблицуЗначений() Это на сервере запускать? Оно возвращает Таб значений (Возврат тзДанные), которую нельзя передать в мою процедуру, которая выполняется на клиенте. Ибо система ругается.
Смысл этих обработок? Таб значений передать на клиента нельзя. Преобразовываем её в массив, передаем массив на клиента, предаем массив функции ПреобразоватьМассивВТаблицуЗначений(), которая по идее должна дать таб знач и получаем туже ошибку. Наверное, я - деревянный, что-то не понимаю
25. Draconus 84 17.02.15 16:42 Сейчас в теме
(24) realEvgenius

Обе функции кладутся в общий модуль, где проставлены галочки "Клиент" и " Сервер", назовем его "ОбщегоНазначенияКлиентСервер"

&НаКлиенте
Процедура ЧтотоДелаю1()
   
   //Есть уже таблица надо ее подправить на сервере
   ЧтотоДелаюНаСервере1(ОбщегоНазначенияКлиентСервер.ПреобразоватьТаблицуЗначенийВМассив(<НашаБеднаяТаблица>));

КонецПроцедуры

&НаСервере
Процедура ЧтотоДелаюНаСервере1(НашБедныйМассив)
   НашаБеднаяТаблица = ОбщегоНазначенияКлиентСервер.ПреобразоватьМассивВТаблицуЗначений(НашБедныйМассив).Скопировать();
   // Мучаем нашу бедную таблицу, что-то из нее берем, что-то добавляем
   
   // Если надо вернуть отбратно, то делаем не процедуру, а функцию и возвращаем
   // ОбщегоНазначенияКлиентСервер.ПреобразоватьТаблицуЗначенийВМассив(<НашаБеднаяПЕРЕДЕЛАННАЯТаблица>)

КонецПроцедуры
Показать


Я не знаю что тут еще можно добавить
alul; realEvgenius; +2 1 Ответить
27. svad1 10 21.04.16 13:37 Сейчас в теме
(25) как у вас получилось?
//Есть уже таблица надо ее подправить на сервере 

Если на клиенте написать 
тзДанные = Новый ТаблицаЗначений; 


то сразу ошибка.

Как таблица значений может быть на клиенте? Нечего передавать по сути, так как сразу возникает ошибка... Я так понял таблица значений не может существовать на клиенте

Тип не определен (ТаблицаЗначений)
тзДанные = Новый <<?>>ТаблицаЗначений; (Проверка: Тонкий клиент)
afrodit; bow; +2 Ответить
26. realEvgenius 2 17.02.15 17:04 Сейчас в теме
Аааа.... В общий модуль... А я ж в томже модуле мучаю...
попробую
28. logos 214 27.06.16 20:44 Сейчас в теме
Вот ведь парадокс.... Тип таблица значений на клиенте не определен, а реквизит формы типа "таблица значений" возможен и работает. Сдается мне это вопрос религиозного характера!
rpgshnik; +1 Ответить
29. nixel 1434 28.06.16 00:54 Сейчас в теме
(28) logos, посмотрите отладчиком, какой тип у этого реквизита. Удивитесь.
30. It-developer 26 23.03.17 14:28 Сейчас в теме
Они ограничили передачи ТаблицыЗначений, потому что хз что туда можно напихать. Было бы лучше не ограничивать таблицу, а ограничивать типы передаваемых данных
32. chukawata 10 23.10.18 05:00 Сейчас в теме
33. komanch75 28.11.18 09:29 Сейчас в теме
Можно передавать массив, элементы которого - массивы выгруженных колонок таблицы.
Правда таблица значений доступна только на толстом клиенте.
&НаКлиенте
Процедура ЧтоТо(Команда)
	Мсс=ПередачаНаСервере();
	ТЗ=Новый ТаблицаЗначений;
	Для йй=0 по Мсс.Количество()-1 цикл
		ИмяКолонки=СокрЛП(Мсс[йй][0]);
		ТЗ.Колонки.Добавить(ИмяКолонки);
		Мсс[йй].Удалить(0);
		Если йй=0 тогда //на первом проходе добавим в ТЗ строки
			Для цц=1 по Мсс[йй].Количество() цикл
				ТЗ.Добавить();
			КонецЦикла;
		КонецЕсли;
		ТЗ.ЗагрузитьКолонку(Мсс[йй], ТЗ.Колонки[ИмяКолонки]);
	КонецЦикла;
КонецПроцедуры

&НаСервере
Функция ПередачаНаСервере()
		ТЗ = КадровыйУчет.КадровыеДанныеСотрудников(Ложь, Объект.Сотрудник, ЗапрашиваемыеКадровыеДанные, ТекущаяДата()); //формирует ТЗ
		Мсс=Новый Массив;
		Для йй=0 по ТЗ.Колонки.Количество()-1 цикл
			кл=ТЗ.ВыгрузитьКолонку(ТЗ.Колонки[йй]);
			кл.Вставить(0, СокрЛП(ТЗ.Колонки[йй].Имя)); //первой строкой имя колонки
			Мсс.Вставить(йй,кл);
		КонецЦикла;
		Возврат Мсс;
КонецФункции
Показать
36. hobi 616 09.10.19 12:52 Сейчас в теме
Гораздо эффективнее будет работать так (нет двойных циклов и меньше объем данных при сериализации):

Функция ТзВКоллекцию(ТЗ) Экспорт
	
	Коллекция = Новый Структура;
	Для каждого Колонка Из ТЗ.Колонки Цикл
	    Коллекция.Вставить(Колонка.Имя, ТЗ.ВыгрузитьКолонку(Колонка.Имя));
	КонецЦикла;
	Возврат Коллекция;
	
КонецФункции	

Функция КоллекцияВТЗ(Коллекция) Экспорт
	
	ТЗ = Новый ТаблицаЗначений;
	// добавим пустые строки
	Для каждого Эл Из Коллекция Цикл
		КоличествоСтрок = Эл.Значение.Количество();
		Для Индекс = 1 По КоличествоСтрок Цикл
		    ТЗ.Добавить();
		КонецЦикла;
		Прервать;
	КонецЦикла;
		
	// загрузим колонки
	Для каждого Эл Из Коллекция Цикл
	    ТЗ.Колонки.Добавить(Эл.Ключ);
		ТЗ.ЗагрузитьКолонку(Эл.Значение, Эл.Ключ);
	КонецЦикла;
	
	Возврат ТЗ;
	
КонецФункции	
Показать
Istur; janit; chemezov; Anosov_EP; ssfedkin; miphtemp; rnobody; Aspire1C; Cyberhawk; Elisy; +10 Ответить
38. Elisy 951 28.05.20 18:27 Сейчас в теме
(36) Самое оптимальное решение. Производительность увеличивается в 1,5-2 раза
37. user811769 14 07.04.20 12:51 Сейчас в теме
спасибо из 2020 ))) ваш код очень помог с задачей, в которой нужно было кешировать значения ТЗ и проверять после записи
alul; ilya4; +2 Ответить
39. 1108 223 01.04.21 23:00 Сейчас в теме
(37) в 2021г. код все еще актуален)))
41. Serg243 27.01.22 12:27 Сейчас в теме
2022й Борюсь с той-же проблемой. Спасибо за подсказку.
43. user1773463 06.06.23 16:27 Сейчас в теме
2023й идет. Очень интересно
(41)
42. Serg243 27.01.22 16:24 Сейчас в теме
Я вот тоже с внешней обработкой встрял. Мне нужно чтобы в документе *.doc формировалась таблица из документа и была возможность. Но писать процедуры и функции в общий модуль не хочется, у меня чувство что это не особо надёжно. Решил проблему так.
Добавил на форму табличную часть.
Пусть нужные данные попадают в неё сразу если обработка печати открывается из документа.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если НЕ Параметры.ОбъектыНазначения[0] = Неопределено Тогда 
		СсылкаНаДокумент = Параметры.ОбъектыНазначения[0];
		
		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	ЗаказКлиентаТовары.Номенклатура КАК Номенклатура,
		|	ЗаказКлиентаТовары.Количество КАК Количество,
		|	ЗаказКлиентаТовары.Цена КАК Цена,
		|	ЗаказКлиентаТовары.Сумма КАК Сумма
		|ИЗ
		|	Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
		|ГДЕ
		|	ЗаказКлиентаТовары.Ссылка = &СсылкаНаДокумент";
	
	Запрос.УстановитьПараметр("СсылкаНаДокумент", СсылкаНаДокумент);
	
	РезультатЗапроса = Запрос.Выполнить();
	Таблица1 = РезультатЗапроса.Выгрузить();
	
	Для каждого СтрокаТЗ Из Таблица1 Цикл 
		ЗаполнитьЗначенияСвойств(Объект.ТабличнаяЧастьДокумента.Добавить(), СтрокаТЗ) 
	КонецЦикла; 
	
	КонецЕсли;

КонецПроцедуры
Показать


ПС Я начинающий 1Сник, строго не судите.
ARMAGEDONF; +1 Ответить
44. andrew_dr 19.01.24 16:23 Сейчас в теме
Прошу обратить внимание, что переданная массивом на сервер и преобразованная в таблицу не содержит типизации колонок.
И если эта таблица используется в запросе на создание временной таблицы (путем загрузки из параметра), то запрос падает с ошибкой "Не могу задать тип".
Вот немного подправленная версия:

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

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

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

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

Возврат тзДанные;

КонецФункции // ПреобразоватьМассивВТаблицуЗначений()
45. RustIG 1749 30.05.24 19:23 Сейчас в теме
идет 2024год...
за поднятие темы +

имхо, разработчикам платформы надо разделить ТаблицуЗначений на два разных объекта:
один интерфейсный и мутабельный - назовем его Таблица - он для отображения и визуализации таблицы значений на форме,
второй - в качестве коллекции хранения данных - вот его можно будет легко передавать с клиента на сервер и обратно.
При этом второй объект ТаблицаЗначений можно было бы получать через процедуру Таблица.Выгрузить()

И ДеревоЗначенийтакже разделить
Оставьте свое сообщение