Вход | Регистрация
 

Проблемы выгрузки больших XML в 7.7 и их решения.

Проблемы выгрузки больших XML в 7.7 и их решения.
Я
   H A D G E H O G s
 
23.01.20 - 11:48
Дня доброго.
Понадобилось тут народу сделать переход с 7.7 в 8.3 БП. И проблема у них образовалась - падает по памяти выгрузка в XML.
И даже 4 Гб не хватает.
Выгрузка идет через MS.XML2.DOM, который не пишет сразу в файл, а формирует дерево в памяти, чтобы оперировать Узлами, а не НачатьЭлемент()/ЗакончитьЭлемент(), вот это все.
Стали думать и гадать, даже форум читали. Там либо все переписывать на потоковый вывод предлагалось, либо грузить частями. Боль, страх, унижение.

И решил я - а че бы это дерево данных не хранить в стороннем x64 процессе из светлого будущего.
Сказано - сделано -  встречайте x64Provider от HADGEHOGs:

Ссыль - https://yadi.sk/d/4L5gHvFMO0f_XQ
Скрин - http://prntscr.com/qrnoq0

В принципе, он позволяет работать с любыми COM-объектами в адресном пространстве x64.

7.7 - зло злобное.
 
 
   H A D G E H O G s
 
1 - 23.01.20 - 11:50
Чуть позже размещу на Инфостарте, вдруг кому то пригодиться.
   Amra
 
2 - 23.01.20 - 11:52
Забыл добавить "... от моего Гения - вам...." ))
   H A D G E H O G s
 
3 - 23.01.20 - 11:53
(2) "Мой Гений скромно дарит вам..."
Да, просилось, просилось, но я не могу компрометировать Осипова.
   pechkin
 
4 - 23.01.20 - 11:59
частями выгружай. зачем все в 1 файл?
   pechkin
 
5 - 23.01.20 - 12:00
да и вообще частями переход правильнее. ибо выгрузил все 100500 гигов, а потом где-то вконце ошибка
   H A D G E H O G s
 
6 - 23.01.20 - 12:01
(4) Где там частями в типовом переносе?
   pechkin
 
7 - 23.01.20 - 12:02
(6) у тебя типовой перенос прошел гладко?
ни разу такого не видел
частями - там же оычные правила с кучей галок
   Bigbro
 
8 - 23.01.20 - 12:05
ненуачо.
вот так по костылику и 7ка на очередной десяток лет работы пойдет без замены).
Спасибо!
   H A D G E H O G s
 
9 - 23.01.20 - 12:06
(7) 280000 тыс элементов без косяков, кроме 8 счет-фактур, в которых не заполнен договор.
Но эти 8 счет фактур можно забить руками.
   H A D G E H O G s
 
10 - 23.01.20 - 12:06
280 тыс, пардон.
   pechkin
 
11 - 23.01.20 - 12:07
(9) повезло однако
   H A D G E H O G s
 
12 - 23.01.20 - 12:07
(7) Я не разбираюсь в этих ваших семерках, именно необходимость ковыряния кода в 7.7 подвигла меня по быстрому накропать эту приблуду.
   pechkin
 
13 - 23.01.20 - 12:08
наверно у них учет был без ошибок
   pechkin
 
14 - 23.01.20 - 12:09
хотя я правда ни разу полностью типовые базы не переносил. может поэтому
   d4rkmesa
 
15 - 23.01.20 - 12:22
(0) Спасибо, качнул на всякий.
   Garykom
 
16 - 23.01.20 - 12:35
(0) Не DOMь а SAXуй!
   pechkin
 
17 - 23.01.20 - 12:38
(16) предлагаешь переписать выгрузку из 77?
   Garykom
 
18 - 23.01.20 - 13:13
(17) Ну решение с вызовом 64 битных dll из 32 бит приложения тоже тот еще костыль
   tgu82
 
19 - 23.01.20 - 16:13
(0) Ну надо же я рядом такую ветку создал с вопросом как решать а тут вроде и решение имеется.
Спасибо!
   tgu82
 
20 - 23.01.20 - 16:30
(0) А не хочет ее регистрировать в вин сервер 2012. Я правда их простой папки его запускал.
Не взлетает. Наверное туплю
   NorthWind
 
21 - 23.01.20 - 16:48
(7) ну у меня в 14 году ЗиК четырехлетний нормально в ЗУП-УПП перелился штатным переносом. Кое-что потом руками уже в УПП подправили, но по мелочи.
   NorthWind
 
22 - 23.01.20 - 16:49
(0) полезная штука, спасибо!
   H A D G E H O G s
 
23 - 23.01.20 - 17:13
(20) Как вариант - 
regsrv32 asf.exe 

под админом.
Тестировал под Win10 у себя
   pechkin
 
24 - 23.01.20 - 17:14
(23) ты же в описании написал что не нужно этих мерзких админов
   H A D G E H O G s
 
25 - 23.01.20 - 17:15
(24) Я не тестировал под Winserver2012
   pechkin
 
26 - 23.01.20 - 17:16
(25) а что там другая ролевая модель?
   H A D G E H O G s
 
27 - 23.01.20 - 17:18
(26) Ты с какой целью интересуещься?
   H A D G E H O G s
 
28 - 23.01.20 - 17:22
(20) Клиентский сеанс под тем же пользователем, под которым устанавливал?
   pechkin
 
29 - 23.01.20 - 17:24
для общего T-shape развития
   H A D G E H O G s
 
30 - 23.01.20 - 17:43
Проверил на WinServ 2016.
Все нормально взлетело.
 
 Рекламное место пустует
   H A D G E H O G s
 
31 - 23.01.20 - 17:49
tgu82, если есть возможность дать доступ к серверу - пиши на liveups@yandex.ru
   Garykom
 
32 - 23.01.20 - 18:02
Кривизну разрабов исправлять через костыли вместо написания в саппорт? А потом удивляться а что то 1С такая глюкавая.
   pechkin
 
33 - 23.01.20 - 18:04
в саппорт по 77?
   Лефмихалыч
 
34 - 23.01.20 - 18:04
я бы просто делал выгрузку не одинэсом и всё.
Но тогда бы не было магической вундервафли - это да
   Garykom
 
35 - 23.01.20 - 18:04
Заодно плиз решение для x64 1С и печати pdf417 из регламентированной ну и заодно ккт штрих как к x64
   pechkin
 
36 - 23.01.20 - 18:05
(34) сам бы с 0 выгрузку писал?
   Garykom
 
37 - 23.01.20 - 18:05
(33) Именно саппорт по переходу с 77 на 8
   pechkin
 
38 - 23.01.20 - 18:06
(37) и что как ты думаешьони могут ответить?
   Garykom
 
39 - 23.01.20 - 18:08
(38) Думаю пришлют подправленную для выгрузки кусочками
   pechkin
 
40 - 23.01.20 - 18:08
(39) так такая уже есть - см начало ветки
   Garykom
 
41 - 23.01.20 - 18:12
(40) Я думаю ТС изучил приобрел новый молоток и терь ему нравится забивать им любые шурупы
   Garykom
 
42 - 23.01.20 - 18:13
(41)+ Ну 7.7 плохо знает или уже забыл
   pechkin
 
43 - 23.01.20 - 18:13
ну таки забилось
   tgu82
 
44 - 23.01.20 - 18:13
(41) Да нет, просто с нового года все бухгалтерии будут в 8-ке 99.99999%. Сверки норм проходит а с выгрузкой напряги
   Garykom
 
45 - 23.01.20 - 18:15
(44) С БП2 на БП3 переход тоже актуален
   pechkin
 
46 - 23.01.20 - 18:16
(45) там нет такой проблемы в принципе
   tgu82
 
47 - 23.01.20 - 18:26
(31) отправил Вам письмо
   Garykom
 
48 - 23.01.20 - 18:26
(46) Хохо. Там схожая проблема что типовой переход от разрабов в неких ситуациях с много веселых данных нихрена не взлетает.
Ну не получится просто обновиться, надо выгрузку и загрузку в чистую базу делать
   tgu82
 
49 - 23.01.20 - 18:28
(45) Расчетчик-кадровик год ведет ЗУП и ЗИК по 4 фирмам и матерится на ЗУП по многим причинам. И с большим трудом удается убеждать переходить на 8-ку тех кто с 2003 на 7-ке.
   tgu82
 
50 - 23.01.20 - 18:30
(48) Само собой загрузка в новую чистую базу - справочники выгрузились а на остатки вот памяти не хватает в парсере 3.0
   Сияющий в темноте
 
51 - 23.01.20 - 18:31
в адресное пространство другого процесса?
падение скорости в разы.

нет,а что переписывать?
дом он строит добавлением в конец? тогда просто пишешь заглушку-транслятор одних вызовов в другие,и никто не узнает.
просто,зачем гадить в память,если есть диск,который также виртуально в памяти-и он побыстрее межпроцессорного вызова будет,так как при обмене между программами(процессами)реально идет передача данных между нитями исполнения,а они на разных ядрах.
   tgu82
 
52 - 23.01.20 - 20:01
H A D G E H O G просто гуру и супер. Пока все флудили он все сделал чтоб все заработало.
Мастер одним словом )
   NorthWind
 
53 - 23.01.20 - 21:14
(51) > в адресное пространство другого процесса? падение скорости в разы.

DOM сам по себе не настолько шустер чтобы это сказалось.
Серьезные выгрузки данных с гигабайтными файлами запускают на ночь - авось наутро выгрузит. Задача разовая. Какая там скорость?
   NorthWind
 
54 - 23.01.20 - 21:19
+ (51) Транслятор вызовов? Там порядком вызовов придется перенянчить. Плюс если там где-то все же паче чаяния окажется работа с уже загруженными в DOM-документ узлами - то вы попадете в некоторую просрацию...
   victuan1
 
55 - 24.01.20 - 07:44
(44) Чего это вдруг?
   tgu82
 
56 - 24.01.20 - 08:14
(55) Приказ руководства. Надо. Базы строительных фирм выделяем из общей управленческой ТИС. Да много всяких причин накопилось. 7-ка пока управленческая остается но думаю что не больше чем на полгода
   Franchiser
 
57 - 24.01.20 - 09:01
Нужно ли что-то делать с обработкой кроме регистрации asf. Как это работает?
   tgu82
 
58 - 24.01.20 - 09:17
(57) Это к автору. в посте 31 есть его адрес.
Но вообще-то он полностью отработанную версию обещал опубликовать здесь

Возиожно действительно поставить последний парсер но я не пробовал - просто пока не надо, ASF+очень умелые руки и мозги (0) мне проблему решили
   Дык ё
 
59 - 24.01.20 - 09:28
   Garykom
 
60 - 24.01.20 - 09:40
(59) Дык не ё, в смысле ты фишки не понял.

Они не хотят типовую выгрузку переписывать на нечто отличное от штатной кривой реализации, которой не хватает оперативки чтобы выгрузить XML под гиг.
По ссылке просто вариант работы с XML который так же потребует переписки, у ТС же решение которое com объект "MSXML2.DOMDocument" заставляет работать в x64 процессе, хотя 1С 7.7 вызывающая x32
   Garykom
 
61 - 24.01.20 - 09:49
(60)+ Короче вместо полдня потерять а потом за полчаса долететь, они предпочитают ничего не терять но ждать выгрузки нескоко часов через костыль
   Franchiser
 
62 - 24.01.20 - 10:18
(58) посмотрел скрин стало понятно. Думал это консольная утилита, а это целое приложение.
(60) вообще то вместо xml2, в обработке у автора используется xml4
   pechkin
 
63 - 24.01.20 - 10:28
(61) полдня переписыать типовую обработку - да ты сказочник
   Garykom
 
64 - 24.01.20 - 10:55
(62) насчет 2 и 4 не понял
Ибо  "MSXML2.DOMDocument" бывает разных версий  "MSXML2.DOMDocument.4.0" так и "MSXML2.DOMDocument.2.6", "MSXML2.DOMDocument.3.0" и до 6.0

А внутри каких DLL оно уже пофиг https://support.microsoft.com/ru-ru/help/269238/list-of-microsoft-xml-parser-msxml-versions
   Garykom
 
65 - 24.01.20 - 10:56
(63) ОК для меня пара часов переписать с DOM на SAX модель XML эту хрень.
   Franchiser
 
66 - 24.01.20 - 11:11
(65) перепиши и поделись со всему, все будут благодарны
 
 Рекламное место пустует
   vladko
 
67 - 24.01.20 - 13:22
мне тоже на следующей неделе надо будет писать выгрузку из 7.7 большого объёма данных в .xml. Было бы очень интересно узнать результат, ну и сравнить разные методы выгрузки в xml.
   d4rkmesa
 
68 - 24.01.20 - 13:26
(65) Есть неудобства определенные, в связи с тем, что модуль обработки V77Exp генерируется в КД.
   Сияющий в темноте
 
69 - 24.01.20 - 18:17
(65)если в Dom все делается последовательно,то да,но есть "умники" которым нравится встаалять,вот тут потоковая запись ни к лицу,хотя,ее можно писать как сценарий,а потом проигрывать для сбора файла как это делалось во времена DOS для редактирования файла большего по обьему предостааленной памяти в 640к
   8 bit
 
70 - 24.01.20 - 18:27
(0) >7.7 - зло злобное.

Вот тут ты не прав. Ты памятник должен поставить клюшкам, т.к. благодаря им 1С набрала популярность, а куча программистов нашла себе хоть какое-то применение. Более того, 7-ка дала шанс всяким недопрогам заработать на кусок хлеба, а то и с маслом.
   Garykom
 
71 - 24.01.20 - 18:53
(69) Все намного проще.

Пишутся функции - обертки эмулирующие методы com компонента Msxml2.DOMDocument но реально работающие с ТЗ или СЗ.
И везде в коде вызов Msxml2.DOMDocument заменяется на наши обертки.

Затем тупой линейный проход по СЗ и запись последовательно в XML.

Лишь бы оперативки для СЗ хватило, если не хватит тут уже придется извращаться как то еще.
   Garykom
 
72 - 24.01.20 - 18:58
(71)+ Каждый узел XML легко представим в виде СЗ, где первым элементом лежит вложенная СЗ с атрибутами, а последующие это подчиненные узлы так же СЗ.
   Franchiser
 
73 - 24.01.20 - 19:58
(71) это уже не sax, опять все упрется в память и в недостатки ТЗ и СЗ
   tgu82
 
74 - 24.01.20 - 20:15
(73) Решение-то уже есть, хотя для 1С 7.7 много чего в реестр (0) добавил и заработало, файл в 862 мб родился и закачался в 8-ку БП3
   Garykom
 
75 - 24.01.20 - 20:30
(73) Как раз линейно из своего формата в XML это классический SAX.
А свой формат по сравнению с XML даже банальная СЗ будет сильно меньше места кушать.
Ну или да пишем на диск но тут тормоза будут если вставки юзаются или изобретать какие то извраты типа хранения узлов в отдельных файлах и каталогах.
   NorthWind
 
76 - 27.01.20 - 06:33
(75) не только вставки. У стандартного DOM можно выбирать подмножества узлов, используя выражения XPath. Вот если это понадобится сэмулировать - будет печаль...
   Garykom
 
77 - 27.01.20 - 08:59
(76) И это можно но согласен писать полностью движок запросов к XML это слегка перебор, в этом случае вариант (0) сильно проще.
   dk
 
78 - 27.01.20 - 09:07
на нафейхоа такие извраты если штатный норм робит?
    Анализатор = СоздатьОбъект("AddIn.XMLParser");
    ПоследовательноЗаписываемыйДокумен = Анализатор.СоздатьПоследовательноЗаписываемыйДокумент();
    ПоследовательноЗаписываемыйДокумен.ИмяФайла = Файл;
    ПоследовательноЗаписываемыйДокумен.АтрибутыЭлемента.УстановитьАтрибут("datetime", Формат(ТекущаяДата(), "дДДММГГГГ") + " " + ТекущееВремя() + ".000");
    ПоследовательноЗаписываемыйДокумен.ОткрытьЭлемент("categories"); 
    ПоследовательноЗаписываемыйДокумен.АтрибутыЭлемента.УдалитьВсе();
    
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл
        
        ПоследовательноЗаписываемыйДокумен.ОткрытьЭлемент("row");
        ПоследовательноЗаписываемыйДокумен.АтрибутыЭлемента.УдалитьВсе();
        ПоследовательноЗаписываемыйДокумен.ВключитьЭлемент("uid",         ТЗ.УИД);
        ПоследовательноЗаписываемыйДокумен.ВключитьЭлемент("category",    ТЗ.Категория);
        ПоследовательноЗаписываемыйДокумен.ЗакрытьЭлемент();
        
        Если (ТЗ.НомерСтроки % 1000) = 0 Тогда
            ПоследовательноЗаписываемыйДокумен.Сбросить();
        КонецЕсли;
        
    КонецЦикла;    

   NorthWind
 
79 - 27.01.20 - 09:44
(78) да работает, работает. Только когда у вас объем генерируемого XMLя выползет за 200-300М, может несколько приуныть и уронить 1С
   NorthWind
 
80 - 27.01.20 - 10:01
хотя вы сбрасываете... хм... кстати, вариант!
   Aleksey
 
81 - 27.01.20 - 10:03
(6) берешь бубен ...
По сути там написана оболочка для кд, т.е. вытаскиваешь правила и можешь частями выгружать, указывая какие типы данных нужно выгрузить
   dk
 
82 - 27.01.20 - 10:31
(79) формируется XML - 150 мб минут за 9
сбросить - рулит
   Franchiser
 
83 - 27.01.20 - 16:55
(82) есть переписанная выгрузка из 7.7 ?
   Сияющий в темноте
 
84 - 27.01.20 - 18:32
так можно и прямо в файле,если писать всегда в конец.
узел это позиция в файле,позиция родителя очевидна
при добавлении чего-то в узел просто по старому месту пишем переход на новое и в путь.
а файлы можно проецировать в память.
так что dom можно реализовать достаточно просто.
   Franchiser
 
85 - 27.01.20 - 19:09
(84) перепиши если просто, я начинал 5 л назад и забросил
   dk
 
86 - 28.01.20 - 11:42
(83) нету


Список тем форума
Рекламное место пустует  Рекламное место пустует
2 + 2 = 3.9999999999999999999999999999999...
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.