Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 окт 2021, 05:24

Проблема с хранилищем значения

Автор Виктор1961, 04 сен 2016, 19:26

0 Пользователей и 1 гость просматривают эту тему.

Виктор1961

Почему хранилище значений возвращает в данном случае только фразу "ТаблицаЗначений"? как сделать, что оно вернуло результаты запроса, записанные в таблицу значений?
&НаКлиенте
Процедура Выгрузка(Команда)
ФайлТ = Новый ТекстовыйДокумент;
ФайлТ.УстановитьТекст(ЗапросСервер());
ФайлТ.Записать("C:\пример.txt", "windows-1251");

КонецПроцедуры

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

Oldman06

Потому что Вы возвращаете из серверного метода таблицу значений. А с сервера на клиент напрямую передать таблицу нельзя. Возвращайте в серверном методе ДанныеТЗ, а ПолучитьИзВременногоХранилища в клиенте.

Виктор1961

При такой реализации в файл также записывается только фраза "ТаблицаЗначений".

&НаКлиенте
...
ФайлТЗ.УстановитьТекст(ПолучитьИзВременногоХранилища(ЗапросНаСервере()));
...

&НаСервере
Функция ЗапросНаСервере ()
...
ДанныеТЗ = ПоместитьВоВременноеХранилище(ТЗ.Выгрузить());
Возврат ДанныеТЗ

Oldman06

Не могу сейчас проверить, но по-моему такое преобразование типов не сработает. Вы в функции ФайлТЗ.УстановитьТекст() фактически приводите тип ТаблицаЗначений к строке. Я сильно сомневаюсь, что в платформе заложена такая возможность.

ilyay

Таблица значений является двоичным объектом. Можно сохранить ее на клиенте несколькими способами:
- поместить ее на сервере во временное хранилище, и вызвав на клиенте ПолучитьФайл(),
- использовать метод ЗначВСтрокуВнутр()
- сериализовать в xml и вернуть на клиент текст xml
- поместить в табличный документ и сохранить табличный документ на клиенте в нужном формате

Если нужен человеко-читаемый вариант, тогда только последние два способа.
Добавлено: 05 сен 2016, 11:38


Цитата: Виктор1961 от 04 сен 2016, 19:26

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

Что такое ТЗ? Таблица значений или данные формы? Даже если это данные формы, не понятно, зачем данные туда-сюда гонять.

Достаточно так:
Возврат ПоместитьВоВременноеХранилище(Запрос.Выполнить().Выгрузить()) - будет адрес таблицы значений, которую сохраняем через ПолучитьФайл()
А если ТЗ - это данные формы, тогда они и так будут доступны на клиенте, не нужно их возвращать. И надо использовать метод ЗначениеВДанныеФормы()

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск