База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как передать ТаблицуЗначений на сервер в 1С? › Ответ в теме: Как передать ТаблицуЗначений на сервер в 1С?
Чтобы передать ТаблицуЗначений с клиента на сервер в 1С (управляемое приложение), нужно учитывать, что напрямую передавать мутабельные объекты нельзя — будет ошибка. Поэтому обычно делают так:
1. Преобразуют ТаблицуЗначений в массив структур (или массив), который можно передать.
2. На сервере из этого массива восстанавливают ТаблицуЗначений.
Пример кода:
На клиенте (или в общем модуле с директивой &НаКлиенте):
|
1 2 3 4 5 6 7 8 9 10 11 |
Функция ТаблицаЗначенийВМассив(Таблица) Массив = Новый Массив; Для Каждого Строка Из Таблица Цикл СтруктураСтроки = Новый Структура; Для Каждого Колонка Из Таблица.Колонки Цикл СтруктураСтроки.Вставить(Колонка.Имя, Строка[Колонка.Имя]); КонецЦикла; Массив.Добавить(СтруктураСтроки); КонецЦикла; Возврат Массив; КонецФункции |
Передача на сервер:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
&НаСервере Процедура ПолучитьДанные(МассивДанных) Таблица = Новый ТаблицаЗначений; Если МассивДанных.Количество() > 0 Тогда // Создаем колонки по ключам первой структуры Для Каждого Ключ Из МассивДанных[0].Ключи() Цикл Таблица.Колонки.Добавить(Ключ); КонецЦикла; // Заполняем строки Для Каждого СтруктураСтроки Из МассивДанных Цикл НоваяСтрока = Таблица.Добавить(); Для Каждого Ключ Из СтруктураСтроки.Ключи() Цикл НоваяСтрока[Ключ] = СтруктураСтроки[Ключ]; КонецЦикла; КонецЦикла; КонецЕсли; // Теперь Таблица содержит данные, можно работать дальше КонецПроцедуры |
Вызов с клиента:
|
1 2 |
МассивДляПередачи = ТаблицаЗначенийВМассив(МояТаблица); ПолучитьДанные(МассивДляПередачи); |
Если таблица большая, можно использовать сериализацию в XML через СериализаторXDTO, но для большинства задач достаточно преобразования в массив структур.
Рекомендую посмотреть подробный пример здесь:
https://infostart.ru/1c/articles/900985/
и
https://infostart.ru/1c/articles/240022/