Создание csv файла 2млн строк

1. marshalbratsk 24.07.22 00:12 Сейчас в теме
Нужно сделать выгрузку в csv файл данных на 2 млн строк. Построчно выгружать нереально долго, за несколько часов около 250 тысяч строк выгрузилось. Есть какие-нибудь варианты как это можно быстрее сделать?

Пробовал самым простым способом, не подходит
	Текст="";
	Инд = 0;
	Пока ВыборкаРезультат.Следующий() Цикл
		если Текст="" тогда
			Текст="SL code|SKU code|Quantity|Year|Month|Day" + Символы.ПС;   	
		КонецЕсли;  
		Текст = Текст + ВыборкаРезультат.СкладID + "|" + ВыборкаРезультат.НоменклатураID + "|" + Формат(ВыборкаРезультат.Остаток, "ЧГ=0") + 
		"|" + Формат(ВыборкаРезультат.ГОД, "ЧГ=0") + "|" + ВыборкаРезультат.МЕСЯЦ + "|" + ВыборкаРезультат.ДЕНЬ + Символы.ПС;         	
		Инд = Инд + 1;	
	КонецЦикла;
Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. marshalbratsk 24.07.22 00:23 Сейчас в теме
мб проблема в том что пытаюсь писать это в один реквизит, а лучше пачками по паре десятков тысяч строк в файл записывать?
3. SlavaKron 24.07.22 00:42 Сейчас в теме
Записывайте сразу в файл через объект ЗаписьТекста. Вместо Формат используйте XMLСтрока:
РезультатЗапроса = Запрос.Выполнить();

ИменаПолей = Новый Массив;

Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл
	ИменаПолей.Добавить(Колонка.Имя);
КонецЦикла;

ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла);
ЗаписьТекста.ЗаписатьСтроку("SL code|SKU code|Quantity|Year|Month|Day");

ВыборкаРезультат = РезультатЗапроса.Выбрать();

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

ЗаписьТекста.Закрыть();
Показать
Garikomus; independ; Sashares; +3 Ответить
6. gybson 24.07.22 12:28 Сейчас в теме
(3) Я вот так предложу
ЗаписьТекста.ЗаписатьСтроку(СтрШаблон("%1;%2;%3;%4,%5", ВыборкаРезультат.Поле1, ВыборкаРезультат.Поле2, ВыборкаРезультат.Поле3, ВыборкаРезультат.Поле4, ВыборкаРезультат.Поле5));
Vitaly1C8; +1 Ответить
4. laperuz 46 24.07.22 09:27 Сейчас в теме
На длинных строках конкатенация через + работает медленно. Используйте СтрСоединить()
Т.е. части строк кладите в массив, и потом их через СтрСоединить объединяйте в одну строку, ее уже в файл.
7. gybson 24.07.22 12:29 Сейчас в теме
(4)Так-то можно сразу из запроса строку с разделителями получить.
5. soft_wind 24.07.22 09:41 Сейчас в теме
попробуйте использовать потоковый вывод в файл


еще как вариант,если база на СКЛе, если разберетесь с внутренней структурой таблиц 1С, то средствами самой базы СКЛ
выгрузка за секунды происходит
8. МихаилМ 24.07.22 14:39 Сейчас в теме
я бы начал odbc. потом xslt. потом форматированный документ
9. user-z99999 68 24.07.22 14:47 Сейчас в теме
Может написать запрос и выгрузку в csv на чистом ms sql? + 1c и adodb
Можно план запроса ещё посмотреть, если теряется время на нём.
11. Vitaly1C8 24.07.22 17:07 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот