Способы обмена данными в Кассир 5

Под обменом данными в Кассир 5 понимается загрузка справочников и выгрузка отчета (транзакций).
Файл справочных данных в формате SPR.
Формат выгружаемых транзакций.

Типовые способы обмена:

Файлы на локальном или сетевом ресурсе

FTP-сервер

HTTP-сервис

Файлы на локальном или сетевом ресурсе

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

FTP-сервер

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

Файл справочник

Бэк-офис выгружает файл справочника на FTP-сервер с именем, указанным в настройке Кассира «Имя файла справочника на FTP сервере» (задаётся в Кассире, например Files/POS1.spr) с суффиксом «.$1» (т.е. Files/POS1.spr.$1),
если файл этим суффиксом уже существует, тогда порядковый номер в суффиксе увеличивается, до первого свободного (Files/POS1.spr.$n).
Кассир загрузит и объединит файлы справочников в соответствии с порядком номеров в суффиксах.

Файл отчета

При выгрузке отчета Кассир выгружает файл с транзакциями на FTP-сервер с суффиксами (например, «Files/POS1.rep.$1»...«Files/POS1.rep.$n»).

FTP-сервер средствами 1С

Отличается от способа «FTP-сервер» только наличием опции «Загружать файл без порядкового номера». Если флаг «Загружать файл без порядкового номера» установлен, тогда файлы на FTP записываются без суффиксов типа «.$n».

HTTP-сервис

При обмене через HTTP-сервис Кассир вызывает функции HTTP-сервиса, который опубликован в бэк-офисе.
При обмене используется две функции: получение данных из бэк-офиса и отправка данных в бэк-офис.

ReceiveData

GET запрос.
Получение данных из бэк-офиса, с возможностью получения данных (файла).
Функция должна иметь следующий веб-адрес:

http://{host}/hs/KKMTransfer/ReceiveDataText/{НомерПОС}/{НомерПакета}?dataText=1

host - веб-адрес сервиса
НомерПОС - число, уникальный номер рабочего места (задаётся в настройках стартера Кассира)
НомерПакета - число, номер пакета для загрузки, после успешной загрузки Кассир увеличивает номер пакета на 1.
?dataText=1 - необязательный параметр запроса. Функция может вызываться несколько раз с одним номером пакета, поэтому сразу после выполнения нельзя удалять пакет с указанным номером.
В ответе нужно указать заголовок: «Content-type:application/json; charset=utf-8».

Возвращаемое значение

строка JSON с атрибутами:
data - пустая строка или zip-архив с файлом в виде строки в формате base64
dataText - пустая строка или текст файла
errcode - код ошибки, 0 - ошибок нет
errmessage - пустая строка или текст ошибки
packagetype - расширение файла (spr или flr или dcm)
UID - уникальный идентификатор, может указываться если packagetype = «flr» (файл запроса транзакций). По заданным параметрам в файле flr, касса сформирует файл с транзакциями и выполнит ф-ю SendData с указанием данного UID.
Если передан необязательный параметр запроса ?dataText=1, тогда сервис может вернуть данные как текст файла в атрибуте dataText, так и в base64 от zip архива файла в атрибуте data.
Если не передан необязательный параметр запроса ?dataText=1, тогда сервис возвращает данные в base64 от zip архива файла в атрибуте data, атрибут dataText не заполняется.

Пример успешного получения пакета с zip архивом в формате base64:

{
"data": "UEsDBBQAAAgIABuVPVAHI4ouFgAAABQAAAAOAAAAdjhfOTk2OV8xNS50eHR7v3u/\r\nsrKDg5qaiopKUIAPL5cyLxcAUEsBAi4DFAAACAgAG5U9UAcjii4WAAAAFAAAAA4A\r\nJAAAAAAAAAAAALSBAAAAAHY4Xzk5NjlfMTUudHh0CgAgAAAAAAABABgAgF1jfrrW\r\n1QGAXWN+utbVAYBdY3661tUBUEsFBgAAAAABAAEAYAAAAEIAAAAAAA==",
"dataText": "",
"errcode": "0",
"errmessage": "",
"packagetype": "spr"
}

Пример успешного получения пакета с текстом файла (если был передан параметр ?dataText=1):

{
"data": "",
"dataText": "##@@&&\n#\n|ИнтервалОбменаДанными|TransportHTTP=120",
"errcode": "0",
"errmessage": "",
"packagetype": "spr"
}

Пример ответа, когда данные для отправки на кассу отсутствуют:

{
"data": "",
"dataText": "",
"errcode": "3",
"errmessage": "Не найдены данные для отправки"
}

SendData

POST запрос.
Отправка данных (текстовый файл с транзакциями).
Функция должна иметь следующий веб-адрес:

http://{host}/hs/KKMTransfer/SendData/{НомерПОС}/{НомерПакета}/{UID}

host - веб-адрес сервиса
НомерПОС - число, уникальный номер рабочего места (задаётся в настройках стартера Кассира)
НомерПакета - число, номер пакета, после успешной загрузки Кассир увеличивает номер пакета на 1.
UID - необязательный параметр, уникальный идентификатор. Указывается при выгрузке по флагу выгрузки транзакций flr, полученным функцией RecieveData.
В тело запроса передаётся zip-архив файла отчета в виде строки формата base64.
В ответе нужно указать заголовок: «Content-type:application/json; charset=utf-8».

Возвращаемое значение

строка JSON с атрибутами:
errcode - код ошибки, 0 - ошибок нет, 1 - пакет с данным номером уже обработан, > 1 - другие ошибки
errmessage - пустая строка или текст ошибки