Имя: Пароль:
1C
1C 7.7
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 код получается? возни много? "примерчик" можно на [email protected]
.
?
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 судя по всему сегодня на работу не ходил ;-)