Работа с Меркурием

Сканеры, кассы, ККТ и т.д.
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1209
Зарегистрирован: 06 Ноябрь 2014, 12:48

Работа с Меркурием

Сообщение finsoftrz » 14 Июнь 2019, 22:13

Игорь Столяров писал(а):
14 Июнь 2019, 21:36
finsoftrz писал(а):
14 Июнь 2019, 21:08
Игорь, получилось список стран прочитать?
Спасибо, да, конечно. Страны, ед. измерения и т.д. - всё грузится.
Конкретно со странами - был затык из-за неправильного тега в шапке запроса из примера на сайте Ветис.API.
Взял шапку с Вашего примера в этой ветке форума - всё загрузилось с полутыка … :)
Теперь развлекитесь с гашением... :-)
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4040
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Работа с Меркурием

Сообщение Игорь Столяров » 14 Июнь 2019, 22:37

finsoftrz писал(а):
14 Июнь 2019, 22:13
Теперь развлекитесь с гашением...
Я ещё не получил список ВСД по выборке (руки-то всего две).
Надеюсь пробурить это направление на выходных.
Запросы, парсинг XML и т.д. - это работает, но нужно же ещё интерфейсную обёртку всего этого сделать.

Как получу выборку ВСД в интерфейсе - устрою Заказчику платный просмотр презентации проекта. ;)
А вот потом уже буду думать про гашение … как я понимаю - там лес дремучий и густой. :(
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1209
Зарегистрирован: 06 Ноябрь 2014, 12:48

Работа с Меркурием

Сообщение finsoftrz » 15 Июнь 2019, 9:28

Гашение плотно связано с запросом списка непогашенных всд. При гашении надо отправлять значения в тэгах, которые точно совпадают с исходными. Но там всякие нюансы могут быть. Например, отправлять надо не все тэги, некоторые тэги могут иначе называться. И все это мало документировано, приходится методом проб определять.

Кстати, я не стал создавать структуры данных в словаре. Сделал отдельную app (dll) для ветиса. В глобальных переменных этой app создал кьюшки, в которые загружаются ВСД. Одна заглавная, еще подчиненные для сохранения вложенных списков. Для вложенных в заглавной сохраняются начальный и конечный номера строк в подчиненной кьюшке. Так получилось удобно, можно быстро модифицировать струтуры кьюшек, не пересобирая весь проект. То есть типа морды в вебе, только в программе на кларионе. В локальной базе никаких всд не хранится.
Рязань решает.

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1209
Зарегистрирован: 06 Ноябрь 2014, 12:48

Работа с Меркурием

Сообщение finsoftrz » 15 Июнь 2019, 9:30

Бывают и приколы. Например, одни поставщики учудили и в номере транспортной накладной прислали ФИО водителя и номер его телефона. Пришлось в принимающей структуре увеличивать длину номера накладной...
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4040
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Работа с Меркурием

Сообщение Игорь Столяров » 15 Июнь 2019, 9:47

finsoftrz писал(а):
15 Июнь 2019, 9:30
в номере транспортной накладной прислали ФИО водителя
Я почитал интернет … ;) В связи с законотворческим поносом, куча фирм, фирмочек и просто студенческих общаг
кинулись поиметь денег с продаванов на обязаловке подключения к сервисам ЕГАИС, Меркурию, маркировке обуви и т.д. :)
Так, что там можно ожидать ВСЁ ! :)

Вот несколько дней работаю с сервисом и вижу, что периодически отваливается не только Ветис.API, но весь сайт Меркурия. :(
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1209
Зарегистрирован: 06 Ноябрь 2014, 12:48

Работа с Меркурием

Сообщение finsoftrz » 15 Июнь 2019, 10:02

Да, там есть такая фишка. Официально заявлено, что при превышении нагрузки на их сайт, возвращается невнятное сообщение об ошибке и надо делать повторный запрос. Я у себя поставил на автомат 10 попыток, обычно хватает для получения результата.

Сейчас еще глянул, как частично принять или полностью отказаться от груза. В общем, там надо все исходные сведения указать, как при полном подтверждении. Далее заполнить значение тэга, что груз принят частично или не принят. Затем полностью продублировать исходные сведения в разделе возврата. Отличие в количестве. Такая длинная портянка получается. А есть еще варианты, когда заявленная информация о грузе на соответствует... Наверно, достаточно обеспечить ввод принимаемого количества и проверку, чтобы оно не превышало исходное (хотя, на самом деле, как я понял, может и превышать). И расширить содержимое запроса, включив в него информацию о возвращаемой (не принимаемой) части груза.
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4040
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Работа с Меркурием

Сообщение Игорь Столяров » 15 Июнь 2019, 11:45

finsoftrz писал(а):
15 Июнь 2019, 10:02
как частично принять или полностью отказаться от груза
К сожалению, пока не могу поддержать обсуждение этой темы - погряз в справочниках … :(
Но рассчитываю, что с понедельника уже бодро буду двигаться непосредственно к работе с ВСД. :)
«V» значит Вендетта !

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4040
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Работа с Меркурием

Сообщение Игорь Столяров » 16 Июнь 2019, 7:11

Пары дней работы со справочной системой Меркурий уже дают представление, что государственные АИС - это жесть ! :(

1. Описание системы Ветис.API напоминает письмо Шарика и Матроскина из Простоквашино родителям дяди Фёдора.
Многие примеры / ответы запросов не доступы, полно ляпов, старых версий и откровенных ошибок.
Видно, что его подписывали долгие годы и разные люди в меру своих способностей, нет единой архитектуры и терминологии.
Одно и то же может называться "площадка", "поднадзорный объект", "предприятие" - даже в одной статье … :(
Наложение названий переменных и типов данных, поля с названием GUID / UUID имеют тип данных UUID ...

2. Катастрофически раздуты методы доступа - их просто добавляли сверху по мере развития системы, боясь трогать ядро.
(напоминает Clarion после 6.3). Всю работу со справочниками, в т.ч. и связанными (страна - регион и т.д.) можно было бы
легко свести к одному понятному набору запросов с указанием вида справочника - вместо этого их куча для каждого справочника,
плюс ещё их релизы. Месиво бесполезных структур и методов - разве, что у них штат и зарплата считается от их кол-ва …

3. Бог с ним, что в 2019 г. сервис ничего не знает о существовании JSON.
Но зачастую обёртка запроса в XML по размеру превышает сам запрос. Нет единного сервиса обработки запросов и описаний
пространства имён. Куча ссылок и их релизов …

4. Дублирование наименований тегов внутри одного пакета для разных данных. Как-то спасает дополнение наименования
тега родительским, но есть списочные структуры внутри тега и я пока не знаю как это разрулить при парсинге в один проход … :(

Со временем к этому маразму адаптируешься и работаешь, но поначалу хочется налить горькой и забыться в страшном сне. :)
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1209
Зарегистрирован: 06 Ноябрь 2014, 12:48

Работа с Меркурием

Сообщение finsoftrz » 16 Июнь 2019, 8:46

Не обязательно за один проход. Я генерю vbscript и им парсю xml. Вот так выглядит фрагмент разбора вложенного списка. На выходе получаем временный файл, в котором структуры развернуты в линейный список. Из временного файла уже автоматом засасывается в несколько кьюшек.

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

  fsXmlPar.LoadQueueHand('lor:queueDocs',lor:queueDocs)  !сопроводительные документы
  fsXmlPar.AddScriptInt('Set NodeList = Root.getElementsByTagName("vd:vetDocument")')
  fsXmlPar.AddScriptInt('For Each Elem In NodeList')
  fsXmlPar.AddScriptInt('   SET per = Elem.getElementsByTagName("bs:uuid")(0)')
  fsXmlPar.AddScriptInt('   uuidDoc = per.text')
  fsXmlPar.AddScriptInt('   Set NodeList2 = Elem.getElementsByTagName("vd:referencedDocument")')
  fsXmlPar.AddScriptInt('   For Each Elem2 In NodeList2')
  fsXmlPar.AddScriptInt('       SET per = Elem2.getElementsByTagName("vd:type")(0)')
  fsXmlPar.AddScriptInt('       ttn_type = per.text')
  fsXmlPar.AddScriptInt('       if ttn_type="1" or ttn_type="5" then')
  fsXmlPar.AddScriptInt('          SET per = Elem2.getElementsByTagName("vd:issueNumber")(0)')
  fsXmlPar.AddScriptInt('          ttn_numb = per.text')
  fsXmlPar.AddScriptInt('          SET per = Elem2.getElementsByTagName("vd:issueDate")(0)')
  fsXmlPar.AddScriptInt('          ttn_date = per.text')
  fsXmlPar.AddScriptInt('          outFile.WriteLine "uuidDoc=" & uuidDoc')
  fsXmlPar.AddScriptInt('          outFile.WriteLine "ttn_type=" & ttn_type')
  fsXmlPar.AddScriptInt('          outFile.WriteLine "ttn_numb=" & ttn_numb')
  fsXmlPar.AddScriptInt('          outFile.WriteLine "ttn_date=" & ttn_date')
  fsXmlPar.AddScriptInt('          outFile.WriteLine "@add"')
  fsXmlPar.AddScriptInt('          Exit For')
  fsXmlPar.AddScriptInt('       end if')
  fsXmlPar.AddScriptInt('   Next')
  fsXmlPar.AddScriptInt('Next')
  fsXmlPar.AddScriptInt('Set NodeList = Nothing')
  fsXmlPar.AddScriptInt('Set NodeList2 = Nothing')
  fsXmlPar.AddScriptInt('')
Рязань решает.

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2252
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Работа с Меркурием

Сообщение Дед Пахом » 16 Июнь 2019, 9:05

В 2019-м, я смотрю, не все ещё и про XPath слышали.
С уважением, ДП

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1209
Зарегистрирован: 06 Ноябрь 2014, 12:48

Работа с Меркурием

Сообщение finsoftrz » 16 Июнь 2019, 9:07

По поводу Ветис, да, там все заморочено. Как сказал кто-то на форуме 1с-ников, писали крутые джависты... :-) Весело, молодежно. Сейчас это в порядке вещей. Надо, Игорь, выдавливать из себя синдром отличника, иначе в дурку загреметь можно. :-)

Мне проще было, имея опыт работы с Егаис. Уж больше двух лет проработало, до сих пор все офигевают. Вот, например, на днях звонит клиент. Слушай, говорит, нам письмо пришло, что мы продали алкоголь ниже разрешенной цены. Можем на уровне программы ввести контроль? Говорю, ок, у нас уже все есть, мы предлагали, вы сказали, что наценка большая и при скидках ниже минимальной не опустимся. Нет, есть несколько наименований дешевой водки, где могло стрельнуть, сейчас разбираемся. Еще через пару дней звонит, говорит, слушай, смотрим по кассе и в офд, у нас по чеку, по которому написали претензию, пробито одно наименование, а в личном кабинете Егаис выводится другое! Причем фактически была пробита позиция, на которое ограничение по минимальной цене не распространяется. И еще интересно, что в этом чеке были пробиты 2 одинаковые бутылки. А в егаис два разных наименования. Поднимаю файл, который отправлялся в егаис по этому чеку. Там обе позиции одинаковые, штрих-код от фактически проданных позиций. Разница только в марках. Вопрос, что это было... Как я понимаю, чисто технически на одну бутылку могли быть наклеены штрих-код от одной позиции, а марка от другой. Или в Егаис сбой какой был. А проверить все по егаис очень затруднительно, там не дают возможность, как в складских программах, просветить все данные в несколько кликов. Такая закрытая махина, куда данные улетаю, а как там все, никто не знает. Приходится все хранить параллельно у себя, иначе потом концов не найдешь...
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4040
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Работа с Меркурием

Сообщение Игорь Столяров » 16 Июнь 2019, 9:13

finsoftrz писал(а):
16 Июнь 2019, 9:07
иначе в дурку загреметь можно
Это да, надо будет позвонить в дурку, сказать что бы койку не занимали. ;)
Потому, что я начал работать с запросами на модификацию и ВСД и стало понятно, что справочники - это детская игра в крысу.
Настоящее веселье - там где асинхронная обработка с запросом результата … :)
Последний раз редактировалось Игорь Столяров 16 Июнь 2019, 9:18, всего редактировалось 2 раза.
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1209
Зарегистрирован: 06 Ноябрь 2014, 12:48

Работа с Меркурием

Сообщение finsoftrz » 16 Июнь 2019, 9:13

Дед Пахом писал(а):
16 Июнь 2019, 9:05
В 2019-м, я смотрю, не все ещё и про XPath слышали.
В данном случае не нужно. Все xml создаются на сервере ветиса, теги фиксированные. А вот в Егаис, да, используется XPath. Файл передается в том виде, как поставщик сформировал. А у некоторых поставщиков есть программисты, которые по каким-то причинам свои тэги пихать любят...
Рязань решает.

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2252
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Работа с Меркурием

Сообщение Дед Пахом » 16 Июнь 2019, 9:18

finsoftrz писал(а):
16 Июнь 2019, 9:13
В данном случае не нужно.
Ну не нужно так не нужно, хотя вместо 2-х циклов и проверки if ttn_type="1" or ttn_type="5" then можно написать SelectNodes(условие) и один цикл, короче выйдет.
С уважением, ДП

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1209
Зарегистрирован: 06 Ноябрь 2014, 12:48

Работа с Меркурием

Сообщение finsoftrz » 16 Июнь 2019, 9:21

Игорь Столяров писал(а):
16 Июнь 2019, 9:13
finsoftrz писал(а):
16 Июнь 2019, 9:07
иначе в дурку загреметь можно
Это да, надо будет позвонить в дурку, сказать что бы койку не занимали. ;)
Потому, что я начал работать с запросами на модификацию и ВСД и уже понял что справочники - это детская игра в крысу.
Настоящее веселье - это асинхронная обработка с запросом результата … :)
Я из себя синдром отличника выдавливал, когда онлайн кассы запускали. Еще одно веселая тема... Когда касс немного и работа на них не плотная, это одно дело. А когда несколько десятков касс и очереди покупателей на них, плюс еще алкоголь, безналичные платежи... В общем, все это не может работать на 100% стабильно по определению. Мы можем только какими-то способами снизить частоту возникновения проблем. Я поначалу думал по привычке, сейчас все отладим, будет все работать, как часики. Потом у меня даже давление скакнуло. Потом просто принял правила игры. Наблюдай, думай, сохраняй спокойствие, делай, что можешь. А как будет, так и будет. У других все еще хуже...
Рязань решает.

Ответить