![]() |
|
1C подскажите идею, как разбить результат запроса или выгрузку | ☑ | ||
---|---|---|---|---|
0
ig0z
09.12.18
✎
20:47
|
Произвожу выгрузку из одной базы XML, а именно завис на регистрах
есть очень большими регистры на которых не хватает памяти, а построчно нет желания переносить десятки миллионы записей (по итогам и срезам) формирую выгрузку из запроса, удаляю и переименовываю столбец Регистратор (подменяю на корректировку), гружу в набор записей дальше гружу в XML только нужно как-то разбить на несколько запросов или саму выгрузку, но ничего в голову нелезет и найти не могу как разбить?? |
|||
1
ig0z
09.12.18
✎
20:52
|
// Ошибок это не до конца переделанный шаблон
Для Каждого РегСве Из Метаданные.РегистрыСведений Цикл НомерФайла = 0; НомерОбъекта = 0; СквознаяНумирация = 0; НовыйФайл = Истина; ДатаНачала = ТекущаяДата(); //НачатьТранзакцию(); Запрос = Новый Запрос; Если РегСве.ПериодичностьРегистраСведений = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический И РегСве.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрСведений."+РегСве.Имя+" КАК Р"; Иначе //ig0z - удалть коноку регистратор, и заменить на корректировку ЗапросРег = ""; ПериоРег = ""; Если РегСве.РежимЗаписи <> Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда ДокРег = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент(); ДокРег.Комментарий = "Перенос остатков: " + РегСве.Имя; ДокРег.Дата = ДатаСверткиИБ; Попытка ДокРег.Записать(РежимЗаписиДокумента.Запись); Исключение Сообщить(ДокРег.Комментарий + " ошибка: " + ОписаниеОшибки()); КонецПопытки; ЗапросРег = ", &РегистраторКор "; КонецЕсли; Если РегСве.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда ПериоРег = ".СрезПоследних(&Период, )"; Запрос.УстановитьПараметр("Период", ДатаСверткиИБ); КонецЕсли; Запрос.Текст = "ВЫБРАТЬ *"+ЗапросРег+" ИЗ РегистрСведений."+РегСве.Имя + ПериоРег + " КАК Р"; Запрос.УстановитьПараметр("РегистраторКор", ДокРег.Ссылка); КонецЕсли; Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда Продолжить; // справочник пустой нахрен всё КонецЕсли; Выгрузка = Результат.Выгрузить(); ОбщееКол = Выгрузка.Количество(); нзВыгрузка = ""; Выполнить("нзВыгрузка = РегистрыСведений."+РегСве.Имя+".СоздатьНаборЗаписей()"); //нзВ = РегистрыСведений.ТелефонныеНомера.СоздатьНаборЗаписей(); Если РегСве.РежимЗаписи <> Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда Выгрузка.Колонки.Удалить("Регистратор"); Выгрузка.Колонки.Найти("РегистраторКор").Имя = "Регистратор"; нзВыгрузка.Отбор.Регистратор.Установить(ДокРег.Ссылка); КонецЕсли; нзВыгрузка.Загрузить(Выгрузка); //СозданиеФайлаXML("Справочник", Спрравочник.Имя, НомерФайла, НомерОбъекта, НовыйФайл, Объ, ЗаписьXML); СозданиеФайлаXML("РегистрСведений", РегСве.Имя, 1, 1, Истина, нзВыгрузка, ЗаписьXML); Если РегСве.РежимЗаписи <> Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда СозданиеФайлаXML("РегистрСведений", РегСве.Имя, 1, 1, Ложь, ДокРег.Ссылка.ПолучитьОбъект(), ЗаписьXML); КонецЕсли; СостояниеДелПоВыгрузке(ОбщееКол, СквознаяНумирация, ДатаНачала); //начало да есть заебись, а завершение где ЗаписьXML.ЗаписатьКонецЭлемента(); //V8Exc:Data ЗаписьXML.ЗаписатьКонецЭлемента(); //V8Exc:_1CV8DtUD //ОтменитьТранзакцию(); КонецЦикла; |
|||
2
H A D G E H O G s
09.12.18
✎
20:59
|
Я бы поставил x64 и забыл бы о проблеме.
|
|||
3
ig0z
09.12.18
✎
21:00
|
(2) Что не знаю? это 64 ...
|
|||
4
H A D G E H O G s
09.12.18
✎
21:03
|
(3) Я вам не верю. Единственный вариант, когда может не хватить памяти - если вы будете закрывать xml в строку. Пишите xml сразу в файл, потом правьте заголовок в akelpad. Как я понимаю, эта выгрузка - разовая акция.
|
|||
5
ig0z
09.12.18
✎
21:27
|
(4) Действительно 86x, но нет админских прав поменять
сделал срез по каждому измерению, и за каким среднее удовлетворительное значение строк по этому отбору и выгружаю // как-то так //начало да есть заебись, а завершение где Если НомерОбъекта > ОграничениеНаКоличествоОбъектовВXML Тогда ЗаписьXML.ЗаписатьКонецЭлемента(); //V8Exc:Data ЗаписьXML.ЗаписатьКонецЭлемента(); //V8Exc:_1CV8DtUD КонецЕсли; Если НомерОбъекта > ОграничениеНаКоличествоОбъектовВXML ИЛИ НовыйФайл Тогда НовыйФайл = Ложь; НомерФайла = НомерФайла + 1; НомерОбъекта = 0; ЗаписьXML = Новый ЗаписьXML; ИмяФайла = СтрЗаменить(ПолеИмениФайла, ".xml", ТипТаб + "_" + ИмяТаблицы + "_" + НомерФайла + ".xml"); ЗаписьXML.ОткрытьФайл(ИмяФайла, "UTF-8"); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписьXML.ЗаписатьНачалоЭлемента("_1CV8DtUD", "http://www.1c.ru/V8/1CV8DtUD/"); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("V8Exch", "http://www.1c.ru/V8/1CV8DtUD/"); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/data"); ЗаписьXML.ЗаписатьНачалоЭлемента("V8Exch:Data"); КонецЕсли; Попытка //Если ТипТаб = "Справочник" Тогда // ЗаписатьXML(ЗаписьXML, Объект); //ИначеЕсли ТипТаб = "РегистрСведений" Тогда ЗаписатьXML(ЗаписьXML, Объект); //КонецЕсли; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |