1C-Code → Как сделать → Как передать таблицу значений с сервера на клиент
Напрямую — никак: таблица значений между клиентом и сервером не передаётся. Передают либо через реквизит формы, либо через временное хранилище.
// способ 1: через реквизит формы (тип ТаблицаЗначений)
&НаСервере
Процедура ЗаполнитьНаСервере()
ТЗ = ПолучитьДанныеЗапросом(); // обычная таблица значений
ЗначениеВДанныеФормы(ТЗ, Товары); // Товары — реквизит формы
КонецПроцедуры
// обратно, на сервере:
ТЗ = ДанныеФормыВЗначение(Товары, Тип("ТаблицаЗначений"));
// способ 2: через временное хранилище
&НаСервере
Функция ПоложитьВХранилище()
Возврат ПоместитьВоВременноеХранилище(ТЗ, УникальныйИдентификатор);
КонецФункции
Между клиентом и сервером ходят только те значения, которые платформа умеет разложить в поток. Таблица значений в этот список не входит: попытка передать её параметром даст ошибку.
На форме она живёт как ДанныеФормыКоллекция. Отсюда и пара методов: ЗначениеВДанныеФормы кладёт таблицу в реквизит, ДанныеФормыВЗначение достаёт обратно — и оба работают только на сервере.
Например, в обработке или при обмене. Кладёте на сервере, получаете адрес, отдаёте адрес клиенту, а он передаёт его обратно, когда данные понадобятся снова.
Не тащите на клиент то, что ему не нужно показывать. Клиент — это экран; если данные нужны для расчёта, считайте на сервере и передавайте результат. Таблица на десять тысяч строк, переданная «на всякий случай», — это секунды ожидания у человека и память на сервере.
Задача на это. Прочитать приём и применить его — разные умения. В тренажёре есть задача «Форма: убрать лишние вызовы сервера»: собрать всё нужное за один поход на сервер вместо нескольких. Проверяется именно число вызовов, а не только результат. Решение проверяется скрытыми тестами, в том числе на краевых случаях, о которых в условии не сказано.