======Способы обмена данными в Кассир 5======
Под обменом данными в Кассир 5 понимается загрузка справочников и выгрузка отчета (транзакций).\\
//[[кассир5:форматобменаданными:файлspr|Файл справочных данных в формате SPR]].//\\
//[[https://kkm.solutions/wiki/doku.php?id=%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0%D1%82%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D0%B8%D0%B9%D0%BA%D0%B0%D1%81%D1%81%D0%B8%D1%80%D0%B0|Формат выгружаемых транзакций]].//\\
Типовые способы обмена:\\
- Файлы на локальном или сетевом ресурсе
- 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/{НомерПОС}/{НомерПакета}/?text=1
\\
**host** - веб-адрес сервиса\\
**НомерПОС** - число, уникальный номер рабочего места (задаётся в настройках стартера Кассира)\\
**НомерПакета** - число, номер пакета для загрузки, после успешной загрузки Кассир увеличивает номер пакета на 1.\\
**text** - необязательный параметр запроса.\\
Функция может вызываться несколько раз с одним номером пакета, поэтому сразу после выполнения нельзя удалять пакет с указанным номером.\\
В ответе нужно указать заголовок: "Content-type:application/json; charset=utf-8".
===Возвращаемое значение===
строка JSON с атрибутами:\\
**data** - пустая строка или zip-архив с файлом в виде строки в формате base64\\
**dataText** - пустая строка или текст файла\\
**errcode** - код ошибки, 0 - ошибок нет\\
**errmessage** - пустая строка или текст ошибки\\
**packagetype** - расширение файла (spr или flr или dcm)\\
**UID** - уникальный идентификатор, может указываться если packagetype = "flr" ([[кассир5:форматобменаданными:запространзакций|файл запроса транзакций]]). По заданным параметрам в файле flr, касса сформирует файл с транзакциями и выполнит ф-ю SendData с указанием данного UID.\\
\\
Если передан необязательный параметр запроса **text** и его значение равно "1", тогда сервис может вернуть текст файла в атрибуте **dataText** или вернуть base64 от zip архива файла в атрибуте **data**.\\
Если не передан необязательный параметр запроса **text** или его значение не равно "1", тогда сервис возвращает данные в base64 от zip архива файла в атрибуте **data**, атрибут **dataText** не заполняется.\\
Пример успешного получения пакета с zip архивом в формате base64:\\
{
"data": "UEsDBBQAAAgIABuVPVAHI4ouFgAAABQAAAAOAAAAdjhfOTk2OV8xNS50eHR7v3u/\r\nsrKDg5qaiopKUIAPL5cyLxcAUEsBAi4DFAAACAgAG5U9UAcjii4WAAAAFAAAAA4A\r\nJAAAAAAAAAAAALSBAAAAAHY4Xzk5NjlfMTUudHh0CgAgAAAAAAABABgAgF1jfrrW\r\n1QGAXWN+utbVAYBdY3661tUBUEsFBgAAAAABAAEAYAAAAEIAAAAAAA==",
"dataText": "",
"errcode": "0",
"errmessage": "",
"packagetype": "spr"
}
Пример успешного получения пакета с текстом файла (если был передан параметр ?text=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=uuid
\\
**host** - веб-адрес сервиса\\
**НомерПОС** - число, уникальный номер рабочего места (задаётся в настройках стартера Кассира)\\
**НомерПакета** - число, номер пакета, после успешной загрузки Кассир увеличивает номер пакета на 1.\\
**UID** - необязательный параметр, уникальный идентификатор. Указывается [[кассир5:форматобменаданными:запространзакций|при выгрузке по флагу выгрузки транзакций flr]], полученным функцией RecieveData.\\
В тело запроса передаётся zip-архив файла отчета в виде строки формата base64.\\
В ответе нужно указать заголовок: "Content-type:application/json; charset=utf-8".\\
===Возвращаемое значение===
строка JSON с атрибутами:\\
**errcode** - код ошибки, 0 - ошибок нет, 1 - пакет с данным номером уже обработан, > 1 - другие ошибки\\
**errmessage** - пустая строка или текст ошибки\\