Имя: Пароль:
1C
1C 7.7
v7: MSXML2.DOMDocument.6.0 VS MSXML2.DOMDocument.4.0
,
0 Franchiser
 
гуру
06.12.12
13:55
Подскажите в чем разница, что улучшилось в последней версии. Думаю заменить в универсальной обработке выгрузке XML на данный объект. Пропадает ли ошибка с нехваткой памяти?
1 Ёпрст
 
06.12.12
13:57
не пропадёт.
и.. память есть не DOMDocument, если че.
2 Franchiser
 
гуру
06.12.12
14:01
в описании на ms пишут что значительные улучшения в работе на 64bit системах... Интересно какие.
3 Ёпрст
 
06.12.12
14:02
(2) разбор мот побыстрее, да прочий мусор для разбора/поиска улучшили.
Тебе это не поможет при создании xmlфайла
4 Franchiser
 
гуру
06.12.12
14:03
я к тому справшиваю, что раньше я думал что из-за того что выгрузка делается 1с7.7 то у нее есть ограничение на 2 гб памяти как 32bit приложения. Но если есть XMLDOM на 64bit значит может выделиться памяти до 3-4гб
5 Ёпрст
 
06.12.12
14:04
(4) какая наивность
еще раз - домдокумент тут вообще никоим боком.
можешь файло хоть в гиг создать
6 Franchiser
 
гуру
06.12.12
14:04
понятно( спс
7 Ёпрст
 
06.12.12
14:05
проблема только, откуда ты получаешь данные - из тз там какой-нить, которая отожрала всю память и привет.
8 Ёпрст
 
06.12.12
14:06
можешь проверить - запусти цикл до миллиона и пиши пару тегов и атрибутов через дом - нормально усё запишется..
9 Franchiser
 
гуру
06.12.12
14:09
но объект дом тоже ведь хранится в памяти, как экземляр записываемого файла обмена, значит он тоже память жрет. Я для себя нашел приемлемый вариант выгрузки частями, чисто для интереса хочется получить результат что-то вроде последовательной записи. На ис видел сегодня обработку за 10 тыр, где кд переписали для записи не через дом а какой то другой объект для выгрузки бол. объемов данных, интересно на какой объект можно заменить дом в выгрузке.
10 Ёпрст
 
06.12.12
14:13
(9) на запись в текстовый файл с ручной установкой тегов, через fso
11 Ёпрст
 
06.12.12
14:13
но, оно того не стоит.
12 Franchiser
 
гуру
06.12.12
14:16
я читал про это статью ромикса, но чтобы это делать правилами из КД не получится. Хотелось бы заменить процедуры на что-нибудь без ДОМ:
/******************************************************************************
//
//
// Параметры:
//
// Возвращаемое значение:
//
// Описание:
//
Функция СоздатьУзел(name)
   
   newNode = DOMDocument.createNode(1, name, "");
   
   Возврат newNode;

КонецФункции // СоздатьУзел()

//******************************************************************************
//
//
// Параметры:
//
// Возвращаемое значение:
//
// Описание:
//
Процедура УстановитьАтрибут(element, name, value)
   
   element.setAttribute(name, Строка(value));
   
КонецПроцедуры // УстановитьАтрибут()

//******************************************************************************
//
//
// Параметры:
//
// Возвращаемое значение:
//
// Описание:
//
Процедура ЗаписатьЭлемент(node, name, value = "")
   
    childNode = DOMDocument.createNode(1, name, "");
    Попытка
          childNode.text = Строка(value);
    Исключение
          Сообщить("Не удалось записать элемент: "+name+", со значением: "+value);
          childNode.text = "";
    КонецПопытки;
    node.appendChild(childNode);
   
КонецПроцедуры // одЗаписатьЭлемент()

//******************************************************************************
//
//
// Параметры:
//
// Возвращаемое значение:
//
// Описание:
//
Процедура ДобавитьПодчиненный(parentNode, childNode)
   
   parentNode.appendChild(childNode);

КонецПроцедуры // ДобавитьПодчиненный()
13 Ёпрст
 
06.12.12
14:20
(12) дык в стандартной КД разве не приблуда от v7plus ?
Там же нет домдокумента
14 Franchiser
 
гуру
06.12.12
14:30
то код я привел и стандартной кд. Как раз выгрузка идет через DOM:
// ПОД
   Попытка
       _DOMDocument = CreateObject("Msxml2.DOMDocument.4.0");
   Исключение
       _DOMDocument = CreateObject("Msxml2.DOMDocument");
   КонецПопытки;
   
   _DOMDocument.load(ИмяФайлаПравил);
   
   УзелПОД = _DOMDocument.selectSingleNode("ПравилаОбмена/ПравилаОчисткиДанных");
   ДобавитьПодчиненный(УзелПравилаОбмена, УзелПОД);
   
   УзелАлгоритмы = _DOMDocument.selectSingleNode("ПравилаОбмена/Алгоритмы");
   ДобавитьПодчиненный(УзелПравилаОбмена, УзелАлгоритмы);

   УзелЗапросы = _DOMDocument.selectSingleNode("ПравилаОбмена/Запросы");
   ДобавитьПодчиненный(УзелПравилаОбмена, УзелЗапросы);
       
   ДобавитьПодчиненный(rootNode, УзелПравилаОбмена)

КонецПроцедуры // ИнициализацияФайлаОбмена()
15 Ёпрст
 
06.12.12
14:33
(14) дык в типовой кд нет DOMDocument..
т.е ты ужо переписал и не устраивает, так что ли ?
16 Franchiser
 
гуру
06.12.12
14:35
Это не я переписал, это 1с, типовой код сформированный правилами из типовой КД. Как раз я хотел это все убрать и сделать последовательную запись, чтобы не грузить память. и не пойму почему 1с не изпользует Msxml2.DOMDocument.6.0.
17 Ёпрст
 
06.12.12
14:36
(16) не знаю, где ты это взял, в типовой используется
объект от v7plus
18 Franchiser
 
гуру
06.12.12
14:38
загрузил 1с правила переноса в КД , редакция 2.1 (2.1.6.1)
и выгрузил правила и обработчики. В обработчиках указанный код. v7plus кажется используется только при выгрузке в формате  КД 1.0 а не КД 2.
19 Franchiser
 
гуру
06.12.12
14:39
речь идет о выгрузке 7.7 - 8.2
20 Ёпрст
 
06.12.12
14:39
(18) может быть, один хрен ни то ни то не использую..
Ну поменяй на DOMDocument.6 - разницы никакой не будет
21 Franchiser
 
гуру
06.12.12
14:40
лан хрен с ним