Загрузка из эксель, (Бухгалтерия 2.1.3.1, 8.3.13.1690)
1) читаю в массив ( Sheet.UsedRange.Value.Выгрузить() ) несколько файлов (на тесте 10 файлов, ~10 000 строк в каждом * 30 колонок).
2) прочитанные данные каждого файла добавляю в общий массив.
3) общий массив отправляю на сервер, там все разбираю - создаю/обновляю объекты.
Все выполняется не быстро (минуты), переписал через ДлительныеОперации.ВыполнитьВФоне, но запуск выполняется дольше чем серверные процедуры.
По итогу замера производительности, передача данных с клиента на сервер больше 50% времени (и это один комп, между разными или веб еще ж хуже будет...).
Вопрос, как правильно в таком случае поступить? Как быстрее всего будет передать данные на сервер, уже прочитанные, по каждому файлу отдельно или все сразу как у меня?
Рассмотрите вариант с передачей файлов на сервер и там уже выполняйте все операции.
Далее, если с загрузкой файлов не взлетит, советую читать и хранить данные структурированно, а не одним массивом текста. Создаете массив структур и построчно его заполняете. Потом этот массив передаете на сервер. За счет типизированности данных может уменьшится объем пересылаемых данных.
pablo @ Сегодня, 8:59
,
Изначально так и проектировал, отказался большей частью из-за рекомендаций переносить чтение на клиент.
1. Какую длину имеют строки в Вашем массиве?2. Число во внутреннем представлении занимает меньше байт, чем строка.
Кручусь вокруг "ВыполнитьВФоне" и никак не пойму как это сделать(
Сейчас примерно так:
&НаКлиенте
Процедура ЗагрузкаМассиваФайлов()
....
Для Каждого Файл Из МассивФайлов Цикл
МассивДанных.Добавить(ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Файл),УникальныйИдентификатор));
КонецЦикла;
ДлительнаяОперация = НачатьВыполнениеНаСервере(МассивДанных);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
...
КонецПроцедуры
&НаСервере
Функция НачатьВыполнениеНаСервере(МассивДанных)
Для Каждого Данные Из МассивДанных Цикл
МассивВФЗ.Добавить(ПолучитьИзВременногоХранилища(Данные.АдресДанных));
КонецЦикла;
ПараметрыПроцедуры = Новый Структура;
ПараметрыПроцедуры.Вставить("МассивВФЗ",МассивВФЗ);
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
Возврат ДлительныеОперации.ВыполнитьВФоне("Документы.МойДок.ПроцедураВФон",
ПараметрыПроцедуры, ПараметрыВыполнения);
КонецФункции
ПолучитьИзВременногоХранилища(<Адрес>)
Макс1С @ Сегодня, 14:57
,
Так тоже думал, но нет. Обратно можно и то только результат.
Разные сеансы.
"Примечание:
Временное хранилище, сформированное в одном сеансе, недоступно из другого сеанса.
Исключением является возможность передачи данных из фонового задания в сеанс, инициировавший фоновое задание, с помощью временного хранилища... "
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua