Настройка связи с Sodexo
Введение
Компания Sodexo предоставляет комплексные сервисные решения, включая организацию корпоративного питания.
Sodexo использует собственную систему для учета и контроля корпоративного питания, в качестве системы автоматизации общепита используется система R-Keeper 7.
Схема работы
Взаимодействие R-Keeper с учетной системой Sodexo осуществляется посредством ретранслятора карт Farcards и специальной интерфейсной библиотеки Sodexo.dll:

Функционал библиотеки Sodexo.dll:
- получение информации о карте (сумма, доступная для списания)
- оплата заказа
- отмена заказа
Важно!
Система Sodexo работает по лимитам и не возвращает баланс по карте. Лимит рассчитывается от суммы текущего заказа - считывать карту необходимо при оплате заказа, а не во время его редактированияДистрибутив
Дистрибутив доступен на FTP-сервере ftp://ftp.ucs.ru/rk7/INSTALL/RK7_Sodexo
Лицензирование
Для использования Sodexo.dll дополнительное лицензирования не требуется.
Формат карт Sodexo
На картах Sodexo закодировано 37-м знаков на второй дорожке, например:
1355010000000011000000637064650777777
С 21-го символа идет номер карты, длина номера - 10 знаков (ведущие нули можно опустить)
Примечание
Для преобразования номера карты на кассе R-Keeper v6 необходимо использовать универсальный перекодировщик FIX_LEN - параметры настройки см. ниже.Установка
R-Keeper 7.4.xx и 6.103 и ниже
Кассовая часть R-Keeper версии 7.4.xx и версии 6.103 (и ниже) используют для взаимодействия с Farcards протокол версии 23, соответственно, для установки требуется использовать Farcards не выше версии 5.07.
Для установки необходимо:
- загрузить с FTP ftp://ftp.ucs.ru/r-keeper/versions/PERSCARD/FARCARDS/fc507.7z дистрибутив Farcards 5.07
- создать каталог, например \rkeeper\PDS\FARCARDS и скопировать в него содержимое дистрибутива
- загрузить с FTP ftp://ftp.ucs.ru/r-keeper/versions/PERSCARD/netdll.7z архив с библиотеками связи и распаковать содержимое архива в рабочий каталог FARCARDS
- загрузить с FTP ftp://ftp.ucs.ru/rk7/INSTALL/RK7_Sodexo/ дистрибутив библиотеки Sodexo.dll не ниже версии 1.0.0.9
- распаковать содержимое дистрибутива в рабочий каталог FARCARDS
R-Keeper 7.5.xxx и 6.105 и выше
Кассовая часть R-Keeper версии 7.5.xx и версии 6.104 (и выше) используют для взаимодействия с Farcards протокол версии 29, соотв. для установки требуется использовать Farcards версии 6.01 и выше:
Для установки необходимо:
- загрузить с FTP ftp://ftp.ucs.ru/r-keeper/versions/PERSCARD/FARCARDS/ дистрибутив актуальной версии Farcards (не ниже 6.01)
- создать каталог, например \rkeeper\PDS\FARCARDS и скопировать в него содержимое дистрибутива
- загрузить с FTP ftp://ftp.ucs.ru/r-keeper/versions/PERSCARD/netdll.7z архив с библиотеками связи и распаковать содержимое архива в рабочий каталог FARCARDS
- загрузить с FTP ftp://ftp.ucs.ru/rk7/INSTALL/RK7_Sodexo/ дистрибутив библиотеки Sodexo.dll не ниже версии 1.0.0.9
- распаковать содержимое дистрибутива в рабочий каталог FARCARDS
Документация по установке Farcards доступна в статье Установка и настройка системы ПДС.
Настройка
Farcards
Для настройки Farcards необходимо:
- в FARCARDS.INI в секции [FarServer] установить тип ретранслятора Type =1 и подключить библиотеку Sodexo.dll:
[FarServer]
Type = 1
DLL=Sodexo.dll
...
- в FARCARDS.INI в секции [LinkDLL] подключить транспортные библиотеки для взаимодействия с кассовой системой R-Keeper:
[LinkDLL]
1 = RTcp
2 = pds_netk
Дальнейшая настройка Farcards зависит от версии кассовой системы R-Keeper и подробно описана в статье о системе ПДС.
Sodexo.dll
Параметры интерфейсной библиотеки Sodexo.dll хранятся в файле Sodexo.ini:
[Main]
LogLevel=3
PDSIdent=1
[Sodexo]
RestaurantID=1433
PosID=1328
CheckLimit=100
Описание параметров Sodexo.ini:
Секция [Main]:
- LogLevel - уровень логирования (0..3)
- PDSIdent - идентификатор ПДС-интерфейса, используется только для RK7, должен соотв. значению параметра Идентификатор в свойствах интерфейса - см. раздел настройки RK7
Секция [Sodexo]:
- RestaurantID - идентификатор ресторана, назначается и предоставляется компанией Sodexо
- PosID - идентификатор кассовой станции (терминала), назначается и предоставляется компанией Sodexо
- CheckLimit - предельный лимит суммы чека, задействуется в случае использования Farcards 5.07 и ниже
Для работы Sodexo.dll требуются библиотеки ssleay32.dll и libeay32.dll, которые поставляются в дистрибутиве.
Настройка r_keeper_7
Стандартная настройка системы RK7 для связи с Farcards подробно описана в документации системы ПДС, ниже приведены настройки, специфичные для связи с системой Sodexo:
- в справочнике Сервис ⇒ Интерфейсы выбрать интерфейс [Персональная дисконтная система(ПДС)] и проверить значение параметра Идентификатор - такое же значение должно быть указано в параметре PDSIdent конфигурационного файла Sodexo.ini:

- в справочнике Сервис ⇒ Станции и Устройства выбрать необходимый кассовый сервер и на закладке Устройства выбрать PDS-интерфейс, используемый для связи с системой Sodexo
- в свойствах PDS-интерфейса в разделе Опции установить параметр "Look Up Card By Mail Addr" в значение Yes

- в справочнике Деньги ⇒ Валюты создать новую валюту, например "Карта SODEXO", и установить параметры "Не в сдаче", "Без сдачи" и "Интерфейс":

Примечание
В случае создания в справочнике Сервис ⇒ Интерфейсы отдельного ПДС-интерфейса для связи с учетной системой Sodexo, необходимо указать этот интерфейс в свойствах валюты (параметр "Интерфейс")- в справочнике Сервис ⇒ Обработка сигналов устройств ⇒ MCR алгоритмы создать новый MCR-алгоритм на базе предустановленного алгоритма [Персональные дебетовые (ПДС)]

- в свойствах созданного MCR-алгоритма для параметра Скрипт добавить следующий скрипт:
var
len: int64;
str:string;
begin
if ( (pos('=', Parameter) = 0) and (length(Parameter) = 37) ) then
begin
if SYS.ObjectInheritsFrom(TObject(GUI.ActiveForm), 'TMagnCardForm') then
begin
GUI.RKMessageDlg('Проверка баланса карты SODEXO запрещена',0,4, 100000)
//RKMessageDlg('текст',тип окна (ошибка инфо предупреждение), кнопки, время отображения)
Result := false;
RK7.PerformOperation(rkoEsc, 1);
Exit;
end;
str:=copy(Parameter, 21, 10);
len:=StrToInt(str);
//parameter:='10007267'; //test_card
parameter:=IntToStr(len);
Result := true;
end
else
begin
Result := false;
end;
end;