|   |   | 
| 
 | v7: Семерка работает с любым msxml парсером, или нужен конкретный номер? | ☑ | ||
|---|---|---|---|---|
| 0
    
        Сияющий Асинхраль 06.04.14✎ 21:33 | 
        А то их там 3, 4, 5, 6 может и еще какие есть. На ИТС лежит третий номер...     | |||
| 1
    
        Chai Nic 07.04.14✎ 08:25 | 
        Черт её знает. Методом подбора определяется.. на одном компе нормально работает 4, а на другом только 3..     | |||
| 2
    
        dk 07.04.14✎ 08:38 | 
        работает через v7plus.dll
 для 4-го парсера и выше нужен v7plus.dll 10-й или 11-й и выше | |||
| 3
    
        Злопчинский 07.04.14✎ 20:07 | 
        вот тут малость полезного, может пригодится
 http://infostart.ru/public/20627/ | |||
| 4
    
        spectre1978 07.04.14✎ 21:36 | 
        (0) когда-то безумно давно заморачивался, потому как не работало под Win98SE. Экспериментально выяснилось, что устойчиво работает тройка.     | |||
| 5
    
        spectre1978 07.04.14✎ 21:36 | 
        + (4) речь про тогдашнюю версию компоненты v7plus     | |||
| 6
    
        Сияющий Асинхраль 07.04.14✎ 21:45 | 
        Озаботился вопросом потому, что выгрузка с помощью v7plus где-то через несколько тысяч позиций от начала начинает нести жуткую ахинею, вот и пытаюсь определить, что у клиента стоит и что должно стоять..
 Кстати, (3)(4) спасибо. Буду дальше экспериментировать | |||
| 7
    
        Злопчинский 08.04.14✎ 16:35 | 
        (6) ну я XML-выгрузки обычно тупо пишу как текстовые файлы. никаких нахфиг паресров не надо. и работает всегда.     | |||
| 8
    
        spectre1978 08.04.14✎ 19:55 | 
        (7) ну выгрузки ладно, а вот загрузки? :)     | |||
| 9
    
        Злопчинский 08.04.14✎ 20:02 | 
        (8) это да...
 цимуса иксемеля я так и не уловил - видимо потому что мало с ним работал. все равно каждую загрузку надо программить заново - особой разницы нет - текстом меняться, дбфами, или иксемелем... в иксемеле навскидку уодно только удобно - самодокументируемость... однако, нахрена иксемель для тупого обмена типа: http://screencast.com/t/SdWZ8nxsh4 вот накуа здесь иксемель..? в чем удобство? объясните ламеру!!! | |||
| 10
    
        spectre1978 08.04.14✎ 21:51 | 
        (9) на мой взгляд, цымус иксемеля в том что можно описать практически любые структуры данных. Пока речь идет о плоских табличках - справляется, конечно, и текст, но если, к примеру, к той же номенклатуре нужно выгрузить еще некую детализацию, скажем цены и единицы с разными коэффициентами и ШК - то тут XML существенно лучше подходит. В тех же обменах с банк-клиентом XML эмулируют служебными строками Документ, Конец_Документа... наверно, не напрасно?     | |||
| 11
    
        spectre1978 08.04.14✎ 21:58 | 
        + (10) таким образом, выходит три существенных плюса:
 - поддержка почти любых структур данных; - человекочитаемость; - относительная несложность создания парсера. Сюда можно также добавить верифицируемость - при использовании схем данных. ну и минус: - избыточность, большой объем информации. | |||
| 12
    
        Злопчинский 08.04.14✎ 22:03 | 
        (10) насчет какой-то детализации - тут наверное имеет смысл если только сильно глубокие структуры данных... а так: и единицы, и штрихкода и прочее подчиненное все точно также можно выгружать и грузить из текста, обозначая ключевыми словами в начале строки сущность записи (по сути узел иксемеля) - грузил так неоднократно. а иксемель ну очень неторопливо грузит.. ну очень неторопливо...     | |||
| 13
    
        spectre1978 08.04.14✎ 22:05 | 
        (12) странно. Я дружу с XML для выгрузки-загрузки года с 2004 и для файлов объема до мегабайта ежедневно с v7plus.dll проблем не возникало никогда. Речь про семерку.     | |||
| 14
    
        spectre1978 08.04.14✎ 22:07 | 
        Да и большие файлы приходилось разбирать, собственно там msxml все равно внутри... не так уж он и медленно работает     | |||
| 15
    
        spectre1978 08.04.14✎ 22:10 | 
        а в восьмерке ЧтениеXML вообще шустрый, правда он по другому принципу работает - там не строится дерево документа, просто последовательно в цикле обходятся узлы. Зато скорость - мое почтение     | |||
| 16
    
        Злопчинский 08.04.14✎ 23:25 | 
        (13) ви мне не рассказывайте.. когда у меня типовая выгрузка из ТиС в бух размером мегабайт по 16-20 - грузилась ЧАСАМИ     | |||
| 17
    
        Злопчинский 08.04.14✎ 23:29 | 
        (13) а я блин как-то все не подружусь... был бы какой-нить учебник со внятной идеологией порядка/алгоритма обработки иксемелей.
 . ну вот есть у меня иксемель. ну посмотрел я его глазками (точно также как и прочий текстовый файл для загрузки). есть самый главный корень. дальше-то что делать..? . вдобавок все это херня (или я в корне непонимаю) - если есть в узлах/атрибутах где-то ссылки на товары - то список товаров ОБЯЗАТЕЛЬНо должен быть определен выше..? у меня принципиальные непонятки с этими иксемелями... | |||
| 18
    
        Torquader 08.04.14✎ 23:48 | 
        (17) xml - это тот же текст, только построенный по специальным правилам.
 Там важные символы '<' и '>', которые программа ищет при чтении. | |||
| 19
    
        Злопчинский 08.04.14✎ 23:53 | 
        (18) а я-то и не знал! ;-)
 по текстовому файлу я могу ходить в любом направлении в любые строки/места туда сюда скакать при необходимости. а виксемеле как..? куча всяких заумных обучаловок понаписано, нормального прикоалного учбовника - хрен вам... . за что мы в училище любили всками и тхуласирамана - описание теории и прау примерчиков, где все показано что и как.... | |||
| 20
    
        Torquader 08.04.14✎ 23:57 | 
        (19) Ну так через ЧтениеXML.Прочитать мы находим очередной узел, то есть система находит первый '<' и считывает в память всё, что есть до '>', а дальше уже мы разбираем, то есть выполняем ПрочитатьАтрибут для того, чтобы получить атрибуты узла.
 Ну, также нужно понимать, что у закрывающего узла ('</Имя>') нету атрибутов. | |||
| 21
    
        Злопчинский 09.04.14✎ 00:00 | 
        (20) ну прочитали атрибуты узла (заодно бы хорошо понять - атрибуты читать из атрибутов узла или из узлов, полдчиненных прочитаннгому..? - это как???? - ну называется этот узел "Заявка" - ну и что дальше...? ставим всякие если иначе для правильной алгоритмической отработки разных узлов...? чем это отличается от обычного текстовго файла без всякиго иксемеля..?     | |||
| 22
    
        Torquader 09.04.14✎ 00:12 | 
        (21) Атрибуты - это вот это
 <ИмяУзла Атрибут1="ЗначениеАтрибута1" Атрибут2="ЗначениеАтрибута2">Тело узла</ИмяУзла> 1С же любит так: <ИмяУзла> <attribute name="Поле1" type="ТипПоля1" Value="ЗначениеПоля1" /><attribute name="Поле2" type="ТипПоля2" Value="ЗначениеПоля2" /> </ИмяУзла> Но, в такой записи, то, что написано attribute, на самом деле - дочерние узлы, а у узла атрибутов нету. | |||
| 23
    
        Torquader 09.04.14✎ 00:13 | 
        Есть ещё один подход:
 <ИмяУзла> <ИмяПоля1>Значение поля 1</ИмяПоля1> <ИмяПоля2>Значение поля 2</ИмяПоля2> </ИмяУзла> И это называется классический xml, но 1С (да и многие другие) его почему-то не используют. | |||
| 24
    
        Злопчинский 09.04.14✎ 00:22 | 
        и (22) и 923) я знаю, но мне от этого не легче.. ;-)
 и никакой универсальности все равно нет. под каждый иксемель писать свой разбор и обработку. те же вилы - вид сбоку | |||
| 25
    
        mdocs 09.04.14✎ 03:22 | 
        вопрос почти в тему - а нет ли в восьмерке способа запаси хмл аналогичного семерошному т.е. скажем так, через дерево нодов?     | |||
| 26
    
        spectre1978 09.04.14✎ 08:43 | 
        (25) Это называется DOM - Document Object Model.
 Писать дерево DOM я не пробовал, а читать примерно вот так: чАкт = Новый ЧтениеXML (); чАкт.ОткрытьФайл(пвАктСверки); ПостроительDOM = Новый ПостроительDOM; ДокументDOM = ПостроительDOM.Прочитать(чАкт); ВыражениеXPath = ДокументDOM.СоздатьВыражениеXPath("HEAD/POSITION[DOCTYPE=632]", Новый РазыменовательПространствИменDOM(ДокументDOM)); РезультатXPath = ВыражениеXPath.Вычислить(ДокументDOM); УзелDOM = РезультатXPath.ПолучитьСледующий (); Пока УзелDOM <> Неопределено Цикл Оплата = Число (УзелDOM.ПолучитьЭлементыПоИмени ("PAIDAMOUNT").Элемент (0).ТекстовоеСодержимое); Счет = Число (УзелDOM.ПолучитьЭлементыПоИмени ("INVOICEAMOUNT").Элемент (0).ТекстовоеСодержимое); | |||
| 27
    
        spectre1978 09.04.14✎ 08:54 | 
        (19) Зависит от того, каким образом происходит парсинг. Есть два основных метода - DOM и SAX. SAX - это как раз то что реализовано в ЧтенииXML. То бишь файл читается последовательно и отдает приложению информацию о распознанных узлах и атрибутах. При этом если у тебя есть ссылки из одних узлов на другие, то обрабатывать это ты должен сам, парсер ничего этого не делает.
 . А вот DOM работает совершенно по-другому. Файл целиком считывается и по нему строится полное дерево документа. Если у узла есть подчиненные узлы - это отслеживается по дереву, кроме того, можно обращаться к любым узлам дерева в любое время, не надо ждать пока файл прочитается или возвращаться в начало чтобы прочесть раньше встреченные узлы. А еще может быть доступен язык запросов XPath, который позволяет отобрать узлы по некоторым условиям, скажем по равенству атрибута какому-нть значению. | |||
| 28
    
        mdocs 09.04.14✎ 09:41 | 
        (26) Спасибо, не знал.     | |||
| 29
    
        spectre1978 09.04.14✎ 09:53 | 
        (16) типовая есть типовая. Она же универсальная, там правила, прочие всякие усложнения. А если напишешь что-то легкое конкретно под свои нужды - будет работать быстро.     | |||
| 30
    
        Torquader 09.04.14✎ 13:51 | 
        (27) Только нужно понимать, что дерево DOM строится в памяти программы, и, если файл очень большой, то будет израсходовано много памяти.     | |||
| 31
    
        Сияющий Асинхраль 10.04.14✎ 13:03 | 
        Бывают же чудеса на свете. Наконец то доехал до клиента, чтобы разобраться почему же у него файлы выгрузок все битые получаются. Выгружаю файл - смотрю на результат: правильный файл. Но мне то клиент шлет битые файлы. Десять раз выгрузил - все файлы нормальные. Оказалось, что при копировании нормального файла из терминального режима на рабочий стол пользователя файл убивается напрочь :-(... Вот ведь. Век живи - век учись. В жисть бы не догадался как обычный текстовый файл убить можно...     | |||
| 32
    
        Злопчинский 10.04.14✎ 21:31 | 
        (31) о блин.... как это? что-то у вас там криво - сколько ни копирую аналогичным образом нормально все вроде ходит     | |||
| 33
    
        Сияющий Асинхраль 10.04.14✎ 22:44 | 
        (32) Честно? Не знаю. Я сам такое впервые вижу. Клиент уже неделю меня осаждал, дескать выгрузка неправильная - переписывай. Приехал к нему посмотреть, выгрузку сделал - нормальная, еще раз - опять нормальная. Совершенно случайно обнаружил, что если скопировать то файл бьется. Может админ какие ограничения на размер файлов поставил, может еще что, но в любом случае был изумлен...     | |||
| 34
    
        Злопчинский 10.04.14✎ 23:04 | 
        (33) а как чинили-то?     | |||
| 35
    
        Torquader 10.04.14✎ 23:47 | 
        Да всё очень просто - неправильно установленный MTU и файл большого объёма (больше 1 Мб) при копировании процесс копирования останавливается и отваливается, а от файла остаётся только начало.     | |||
| 36
    
        Chai Nic 11.04.14✎ 08:51 | 
        (35) Бывает и глюки сетевухи, попадались мне гигабитные рилтеки, которые под большой нагрузкой портили данные, при этом никаких ошибок - просто в данных мусор. Лечилось отключением аппаратного ускорения всего в настройках адаптера.     | |||
| 37
    
        Сияющий Асинхраль 11.04.14✎ 21:21 | 
        (34) Чинить особо не стал, просто сделал на компе пользователя папку с общим доступом и строго-настрого наказал, чтобы копировал файлы только через нее. А уж почему - пусть админ разбирается...     | |||
| 38
    
        Torquader 11.04.14✎ 21:24 | 
        (36) У меня компьютер такой был - при записи на диск файл превращался в кашу. Причём, пока он в кеше - всё в порядке, а как только на диск записывался, то всё - каша кашей.
 В общем, как оказалось, виноват был сидюк на шине IDE. | |||
| 39
    
        vladimirmir2012 12.04.14✎ 13:59 | 
        Любопытно при работе с xml в 1С 7.7 всегда советуют, обсуждают, ... v7plus.dll и что нибудь еще типа этого, но
 никогда ни кто не говорит о том, что можно использовать ActiveX Microsoft oXML = СоздатьОбъект( "Msxml2.DOMDocument.6.0" ); См. DOM http://msdn.microsoft.com/en-us/library/windows/desktop/ms766487(v=vs.85).aspx Использую давно ... и не разу еще не испытал ни каких неудобств | |||
| 40
    
        spectre1978 12.04.14✎ 18:31 | 
        Хм... и то верно. В VBA юзал, и тут тоже можно     | |||
| 41
    
        spectre1978 12.04.14✎ 18:31 | 
        * в VBS, точнее     | |||
| 42
    
        Сияющий Асинхраль 12.04.14✎ 19:57 | 
        (39) Это не так, погугли чуток и увидишь, что вариантов использования мелкософта напрямую не меньше, чем компоненты от 1С...     | |||
| 43
    
        Torquader 12.04.14✎ 23:36 | 
        Использовать можно всё, если уж очень хочется, можно xml как текстовый файл почитать - тогда и память можно сэкономить, и много чего другого сделать.     | |||
| 44
    
        Злопчинский 12.04.14✎ 23:41 | 
        я как раз тупо иксемели читаю DOMom (но тупо по примеру), а выгрузки пишу сугубо как текст.     | |||
| 45
    
        Torquader 13.04.14✎ 00:00 | 
        (44) А я и читаю, как текст - так интереснее.     | |||
| 46
    
        Злопчинский 13.04.14✎ 13:44 | 
        (45) о блин, и красивыq код получается? возни много? "примерчик" можно на e.meil@mail.ru
 . ? | |||
| 47
    
        Torquader 13.04.14✎ 17:11 | 
        (46) Завтра на работе посмотрю, что там было.     | |||
| 48
    
        Злопчинский 14.04.14✎ 00:58 | 
        (47) спсб, жду     | |||
| 49
    
        spectre1978 14.04.14✎ 08:05 | 
        (45) а смысл? В семерке еще можно понять, там SAX в явном виде отсутствует, но в восьмерке-то есть все     | |||
| 50
    
        Salimbek 14.04.14✎ 08:28 | 
        (39) Был у нас обмен данными с ТСД на этом XML-е, вот я изматерился тогда... Мало того, что одна выгрузка формировалась несколько часов, так еще и при обратной загрузке весь этот объем заливался обратно. При этом XML-файл в несколько мб съедал по 300-400 мб ОЗУ, иногда, круша 1С-ку и заставляя грузить все заново.
 В следующей версии ПО разработчики обмен сделали уже на SQLite, но все равно я выпилил их реализацию обмена и сделал сам на 1sqlite. | |||
| 51
    
        Salimbek 14.04.14✎ 08:38 | 
        (46) Еще можно это посмотреть: http://www.1cpp.ru/forum/YaBB.pl?num=1332077808     | |||
| 52
    
        Salimbek 14.04.14✎ 08:39 | 
        +(51) Пример использования тут, в конце: http://www.1cpp.ru/forum/YaBB.pl?num=1340029166     | |||
| 53
    
        Злопчинский 14.04.14✎ 18:42 | 
        Салимбек, спсб.     | |||
| 54
    
        Злопчинский 14.04.14✎ 18:42 | 
        Torquader судя по всему сегодня на работу не ходил ;-)     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |