|
[Search] Поиск   [Recent Topics] Последние темы   [Hottest Topics] Горячие темы   [Members]  Список участников   [Groups] На главную страницу 
[Register] Регистрация / 
[Login] Вход 
Взаимодействие с учетными системами хозяйствующих субъектов  XML
Индекс форума » Компонент МЕРКУРИЙ
Автор Сообщение
Vladimir2017

[Avatar]

Зарегистрирован: 02/10/2017 14:31:03
Сообщений: 362
Оффлайн

Владимир Игнатов wrote:Да и это не работает, как планировалось! Если Вы сделаете запрос "от той же секунды", которая у Вас последняя в базе, вы получите снова одну или несколько записей за эту секунду, которые у Вас уже есть. А если Вы сделаете запрос "со следующей секунды", можете потерять запись, которая была сделана в ту же секунду, когда Вам отдали последние записи на прошлом запросе, но эта последняя (последние) не попала в выдачу Вам, т.к. ее тогда еще не было.
В любом случае - поведение не то, что планировалось! Делать можно только по ID, он там все равно есть, надеюсь (не надо делать первичным ключом базы GUID/UUID, по ним поиск по индексу куда дольше идет). И выдавать в порядке возрастания ID. И "арифметика" в этом случае проста: в начале просим от 0, затем - от последнего пришедшего. Для сервера запрашиваемый ID означает "where ID>$ID order by ID".
Вариант "по времени" - попытка ограничить размер поиска - "в прошлом месяце", "в прошлом квартале". Для цели "скопировать весь справочник себе" не очень подходит.


Вы еще не учли то что у Ветиса на некоторых серверах неправильно выставлено время и проблему часовых поясов. Впрочем, все это лирика, выход есть такой: создается база для ВСД, отдельно добавляется поле типа датавремя или что-то похожее. При добавлении записи туда проставляется текущее время (триггер, вычисляемое поле или программно). Перед следующим обновлением, выбирается самая большая дата по этому полю, от нее отнимаются сутки (поправка на ошибки времени, часовые пояса, и т.д.) и подставляется в запрос getVetDocumentChangesListRequest как начальная дата, а финишная выставляется как текущее время. При этом при добавлении в базу надо смотреть - если это старая запись то она обновляется, если новая то добавляется.

не надо делать первичным ключом базы GUID/UUID, по ним поиск по индексу куда дольше идет

Сильно зависит от того как эти гуиды генерируются, если по порядку то поиск не сильно уступит автоинкрементному интеджеру, но в случае с Ветисом, вы правы.
Владимир Игнатов


Зарегистрирован: 02/08/2017 09:19:30
Сообщений: 581
Оффлайн

Vladimir2017 wrote:
Владимир Игнатов wrote:Да и это не работает, как планировалось! Если Вы сделаете запрос "от той же секунды", которая у Вас последняя в базе, вы получите снова одну или несколько записей за эту секунду, которые у Вас уже есть. А если Вы сделаете запрос "со следующей секунды", можете потерять запись, которая была сделана в ту же секунду, когда Вам отдали последние записи на прошлом запросе, но эта последняя (последние) не попала в выдачу Вам, т.к. ее тогда еще не было.
В любом случае - поведение не то, что планировалось! Делать можно только по ID, он там все равно есть, надеюсь (не надо делать первичным ключом базы GUID/UUID, по ним поиск по индексу куда дольше идет). И выдавать в порядке возрастания ID. И "арифметика" в этом случае проста: в начале просим от 0, затем - от последнего пришедшего. Для сервера запрашиваемый ID означает "where ID>$ID order by ID".
Вариант "по времени" - попытка ограничить размер поиска - "в прошлом месяце", "в прошлом квартале". Для цели "скопировать весь справочник себе" не очень подходит.


Вы еще не учли то что у Ветиса на некоторых серверах неправильно выставлено время и проблему часовых поясов. Впрочем, все это лирика, выход есть такой: создается база для ВСД, отдельно добавляется поле типа датавремя или что-то похожее. При добавлении записи туда проставляется текущее время (триггер, вычисляемое поле или программно). Перед следующим обновлением, выбирается самая большая дата по этому полю, от нее отнимаются сутки (поправка на ошибки времени, часовые пояса, и т.д.) и подставляется в запрос getVetDocumentChangesListRequest как начальная дата, а финишная выставляется как текущее время. При этом при добавлении в базу надо смотреть - если это старая запись то она обновляется, если новая то добавляется.

не надо делать первичным ключом базы GUID/UUID, по ним поиск по индексу куда дольше идет

Сильно зависит от того как эти гуиды генерируются, если по порядку то поиск не сильно уступит автоинкрементному интеджеру, но в случае с Ветисом, вы правы.

Финишную дату можно не указывать, будет последняя запись на сервере. Проблема часовых поясов решается сама, если ведение времени доверить серверу Ветиса, а спрашивать - сначала с 1970-01-01, а затем с последней возвращенной. Тогда максимум "дубли" будут в пределах этой первой секунды. Если только, конечно, у Ветиса между своими серверами время синхронизировано или если сервер один. Иначе может получиться, что разные люди (или шлюзы) на разных серверах добавляют записи по своему локальному времени, но эти записи могут оказаться "в прошлом" для "основного" сервера и, фактически, при запросе "от последней известной секунды" будут потеряны.

"если это старая запись то она обновляется, если новая то добавляется" - merge спасет отца русской демократии. Позволяет даже транзакцию не открывать.
GUID можно генерировать и sequential, но размер поля GUID - 2 машинных регистра, т.е., сравнение не в одну операцию, равно как и в базе в 2 раза больше места занимает (не про место на диске речь, а про время чтения-записи).

Это сообщение было редактировано 2 раз. Последнее обновление произошло в 01/02/2018 12:13:35

Sergey-Chelny

[Avatar]

Зарегистрирован: 07/09/2017 17:33:44
Сообщений: 101
Оффлайн

Vladimir2017 wrote:.... Впрочем, все это лирика, выход есть такой: создается база для ВСД, отдельно добавляется поле типа датавремя или что-то похожее. При добавлении записи туда проставляется текущее время (триггер, вычисляемое поле или программно). Перед следующим обновлением, выбирается самая большая дата по этому полю, от нее отнимаются сутки (поправка на ошибки времени, часовые пояса, и т.д.) и подставляется в запрос getVetDocumentChangesListRequest как начальная дата, а финишная выставляется как текущее время. При этом при добавлении в базу надо смотреть - если это старая запись то она обновляется, если новая то добавляется.
А есть какой то другой способ актуализировать все справочники и документы ? По моему это самый простой вариант :
У меня запущено 2 регламентных задания. В одном обновляются справочники, во втором обновляются документы. У справочников на момент создания записи заполняется реквизит "ТекущаяДата". Актуальность проверяется по ней. Документы проверяются за последние 7 дней (думаю за это время груз доберется до конечной точки и выполнится гашение или возврат. Можно изменить количество дней).
Кто хочет, тот ищет возможности, кто не хочет — ищет причины.
Владимир Игнатов


Зарегистрирован: 02/08/2017 09:19:30
Сообщений: 581
Оффлайн

Sergey-Chelny wrote:
Vladimir2017 wrote:.... Впрочем, все это лирика, выход есть такой: создается база для ВСД, отдельно добавляется поле типа датавремя или что-то похожее. При добавлении записи туда проставляется текущее время (триггер, вычисляемое поле или программно). Перед следующим обновлением, выбирается самая большая дата по этому полю, от нее отнимаются сутки (поправка на ошибки времени, часовые пояса, и т.д.) и подставляется в запрос getVetDocumentChangesListRequest как начальная дата, а финишная выставляется как текущее время. При этом при добавлении в базу надо смотреть - если это старая запись то она обновляется, если новая то добавляется.
А есть какой то другой способ актуализировать все справочники и документы ? По моему это самый простой вариант :
У меня запущено 2 регламентных задания. В одном обновляются справочники, во втором обновляются документы. У справочников на момент создания записи заполняется реквизит "ТекущаяДата". Актуальность проверяется по ней. Документы проверяются за последние 7 дней (думаю за это время груз доберется до конечной точки и выполнится гашение или возврат. Можно изменить количество дней).

Зачем хранить еще дату получения данных? Вы по этой дате не можете у сервера спросить новые данные, только по серверному времени, по его дате. Так он Вам ее уже сообщил, её и храните, по ней и спрашивайте "дальше". И проблемы часовых поясов и "за 7 дней" отпадают сами собой.

Про 7 дней: я не знаю Вашей задачи, но 7 дней за Калининграда до Владика с перегрузкой машина-поезд-машина - сомнительно мне.

Это сообщение было редактировано 1 раз. Последнее обновление произошло в 01/02/2018 12:20:14

Наталья25


Зарегистрирован: 24/01/2018 11:32:56
Сообщений: 8
Оффлайн

nmzn1 wrote:
Наталья25 wrote:
syv13 wrote:Добрый день!
логин - организация латинскими, дефис, дата регистрации, пароль- 10 знаков) Все копирую из письма)

логин и пароль ПОЛЬЗОВАТЕЛЯ, не организации))

Подскажите, пожалуйста, где мне получить тестовый логин. В письме были только для организации

у Вас доступ к меркурию есть вообще? Вы его получали, отправив заявление с заполненными таблицами?
т.е. можете зайти сюда https://mercury.vetrf.ru/hs/operatorui?_action=login&_language=ru с логином и паролем?
потому что сначала как-бы пишется завление на доступ к меркурию, после получения логина/пароля - подается заявка на тестовый апи доступ, а у Вас, такое впечатление, только демо-доступ...


Да, сюда зайти могу. а на t2-mercury.vetrf.ru нет. Хотя в письме был текст:

Вам выданы временные реквизиты доступа, необходимо изменить ваш пароль здесь

Вход в систему Меркурий - https://t2-mercury.vetrf.ru/hs

Вход в систему Аргус - https://t2-argus.vetrf.ru/hs

Вы можете войти под вашими реквизитами в систему "Ветис.Паспорт" по адресу http://t2-accounts.vetrf.ru . В данной системе вы можете менять информацию своего профиля.

ВНИМАНИЕ! Если вы не обращались за получением доступа в системы Россельхознадзора, то просто проигнорируйте это сообщение.

Справочная система - http://help.vetrf.ru
Rinat


Зарегистрирован: 08/02/2018 10:54:57
Сообщений: 43
Оффлайн

Добрый день! Пытаюсь создать новый ХС через Ветис.Api, запрос все сформировал, отправляю, получаю ответ, и пишет что
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Header/><env:Body><receiveApplicationResultResponse xmlns="http://api.vetrf.ru/schema/cdm/application/ws-definitions"><application xmlns="http://api.vetrf.ru/schema/cdm/application"><applicationId>82594528-4b57-42fa-b4e4-f9f655ebb13a</applicationId><status>REJECTED</status><servic­eId>mercury-g2b.service</serviceId><issuerId>fd8820a2-bb3f-4032-9584-9bc78c20fab1</issuerId><issueDate>2018-02-08T11:07:26.000+03:00</issueDate><rcvDate>2018-02-08T10:07:27.000+03:00</rcvDate><prdcRsltDate>2018-02-08T10:07:27.000+03:00</prdcRsltDate><errors><apl:error code="APLM0002" xmlns:apl="http://api.vetrf.ru/schema/cdm/application">Unsupported application data format</apl:error></errors></application></receiveApplicationResultRespo­nse></env:Body></env:Envelope>

Я понимаю что где то ошибка в запросе, но никак найти не могу, уже все перепроверил. Помогите плз решить проблему.
Код формирования запроса ниже

anig99


Зарегистрирован: 21/10/2016 20:05:29
Сообщений: 143
Оффлайн

Покажите результирующий запрос в xml. И какую версию api используете?


Rinat wrote:Добрый день! Пытаюсь создать новый ХС через Ветис.Api, запрос все сформировал, отправляю, получаю ответ, и пишет что
anig99


Зарегистрирован: 21/10/2016 20:05:29
Сообщений: 143
Оффлайн

Вопрос по гашению.
Секция
<vd:vetInspection> Осуществлен ли контроль груза гос.ветврачом на соответствие требованиям

Какого пользователя нужно туда писать? Если вет.врача, то получается, что для гашения всё равно нужен логин.ветврача. Если ничего не ставить или ставить пользователя ХС, то не будет ли это нарушением в оформлении ВСД?
Rinat


Зарегистрирован: 08/02/2018 10:54:57
Сообщений: 43
Оффлайн

anig99 wrote:Покажите результирующий запрос в xml. И какую версию api используете?

api 1.4 использую, а запрос в итоге вот такой получается, только там какие символы непонятные приписываются(например d7p1):

Vladimir2017

[Avatar]

Зарегистрирован: 02/10/2017 14:31:03
Сообщений: 362
Оффлайн

anig99 wrote:


1) Между Envelope и Body нет тэга Header. Он пустой и опциональный, но в примерах есть, возможно сервис его ждет.
2) Сount 100?
Rinat


Зарегистрирован: 08/02/2018 10:54:57
Сообщений: 43
Оффлайн

А каким образом его добавить туда?
count да, 100
zooelista

[Avatar]

Зарегистрирован: 18/08/2017 10:24:10
Сообщений: 12
Оффлайн

Добрый день. Обнаруживаю, что продавец выписывает на моё имя свидетельства с товаром, который на много превышает поставляемый мне вес. Гася при получении полностью свидетельство, я соглашаюсь с этим весом так же, как и с наименованием товара. Обязательно ли мне гасить в этом случае свидетельства, если я вижу не соответствия? Я так понимаю, что поставщик возит товар не для меня одной по выписанным на моё имя ВСД. Подскажите пожалуйста, что мне делать и будет ли нести какую-то ответственность нерадивый поставщик?
Rinat


Зарегистрирован: 08/02/2018 10:54:57
Сообщений: 43
Оффлайн

По сути, если он везет вам товар, то должен выписать свидетельство на тот вес который везет именно вам, а если он еще другим развозит, то на них отдельные свидетельства должны быть выписаны. В этом случае я бы на вашем месте не гасил его свидетельство, а попросил бы у него новое, именно на ваш вес.
Rinat


Зарегистрирован: 08/02/2018 10:54:57
Сообщений: 43
Оффлайн

Vladimir2017 wrote:
anig99 wrote:


1) Между Envelope и Body нет тэга Header. Он пустой и опциональный, но в примерах есть, возможно сервис его ждет.
2) Сount 100?


Разобрался как добавить его туда, но результат тот же. И все таки меня напрягают эти вставки (d7p1), откуда они, вообще не понятно. Вот теперь запрос такого вида:

anig99


Зарегистрирован: 21/10/2016 20:05:29
Сообщений: 143
Оффлайн

dp7p1 - совершенно не мешают.
А вот что может мешать - большие и маленькие буквы в названии функций. Попробуй вместо ModifyBusinessEntityRequest написать modifyBusinessEntityRequest
Rinat wrote:
Vladimir2017 wrote:
anig99 wrote:


1) Между Envelope и Body нет тэга Header. Он пустой и опциональный, но в примерах есть, возможно сервис его ждет.
2) Сount 100?


Разобрался как добавить его туда, но результат тот же. И все таки меня напрягают эти вставки (d7p1), откуда они, вообще не понятно. Вот теперь запрос такого вида:

 
Индекс форума » Компонент МЕРКУРИЙ
Перейти:   

Powered by JForum 2.1.8 © JForum Team