Страница 1 из 3

АктСвер 3.01 (Чтение XML)

Добавлено: 30 Ноябрь 2020, 8:30
Admin
Ни у кого нет кода для разбора акта сверки взаиморасчетов с помощью iQXML ?
Что то мозгов не хватает его разобрать.
Или чем то другим. Или преобразование этого XML в XLS для удобства чтения.
А то присылают это, и нужно бухам глазками читать.

АктСвер 3.01

Добавлено: 30 Ноябрь 2020, 9:38
Admin
Или напомните кусочек кода для ручного разбора XML т.к. повторюсь, iQXML не устраивает.

АктСвер 3.01

Добавлено: 30 Ноябрь 2020, 10:35
Игорь Столяров
Admin писал(а): 30 Ноябрь 2020, 9:38iQXML не устраивает
iQXML сдох. Года 3-4 назад все парсеры переписали на штатный разбор Clarion по
примеру Юрия (ещё раз спасибо !): viewtopic.php?f=1&t=3390

Что такое "АктСвер 3.01" - не знаю, но если дадите описание, то посмотрю и скажу. :)

АктСвер 3.01

Добавлено: 30 Ноябрь 2020, 10:42
Yufil
Поищи в этом форуме по слову FillDomQueue.
Рассказывал, как это делается встроенными классами Кларион, начиная с cw6.

АктСвер 3.01

Добавлено: 30 Ноябрь 2020, 10:45
Игорь Столяров
Yufil писал(а): 30 Ноябрь 2020, 10:42 Рассказывал, как это делается
Вот Ваше описание. Это же как настольная библия (или прикроватная камасутра) ... :)

АктСвер 3.01

Добавлено: 30 Ноябрь 2020, 12:12
Admin
Спасибо. Завтра разберу.

АктСвер 3.01

Добавлено: 01 Декабрь 2020, 3:33
Admin
Не могу найти исходник FillDomQueue. Киньте кто ни будь сюда или в личку.

АктСвер 3.01

Добавлено: 01 Декабрь 2020, 7:35
Игорь Столяров
Admin писал(а): 01 Декабрь 2020, 3:33 Не могу найти исходник FillDomQueue
Как-то Вы сразу решили начать с переписывания всего ...
А этот исходник вообще существует ? Реализация работы с XML в Clarion выполнена
в библиотеках Clacpxml.dll и Claxmlty.dll - они добавляются в проект. И это всё ...

АктСвер 3.01

Добавлено: 01 Декабрь 2020, 7:44
Admin
Я не в теме.
FillDomQueue генерирует дерево по которому потом в коде бежим в цикле.
FillDomQueue я так понял написал Юрий Философов но ссылка на Тактик Диполь не работает.

АктСвер 3.01

Добавлено: 01 Декабрь 2020, 8:25
Игорь Столяров
Admin писал(а): 01 Декабрь 2020, 7:44 FillDomQueue я так понял написал Юрий Философов
Нет. Метод FillDomQueue описан в cpxml.inc / clw которые находятся в папке LibSrc Clarion.
Есть штатный PDF с описанием, он полезен для понимания как это вообще работает.

АктСвер 3.01

Добавлено: 01 Декабрь 2020, 8:58
Admin
Спасибо.

АктСвер 3.01

Добавлено: 01 Декабрь 2020, 9:42
Admin
Я правильно понимаю что XML с русскими тегами не читаются?
Обычный английский без проблем.
При чтении русского через XMLFileToDOM получаю NULL

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

<?xml version="1.0" encoding="windows-1251"?>
<Файл Формат="АктСвер" ВерсияФормата="3.01" Имя="ON_ACCOUNTS___20201123_f36a5aa6-5cb1-4c2c-94ae-31f1df41bf18">
...
</Файл>

АктСвер 3.01

Добавлено: 01 Декабрь 2020, 9:45
Yufil
1. В Кларионе есть шаблон ViewXML. Если его вызвать вызовом кнопки где-то в уголке, то всё подключится на автомате.
Обычно я так и делаю :)
2. Шаблон загружает файл в очередь, используя FillDomQueue, после чего показывает XML в виде очереди.
Кстати, полезно посмотреть загруженный XML-файл, сразу будет видно, где что лежит.

3. Если при загрузке происходит авария, то XML-файл не загрузится, надо менять кодовую таблицу.
Вот рабочий фрагмент ( документ лежит в Блоб-поле БД )

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

LoadXMLDoc   Routine  ! Разборка XML
             Data
XMLText      Cstr
WinPos       Long
             Code
             XMLText.LoadFromBlob(BlobField)
             WinPos=Instring('"WINDOWS-1251"',XMLText.S[1:60],1,1)
             If WinPos
                XMLText.S[WinPos : WinPos+13]='"UTF-8"'
                XMLText.ToUtf8()
             End

             xmlDoc &= XMLStringToDOM(XMLText.S)

             If XMLDoc &= Null
              If BlobToFile(BlobField, 'Error.XML') .
              Return(1)
            End
            Exit
Документ загружается в память, в начале документа ищем "WINDOWS-1251" ( такие у меня документы ), заменяем на "UTF-8" и перекодируем текс, а потом загружаем через XMLStringToDOM.
Если документ лежит не в Блобе, заменяем LoadFromBlob на LoadFromFile.

4. Если ViewXML работает, но показывает кракозябли - это нормально, данные надо будет перекодировать из UTF-8 в Win1251.
5. Мой адрес на tacis-dipol.ru давно ликвидирован.

АктСвер 3.01

Добавлено: 01 Декабрь 2020, 9:46
Yufil
Admin писал(а): 01 Декабрь 2020, 9:42 Я правильно понимаю что XML с русскими тегами не читаются?
Обычный английский без проблем.
При чтении русского через XMLFileToDOM получаю NULL

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

<?xml version="1.0" encoding="windows-1251"?>
<Файл Формат="АктСвер" ВерсияФормата="3.01" Имя="ON_ACCOUNTS___20201123_f36a5aa6-5cb1-4c2c-94ae-31f1df41bf18">
...
</Файл>
Надо перекодировать файл в UTF-8, после чего всё будет, никаких проблем

АктСвер 3.01

Добавлено: 01 Декабрь 2020, 9:49
Admin
Это понял. Только нужно еще encoding="UTF-8" добавить