helpf.pro
Регистрация
 +3 
Распечатать

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

Многие спрашиваю, как передать тз с сервера на клиент - ниже несколько вариантов как это можно реализовать:

Через ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр

Код 1C v 8.3
 &НаКлиенте
Процедура ПолучитьТаблицу НаСервер(Команд а)

ТЗВСтроке = ПолучитьТЗНаСер вере();
ТЗ = ЗначениеИзСтрокиВнутр(ТЗВСтрок е);
КонецПроцедуры

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

Через реквизит Формы

Код 1C v 8.3
 // Создаем реквизит формы "ВремТабЗнач" с типом данных: Таблица значений
// Ревкизит будет использоваться для передачи данных с сервера на клиент.
&НаСервере
Функция ПолучитьТЧ(ОбъектСсылка,ИмяТЧ)
ЗначениеОбъекта = ОбъектСсылка.ПолучитьОбъект();

ТабРез = ЗначениеОбъекта[ИмяТЧ].выгрузить();

МассивДобавляемыхРеквизитов = Новый Массив;
МассивУдаляемыхРеквизитов = Новый Массив;
МассивКолонок = Новый Массив;
ИдКоллекции="ВремТабЗнач";

КоллФормы=РеквизитФормыВЗначение(ИдКоллекции);

Для каждого ТекКол из КоллФормы.Колонки Цикл
МассивУдаляемыхРеквизитов.Добавить(ИдКоллекции+"."+ТекКол.Имя);
КонецЦикла;

Для каждого ТекКол из ТабРез.Колонки Цикл
МассивДобавляемыхРеквизитов.Добавить(
Новый РеквизитФормы(ТекКол.Имя,ТекКол.ТипЗначения,ИдКоллекции));
МассивКолонок.Добавить(ТекКол.Имя);
КонецЦикла;

// Добавим новые, удалим старые колонки
ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов,МассивУдаляемыхРеквизитов);
// Поместим значение в реквизит формы
ЗначениеВРеквизитФормы(ТабРез,ИдКоллекции);

// вернем массив колонок в обрабатываемой ТЗ, например для более простого перебора
Возврат МассивКолонок;
КонецФункции

Через Временное хранилище

Код 1C v 8.3
 
АдресХранилища = ПоместитьВоВременноеХранилище(МассивДанных,ЭтаФорма.УникальныйИдентификатор);

ПротоколПереноса = ПолучитьИзВременногоХранилища(АдресХранилища);

Через обычный возврат

Код 1C v 8.2 УП
 &НаКлиенте
Процедура ПолучитьТаблицуНаСервер(Команда)
 
  ТЗ = ЗаполнитьТЗДанными();
 
КонецПроцедуры

//Функция заполняет ТЗ
&НаСервере
Функция ЗаполнитьТЗДанными()
 
  ТЗ = Новый ТаблицаЗначений;
  ТЗ.Колонки.Добавить("Поле1");
  ТЗ.Колонки.Добавить("Поле2");
  ТЗ.Колонки.Добавить("Поле3");
  ТЗ.Колонки.Добавить("Поле4");
  ТЗ.Колонки.Добавить("Поле5");
 
  Для i = 1 По 3 Цикл 
 
    НоваяСтр = ТЗ.Добавить();
    НоваяСтр.Поле1 = i;
    НоваяСтр.Поле2 = 2*i;
    НоваяСтр.Поле3 = 3*i;
    НоваяСтр.Поле4 = 4*i;
    НоваяСтр.Поле5 = 5*i;
 
  КонецЦикла;   
 
  Возврат ТЗ;
 
КонецФункции 

Пробуйте и пишите в комментариях как делаете это Вы

Разместил:   Версии: | 8.2 УП | 8.3 |  Дата:   Прочитано: 171079
 +3 
Распечатать
Возможно, вас также заинтересует
10060 (0x0000274C): Попытка установить соединение была безуспешной 24
Установили новый терминальный сервер, на нем подняли 1С, терминальные пользователе неописуемо довольны, все просто летает :) И вот же надо было такому случиться, главному бухгалтеру не понравилось работать через терминал, а еще у нее свой ноутбук и
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 52
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
Cодержимое указанного ниже веб-сайта в этом приложении блокируется... Aboutsecurity_1cv8c.exe 1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э
Google maps : вывод точек на карту и режим панорамы 9
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора
PostgreSQL: установка, настройка, обслуживание 11
PostgreSQL напрямую "из коробки" применяться для использования с 1С Предприятем не может. Необходима именно адаптированная версия от 1С, превращающая PostgreSQL в блокировочник, причем нужно понимать, что блокировки будут накладываться на всю таблиц
Посмотреть все результаты поиска похожих
Комментарии
Anthon
09.01.2023 09:12Комментарий: 5
Anthon
Код 1C v 8.3
 	ТЗ = РезультатЗапроса.Выгрузить();

МассивДобавляемыхРеквизитов = Новый Массив;
МассивУдаляемыхРеквизитов = Новый Массив;
МассивКолонок = Новый Массив;
ИдКоллекции = "Таблица";
КоллекцияФормы = РеквизитФормыВЗначение(ИдКоллекции);

Для Каждого Колонка из КоллекцияФормы.Колонки Цикл
МассивУдаляемыхРеквизитов.Добавить(ИдКоллекции + "." + Колонка.Имя);
КонецЦикла;

Для Каждого Колонка из ТЗ.Колонки Цикл
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, ИдКоллекции));
МассивКолонок.Добавить(Колонка.Имя);
КонецЦикла;
ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов, МассивУдаляемыхРеквизитов);
ЗначениеВРеквизитФормы(ТЗ, ИдКоллекции);

МассивУдаляемыхРеквизитов = Новый Массив;
Для Каждого Элемент из Элементы Цикл
Если Лев(Элемент.Имя, 8) = ИдКоллекции + "_" И ТипЗнч(Элемент) = Тип("ПолеФормы") Тогда
МассивУдаляемыхРеквизитов.Добавить(Элемент);
КонецЕсли;
КонецЦикла;
Для Каждого Элемент Из МассивУдаляемыхРеквизитов Цикл
Элементы.Удалить(Элемент);
КонецЦикла;
Для Каждого Колонка из ТЗ.Колонки Цикл
НовыйЭлемент = Элементы.Добавить(ИдКоллекции + "_" + Колонка.Имя, Тип("ПолеФормы"), Элементы.Таблица);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.ПутьКДанным = ИдКоллекции + "." + Колонка.Имя;
КонецЦикла;


Anthon
09.01.2023 09:02Комментарий: 4
Anthon

добейте кодик в через реквизит формы

МассивДобавляемыхРеквизитов = Новый Массив;

МассивУдаляемыхРеквизитов = Новый Массив;

МассивКолонок = Новый Массив;

ИдКоллекции = "Таблица";

КоллекцияФормы = РеквизитФормыВЗначение(ИдКоллекции);

Для Каждого Колонка из КоллекцияФормы.Колонки Цикл

МассивУдаляемыхРеквизитов.Добавить(ИдКоллекции + "." + Колонка.Имя);

КонецЦикла;

Для Каждого Колонка из ТЗ.Колонки Цикл

МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, ИдКоллекции));

МассивКолонок.Добавить(Колонка.Имя);

КонецЦикла;

ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов, МассивУдаляемыхРеквизитов);

ЗначениеВРеквизитФормы(ТЗ, ИдКоллекции);

МассивУдаляемыхРеквизитов = Новый Массив;

Для Каждого Элемент из Элементы Цикл

Если Лев(Элемент.Имя, 8) = ИдКоллекции + "_" Тогда

МассивУдаляемыхРеквизитов.Добавить(Элемент);

КонецЕсли;

КонецЦикла;

Для Каждого Элемент Из МассивУдаляемыхРеквизитов Цикл

Элементы.Удалить(Элемент);

КонецЦикла;

Для Каждого Колонка из ТЗ.Колонки Цикл

НовыйЭлемент = Элементы.Добавить(ИдКоллекции + "_" + Колонка.Имя, Тип("ПолеФормы"), Элементы.Таблица);

НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;

НовыйЭлемент.ПутьКДанным = ИдКоллекции + "." + Колонка.Имя;

КонецЦикла;

Возврат МассивКолонок;

krikmarin
05.08.2022 11:42Комментарий: 3
krikmarin

Единственный способ передать таблицу значений с сервера на клиент - это преобразовать её в массив. При попытках использовать тип значений переменных ТаблицаЗначений на клиенте 1С выдавало ошибку, то есть третий вариант через временное хранилище тоже не будет работать. На просторах infostart.ru нашел функции преобразования ТЗ в Массив и обратно.

// Функция преобразует ТаблицуЗначений в Массив из структур.

//

Функция ПреобразоватьТаблицуЗначенийВМассив(тзДанные) Экспорт

мсДанные = Новый Массив;

// Запишем в массив

Для Каждого СтрокаТЗ Из тзДанные Цикл

стСтрокаТаблицы = Новый Структура;

Для Каждого ИмяКолонки Из тзДанные.Колонки Цикл

стСтрокаТаблицы.Вставить(ИмяКолонки.Имя, СтрокаТЗ[ИмяКолонки.Имя]);

КонецЦикла;

мсДанные.Добавить(стСтрокаТаблицы);

КонецЦикла;

Возврат мсДанные;

КонецФункции // ПреобразоватьТаблицуЗначенийВМассив()

// Функция преобразует Массив из структур в ТаблицуЗначений.

//

Функция ПреобразоватьМассивВТаблицуЗначений(мсДанные) Экспорт

тзДанные = Новый ТаблицаЗначений;

Для Каждого ЭлементМассива Из мсДанные Цикл

// Рисуем колонки для таблицы

Если тзДанные.Колонки.Количество() = 0 Тогда

Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл

тзДанные.Колонки.Добавить(ЗначениеСтруктуры.Ключ);

КонецЦикла;

КонецЕсли;

// Добавляем данные в таблицу

НоваяСтрока = тзДанные.Добавить();

Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл

НоваяСтрока[ЗначениеСтруктуры.Ключ] = ЗначениеСтруктуры.Значение;

КонецЦикла;

КонецЦикла;

Возврат тзДанные;

КонецФункции // ПреобразоватьМассивВТаблицуЗначений()

enginf
20.10.2021 08:13Комментарий: 2
enginf

Второй способ. На тонком клиенте.Вот передали мы ТЗ в реквизит на форме.А как теперь эту ТЗ из этого реквизита достать?

miXna5
23.05.2015 21:31Комментарий: 1
miXna5

Первый способ не заработал: ЗначениеИзСтрокиВнутр() доступен только на сервере, толстом клиенте и внешнем соединении. 

Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.