======Способы обмена данными в Кассир 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** - пустая строка или текст ошибки\\