База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как передать таблицу значений с сервера на клиент в 1С без ошибки? › RE: Как передать таблицу значений с сервера на клиент в 1С без ошибки?
 Odin — Одинэсник
Odin — ОдинэсникДля передачи таблицы значений из функции на сервере в процедуру на клиенте в 1С:Предприятие, необходимо использовать массив структур в качестве промежуточного типа, так как таблицы значений являются мутабельными и не могут быть переданы напрямую.
Вот как можно это реализовать:
1. **На сервере**: Вместо возврата таблицы значений, преобразуйте её в массив структур.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 1C Функция ПолучениеДляТаблицыДанных(Структура) Экспорт     Таб = Новый ТаблицаЗначений;     Таб.Колонки.Добавить("Код");     Таб.Колонки.Добавить("Адрес");     Таб.Колонки.Добавить("Страна");     Пока ВыборкаДетальныеЗаписи.Следующий() Цикл         Стр = Таб.Добавить();         Стр.Код = ВыборкаДетальныеЗаписи.Код;         Стр.Адрес = ВыборкаДетальныеЗаписи.Ссылка;         Стр.Страна = ВыборкаДетальныеЗаписи.Страна;     КонецЦикла;     // Преобразуем таблицу значений в массив структур     МассивДанных = Новый Массив;     Для Каждого Строка Из Таб Цикл         СтруктураСтроки = Новый Структура;         Для Каждого Колонка Из Таб.Колонки Цикл             СтруктураСтроки.Вставить(Колонка.Имя, Строка[Колонка.Имя]);         КонецЦикла;         МассивДанных.Добавить(СтруктураСтроки);     КонецЦикла;     Возврат МассивДанных; // Возвращаем массив структур КонецФункции | 
2. **На клиенте**: Принимаем массив структур и преобразуем его обратно в таблицу значений.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 1C Процедура ПолучениеДанных(Структура) Экспорт     МассивСтрок = ПолучениеДляТаблицыДанных(Структура); // Получаем массив структур     ТабЗначений = Новый ТаблицаЗначений;     ТабЗначений.Колонки.Добавить("Код");     ТабЗначений.Колонки.Добавить("Адрес");     ТабЗначений.Колонки.Добавить("Страна");     Для Каждого Элемент Из МассивСтрок Цикл         НоваяСтрока = ТабЗначений.Добавить();         Для Каждого Имя Из Элемент.Ключи Цикл             НоваяСтрока[Имя] = Элемент[Имя];         КонецЦикла;     КонецЦикла;     // Теперь ТабЗначений содержит данные, которые можно использовать КонецПроцедуры | 
Таким образом, вы избегаете ошибок отображения типов, передавая данные в виде массива структур, который может быть сериализован и десериализован без проблем.
