Выгрузка БОЛЬШИХ объемов из 7.7 конвертацией данных

Опубликовал Веселов Александр (aves) в раздел Обмен - Перенос данных из 1С7.7 в 1C7.7

Стандартная выгрузка из 7.7 V77Exp не умеет выгружать файлы более 2 Гб. У меня со скрипом 1.5 еле получалось. Данная доработка без проблем формирует файлы по 3Гб и более. Теперь и для ЗиК!

При внедрении систем на 8 довольно часто ставится задача по переносу данных из 7.7. Иногда этих данных бывает сильно много.

Стандартная систуация - написали правила, выгрузить не можем - падает. Нехватка памяти.

Для универсальной выгрузке у меня практический предел файла был 1.5 - 1.8Гб. Причем к концу перед вылетом тормозило неимоверно. Причины: Ограничения объема памяти для приложения в 2 Гб. В имеющейся модели файл со всеми узлами формируется в памяти, поэтому при большом объеме еще и тормозит.

Стандартные варианты решения:

1. Разбивать выгрузку на части

2. Использовать прямое подключение к БД

Разбитие на части подходит не всегда. Если есть несколько НЕпересекающихся или слабо пересекающихся областей данных оно оптимально - можно разбить по метаданным сначало то, потом это. Если же разделить по метаданным не выходит - имеем непропорциональное увеличение времени выгрузки и загрузки. Например большой справочник номенклатуры. При выгрузке отдельно приходных и расходных документов он выгрузится по ссылкам дважды. При делении на периоды аналогично. А при выгрузке он может занимть приличный объем.

Способ 2 является частным случаем 1 сведенным до уровня одного объекта. Выгрузил документ - сразу загрузил, следующий. Способ того требует доработки универсальных обработок обмена. Сам не пробовал, но у кого-то получалось. Еще минус - одновременно заняты база источника и приемника.

Перепробовав несколько вариантов удалось решить проблему формирования больших выгрузок. Доработка встроена в КД (обработку выгрузки правил), поэтому совершенно прозрачна для пользователя. Формировались файлы свыше 3 Гб, причем память процесса не превышала 500М. Файлы получаются стандартные и грузятся обычной универсальной загрузкой.

Ограничение: размер непрерывного блока текста - 32К. (см обновление)

При использовании надо внести изменения в обработку выгрузки V77Exp, чтобы заменить ее код, на код формируемый КД. А именно стереть все и вставить 1 строку:

#ЗагрузитьИзфайла МодульВыгрузки.txt

Где МодульВыгрузки.txt - то, как вы назвали файл с формируемым кодом.

Обновление 31.10.2012:

1. При выгрузке правил в файл обмена не выгружаются тексты алгоритмов, не используемых при загрузке. Например в правилах з ЗиК-ЗУП есть довольно длинные алгоритмы более 32К, которые не могут быть записаны. Анализируем признак и не пишем в файл. На загрузку это влияния не оказывает.

2. Переход на версию 2.1.6.4

В файле архив:

1. Измененая полная CF Конвертация данных, редакция 2.1 (2.1.6.4)

2. Измененная обработка ВыгрузкаКонвертации.epf

Скачать файлы

Наименование Файл Версия Размер
Выгрузка БОЛЬШИХ объемов из 7.7 конвертацией данных
22.11.2016
5000 руб.

Моментальная
доставка

См. также

Комментарии
1. Сергей Смирнов (milanse) 24 13.08.12 14:58 Сейчас в теме
А в чем суть изменения ? используется другой парсер или что-то еще ?
2. Веселов Александр (aves) 184 13.08.12 17:32 Сейчас в теме
(1) Суть: используя типовые правила формирования узлов объектов заставить записывать их в файл последовательно и сразу же.
Использую другой объект, не Msxml2.DOMDocument
3. Сергей Смирнов (milanse) 24 13.08.12 17:43 Сейчас в теме
(2) aves, мы используем разработку Ромикса для формирования xml, тоже неплохо получается, но у нас своя подсистема обмена (77 в 77, не на конвертации).
4. Веселов Александр (aves) 184 13.08.12 18:34 Сейчас в теме
(3) каждому свое. У меня универсальный вариант. У вас эксклюзив. может исторически так сложилось или КД не подошла.
Ссылку на ромикса дадите? Нашел только быстрый эксель с ёкселем.
5. Сергей Смирнов (milanse) 24 13.08.12 18:46 Сейчас в теме
если не забанят
http://kb.mista.ru/article.php?id=73

она по образу и подобию ЗаписьХМЛ вроде сделана.
6. Александр Зубцов (iov) 359 01.11.12 02:53 Сейчас в теме
(5) Это у мисты пунктик, ссыли на инфостарт банить...
7. Franchiser (Franchiser) 271 06.12.12 12:09 Сейчас в теме
Хотелось бы описание что именно доработано. Сколько строк кода изменено. Что-то дорого 10 000 за то что используется не Msxml2.DOMDocument
8. Веселов Александр (aves) 184 06.12.12 15:54 Сейчас в теме
(7) Описание в самой статье - последовательная запись сразу в файл.
Сумма именно за то, что:
1. Разгадал что именно надо использовать вместо Msxml2.DOMDocument. Пробовал варианта 4 разных объектов.
2. Исправил так, что:
2.1 Изменения совместимы с типовой выгрузкой
2.2 Минимальны сами по себе (их не много. Сравнение выдает 215 строк различий)

Как в анекдоте: важно не сильно ударить, а знать куда ударить :-)
9. Ёпрст (Ёпрст) 1015 06.12.12 15:59 Сейчас в теме
Объектов для создания xml не так и много.."что именно" - скорее всего просто текст через fso лепит и теги ручонками создает.
10. Franchiser (Franchiser) 271 06.12.12 16:57 Сейчас в теме
А как же то что в правилах КД можно обращаться к узлу в обработчиках. Получаются типовые правила не будут работать, если теперь такого понятия "Узел" не будет?
11. Ёпрст (Ёпрст) 1015 06.12.12 17:09 Сейчас в теме
(10) дык можно же всё съэмулировать
12. Веселов Александр (aves) 184 06.12.12 19:09 Сейчас в теме
(10), (11) - по идее типовые работать должны, т.к. изменения идут после формирования узла.
На примере в сформированный узел номенклатуры добавляем атрибут типовым способом из справки и он пишется в файл сам. Без эмуляции
Прикрепленные файлы:
13. Franchiser (Franchiser) 271 06.12.12 20:34 Сейчас в теме
А что будет с таким кодом:
Прикрепленные файлы:
14. andrewks 1184 06.12.12 20:42 Сейчас в теме
цена зело высокая, учитывая, что такого объёма выгрузки делаются весьма редко.
кстати, после небольшой правки 1cv7.exe можно спокойно выгрузить xml 3 гига и стандартной обработкой
15. Franchiser (Franchiser) 271 06.12.12 20:54 Сейчас в теме
(14) да у меня есть патч 4гб только в терминале он бывает приводит к тому что 1с - ка закрывается вообще без ошибок даже о нехватки памяти
16. Веселов Александр (aves) 184 07.12.12 12:14 Сейчас в теме
(13) - Почему то не завелось.
У меня УзелСсылки и Приемник на входе в процедуру ПКО_ПриВыгрузке_Номенклатура типа OLE.IXMLDOMElement и ТипЗначения = 100

Оба инициализированы и доступны.
В можно создавать узлы и добавлять их в приемник типовыми способами.

Причем и в типовой конвертации аналогично. Возможно у вас ПередВыгрузкой что-то происходит? Я пробую на справочнике номенклатура, вы на субконто - имеет значение? Если это типовые правила, то какие - могу протестировать.
17. Franchiser (Franchiser) 271 07.12.12 13:14 Сейчас в теме
Это типовые правила переноса Бухгалтерия 7.7 в Бухгалтерия 8.2 Корп для ПКО "ВидСубконто".
18. Franchiser (Franchiser) 271 07.12.12 13:30 Сейчас в теме
Тип как таковой значения не имеет главное чтобы работала процедура подобной записи в обработчике Видсубконто.

Это правило используется как правило для вида субконто (ИмяПКОВидСубконто).

Информация из справки:
ИмяПКОВидСубконто - имя правила конвертации, по которому производится преобразование вида субконто (только для свойств СубконтоДт и СубконтоКт записей регистра бухгалтерии). Может быть выбрано в зависимости от каких-либо условий.
19. Franchiser (Franchiser) 271 07.12.12 15:06 Сейчас в теме
Как я понял используется объект "Microsoft.XMLDOM", что также является объектной моделью, в чем тогда заключается последовательная запись?
20. Веселов Александр (aves) 184 07.12.12 19:58 Сейчас в теме
(13) - такая конструкция работать будет - проверил. Выгрузил операции из бух 77 - в БП3 приехали с субконто.

(17) - Типовые правила для БП требуется немного допилить: не работают операции с корневым узлом rootNode. Ну низя так. А типовые правила после выгрузки добавляют туда атрибуты о самой выгрузке и ее параметрах. Установка параметров в конце выгрузки никак не совместима с идеей последовательной записи - заремарил.

(19) - Да IXMLDOMElement объектная модель. Она используется в типовой конвертации. И у меня. Именно по этому доработка получилась совместимой. Но для записи в файл она не используется и пишется последовательно по другому :-). Поэтому rootNode и недоступен.
21. Franchiser (Franchiser) 271 07.12.12 20:01 Сейчас в теме
(20) если объект оле, возможно запись через провайдера msdaosp
22. Franchiser (Franchiser) 271 07.12.12 20:21 Сейчас в теме
Кстати 32000 приблизительное ограничение на запись поля по оле
23. program program (prodines) 102 07.11.13 10:46 Сейчас в теме
Бесплатный вариант - с разбивкой по частям: http://infostart.ru/public/195278/
24. anton9843 S (anton9843) 11.08.15 17:02 Сейчас в теме
Есть проблема одна
Например пишем код обработчика загрузки и в коде чтото типа: Объект.Реквизит <> "чтото важное"
При выгрузке это правило попадает в итоговый XML как есть
и файл получается невалидный из за скобочек

надо по хорошему заменять символы недопустимые
< = & lt ;
> = & gt ;
& = & amp ;
' = & apos ;
" = & quot ;

Раньше объект xml сам преобразовывал а теперь он не используется

Вообщем дописывайте функцию ЗаписатьЭлементВТекст
В макете ПроцедурыИФункцииМодуляВыгрузки
у процедуры ВыгрузкаКонвертации