Введение

Начиная с версии РК 7.5.4.* появилась возможность выборочного обновления необходимых коллекций на нижнем сервере с привязкой к ресторану. В статье ниже описан процесс настройки синхронизации выборочно и по расписанию

На данный момент доступны следующие варианты:
1) Если есть необходимость обновить справочники на точке (локальном ресторане) вручную, то для этого используем кнопку "синхронизировать" (меню Сервис - Sync references, рисунок ниже). Это может понадобиться, если нужно срочно синхронизировать изменения с ЦО.
 

 2) Штатная синхронизация (автоматическая) происходит по запросу от клиента на верхний сервер в следующих случаях: 

  1. по расписанию, по времени (расписание настраивается);

  2. при старте;

  3. при шатдауне;

  4. либо при комбинации настроек.

3) Клиент запрашивает версии коллекций. При изменении коллекций верхний сервер после запроса от клиента готовит пакет коллекций для передачи клиенту. 
Раньше коллекции клиент закачивал полностью, то есть все таблицы целиком.
Теперь верхний сервер готовит коллекцию с измененными данными только для запросившего клиента. То есть измененные данные для ресторана (А) приедут только в ресторан (А). Рестораны (В), (С) и.т.д. получат только свои данные.

4) Только с версии 7.5.5.* поддержана рассылка коллекций с учетом "использования".

Реализация

Настройка расписания для синхронизации производится в отдельном файле - Syncconfig.ini.

В ини файле сервера отчетов прописать путь к файлу (если параметр не задать, то файл обязательно должен иметь имя: syncconf.ini и лежать рядом с сервером):

SyncSchdFile  = "Y:\syncconf.ini". 
Файл содержит общую секцию - [*], которой может и не быть и секции по серверам отчетов (сетевые имена).

В ини файла сервера отчетов прописать путь к файлу - параметр SyncSchdFile  = "Y:\syncconf.ini" (можно не задавать, имя по умолчанию: syncconf.ini).

Сервер при запуске проверяет наличие данного файла и далее в этом файле ищет секцию со своим сетевым именем. Если такой секции нет, то он использует параметры общей секции [*]. Если и общей секции нет, то сервер продолжает работать как обычно.

Пример файла настроек расписания (любая из секций может отсутствовать):

[*] 
RefsSyncMode = 1
;; время выполнения синхронизации в формате CRON.CRON 50 10 * * * равнозначно "всегда в 10:50". Подробнее https://ru.wikipedia.org/wiki/Cron
SyncSchedule = 40 20 * * *
SyncOnUpLink = 0
SyncOnReload = 0
;; фильтр по ID  коллекций, начиная с 7.6.2.104 можно имена
RestFilterIn  = 137,61,63,71,70,94,152,159,48,49,59,79    
;; список ID  коллекций, начиная с 7.6.2.104 можно имена, для которых передаются только активные элементы
skipDeleteIn = EMPLOYEES    
TEXT

[IMxREPS2x1] RefsSyncMode = 1 SyncSchedule = 30 10 * * * SyncOnUpLink = 0 SyncOnReload = 0 [IMxREPS2x2] RefsSyncMode = 1 SyncSchedule = 30 10 * * * SyncOnUpLink = 0 SyncOnReload = 0

Описание параметров

Параметры независимы друг от друга
 
* RefsSyncMode
Включена ли синхронизация по расписанию. Если нет - синхронизации по времени не будет, но будет при восстановлении связи и при загрузке сервера.
 
* SyncOnUpLink
Включена ли синхронизация при установлении связи с сервером верхнего уровня. Если нет, то синхронизация не будет происходить после восстановления связи.
 
* SyncOnReload
Выполнять синхронизацию при загрузке сервера. Т. е., если параметр выставлен в 0, но SyncOnUpLink = 1, то при восстановлении связи всё равно будет выполнена синхронизация. Так что этот параметр хоть и независимый, но имеет смысл только при SyncOnUpLink = 0.
 
* SyncSchedule
Время выполнения синхронизации в формате CRON. CRON 50 10 * * * равнозначно "всегда в 10:50". Подробнее https://ru.wikipedia.org/wiki/Cron

Примечание

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

Синхронизация серверов


Возможный вариант работы (схема):
 
REF
   ||
REP TRANSIT синхронизация постоянная, но используется фильтрация (REST_FILTER_IN)
   ||
REP Local Restaurant Server (синхронизация по расписанию)
   ||
MID
Для REP_TRANSIT в общем виде syncconf.ini

RefsSyncMode  = 0
SyncSchedule  =  *
SyncOnUpLink  = 1
SyncOnReload  = 1
RestFilterIn  = 137,61,63,71,70,94,152,159,48,49,59,79        // фильтр по ID  коллекций, начиная с 7.6.2.104 можно имена
skipDeleteIn = EMPLOYEES                                      // список ID  коллекций, начиная с 7.6.2.104 можно имена, для которых передаются только активные элементы 
TEXT

Важно!

 Фильтр работает не для всех коллекций! Фильтр срабатывает только при прокачке всей коллекции 

Варианты синхронизации

1. В ручном - в менеджерской станции
2. Через веб запрос.
Необходимо настроить, чтобы авторизация не использовалась (или настроить авторизацию что проблемнее). Подробнее читайте в статье Интеграция с r_keeper через XML-интерфейс
 
Запрос имеет вид: https://127.0.0.1:8080/rk7api/v1/forceSyncRefs.xml
 
Для принудительной отключении авторизации в инишнике сервера отчетов прописать httpauthmode = -1 (поддерживается с 7.5.4.*)
(с версий 7.5.5.* поддерживается в инишнике кассового сервера)