Все мы сталкивались с ситуацией, когда необходимо с сервера передать данные на клиент. И далеко не всегда это примитивные типы.
Об одном из таких типов я бы сегодня и хотел поговорить.
Речь сегодня о таблицы значений.
Данный тип является мутабельным и при попытке выполнить это действия мы получим ошибку:
{Справочник.НастройкиЗаполненияОбъектов1СДокументооборота.МодульОбъекта(33)}: Ошибка при вызове метода контекста (ПолучитьПрокси)
Прокси = ИнтеграцияС1СДокументооборотВызовСервера.ПолучитьПрокси();
по причине:
Попытка передачи мутабельного значения результата метода ПолучитьПрокси ().
(текст ошибки в каждом случае свой)
Сегодня я выношу на Вашу критику и обозрение один из вариантов решения этой проблемы, а именно преобразование в Массив(может передаваться) из структур и обратно в таблицу.
Функция "ПреобразоватьТаблицуЗначенийВМассив" выполняется на сервере перед передачей данных, а "ПреобразоватьМассивВТаблицуЗначений" уже на клиенте соответственно.
Код этих функций:
// Функция преобразует ТаблицуЗначений в Массив из структур.
//
Функция ПреобразоватьТаблицуЗначенийВМассив(тзДанные) Экспорт
мсДанные = Новый Массив;
// Запишем в массив
Для Каждого СтрокаТЗ Из тзДанные Цикл
стСтрокаТаблицы = Новый Структура;
Для Каждого ИмяКолонки Из тзДанные.Колонки Цикл
стСтрокаТаблицы.Вставить(ИмяКолонки.Имя, СтрокаТЗ[ИмяКолонки.Имя]);
КонецЦикла;
мсДанные.Добавить(стСтрокаТаблицы);
КонецЦикла;
Возврат мсДанные;
КонецФункции // ПреобразоватьТаблицуЗначенийВМассив()
// Функция преобразует Массив из структур в ТаблицуЗначений.
//
Функция ПреобразоватьМассивВТаблицуЗначений(мсДанные) Экспорт
тзДанные = Новый ТаблицаЗначений;
Для Каждого ЭлементМассива Из мсДанные Цикл
// Рисуем колонки для таблицы
Если тзДанные.Колонки.Количество() = 0 Тогда
Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
тзДанные.Колонки.Добавить(ЗначениеСтруктуры.Ключ);
КонецЦикла;
КонецЕсли;
// Добавляем данные в таблицу
НоваяСтрока = тзДанные.Добавить();
Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
НоваяСтрока[ЗначениеСтруктуры.Ключ] = ЗначениеСтруктуры.Значение;
КонецЦикла;
КонецЦикла;
Возврат тзДанные;
КонецФункции // ПреобразоватьМассивВТаблицуЗначений()