Интеграция с ПО UPOS через библиотеку GATE. 1.0 Платформа Win32.

- Титульная страница
- Группы
- Структуры данных

Отправка торгового чека в банк
Расширенный функционал

Для отправки торгового чека в банк, необходимо включить эту функцию в настройках терминала. Опция доступная в секции "Дополнительные настройки" и называется "Передавать чеки" (значение Да). Кроме того, терминал должен содержать "Вариант связи" с параметрами сервера чеков. По умолчанию опция выключена (аналогично значению "Передавать чеки" - Нет).

В настроеном таким образом терминале для каждой операции будет сохранена экранная подпись и банковский чек, а торговый можно будет отправить в терминал с кассы. Торговый чек должен быть передан в кодировке CP866. Для отправки торгового чека в терминал и отправки собранной формации в банк используется одна и та же функция. Отправка чека в банк проходит в два этапа:

1. Подготовка операции в терминале: 1.1 При наличии торгового чека нужно указать RequestID операции и чек. 1.2 При отсутствии торгового чека нужно указать только RequestID
2. Отправка подготовленых чеков в банк. Достаточно запусить команду без каких либо параметров.

Полный алгоритм следующий:

1. Выполнить финансовую операцию с получением идентификатора операции RequestID.
2. Запустить функцию отправки чека с аргументами <значение RequestID> и [содержимое чека CP866]. Если торговый чек отсутствует или не требуется, то его можно не указывать. При этом в терминале автоматически будут сохранены банковский чек, торговый чек (при наличии) и подпись клиента (при наличии), но не переданы в банк.
3. Запустить функцию отправки чека без аргументов. Рекомендуется отправлять чеки в банк каждую десятую операцию.

Если в терминале заканчивается свободное место, то финансовая операция, либо функция отправки вернут ошибку ERR_SEND_CHEQUES_TO_SERVER. Это значит, что следует немедленно отправить сохраненные в терминале чеки в банк. При большом количестве операций и торговых чеков, может быть сформировано несколько файлов для отправки в банк. Если после отправки в банк функция отправки вернула ошибку ERR_MORE_DATA, значит в терминале присутствует ещё один/несколько файлов для отправки, и операцию можно повторить пока не вернется 0. Если торговый чек по операции уже передан в терминал, то повторный вызов функции отправки с тем же RequestID вернет ошибку ERR_CHEQUE_ALREADY_PRESENT.

Для отправки торгового чека в банк, необходимо включить эту функцию в настройках терминала. Опция доступная в секции "Дополнительные настройки" и называется "Передавать чеки" (значение Да). Кроме того, терминал должен содержать "Вариант связи" с параметрами сервера чеков. По умолчанию опция выключена (аналогично значению "Передавать чеки" - Нет). После этого для каждой операции будет сохранена экранная подпись и банковский чек, а торговый можно будет отправить в терминал функцией call_sb_kernel(KO_ADD_MERCHANT_CHEQUE,...). Она же используется для отправки собранной формации в банк. Торговый чек должен быть передан в кодировке CP866. Алгоритм следующий:

1. Выполнить финансовую операцию с получением идентификатора операции Уникальный идентификатор операции RequestID.
2. Запустить функцию call_sb_kernel(KO_ADD_MERCHANT_CHEQUE,...) В структуре tag_struct_in_reserved6 заполнить поля tag_struct_in_reserved6::dwQueryRequestID и tag_struct_in_reserved6::MerchantCheque. В поле tag_struct_in_reserved6::dwQueryRequestID следует записать значение, получное при соответствующей финансовой операции в поле struct_out_reserved4::RequestID. Вызов этой функции обязателен, если торговый чек отсутствует или не требуется, то в поле tag_struct_in_reserved6::MerchantCheque следует указывать 0. При этом торговый чек, банковский чек и подпись клиента (при наличии) будут сохранены в терминале, но не переданы в банк.
3. Рекомендуется отправлять чеки в банк каждую десятую операцию. Для этого нужно вызвать функцию call_sb_kernel(KO_ADD_MERCHANT_CHEQUE,...) со значениями tag_struct_in_reserved6::dwQueryRequestID и tag_struct_in_reserved6::MerchantCheque равными 0.

Если в терминале заканчивается свободное место, то финансовая операция, либо функция call_sb_kernel(KO_ADD_MERCHANT_CHEQUE,...) вернут ошибку ERR_SEND_CHEQUES_TO_SERVER. Это значит, что следует немедленно отправить сохраненные в терминале чеки в банк. При большом количестве операций и торговых чеков, может быть сформировано несколько файлов для отправки в банк. Если после отправки в банк функция call_sb_kernel(KO_ADD_MERCHANT_CHEQUE,...) вернула ошибку ERR_MORE_DATA, значит в терминале присутствует ещё один/несколько файлов для отправки, и операцию можно повторить пока не вернется 0. Если торговый чек по операции уже передан в терминал, то повторный вызов call_sb_kernel(KO_ADD_MERCHANT_CHEQUE,...) с тем же Уникальный идентификатор операции RequestID вернет ошибку ERR_CHEQUE_ALREADY_PRESENT. Например:

См. также
  Docs\Для разработчиков ПО ККМ\examples\gate.dll\cpp\merh-cheque-to-host