Страница 7 из 8
ЭДО
Добавлено: 15 Февраль 2023, 14:07
Игорь Столяров
Собственно готовый парсер документа ЭДО на основании штатного Clarion CpXml.
В примере показано как отжать содержание накладной:
Код: Выделить всё
qContent Queue ! СПИСОК СОДЕРЖАНИЯ С НАИМЕНОВАНИЕМ ТЕГОВ / АТТРИБУТОВ
TovName cString(121),Name('НаимТов')
NoNDS cString( 21),Name('БезНДС')
GTIN cString( 31),Name('Значен')
Summa Real, Name('СтТовУчНал')
end
! И отжали его из XML пакета
LoadQueueFromXML(StrXML,qContent,'файл/документ/таблсчфакт','сведтов')
Всё предельно просто и открыто. Аналогично контрагенты и ответственные лица.
Можно завернуть в класс - но там всего один метод. Ну ничего тут нет военного ...
Пример см.
viewtopic.php?t=4976
ЭДО
Добавлено: 15 Февраль 2023, 16:53
finsoftrz
Сорри, Игорь, Вы мой пример в начале этой ветки смотрели? Зачем тогда постите нерабочий код?
ЭДО
Добавлено: 15 Февраль 2023, 18:05
Игорь Столяров
finsoftrz писал(а): 15 Февраль 2023, 16:53
Вы мой пример в начале этой ветки смотрели
Конечно ! Мы его даже обсуждали.
Буду очень благодарен - если подскажете в чём у меня нерабочий код ...
Только пожалуйста учитывайте - что он сейчас делает именно то, что я рассказал.

ЭДО
Добавлено: 15 Февраль 2023, 18:34
finsoftrz
Чересчур лихо определяете gtin.
Ну и еще забыли про некоторые нужные реквизиты. Все есть в примере, он давно обкатан на разных поставщиках.
ЭДО
Добавлено: 15 Февраль 2023, 19:55
Игорь Столяров
finsoftrz писал(а): 15 Февраль 2023, 18:34
Все есть в примере, он давно обкатан на разных поставщиках
Не сомневаюсь. Я всего лишь показал как можно получить из XML нужные данные, а потребности - разные.
Сделаю полную загрузку данных из документа ЭДО и выложу (если не возражаете - возьму за основу Ваш проверенный пример).
Главное во 2-ом примере: можно получать из любого XML, любые табличные данные - одним универсальным парсером ...

ЭДО
Добавлено: 15 Февраль 2023, 20:31
finsoftrz
Смысл такой, что в накладной используются вложенные списки. Поэтому схема одним оператором в кьюшку не работает. В приведенном Вами коде некорректное определение штрих-кода товара. Может сработать на каком-то отдельном файле, на других не будет работать. Еще надо учесть, что штрих-код может храниться в одном из двух тегов. То есть для корректной работы придется использовать циклы и флаги, как Вы вначале и предполагали. Потребность в xpath для разбора файла из эдо я пока не встречал.

ЭДО
Добавлено: 15 Февраль 2023, 20:56
Игорь Столяров
Спасибо, что посмотрели и конкретные вопросы.
finsoftrz писал(а): 15 Февраль 2023, 20:31
Смысл такой, что в накладной используются вложенные списки.
Это понятно. Не все работают с марками (во вложенных списках), но их добавление - это рабочий вопрос.
Есть разные варианты как это разрулить ... нужно будет попробовать и посмотреть.
finsoftrz писал(а): 15 Февраль 2023, 20:31
Еще надо учесть, что штрих-код может храниться в одном из двух тегов.
Также как и у Вас: добавлять в QUEUE описание обоих полей и ПОСЛЕ распарса смотреть, что поймалось и что использовать.
ЭДО
Добавлено: 15 Февраль 2023, 21:13
finsoftrz
Обычный шк немаркированных товаров тоже во вложенном списке. А он необходим для сопоставления.
ЭДО
Добавлено: 15 Февраль 2023, 21:31
Игорь Столяров
Сделать специализированный парсер для содержания ЭДО с прошитыми именами тегов - это самое простое.
Но как-то совсем уж грустно.

ЭДО
Добавлено: 15 Февраль 2023, 22:08
finsoftrz
Варианты?
ЭДО
Добавлено: 16 Февраль 2023, 7:28
Игорь Столяров
finsoftrz писал(а): 15 Февраль 2023, 22:08Варианты?
1. Занимаясь этим вопросом - уже сделал парсер на штатном классе Clarion, который прекрасно
разбирает в очередь любые (!!!) списочные XML со смешанной структурой (теги и аттрибуты).
Кстати, делает это очень быстро. И за это никому не нужно платить и продавать почку.
2. Да, в документах ЭДО, кроме непродуманной и убогой структуры, ещё понадобаляли костылей
с кодами маркировки. Здесь лучше вообще ничего не комментировать, а принять как есть.
Это нюансы - которые нужно знать. У Вас есть такой опыт и знания. Нужно это конвертировать в код.

ЭДО
Добавлено: 17 Февраль 2023, 7:26
Игорь Столяров
finsoftrz писал(а): 15 Февраль 2023, 22:08Варианты?
Полностью повторил Ваш пример парсера на Clarion (только с прямой записью в Queue).
Создаётся отдельный список с информационными полями для строк документа.
Все данные из XML ЭДО отжаты, но формировать штрих-код на основании кода ОСУ и инфо-полей - это уже не парсерные дела.
Буду благодарен если есть возможность проверить на Ваших данных.
Также буду рад любым замечаниям (особенно подтверждённым примерами файлов ЭДО XML).
И, кстати, пойдёт как пример парса скрытых массивов XML типа:
Код: Выделить всё
...
<ИнфПолФХЖ2 Идентиф="СпецификацияДата" Значен="20.09.2020" />
<ИнфПолФХЖ2 Идентиф="УникНомерМеста" Значен="12000056822160317001" />
<ИнфПолФХЖ2 Идентиф="НомерМеста" Значен="1" />
<ИнфПолФХЖ2 Идентиф="ВесМестаБрутто" Значен="3" />
<ИнфПолФХЖ2 Идентиф="ВесМестаНетто" Значен="3.50" />
<ИнфПолФХЖ2 Идентиф="ОбъемМестаБрутто" Значен="0.35" />
<ИнфПолФХЖ2 Идентиф="ОбъемМестаНетто" Значен="0.30" />
<ИнфПолФХЖ2 Идентиф="ВысотаМеста" Значен="0.78" />
<ИнфПолФХЖ2 Идентиф="ТранспортныйДокНомер" Значен="АМ555-1" />
<ИнфПолФХЖ2 Идентиф="ТранспортныйДокДата" Значен="19.10.2020" />
</СведТов>
Пример см.
viewtopic.php?t=4976
ЭДО
Добавлено: 17 Февраль 2023, 8:32
Игорь Столяров
finsoftrz писал(а): 12 Февраль 2023, 23:05
Объявляем сбор денег на easy xml?
Даже у евреев, удочку для ловли рыбы бог бесплатно давал !

ЭДО
Добавлено: 17 Февраль 2023, 9:17
finsoftrz
Проверить не получится, так как я "штатную" библиотеку для xml не использую и не вижу смысла с ней ковыряться по уже озвученным причинам. Ваш код посмотрел. Как по мне, с привлечением vbscript намного проще и понятнее. Метод с передачей в качестве параметров двух кьюшек мне тоже в голову приходил, но отказался, так как это средство унификации, а вложенных структур может быть больше, чем одна. Поэтому было сделано через прямую инъекцию кода на vbscript, без убирания в методы класса. Альтернативное решение можно поискать. Например, перед вызовом метода загрузки в основную кьюшку, определить список кьюшек для вложенных структур и с именем связующего тега. Не уверен только, что это будет проще прямой инъекции vbscript кода. Так как сам по себе этот код простой и не надо дополнительных структур и лишнего слоя абстракций.
ЭДО
Добавлено: 17 Февраль 2023, 10:41
Игорь Столяров
finsoftrz писал(а): 17 Февраль 2023, 9:17
не вижу смысла с ней ковыряться
Не вопрос, но в комплекте идёт готовый пример "открыл и запустил". Там ведь ничего делать-то не надо.
finsoftrz писал(а): 17 Февраль 2023, 9:17
Альтернативное решение можно поискать.
Самое простое - это тупо добавить в процедуру парсера все правила + запись в конкретную БД. И забыть.

Но ведь рано или поздно лень будет побеждена, и я заверну вот это вот всё в отдельный класс ...
