ЭДО

Clarion, Clarion 7

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

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

ЭДО

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

Собственно готовый парсер документа ЭДО на основании штатного 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
Последний раз редактировалось Игорь Столяров 19 Февраль 2023, 12:25, всего редактировалось 1 раз.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

ЭДО

Сообщение finsoftrz »

Сорри, Игорь, Вы мой пример в начале этой ветки смотрели? Зачем тогда постите нерабочий код?
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7372
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

ЭДО

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

finsoftrz писал(а): 15 Февраль 2023, 16:53 Вы мой пример в начале этой ветки смотрели
Конечно ! Мы его даже обсуждали.
Буду очень благодарен - если подскажете в чём у меня нерабочий код ...
Только пожалуйста учитывайте - что он сейчас делает именно то, что я рассказал. ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

ЭДО

Сообщение finsoftrz »

Чересчур лихо определяете gtin. :-)
Ну и еще забыли про некоторые нужные реквизиты. Все есть в примере, он давно обкатан на разных поставщиках.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7372
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

ЭДО

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

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

Главное во 2-ом примере: можно получать из любого XML, любые табличные данные - одним универсальным парсером ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

ЭДО

Сообщение finsoftrz »

Смысл такой, что в накладной используются вложенные списки. Поэтому схема одним оператором в кьюшку не работает. В приведенном Вами коде некорректное определение штрих-кода товара. Может сработать на каком-то отдельном файле, на других не будет работать. Еще надо учесть, что штрих-код может храниться в одном из двух тегов. То есть для корректной работы придется использовать циклы и флаги, как Вы вначале и предполагали. Потребность в xpath для разбора файла из эдо я пока не встречал. :-)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7372
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

ЭДО

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

Спасибо, что посмотрели и конкретные вопросы. :)
finsoftrz писал(а): 15 Февраль 2023, 20:31 Смысл такой, что в накладной используются вложенные списки.
Это понятно. Не все работают с марками (во вложенных списках), но их добавление - это рабочий вопрос.
Есть разные варианты как это разрулить ... нужно будет попробовать и посмотреть.
finsoftrz писал(а): 15 Февраль 2023, 20:31 Еще надо учесть, что штрих-код может храниться в одном из двух тегов.
Также как и у Вас: добавлять в QUEUE описание обоих полей и ПОСЛЕ распарса смотреть, что поймалось и что использовать.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

ЭДО

Сообщение finsoftrz »

Обычный шк немаркированных товаров тоже во вложенном списке. А он необходим для сопоставления.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7372
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

ЭДО

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

Сделать специализированный парсер для содержания ЭДО с прошитыми именами тегов - это самое простое.
Но как-то совсем уж грустно. :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

ЭДО

Сообщение finsoftrz »

Варианты?
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7372
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

ЭДО

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

finsoftrz писал(а): 15 Февраль 2023, 22:08Варианты?
1. Занимаясь этим вопросом - уже сделал парсер на штатном классе Clarion, который прекрасно
разбирает в очередь любые (!!!) списочные XML со смешанной структурой (теги и аттрибуты).
Кстати, делает это очень быстро. И за это никому не нужно платить и продавать почку. ;)

2. Да, в документах ЭДО, кроме непродуманной и убогой структуры, ещё понадобаляли костылей
с кодами маркировки. Здесь лучше вообще ничего не комментировать, а принять как есть.
Это нюансы - которые нужно знать. У Вас есть такой опыт и знания. Нужно это конвертировать в код. :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7372
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

ЭДО

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

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
Последний раз редактировалось Игорь Столяров 19 Февраль 2023, 12:25, всего редактировалось 1 раз.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7372
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

ЭДО

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

finsoftrz писал(а): 12 Февраль 2023, 23:05 Объявляем сбор денег на easy xml?
Даже у евреев, удочку для ловли рыбы бог бесплатно давал ! :idied:
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

ЭДО

Сообщение finsoftrz »

Проверить не получится, так как я "штатную" библиотеку для xml не использую и не вижу смысла с ней ковыряться по уже озвученным причинам. Ваш код посмотрел. Как по мне, с привлечением vbscript намного проще и понятнее. Метод с передачей в качестве параметров двух кьюшек мне тоже в голову приходил, но отказался, так как это средство унификации, а вложенных структур может быть больше, чем одна. Поэтому было сделано через прямую инъекцию кода на vbscript, без убирания в методы класса. Альтернативное решение можно поискать. Например, перед вызовом метода загрузки в основную кьюшку, определить список кьюшек для вложенных структур и с именем связующего тега. Не уверен только, что это будет проще прямой инъекции vbscript кода. Так как сам по себе этот код простой и не надо дополнительных структур и лишнего слоя абстракций.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7372
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

ЭДО

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

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