После перехода на управляемые формы многие столкнутся с проблемой передачи Таблицы значений с Сервера на клиент. Существует несколько способов вернуть Таблицу значений с Сервера на Клиент. Рассмотрим некоторые из них:
1) Таблицу в массив
// Функция преобразует ТаблицуЗначений в Массив из структур.
//
Функция ПреобразоватьТаблицуЗначенийВМассив(тзДанные) Экспорт
мсДанные = Новый Массив;
// Запишем в массив
Для Каждого СтрокаТЗ Из тзДанные Цикл
стСтрокаТаблицы = Новый Структура;
Для Каждого ИмяКолонки Из тзДанные.Колонки Цикл
стСтрокаТаблицы.Вставить(ИмяКолонки.Имя, СтрокаТЗ[ИмяКолонки.Имя]);
КонецЦикла;
мсДанные.Добавить(стСтрокаТаблицы);
КонецЦикла;
Возврат мсДанные;
КонецФункции // ПреобразоватьТаблицуЗначенийВМассив()
// Функция преобразует Массив из структур в ТаблицуЗначений.
//
Функция ПреобразоватьМассивВТаблицуЗначений(мсДанные) Экспорт
тзДанные = Новый ТаблицаЗначений;
Для Каждого ЭлементМассива Из мсДанные Цикл
// Рисуем колонки для таблицы
Если тзДанные.Колонки.Количество() = 0 Тогда
Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
тзДанные.Колонки.Добавить(ЗначениеСтруктуры.Ключ);
КонецЦикла;
КонецЕсли;
// Добавляем данные в таблицу
НоваяСтрока = тзДанные.Добавить();
Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
НоваяСтрока[ЗначениеСтруктуры.Ключ] = ЗначениеСтруктуры.Значение;
КонецЦикла;
КонецЦикла;
Возврат тзДанные;
КонецФункции // ПреобразоватьМассивВТаблицуЗначений()
2) Таблицу в массив 2 способ
// Создаем реквизит формы "ВремТабЗнач" с типом данных: Таблица значений
// Ревкизит будет использоваться для передачи данных с сервера на клиент.
&НаСервере
Функция ПолучитьТЧ(ОбъектСсылка,ИмяТЧ)
ЗначениеОбъекта = ОбъектСсылка.ПолучитьОбъект();
ТабРез = ЗначениеОбъекта[ИмяТЧ].выгрузить();
МассивДобавляемыхРеквизитов = Новый Массив;
МассивУдаляемыхРеквизитов = Новый Массив;
МассивКолонок = Новый Массив;
ИдКоллекции="ВремТабЗнач";
КоллФормы=РеквизитФормыВЗначение(ИдКоллекции);
Для каждого ТекКол из КоллФормы.Колонки Цикл
МассивУдаляемыхРеквизитов.Добавить(ИдКоллекции+"."+ТекКол.Имя);
КонецЦикла;
Для каждого ТекКол из ТабРез.Колонки Цикл
МассивДобавляемыхРеквизитов.Добавить(
Новый РеквизитФормы(ТекКол.Имя,ТекКол.ТипЗначения,ИдКоллекции));
МассивКолонок.Добавить(ТекКол.Имя);
КонецЦикла;
// Добавим новые, удалим старые колонки
ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов,МассивУдаляемыхРеквизитов);
// Поместим значение в реквизит формы
ЗначениеВРеквизитФормы(ТабРез,ИдКоллекции);
// вернем массив колонок в обрабатываемой ТЗ, например для более простого перебора
Возврат МассивКолонок;
КонецФункции
3) Передача через хранилище
// Пример:
АдресХранилища = ПоместитьВоВременноеХранилище(МассивДанных,ЭтаФорма.УникальныйИдентификатор);
ПолучитьИзВременногоХранилища(УинкальныйИдентификаторВХранилище);
// Пример:
ПротоколПереноса = ПолучитьИзВременногоХранилища(АдресХранилища);
3) Самый простой, но не рекомендуемый способ это передача через табличную часть объекта (документа, справочника, обработки), доступную как на сервере так и на клиенте.
Источник: http://itpath.ru/valuetable-v8-exhcnage-server-client/
|