Интеграция RK6 со сторонней службой доставки
Основная информация
Примечание: В статье пойдет речь о связи RK6 с ПО "службы доставки" сторонних производителей. Т.е. каждый раз когда в статье упоминается "Служба доставки" имеется ввиду именно сторонее ПО, призведенное не нашей компанией.
- Обмен информацией между БД системы доставки и R-Keeper осуществляется посредством реализации процедур импорта-экспорта определенного объема данных в CSV-файлы (разделитель «;») установленного формата (см. приложения 1 - 7).
- Обмен файлами, предназначенными для экспорта-импорта данных осуществляется посредством размещения подготовленных файлов на специальном сетевом ресурсе (директории) на сервере в центральном офисе Компании, а также в сетевых ресурсах (директориях) серверов, установленных в подразделениях (ресторанах) Компании.
- Указанные сетевые ресурсы должны быть доступны клиентам и серверам систем доставки и R-Keeper через ЛВС (центральный офис) и защищенные каналы (подразделения (рестораны)), в том числе при подключении к указанным серверам в терминальном режиме (настройка подключения дисков).
- Настройки функционала обмена данными системы доставки c R-Keeper: системные пути к общему и адресным сетевым ресурсам, время «сканирования» сетевых ресурсов на предмет наличия в них файлов обмена данными и прочее, - в части программной среды системы доставки выносятся в отдельный файл настроек (ini-файл).
- Решение по способу хранения настроек функционала обмена данными системы доставки c R-Keeper в части программной среды R-Keeper определяется разработчиком ПО R-Keeper.
Лицензирование
Приложение защищено программным лицензионным ключем (привязывается к коду ресторана), который перед использованием необходимо запросить, оплатить и получить в отделе лицензирования Компании ЮСИЭС.
Полученный код прописывается в конфигурационном файле приложения-интерфейса (см.ниже).
Операции обмена данными
Выгрузка меню из RK и загрузка в службу доставки
Клиент системы доставки по некоторой команде оператора передает запрос на выгрузку данных о меню программному интерфейсу обмена информацией R-Keeper. Запрос на выгрузку данных должен передаваться посредством инициализации командной строки Windows в рамках ЛВС центрального офиса Компании.
Формирование данных для экспорта справочника «Меню» осуществляется из БД HeadOffice R-Keeper. Через некоторый промежуток времени, клиент системы доставки ищет файл Menu.csv на центральном сетевом ресурсе обмена данными.
Далее производится экспорт данных из этого файла в БД программными средствами системы доставки. Формат файла приведен в "Приложении 1".
После обработки полученного файла данных система доставки осуществляет автоматическое удаление файла Menu.csv из сетевого ресурса обмена данными.
Процедура импорта справочника «Меню» из БД "HeadOffice" R-Keeper в БД системы доставки предусматривает функции добавления новых позиций и обновления существующих. Соответствие между позициями справочника «Меню» в БД системы доставки и БД HeadOffice R-Keeper, технически устанавливается по сравнению кодов блюд в БД систем.
Выгрузка заказа
Формирование Заказов на доставку осуществляется пользователями в системе доставки.
Экспорт Заказов из БД системы доставки осуществляется по событию перевода Заказа на статус «Получен».
Клиент системы доставки формирует файл Order_New<Номер_стола>.csv, где <Номер_стола> - некоторый 4-х разрядный уникальный целочисленный идентификатор заказа, генерируемый в БД системы доставки из определенного диапазона для БД R-Keeper (например, Order_New9032.csv и OrderParts_New9032.csv), в которых находятся, соответственно, значения полей заказа и строк заказа, суффикс New – признак первоначальной выгрузки заказа в БД R-Keeper.
- Формат файла приведен "Приложении 2". Файл выгружается в директорию сетевого ресурса обмена данными, расположенную на сервере подразделения, в зависимости от результатов маршрутизации на конкретное подразделение (ресторан) принятого Заказа в БД системы доставки.
Программное приложение, реализующее интерфейс обмена данными между системой доставки и R-Keeper со стороны R-Keeper осуществляет автоматическое периодическое сканирование адресных сетевых ресурсов на предмет наличия в них файлов импорта Заказов. При обнаружении в каком-либо адресном сетевом ресурсе выгруженных файлов Заказов осуществляется процедура импорта данных в БД R-Keeper того подразделения, в адресном сетевом ресурсе которого находился выгруженный файл Заказа. После проведения процедуры импорта, обработанные файлы удаляются из адресной директории обмена средствами программного интерфейса обмена данными R-Keeper.
Примечание: Со стороны разработчиков системы доставки возможна реализация уведомления программного интерфейса механизмов обмена данными R-Keeper о событии выгрузки Заказа посредством инициализации командной строки Windows в рамках ЛВС подразделения (ресторана) Компании.
При импорте Заказа в БД R-Keeper открывается стол, при этом:
- Номер стола должен соответствовать параметру <Номер_стола> указанному в наименовании и составе соответствующего файла импорта;
- Дата и время открытия стола соответствуют дате и времени Заказа, указанным в БД системы доставки;
- Количество гостей, должно соответствовать количеству гостей в БД системы доставки.
Заказ сохраняется в БД R-Keeper в виде открытого (неоплаченного) стола с одновременной автоматической отправкой печати чеков на принтеры с распределением по цехам производства средствами системы R-Keeper. (аналог функции в R-Keeper ”сохранить заказ”).
Через установленный промежуток времени, клиент системы доставки ищет файл State_New<Номер_стола>.csv в директории адресного сетевого ресурса обмена данными на сервере в подразделении (ресторане) Компании, где <Номер_стола> - некоторый 4-х разрядный уникальный целочисленный идентификатор заказа, ранее переданный в R-Keeper в наименовании и составе соответствующего файла экспорта Заказа Order_New<Номер_стола>.csv. В этом файле может быть указан один из трех вариантов ответа от R_Keeper:
- 1 - заказ успешно выгружен в стол <номер_стола>;
- 0 – указанный стол <Номер_стол> уже открыт, заказ не выгружен;
- 2 - заказ не выгружен <текст ошибки>, где <текст ошибки> - текст ошибки, генерируемой сервером приложений R-Keeper, по причине которой не был выгружен Заказ.
- Пример файла-ответа приведен в "Приложении 3".
Примечание: Результат импорта-экспорта Заказа в систему R-Keeper отмечается в специальном информационном поле бланка Заказа в системе доставки.
- В случае отсутствия файла с уведомлением об импорте Заказа проставляется – Заказ не получен R-Keeper
- В случае флага «0» - Заказ получен, но не импортирован в R-Keeper;
- В случае флага «1» - Заказ получен и импортирован в R-Keeper;
- В случае флага «2» - Заказ получен, но не импортирован в R-Keeper. Указанный стол открыт.
Технология дальнейшей обработки Заказа в БД системы доставки в зависимости от результата процедуры выгрузки в БД R-Keeper будет прорабатываться в отдельной постановке задачи.
В случае повторной выгрузки измененного Заказа из системы доставки в R-Keeper, т.е. экспорта-импорта ранее уже выгруженного Заказа, измененный Заказ выгружается из системы доставки только в части изменения кол-ва гостей и данных о добавленных новых позициях состава Заказа (в том числе увеличения кол-ва ранее выгруженных позиций), в формате Order_Edit<Номер_стола>.csv.
Примечание: В случае увеличения кол-ва ранее выгруженных позиций состава Заказа в файле экспорта изменений в колонке «Количество» передается значение разности между старым и новым значением количества заказанной позиции.
Удаление позиций из состава Заказа, а также уменьшение количества ранее выгруженных позиций не выгружается из системы доставки и не обрабатывается системой R-Keeper. При этом программный интерфейс обмена данными системы R-Keeper должен классифицировать и обработать данный Заказ, как уже ранее выгруженный, чтобы исключить дублирования заказов в БД R-Keeper. А именно:
- произвести изменение кол-ва гостей для соответствующего открытого стола в БД R-Keeper;
- добавить позиции (или увеличить кол-во ранее выгруженных позиций) из состава Заказа в соответствующий открытый стол в БД R-Keeper;
По результатам импорта изменений Заказа программный интерфейс обмена данными R-Keeper возвращает файл State_Edit<Номер_стола>.csv. В этом файле может быть указан один из трех вариантов ответа от R_Keeper:
- 1 – изменения заказа успешно выгружены в стол <номер_стола>;
- 0 – указанный стол <Номер_стол> закрыт, изменения заказа не выгружены;
- 2 – изменения заказа не выгружены <текст ошибки>.
Форматы файлов экспорта-импорта изменений Заказов, а также ответных результатов выгрузки этих изменений приведены в Приложениях 4 и 5. Правила маршрутизации и размещения файлов экспорта-импорта изменений аналогичны правилам первоначальной выгрузки Заказов, описанным выше.
Закрытие Заказа в системе доставки и стола в R-Keeper осуществляется средствами стандартного функционала систем и не предусматривает необходимости обмена данными.
Реализовано приложением FO_Util.exe.
Обновление меню - Getmenu.exe (если используется). Установка, настройка
Приложение экспортирует список блюд из базы данных RBO в текстовый файл оговоренного в техническом задании формата (Приложение 1).
- По отдельному запросу (например через трекер получить в компании "ЮСИЭС" дистрибутив данной утилиты.
- Распаковать в отдельный каталог.
В состав приложения входит:
- Getmenu.exe - исполняемый файл.
- Getmenu.ini - конфигурационный файл.
- Выполнить настройки в конфигурационном файле Getmenu.ini. Описание параметров Getmenu.ini:
[Options] Database=RBO.UDB - файл базы данных RBO PriceName=Main - название варианта меню, из которого брать цены ResultFile=MENU.CSV - название файла - результата экспорта
Приложение FO_Util.exe
Системные требования
RK6 с выделенным кассовым сервером (rkserver.exe) указанных ниже версий:
- Общедоступная (на фтп) современная версия FO_Util.exe - работает с версией кассового сервера 6.97S и выше.
Важно: Стандартная версия FO_Utils требует лицензии.
Установка, настройка
- Скопировать с FTP дистрибутив ftp://ftp.ucs.ru/r-keeper/ExternalDelivery/FO_Util.7z.
- Распаковать в отдельный каталог
Состав приложения
- FO_Util.exe - приложение fast-operator.
- ExtInt.ini - основной конфигурационный файл
- EXTINT.DLL
- format.pp - файл настройки печати (описание см.выше)
- Выполнить настройки в конфигурационном файле ExtInt.ini для связи с кассовым сервером и каталогом обмена с внешней доставкой.
- Настройки в ExtInt.ini:
Code=123456789 - Лицензионный код, привязан к коду ресторана! Server=RLSERV - Имя кассового сервера. Adapter=0 - Номер адаптера NetBIOS для подключения к кассовому серверу. Name=UNIT55 - Имя виртуальной станции. станция должна быть создана в редакторе, лицензия не нужна. Folder=D:\Obmen\ - Путь к директории обмена с внешней доставкой. Waiter=17 - Шифр официанта, на которого по- умолчанию будут оформляться заказы.
- Шифр официанта (либо любого другого элемента справочника) можно посмотреть в карточке - белая цифра в правом верхнем углу.
- Настроить сервис печать (если необходимо). Для настройки сервис-печати используется файл format.pp - в нем можно настроить саму сервис-печать, печатаемый текст.
Редактирование Format.pp
Лучше объяснить, на примере.
- Допустим, в редакторе созданы следующие принтеры (в квадратных скобках указаны шифры принтеров):
Пицца[1], Горячий[2], Холодный[3], Кондитерка[4], Бар[5], Горячий Дубль[6]
- И следующие группы сервис-печати:
Пицца[1], Горячий[2], Кондитерка[3], Холодный[4], Бар[5], Горячий-Пицца[6], Гор.-Хол.-Пицца[7], Гор-Хол[8], Перони[9], Перони2[10]б Курс[11]
- Соответственно для печати на принтер Пицца[1] всех групп сервис-печати добавить в format.pp строку:
AddServiceCheck(1,[1,2,3,4,5,6,7,8,9,10,11]);
- Для печати на принтер Горячий[2] всех групп сервис-печати добавить:
AddServiceCheck(2,[1,2,3,4,5,6,7,8,9,10,11]);
- и так далее, следуя аналогии. Ниже представлен пример рабочего файла:
Procedure EnumServiceChecks; {Эта процедура вызывается один раз в начале выполнения и конфигурирует правила формирования сервис чекров}
begin
{Для каждого необходимого сервис-чека нужно вызвать ADDServiceCheck.
Первый параметр - внутренний код принтера, второй - список групп сервис - печати, которые нужно туда отправить}
AddServiceCheck(1,[1,2,3,4]);
AddServiceCheck(2,[1]);
AddServiceCheck(3,[3]);
end;
{далее очевидные функции форматирования сервис-чеков}
Procedure PrintHeader(TableNum:String);
begin
PrintLine('--------------------------------------');
PrintLine(' ЗАКАЗ НА ДОСТАВКУ ');
PrintLine(' TABLE: '+TAbleNum);
PrintLine(' '+ StringToDos(FormatDateTime('DD-MMM-YYYY HH:NN',Now)));
PrintLine('--------------------------------------');
end;
Procedure PrintDish(dishcode:String; DishNAme:String; Qnt:Double);
begin
PrintLine(DishCode+' '+DishName+' '+FormatFloat('###.###',Qnt));
end;
Procedure PrintFooter;
begin
PrintLine('====================================');
PrintLine('');
PrintLine('');
PrintLine('');
PrintLine('');
PrintLine('');
PrintLine('');
PrintLine('');
PrintLine(#27+'i'); - команда принтеру на отрез чека (ESC последовательность. в данном случае Epson совместимые принтера,
‘i’-полный отрез, ‘m’-частичный отрез)
end;
begin
end;Формат файлов обмена данными
Приложение 1 - Формат файла импорта-экспорта данных меню
В Win-кодировке:
КОД;НАИМЕНОВАНИЕ;ЦЕНА 1234;Васаби;1185,75 1235;Ролл «Калифорния»;11,5
Приложение 2 - Формат файла импорта-экспорта Заказа
В Win-кодировке:
НОМЕР СТОЛА;ДАТА;КОЛ-ВО ГОСТЕЙ;ШИФР ОФИЦИАНТА;ТИП МАГНИТНОЙ КАРТЫ 9032;06.03.2008 10:38;2;465;44 КОД ПРОДУКЦИИ;ЦЕНА;КОЛИЧЕСТВО 2013;10,5;3 2014;25,1;4
Приложение 3 - Формат файла результатов импорта-экспорта Заказа
В Win-кодировке:
1 - заказ успешно выгружен в стол 9032
Приложение 4 - Формат файла импорта-экспорта изменений Заказа
В Win-кодировке:
НОМЕР СТОЛА;ДАТА;КОЛ-ВО ГОСТЕЙ 9032;06.03.2008 10:38;2 КОД ПРОДУКЦИИ;ЦЕНА;КОЛИЧЕСТВО 2013;10,5;3 2014;25,1;4
Приложение 5 - Формат файла результатов импорта-экспорта изменений Заказа
В Win-кодировке:
0 - указанный стол 9032 закрыт, изменения заказа не выгружены