1C-CodeКак сделать → Как передать таблицу значений с сервера на клиент

Как передать таблицу значений с сервера на клиент в 1С

Напрямую — никак: таблица значений между клиентом и сервером не передаётся. Передают либо через реквизит формы, либо через временное хранилище.

Код

// способ 1: через реквизит формы (тип ТаблицаЗначений)
&НаСервере
Процедура ЗаполнитьНаСервере()
	ТЗ = ПолучитьДанныеЗапросом();          // обычная таблица значений
	ЗначениеВДанныеФормы(ТЗ, Товары);       // Товары — реквизит формы
КонецПроцедуры

// обратно, на сервере:
ТЗ = ДанныеФормыВЗначение(Товары, Тип("ТаблицаЗначений"));

// способ 2: через временное хранилище
&НаСервере
Функция ПоложитьВХранилище()
	Возврат ПоместитьВоВременноеХранилище(ТЗ, УникальныйИдентификатор);
КонецФункции

Что здесь важно

1. Причина запрета — сериализация

Между клиентом и сервером ходят только те значения, которые платформа умеет разложить в поток. Таблица значений в этот список не входит: попытка передать её параметром даст ошибку.

2. Реквизит формы — не та же таблица

На форме она живёт как ДанныеФормыКоллекция. Отсюда и пара методов: ЗначениеВДанныеФормы кладёт таблицу в реквизит, ДанныеФормыВЗначение достаёт обратно — и оба работают только на сервере.

3. Временное хранилище — когда формы нет

Например, в обработке или при обмене. Кладёте на сервере, получаете адрес, отдаёте адрес клиенту, а он передаёт его обратно, когда данные понадобятся снова.

Где обычно спотыкаются

Не тащите на клиент то, что ему не нужно показывать. Клиент — это экран; если данные нужны для расчёта, считайте на сервере и передавайте результат. Таблица на десять тысяч строк, переданная «на всякий случай», — это секунды ожидания у человека и память на сервере.

Задача на это. Прочитать приём и применить его — разные умения. В тренажёре есть задача «Форма: убрать лишние вызовы сервера»: собрать всё нужное за один поход на сервер вместо нескольких. Проверяется именно число вызовов, а не только результат. Решение проверяется скрытыми тестами, в том числе на краевых случаях, о которых в условии не сказано.

Решить задачу

Разобраться глубже

Другие вопросы

Как получить остатки на дату запросом в 1С Как программно провести документ в 1С Как избавиться от запроса в цикле в 1С Как добавить колонку в таблицу значений программно Как свернуть таблицу значений Как найти строку в таблице значений Как выгрузить колонку таблицы значений в массив Как превратить массив в таблицу значений Как отобрать строки в таблице значений Как отсортировать таблицу значений Как записать движения регистра накопления программно Чем регистр остатков отличается от регистра оборотов Как контролировать остатки при проведении документа Как добавить реквизит расширением конфигурации Как сравнить две таблицы значений Какие бывают соединения в запросе 1С и чем отличаются Как выгрузить таблицу значений в Excel Чем дерево значений отличается от таблицы значений Как задать условное оформление таблицы на форме