gifts2017

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

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

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

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

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

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

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

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

(19) - Да IXMLDOMElement объектная модель. Она используется в типовой конвертации. И у меня. Именно по этому доработка получилась совместимой. Но для записи в файл она не используется и пишется последовательно по другому :-). Поэтому rootNode и недоступен.
21. Franchiser (Franchiser) 07.12.12 20:01
(20) если объект оле, возможно запись через провайдера msdaosp
22. Franchiser (Franchiser) 07.12.12 20:21
Кстати 32000 приблизительное ограничение на запись поля по оле
23. program program (prodines) 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 сам преобразовывал а теперь он не используется

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