Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 10:09

Как передать результат выполнения запрос с сервера на клиент

Автор Lun, 25 авг 2019, 14:29

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

Lun

Добрый день!
УФ. На сервере формируется запрос, результат которого необходимо передать на клиента, чтобы тот сохранил его в виде файла.
Запрос создает таблицу таких объемов: колонки = 80, строки = до 10 тыс. строк (строки зависят от параметров).
Каким образом, оптимальнее передать данные такого объема ?
Думаю, что простейшие способы вряд ли подойдут (массив структур, массив массивов, передача через реквизиты упр. формы).
PS: читал про временное хранилище, но если помещать в него ТЗ на сервере, то, честно говоря, не понял, как разобрать результат на стороне клиента.

LexaK

ЦитироватьУФ. На сервере формируется запрос, результат которого необходимо передать на клиента, чтобы тот сохранил его в виде файла.
в вашем случае не надо результат запроса передавать на клиента
прямо на сервере из результата сформируйте ТабличныйДокумент, вот его и верните,
а уже на клиенте Табличный документ легко сможете сохранить в файл, любого формата, смотрите СП.
если помогло нажмите: Спасибо!

Lun

Спасибо, попробую.
Цитата: LexaK от 26 авг 2019, 09:29
ЦитироватьУФ. На сервере формируется запрос, результат которого необходимо передать на клиента, чтобы тот сохранил его в виде файла.
в вашем случае не надо результат запроса передавать на клиента
прямо на сервере из результата сформируйте ТабличныйДокумент, вот его и верните,
а уже на клиенте Табличный документ легко сможете сохранить в файл, любого формата, смотрите СП.

antoneus


Lun

В конечном счете мне надо сформировать выгруженные данные в DBF, т.е. я собирался использовать объект XBASE.
Если я буду создавать его в процедуре &НаСервере, то как я смогу понять, где он находится физически и буду ли иметь к нему доступ чтобы, например, если процедура вылетит по ошибке, то удалить его или скачать его вручную.
Если он создавался бы на клиенте, то находился бы под моим полным контролем...

Цитата: antoneus от 28 авг 2019, 12:51
А почему нельзя сформировать файл на сервере?

LexaK

в общем 2 варианта
1. как и писали выше, создаете файлы ДБФ на севере во временном каталоге и передаете их с сервера на клиент
(при создании на сервере, работает Сообщить() или можно писать в лог файл, если ждете каких-то ошибок)
2. получить результат запроса на клиент и в нем сформировать файлы ДБФ
вот так можно получить данные результат запроса массив структур, обойти его можно так-же как и ТЗ в цикле Для каждого ... Из ...

...
//Результат запроса - шаблон
лкРезультат = лкЗапрос.Выполнить();
Если лкРезультат.Пустой() Тогда
   //нет данных
   лкДанные = Неопределено;
Иначе   
   //формируем массив сруктур с данными построчно, аналог ТЗ
   лкВыборка = лкРезультат.Выбрать();
   лкДанные  = Новый Массив;
   Пока лкВыборка.Следующий() Цикл
      лкСтрока = Новый Структура;
      Для каждого лкКол Из лкРезультат.Колонки Цикл
         лкСтрока.Вставить(лкКол.Имя,лкВыборка[лкКол.Имя]);
      КонецЦикла;
      лкДанные.Добавить(лкСтрока);
   КонецЦикла;
КонецЕсли;

Возврат лкДанные;
если помогло нажмите: Спасибо!

Lun

Спасибо!
Цитата: LexaK от 02 сен 2019, 09:09
в общем 2 варианта
1. как и писали выше, создаете файлы ДБФ на севере во временном каталоге и передаете их с сервера на клиент
(при создании на сервере, работает Сообщить() или можно писать в лог файл, если ждете каких-то ошибок)
2. получить результат запроса на клиент и в нем сформировать файлы ДБФ
вот так можно получить данные результат запроса массив структур, обойти его можно так-же как и ТЗ в цикле Для каждого ... Из ...

...
//Результат запроса - шаблон
лкРезультат = лкЗапрос.Выполнить();
Если лкРезультат.Пустой() Тогда
   //нет данных
   лкДанные = Неопределено;
Иначе   
   //формируем массив сруктур с данными построчно, аналог ТЗ
   лкВыборка = лкРезультат.Выбрать();
   лкДанные  = Новый Массив;
   Пока лкВыборка.Следующий() Цикл
      лкСтрока = Новый Структура;
      Для каждого лкКол Из лкРезультат.Колонки Цикл
         лкСтрока.Вставить(лкКол.Имя,лкВыборка[лкКол.Имя]);
      КонецЦикла;
      лкДанные.Добавить(лкСтрока);
   КонецЦикла;
КонецЕсли;

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

Теги:

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

Рейтинг@Mail.ru

Поиск