Счет-фактура в XML
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Re: Счет-фактура в XML
Лучше сразу включать XML.SetUseCRLF(False) - как в моем первом примере.
С точки зрения XML документа переносы значения не имеют, а красивое оформление для просмотра в текстовом редакторе, вообщем-то никому и не нужно. А в Explorer или любом редакторе XML документов - структура отображается правильно независимо от переносов.
Для меня конструкция "SAux1 &= SAux2[1:lSLen]" является синтаксическим маразмом.
Понятно, что в методе просто ляп, но по идее это ошибка и должна отсекаться компилятором ...
С точки зрения XML документа переносы значения не имеют, а красивое оформление для просмотра в текстовом редакторе, вообщем-то никому и не нужно. А в Explorer или любом редакторе XML документов - структура отображается правильно независимо от переносов.
Для меня конструкция "SAux1 &= SAux2[1:lSLen]" является синтаксическим маразмом.
Понятно, что в методе просто ляп, но по идее это ошибка и должна отсекаться компилятором ...
Make Clarion Great Again ! 
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: Счет-фактура в XML
По работе часто нужно лазить в XML, смотреть проще с переводом строкИгорь Столяров писал(а):Лучше сразу включать XML.SetUseCRLF(False) - как в моем первом примере.
С точки зрения XML документа переносы значения не имеют, а красивое оформление для просмотра в текстовом редакторе, вообщем-то никому и не нужно. А в Explorer или любом редакторе XML документов - структура отображается правильно независимо от переносов.

Еще когда код смотрел обратил внимание на эту строку. Но не вдумывалсяИгорь Столяров писал(а):Для меня конструкция "SAux1 &= SAux2[1:lSLen]" является синтаксическим маразмом.
Понятно, что в методе просто ляп, но по идее это ошибка и должна отсекаться компилятором ...

Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Счет-фактура в XML
К сожалению, вынужден констатировать что с ABPRXML - тоже не хорошо ... 
При попытке выгрузить, файл с 20 000 записями, по 30 тегов в каждой записи - систематически GPF ...
И очень меееееееееедленно. Попробую сначала переписать на экспорт через драйвер ASCII-файла,
а потом можно и на прямой экспорт через WinAPI. Думаю, что это должно поднять скорость на порядок.
Принцип понятен, просто текстовый файл с заменой символов, а закрыть "ручками" тег мне не сложно.

При попытке выгрузить, файл с 20 000 записями, по 30 тегов в каждой записи - систематически GPF ...

И очень меееееееееедленно. Попробую сначала переписать на экспорт через драйвер ASCII-файла,
а потом можно и на прямой экспорт через WinAPI. Думаю, что это должно поднять скорость на порядок.
Принцип понятен, просто текстовый файл с заменой символов, а закрыть "ручками" тег мне не сложно.
Make Clarion Great Again ! 
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Счет-фактура в XML
Через Ascii-драйвер всё хорошо по скорости. Вот таких объёмов (20000 по 30) у меня не было ещё.
We are hard at work… for you. 

- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Счет-фактура в XML
Да, действительно. При переводе экспорта XML на ASCII драйвер скорость выросла ровно на порядок.
Несколько напрягает ограничение размера поля в 64K при экспорте секций CDATA с графикой и файлами (в ABPRXML то же есть это ограничение), а в остальном проблем нет. Попробую теперь переписать на DOS драйвер, а потом на WinApi ...

Несколько напрягает ограничение размера поля в 64K при экспорте секций CDATA с графикой и файлами (в ABPRXML то же есть это ограничение), а в остальном проблем нет. Попробую теперь переписать на DOS драйвер, а потом на WinApi ...

Make Clarion Great Again ! 
- Губин Игорь
- Шубуршун
- Сообщения: 2584
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
Счет-фактура в XML
А в чём там может быть проблема? Я специально весь экспорт из программы запрятал в класс которому передаётся для записи строка. А там всё просто.
Это я только кажусь дураком! На самом деле я полный идиот!
- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Счет-фактура в XML
Проблема в том, что если нужно записать в XML структуру данных длиной больше 64K - то через ASCII драйвер это нельзя сделать.
(Ограничение на размер записи в драйвере ASCII). Например какой-нибудь графический файл в секцию CDATA в BASE64 кодировке.
А через DOS драйвер это легко решается, и скорость записи выше чем ASCII.
А вот с записью файла через WinAPII - облом. Запись больших XML файлов (более 10 MByte) зависает намертво.
Разбираться не стал. DOS драйвер решил все проблемы (кстати через него же работает и библиотека iQXML).
(Ограничение на размер записи в драйвере ASCII). Например какой-нибудь графический файл в секцию CDATA в BASE64 кодировке.
А через DOS драйвер это легко решается, и скорость записи выше чем ASCII.
А вот с записью файла через WinAPII - облом. Запись больших XML файлов (более 10 MByte) зависает намертво.
Разбираться не стал. DOS драйвер решил все проблемы (кстати через него же работает и библиотека iQXML).
Последний раз редактировалось Игорь Столяров 22 Январь 2015, 13:08, всего редактировалось 1 раз.
Make Clarion Great Again ! 
- Губин Игорь
- Шубуршун
- Сообщения: 2584
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
Счет-фактура в XML
Не сталкивался. У меня другая проблема - тормозить вывод для придания большей значимости (смотрите как тяжело всё это делается).

Правда, больше 2-3Мб не экспортировал ни разу. Но, в любом случае, хорошо то, что хорошо работает.

Это я только кажусь дураком! На самом деле я полный идиот!
- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Счет-фактура в XML
По скорости формирования XML файла через DOS драйвер могу сказать следующее:
Размер XML файла 10 MByte, 350 000 строк в кодировке UTF-8, (20 000 записей по 15 тегов в каждой + заголовок)
Время формирования 60-70 сек. На мой взгляд - волшебно.
Через ABPRXML тот же файл формируется 15 минут и через раз GPF.
Размер XML файла 10 MByte, 350 000 строк в кодировке UTF-8, (20 000 записей по 15 тегов в каждой + заголовок)
Время формирования 60-70 сек. На мой взгляд - волшебно.

Через ABPRXML тот же файл формируется 15 минут и через раз GPF.

Make Clarion Great Again ! 
- Губин Игорь
- Шубуршун
- Сообщения: 2584
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
Счет-фактура в XML
Самое забавное, что ABPRXML делает тоже через DOS

Код: Выделить всё
ReportTarget_InFile FILE,DRIVER('DOS'),PRE(RT_IN),THREAD
RECORD
Buffer STRING(64000)
END
END
ReportTarget_OutFile FILE,DRIVER('DOS'),CREATE,PRE(RT_OUT),THREAD
RECORD
Buffer STRING(64000)
END
END
Это я только кажусь дураком! На самом деле я полный идиот!
- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Счет-фактура в XML
Да, я это видел. Но там куча разного кода по отслеживанию структуры вложенных тегов и
не реализована запись структур более размера записи (64K).
В принципе APRXML - предназначен для экспорта отчетов и с этим он вполне справляется.
Это я его пробовал "прикрутить" для формирования произвольных XML файлов большого размера.
не реализована запись структур более размера записи (64K).
В принципе APRXML - предназначен для экспорта отчетов и с этим он вполне справляется.
Это я его пробовал "прикрутить" для формирования произвольных XML файлов большого размера.

Make Clarion Great Again ! 
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Счет-фактура в XML
По описанию DOS-драйвера в хелпе тоже есть ограничение на 64K, или это как-то обходится? Смотрел-смотрел на разницу в драйверах (DOS и ASCII), типа всё одинаково.
We are hard at work… for you. 

- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Счет-фактура в XML
Обходится легко. ASCII драйвер записывает после каждой записи перенос строки (в принципе можно отключить).
А в DOS - просто пишешь столько байт сколько нужно и при необходимости вручную формируешь перенос строки. Вот и все.
А в DOS - просто пишешь столько байт сколько нужно и при необходимости вручную формируешь перенос строки. Вот и все.
Make Clarion Great Again ! 
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Счет-фактура в XML
Т.е. всё равно пишешь 64K блоками, а где надо делаешь перенос строки?
We are hard at work… for you. 

- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Счет-фактура в XML
Абсолютно верно !Игорь Столяров писал(а):Т.е. всё равно пишешь 64K блоками, а где надо делаешь перенос строки?

Кстати для XML файла переносы строк вообще не нужны (ну разве что для просмотра в тексте при отладке).
Поэтому просто запись тегов блоками с Clip(), а если тег больше 64K - то он записывается несколькими блоками. Вот и все.
Make Clarion Great Again ! 