Основные рекомендации экспорта чеков по топологиям:


Web-сервис на стороне SetRetail10

(Сервер - Клиент): SetRetail10-сервер и ERP-клиент.

Процесс:

Web-сервис на стороне ERP

(Клиент - Сервер): SetRetail10-клиент и ERP-сервер.

Процесс:

Гарантированная доставка

Оба варианта экспорта данных работают через HTTP-протокол с использованием вызова SOAP-методов.

Во 2-ом типе экспорта, когда отправляются чеки в Web-сервис на стороне ERP есть 2 варианта получения ответа:

Устанавливается настройкой в SetRetail10: Справочники → Внешние процессинги → добавляется Протокол Set Retail 10: выгрузка данных в веб-сервис на стороне ERP → в настройках протокола вкладка Адрес веб-сервиса → установите переключатель Веб-сервис с обратной связью или Веб-сервис без обратной связи (совместимость с SAP).

При успешном завершении обработки пакета от SetRetail10, сервер (ERP) присылает ответ HTTP = 200 - значит пакет он принят успешно.

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

Пример кейса

  1. Между серверами SetRetail10 и ERP настройкой устанавливается таймаут соединения - 60 сек (настройка в базе данных set → таблица sales_management_propertiesexport.set10wsclient.purchases.request.timeout).
  2. На сервер SetRetail10 с касс отправляется 150 чеков. Их идентификаторы помещаются в очередь в таблицу на сервере в БД.
  3. SetRetail10 раз в минуту (настройка в базе данных set → таблица sales_management_properties → export.set10wsclient.purchases.polling.interval.sec) формирует XML из 100 чеков (настройка в базе данных set → таблица sales_management_propertiesexport.set10wsclient.purchases.catalog.size.records), и запоминает их идентификаторы (в памяти).
  4. SetRetail10 вызывает метод getPurchase на стороне ERP и передаёт XML-данные с чеками.
  5. В ERP-обработчике этого метода должно быть реализовано сохранение этого пакета в свою базу (или иная обработка).
  6. Если сохранение прошло успешно за 1 минуту, то при стандартном завершении метода Web-сервиса сервер отправит клиенту код ответа HTTP = 200.
  7. SetRetail10 при получении кода ответа HTTP = 200 удаляет идентификаторы чеков из очереди запомненные на этапе 3, и сразу формирует пакет по оставшимся чекам в очереди (без задержек).
    1. Если сохранение произойдет не корректно, внутренняя база данных не будет доступна, или произойдёт ошибка при разборе пакета, то сервер (ERP) может отправить в ответ код ответа HTTP = 5xx.
    2. Если сохранение не произойдёт за 1 минуту, то и сервер и клиент поймут что XML-данные не сохранились. Клиент уже не будет дожидаться ответа по этому запросу.
  8. SetRetail10, не дождавшись в заданный период ответа, или получив от сервера код ответа не HTTP = 200:
    1. Записывает в лог ошибку, полученную от сервера или ошибку таймаута,
    2. Удаляет из памяти идентификаторы недоставленных чеков, тем самым, оставляя их в очереди на отправку в БД.
    3. "Замирает" на заданную паузу (60 сек).
  9. Через 60 сек., весь цикл отправки повторяется заново.

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