Счет-фактура в XML

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Счет-фактура в XML

Сообщение Игорь Столяров »

Лучше сразу включать XML.SetUseCRLF(False) - как в моем первом примере.
С точки зрения XML документа переносы значения не имеют, а красивое оформление для просмотра в текстовом редакторе, вообщем-то никому и не нужно. А в Explorer или любом редакторе XML документов - структура отображается правильно независимо от переносов.

Для меня конструкция "SAux1 &= SAux2[1:lSLen]" является синтаксическим маразмом.
Понятно, что в методе просто ляп, но по идее это ошибка и должна отсекаться компилятором ...
Make Clarion Great Again ! 😎
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: Счет-фактура в XML

Сообщение Admin »

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

Счет-фактура в XML

Сообщение Игорь Столяров »

К сожалению, вынужден констатировать что с ABPRXML - тоже не хорошо ... :(
При попытке выгрузить, файл с 20 000 записями, по 30 тегов в каждой записи - систематически GPF ... :(
И очень меееееееееедленно. Попробую сначала переписать на экспорт через драйвер ASCII-файла,
а потом можно и на прямой экспорт через WinAPI. Думаю, что это должно поднять скорость на порядок.
Принцип понятен, просто текстовый файл с заменой символов, а закрыть "ручками" тег мне не сложно.
Make Clarion Great Again ! 😎
kreator
✯ Ветеран ✯
Сообщения: 5160
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Счет-фактура в XML

Сообщение kreator »

Через Ascii-драйвер всё хорошо по скорости. Вот таких объёмов (20000 по 30) у меня не было ещё.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Счет-фактура в XML

Сообщение Игорь Столяров »

Да, действительно. При переводе экспорта XML на ASCII драйвер скорость выросла ровно на порядок. :cat:
Несколько напрягает ограничение размера поля в 64K при экспорте секций CDATA с графикой и файлами (в ABPRXML то же есть это ограничение), а в остальном проблем нет. Попробую теперь переписать на DOS драйвер, а потом на WinApi ... ;)
Make Clarion Great Again ! 😎
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2584
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Счет-фактура в XML

Сообщение Губин Игорь »

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

Счет-фактура в XML

Сообщение Игорь Столяров »

Проблема в том, что если нужно записать в XML структуру данных длиной больше 64K - то через ASCII драйвер это нельзя сделать.
(Ограничение на размер записи в драйвере 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

Сообщение Губин Игорь »

Игорь Столяров писал(а): А вот с записью файла через WinAPII - облом. Больший XML файлы (более 10 MByte) зависают намертво.
Не сталкивался. У меня другая проблема - тормозить вывод для придания большей значимости (смотрите как тяжело всё это делается). :idied:
Правда, больше 2-3Мб не экспортировал ни разу. Но, в любом случае, хорошо то, что хорошо работает. :cat:
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Счет-фактура в XML

Сообщение Игорь Столяров »

По скорости формирования XML файла через DOS драйвер могу сказать следующее:
Размер XML файла 10 MByte, 350 000 строк в кодировке UTF-8, (20 000 записей по 15 тегов в каждой + заголовок)
Время формирования 60-70 сек. На мой взгляд - волшебно. :cat:
Через ABPRXML тот же файл формируется 15 минут и через раз GPF. :(
Make Clarion Great Again ! 😎
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2584
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Счет-фактура в XML

Сообщение Губин Игорь »

Игорь Столяров писал(а): ABPRXML тот же файл формируется 15 минут и через раз GPF
Самое забавное, что ABPRXML делает тоже через DOS :idied:

Код: Выделить всё

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 файлов большого размера. ;)
Make Clarion Great Again ! 😎
kreator
✯ Ветеран ✯
Сообщения: 5160
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Счет-фактура в XML

Сообщение kreator »

По описанию DOS-драйвера в хелпе тоже есть ограничение на 64K, или это как-то обходится? Смотрел-смотрел на разницу в драйверах (DOS и ASCII), типа всё одинаково.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Счет-фактура в XML

Сообщение Игорь Столяров »

Обходится легко. ASCII драйвер записывает после каждой записи перенос строки (в принципе можно отключить).
А в DOS - просто пишешь столько байт сколько нужно и при необходимости вручную формируешь перенос строки. Вот и все.
Make Clarion Great Again ! 😎
kreator
✯ Ветеран ✯
Сообщения: 5160
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Счет-фактура в XML

Сообщение kreator »

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

Счет-фактура в XML

Сообщение Игорь Столяров »

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