1С 8.3 Передача Таблицы Значений с сервера на клиент
Данные > Примеры кода 1С > 1С 8.3 Таблица значений
Перейти в раздел примеры кода 1С 8.3:
Пример 1. Передать ТЗ на клиент с сервера (через процедуру ОбщегоНазначения) в 1С 8.3:
Процедура ПередатьТаблицуЗначенийНаКлиент(Элемент) Экспорт
ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаЗначений);
КонецПроцедуры
ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаЗначений);
Пример 2. Передать ТЗ на клиент с сервера (через Временное хранилище) в 1С 8.3:
Процедура ПередатьТаблицуЗначенийНаКлиент(ТаблицаЗначений) Экспорт
АдресХранилищаСТЗ = ПоместитьВоВременноеХранилище(ТаблицаЗначений,ЭтаФорма.УникальныйИдентификатор);
ПереносТЗ = ПолучитьИзВременногоХранилища(АдресХранилищаСТЗ);
КонецПроцедуры
АдресХранилищаСТЗ = ПоместитьВоВременноеХранилище(ТаблицаЗначений,ЭтаФорма.УникальныйИдентификатор);
ПереносТЗ = ПолучитьИзВременногоХранилища(АдресХранилищаСТЗ);
КонецПроцедуры
Пример 3. Передать ТЗ на клиент с сервера (через ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр) в 1С 8.3:
&НаКлиенте
Процедура ПолучитьТаблицуНаСервере(Команда)
ТЗ_Стр = ПолучитьТЗНаСервере(); // Получаем данные на сервере
ТаблицаЗначений = ЗначениеИзСтрокиВнутр(ТЗ_Стр);
КонецПроцедуры
&НаСервере
Функция ПолучитьТЗНаСервере(ТЗ)
Процедура ПолучитьТаблицуНаСервере(Команда)
ТЗ_Стр = ПолучитьТЗНаСервере(); // Получаем данные на сервере
ТаблицаЗначений = ЗначениеИзСтрокиВнутр(ТЗ_Стр);
КонецПроцедуры
&НаСервере
Функция ПолучитьТЗНаСервере(ТЗ)
Возврат ЗначениеВСтрокуВнутр(ТЗ);
КонецФункции
КонецФункции
Пример 4. Передать ТЗ на клиент с сервера (через реквизит формы в 1С 8.3:
&НаСервере
Функция ПередатьТаблицуЗначенийНаКлиент(ОбъектСсылка, ИмяТабличнойЧасти)
ОбъектЗначение = ОбъектСсылка.ПолучитьОбъект();
ОбъектТЧ = ОбъектЗначение[ИмяТабличнойЧасти].Выгрузить();
МассивРеквизитов = Новый Массив;
МассивСтарыхРеквизитов = Новый Массив;
МассивКолонок = Новый Массив;
ИдКоллекции="РеквизитФормыТЗ"; // Реквизит формы с типом Табл.Значений
ТаблицаФормы=РеквизитФормыВЗначение(ИдКоллекции);
Для Каждого Колонка Из ТаблицаФормы.Колонки Цикл
МассивСтарыхРеквизитов.Добавить(ИдКоллекции+"."+Колонка.Имя);
КонецЦикла;
Для Каждого Колонка Из ОбъектТЧ.Колонки Цикл
МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя,Колонка.ТипЗначения,ИдКоллекции));
МассивКолонок.Добавить(Колонка.Имя);
КонецЦикла;
// Добвляем новые и удаляем старые колонки
ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов,МассивСтарыхРеквизитов);
// Помещаем значение в реквизит формы
ЗначениеВРеквизитФормы(ОбъектТЧ,ИдКоллекции);
Возврат МассивКолонок;
КонецФункции
Функция ПередатьТаблицуЗначенийНаКлиент(ОбъектСсылка, ИмяТабличнойЧасти)
ОбъектЗначение = ОбъектСсылка.ПолучитьОбъект();
ОбъектТЧ = ОбъектЗначение[ИмяТабличнойЧасти].Выгрузить();
МассивРеквизитов = Новый Массив;
МассивСтарыхРеквизитов = Новый Массив;
МассивКолонок = Новый Массив;
ИдКоллекции="РеквизитФормыТЗ"; // Реквизит формы с типом Табл.Значений
ТаблицаФормы=РеквизитФормыВЗначение(ИдКоллекции);
Для Каждого Колонка Из ТаблицаФормы.Колонки Цикл
МассивСтарыхРеквизитов.Добавить(ИдКоллекции+"."+Колонка.Имя);
КонецЦикла;
Для Каждого Колонка Из ОбъектТЧ.Колонки Цикл
МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя,Колонка.ТипЗначения,ИдКоллекции));
МассивКолонок.Добавить(Колонка.Имя);
КонецЦикла;
// Добвляем новые и удаляем старые колонки
ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов,МассивСтарыхРеквизитов);
// Помещаем значение в реквизит формы
ЗначениеВРеквизитФормы(ОбъектТЧ,ИдКоллекции);
Возврат МассивКолонок;
КонецФункции
Пример 5. Передать ТЗ на клиент с сервера (через Массив из структур) в 1С 8.3:
// Преобразуем ТаблицуЗначений в Массив из структур.
Функция ПреобразоватьТЗвМассив(ТЗ) Экспорт
МассивТЗ = Новый Массив;
Для Каждого СтрокаТЗ Из ТЗ Цикл
СтруктураТЗ = Новый Структура;
Для Каждого ИмяКолонки Из ТЗ.Колонки Цикл
СтруктураТЗ.Вставить(ИмяКолонки.Имя, СтрокаТЗ[ИмяКолонки.Имя]);
КонецЦикла;
МассивТЗ.Добавить(СтруктураТЗ);
КонецЦикла;
Возврат МассивТЗ;
КонецФункции
// Преобразуем Массив из структур в ТаблицуЗначений
Функция ПреобразоватьМассивВТЗ(МассивТЗ) Экспорт
ТЗ = Новый ТаблицаЗначений;
Для Каждого ЭлементМассива Из МассивТЗ Цикл
// Колонки для таблицы значений
Если ТЗ.Колонки.Количество() = 0 Тогда
Для Каждого ЗнМассив Из ЭлементМассива Цикл
ТЗ.Колонки.Добавить(ЗнМассив.Ключ);
КонецЦикла;
КонецЕсли;
// Заполняем таблицу значений данными
НоваяСтрока = ТЗ.Добавить();
Для Каждого ЗнМассив Из ЭлементМассива Цикл
НоваяСтрока[ЗнМассив.Ключ] = ЗнМассив.Значение;
КонецЦикла;
КонецЦикла;
Возврат ТЗ;
КонецФункции
Функция ПреобразоватьТЗвМассив(ТЗ) Экспорт
МассивТЗ = Новый Массив;
Для Каждого СтрокаТЗ Из ТЗ Цикл
СтруктураТЗ = Новый Структура;
Для Каждого ИмяКолонки Из ТЗ.Колонки Цикл
СтруктураТЗ.Вставить(ИмяКолонки.Имя, СтрокаТЗ[ИмяКолонки.Имя]);
КонецЦикла;
МассивТЗ.Добавить(СтруктураТЗ);
КонецЦикла;
Возврат МассивТЗ;
КонецФункции
// Преобразуем Массив из структур в ТаблицуЗначений
Функция ПреобразоватьМассивВТЗ(МассивТЗ) Экспорт
ТЗ = Новый ТаблицаЗначений;
Для Каждого ЭлементМассива Из МассивТЗ Цикл
// Колонки для таблицы значений
Если ТЗ.Колонки.Количество() = 0 Тогда
Для Каждого ЗнМассив Из ЭлементМассива Цикл
ТЗ.Колонки.Добавить(ЗнМассив.Ключ);
КонецЦикла;
КонецЕсли;
// Заполняем таблицу значений данными
НоваяСтрока = ТЗ.Добавить();
Для Каждого ЗнМассив Из ЭлементМассива Цикл
НоваяСтрока[ЗнМассив.Ключ] = ЗнМассив.Значение;
КонецЦикла;
КонецЦикла;
Возврат ТЗ;
КонецФункции
4
комментарии
Den
04 июн 2024
Всё примеры не рабочие. Нахера так было ограничивать.... В который раз убеждаюсь в тупости 1с.
Nonap
15 ноя 2023
ЗначениеИзСтрокиВнутр() доступен только на сервере, толстом клиенте и внешнем соединении, так что пример 3 не рабочий.
Александр
10 авг 2023
По 5-му примеру неплохо было бы пояснить, где какая функция выполняется - на Сервере или Клиенте.
Новую таблицу значений на клиенте создать нельзя. И с сервера на клиент ее нельзя передать.
Новую таблицу значений на клиенте создать нельзя. И с сервера на клиент ее нельзя передать.
Алексей
28 фев 2023
ПереносТЗ = ПолучитьИзВременногоХранилища(АдресХранилищаСТЗ);
Это НЕ работает для ТЗ
Это НЕ работает для ТЗ
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник