|
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
|
||||
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 судя по всему сегодня на работу не ходил ;-)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |