ВНИМАНИЕ!!! Примерно с 01.09.19 произошли изменения протокола со стороны WuBook. Максимальное количество методов отправленных в Wubook может быть 464 за 60 мин. Поэтому если столькнулись с ошибкой "More than 464 (547+) calls in the last 3600 seconds for property...." в shelter.ini, откуда стартуют службы, добавляете в секцию Wubook:
[Wubook]
Action_Days=50
ВНИМАНИЕ!!! С 15.05.2018 произошли изменения протокола со стороны WuBook.
Необходимо изменить Service URL в "Сервисы и оборудования"
с https://wubook.net/xrws на https://wired.wubook.net/xrws/
ВНИМАНИЕ!!! С 04.06.2018 произошли изменения протокола со стороны WuBook.
Необходимо изменить SSL Method в "Сервисы и оборудования" на sslvTLSv1_2, скопировать в папку, откуда стартует служба ShelterWubookServer 2 библиотеки из этой задачи http://tracker.ucs.ru/issues/142326 и перезапустить службы.
ВНИМАНИЕ!!! В версии 2.12.126.2650 Реализована поддержка работы с Channel Manager для 2х отелей с разными договорами в одной базе данных. Для настройки данной схемы работы, необходимо в договорной работе выбрать соответствующую гостиницу для каждого договора :

ВНИМАНИЕ!!! На актуальных версиях Shelter наблюдается проблема с ростом занимаемой памяти shelter.exe для службы ShelterOnlineServer. В логах можно увидеть ошибку "AccessViolation". Служба продолжает работу, однако запросы и команды от ShelterTravellineServer/ShelterWuBookServer не принимает и не обрабатывает. Необходимо воспользоваться автоматическим перезапуском служб с помощью *.bat - файла. Пример *.bat-файл для перезапуска ShelterOnlineServer :
Пример *.bat-файл для перезапуска ShelterWuBookServer :
Необходимо добавить эти 2 *.bat файла в планировщик заданий и создать задание для поочередного перезапуска служб 1/2/3 раза в сутки :
1. ShelterOnlineServer
2. ShelterTravellineServer/ShelterWuBookServer
ВНИМАНИЕ!!! Время заезда и выезда в WuBook и Shelter должны совпадать!
ВАЖНО!!! В категориях, заведенных в WuBook, поле "Имя" - обязательно необходимо заполнять!
Служба ShelterWuBookServer является посредником между системой бронирования Channel Manager WuBook и программным продуктом Shelter 2.
Передача данных между WuBook и службой ShelterWuBookServer осуществляется в реальном времени в формате XML.
Изображение структурной схемы работы (рис. 1):

Отправка данных осуществляется методом POST на адрес: https://wubook.net:443/xrws
Положительный результат: Result: 200 HTTP/1.1 200 OK
Необходимо заключить договор с Wubook. Специалисты Wubook должны прислать параметры входа в личный кабинет, а именно:
Логин от личного кабинета;
Пароль от личного кабинета;
Код отеля (lcode);
Код отеля можно увидеть самостоятельно, через ЛК Wubook.
Необходимо зайти в личный кабинет Wubook, перейти во вкладку
«Модуль бронирования» - далее «Установка на сайт» :

Настройками тарифов/категорий номеров и пр. в лк Wubook сотрудники компании UCS не занимаются.
В связке используется модуль Shelter Online. При наличии Firewall, он должен быть настроен таким образом, чтобы отправлялись и
получались запросы на порт 7779 (или другой, если такая настройка будет произведена намеренно). В ключ защиты должен быть прописан
модуль связи с ChannelManager (Wubook/Travelline).
Настройки интеграции необходимо производить через «Сервисы и оборудование»(Настройки - Сервисы и оборудование) - рис.1 :

(рис.1)
Для настройки интеграции необходимо выполнить следующие действия :
1. Установить cлужбу Online Server; (мануал по корректной настройке можете посмотреть ТУТ)
-online_server -install
2. Установить службу для интеграции с Wubook (UCS Shelter WuBook Server) :
а) Создать директорию в корне Shelter (../WuBook/) и скопировать необходимые файлы :
shelter.exe
shelter.dll
gds32.dll
bass.dll
borlndmm.dll
libeay32.dll
ssleay32.dll
shelter.ini
б) Создать ярлык для shelter.exe , в свойствах ярылка, в поле «Объект»добавить следующий ключ :
-wubook_server -install
в) Далее необходимо запустить ярлык от имени администратора. Должно появиться сообщение о успешной установке службы.
3. Зайти в Shelter - Настройки - «Сервисы и оборудование» (рис. 1)
И добавить модуль Wubook согласно (рис. 2)

(рис. 2)

(рис. 3)
Настройки, изображенные на рис. 3, без необходимости не менять, параметр «Имя компьютера» заполнится автоматически
в соответствии с именем ПК.
4. Зайти в настройки модуля и настроить по аналогии с рис. 4.

(рис. 4)


(табл. 1)
Новая реализация с версии 2.12.127.2750!!!
Доп. услуги включены в стоимость

Данная настройка необходима исключительно, если в Wubook выгружается тариф у которого есть пакеты услуг, которые НЕ включены в тариф:
1. Чек-бокс активен - цена по тарифу выгружается с учетом доп. услуг и при сохранении брони доп. услуги входят в стоимость по брони.
2. Чек-бокс не активен - цена по тарифу так же выгружается с учетом доп. услуг, но при сохранении брони доп. услуги начисляются дополнительно сверху стоимости по брони.
5. После завершения настроек в табл. 1 необходимо нажать кнопку «Сохранить».
6. Зайти в «Настройки» - «Справочники» - «Гостиницы» - «Гостиницы» и ввести Код гостиницы в поле «Код в системе WuBook» (рис. 5)

(рис. 5)
Внимание!!! Если в личном кабинете WuBook уже заведены категории номеров и тарифы, то их необходимо сопоставить с
категориями и тарифами в Shelter :
7. В личном кабинете WuBook открыть вкладку «Тарифы» - «Категории», скопировать код категории (SNGL):

(рис. 6)
Добавить этот код в Shelter : Открыть «Справочники» - «Ресурсы» - «Типы ресурсов», выбрать соответствующую категорию, во вкладке «WuBook»,
в поле «Идентификатор» добавить скопированный ранее код :

(рис. 7)
Внимание!!! WuBook с дополнительными местами не работает, необходимо учитывать это при настройке интеграции.
8. Для сопоставления тарифов необходимо, в личном кабинете WuBook, перейти во вкладку «Тарифы» - «Тарифы»,
нажать на «Информация» для необходимого тарифа :

(рис. 8)
Внимание!!! Тип, для созданного ранее тарифа в WuBook, должен быть «С периодами»
В открывшемся окне необходимо скопировать цифровой ID тарифа из адресной строки (в данном случае 87321) :

(рис. 9)
Добавить этот ID тарифа в Shelter : Открыть «Справочники» - «Тарифы» - «Типы тарифов», выбрать соответствующий тариф,
во вкладке «Внешние системы», в поле «Использовать тариф для системы WuBook.net» прописать ранее скопированный код :

(рис. 10)
8. Перейти в модуль договорная работа :
«Бронирование» - «Договоры» - «Добавить юридическое лицо» - Указать краткое и полное наименование организации (WuBook),
а так же указать WuBook/Travelline/ResOnline (рис. 11) во вкладке «Интернет бронирование» - «Внешние системы» :

(рис. 11)
9. Перейти во вкладку «Договоры» (договор ST должен создаться автоматически, если он не создался — необходимо создать его вручную)
Заполнить обязательные поля (Организация-собственник, Тип и пр.) Установить чек-боксы «Используется по умолчанию при бронировании»
и «Используется по умолчанию для Нота Бена» :

(рис. 12)
10. Перейти во вкладку «Тарифы» и поставить чек-боксы «Активен» и «Использовать онлайн» для соответствующего тарифа,
а так же поставить чек-бокс «Не объединять с гостиничным тарифом» (это необходимо для того, чтобы стоимость по тарифу,
если она отличается от стоимости в Shelter, могла корректно сохраниться для определенной категории).

(рис. 13)
11. Для сохранение оплаченных броней, необходимо добавить тип оплаты в «Справочники» - «Услуги» - «Оплаты».
Установить чек-бокс «Использовать для WuBook/Travelline» (рис. 14) и настроить оставшиеся обязательные поля по аналогии :

(рис. 14)
12. Перейти в настройки системы : «Внешние системы»- «Схема работы» - выбрать необходимую схему работы (рис. 12) :

(рис. 15)
13. Текущая настройка необходима для версий Shelter 2.12.127.2750 и выше!!!
Исправлен механизм сохранения платежей для WubookServer.
Необходимо, в настройках киоска настроить «Возможные типы оплат» - устанавливаем чек-бокс на ранее заведенной оплате для Wubook:

(рис. 16)
Так же нужно настроить поле «Список доступных пользователей» - устанавливаем чек-бокс на пользователе *WUBOOK*:

(рис. 17)
Для каждого канала продаж необходимо создать организацию, переходим «Бронирование» - «Договоры» - «Добавить юридическое лицо». (рис. 18)

(рис. 18)
Указываем краткое и полное наименование организации (Booking.com), ниже во вкладке «Интернет бронирование» - «Внешние системы» указываем
канал продаж «Booking.com». (рис. 19)

(рис. 19)
Далее во вкладке «Договоры» настраиваем по аналогии с основной организацией Wubook.
Для каждого канала продаж, который использует ваша GDS система необходимо заводить организацию и настраивать по аналогии
из выше приведенного примера.
Для корректной настройки квот необходимо воспользоваться инструкцией Квоты.doc
Выбрать схему работы с квотами :

(рис. 20)
ВНИМАНИЕ!!! Данный функционал доступен только с версии 2.12.125.2480 или новее
Теперь в настройках Wubook можно установить необходимый статус для приходящих броней. Заходим в Shelter – «Настройки» – «Сервисы и оборудование»
и открыть настройки Wubook. В них можно увидеть поле «Статус брони» в котором нужно указать необходимый статус для приходящих броней (рис. 21).

(Рис. 21)
Описание статуса броней:
Важно!!! Не забывайте удалять файл onlineserver.xml при обновлении Shelter. После запуска службы ShelterOnline он создастся заново,
актуальной версии.Если клиент использует только Wubook, а интернет-бронирование нет (это разные модули в ключе защиты,
несмотря на то что тут ShelterOnline тоже используется!), необходимо в файле onlineserver.xml все значения autostart="1" заменить на autostart ="0"
и в shelter.ini в секции [onlineserver] выставить gds=BOOKING. Отследить необходимость данного действия можно по логу онлайн сервера.
В нем будет ошибка Device licence error. Если в ключе точно прописан проект 3, модуль 10, а проект 3, модуль 5 отсутствует - действуйте как указано выше.
Для настройки интеграции двух гостиниц в одной базе данных необходимо сделать следующее:
1. Гостиница Новая - OnlineServerNovaya и WubookServerNovaya
2. Гостиница Старая - OnlineServerStaraya и WubookServerStaraya
Более подробно как создавать службы с нестадартным наименованием можно посмотреть тут
1. В Shelter.ini находим секцию [OnlineServer], там есть параметр «tcpport»
2. Для OnlineServerNovaya указываем «tcpport = 7779», для OnlineServerStaraya указываем «tcpport = 7778»
(Можно другие порты. Главное, чтобы их не занимали другие программы)


Выглядеть будет так:

1. Так как ранее для OnlineServerNovaya в Shelter.ini мы указали порт «7779», то в Shelter в настройках драйвера Travelline указываем «Порт ShelterOnlineServer - 7779»

2. Тоже самое делаем для OnlineServerStaraya, но уже указываем порт «7778», который мы указали в Shelter.ini для этой службы

Реализация доступна в версии 2.12.131.3200
В параметрах ChannelManager добавлена настройка "Сохранять переброни в лист ожидания", по умолчанию настройка выключена.

Реализация доступна в версии 2.12.132.3200
Реализовано корректное сохранение брони из WuBook, в которой есть скидка.
Необходимо сопоставить ID скидки WuBook и скидку в Shelter (поле "Идентификатор в системе WuBook").
ВНИМАНИЕ : реализована поддержка только процентной скидки WuBook, в Shelter скидка должна быть настроена на все услуги,
процент скидки WuBook и Shelter должен совпадать!
Модуль Travelline поддерживает работу с Shelter Lite, настраивается аналогично. Исключением по настройке интеграции является только заведение
организации Travelline.
1. Чтобы завести/отредактировать организации нужно создать любую бронь на шахматке (Рис. 22):

(Рис. 22)
2. В открывшейся карточке, в секции «Организации» нажать на <...> (Рис. 23):

(Рис. 23)
3. Откроется окно со списком заведенных организаций, в котором можно их добавлять/изменять. Необходимо нажать «Добавить» (Рис. 24):

(Рис. 24)
4. Открывается окно в котором необходимо заполнить тип клиента, краткое и полное наименование, тип организации и канал продаж.
Заполняем как на примере (Рис. 25):

(Рис. 25)
Краткое, полное наименование и тип организации можете указать по вашему усмотрению.
После выше описанных действий организация Travelline успешно настроена.
Если клиент жалуется что на какую-либо дату выгружается неправильная цена, или вообще не выгружается
Первое правило в данном случае - зайти в формирование тарифов, и в калькуляторе тарифов убедиться, что на заявленную дату в рамках тарифа,
используемого для интернет бронирования формируется верная цена. Если в калькуляторе цена не верна, значит это ошибка настройки тарифа,
а не выгрузки в TL. Если цены выгружаются до какой-то даты, а дальше нет, то возможно в модуле настроек стоит дата обновлять до этого числа.
Внимание!!! Если в личном кабинете WuBook уже заведены категории номеров и тарифы,
то их необходимо сопоставить с категориями и тарифами в Shelter :
1. В личном кабинете WuBook открыть вкладку «Тарифы» - «Категории», скопировать код категории (SNGL):

(рис. 26)
Добавить этот код в Shelter : Открыть «Справочники» - «Ресурсы» - «Типы ресурсов», выбрать соответствующую категорию, во вкладке «WuBook»,
в поле «Идентификатор» добавить скопированный ранее код :

(рис. 27)
Внимание!!! WuBook с дополнительными местами не работает, необходимо учитывать это при настройке интеграции.
2. Для сопоставления тарифов необходимо, в личном кабинете WuBook, перейти во вкладку «Тарифы» - «Тарифы»,
нажать на «Информация» для необходимого тарифа :

(рис. 28)
Внимание!!! Тип, для созданного ранее тарифа в WuBook, должен быть «С периодами»
В открывшемся окне необходимо скопировать цифровой ID тарифа из адресной строки (в данном случае 87321) :

(рис. 29)
Добавить этот ID тарифа в Shelter : Открыть «Справочники» - «Тарифы» - «Типы тарифов», выбрать соответствующий тариф,
во вкладке «Внешние системы», в поле «Использовать тариф для системы WuBook.net» прописать ранее скопированный код :

(рис. 30)
Установить чек-боксы «Использовать тариф для Интернет- бронирования», «Использовать тариф для системы WuBook.net»
и «Использовать по умолчанию».
В случае, если выгрузка в Wubook у вас уже работает и вы вносите изменения в Shelter по тарифу, количеству мест и тд, то после внесения изменений
выгрузку необходимо перезапускать (перезапуск служб OnlineServer и WubookServer).
Если служба работает неверно, то следует в первую очередь проверить что настройки верны:
1. Выбрана схема работы с квотами (не для лайт версии)
2. Добавлена организация для WuBook, в ее настройках указан канал WuBook.
В полной версии имеется договор по-умолчанию (в лайт версии не актуально).
3. В настройках верно указан lcode (код гостиницы). В карточке гостиницы в shelter так же во вкладке "внешние системы" указан этот lcode.
4. Выбран тариф, который будет использоваться для WuBook. В его настройках стоят флаги «использовать для интернет бронирования»,
использовать для wubook, верно указан id тарифа, минимум для одного тарифа выбрано «использовать по умолчанию».
5. Используется последняя версия модуля
6. Файл onlineserver.xml актуальной версии
7. Если в ключе нет проекта 3, модуль 5 - в onlineserver.xml все autostart="1" заменены на autostart="0" Причина 90% ошибок - неверные настройки.
Не поленитесь перепроверить их!
Порядок обмена:
Запрашиваются настройки через OnlineServer - пример:

TWuBookCM.Init Result = 1
Вызывается метод «acquire_token» (аутентификация) :

В ответе (успешно) получаем token:

Далее вызывается метод «fetch_rooms» (возвращает список категорий номеров, если они уже были заведены в WuBook) :

Ответ (успешно):

В данном случае в личном кабинете WuBook категории не заведены.
Проверка валидности токена «is_token_valid» :

Ответ (успешно) :

Значение 2 — количество раз, сколько раз был использован token (кратно 2-м). Один и тот же токен не может быть использован более 60 раз.
Выгрузка категорий номер происходит при помощи вызова метода : «new_room» :

Ответ (успешно) :

259268 - ID категории в личном кабинете WuBook
Далее идет проверка валидности токена («is_token_valid»)
Следующий метод «new_virtual_room» - создание виртуальной категории :

APP-1 — название созданной виртуальной категории Ответ аналогичный, как и при вызове «new_room»,
за исключением ID виртуальной категориии. Снова проверка валидности токена («is_token_valid»)
Далее выгружаются оставшиеся категории номеров и создаются виртуальные категории в личном кабинете WuBook
После выгрузки всех категорий номеров вызывается «release_token», чтобы “освободить” токен :

Ответ (успешно) :

Далее вновь вызывается «acquire_token», после успешного ответа и получения нового токена :

Вызываем «get_plans» (получение «шахматки» из личного кабинета WuBook) :

Ответ (успешно) :

В данном случае в личном кабинете WuBook не были заведены категории/тарифы, поэтому ничего не вернулось.
Далее снова проверка валидности токена : «is_token_valid»
Следующий метод «update_rooms_values» - выгрузка категорий и доступности :
После выгрузки доступности и стоимости вызывается «release_token» (освобождаем токен), а затем снова «acquire_token»
Метод «fetch_new_bookings» отвечает за проверку недоставленных броней из WuBook в Shelter

Ответ :

Возвращается «0» - недоставленных броней нет.
В случае, если есть недоставленные брони, от WuBook приходит xml, в которой содержится необходимая информация,
после чего происходит парсинг xml и её сохранение.
Для получения броней из WuBook за прошлый период, необходимо использовать функцию fetch_bookings
Для вызова этой фунцкии, необходимо в shelter.ini добавить секцию и параметры :
datefrom - Дата начала периода
dateto - Дата окончания периода
Формат даты зависит от региональных настроек Windows
OnCreated - 1 - Возвращает брони с фильтром по дате бронирования
OnCreated - 0 - Возвращает брони с фильтром по дате заезда.
После перезапуска службы, в логе можно увидеть вызов этой функции.
Данный функционал необходимо использовать с осторожностью! После получения броней за указанный период, секцию удалить и перезапустить службы.
Убедиться, что данный метод в логе не отображается!
Описание API WuBook : http://tdocs.wubook.net/index.html
Формирование логов для службы TravellineServer подчинается тем же правилам, что описаны и в мануале http://support.ucs.ru/ru/node/9533
То есть, на каждый запрос TRY, должен быть ответ DONE.
На примере интеграции с Travelline разберем типовые запросы/ответы.
Происходит запрос к базе данных на предмет получения настроек подключения к сервису Travelline через "Сервисы и оборудования" :
В ответ приходит строка такого формата :
6088 49488/26788 KB 17.01.2019 18:21:26.869 DONE: 1.12.810140.FreeQuery [62 ms, 7 records, 17.69 KB]
6088 49500/26788 KB 17.01.2019 18:21:26.869 Plugin Code=TTravelLineCM; IsDisabled=0; ComputerName=A-SAZONOV/A-SAZONOV; ServiceName=ShelterTravelLineServer/ShelterTravelLineServer; UserName=/СИСТЕМА
Далее возвращается xml с настройками из Shelter :
После выполнения внутренних запросов между службами TravellineServer, OnlineServer и БД Shelter, формируется и отправляется запрос по HTTP-протоколу (
Список кодов состояния HTTP) к сервису Travelline, вызывается метод HotelAvailRQ (получение информации по объекту) :
В ответ возвращаются категории номеров - <RoomTypes> (код API категории RoomType="116015") и тарифы <RatePlans> (код API тарифа RatePlanCode="13614")
ВНИМАНИЕ!!! Если в ответ на описанный выше метод, сервис Travelline вернул ошибку : <Errors><Error Language="EN" Type="4" Code="450" Tag="">Unable to process</Error></Errors>
То она обозначает, что неверно введен логин/пароль для подключения к сервису Travelline. Пароль для входа в личный кабинет и пароль для подключения к сервису Travelline - это разные пароли!
Если в Travelline заведена категория номера, но в Shelter не указан код API для этой категории, в логе можно будет увидеть ошибку :
Что бы понять, для какой организации не указан договор, можно воспользоваться следующим методом :
1. Запустить Shelter
2. Перейти в модуль "Договорная работа" и найти организацию с уникальным номером организации (не путать в фильтре с уникальным номером) - debtor="54":


Решение : завести договор, перезапустить службы поочердено (ShelterOnlineServer, потом ShelterTravellineServer)
Для Shelter Light заводить договор не надо.
Если не указан код отеля, в логе будет фигурировать следующая ошибка :
ERROR: Hotel Code is not listed in reference
Решение : указать код отеля в Shelter (в справочники-гостиницы и в "Сервисы и оборудования")
Для корректной выгрузки, помимо сопоставления API категорий номеров и API тарифов в Shelter и Travelline, необходимо убедиться, что для категорий, участвующих в выгрузке, настроен тариф. В противном случае, в логе можно наблюдать такую ошибку:
ERROR: UpdateAvailAndRates: [GetVacancyList Error]
Решение : проверить настройки тарифов
2. Выгрузка доступности (метод HotelAvailNotifRQ)
После успешной идентификации и проверки сопоставления кодов API, вызывается метод HotelAvailNotifRQ :
ВНИМАНИЕ! Выгрузка доступности происходит периодами.
Ответ :
Так же, стоит обратить внимание на корректность сопоставления кодов API для тарифов.
3. Выгрузка стоимости (метод HotelRateAmountNotifRQ)
Далее выгружается стоимость по тарифу :
ВНИМАНИЕ! Выгрузка стоимости происходит периодами.
Если клиент говорит, что выгружается неверная цена, первое, что необходимо сделать, это проверить стоимость в Shelter через калькулятор. В моём случае стоимость такая :

И на другие даты, соответственно :

Ответ :
Так же, можно столкнуться с таким ответом :
Данная ошибка возвращается от Travelline. Она может означать, что для данного тарифа отключена возможность выгрузки цен. По какой причине - лучше уточнять у специалистов Travelline.
3. Запрос недоставленных броней (метод HotelReadReservationRQ)
Ответ :
Означает, что на момент вызова метода, Travelline недоставленные брони не вернул.
В случае, если Travelline возвращает новые брони, ответ будет таким :
Существует несколько статусов брони :
Unconfirmed – бронь не подтверждена
Confirmed – бронь подтверждена
Cancelled – бронь отменена
Released – номер освобожден заранее
Pending – ожидается оплата
Перед сохранением брони в Shelter, происходит обмен данными между TravellineServer, OnlineServer и базой данных Shelter на предмет проверки настроек и корректности сопоставления тарифов, категорий номеров и пр.
После успешного сохранения брони в Shelter, формируется уникальный внутренний номер брони, к примеру :
Далее формируется xml с ответом об успешном сохранении брони :
4. Отправка уведомления о плучении брони (метод NotifReportRQ)
Ответ :
В случае, если сохранение брони не выполнилось, то уникальный внутренний номер брони не будет сформирован, а в Travelline не отправится уведомление о сохранении брони. В таком случае бронь в Travelline будет в статусе обработки, и каждый раз при вызове метода недоставленных броней будет возвращаться.
Инструкция соответстует версии 2.12.132.3280. Рекомендовано производить настройку на ней или более новой версией
Поддержано в версии 2.12.126.2650
Для настройки данной схемы работы необходимо при создании договора выбрать соответствующую гостиницу для каждого договора:

В Shelter может наблюдаться проблема с ростом занимаемой памяти shelter.exe для службы ShelterOnlineServer. В логах можно увидеть ошибку:
Message: Access violation at address 02888652 in module 'shelter.exe'. Read of address 0000001D
Или бесконечную проверку лицензии:
TRY: TLicence.SendCommandStr[ISCHANGE_ALL &SubscribeID=573&RID=216&TIME=20191127180518]
Служба продолжает работу, однако запросы и команды от ShelterTravellineServer/ShelterWubookServer не принимает и не обрабатывает.
Необходимо воспользоваться автоматическим перезапуском служб с помощью *.bat - файла. Пример *.bat-файл для перезапуска ShelterOnlineServer :
Пример *.bat-файл для перезапуска ShelterTravellineServer :
Необходимо добавить эти 2 *.bat файла в планировщик заданий и создать задание для поочередного перезапуска служб 1/2/3 раза в сутки :
1. ShelterOnlineServer
2. ShelterTravellineServer/ShelterWuBookServer
ВНИМАНИЕ!!!
В целях мониторинга работоспособности связки рекомендуем: сообщить в тех поддержку компании TravelLine e-mail ответственного за интеграцию сотрудника или общую почту тех. поддержки дилера. В случае потери связи TravelLine отправит письмо об этом. При восстановлении связи так же придет письмо.
ВНИМАНИЕ!!! Время заезда и выезда в Travelline и Shelter должны совпадать!
Служба ShelterTravelLineServer является посредником между системой глобального бронирования Channel Manager Travelline и программным
продуктом Shelter 2.
Передача данных между Travelline и службой ShelterTravelLineServer осуществляется в реальном времени, в формате XML.
Изображение структурной схемы работы (рис. 1):

Необходимо заключить договор с Travelline. Специалисты Travelline должны прислать параметры для интеграции, а именно :
Данные коды API вы можете просмотреть самостоятельно, в личном кабинете Travelline (рис. 2).
ВНИМАНИЕ!!!
Настройками тарифов/категорий номеров и пр. в лк Travelline сотрудники компании UCS не занимаются.
В связке используется модуль Shelter Online. При наличии Firewall, он должен быть настроен таким образом, чтобы отправлялись и получались
запросы на порт 7779 (или другой, если такая настройка будет произведена намеренно).
В ключ защиты должен быть прописан модуль связи с ChannelManager (Wubook/Travelline)

Настройки интеграции необходимо производить через «Сервисы и обрудование» (Настройки - Сервисы и оборудование) рис. 3:

Для настройки интеграции необходимо выполнить следующие действия :
1. Установить cлужбу Online Server; (мануал по корректной настройке можете посмотреть ТУТ)
-online_server -install
2. Установить службу для интеграции с Travelline (UCS Shelter Travelline Server) :
а) Создать директорию в корне Shelter (../Travelline/) и скопировать необходимые файлы :
shelter.exe
shelter.dll
gds32.dll
bass.dll
borlndmm.dll
libeay32.dll
ssleay32.dll
shelter.ini
б) Создать ярлык для shelter.exe, в свойствах ярлыка, в поле «Объект» добавить следующий ключ :
-travelline_server -install
в) Далее необходимо запустить ярлык от имени администратора. Должно появиться сообщение о успешной установке службы.
3. Зайти в Shelter – «Настройки»- «Сервисы и оборудование» (рис. 4) И добавить модуль Travelline согласно (рис. 5)


Настройки, изображенные на рис. 5, без необходимости не менять, параметр «Имя компьютера» заполнится автоматически, в соответствии с именем ПК.
4. Зайти в настройки модуля и настроить по аналогии с рис. 6

(Рис. 6)


Новая реализация с версии 2.12.127.2750!!!
Поддержано в версии 2.12.127.2750

Данная настройка необходима исключительно, если в Travelline выгружается тариф у которого есть пакеты услуг, которые НЕ включены в тариф:
1. Чек-бокс активен - цена по тарифу выгружается с учетом доп. услуг и при сохранении брони доп. услуги входят в стоимость по брони.
2. Чек-бокс не активен - цена по тарифу так же выгружается с учетом доп. услуг, но при сохранении брони доп. услуги начисляются дополнительно сверху стоимости по брони.
Настройки отправки E-Mail беруться из Shelter.ini секция [Exception Log]
Таймаут соединения с сервером Travelline. Указывается в миллисекундах (1 с = 1000 мс)
Таймаут чтения отвта от сервера Travelline. Указывается в миллисекундах (1 с = 1000 мс)
5. После завершения настроек в табл. 1 необходимо нажать кнопку «Сохранить»
6. Зайти в «Настройки» - «Справочники» - «Гостиницы» - «Гостиницы» и ввести Код гостиницы в поле «Код в системе Travelline» (рис. 7)

7. Перейти во вкладку «Ресурсы» - «Типы ресурсов» и внести соответствующие коды API в поле «Travelline» - Идентификаторы (рис. 8).
ВНИМАНИЕ (!!!) Количество основых и дополнительных мест в Shelter и Travelline должны совпадать

8. Перейти во вкладку «Тарифы» - «Типы тарифов» и выбрать созданный тариф для выгрузки в Travelline. Перейти во вкладку «Внешние системы»
и в поле «Использовать тариф для системы Travelline» прописать код API из личного кабинета Travelline и поставить чек-бокс
«Использовать тариф для системы Travelline» (рис. 9)

(Рис. 9)
Внимание (!!!) Соблюдайте уникальность тарифа в пределах категории номера.
9. Перейти в настройки системы : «Внешние системы»- «Схема работы» - выбрать необходимую схему работы (рис. 10).

(Рис. 10)
10. Перейти в модуль договорная работа : «Бронирование» - «Договоры» - «Добавить юридическое лицо» - Указать краткое и полное
наименование организации (Travelline) - рис.11, а так же указать WuBook/Travelline/ResOnline во вкладке «Интернет бронирование» - «Внешние системы» (Рис. 12)

11. Перейти во вкладку «Тарифы» и поставить чек-боксы «Активен» и «Использовать онлайн» для соответствующего тарифа,
а так же поставить чек-бокс «Не объединять с гостиничным тарифом» (это необходимо для того, чтобы стоимость по тарифу,
если она отличается от стоимости в Shelter, могла корректно сохраниться для определенной категории). (Рис. 13)

(Рис. 13)
12. Для сохранение оплаченных броней, необходимо добавить тип оплаты в «Справочники» - «Услуги» - «Оплаты».
Установить чек-бокс «Использовать для WuBook/Travelline» (рис. 14) и настроить оставшиеся обязательные поля по аналогии.

(Рис. 14)
Важно!!! Не забывайте удалять файл onlineserver.xml при обновлении Shelter. После запуска службы ShelterOnline он создастся заново,
актуальной версии.Если клиент использует только TravelLine, а интернет-бронирование нет (это разные модули в ключе защиты,
несмотря на то что тут ShelterOnline тоже используется!), необходимо в файле onlineserver.xml все значения autostart="1" заменить на autostart ="0"
и в shelter.ini в секции [onlineserver] выставить gds=BOOKING. Отследить необходимость данного действия можно по логу онлайн сервера.
В нем будет ошибка Device licence error. Если в ключе точно прописан проект 3, модуль 10, а проект 3, модуль 5 отсутствует - действуйте как указано выше.
13. Текущая настройка необходима для версий Shelter 2.12.127.2750 и выше!!! (Бывают исключения для версий старее)
Исправлен механизм сохранения платежей для TravellineServer.
Необходимо, в настройках киоска настроить «Возможные типы оплат» - устанавливаем чек-бокс на ранее заведенной оплате для Travelline:

(Рис. 15)
Так же нужно настроить поле «Список доступных пользователей» - устанавливаем чек-бокс на пользователе *TRAVELLINE*:

(Рис. 16)
Для каждого канала продаж необходимо создать организацию, переходим «Бронирование» - «Договоры» - «Добавить юридическое лицо». (рис. 15)

(рис. 15)
Указываем краткое и полное наименование организации (Booking.com), ниже во вкладке «Интернет бронирование» - «Внешние системы» указываем
канал продаж «Booking.com». (рис. 16)

(рис. 16)
Далее во вкладке «Договоры» настраиваем по аналогии с основной организацией Travelline.
Для каждого канала продаж, который использует ваша GDS система необходимо заводить организацию и настраивать по аналогии
из выше приведенного примера.
Для корректной настройки квот необходимо воспользоваться инструкцией Квоты.doc
Выбрать схему работы с квотами :

(Рис. 17)
Для выгрузки дополнительных мест в Travelline необходимо произвести следующую настройку:
1. Заходим в «Справочники» - «Справочники» - «Категория размещения» (Рис. 18)

(Рис. 18)
2. Если у вас уже заведены цены для доп. мест, то данная категория размещения уже должна быть заведена (если ее нету, то добавляем ее).
Выбираем доп. место и нажимаем кнопку «Изменить», в открывшемся окне необходимо поставить чек-бокс «Использовать для Travelline». (Рис. 19)

(Рис. 19)
Если все остальные настройки корректны, то после произведенной настройки доп. места начнут выгружаться в Travelline.
Для выгрузки возрастных категорий необходимо создать в ЛК Travelline возрастные категории.
По вопросу создания категорий необходимо обратиться в Travelline. Далее в Shelter необходимо создать возрастные категории.
«Справочники» - «Справочники» - «Возраст гостя»

(Рис. 20)
Создать необходимые категории и указать в настройках «Использовать для Travelline» и указать код из системы Travelline.
ВНИМАНИЕ!!! Чек-бокс для взрослого "Использовать для Travelline" ставить не нужно!!
В Travelline настройка идет следующим образом: «Ребенок от 7 до 12 лет», далее «Ребенок от 12 до 13 лет», «Ребенок от 13 до 14 лет», «Ребенок от 14 до 15 лет».

В Shelter необходимо указать код для Travelline в таком порядке:
1. «Ребенок от 7 до 12 лет» - 0
2. «Ребенок от 12 до 13 лет» - 1
3. «Ребенок от 13 до 14 лет» - 2
4. «Ребенок от 14 до 15 лет» - 3
и тд. по возрастанию в зависимости сколько у вас возрастных категорий
Так же необходимо донастроить тариф (завести операции тариф-пакета для детей)
ВНИМАНИЕ!!! Данный функционал доступен только с версии 2.12.125.2480 или новее
Теперь в настройках Travelline можно установить необходимый статус для приходящих броней. Заходим в Shelter – «Настройки» – «Сервисы и оборудование»
и открыть настройки Travelline. В них можно увидеть поле «Статус брони» в котором нужно указать необходимый статус для приходящих броней (рис. 21).

(Рис. 21)
Описание статуса броней:
Для настройки интеграции двух гостиниц в одной базе данных необходимо сделать следующее:
1. Гостиница Новая - OnlineServerNovaya и TravellineServerNovaya
2. Гостиница Старая - OnlineServerStaraya и TravellineServerStaraya
Более подробно как создавать службы с нестадартным наименованием можно посмотреть тут
1. В Shelter.ini находим секцию [OnlineServer], там есть параметр «tcpport».
2. Для OnlineServerNovaya указываем «tcpport = 7779», для OnlineServerStaraya указываем «tcpport = 7778»
(Можно другие порты. Главное, чтобы их не занимали другие программы)


Выглядеть будет так:

1. Так как ранее для OnlineServerNovaya в Shelter.ini мы указали порт «7779», то в Shelter в настройках драйвера Travelline указываем «Порт ShelterOnlineServer - 7779»

2. Тоже самое делаем для OnlineServerStaraya, но уже указываем порт «7778», который мы указали в Shelter.ini для этой службы

Реализация доступна в версии 2.12.131.3200
В параметрах ChannelManager добавлена настройка "Сохранять переброни в лист ожидания", по умолчанию настройка выключена.

Реализация доступна в версии 2.12.131.3200
В параметрах ChannelManager добавлена настройка "Сохранять брони с дополнительным номером" :

Модуль Travelline поддерживает работу с Shelter Lite, настраивается аналогично. Исключением по настройке интеграции является только заведение организации Travelline.
1. Чтобы завести/отредактировать организации нужно создать любую бронь на шахматке (Рис. 22):

(Рис. 22)
2. В открывшейся карточке, в секции «Организации» нажать на <...> (Рис. 23):

(Рис. 23)
3. Откроется окно со списком заведенных организаций, в котором можно их добавлять/изменять. Необходимо нажать «Добавить» (Рис. 24):

(Рис. 24)
4. Открывается окно в котором необходимо заполнить тип клиента, краткое и полное наименование, тип организации и канал продаж.
Заполняем как на примере (Рис. 25):

(Рис. 25)
Краткое, полное наименование и тип организации можете указать по вашему усмотрению.
После выше описанных действий организация Travelline успешно настроена.
Если клиент жалуется что на какую-либо дату выгружается неправильная цена, или вообще не выгружается
Первое правило в данном случае - зайти в формирование тарифов, и в калькуляторе тарифов убедиться, что на заявленную дату в рамках тарифа,
используемого для интернет бронирования формируется верная цена. Если в калькуляторе цена не верна, значит это ошибка настройки тарифа, а не выгрузки в TL.
Если цены выгружаются до какой-то даты, а дальше нет, то возможно в модуле настроек стоит дата обновлять до этого числа.
В случае, если выгрузка в Travelline у вас уже работает и вы вносите изменения в Shelter по тарифу, количеству мест и тд, то после внесения изменений выгрузку необходимо перезапускать (перезапуск служб OnlineServer и TravellineServer).
Если служба работает неверно, то следует в первую очередь проверить что настройки верны:
1. Выбрана схема работы
2. Добавлена организация для TL, в ее настройках указан канал TL. Имеется договор по-умолчанию.
3. В настройках верно указан код гостиницы. В карточке гостиницы в shelter так же во вкладке "Сервисы и оборудование" указан этот код
4. Выбран тариф, который будет использоваться для TL. В его настройках стоит флаг использовать для TL, верно указан id тарифа.
5. Используется последняя версия модуля
6. Файл onlineserver.xml актуальной версии
7. Если в ключе нет проекта 3, модуль 5 - в onlineserver.xml все autostart="1" заменены на autostart="0" Причина 90% ошибок - неверные настройки.
Не поленитесь перепроверить их!
Порядок обмена:
Запрашиваются настройки через OnlineServer — пример:

TTravelLineCM.Init Result = 1
Вызывается метод «HotelAvailRQ» (TRY: HotelAvailRQ), отправляем по HTTP-протоколу сформированный xml-запрос :

Если доставка успешна — получем ответ (DONE: HotelAvailRQ), который возвращает Типы номеров (<RoomTypes>

Происходит сопоставление типов категорий номеров и типов тарифов в Travelline и Shelter (по API — кодам, количеству основных/дополнительных мест)
Далее вызывается метод HotelAvailNotifRQ (TRY: HotelAvailNotifRQ) - выгружается доступность номерного фонда

Ответ :

После этого вызывается HotelRateAmountNotifRQ (TRY: HotelRateAmountNotifRQ) – выгрузка стоимости по тарифу

Ответ :

Проверка недоставленных броней происходит при помощи метода HotelReadReservationRQ (TRY: HotelReadReservationRQ)

В ответ (DONE: HotelReadReservationRQ) приходит xml с информацией по брони (канал бронирования, номер брони, дата заезда/выезда и пр.)
Происходит парсинг xml средставми службы Travelline и сохранение брони.
Выгрузку доступных мест (основных и доп.) можно увидеть в логе, по ключевому слову : <rs_quant>
Где каждая нода <rs_qant>
Принудительная выгрузка из Shelter в TravelLine.
Для принудительной выгрузки цен и доступности, необходимо на ПК, где установлены службы для интеграции Shelter и TravelLine (чаще всего это серверный ПК), выполнить перезапуск служб в следующем порядке :
1. Остановить службу UCS Shelter TravelLine Server;
2. Остановить службу UCS Shelter Online Server;
3. Запустить службу UCS Shelter Online Server;
4. Запустить службу UCS Shelter TravelLine Server;
Структурная схема.

Структура взаимодействия модулей и программ.
RKeeper при оплате на специальную валюту обращается к FarCards, который вызывает подключенную к нему sdmHTTPFarCard.dll.
Последняя dll обращается к ключу защиты и если лицензия найдена (проект 2 модуль 11),
отправляется XML запрос на TCP/IPi сервер - программу HTTPRKtoSH.exe. Этот сервер обращается к ShelterConnect.dll,
которая работает с базой данных Shelter.
Дистрибутив находится на FTP
Настройки RKeeper7.
1. Зайти в меню Сервис - Кассовые станции и устройства. Добавить устройство: PDS Interface#1. (Рис.1)

(Рис. 1)
2. Зайти в меню Сервис - Интерфейсы. Добавить новый интерфейс. Назовем его INTF Shelter FC (Рис.2)

(Рис. 2)
В данном интерфейсе указываем ранее заведенный PDS interface. Код интерфейса необходимо прописать в фале HTTPRKtoSH.ini, в секции :
[SERVER]
RKInterfaceID=6
3. Перейти в меню «Сервис» - «Обработка сигналов устройств» - «MCR алгоритмы» и добавить MCR-алгоритм.
Указываем область «Интерфейс», а так же объект - заведенный ранее интерфейс из п.2. Если указать область «Валюта»,
то при оплате появится ошибка 232: "Не получается напечатать чек: Персональное ограничение для "" = 0.00."

(Рис. 3)
4. Далее, необходимо завести валюту, в разделе «Платежные карты» - «На номер FC» - Рис. 4

(Рис. 4)
Аналогично необходимо настроить закрытие на фолио (создать валюту).
Настройки FarCards :
FarCards необходимо установить на ПК, к которому физически подключен ключ защиты (для Shelter), а так же убедиться,
что в ключе присутствует соответствующий модуль :
Проект 2, модуль 11 - Интерфейс РК-Шелтер
Доработка по отмене проверки лицензии со стороны httpFarCards ведется в задаче : http://tracker.ucs.ru/issues/116728
Более подробную информацию по установка FarCards можно найти тут : http://support.ucs.ru/ru/node/6673#header-10

(Рис. 5)
Пример настройки FARCARDS.INI :
[FarServer]
Type = 1
DLL = sdmHTTPFarCard.dll
Gate = 3
log = 30
XMLCP=1251
[LinkDLL]
1 = RTCP
2 = RNBOpen
3 = pds_netk
[RTcp]
$Client1 = Премьера
$Server1 = 127.0.0.1
$Port = 2277
[RNBOpen]
APServer = CS_SERV
[pds_netk]
NetServerName=rkfcsh2
ininame=netk.ini
DebugMessages=1
[Card System 5]
Address=127.0.0.1
Port=9191
Log_Level = 10
Log_Count = 5
Qualifier = 2
Images_Path = E:\CS_501\images\
netk.ini :
[netkern]
TESTMESSAGES=0
protocols=tcpsoc.dll
[TCPSOC]
port=2234
HTTPFarCard.ini :
[PARAMS]
ClientCode = HOTEL
UserCode = UCS
UserPwd = 12345
LangCode = RU
[SERVER]
Host = 127.0.0.1
Port =2277
[LOG]
FileName=HTTPFarCards_AB.log
Level = 100
DebugLevel = 100
FarCards обращается к sdmHTTPFarCard.dll, которая должна находиться в папке с FarCards. sdmHTTPFarCard.dll защищена
ключом защиты UCS Shelter. Этот ключ должен физически находиться на машине, где запущен FarCards. В случае связи с ПО Абонемент
или гостиничной системой Shelter, можно воспользоваться одним ключом, если FarCards запущен на одном сервере с Shelter или Абонемент.
Настройки осуществляются в файле HTTPFarCard.ini. Ниже приведен его пример.
HTTPRKtoSH.ini:
[SERVER]
Port = 2277
RKInterfaceID=6
AllCheckToHotel = 1
IdentPhysType = 2
Autostart = 1
Autohide =0
[LOG]
FileName = C:\UCS\HTTPtoAB\LOG\HTTPRKtoSH.log
Level = 100
DebugLevel =100
ByMonthes = 1
ByDays = 1
ByHours = 1
HTTPRKtoSH.exe является сервером, который слушает TCP/IP и обрабатывает XML запрос от sdmHTTPFarCard.dll. HTTPRKtoSH.exe
по умолчанию всегда вызывает функции ShelterConnect.dll, которая должна находить в одной директории с ним.
Основные настройки осуществляются в файле HTTPRKtoSH.ini
ShelterConnect.ini:
[Database]
и имени компьютера, на котором установлен Shelter.
Должен быть 0. При переходе с Rkeeper 6, поменять на 0!


Далее необходимо сопоставить код услуг shelter c группами станции RK в shelterconnect.ini FARCARDS (Рис 7).



После закрытия на номер с каждой из станции на фолио гостя будут отображаться две услуги «Бар» и «Ресторан» (Рис. 10).

Рис 10.
Разделение услуг по категории заказа.
Для корректного отображения услуг необходимо использовать следующие версии приложения и библиотеки:
- ShelterConnect.dll v_1.8.0.3;
- HttpRKtoSh v_1.4.
В RK необходимо настроить и завести категории заказа, которые будут выбираться при создании заказа. В нашем случае заведены следующие категории заказа: Бар, Основной и Ресторан.

Рис 11.
Для закрытия на номер по категории заказа необходимо в shelterconnect.ini добавить параметр ConvertOperationType =0
[ExternalClient]
…
ConvertOperationType =0 //Если 0, то закрытие на номер происходит по группе станции. Если 1, то по категории заказа
…
При значении параметра ConvertOperationType =1 в секции [TranslateOperation] сопоставляем код категории заказа из поля «Код» (Рис 11) с заведенной услугой в shelter
[TranslateOperation]
1 = 305
2 = 302
3 = 307
4 = 303
5 = 301
Заведенные услуги в shelter

Для проверки корректности работы при создании заказа, необходимо выбирать категорию заказа (Рис 12).

Рис 12.
После заполнения всех полей и закрытия на номер, на фолио гостя отобразится услуга Бар или Ресторана в зависимости от выбранной категории заказа.

Все услуги, закрытые на номер через быстрый чек, будут отображаться той категории заказа, которая заведена по умолчанию в RK.
Разделение услуг БАРА и РЕСТОРАНА
(Выделение алкоголя. Схема из задачи #173858).
Для реализации данной схемы неообходимо два экземпляра FARCARDS, которые можно запустить на одном рабочем месте, указав разные порты.
Настройка shelterconnect.ini представлена на рисунке 13.

Рис.13
Настройка PDS Interface настраивается аналогичным образом, как и при закрытии на номер, за исключением параметра «Pass All Receipts XML data». Настроки представлены на рисунке 14.

Рис. 14
Сами интерфейсы настраиваются точно также, как и при закрытии на номер

Рис. 15
Для разделения блюд по разным категориям на БАР и РЕСТОРАН, настроили две классификации блюд в "Отдел ФР" по мануалу https://support.ucs.ru/ru/node/7224 , которые представлены на рисунке 16.

Рис. 16
Далее необходимо завести две валюты и для каждой выбрать классификацию, которые были созданы раннее (Рисунок 17)

Рис. 17
Для реализации данного механизма потребуется либо ФР, либо принтеры печати. В нашем случае был использован один принтер печати SEWOO, настройки представлены ниже на рисунке 18.

Рис. 18
Если не настроить "Назначение принтеров", то при закрытии на номер будет ощибка

Для проверки корректности работы, создается стол или быстрый чек, добавляем блюда из БАРА и РЕСТОРАНА (Рисунок 19)

Рис. 19
После всех корректных настроек должны появится ранее созданные валюты и делаем закрытие на номер выбирая каждую из валют.

Рис 20.
После поочередного закрытия на номер каждой валютой выйдет два чека и на фолио гостя отобразятся две услуги БАР и РЕСТОРАН (Рисунок 21)

Рис 21.
Закрытие числовой номер или название комнаты в Shelter
Через FarCards возможно закрывать на символьные номера, например, 3M, Fito и т.д. (Рисунок 22).

Рисунок 22
Для этого необходимо для валюты "Закрытие на номер" в поле "Формат доп. инфо" ввести маску Raaaa

Рисунок 23
После чего, в поле ввода необходимо вводит необходимый номер комнаты, например, Fito.

Рисунок 24
После ввода номера/названия комнаты появится стандартное окно с информацией о госте и балансе.

Находим файл Rkeeper.ini, обычно он находится в папке C:\RK6. В этом файле ищем секцию [Transport], смотрим значение параметра StockPath = …
В этой папке будет сформированы файлы, в том числе и файл menu.dbf. Именно этот файл используется в Shelter в менеджере мероприятий.
Запустить программу Transp32.exe, выбрать меню файл, экспорт в склад.
1. Сохраняем файл menu.dbf, например, в папке запуска программы Shelter.
2. Заходим на панель управления компьютера, находим там папку «Администрирование» и заходим в нее (Win32), если win64 то заходим в sysWow64 и запускаем odbc.
3. В этой папке находим «Источники данных (ОDBС)» и заходим в эту папку.
4. Переходим на закладку «Системный DSN», нажимаем на кнопку «Добавить».
5. В списке драйверов выбираем dBASE files (Microsoft Access d BASE Driver(.dbf)) выделяем его и нажимаем кнопку «Готово».
6. Появляется окно «Установка драйвера ODBC для dBASE». В поле «имя источника данных» прописываем название (Например: rkmenu)
7. Снимаем галочку «использовать текущий каталог» и выбираем каталог из списка (Выбираем тот каталог, где мы в п.1 сохранили файл menu.dbf) .
При правильном выборе каталога, в левом поле окна «выбор каталога» появится нужный нам файл menu.dbf. Нажимаем на «OK».
8. Заходим в SHETER\EXE\ и открываем events.ini. В параметре Data Source должно быть прописано то название, которое мы прописали в п.7.
9. Запускаем программу, после создания варианта меню на закладке ресторан появится список блюд.
Для выгрузки меню из R-Keeper7 необходимо скачать архив rk7dbf_11055 с FTP.
Настраиваем rk7_dbf.ini в соответствии со статьей http://support.ucs.ru/ru/node/7952. После выгрузки меню (Menu.dbf), необходимо его подключить
к менеджеру мероприятий.
1. Сохраняем файл menu.dbf, например, в папке запуска программы Shelter.
2. Заходим на панель управления компьютера, находим там папку «Администрирование» и заходим в нее (Win32), если win64 то заходим в sysWow64 и запускаем odbc.
3. В этой папке находим «Источники данных (ОDBС)» и заходим в эту папку.
4. Переходим на закладку «Системный DSN», нажимаем на кнопку «Добавить».
5. В списке драйверов выбираем dBASE files (Microsoft Access d BASE Driver(.dbf)) выделяем его и нажимаем кнопку «Готово».
6. Появляется окно «Установка драйвера ODBC для dBASE». В поле «имя источника данных» прописываем название (Например: rkmenu)
7. Снимаем галочку «использовать текущий каталог» и выбираем каталог из списка (Выбираем тот каталог, где мы в п.1 сохранили файл menu.dbf) .
При правильном выборе каталога, в левом поле окна «выбор каталога» появится нужный нам файл menu.dbf (Рис. 1). Нажимаем на «OK».

Рис. 1 – Основные настройки
8. Заходим в SHETER. Переходим в «НАСТРОКИ СИСТЕМЫ – ВНЕШНИЕ СИСТЕМЫ – R-Keeper» и в параметре «База данных» прописываем название,
которое мы прописали в п.7 (Рис. 2).

Рис. 2 - Настройки системы в Shelter
9. После переходим в «Менеджер мероприятий», создаем мероприятие и для создания варианта меню на закладке ресторан появится список блюд (Рис. 3).

Рис. 3 - Менеджер мероприятий с загруженным меню
ВНИМАНИЕ!!! Выгруженное меню используется для отчета "Коммерческое предложение", в котором будет отображатся все позиции с указанием цен.
Файлы для закрытия на номер можно скачать тут
Для настройки связки RK7 + Shelter2 для закрытия заказа на баланс фолио в Shelter потребуется произвести следующие настройки:
1. Станция Менеджера, добавляем на «Кассовый сервер» интерфейс «Shelter interface». (Рис. 1)

(Рис. 1)
2. Настраиваем «Деньги» → «Валюты» → «Карты Отелей» → «Карта Отеля» (Рис. 2)
Необходимо проверить:

(Рис. 2)
3. Настраиваем кнопку «Оплата Картой» (Рис. 3)
«Настройки» → «Параметры» → «Параметры рабочей станции» → «Редактирование заказа» → «Расчет\оплата заказа» → «Оплата платежной картой»
В свойствах ставим:
(Рис. 3)
4. Настройка «MCR алгоритма» (Рис. 4)
«Сервис» →«Обработка сигналов устройств» →«MCR алгоритмы» →«Карта отеля»
Ставим:

(Рис. 4)
5. Копируем библиотеку ShelterConnect в каталог RK7\bin\win (Рис. 5)
Файлы, которые следует перенести:

(Рис. 5)
6. Настраиваем ShelterConnect.ini :
[Database]
DBName = 172.22.10.41/3080:D:\Base\Garbage_Shelter\a.gusev\severnaya\SHELTER1.fdb - имя базы Shelter-а, с указанием полного пути
и имени компьютера, на котором установлен Shelter.
Dbuser = UCS - имя пользователя для подключения к базе Shelter-а
DBpassword = oQKH8n0BFUE= - пароль для подключения к базе Shelter-а
[ExternalClient]
ClientID=1 - код shelterconnect'a, если используются несколько ShelterConnect.DLL
IdentPhysType = 200 - Тип устройства
ConvertOperationNeed = 1 - 0- не использовать секцию [TranslateOperation], 1- использовать секцию
ToOEM = 0 - (0 - нет конвертирования, 1- конвертирование текстов в/из OEM/Windows (ошибки, комментарии, тексты ... )).
Должен быть 0. При переходе с Rkeeper 6, поменять на 0!
NeverRestrictTransaction = 0 (0- проверять баланс фолио перед совершением транзакции, 1- не проверять баланс перед совершением транзакции).
FolioMask = $04 - Фиксированное значение. Устанавливается UCS. Не трогать!
ShowBalance = 1 (1 — при запросе разрешенной суммы оплаты добавлять к имени клиента текущий баланс, 0 - не добавлять).
ShowBalanceFirst = 1 - показывать баланс перед именем клиента.
ShowBalanceEverywhere = 1 - добавлять баланс к имени клиента при всех запросах (запрос разрешенной суммы и запрос информации о комнате).
UseScreenHeader0 =1
UseScreenHeader1 =1
UseScreenSequelCode =1
; BalanceBySection = 2
; BalanceBySectionKind= 0
ShowPermissibleSumAsBalance = 1
ConvertExtIDtoNumber = 1/0 - использование внешенего номера, описание ниже.
RoomInfoMode = 3
[GarbageCollector]
Enabled = 0
LifeTime = 120
[SCRK6]
UseDetails = 0
AlcoholicOperation = 999
Messages = SCRK6.eng.msg
UseScreenHeader0 = 1
UseScreenHeader1 = 1
UseScreenSequelCode = 1
UseSuperDetails = 1
[PARAMS]
NoAutoDiscount = 0
Section =2 - указаывается секция, на которую будет начислена услуга
UseSection =1 - использование секций для закрытия заказа на определенную секцию
[TranslateOperation]
0 = 301
1 = 301
24 = 301
[TranslatePayment]
10001 = 501,903
Необходимые настройки shelterconnect.ini для контроля баланса секции фолио в Shelter
[ExternalClient]
….
ShowBalance = 1
ShowBalanceFirst = 1
ShowBalanceEverywhere = 1
BalanceBySection = 2 (где 2 номер секции фолио)
BalanceBySectionKind=0
….
[PARAMS]
….
Section =2 (где 2 номер секции куда будет произведена транзакция из R-keeper)
UseSection =1
….
Описание параметра ConvertExtIDtoNumber
Данный параметр необходимо включать, если в одной базе данных shelter более 2-х гостниц и существует одинаковые номера, а также номера, включающие символы, например, номер 7 и 7в.
После включения данного параметра в shelterconnect.ini, необходимо в "Номерной фонд" в справочниках shelter проставить параметр "Внешний номер", после чего на кассе RK, необходимо вводить проставленный номер параметра "Внешний номер".

7. Перезапускам кассовый сервер.
8. Проверяем работу закрытия на номер

Выбираем «Карты отелей» (Рис. 6)

(Рис. 6)

Необходимо ввести номер комнаты, в которой проживает гость. (Рис. 7)

(Рис. 7)
После ввода номера должен отобразиться гость, который проживает в данном номере. (Рис. 8)

(Рис. 8)
Далее нажимаем оплата картой и подтверждаем оплату. (Рис. 9)

(Рис. 9)
Оплата должна упасть на фолио гостя (Рис. 10)

(Рис. 10)
1. Механизм работы
Гостя размещают в гостинице по тарифу с завтраком. Придя в ресторан на завтрак, кассир через быстрый чек, выбирает комплексное блюдо,
например «Завтрак».
Кол-во таких блюд в заказе должно соответствовать кол-ву пришедших в данный момент людей. Нажимает на кнопку «Расчет заказа» и выбирает
тип оплаты «Закрытие на номер». Вводит номер комнаты гостя. Или прикладывает карту-идентификатор к считывателю. На экране отображается ФИО гостя. Кассир нажимает кнопку «Оплата картой».
На экране отображаются все положенные услуги питания на этот номер. Рис 1.

(Рис. 1)
Кассир отмечает, например «Завтрак» - также по кол-ву пришедших людей. Таким образом, сумма заказа становится равным нулю.
Заказ оплачивается через закрытие на номер. При этом заказ с нулевой ценой на фолио не попадет. А у требуемых услуг питания появится отметка
о отгрузки данный услуг.
2. Настройки Shelter
В Shelter2 заведены тарифы таким образом, что услуги питания выделены отдельно. Завтрак включен в тариф и начисляется отдельной услугой
по кол-ву проживающих в номере людей. В настройках программы нужно включить опцию «Создавать схему питания для внешних систем».
«Настройки системы» - «Прочие»- «Создавать схему питания для внешних систем». (Рис. 2)

(Рис. 2)
В карточке поселения появится кнопка «Расписание питания». Информация в RK передается согласно данным из этой карточки.
Если в ней нет данных, то в RK7 не будет видно, что этому гостю положены услуги питания. В настройках Shelter2 нужно завести расписание питания.
В нем указать те же самые услуги питания, которые включены в тариф (данном случае завтрак 33010).
3. Настройка RK7
Заводится блюдо, например Завтрак. Стоимость данного блюда равняется стоимости соответствующей ему услуги питания в Shelter2.
В менеджерской части RK7 завести скидки. Скидка должна делаться только на те блюда, которые отгружаются в завтрак (обед, ужин).
Если на завтрак разрешено отпускать только одно комплексное блюдо, то скидка работает только на него. Важно, чтобы скидка делалась многократно.
А код скидки (33010) соответствовал коду услуги Завтрак, заведенной в Шелтер. Количество скидок соответствует кол-ву услуг питания входящих
в тарифы (детский завтрак, обед, ланч..). Настройка скидок отображена рис. 3 и рис. 4.
Настройка обеда, ужина и тд. производится идентично

(Рис. 3)

(Рис. 4)
Для установки программно-аппаратного комплекса Shelter 2 (ver. 2.12.120.2365 и выше) необходимо скачать с FTP установочный файл необходимой версии.
После получения установочного файла (setup_shelter_2.12.120.2365.exe и выше) его необходимо:
1. Запустить файл от имени администратора;
2. Выбрать необходимый языковой пакет;
3. Указать каталог для установки Shelter:

4. В следующем окне (Выбор компонентов), из выпадающего списка, выбрать «Установка серверной части», переместиться в конец списка
и отметить чек-боксами необходимые пункты меню. По умолчанию, основные пункты уже отмечены. Единственно, что необходимо изменить,
это выбрать «SuperServer - один процесс на все соединения» :

А так же выбрать разрядность «Драйвер Guardant 5.50» :

5. В выпадающем списке выбрать «Установка клиентской части» и выбрать необходимые пункты меню для установки.
6. После выбора всех необходимых компонентов нажать «Далее».
7. В следующем окне предлагается выбрать папку в меню «Пуск». Можно оставить по умолчанию Shelter.
8. В окне выбора дополнительных задач выбрать чек-бокс «Создать значок на рабочем столе».
9. В окне «Настройка» :

Firebird: название службы
Shelter2 (можно не изменять)
Firebird: номер порта
3080 (как правило 3050 - для Firebird 1.5, а 3080 - для Firebird 2.5, так же можно указать любой свободный порт)
Сервер блокировок: IP-адрес
127.0.0.1 (IP-адрес машины, где будет установлен сервер блокировок)
Сервер блокировок: Порт
1114 (можно указать любой свободный порт)
Путь к базе данных Firebird 2.5:
Прописать путь до БД, с указанием IP-адреса и номера порта Firebird
Путь до локального сервера обновлений:
Указать путь до папки, в которую будут скачиваться файлы для обновления (на данном этапе установки не обязательно заполнять это поле)
10. В следующем окне отображается список всех выбранных компонентов для установки, нажать «Далее».
11. В процессе установки Shelter появится всплывающее окно с выбором языка для установки «Firebird ODBC Driver».
Выбрать соответствующий язык, нажать «Далее» - Принять лицензионное соглашение - «Далее» - при необходимости,
указать директорию для установки «Firebird ODBC Driver» - «Далее» - в следующем окне, в выпадающем списке, выбрать необходимый пункт меню
(как правило, «Полная установка»), затем нажать «Далее», выбрать папку в меню «Пуск» (можно не изменять) - «Далее» -
«Установить» - выполняется процесс установки - «Далее» - снять чек-бокс с «Просмотреть Readme.txt» - «Завершить».
12. Появится информационное окно, сообщающее о начале подготовки базы данных. Подготовка базы данных означает восстановление из резервной
копии (restore). Если, по какой-то причине, не удалось восстановить БД в момент установки Shelter, то это можно сделать после, воспользовавшись restore.bat
12.1. Если подготовка БД не произошла, то необходимо перейти в каталог с установленным Shelter, в папку IBDATA, найти и открыть файл restore.bat.
Проверить корректность путей до shelter.fbk и gbak.exe, после чего запустить restore.bat.
База данных должна отресториться корректно и называться SHELTER.FDB
13. В обязательном порядке настроить и проверить резервное копирование базы данных по расписанию. В противном случае, при поломке БД,
вы не сможете восстановить работоспособность объекта, путем выполнения базы данных при помощи restore.bat.
Рекомендации по резервному копированию :
Резервное копирование выполняется при помощи backup.bat и планировщик заданий; Копирование необходимо выполнять, как можно чаще,
несколько раз в день; Файлы с резервными копиями БД рекомендуется держать не на системном диске, при этом параллельно копировать на сетевой диск;
ВНИМАНИЕ (!!!) Файлы, содержащие в названии «breaked» не являются корректными. Breaked может свидетельствовать о поломке БД.
ВНИМАНИЕ (!!!) Все действия, выполняемые с базой данных Shelter (backup/restore), должны производиться только от пользователя UCS в FireBird (не путать с пользователем ucs в Shelter)
14. Переместить shelter.ini из директории :
C:\Users\%USER_NAME%\AppData\Roaming\UCS\Shelter в директорию с установленным shelter и добавить в shelter.ini следующие секции :
[INI]
Path=%EXE_PATH%\shelter.ini
[Log]
Path=%EXE_PATH%\Logs\
name=
level=100
debuglevel=100
fileage=0
maxlogsize=20
Секция [INI] нужна для того, чтобы файл с настройками «читался» из директории, где находится shelter.exe.
Так же необходимо добавить секцию :
[server]
tcpport=1114
tcphost=
Параметр tcpport отвечает за порт, на котором будет запущен LockServer.
Параметр tcphost не изменять.
15. В директории Shelter создать ярлык для shelter.exe, в свойствах ярлыка, в поле «Объект» добавить следующий ключ :
-lock_server -install
Данный ярлык необходимо запустить от имени администратора, должно появиться сообщение об успешной установке службы UCS LockServer
(сервер блокировок) :

Необходимо перейти в «Службы» и запустить (если не запущено) UCS Shelter Lock Server
Проверьте наличие необходимых модулей в ключе защиты.
16. Запустите shelter.exe
При запуске может появиться следующее окно :

Означает, что нет подключения к серверу блокировок. Необходимо нажать «Ок», появится следующее окно :

Нажимаем «Да»
В появившемся окне указать IP-адрес ПК, где запущен сервер блокировок, а так же указать порт и нажать «Проверить соединение»
Если всё указали верно, то появится следующее сообщение:

Нажать «Ок» - «Далее»
17. Аналогичная проблема может возникнуть при подключении к базе данных :

Нажать «Да». В открывшемся окне проверить параметры подключения к БД :

После ввода правильных параметров подключения к БД необходимо нажать «Проверить соединение»
Если подключение к БД прошло корректно, появится соответствующее сообщение об успешном установлении соединения :

Нажимаем «Ок»
18. Для установки Shelter 2 на клиентских ПК необходимо создать папку, к примеру Shelter2 и скопировать в нее следующие папки :
Dosc
FRF
IBExpert
Languages
LIB
И файлы :
shelter.exe
shelter.dll
gds32.dll
bass.dll
borlndmm.dll
libeay32.dll
ssleay32.dll
shelter.ini
shelter2.chm
Далее необходимо добавить путь до содержимого папки LIB в переменные среды :
Нажать ПКМ на «Этот компьютер» - «Свойства» - «Переменные среды» - в поле «Системные переменные» необходимо найти переменную «Path» :

Дважды нажать на эту переменную, в открывшемся окне нажать «Создать» :

В созданном поле скопировать путь до содержимого папки LIB и нажать «ОК»
После этого можно запускать Shelter
Так же, стоит обратить внимание на права доступа в Windows. Желательно назначить максимальные права для папки Shelter
и на сервере и на рабочих местах.
ВНИМАНИЕ!!! Скрипт можно выполнять только на пустой базе, в которой нету на шахмате поселений и броней
В случае, если у вас в новой базе данных после установки дата на шахматке не соответствует сегодняшней, вам нужно выполнить скрипт на базе через IBExpert:
update DEFAULT_VALUES set strvalue = floor(d2dbl('now')) where name = 'WORKSHIFT_DATE';
update POS set shift = 1;update POSSHIFTS set pos = 1, begindate = d2dbl('now');update FOLIO set creationdate = d2dbl('now'), creationshift = floor(d2dbl('now'));update WORKSHIFTS set id = d2dbl('now'), begindate = d2dbl('now') where id = (select max(id) from WORKSHIFTS);update HOTELS set workshift = floor(d2dbl('now'));commit;
Настройка автоматического резервного копирования.
Необходимость настройки автоматического резервного копирования продиктована множеством причин и является обязательным элементом работы с БД. При установке ПО, необходимо заключить с клиентом соглашение о резервном копировании БД, которое оставляет дальнейшую ответственность за резервное копирование на заказчике.
Чтобы настроить автоматический backup БД, необходимо создать Простую Задачу в Планировщике Задач Windows (Task Scheduler).

Триггер: ежедневно.

Повторять каждый день или чаще/реже - по договорённости с заказчиком. Обычно бэкап делается в ночное время (никто не работает с базой, в ней сохранены все изменения за день).

Действие: запустить программу.

Указываем путь до bat-файла backup.bat, который находится в директории \Shelter\IBDATA\
После сохранения, зайдите в свойста задачи.

Поставьте галочки "Выполнить с наивысшими правами", "Выполнять действия для всех пользователей"

Попробуйте выполнить эту задачу из планировщика. Резервная копия должна создаться без ошибок. Если этого всё-таки не происходит, перепроверьте ещё раз все пути, особенное внимание обратите на относительные пути (если имеются) - можно заменить их на абсолютные.
Рекомендуемой опцией резервного копирования является настройка копирования на внешний диск / диск удаленной машины / облачное хранилище данных (например Yandex Disk). Для этого необходимо установить Яндекс (или Google) Диск на локальную машину, настроить папку синхронизации и установить копирование архива бэкапа базы в эту папку, таким образом она будет синхронизироваться с облачным хранилищем, значительно уменьшая вероятность потери данных, необходимых для восстановления БД.
Рекомендуется выделенный сервер. Мощность сервера и кол-во ОЗУ должны выбираться исходя из количества одновременных подключений к серверу. Чем больше рабочих мест в заведении, тем выше необходима мощность сервера. Приведем пример серверного оборудования для среднего объекта с одновременно работающими в программе 10 клиентскими приложениями.
Процессор: Intel® Xeon® Processor E3-1220 v6, оперативная память: 16 Гб. Особое внимание на скорость работы и надёжность дисковой подсистемы. Рекомендуется установка работы дисков в режиме RAID 10 (RAID 0+1), с необходимым количеством свободного места минимум 500 Гб (лучше - больше). Для работы программы свободного места на жестком диске требуется не менее 10 Гб (при установке базы данных на данной машине). Средний объем БД программы составляет до 3 Гб. Размер пустой БД при установке ~ 30 Мб.
Так же рекомендуется уделить внимание надёжности и быстродействию сетевого интерфейса на сервере (и общей инфраструктуры сети в целом).
Для стабильной работы на сервере (или рабочем месте, если используется один и тот же компьютер) должна быть установлена операционная система Windows не ниже седьмой версии.
Если требуется работа с программой в режиме удаленного доступа, то необходимо развернуть сервер терминалов для удаленного подключения.
Программа использует сервер баз данных FireBird 2.5. Рекомендуется устанавливать в варианте SuperServer или Classic. По умолчанию FireBird настраивается на TCP\IP порт 3080. Можно установить и настроить на работу FireBird и на другом незанятом порту. Для обеспечения безопасности на сервере и клиентских рабочих местах, можно запускать любой сетевой экран, «пробросив» все необходимые для работы порты вручную.
Рекомендуется использовать бесперебойные блоки питания (UPS). Для машины, на которой установлена БД программы, наличие UPS обязательно.
Минимальные требования к рабочему месту среднего фитнес клуба (гостиницы до 100 номеров):
Центральный процессор Intel Core i3 2.4 GHz или AMD эквивалент.
Оперативная память - минимум 4 Gb.
Если данное рабочее место используется как касса быстрой продажи, то рекомендуется установить компьютер с Touch-экраном. Например, вот такой моноблок HP 24-g038ur All-in-One < X0Z57EA#ACB > (i3 6100U / 8 / 1TbSSHD / DVD-RW / WiFi / BT / Win10 / 23.8") – данная конфигурация является примером и может варьироваться от нужд и средств заказчика.
Сама СУБД FireBird в особых технических изысках не нуждается. Но, как правило, на рабочем месте установлены другое ПО (офисный пакет, браузер, почтовые программы, и т.д.), соответственно, данный компьютер должен иметь необходимое количество оперативной памяти и размер жесткого диска.
Видеокарта и монитор с поддержкой разрешения минимум 1366х768 (рекомендовано 1920х1080).
Клавиатура, мышь.
В минимальной конфигурации устанавливается 1 рабочее место. Данный компьютер также используется в качестве сервера, т.е. на нем хранится база данных программы (крайне не рекомендуемая конфигурация).
Данное рабочее место может быть оборудовано как стационарным компьютером, так и ноутбуком. В зависимости от требований заказчика, к данному компьютеру возможно подключение различного дополнительного оборудования.
· На сервере (где установлена БД программы) устанавливается USBi ключ – ключ защиты.
· Программа подразумевает подготовку различной документации (регистрационные карты гостей, печать отчетности, счетов…), соответственно необходимо предусмотреть возможность подключения принтера формата A4. Обычно современные лазерные принтеры подключаются по интерфейсу USB. Возможно использование сетевого принтера.
· Программа может работать с различной фотоаппаратурой, которая используется для внесения графического изображения клиента в БД. Если предполагается использование не интегрированного устройства, то необходимо предусмотреть наличие аппаратного интерфейса для его подключения.
· Идентификация гостей может осуществляться с помощью различных информационных идентификаторов (магнитная карта, бесконтактная карта, iButtons…) как правило, данные считыватели подключаются по протоколу RS232i, соответственно данный компьютер должен быть оборудован COM портом. Некоторые считыватели подключаются информационным каналом в RS232, а питание получают через PS\2i.
· Подключение фискальных регистраторов. Большинство ФР подключаются к компьютеру по протоколу RS232. При одновременном использовании считывателя и ФР необходимо наличие как минимум 2 СОМ портов. Возможно использование PCI плат расширения.
· В программе информацию о клиентах (анкетные данные) чаще всего вносятся вручную с использованием клавиатуры. Если подключается внешняя клавиатура к ноутбуку не имеющего PS\2 интерфейс, то клавиатура должна быть USB, а на компьютере должен быть свободный USB порт. Если оператору не удобно использовать Touch Pad ноутбука, то возможно подключить мышь, так же через USB.
· Программа работает в полноэкранном режиме при разрешении не ниже 1280х1024. Как правило, монитор установленный на стойки администратора спрятан от глаз клиента и соответственно находится на некотором расстоянии от глаз администратора, соответственно для удобства работы диагональ монитора должна быть не менее 19 дюймов.
Необходимое количество COM и USB для подключения дополнительных устройств.
При установке дополнительного рабочего места необходимо стабильное постоянное сетевое соединения между компьютерами, подключение по WiFi не рекомендуется. Программа не требует папок открытых на доступ.
Работа с ключом защиты Shelter и Абонемент происходит одинаково и используются одни и те же утилиты. Информацию можно посмотреть тут
Настройка интеграции с замковой системой iLocks/YGS
Для настройки данной интеграции требуется Shelter 2 версии 2.12.122.2390 или новее.
Сотрудники технической поддержки Shelter настройкой замковой системы не занимаются.
Для настройки интеграции необходимо скачать sdmiLocks.dll и архив Demo.rar с FTP
Необходимо распаковать содержимое архива в каталог с ПО замковой системы, после чего запустить Demo.exe. В появившемся окне необходимо нажать кнопку Read. В этот момент на энкодере должна находиться специальная AuthCard карта. Эта карта выдается сотрудниками замковой системы.

Должен появиться Авторизационный код, который необходимо будет скопировать в текстовый документ, этот код понадобится в дальнейшем.
Далее необходимо скопировать ВСЕ библиотеки из ПО замковой системы, ILockSoft.ini и скаченный ранее sdmiLocks.dll в каталог с shelter.exe
В shelter.ini необходимо добавить следующие данные :
[BOOT]
BOOT_1 = C:\Shelter\sdmiLocks.dll
[HARDWARE]
LockCard = ILOCKS

Настройка интеграции с замковой системой Bonwin 2
Для настройки данной интеграции требуется Shelter 2 версии 2.12.122.2390 или новее.
Сотрудники технической поддержки Shelter настройкой замковой системы не занимаются.
ВНИМАНИЕ!!! При работе в Shelter, ПО BonWin должно быть закрыто.
Версия замковой системы :

Модель энкодера :
(в диспетчере устройств энкодер определяется как "Устройство HID")

Содержимое папки замковой системы :

Для интеграции необходимо скачать sdmBonwin2.dll и скопировать в папку с shelter.exe, а так же скопировать все библиотеки и bwapireg.lic из дистрибутива замковой системы в папку Shelter 2.
В shelter.ini необходимо добавить :
[BOOT]
BOOT_1=sdmBonwin2.dll
[HARDWARE]
LockCard=Bonwin2
[HARDWARE.Bonwin2]
HOTELCIPHER=11611951
DOCHECKOUT=1
DEFBUILDING=1
DEFFLOOR=1
LOG.NAME=BONWIN.LOG
LOG.LEVEL=100
LOG.DEBUGLEVEL=100
В параметр HOTELCIPHER добавить код отеля. Для получения кода отеля необходимо войти в BWHLM8.01.exe :
Логин : BonWin
Пароль : Tasman
И перейти по следующим вкладкам :


Запускаем Shelter, переходим в "Настройки" - "Справочники" - "Ресурсы" - "Номерной фонд" и перейти в карточку номера :

В поле "Номер устройства" необходимо указать ID (код) номера из ПО замковой системы.
Так же необходимо обратить внимание на сопоставление кодов этажей в ПО замковой системы и в Shelter.
Код этажа в Bonwin = номер этажа в Shelter. Особенность протокола BonWin - он работает только с числами в диапазоне 0-99
С общими/внутренними дверьми, согласно протоколу, работа не реализована.
Интеграция Shelter и VingCard через ПО Visionline
Для настройки данной интеграции требуется Shelter 2 версии 2.12.122.2390 или новее.
Сотрудники технической поддержки Shelter настройкой замковой системы не занимаются.
Для настройки интеграции необходимо зайти в Shelter - "Сервисы и оборудование" :

2. Выбрать драйвер VingCard :
3. Перейти в "Настройки" :

4. В поле "Хост" указать IP-адрес ПК, на котором запущен интерфейс Visionline, в поле "Порт" указать порт, на котором работает Visionline, в поле адрес PMS указать числовое значение из настроек замковой системы :


Настройки в Shelter :

4. После выполнения предыдущих пунктов нажать "Сохранить".
5.Далее перейти в "Настройки" - "Справочники" - "Номерной Фонд" и выбрать номер для настройки
Необходимо установить чек-бокс "Номер (ресурс) оборудован эл.замком" :

6. Для работы с дополнительными дверьми необходимо в поле "Дополнительные номера" указать номер двери (либо через запятую несколько дверей) из ПО замковой системы :

7. Результат выпуска ключ-карты из Shelter :

Для проверки работоспособности замковой системы можно воспользоваться тестовой утилитой от производителей замковой системы.
Настройка идентификации гостя в RK (Считыватель Z-2)
Карты данной замковой системы можно использовать для идентификации гостя в RK7 и закрытия на номер по выпущенной карте из shelter.

Настройка интеграции с замковой системой MF S70
Для настройки данной интеграции требуется Shelter 2 версии 2.12.122.2390 или новее.
Для интеграции вам необходимы NewICdll.dll и set.ini . Данные файл необходимо скопировать в папку с shelter.exe
Скачать их можно тут
В файле set.ini, в параметре "Com=" указать номер Com-порта, к которому подключен энкодер.
Сотрудники технической поддержки Shelter настройкой замковой системы не занимаются.
1. Для настройки интеграции необходимо зайти в Shelter - "Сервисы и оборудование" (рис.1) :
(рис.1)
2. Выбрать драйвер MF S70 (рис.2) :

(рис.2)
3. После чего необходимо нажать "Сохранить" (рис.3)

(рис.3)
4. Далее перейти в "Настройки" - "Справочники" - "Номерной Фонд" и выбрать номер для настройки (рис.4)
Необходимо установить чек-бокс "Номер (ресурс) оборудован эл.замком" и в поле "Номер устройства" указать значение параметра "Room ID" из управояющего ПО замковой системы (MF_System.exe) - (рис.5)

(рис.4)

(рис.5)
ВНИМАНИЕ! У данной замковой системы есть особенность : после выпуска ключ-карты из ПО замковой системы, карта сможет открыть дверь в номер спустя какое-то время (на тестовом стенде открытие происхоидло спустя 1-2 минуты после выпуска ключ-карты).
Так как приложение (Shelter/MF_System.exe) с энкодером работает через COM-порт, то одновременно запустить 2 программы не получится.
Настройка интеграции с замковой системой BE-TECH
Для настройки данной интеграции требуется Shelter 2 версии 2.12.122.2390 или новее.
Сотрудники технической поддержки Shelter настройкой замковой системы не занимаются.
Версия замковой системы :

Содержимое папки с замковой системой :

Модель энкодера :


Модель замка :

Для настройки интеграции необходимо скачать sdmBeTech.dll с ftp и скопировать в папку с Shelter 2, а так же скопировать все библиотеки из дистрибутива замковой системы в папку Shelter 2.
В shelter.ini необходимо добавить :
[BOOT]
BOOT_1=sdmBeTech.dll
[HARDWARE]
LockCard=BE-TECH
[HARDWARE.BE-TECH]
AuthCode= - В параметре прописать код отеля (system_code), который вы можете получить у установщиков Be-Tech (*6ти значный код)
DoCheckOut=1
DefBuilding=1
DefFloor=1
UseTimeDelta=0
TimeKind=0
TimeValue=3
LOG.NAME=BE-TECH.LOG
LOG.LEVEL=100
LOG.DEBUGLEVEL=100
UseTimeKind=0 (0/1 - не использовать/использовать настройку для изменения времени заезда, при записи на карту)
TimeKind=0 (0/1 часы/минуты)
TimeValue=3 (значение)
Пример 1 :
UseTimeDelta=1
TimeKind=0
TimeValue=3
Время начала действия карты на 3 часа раньше времени в системе при записи ключ-карты.
Пример 2 :
UseTimeDelta=1
TimeKind=1
TimeValue=15
Время начала действия карты на 15 минут раньше времени в системе при записи ключ-карты.
Пример 3 :
UseTimeDelta=0
TimeKind=0
TimeValue=3
Время начала действий карты = время в системе при записи ключ-карты.
В параметре AuthCode прописать код отеля(system_code), который вы можете получить у установщиков Be-Tech (*6ти значный код)
На тестовом стенде UCS, с данной версией ПО замковой системы, параметр AuthCode оставляли пустым.
Запускаем Shelter, переходим в "Настройки" - "Справочники" - "Ресурсы" - "Номерной фонд" и перейти в карточку номера :

Необходимо поставить чек-бокс "Номер (ресурс) оборудовани эл.замком", в поле номер устройства указать значение параметра Guest SN из ПО замковой системы, с увеличением на 1.

По аналогии необходимо настроить и для других номеров.
Для работы с дополнительными замками (внутренние двери и общие) необходимо в поле "Дополнительные номера", через запятую указать общие/внутренние группы дверей.
Для примера указал 4,3 в "Дополнительные номера" - результат считывания карты :

Коды возможных ошибок :
Сотрудники технической поддержки Shelter настройкой замковой системы не занимаются
Данная инструкция написана для замковых систем SALTO с версией программного обеспечения HAMS 100 v6.6.0.33 (Рис 1.) и Ethernet энкодером (Рис 2.).
Версия Ethernet v 01.02, версия Reader v02.43.

(Рис. 1)

(Рис. 2)
Заведение номерного фонда в программном обеспечении SALTO и ее настройка осуществляется системным администратором гостиницы
или представителями замковой системы. Сотрудники и инженеры отдела Shelter не занимаются настройкой программного обеспечения замковой системы.
Список доступных энкодеров и их настройки можно посмотреть в «Список периферии» на вкладке «Периферия» (Рис 3).

(Рис. 3)
Интеграция данной замковой системы осуществляется через PMS интерфейс, который включается в «Основные опции» на вкладке «Инструменты» (Рис. 4)

(Рис. 4)
В «Параметры связи» необходимо ввести IP адрес и номер порта компьютера, на котором будет запускаться ПО замковой системы
с включенным PMS интерфейсом.
Интеграция данной замковой системы с Shelter производилась на следующей версионности:
После скачивания файлов с ftp, библиотеку SdmTesa.dll необходимо расположить в директории с shelter.exe.
Далее переходим в настройки Shelter, добавляем модуль для замковой системы (TESA HT28_TCP) и выставляем необходимые параметры (Рис 5).

(Рис. 5)
После чего, данные параметры продублируются в shelter.ini:
[HARDWARE.HT28-TCP]
;HOST – IP адрес, на котором запущена замковая система с включенным PMS интерфейсом
HOST=172.22.5.115
;PORT – порт подключения к PMS интерфейсу
PORT=5010
;DEVICEADDR – 1 если используется USB или RS232 энкодер, 2 если используется Ethernet энкодер.
DEVICEADDR=2
;USEPMSTRACK – использовать PMS трек для связки с RK и закрытия на номер. Если 0, то на вторую дорожку идентификатор записываться не будет.
Если 1, то будет.
USEPMSTRACK=1
;USEPMSTRACK – длина PMS трека
PMSTRACKMAXLEN=40
;DOCHECKOUT - Если 1, то перед изготовлением ключа, предыдущая информация на ключе стирается. Функция CancelCard. 0 — не стирается.
DOCHECKOUT=0
;DORESET, NEEDENQACK , ACTION - данные настройки в классической (базовой) реализации связи не менять!
DORESET=1
NEEDENQACK=1
ACTION=E
;DEFADDROOM2=101, DEFADDROOM3=102, DEFADDROOM4=103 - при данных настройках все ключи изготовленные из shelter будут
дополнительно открывать двери 101,102 и 103. Данные параметры можно оставить пустыми.
DEFADDROOM2=
DEFADDROOM3=
DEFADDROOM4=
IsLockMakeMultiKeys=0
; Файлы с логами будут создаваться в папке TESALogs, она создаедтся автоматически в каталоге с Shelter.
[BOOT]
BOOT_2=sdmTESA.dll
[HARDWARE]
LockCard=HT28-TCP
Далее заходим в shelter и для номерного фонда, в котором будут использоваться двери с электронами замками,
включаем опцию «Номер (ресурс) оборудован эл. замком».
Для замковой системы SALTO в поле «Номер устройства» необходимо выставить значение 0. (Рис 6).

(Рис. 6)
Для выпуска карты и проверки корректности настроек переходим на шахматку и в проживающем госте нажимаем на модуль замковой системы (Рис 7),
на котором будет представлена информация по заезду/выезда гостя.

(Рис. 7)
После изготовления ключей (основного/дополнительного) в shelter, корректность записи можно проверить в программном обеспечении замковой
системы, считав его на вкладке «Ключи» (Рис 8).

(Рис. 8)
1. Несоответствие даты/времени выезда/заезда. Возвращается ошибка Bad checkout date and/or time или ErrorMessage= -1. (Рис. 9)

(Рис. 9)
В логе замковой системы:
4 06.04.2018 12:32:26> TESA card writting failured, error=1, OS error=0; ParamStr=&CMD=ISEXTRAROOMS
2. Нет связи с PMS интерфейсом (не настроен PMS интерфейс) или не запущено программное обеспечение замковой системы.
Возвращается ошибка ErrorMessage= -10. (Рис. 10)

(Рис. 10)
В логе замковой системы:
E2 06.04.2018 12:58:52> Transmit() (Exception): Can't connect socket; WSAError=10061
w3 06.04.2018 12:58:52> DoCommand failured. Result=-10, Win32 error code=0
4 06.04.2018 12:58:52> TESA card writting failured, error=-10, OS error=0;
3. Нет связи с энкодером или неверно указан параметр DEVICEADDR. Возвращается ошибка ErrorMessage= -3. (Рис. 11)

(Рис. 11)
В логе замковой системы:
5 06.04.2018 13:06:38> DoCommand finished with Answer=NF, Full answer=NFі1і, Result=-3
4 06.04.2018 13:06:38> TESA card writting failured, error=-3, OS error=0;
Важно!!! Замечена следующая симптоматика в работе энкодера:
При установленом в shelter.ini параметре «USEPMSTRACK = 0» при записи ключа энкодер пытается записать карту 2 раза (в итоге пищит два раза):
1. Записывает на дорожку замковой системы.
2. Пытается записать идентификатор на вторую дорожку для закрытия на номер, но т.к. параметр отключен, записать не дает, однако энкодер все равно пищит.
Настройка интеграции с замковой системой ADEL (A90)
Сотрудники технической поддержки Shelter настройкой замковой системы не занимаются.
Для настройки интеграции необходимо скачать инсталлятор PMS v7.3 замковой системы с FTP (На случай, если специалисты замковой системы его не предоставили)
Cкачиваем сборку для интеграции Shelter с ADEL так же с FTP
После того как выполнена установка замковой системы и она настроена (созданы номера, мастеркарты и т.д.) для связи с гостиничной системой необходимо сделать следующее.
ВНИМАНИЕ!!! Номера созданные в ПО замковой системы должны совпадать с нумерацией номерного фонда в Shelter
Важно! Для функционирования интерфейса ADEL необходимо активировать его лицензионный код. Для этого запустите программу ADEL A90.
Щелкните меню «System» и выберите «Multi-function card». (Рис. 1)

(Рис. 1)
В открывшемся окне щелкните вкладку «License» и введите лицензионный код интерфейса в поле «Interface License Code». (Рис. 2)

(Рис. 2)
1. На сервер ADEL необходимо установить интерфейс взаимодействия PMS v7.3 скачанный нами раннее, запустив файл setup.exe (Рис. 3)

(Рис. 3)
2. У вас откроет окно инсталлятора в котором нужно выполнить следующие шаги:

(Рис. 4)

(Рис. 5)

(Рис. 6)

(Рис. 7)
3. Переходим на компьютер, где установлен энкодер и скачиваем на него установщик PMS v7.3, чтобы установить клиентскую часть PMS.

(Рис. 8)
4. Далее возвращаемся на наш сервер и запускаем установленный PMS сервер. Вы увидите нечто похожее (Рис. 9)

(Рис. 9)
Внимание!!! Если в интерфейсах отображаются знаки вопросов (??) вместо слов, необходимо переименовать файлы C:\Program Files (x86)\ADEL\LockInterface\Client V7.3\CLIENT.CHS и C:\Program Files (x86)\ADEL\LockInterface\Server V7.3\NPMS.ENU в CLIENT.RUS и NPMS.RUS соответственно.
5. Переходим во вкладку «System(S)» → «System Parameter», по умолчанию должны быть следующие настройки (Рис. 10):

(Рис. 10)
6. Далее нажимаем на кнопку «Network». (Рис. 11)

(Рис. 11)
7. У нас открываются настройки подключения энкодеров. (Рис. 12)

(Рис. 12)
8. Для добавления необходимо указать «Encoder Port»(Com-port на котором работает энкодер) и «Host Name»(Имя компьютера, на котором подключен энкодер).
9. Далее необходимо настроить взаимодействие «Shelter» с интерфейсом замковой системы. Для этого необходимо выполнить следующие действия.
10. Копируем в корень папки с Shelter следующие файлы:
11. После настроить ADELCARDISSUER.udl, нажимаем «Проверить соединение», если все данные введены верно,
получаем «Проверка соединения выполнена» (Рис. 13)

(Рис. 13)
12. В shelter.ini необходимо добавляем следующие данные:
13. Возвращаемся на комьютер, где установлен PMS сервер, открываем интерфейс и нажимаем кнопку «Rooms». (Рис. 14)

(Рис. 14)
14. У нас выпадет список номерного фонда. (Рис. 15)

(Рис. 15)
15. Теперь необходимо правую колонку привести к верному значению, которая будет соответствовать нумерации номерного фонда в Shelter.
В моем случае нумерация в Shelter трех-значная (201, 202, 203 и тд...). По этой причине мне нужно убрать лишние 3 цифры из правой колонки,
чтобы получился правильный список номеров в Shelter.
Сверху над списком номеров мне нужно выставить значение «3» и нажать кнопку «Apply», правая колонка примет трех-значную нумерацию. (Рис. 16)

(Рис. 16)
16. Далее необходимо зайти в Shelter → «Настройки» → «Справочники» → «Ресурсы» → «Номерной фонд».
Для выбранного номера установить чек-бокс «Номер (ресурс) оборудован эл.замком» (Рис. 17)

(Рис. 17)
17. Запускаем PMS клиент на рабочем месте с энкодером.
18. Выпускаем ключ в Shelter, после успешной записи мы увидим всплывающее уведомление от PMS клиента, что запись прошла успешно. (Рис. 18)

(Рис. 18)
19. Так же информация записанная на карту после записи ключа отображается в PMS клиенте и в PMS сервере. (Рис. 19, 20)

(Рис. 19)

(Рис. 20)
Сотрудники технической поддержки Shelter настройкой замковой системы не занимаются.
Версия Shelter - 2.12.129.3000
Версия BioQin - v11-170829 (Natural)
Модель энкодера:

1. Скачать файлы для интеграции можно тут
2. Все файлы из архива необходимо скопировать в корень папки Shelter.
3. Далее в Shelter.ini добавляем параметры:
[BOOT]

ErrorMessage = -1 — не видит карту или энкодер

В логе замковой системы:
Настройка интеграции с замковой системой HUNE (SMARTLOCK)
Все необходимый файлы можно скачать с FTP
Интерфейс программы представлен на рисунке 1.

Рис 1.
ВНИМАНИЕ!!! Настройкой ПО HUNE инженеры технической поддержки Shelter не занимаются.
Настройку ПО замковой системы можно посмотреть в мануале Introduction of software v20.0.PDF, который находится в сборке на FTP или обратиться к представителям замковой системы.
Содержимое каталога distr скопировать в директорию с shelter.exe
В shelter.ini добавить:
[HARDWARE.SL6000RF]
COMPORT=5
CARDNO=1
NBLOCK=4
ENCRYPT=1
CardPass=82A094FFFFFF
USEPMSTRACK=0
SYSTEMCODE=417BB219
HOTELCODE=B185A030
DEFBUILDING=1
LOG.NAME=SL6000RFChina.log
LOG.LEVEL=100
LOG.DEBUGLEVEL=100
[BOOT]
BOOT_2=sdmSL6000RFChina.dll
[HARDWARE]
LockCard=SL6000RF
Обязательно заполнить параметры CardPass, SystemCode и HotelCode. Эти параметры нужно запрашивать у специалистов по замковой системе. Они уникальны для каждого объекта. ВАЖНО!!! Если параметры CardPass, SystemCode и HotelCode отсутствуют и представители замковой системы не могут предоставить данную информацию, то интеграция с данной замковой системы будет НЕВОЗМОЖНА.
Библиотека HUNERF.dll предоставляется разработчиками замковой системы. Именно через нее в результате изготавливается замковый ключ. В комплекте поставки предоставляются несколько вариантов HUNERF.dll (Развнодности HUNERF.dll представлены в папке distr). Необходимо проверять каждую библиотеку.
Программы Project1.exe и Project2.exe предоставлены разработчиками замковой системы и предназначены для тестирования HUNERF.dll без Shelter.
Если ключ изготовлен через Shelter, а потом его считывают через ПО замковой системы, то там будет показано, как будто ключ будет работать до конца 2099 года. Но на практике (на реальном замке) ключ будет работать корректно. Данный вопрос обсуждался на трекере 0017152.
Возможно, что ключ-карта успешно изготавливается из Shelter, но после записи ключ-карта не открывает замок, это связано с некорректной записью номера комнаты. Нумерация комнат в замковой системе HUNE осуществляется в рамках этажа. Например, в карточке номера в Shelter стоит номер - 37, а по факту это значит седьмой номер на третьем этаже. Чтобы номер записывался корректно на ключ-карту из Shelter, необходимо поставить галочку "Номер оборудован электронным замком" и в поле "Номер устройства" указать номер комнаты в рамках этажа, для номера 37, например, номер устройства будет 7.
Данный функционал проверялся на версии Shelter 2.12.124.2450 и HUNE Intelligant Card Lock System 19.60-20-2
Настройка интеграции с замковой системой Hefele (Dialock-HMS-XML_1_3)
Сотрудники технической поддержки Shelter настройкой замковой системы не занимаются.
Необходимо скачать архив с ftp, распаковать sdmDiaLock.dll в папку с shelter.exe
Настройки в shelter.ini :
Далее, необходимо запустить Shelter и перейти в "Настройки" - "Справочники" - "Номерной Фонд" и выбрать номер для настройки
Необходимо установить чек-бокс "Номер (ресурс) оборудован эл.замком" :

Актуальную сборку можно скачать тут
Сотрудники технической поддержки Shelter настройкой замковой системы не занимаются.
Для настройки связи гостиничной системы Shelter 2 с замковой системой INHOVA необходимо:
1. Настроить локальный РС (InhovaData.exe → Настройки → Локальный РС) (Рис. 1)

(Рис. 1)
Так же в закладке «Операторы» необходимо создать оператора с именем «UCS» и дать ему все права.
Обязательно! Необходимо для успешной авторизации при обращении к замковой системе.
2. Настроить PMS интерфейс. Обратите внимание, чтобы были установлены чек-боксы (Рис. 2):

(Рис. 2)
3. Запустить приложение «PMSServer.exe» и после запуска остановить его нажав на кнопку «Stop Comms» (Рис. 3):

(Рис. 3)
4. Далее открыть закладку Server Setup и настроить параметры PMS сервера (Рис. 4).

(Рис. 4)
5. Копируем в папку с Shelter файл sdmTesa.dll
6. Далее в Shelter.ini прописываем следующие настройки:
[HARDWARE.INHOVA-TCP]
HOST=127.0.0.1
PORT=7780
DEVICEADDR=1
OPERATORNAME=UCS
USEPMSTRACK=1
PMSTRACKMAXLEN=40
DOCHECKOUT=1
DORESET=0
NEEDENQACK=1
ACTION=EF
LOG.NAME=InHovaTCP.log
LOG.LEVEL=100
LOG.DEBUGLEVEL=100
IsLockMakeMultiKeys=0
[BOOT]
BOOT_1=sdmTESA.dll
[HARDWARE]
LockCard=INHOVA-TCP
7. Далее заходим в shelter и для номерного фонда, в котором будут использоваться двери с электронными замками,
включаем опцию «Номер (ресурс) оборудован эл. замком» и в поле «Номер устройства» указываем имя номера из номерного фонда в замковом ПО. (Рис. 5)

(Рис. 5)
8. ID для поля «Номер устройства» мы берем из номерного фонда в замковом ПО (Имя комнаты - Name). (Рис. 6)

(Рис. 6)
9. Для выпуска карты и проверки корректности настроек переходим на шахматку и в проживающем госте нажимаем на модуль замковой системы (Рис. 6),
на котором будет представлена информация по заезду/выезда гостя.

(Рис. 6)
После изготовления ключей (основного/дополнительного) в Shelter, корректность записи можно проверить считав ключ в программном обеспечении замковой системы.
Настройка интеграции с замковой системой Iron Logic
Для настройки данной интеграции требуется Shelter 2 версии 2.12.122.2390 или новее.
Сотрудники технической поддержки Shelter настройкой замковой системы не занимаются.
Shelter 2 с данной замковой системой работает через PMS-интерфейс (IronSDK.exe) версия sdkhotel_v_5_1

ВНИМАНИЕ!!! IronSDK.exe должен быть постоянно запущен.
Скачать актуальную библиотеку и настройки можно тут
В shelter.ini :
[BOOT]
BOOT_3=sdmTESA.dll
Настройки (примерные) PMS-интерфейса :


Выпуск ключ-карты :

Результат считывания из ПО замковой системы :

ВАЖНО!!! Параметр "Версия" автоматически переобновляется в замке после каждого прикладывания карты (новой)
Если из ПО замковой системы выпустить ключ-карту, после приложить эту карту к замку, то параметр "Версия" увеличится на единицу.
Пример :
Изначально параметр "Версия" = 1
Выпускаем ключ-карту из Shelter, прикладываем к замку, версия изменяется на единицу
И так каждый последующий раз.
Но если выпустить ключ-карту из ПО замковой системы, приложить к замку, после чего выпустить ключ-карту из Shelter и приложить ее к замку - дверь в номер не откроется, так как разница версии в замке и в выпущенной ключ-картой не должна превышать 1.
ВАЖНО!!! При выпуске дополнительной ключ-карты (если для этого номера доп.карта была выпущена уже ранее), можем получить ошибку -3 :

В логе событий PMS-интерфейса фигурирует следующая ошибка :
"Приняли команду: CG ; Обрабатываем... Эта карта уже есть в списке копий"

В логе от sdmTesa.dll видим следующую ошибку :
Замечание: SDK хранит информацию о всех экземплярах карт, для которых сделаны копии. Если попытаться сделать копию той карты, которая уже была добавлена в список актуальных копий карт для указанной двери, то повторного перезаписывания карты сделано не будет, а SDK выдаст в пакете ответа ошибку с кодом "E9".
Так же, можем получить ошибку -10 :

Настройка интеграции с замковой системой OzLocks
Для настройки данной интеграции требуется Shelter 2 версии 2.12.129.300 или новее.
Сотрудники технической поддержки Shelter настройкой замковой системы не занимаются.
Версия замковой системы :

Модель энкодера :


Для настройки интеграции необходимо скачать sdmOzLocks.dll с ftp и скопировать в папку с Shelter 2, а так же скопировать все библиотеки из дистрибутива замковой системы в папку Shelter 2.
В shelter.ini необходимо добавить :

Необходимо поставить чек-бокс "Номер (ресурс) оборудовани эл.замком", в поле "Номер устройства", а так же указать номер двери из ПО замковой системы.
ВНИМАНИЕ!!! Номера зданий и этажей в Shelter и в OzLocks должны совпадать!
Для идентификации гостя через систему R_Keeper при помощи считывателя Z-2 USB можно использовать следующий MCR-алгоритм :
Настройка интеграции с замковой системой Orbita.
Версия Shelter - 2.12.124.2450
Версия Orbita - LockingSystem4.9
Версия Windows - Windows 10
Модель энкодера :


Скачать дистрибутив можно тут
Так же, необходимо скопировать CLock.dll и dcrf32.dll в папку с sdmOrbita.dll
Эти библиотеки можно запросить у представителей замковой системы, либо скачать тут
Сотрудники технической поддержки Shelter настройкой замковой системы не занимаются.
Для дальнейшей настройки, в shelter.ini необходимо добавить :
Для того, чтобы получить значение параметра AuthCode, необходимо в ПО LockSystem (ORBITA) перейти во вкладку "Функции карты" и нажать кнопку "Пароль" :

Значение в поле "Пароль Отеля" необходимо скопировать в AuthCode.
Далее необходимо зайти в Shelter и перейти в "Настройки" - "Справочники" - "Номерной Фонд" и выбрать номер для настройки
Необходимо установить чек-бокс "Номер (ресурс) оборудован эл.замком" :

Если же в Shelter номера комнат двухзначные, а в ПО LockSystem - трехзначные, то в поле "Номер устройства" необходимо прописать номер комнаты из ПО замковой системы.
В таком случае на карту будет записываться номер комнаты из поля "Номер устройства".
ВНИМАНИЕ! Для корректной работы при выпуске ключ-карты из Shelter, ПО LockSystem должно быть закрыто.
Версия Shelter - 2.12.127.2750
Версия Orbita - LockingSystem 5.3.6
Версия Windows - Windows 10
Модель энкодера указана вначале статьи.
Скачать дистрибутив можно тут
Настройки для данной версии ПО замковой системы остались прежними, за исключение того, что добавилась возможность записи общих дверей на карту. Общие двери указываются в карточке номера (поле "Дополнительные номера"), через запятую, от 1-го до 8-ми.
Настройка идентификации гостя в RK (Считыватель Z-2)
Карты данной замковой системы можно использовать для идентификации гостя в RK7 и закрытия на номер по выпущенной карте из shelter.

Настройка интеграции с замковой системой Xeeder (V5.865-ILockSoft(Автономки), TechCrePower)
Для настройки данной интеграции требуется Shelter 2 версии 2.12.122.2390 или новее.
Версия ПО замковой системы :

С версией 5.8.0.0 итеграция будет работать, если взять все библиотеки из дистрибутива версии 5.8.6.4
Необходимо скопировать все библиотеки и ILockSoft.ini из каталога с замковой системой в каталог с Shelter.exe
Сотрудники технической поддержки Shelter настройкой замковой системы не занимаются.
1. Для настройки интеграции необходимо зайти в Shelter - "Сервисы и оборудование" (рис.1) :

(рис.1)
2. Выбрать драйвер Xeeder (рис.2) :

(рис.2)
3. Далее перейти во вкладку "Настройка" (рис.3) :

(рис.3)
В параметре Код отеля указать значение параметра Sn из файла ILockSoft.ini
Остальные настройки можно оставить как на скриншоте. После чего нажать "Сохранить"
4. Далее нажать "Сохранить" (рис.4)

(рис.4)
5. Далее перейти в "Настройки" - "Справочники" - "Номерной Фонд" и выбрать номер для настройки (рис.5). Необходимо установить чек-бокс "Номер (ресурс) оборудован эл.замком" :

(рис.5)
Для данного вида подключения требуется Shelter 2 версии 2.12.123.2420 или новее.
Интеграция реализована при помощи FRClient2.exe и sxrServerProxy.exe, через универсальный драйвер fpSpark54.dll из дистрибутива ПО Абонемент.
Информация по настройке данных утилит :
Подключение 1 ФР на несколько рабочих мест через УДФР
Универсальный драйвер ФР (УДФР) в Абонемент
Работа Абонемент с налоговыми ставками и кассовыми секциями с различными ФР
Со стороны Shelter необходимо выполнить следующую настройку :
Из дистрибутива Абонемента скопировать библиотеку sdmTcpRpcFiscReg.dll (..\FullVersionVer131\HW\POS\Uxml-rpc\Uxml-rpc\UCS) в каталог с Shelter.exe
Запустить Shelter и перейти в список доступных модулей, выбрать и добавить XML-RPC(TCP) fiscal register :

| Адрес | 127.0.0.1 | Указать IP-адрес ПК, где запущена sxrServerProxy.exe |
| Порт | 7788 | Указать порт ПК, где запущена sxrServerProxy.exe |
| ClientName | Client_1 | Указать уникальное имя клиента |
| ProxyFRClient | UCS_FR | Указать значение ClientName из sxrfrClient.ini |
Необходимо соблюдать последовательность запуска утилит для подключения данного ФР :
1. SparkSrv.exe (утилита от производителя ФР)
2. srxServerProxy.exe
3. srxFRClient2.exe
4. Shelter.exe
Специфика работы данного ФР :
Всегда должна быть запущена утилита SparkSrv.exe
В закрытой смене ФР не дает распечатать Х-отчет
ФР не позволяет сделать возврат при закрытой смене, или если не хватает наличности в кассе. Так же это касается и возврата электронных денег.
При налоговой ставке 18%, ФР начисляет НДС, а не вычетает, аналогично с 10% НДС.
Для интеграции ФР Спарк 115Ф (ФЗ54) с Shelter 2 потребуется добавить в каталог с Shelter.exe следующие файлы: fpSpark54.dll, fpSpark54.cfg.xml, SparkSrv.exe, config.ini, Winspark.exe. Скачать файлы можно по ссылке.
1. Необходимо открыть config.ini и настроить следующие параметры:


После успешного добавления ФР в Shelter в утилите SparkSrv.exe вы увидите сообщение:

Для данного вида подключения требуется Shelter 2 версии 2.12.121.2375 или новее.
Для интеграции вам необходимы fpAtol54.dll и fpAtol54.cfg. Скачать их можно тут
Вам необходимо убедиться, что Ваш фискальный регистратор работает в протоколе 2.4.
ВНИМАНИЕ! Фискальный регистратор в протоколе 3.0 в Shelter работать не будет. Вам нужно перевести его в протокол 2.4

(Рис. 1)

(Рис. 2)
1. Необходимо файлы fpAtol54.dll и fpAtol54.cfg положить в папку с Shelter 2. Скачать можно тут
2. Далее открываем Shelter 2 и переходим в «Настройки» → «Сервисы и оборудование» и нажимаем кнопку «Добавить». (Рис. 3)

(Рис. 3)
3. Откроется окно в котором сначала нам нужно выбрать «Драйвер» (Рис. 4)

(Рис. 4)
4. В открывшемся окне выбираем «Фискальный Регистратор» → «Универсальный драйвер» и нажимаем «Выбрать» (Рис. 5)

(Рис. 5)
5. После нам необходимо открыть «Настройка» (Рис. 6)

(Рис. 6)
6. Сначала нужно указать путь к библиотеке fpAtol54.dll. Для этого нажимаем кнопку в поле «Путь к библиотеке» и указываем нашу библиотеку,
которая расположена в папке с Shelter 2. (Рис. 7)


(Рис. 7)
7. Теперь необходимо настроить фискальный регистратор. Нужно настроить следующие поля (Рис. 8) :

(Рис. 8)
8. Следующим шагом нужно будет выбрать киоск, который будет использоваться с настраиваемым фискальным регистратором (Рис. 9)

(Рис. 9)
После вышеуказанных настроек фискальный регистратор должен работать корректно. Один из способов проверить работу попробовать сделать Х-Отчет.
Для того, чтобы настроить фискальные налоги в Shelter 2 необходимо сделать следующее:
1. Для начала заведем фискальные налоги в самом Shelter 2. Заходим в «Настройки» → «Справочники» → «Налоги» → «Фиск. налоги». (Рис. 10)

(Рис. 10)
2. Чтобы завести фискальные налоги в Shelter 2 нужно узнать сопоставление кодов фискальных налогов, которые заведены в самом
фискальном регистраторе. Для этого мы запускаем «Тест Драйвер ККМ». Переходим в «Настройка свойств». В открывшемся окне нам следует
указать COM-порт на котором установлен фискальный регистратор и его модель, после нажимаем «Параметры оборудования». (Рис. 11)

(Рис. 11)
3. Открываем вкладку «Налоги». (Рис. 12)

(Рис. 12)
Тут мы увидим два столбца, где левый столбец код налога, правый столбец ставка налога.
В моем случае это:
4. Например, нам необходимо использовать несколько фискальных налогов в Shelter 2, которые будут отображаться в чеке, возьмем - 18% и 0%
В Shelter добавляем фискальный налог через кнопку «Добавить». (Рис. 13)

(Рис. 13)
5. Откроется окно настройки фискального налога, добавим налог 18%, для этого нам нужно заполнить следующие поля: (Рис. 14)

(Рис. 14)
Аналогично заводим налог для 0%, только теперь «код налога в фиск. регистраторе» будет 5. (Рис. 15)

(Рис. 15)
6. Теперь заведенные фискальные налоги необходимо прикрепить к услугам, на которых нам нужно использовать данные налоги.
Для этого нам следует зайти в «Настройки» → «Справочники» → «Услуги и оплаты» → «Услуги». Находим нужную нам услугу
выбираем ее и нажимаем «Изменить». (Рис. 16)

(Рис. 16)
7. Откроется окно настройки услуги в котором нам необходимо раскрыть вкладку «Налоги», выбрать «Фиск. налоги» и указать нужный нам
фискальный налог из заведенных нами ранее, после нажимаем «Сохранить». (Рис. 17)

(Рис. 17)
8. Можно увидеть отображение фискального налога на услуге (Рис. 18)

(Рис. 18)
После произведенных настроек, если провести оплату по услуге, в которой вы указали фискальный налог, НДС будет отображен в чеке.
Если вам требуется отображать НДС при авансовой оплате, то нужно сделать следующее:
1. Перейти в «Настройки» → «Сервисы и оборудование» и открыть настройки фискального регистратора. (Рис. 19)

(Рис. 19)
2. В поле «Код налога авансовой операции» указываем код налога из таблицы в тест драйвере (Рис. 12),
который вы хотите отображать в авансовой оплате и нажимаем «Сохранить». (Рис. 20)

(Рис. 20)
После произведенных настроек при авансовой оплате в чеке будет отображен НДС, код которого вы указали при настройке.
Для новой реализации фискальных налогов необходим Shelter версии 2.12.125.2480 или новее.
Ранее фискальные налоги заводились так, что код налога прописывался в «Справочники» → «Налоги» → «Фиск. налоги», но при такой реализации к базе
должны быть подключены одинаковые фискальники, чтобы налоговая таблица в ФР была одинаковая у всех. Потому что привязка фискального налога
была реализована ко всем подключеным ФР.
На текущий момент реализация такова, что теперь код фискального налога прописывается не в «Справочники» → «Налоги» → «Фиск. налоги», а
непосредственно в самих настройках ФР в «Сервисы и оборудование», такой функционал позволяет подключать к Shelter разные ФР у которых
отличается таблица налоговых ставок между собой, что в свою очередь не создает никаких конфликтов при заведении фискальных налогов.
Выглядит это следующим образом:
1. Добавляем фискальные налоги в «Справочники» → «Налоги» → «Фиск. налоги» (Рис. 21):

(Рис. 21)
Можно увидеть, что теперь отсутствует поле «Код налога в фиск. регистраторе» о чем говорилось ранее.
2. После того как мы добавили нужное нам количество налогов переходим в «Настройки» → «Сервисы и оборудование» и открываем ранее
заведенный нами фискальный регистратор.
Мы можем увидеть, что фискальные налоги ранее заведенные в справочниках перенеслись в фискальный регистратор (Рис. 22):

(Рис. 22)
Теперь осталось проставить в колонке «Код налога в фиск. регистраторе» нужные нам коды налогов, которые соответствуют данному фискальному регистратору.
Если у нас подключены разные фискальные регистраторы, то во втором проставляем уже свои коды налогов, которые буду соответствовать своей
налоговой таблице.
При такой реализации, если закрепить за услугой налоговую ставку и оплачивать ее с разных ФР у которых отличаются таблицы налогов конфликтов
больше возникать не будет.
Внимание! При обновлении программы на версию 2.12.125.2480 или новее все фискальные налоги(по пути: «Справочники» → «Налоги» → «Фиск. налоги»)
добавляются во все фискальные регистраторы с теми кодами налогов («Код налога в фиск. регистраторе»), которые у них были.
ВНИМАНИЕ!!! Данный функционал доступен только с версии 2.12.125.2480 или новее
Ранее система налогообложения(СНО) указывалась только в настройках фискального регистратора в «Сервисы и оборудование» и указанный СНО
присваивался ко всем услугам в Shelter.
С версии 2.12.125.2480 реализован функционал, который позволяет присваивать к каждой услуге свой СНО. В итоге мы можем пробивать услуги с
разными системами налогообложения на одном фискальном регистраторе. Это работает следующим образом:
1. Заходим в «Справочники» → «Услуги и оплаты» → «Услуги» и открываем нужную нам услугу. Нас интересует вкладка «Налоги», раскрываем ее и видим
поле «Тип налогообложения»(Рис. 23):

(Рис. 23)
2. Щелкаем по стрелочке справа от этого поля и получаем выпадающий список, выбираем нужную нам СНО (Рис. 24):

(Рис. 24)
Таким образом мы можем указать для каждой услуги разный СНО.
Внимание! На текущий момент реализована оплата услуг с одинаковым СНО за раз. Например, есть две услуги: "Халат" (УСН(доход)) и "Тапочки"(ЕНВД).
Сделать одновременно оплату по этим двум услугам не получится, мы получим окно с информацией о том, что это невозможно (Рис. 25):

(Рис. 25)
Подведем итог, на текущий момент возможно закреплять за каждой услугой свой СНО, что в свою очередь позволяет на одном фискальном
регистраторе пробивать услуги с разным СНО, но оплачивать одновременно услуги с разным СНО пока что нельзя.
!ВНИМАНИЕ! Реализация по оплате услуг с разным СНО в разрезе одной оплаты будет реализовано позже в будущих версиях.
ВНИМАНИЕ!!! Данный функционал доступен только с версии 2.12.126.2700 или новее
В сервисах и оборудовании в настройках фискального регистратора есть теперь таблица кодов типа оплаты фискального регистратора (Рис. 26):

(Рис. 26)
Щелкаем правой кнопкой мыши в обозначенном на скриншоте поле и нажимаем «Добавить», откроется окно для заведения типа оплаты (Рис. 27):

(Рис. 27)
В данном окне находится всего два поля для настройки:

(Рис. 28)
Данный код берётся из настроек фискального регистратора (типы оплат), можно найти через тест драйвера (Рис. 29) :

(Рис. 29)
Сопоставление кодов типов оплат необходимо для корректной работы двух и более ФР, если последовательность кодов типов оплат у этих ФР отличаются.
Для визуализации ошибок ФР Атол необходимо скачать файл msg_rus.ini, который находится на FTP. После скачивания данного файла размещаете его
в любое удобное место (например в корень папки Shelter2). Далее запускаем Shelter и переходим в «Настройки» → «Сервисы и оборудование»
и открываем настройки ФР. В настройках в поле «Файл сообщений» нужно указать путь до файла msg_rus.ini (Рис. 23) и так же в поле «Секция» написать - ATOL.
ВНИМАНИЕ!!! Если указать путь до msg_rus.ini, но не указать название «ATOL» в поле «Секция», визуализация работать не будет!

(Рис. 29)
Для данного вида подключения требуется Shelter 2 версии 2.12.121.2375 или новее.
Для интеграции вам необходимы fpShtr54.dll и fpShtr54.cfg. Скачать их можно тут
1. Необходимо файлы fpShtr54.dll и fpShtr54.cfg положить в папку с Shelter 2.
2. Далее открываем Shelter 2 и переходим в «Настройки» - «Сервисы и оборудование» и нажимаем кнопку «Добавить». (Рис. 1)

(Рис. 1)
3. Откроется окно в котором сначала нам нужно выбрать «Драйвер» (Рис. 2)

(Рис. 2)
4. В открывшемся окне выбираем «Фискальный Регистратор» - «Универсальный драйвер» и нажимаем «Выбрать» (Рис. 3)

(Рис. 3)
5. После нам необходимо открыть «Настройка» (Рис. 4)

(Рис. 4)
6. Сначала нужно указать путь к библиотеке fpShtr54.dll. Для этого нажимаем кнопку в поле «Путь к библиотеке» и указываем нашу библиотеку,
которая расположена в папке с Shelter 2. (Рис. 5)


(Рис. 5)
7. Теперь необходимо настроить фискальный регистратор. Нужно настроить следующие поля (Рис. 6) :


(Рис. 6)
8. Следующим шагом нужно будет выбрать киоск, который будет использоваться с настраиваемым фискальным регистратором (Рис. 7)

(Рис. 7)
После вышеуказанных настроек фискальный регистратор должен работать корректно. Один из способов проверить работу попробовать сделать Х-Отчет.
Для того, чтобы настроить фискальные налоги в Shelter 2 необходимо сделать следующее:
1. Для начала заведем фискальные налоги в самом Shelter 2. Заходим в «Настройки» - «Справочники» - «Налоги» - «Фиск. налоги». (Рис. 8)

(Рис. 8)
2. Чтобы завести фискальные налоги в Shelter 2 нужно узнать сопоставление кодов фискальных налогов, которые заведены в самом
фискальном регистраторе. Для этого мы запускаем «Тест Драйвера ФР». Переходим в «Настройка свойств». (Рис. 9)

(Рис. 9)
3. В открывшемся окне нам следует указать COM-порт на котором установлен фискальный регистратор, после нажимаете «Проверка связи».
Если связь установлена переходим в «Таблицы». (Рис. 10)

(Рис. 10)
4. Далее открываем таблицу «Налоговые ставки». (Рис. 11)


(Рис. 11)
5. Тут мы видим три столбца, но нужно ореинтироваться на два первых - «Ряд» и «Величина налога».
В столбе «Ряд» указан код налога с помощью которого мы будем сопостовлять налог с Shelter.
В столбе «Величина налога» указан процент НДС, заполняется следующим образом: значения в данной таблице нужно умножить на 100
6. Например, нам необходимо использовать несколько фискальных налогов в Shelter 2, которые будут отображаться в чеке, возьмем - 18% и 10%
В Shelter добавляем фискальный налог через кнопку «Добавить». (Рис. 12)

(Рис. 12)
5. Откроется окно настройки фискального налога, добавим налог 18%, для этого нам нужно заполнить следующие поля: (Рис. 13)

(Рис. 13)
Аналогично заводим налог для 10%, только теперь «код налога в фиск. регистраторе» будет 2. (Рис. 14)

(Рис. 14)
6. Теперь заведенные фискальные налоги необходимо прикрепить к услугам, на которых нам нужно использовать данные налоги.
Для этого нам следует зайти в «Настройки» - «Справочники» - «Услуги и оплаты» - «Услуги». Находим нужную нам услугу
выбираем ее и нажимаем «Изменить». (Рис. 15)

(Рис. 15)
7. Откроется окно настройки услуги в котором нам необходимо раскрыть вкладку «Налоги», выбрать «Фиск. налоги» и указать нужный нам
фискальный налог из заведенных нами ранее, после нажимаем «Сохранить». (Рис. 16)

(Рис. 16)
8. Можно увидеть отображение фискального налога на услуге (Рис. 17)

(Рис. 17)
После произведенных настроек, если провести оплату по услуге, в которой вы указали фискальный налог, НДС будет отображен в чеке.
Если вам требуется отображать НДС при авансовой оплате, то нужно сделать следующее:
1. Перейти в «Настройки» - «Сервисы и оборудование» и открыть настройки фискального регистратора. (Рис. 18)

(Рис. 18)
2. В поле «Код налога авансовой операции» указываем код налога из таблицы в тест драйвере (Рис. 11),
который вы хотите отображать в авансовой оплате и нажимаем «Сохранить». (Рис. 19)

(Рис. 19)
После произведенных настроек при авансовой оплате в чеке будет отображен НДС, код которого вы указали при настройке.
Для новой реализации фискальных налогов необходим Shelter версии 2.12.125.2480 или новее.
Ранее фискальные налоги заводились так, что код налога прописывался в «Справочники» → «Налоги» → «Фиск. налоги», но при такой реализации к базе
должны быть подключены одинаковые фискальники, чтобы налоговая таблица в ФР была одинаковая у всех. Потому что привязка фискального налога
была реализована ко всем подключеным ФР.
На текущий момент реализация такова, что теперь код фискального налога прописывается не в «Справочники» → «Налоги» → «Фиск. налоги», а
непосредственно в самих настройках ФР в «Сервисы и оборудование», такой функционал позволяет подключать к Shelter разные ФР у которых
отличается таблица налоговых ставок между собой, что в свою очередь не создает никаких конфликтов при заведении фискальных налогов.
Выглядит это следующим образом:
1. Добавляем фискальные налоги в «Справочники» → «Налоги» → «Фиск. налоги» (Рис. 20):

(Рис. 20)
Можно увидеть, что теперь отсутствует поле «Код налога в фиск. регистраторе» о чем говорилось ранее.
2. После того как мы добавили нужное нам количество налогов переходим в «Настройки» → «Сервисы и оборудование» и открываем ранее
заведенный нами фискальный регистратор.
Мы можем увидеть, что фискальные налоги ранее заведенные в справочниках перенеслись в фискальный регистратор (Рис. 21):

(Рис. 21)
Теперь осталось проставить в колонке «Код налога в фиск. регистраторе» нужные нам коды налогов, которые соответствуют данному фискальному регистратору.
Если у нас подключены разные фискальные регистраторы, то во втором проставляем уже свои коды налогов, которые буду соответствовать своей
налоговой таблице.
При такой реализации, если закрепить за услугой налоговую ставку и оплачивать ее с разных ФР у которых отличаются таблицы налогов конфликтов
больше возникать не будет.
Внимание! При обновлении программы на версию 2.12.125.2480 или новее все фискальные налоги(по пути: «Справочники» → «Налоги» → «Фиск. налоги»)
добавляются во все фискальные регистраторы с теми кодами налогов («Код налога в фиск. регистраторе»), которые у них были.
ВНИМАНИЕ!!! Данный функционал доступен только с версии 2.12.125.2480 или новее
Ранее система налогообложения(СНО) указывалась только в настройках фискального регистратора в «Сервисы и оборудование» и указанный СНО
присваивался ко всем услугам в Shelter.
С версии 2.12.125.2480 реализован функционал, который позволяет присваивать к каждой услуге свой СНО. В итоге мы можем пробивать услуги с
разными системами налогообложения на одном фискальном регистраторе. Это работает следующим образом:
1. Заходим в «Справочники» → «Услуги и оплаты» → «Услуги» и открываем нужную нам услугу. Нас интересует вкладка «Налоги», раскрываем ее и видим
поле «Тип налогообложения»(Рис. 22):

(Рис. 22)
2. Щелкаем по стрелочке справа от этого поля и получаем выпадающий список, выбираем нужную нам СНО (Рис. 23):

(Рис. 23)
Таким образом мы можем указать для каждой услуги разный СНО.
Внимание! На текущий момент реализована оплата услуг с одинаковым СНО за раз. Например, есть две услуги: "Халат" (УСН(доход)) и "Тапочки"(ЕНВД).
Сделать одновременно оплату по этим двум услугам не получится, мы получим окно с информацией о том, что это невозможно (Рис. 24):

(Рис. 24)
Подведем итог, на текущий момент возможно закреплять за каждой услугой свой СНО, что в свою очередь позволяет на одном фискальном
регистраторе пробивать услуги с разным СНО, но оплачивать одновременно услуги с разным СНО пока что нельзя.
!ВНИМАНИЕ! Реализация по оплате услуг с разным СНО в разрезе одной оплаты будет реализовано позже в будущих версиях.
ВНИМАНИЕ!!! Данный функционал доступен только с версии 2.12.126.2700 или новее
В сервисах и оборудовании в настройках фискального регистратора есть теперь таблица кодов типа оплаты фискального регистратора (Рис. 25):

(Рис. 25)
Щелкаем правой кнопкой мыши в обозначенном на скриншоте поле и нажимаем «Добавить», откроется окно для заведения типа оплаты (Рис. 26):

(Рис. 26)
В данном окне находится всего два поля для настройки:

(Рис. 27)
Данный код берётся из настроек фискального регистратора (типы оплат), можно найти через тест драйвера (Рис. 28) :

(Рис. 28)
Сопоставление кодов типов оплат необходимо для корректной работы двух и более ФР, если последовательность кодов типов оплат у этих ФР отличаются.
Зачет аванса в чеке полного расчета в ФР с использованием ФФД 1.05
В этой статье будет рассмотрена работа фискального регистратора (отдельно от Shelter) при зачете аванса в чеке полного расчета.
Принимаем аванс наличными на 100р. через тест-драйвера :

Признак способа расчета - АВАНС, тип оплаты - Наличными. Чек из фискального регистратора :

Как видно, было принято 100р. наличными (признак способа расчета - АВАНС, тип оплаты - НАЛИЧНЫМИ)
Снимаем X-отчет :

Сумма НАЛИЧНЫМИ : 100р.
ВЫРУЧКА : 100р.
Далее, выполняем зачет аванса (предварительная оплата(аванс)) при помощи полного расчета:

Печатается фискальный чек :

Снимаем X-отчет :

Что мы тут видим :
Общая сумма оплат (ИТОГО) : 200р. (в этом поле суммируются все типы платежей за смену)
А вот ниже, есть строчка "ВЫРУЧКА" в которой указана сумма в 100р. (это тот чек, который оплачивался наличным расчетом на 100р.)
Так работает фискальный регистратор.
ФНС разработала подробные методические рекомендации для оформления чеков при разных формах аванса:
формирование чеков при предварительной оплате за собственный товар, зачете предварительной оплаты за товар, предоставлении займа для оплаты товара и при погашении займа для оплаты товара (http://www.consultant.ru/document/cons_doc_LAW_321176/)
формирование чеков при продаже товаров с использованием подарочной карты. (http://www.consultant.ru/document/cons_doc_LAW_302821/)
Источник : https://kontur.ru/ofd/news/6669
Обязательные настройки Shelter для работы с ФФД 1.05/1.1
В данном мануале будут публиковаться обязательные настройки в ПО Shelter для корректной работы с ФФД 1.05/1.1
1. В версии 2.12.126.2650 для каждого пользователя необходимо прописать ИНН в карточке пользователя :

В логе универсального драйвера будет фигурировать следующая информация :
Значение параметра TaxPayerIdNum = значение ИНН в карточке пользователя
2. В версии 2.12.126.2700 реализована передача ППР (признак предмета расчета) в универсальный драйвера (УД) и оператору фискальных данных (ОФД).
Для настройки ППР необходимо :
1. В настройках системы включить чек-бокс "Использовать ФФД 1.05" - Сохранить
2. ППР по умолчанию - Товар

2. После включения этой опции, в карточке услуги появляется новое поле "Предмет расчета" (1 на рисунке):

3. Данные признаки предмета расчета берутся из справочников ("Настройки" - "Справочники" - "Справочники" - "Предмет расчета"):
ВНИМАНИЕ! Данные признаки редактировать не рекомендуется!
4. Признак предмета расчета (тег 1212) в логах УД фигурирует как ItemKind. Значением этого параметра являются значения реквизита из справочника предмета расчета (см. п.3), то есть в УД мы передаем значение реквизита (от 1 до 18), а не его название.
5. Для услуг, которые были начислены из R_Keeper используется тот предмет расчета, который указан для услуги в Shelter, для модуля Медицина - аналогичная ситуация, как и с услугами R_Keeper.
6. На чеке печатаются следующие предметы расчета :
В логе универсального драйвера будет фигурировать следующая информация :
3. В версии 2.12.126.2700 реализована передача ПСР (признак способа расчета) в универсальный драйвера (УД) и оператору фискальных данных (ОФД).
Для настройки ПСР необходимо :
1. В настройках системы включить чек-бокс "Использовать ФФД 1.05" - появляются дополнительные настройки.
2. ППР для авансовых платежей - Платеж
ПСР для частичной предоплаты - ПРЕДОПЛАТА
ПСР для полной предоплаты - ПРЕДОПЛАТА 100%

ПСР для полного расчета установлено по умолчанию и не настраивается - ПОЛНЫЙ РАСЧЕТ
3. В настройках подключения ФР в Shelter (Сервисы и оборудования) выставить необходимое значение в "Код типа платежа предоплаты(аванса)" - данный код будет передаваться при "закрытии" оплаты (ПОЛНЫЙ РАСЧЕТ) :

Данный код берётся из настроек фискального регистратора (типы оплат), можно найти через тест драйвера
На тестовом ФР Retail-01K код типа платежа предоплаты (аванса) - 14 :

На тестовом ФР АТОЛ - 3 :

ВНИМАНИЕ!!! Коды типов оплат необходимо смотреть через тест-драйвера, указанные выше коды - это примеры.
Каждому ПСР соответствует свой PaymentKind в логах УД :
а) При ПРЕДОПЛАТА 100% передается PaymentKind="1"
б) При ПРЕДОПЛАТА передается PaymentKind="2"
в) При АВАНС передается PaymentKind="3"
г) При ПОЛНЫЙ РАСЧЕТ передается PaymentKind="4"
4. В версии 2.12.126.2700 реализована печать чека коррекции
Для настройки возможности печати чека коррекции необходимо :
1. В настройках системы включить чек-бокс "Использовать ФФД 1.05"
2. В настройках системы включить чек-бокс "Использовать чек коррекции"

3. В "Сервисы и оборудование", для каждого подключенного через УД фискального регистратора, необходимо выставить "Код ФФД" (теги) для каждого кода налога в фиск.регистраторе. Коды тегов ФФД можно запросить у ЦТО, либо воспользоваться этой ссылкой.

В логе универсального драйвера будет фигурировать следующая информация после печати чека коррекции :
5. Необходимо сопоставить коды типов оплат в ФР и в "Сервисы и оборудования" :

Коды типов оплат фискального регистратора можно посмотреть через тест-драйвера. Примеры для АТОЛ и для Retail (ШТРИХ) есть выше по мануалу (см. п.3). Сопоставление кодов типов оплат необходимо для корректной работы 2-х и более ФР, если последовательность кодов типов оплат у этих ФР отличаются.
Например, для СПАРК код оплаты наличными - 8, электронными - 1, а для АТОЛ наличнымы - 1, электронными - 2.
Тестирование выполнялось на фискальных регистраторах : АТОЛ 22Ф, Retail-01K, СПАРК-115Ф
Версия библиотек фискального драйвера :
fpAtol54.dll - 7.48.166.0
fpShtr54.dll - 7.47.91.0
fpSpark54.dll - 7.46.49.0
Данные библиотеки можно скачать тут
Важно!!!
ФР СПАРК не печатает чек коррекции, не открывает смену через открытие фискальной смены, а так же плохо воспринимает некоторые признакми предмета расчета - ФР СПАРК не рекомендуется к использованию
ФР ШТРИХ на чеке может не печатать признаки предмета расчета (зависит от прошивки и настроек ФР), однако данные в ОФД передает верные.
На сегодняшний день (8.11.2018) ситуация по данному моменту исполнения законодательства РФ обстоит так:
Производители ФР Спарк, Штрих и Атол уже реализовали прошивки для автоматического изменения налоговой ставки при открытии первой смены 01.01.2019г.
Переход на новые значения ставки в ней реализован следующим образом: заранее в настройках ФР задается дата изменения налога
(для Спарк 115-Ф, для Атол и Штрих - предопределено 01.01.2019г).
При закрытии смены указанного числа ставка налога автоматически меняется. Таким образом, дополнительных операций с перенастройкой ФР в Shelter / Абонемент
делать не потребуется.
Но для корректной работы отчетности и выгрузок в 1С в ПО Shelter / Абонемент потребуется изменить значение налоговой ставки в справочнике вручную.
Предприятиям, находящимся на договорном обслуживании по продуктам Shelter / Абонемент, сотрудники ТП накануне предоставят соответствующую
инструкцию по настройке.
Моменты, на которые нужно обратить внимание:
Момент 1.
Оплатили бронь гостиницы/услугу/абонемент с НДС 18%, а потом оказалось необходимым вернуть предоплату, но уже в период действия НДС 20%
В ПО Shelter / Абонемент возврат будет произведён с фискальной налоговой ставкой 20%, поскольку ставка НДС 18% перестаёт существовать.
Момент 2.
Если оплата услуги будет производиться 2-мя частями – предоплата с НДС 18% и окончательный расчет при НДС 20%?
Если в ПО Shelter / Абонемент оказанная услуга уже начислена фолио со старым налогом (до 1.1.2019), а оплата этой оказанной услуги будет осуществляться
в новом периоде
(после 1.1.2019), то у данной услуги в программе Shelter / Абонемент расчет налога произойдет по старой налоговой ставке. А в фискальном чеке уже будет указан
налог по новой ставке.
Для исключения такой возможности можно предложить 2 варианта решения:
1) не иметь неоплаченных услуг к 1.1. 2019
2) скриптом пересчитать сумму налога у неоплаченных услуг. Заказчики, находящиеся на договоре ТП смогут получить необходимые консультации в ТП Shelter / Абонемент.
По ссылке находится скрипт для автоматического перевода НДС в программе Shelter 2, а так же инструкция по "ручному" переводу. Данный скрипт подходит для большинства баз Shelter 2, однако, если стандартные настройки в базе отличаются, автоматический перевод НДС не выполнится. Необходимо тщательно проверить настройки в БД Shelter (Налоги и Фиск.налоги).
Скрипт выполнится после выполнения процедуры ночного аудита (когда дата в БД станет 01.01.2019 00:00)
Подключение ФР MITAC MF2351 к Shelter 2
Для данного вида подключения требуется Shelter 2 версии 2.12.124.2450 или новее.
Для проверки доступности фискального регистратора MITAC MF2351 можно использовать командную строку с командой telnet 192.168.3.64 9191. (Рис. 1).






10. Последним этапом необходимо для каждой услуги в созданное пользовательское поле shelter (GENARMADG) ввести код ADG. Код ADG для каждого фискального регистратора уникален, в нашем примере 56.10 (Рис. 7).

Рис. 7

[06.02.19 16:16:38.520] [ALW] [06.02.19 16:16:38.520] [ERR] FiscalDocument(Status[]) = LogicError - FR error 190 - Payment is not accessible in fDBStoreNewReceipt() [06.02.19 16:16:38.520] [TLK]
ShelterOnlineServer
Описание и настройки модуля ShelterOnlineServer (версия 2.12.115.2275 и выше)
Служба ShelterOnlineServer является посредником между модулем бронирования UCS Shelter-Online и программным продуктом Shelter 2.
Передача данных между посредником и модулем UCS Shelter-Online осуществляется в реальном времени в формате XML
через определенный IP - TCPHost и порт - TCPPort.
Для установки данной службы необходимо:
1. Проверить наличие в ключе защиты модуля 5, проект 3 (Интернет-бронирование)
2. Запустить shelter.exe, перейти в модуль настроек (Рис. 1)

(Рис. 1)
В окне ввода пароля ввести служебный пароль (ucs-shelter), в следующем окне нажать кнопку «Настройки».
3. В открывшемся окне (рис. 2) необходимо найти секцию Shelter Online Server и настроить по аналогии с (рис. 2)

(Рис. 2)
ВНИМАНИЕ!!! Параметры : Адрес для прослушивания (рекомендуется 0.0.0.0), Максимальное количество потоков - Не менять!
В поле «Адрес для прослушивания» указывается ip-адрес, с которого будет ожидаться запрос к Online-Server.
Если указать в этом поле 0.0.0.0 — то, подключение к Online-Server будет доступно для всех адресов.
4. Далее необходимо сохранить настройки, нажав кнопки в следующем порядке : «Применить» - «ОК»
5. Cоздать отдельную директорию в каталоге с ПО Shelter (обычно папка называется Online);
6. Cкопировать в директорию ../Online/ следующие файлы :
В shelter.ini добавить следующие секции:
[INI]
Path=%EXE_PATH%\shelter.ini
[Log]
Path=%EXE_PATH%\Logs\
name=
level=100
debuglevel=100
fileage=0
maxlogsize=20
Секция [INI] нужна для того, чтобы файл с настройками «читался» из директории, где находится shelter.exe
7. Создать ярлык для shelter.exe, в свойствах ярлыка, в поле «Объект» добавить следующий ключ :
8. Далее необходимо запустить ярлык от имени администратора. Должно появиться сообщение о успешной установке службы.
9. Запустить службу
10. Создать еще один ярлык для shelter.exe с ключом :
Запустить данный ярлык, в появившемся окне открыть список «Система» - «Список отелей» - нажать «Выполнить (F9)»,
в окне 3 должен появиться результат выполнения функции. (Рис. 3)

(Рис. 3)
Так же, стоит обратить внимание на права доступа в Windows. Желательно назначить максимальные права для папки Shelter.
Актуальную версию модуля можно скачать тут
описание модуля v2.44
О модуле
В программный продукт «Shelter» входит модуль «Shelter-Online», который даёт возможность КЛИЕНТУ управлять своими персональными данными,
осуществлять поиск и бронирование номеров, проводить оплату выбранных номеров, а также получать информацию о состоянии брони.
Модуль «Shelter-Online» работает с программой «Shelter» через посредника shelter-online. Это служба, которая устанавливается запуском
Shelter.exe с ключом -online_server -install. Передача данных между посредником и модулем «Shelter-Online» осуществляется в реальном времени
в формате XML через определенный IP – TCPHost и порт – TCPPort.
Программа «Shelter» установлена во внутренней сети гостиницы. Сайт с модулем «ShelterOnline» размещен у провайдера.
Задача безопасной передачи данных из WEB сайта гостиницы на сервер Shelter и обратно, решается использованием в гостинице
демилитаризованной зоны. DMZ зона - часть компьютерной сети, которая находится между локальной сетью и Интернетом.
Она обеспечивает выход в интернет и внешнее присутствие в нём, скрывая при этом внутреннюю сеть организации и предотвращая прямое
обращение к ней. На данном компьютере должен быть установлен FireBird клиент и программа «shelter-online-server», которая слушает tcp порт
внешнего IP адреса. Именно на этот адрес и в этот порт отправляют команды скрипты, находящиеся у провайдера. Если команды пришли,
программа «shelter-online-server» выполняет определенные запросы к БД «Shelter» через внутренний интерфейс, и результат передает обратно,
т.е. на web страницу пользователя. Для просмотра и тестирования работы функций используется программа testShelteronline-server.exe
Для защиты от несанкционированных запросов используется ключ проверки передаваемой информации, который указывается в настройках
модуля «Shelter-Online» и программы «Shelter».
Для интеграции с уже существующим сайтом, модуль «Shelter-Online» устанавливается на сервер в то же место, где расположен сайт
и настраивается в соответствии с указанными в инструкции по установки требованиями.
Демо-версию данного модуля можно посмотреть на сайте http://shelter-online.ucs.ru/
Структурная схема работы с модулем

Возможности
Для клиентов
- просмотр и изменение личной информации в системе;
- просмотр забронированных номеров;
- оплата брони;
- редактирование брони;
- удаление брони.
Для организаций включаются возможности клиентов, дополнительно
- просмотр забронированных номеров;
- оплата брони;
- редактирование брони;
- удаление брони;
- поиск броней по различным параметрам
Настройка модуля онлайн-бронирования
- минимального количества номеров;
- минимального количества человек в номере;
- для разных типов пользователей;
- в зависимости от статуса брони;
- за определенное количество дней до заезда;
- установка возможности проведения онлайн-платежей;
- задание минимального процента оплаты номера;
- выбор платежной системы (Ассист, РобоКасса, Яндекс.Касса, Uniteller, United Card Services, Банк Русский Стандарт, РезервМастер,APPEX)
- отображаемых категорий гостей;
- отображаемых отелей;
- вывода типов номеров;
- вывода тарифов;
- вывода дополнительных услуг;
Требования
Для работы модуля необходимы следующие минимальные требования :
Проверить необходимые модули можно с помощью встроенного модуля check server. Для этого необходимо перейти в визуальные настройки
и открыть ссылку check server. Далее выбрать модуль для тестирования, задать параметры для подключения к программе connecter.
Для правильной работы необходимо обновить shelter-online-server до последней версии.
Установка
Предоставляемый модуль разделен на 2 части:
1. шаблон сайта;
2. модуль Shelter-Online (находится в директории «shelter»).
Если у Вас сайт уже есть, значит, Вам понадобится только модуль.
Для демонстрации данный модуль бронирования можно развернуть, используя пакет WEB-разработчика Denwer. Скачать его можно на сайте denwer.ru.
После его установки папку HotelOnline\hotel\ скопировать в C:\WebServers\home\localhost\www\. Настроить модуль по описанию ниже.
Из WEB-браузера вызывать http://127.0.0.1/hotel/
Настройка модуля
Закрытые настройки модуля представлены в разделе /shelter/ файл config.php.
Открытые настройки доступны по адресу http://127.0.0.1/hotel/shelter/settings/
Рассмотрим закрытые настройки для первоначального запуска модуля.
В файле config.php представлены настройки
Сохранять файл config.php необходимо с кодировкой UTF-8 (без BOM). В качестве программы для редактирования файла воспользуйтесь Notepad++.
Для запуска модуля необходимо установить параметры в файле config.php
XML_PATH – параметр TCPHost для shelter-online-server. Посмотреть можно в shelter.ini
XML_PORT – параметр TCPPort для shelter-online-server. Посмотреть можно в shelter.ini
KEY_SECURITY_SHELTER – ключ проверки передаваемой информации, указывается в программе Shelter
(Настройка/Системные настройки/Shelter Online Server)
Оплата
ВНИМАНИЕ! За подключением платежных систем, необходимо обратиться в техническую поддержку UCS.
Настройки оплаты находятся в отдельном файле. Настройка платежных систем находится в файле config.php
Языковые настройки
Языковые настройки модуля содержаться в разделе /inc/ в файле lang.php
Стилистика модуля
Основной шаблон находится в файле /template.php, в котором подключаются JavaScript, стили и задается структура html страницы.
Стили CSS находятся в файле style.css В разделе /template/ находятся шаблоны страниц, отображающие информацию определенной страницы.
Для изменения вывода определенных данных, необходимо изменить файл соответствующий изменяемой странице.
В разделе /template/inc/ находятся шаблоны выполнения определенных функций, названия файла соответствует либо названию страницы, либо функции.
Описание для номеров во всплывающем окне
Файлы в разделе /about/rooms/ необходимы для отображения краткой информации о номере при выборе номеров. Каждый файл соответствует
значению в переменной $LINK_ROOM. Изображения в данных файлах прописывается статично, в зависимости зависит от того, как подключен модуль.
Описание для тарифов во всплывающем окне
Файлы в разделе /about/rates/ необходимы для отображения краткой информации о тарифах при выборе номеров.
Каждый файл соответствует значению в переменной $ LINK_RATE.
Почтовые шаблоны
Все шаблоны находятся в разделе /mail/. Название шаблона соответствует названию страницы, в котором он используется,
кроме дополнительных шаблонов. Текст шаблона отправляется в формате «html». Переменная, которая будет заменена на значение, з
аключается между символами «#». Текст будет отправлен также как и указано в шаблоне, только вместо переменных будут конкретные значения.
Если требуемый шаблон отсутствует, модуль письмо не отправит.
Дополнительные шаблоны
На данный момент модуль работает с 2 типами текстовых шаблонов: статичными и динамичными.
Статичный шаблон содержит текст, в котором модулю достаточно изменить требуемые элементы. Пример статичного шаблона:

Результат подстановки шаблона:

Для добавления новых элементов в шаблон требуется доработать соответствующий шаблон и файл в разделе /controller/.
Для добавления новых элементов достаточно в массив $arData (рядом с комментарием отправка письма) добавить элемент массива:

Динамичный шаблон содержит как элементы, требующие замены, так и списки, формирующие автоматически при создании шаблона.
Заменяемые программой элементы заключаются символами «#», как указано в примере. Пример динамичного шаблона:

Результат подстановки шаблона:

Для создания списка в данных шаблонах, необходимо перечисляемые элементы заключить между символом «^», как указано в примере.
Сами элементы заключаются также как и в статичном примере символом «#».
В модуле возможно создавать несколько списков в шаблоне, при этом они не должны содержаться друг в друге.
Для добавления новых элементов и списков в шаблон требуется доработать соответствующий шаблон и файл в разделе /controller/.
Для добавления новых элементов достаточно в массив $arData (рядом с комментарием отправка письма) добавить элемент.
Для создания списка, необходимо добавить элемент, содержащий перечисление значений через разделитель «;».

Настройка платежных систем
В модуле поддерживаются следующие платежные системы :
После проведения оплаты клиента можно переадресовать на страницу личного кабинета или специально заготовленные шаблоны PaymentExecution,
PaymentFail и PaymentSuccess, описанные в разделе Шаблоны.
Робокасса
Зарегистрируйтесь и откройте главную страницу «Личного кабинета», выберите магазин в центре окна.

Рис. 1 - администрирование в Робокассе
Заполните информацию на вкладке «Регистрация» и перейдите на вкладку «Технические настройки».

Рис. 2 - настройка отправки данных в Робокассе
«Идентификатор магазина» должен соответствовать «ROBOKASSA_MrchLogin» в файле config.php
«Пароль 1» и «Пароль 2» соответственно «ROBOKASSA_mrh_pass1» и «ROBOKASSA_mrh_pass2» в файле config.php.
В «Success Url» и «Fail Url» ссылка на страницу «Личный кабинет» модуля бронирования.
Либо можно задать страницы модуля бронирования PaymentSuccess и PaymentFail соответственно.
Ассист
Перед тестированием платежной системы необходимо отправить заявку на подключение.
Перейдите по адресу https://account.paysecure.ru/ и введите логин и пароль. Далее кликнуть «Настройки мерчантов».
На вкладке «Настройки платежей» ввести URL_RETURN и URL_RETURN_OK. В данном случае ссылка на страницу «Личный кабинет» модуля бронирования.

На вкладке «Настройка отправки результатов платежей» поставить галочку «Отправка результатов оплат» и задать остальные параметры.

Путь к разделу с платежными файлами в настройках модуля бронирования (PAY_URL) должен совпадать с параметром «URL для отправки результатов».
Отличие в том, что в параметре «URL для отправки результатов» указывается конкретный файл.
Uniteller
Перед тестированием платежной системы необходимо отправить заявку на подключение.
Перейдите по адресу https://test.lk.uniteller.ru/ и введите логин и пароль. Далее кликнуть «Договоры» и выбрать «Настройки».
В поле «URL для уведомления сервера интернет- магазина об изменившемся статусе счёта/оплаты» внести полный путь до файла оплаты,
название которого указано в файле config.php. Из личного кабинета Uniteller также перенести следующие настройки в файл config.php:
Адреса страниц зависят от режима платежей – тестовый или реальный. Изначально указаны страницы для тестовых платежей на тестовом сервере.
United Card Services
Перед тестированием платежной системы необходимо отправить заявку на подключение.
Необходимо дополнительно указать в технической поддержке процессингового центра:
Название и расположение скрипта для оплаты после возврата клиента в файле config.php. Настройки в config.php:
Банк Русский Стандарт
Перед тестированием платежной системы необходимо отправить заявку на подключение.
Перед тестированием необходимо установить на веб-сервер сертификаты и ключи банка. Также указать в технической поддержке адрес
возврата после платежа. Название и расположение скрипта для оплаты после возврата клиента в файле config.php. Настройки в config.php:
В личном кабинете платежной системы страница отправки результатов должна быть: <...>\shelter\inc\pm\rs5ogvu5hf.php
РезервМастер
Перед тестированием платежной системы необходимо отправить заявку на подключение.
Настроек в модуле онлайн бронирования не требуется, необходимо настроить в программе Shelter.
APPEX (протокол E-POS)
Перед тестированием платежной системы необходимо отправить заявку на подключение.
// ВНИМЕНИЕ! Адрес для запроса со стороны Appex на подтверждение проведения операции указать /shelter/inc/pm/ap1ufe93i_confirm.php
Название и расположение скрипта для оплаты после возврата клиента в файле config.php. Настройки в config.php:
Шаблоны отображения информации
Шаблоны разделяются на две категории:
В разделе /template/ находятся шаблоны страниц, отображающие информацию определенной страницы. Для изменения вывода определенных данных,
необходимо изменить файл соответствующий изменяемой странице.
В разделе /template/inc/ находятся шаблоны выполнения определенных функций, названия файла соответствует либо названию страницы, либо функции.
Шаблоны страниц:
Шаблоны функций:
Модуль «Личный кабинет гостя»
Модуль «Личный кабинет гостя» позволяет заселенному гостю просматривать информацию о заезде и добавленных дополнительных услугах,
просматривать и добавлять новые дополнительные услуги, а также обмениваться сообщениями с администратором.
Модуль устанавливается во внутренней сети на веб-сервер гостиницы. Подключение к модулю с мобильного устройства гостя необходимо сделать
с помощью Wi-Fi по локальному адресу, который предоставит системный администратор отеля. Для входа в личный кабинет необходим логин и пароль.
Логин – телефон гостя, указанный при заселении, пароль генерирует программа Shelter отдельно для каждой брони.
Для того чтобы воспользоваться личным кабинетом, гостю необходимо при заселении указать номер телефона и получить пароль у администратора.
Затем открыть браузер мобильного устройства, перейти по необходимому адресу и ввести свой номер телефона и пароль.
Для упрощения входа в личный кабинет можно использовать QR-код, в котором хранится адрес подключения к модулю.
Сканировав данный код мобильным устройством, гость автоматически перейдет в браузере по необходимому адресу, останется только ввести свой
номер телефона и пароль. Данный QR-код можно распечатать у стойки администратора и написать краткую инструкцию по работе с модулем.

Внешний вид модуля после авторизации гостя
В настройках модуля онлайн-бронирования возможна настройка способа отправки сообщений подтверждения бронирования и тд:

Предлагается два варианта отправки сообщений:
С помощью PHP - настройка почты через которую будут отправляться письма происходит на хостинге сайта.
С помощью Shelter - настройка почты производится в настройках модулей Shelter. Рассмотрим именно его.
Необходимо зайти в настройки модулей Shelter и найти там настройки SMTP-сервера, настраиваем по примеру ниже:

После выполненных настроек перезапускаем службу OnlineServer. При корректной настройке все письма будут успешно доставляться с помощью Shelter.
|
1 |
Основные настройки |
Описание |
| 1.1 | Страница отображения модуля | Необходимо скопировать адрес страницы Вашего сайта, где будет размещен модуль |
| 1.2 | Абсолютный адрес для модуля | Прямой адрес для отображения модуля |
| 1.3 | Экранировать модуль для адресов с/без www | Если отметить параметр, модуль не будет жестко привязан к адресу, а будет доступен также на поддомене www |
| 1.4 | Перед отображением модуля проверять соединение | Указать количество секунд до обрыва соединения (0 - не проверять) |
| 1.5 | ||
|
2 |
Отправка писем |
|
| 2.1 | Способ отправки сообщений | Для отправки с помощью Shelter необходимо настроить SMTP в файле shelter.ini |
| 2.2 | E-mail отеля | Ответное письмо клиента будет приходить на данный адрес |
| 2.3 | Менеджеры, которые получат уведомление о новой брони | Указать E-mail менеджеров |
|
3 |
Пользователи |
|
| 3.1 | Личный кабинет для пользователя | Обязательная регистрация и авторизация перед бронированием |
| 3.2 | Минимальная длина пароля для пользователя | Указывается минимальная длина пароля для личного кабинета пользователя. |
| 3.3 | Ввод защитного кода (captcha) при регистрации и напоминании пароля | Используется совместно со встроенной защитой от роботов |
| 3.4 | Используются только знак "+" и цифры +XXXXXXXXXXX или XXXXXXXXXXXX | |
| 3.5 | Отображать брони сделанные в Shelter | Работает совместно с личным кабинетом пользователя. Если бронирование было сделано через Shelter, то бронь так же отобразится в личном кабинете гостя в модуле бронирования. |
|
4 |
Организации |
|
| 4.1 | Разрешить авторизацию и бронирование для организаций | |
| 4.2 | Использовать бронирование на сайте от ОПРЕДЕЛЕННОЙ организации | Указать id из функции Список организаций (0 - не использовать) |
| 4.3 | Использовать ДОГОВОР при бронировании на сайте от ОПРЕДЕЛЕННОЙ организации | Указать id из функции Список договоров организаций (0 - не использовать) |
| 4.4 | ||
| 4.5 | Отображать сумму комиссии | |
|
5 |
Поиск номера |
|
| 5.1 | Указать id первого отображаемого отеля | Если используется несколько отелей, то с помощью данной настройки можно выбрать какой отель будет первым отображаться при открывании модуля бронирования |
| 5.2 | Фильтр отображаемых отелей | Если в одной базе данных 2 или более гостиниц, но вы хотите использовать одну гостиницу для бронирования или же несколько, перечислите ID необходимых гостиниц |
| 5.3 | Предлагать дату заезда в форме поиска | Выбор даты по умолчанию при поиске номера |
| 5.4 | Минимальное количество дней заезда | Указывается минимальной количество дней проживания при бронировании |
| 5.5 | Разница между датой въезда и выезда в форме поиска | Указывается разница в количестве дней между датой заезда и выезда при поиске номера |
| 5.6 | Ввод количества НОМЕРОВ в форме поиска | ОБЯЗАТЕЛЬНО отметить Ввод количества бронируемых номеров в одном заезде |
| 5.7 | Ввод количества ЧЕЛОВЕК в форме поиска | По умолчанию в поиске заполняется один взрослый |
|
6 |
Выбор номера |
|
| 6.1 | Страница с результатом поиска свободных номеров | |
| 6.2 | Отображать только одну страницу с результатом поиска | Свободные номера и тарифы или Формирование заездов |
| 6.3 | Возможность изменения параметров поиска | |
| 6.4 | Отображение номерного фонда | |
| 6.5 | Граница среднего значение количества номеров для заливки цветом на странице Выбор номера | Если будет указано, например, 3. Тогда категории, где свободных номеров больше 3, окрашиваются одним цветом, меньше трех - другим цветом. Категории, где нет номеров остаются без заливки. |
| 6.6 | Отображать количество свободных номеров | |
| 6.7 | Валюта для отображения | Изменить подписи к валюте можно в языковых настройках /inc/lang.php |
| 6.8 | Просмотр цены за номер в другой валюте на странице Выбора номера | Необходимо заполнить пункт "Список иностранных валют для конвертации" |
| 6.9 | Список иностранных валют для конвертации | Если оставить пустым, конвертация выполняться НЕ будет. Для России указать CharCode из http://www.cbr.ru/scripts/XML_daily.asp?date_req=11/11/2014 Для Украины указать ccy из https://api.privatbank.ua/p24api/pubinfo?exchange&coursid=3 Для Европы указать currency из http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml |
| 6.10 | ||
| 6.11 | Отображаемые категории гостей | Перечислить id из функции Список возрастных категорий |
| 6.12 | Отображать информацию о дополнительно возможных тарифах с условиями | Если клиент выбирает период заселения, отличный от условий тарифа, тогда данный тариф будет выводится в качестве информации |
| 6.13 | Коды НОМЕРОВ, которые выводить НЕ нужно | |
| 6.14 | Коды ТАРИФОВ, которые выводить НЕ нужно | |
|
7 |
Бронирование |
|
| 7.1 | Бронировать только свободные номера без переездов | ОБЯЗАТЕЛЬНО запретить Возможность редактирования параметров заезда и отметить Отображать только одну страницу с результатом поиска |
| 7.2 | Распределять бронь по номерам выбранной категории | ОБЯЗАТЕЛЬНО отметить пункт выше Бронировать только свободные номера без переездов |
| 7.3 | Ввод данных о кредитной карты | |
| 7.4 | Сделать привязку заполнения данных о кредитной карте к определенным типам оплат | Указать id из функции Типы оплат |
| 7.5 | Выбор дополнительных услуг | Указать коды операций которые нужно вывести, отображаются в функции Список операций |
| 7.6 | Возможность редактирования параметров заезда | Даты заезда и выезда, типа номера и тарифа |
| 7.7 | Возможность добавления заезда | ОБЯЗАТЕЛЬНО включить "Возможность редактирования параметров заезда" |
| 7.8 | Обязательное присутствие взрослого в заезде | |
| 7.9 | Заполнение ФИО гостя при бронировании | Недоступно при вводе количества бронируемых номеров в одном заезде |
| 7.10 | Фамилия, Имя, Отчество гостя по умолчанию |
Если ОТКЛЮЧЕНО "Заполнение ФИО гостя при бронировании"
|
| 7.11 | Дата рождения гостя при бронировании | ОБЯЗАТЕЛЬНО включить "Заполнение ФИО гостя при бронировании" |
| 7.12 | Ввод защитного кода (captcha) при бронировании | Рекомендуется ставить, если РЕГИСТРАЦИЯ НЕОБЯЗАТЕЛЬНА |
| 7.13 | Ввод количества бронируемых номеров в одном заезде | ОБЯЗАТЕЛЬНО снять отметку "Заполнение ФИО гостя при бронировании" |
| 7.14 | Подтверждение правил отеля при бронировании | Текст указать в файле /shelter/template/Rules |
| 7.15 | Предоставлять возможность раннего заезда и позднего выезда | Позволяет выбирать кроме даты, еще и время заезда |
| 7.16 | Максимальное количество заездов для физ.лиц | |
| 7.17 | Максимальное количество заездов для юр.лиц | |
| 7.18 | Статус брони для ПОЛЬЗОВАТЕЛЕЙ | |
| 7.19 | Статус брони для ОРГАНИЗАЦИЙ | |
| 7.20 | Проверка на обязательное заполнение основных мест перед заполнением дополнительных | |
| 7.21 | Отображать гостей изображениями на странице Выбор номера | Создать для каждого типа гостя изображение в разделе /images/guest/ в формате PNG Название файла соответствует id гостя из функции Список возрастных категорий |
| 7.22 | Код типа оплаты | Указать из функции Типы оплат |
| 7.23 | Разрешенное количество символов для комментария к бронированию | |
| 7.24 | Возможность ввода дисконтной карты для бронирования со скидкой | |
|
8 |
Пакеты услуг |
|
| 8.1 | Использовать пакеты услуг при бронировании | |
| 8.2 | Использовать фильтр услуг | Разрешить или запретить вывод услуг из списка ниже |
| 8.3 | Перечислить КОДЫ услуг в соответствии с выбранным фильтром выше | Если список пуст - доступны все услуги |
|
9 |
Отмена бронирования |
|
| 9.1 | Самостоятельная отмена бронирования | Указать количество дней до заезда, при которых разрешено отменить бронь (0 - не предоставлять для всех) |
| 9.2 | Отмена бронирования для ПОЛЬЗОВАТЕЛЕЙ | В зависимости от статуса созданной брони |
| 9.3 | Отмена бронирования для ОРГАНИЗАЦИЙ | в зависимости от статуса созданной брони |
|
10 |
Оплата |
|
| 10.1 | ВНИМАНИЕ! За подключением платежных систем необходимо обратиться в техническую поддержку UCS | |
| 10.2 | Используемая валюта при платеже | Зависит от настроек платежной системы |
| 10.3 | Минимальная сумма первого платежа | Указан процент от стоимости брони |
| 10.4 | Используемая платежная система | |
|
11 |
Язык |
|
| 11.1 | Язык по умолчанию | |
| 11.2 | Отображаемые языки | Перечислить, если несколько. Доступны RU;EN;LT;BG. Порядок отображения будет соответствовать |
Описание API ShelterOnlineServer можно скачать тут (формат pdf)
Интеграция Shelter и САНАТОРИУМ
Для настройки данной интеграции требуется Shelter 2 версии 2.12.122.2390 или новее.
Сотрудники технической поддержки Shelter настройкой системы САНАТОРИУМ не занимаются. Данная интеграция со стороны UCS не лицензируется и распространяется свободно.
Для настройки интеграции необходимо выполнить скрипт от пользователя пользователя SYSDBA :
Открыть IBExpert
В настройках подключения к БД указать пользователя: SYSDBA, пароль masterkey;
Подключиться к БД;
Открыть редактор скриптов (Ctrl+F12) и выполнить скрипт ;
| PATIENTID | идентификатор пациента |
| LASTNAME | фамилия |
| FIRSTNAME | имя |
| MIDDLENAME | отчество |
| SEX | пол (в формате M или F) |
| BIRTHDATE | дата рождения |
| PHONE | контактный телефон |
| SOCIALSTATUS | социальный статус |
| TICKETSTARTDATE | дата начала лечения по путевки |
| TICKETENDDATE | дата окончания лечения по путевке |
| ROOMNUMBER | номер комнаты, в которой проживает пациент |
| ROOMTYPE | тип комнаты, в которой проживает пациент (нужен код) |
| CODE | уникальный код гостя |
| DOC_TYPE | тип документа, удостоверяющего личность |
| DOCUMENTNAME | наименование документа, удостоверяющего личность |
| DOCUMENTSERIES | серия документа |
| DOCUMENTNUMBER | номер документа |
| DOCUMENTISSUER | документ выдан |
| DOCUMENTISSUEDATE | дата выдачи документа |
| OCCUPATION | занимаемая должность |
| WORKPLACE | место работы |
| COUNTRYNAME | страна проживания пациента |
| SETTLEMENTNAME | наименование поселения |
| SETTLEMENTTYPEID | идентификатор типа поселения |
| AREANAME | наименование области |
| STREETNAME | наименование улицы |
| STREETTYPEID | идентификатор типа улицы |
| HOUSENO | номер дома |
| FLATNO | номер квартиры |
| BUILDINGNO | номер строения |
| FLATLITERA | буква квартиры |
| ARRIVALDATE | дата приезда |
| DEPARTUREDATE | дата отъезда |
| GUESTSTATUS | статус гостя (код данного статуса 50, 52, 300, 400) |
| GUESTGLOBALID | глобальный уникальный идентификатор гостя (пациента), этот идентификатор совпадает у пациента в рамках повторных приездов (идентификатор профиля гостя), по данному идентификатору будет осуществляться привязка предыдущих приездов. |
| LASTUPDATEDATETIME | дата и время последнего апдейта записи гостя |
| RATECODE | код тарифа пациента |
| RATENAME | имя тарифа пациента |



Описание настройки модуля UCS Service Monitor Server (ver. 2.12.115.2275 и выше)
UCS Service Monitor Server предназначен для отслеживания зависаний служб ShelterOnlineServer, ShelterTravelLineServer, ShelterWuBookServer,
отправку на e-mail сообщения о не корректности работы, а так же перезапуск этих служб.
1. Необходимо создать отдельную директорию в папке с Shelter (MonitorServer к примеру)
2. Скопировать в эту папку :
3. Далее создать ярлык для shelter.exe из папки MonitorServer и ярлыку прописать ключ : -service_monitor_server -install
4. Запустить ярлык с правами администратора, должно появиться сообщение о успешной установке службы.
5. Перейти во вкладку «Сервисы и оборудование» добавить модуль Online Server. (Рис. 1)

(Рис. 1)
6. Настроить по аналогии с Рис. 2

(Рис. 2)
7. Добавить модуль из Рис. 3

(Рис. 3)
8. Заполнить параметры подключения к почтовому серверу: (Рис. 4)

(Рис. 4)
9. Перейти к настройкам модуля Online Server из п.6
10. Указать e-mail адрес на который будут приходить уведомления для всех полей секции «Email уведомление» и сохранить. (Рис. 5)

(Рис. 5)
11. Запустить службу UCSServiceMonitorServer.
Данная настройка описывает настройку мониторинг службы ShelterOnlineServer и отправку уведомлений на почту.
Если необходимо мониторить службы ShelterWuBookServer, ShelterTravelLineServer, то добавляем модуль GDS Checker (Рис. 6)

(Рис. 6)
Переходим в настройки GDS Checker и настраиваем по аналогии с рис. 6 (заполнить поля в «Email уведомление»)
В поле «Имя службы» прописать имя службы, которую необходимо опрашивать ShelterWuBookServer или ShelterTravelLineServer
и перезагружать автоматически, если нет ответа.
После этого запустить службу UCSServiceMonitorServer

(Рис. 7)
ShelterOnlineServer
Каждую минуту формируется запрос к службе ShelterOnlineServer :
TRY: SendShelterRequestEx
000000213<?xml version="1.0" encoding="utf-8"?><hotelslist
sign="2df33htujuoi7456432435rg" gds="BOOKING" version="3"/>
Возвращается ответ от ShelterOnlineServer :
<?xml version="1.0" encoding="windows-1251"?>
<hotelslist gds="BOOKING" version="3" langcode="RU">
Список отелей (пример)
</hotelslist>
Количество попыток : 3
Если после 3-х запросов hotelslist ShelterOnlineServer не вернет ответ, то будет отправлено уведомление на указанную почту и служба будет перезапущена.
ShelterWuBookServer/ShelterTravelLineServer
Начиная с версии 2.12.115.2275 у служб появился HTTP-сервер, который принимает запросы от UCSServiceMonitorServer.
HTTPсервер работает с портом 7799. Каждые 10 минут формируется запрос :
TRY: TServiceMonitorGDS.CheckServiceAvailable GET http://127.0.0.1:7799/status :

Ответ :
DONE: TServiceMonitorGDS.CheckServiceAvailable Result = 200 OK; Status=1
Количество попыток : 3
Если после 3х запросов hotelslist ShelterWuBookServer/ShelterTravelLineServer не вернет ответ,
то будет отправлено уведомление на указанную почту и служба будет перезапущена.
Служба UCSServiceMonitorServer формирует собственный лог-файл, который находится в папке, указанной в Shelter.ini
ВНИМАНИЕ!
Мы не гарантируем работоспособность терминалов других банков после настройки по данному мануалу!
1. Специалистами Сбербанка настраивается подключение терминала к ПК и установка Pilot_NT
Сотрудники технической поддержки Shelter настройкой терминала не занимаются
2. Запускаем Shelter и сразу переходим в настройки. Переходим в «кредитные карты», выбираем пин-пад(SBERBANK2), нажимаем добавить.
Устройство добавляется в загружаемые модули. Далее указываем путь вручную до библиотеки pilot_nt.dll, которая расположена в папке с Pilot_NT.

3. Необходимо в Shelter.ini добавить следующую секцию :
[CREDITCARD];заголовок (можно не писать, тогда оставить 1=)
1=SHELTER ПРИМЕР ТЕКСТА; печать заголовка отдельноheader_print_separately=0;раздельная печать (для универсального должна быть выключена! Иначе с двух сторон каждой строчки будет ДОБРО ПОЖАЛОВАТЬ! ... СПАСИБО ЗА ПОКУПКУ!);Для ШТРИХ-ФР-К, который подключен не через универсальный драйвер поставить separate_print=1separate_print=0;количество пустых строк в начале чекаempty_lines_before=0;количество пустых строк в конце чекаempty_lines_after=0; строка определяющая отрезку чекаcut_cmd=~S;по умолчанию (при отсутствии в shelter.ini) header_convert_utf8_to_ANSI=0. Если файл shelter.ini сохранен в кодировке UTF-8, то ;для корректного отображения кириллицы в параметре значения заголовка (1=SHELTER русский текст), при возврате и сверке ;итогов (терминал сбербанк), необходимо параметр header_convert_utf8_to_ANSI выставить в значение единица;(header_convert_utf8_to_ANSI=1)header_convert_utf8_to_ANSI=1
Следует обратить внимание на параметр cut_cmd. Значением этого параметра является символ отрезки чека из настроек терминала.
4. Далее заходим в Shelter → «Настройки системы»→ «Касса»→ «Кредитная карта»→ Использовать авторизационный сервер, например ABG,
ставим галочки на «Использовать авторизационный сервер», «Применять схему прямая продажа»
и «Делать возврат через сервер кредитных карт независимо от кассовой смены».

5. После проверяем работу связки Shelter и пин-пада. Заходим в работу с кассой, выбираем киоск, после нажимаем смена → сверка кредитных карт.
Если запускается процесс сверки итогов, значит все работает корректно.
1. Данный вариант является основным для выявления необходимого символа для отрезки чека, но бывают исключения, когда терминал не возвращает нужный
символ и его приходится искать в слепую.
Однако рекомендуем начать именно с этого способа:
1. Заходим в Shelter.ini, находим секцию [CREDITCARD] и удаляем, либо комментируем параметр «cut_cmd = ».
2. Далее переходим в папку с ПО Сбербанка, обычно располагается по пути: C:\sc552. Находим в этой папке Pinpad.ini.
3. Открываем Pinpad.ini и комментируем параметр «PrinterEnd = » (Если такой параметр присутствует).
Чтобы закомментировать строку перед нужным параметром поставьте « ; »
4. Следующим шагом будет проведение тестовой оплаты, либо снятие сверки итогов через Shelter.
5. После успешной оплаты или сверки итогов нам нужно открыть лог Shelter в котором фигурирует платеж или сверка итогов.
6. Находим в логе образ слип-чека и нас интересует строка над самым первым образом в логе:

7. Выделенное на скриншоте это информация, которая содержится в слип-чеке, только в виде запроса, который отправляется на терминал.
8. Нас интересует конечные данные этого запроса, поэтому пролистываем блокнот вправо, чтобы увидеть конец запроса.
В конце запроса как правило передается: /E/E/E/E/E/E/E/E/E/E/E/E/E/E/E/E/E/E/E/E/E/E/E/E/E/E/E#13;#10; #13;#10; #13;#10; #13;#10; #13;#10;
9. Символ отрезки чека, который нас интересует обычно располагается после символов указанных выше.

В нашем случае это символ « | », но может быть и другой.
10. Этот символ, который мы обнаружили в логе и есть символ отрезки чека.
11. Нам остается только зайти в Shelter.ini и в секцию [CREDITCARD] прописать «cut_cmd = | ». После этой настройки слипы будут отрезаться корректно.
2. Если настроить по первому способу символ отрезки чека не удается, например, символ не отображается, то возможно данная настройка вам поможет, в большинстве случаев используется именно такая.
Символ отрезки чека настраивается в двух местах - это shelter.ini и pinpad.ini (Pinpad.ini вы можете найти в корне папки с Pilot_nt.dll)
В shelter.ini в секции [CREDITCARD] указываем: cut_cmd = |
В pinpad.ini необходимо указать: PrinterEnd=~S
Иногда возникают ситуации, когда помимо интегрированного терминала нужно использовать еще автономный.
Включая настройку «Использовать авторизационный сервер ABG» при любой оплате по категории кредитных карт идет обращение к интегрированному терминалу.
Соответственно, вы не сможете проводить фискальные оплаты по кредитным картам проведенным по автономным терминалам.
Для этого в Shelter есть настройка, которая позволит использовать автономные терминалы совместно с интегрированными.
1. Заходим в Shelter → «Справочники»→ «Услуги и оплаты»→ «Оплаты»→ Переходим в категорию «Кредитные карты».
2. Так как созданные оплаты по кредитным картам уже используются для интегрированного терминала нам необходимо завести отдельную оплату
для автономного терминала.
3. Создаем новую оплату по аналогии и устанавливаем чек-бокс «Не использовать ABG»

В дальнейшем, если проводить оплату по этому типу оплаты, то вы будете получать только фискальный чек, а обращение к терминалу происходить не будет.
Проект 2 Модуль 4.
Для работы модуля требуется Shelter Online Server версии 2.12.119.XXXX или новее. Лицензия на сам Shelter Online Server не требуется.
Схема работы модуля:

Принцип работы:
При подключении к гостиничному WIFI, гостя направляет на страницу авторизации. После ввода номера комнаты и даты рождения идет проверка,
проживает ли этот гость в гостинице сейчас.
Установка модуля:
Устанавливается служба Shelter Online Server.
Далее, в OnlineServer.xml, перед закрывающим тегом </xml>, добавляется содержимое GetGuestReserv.xml. Ссылка для скачивания
После запуска службы, представителям WIFI, сообщается адрес и порт Shelter Online Server.
Интеграция осуществляется со следующими системами:
Модуль можно скачать тут
Примеры выгрузки гостей из Shelter находятся тут
ВНИМАНИЕ!!! В Москве и Московской области, Контур.ФМС предлагает только один тариф для подключения - "ФМС.Лайт", который не позволяет отправлять данные в МВД в режиме online. Отправка возможна только на бумажном носителе.
Порядок установки модуля:
1. Выполняем xmlexport.sql на базе данных.
2. Далее выполняете еще один скрипт, вы можете его взять тут
3. И следом выполняем еще один, берем его тут
4. Прописываем путь к БД и параметры подключения к серверу блокировок в xmlexport.ini.
5. Запускаем модуль.
6. Создаем новый шаблон.

7. Заполняем поля «Наименование шаблона» и «Каталог выгрузки» на вкладке «Основные настройки». Остальные параметры заполняются по желанию.

8. Добавляем запрос на вкладке «SQL-запрос».
9. Добавляем xml-шаблон на вкладке «XML-шаблон» и проставляем в нужных местах имена полей из запроса.
10. После чего можно сохранить шаблон нажатием кнопки «Сохранить».
Далее, если шаблонов несколько, ставим указатель на нужный шаблон и нажимаем кнопку «Выгрузить». Данные выгрузятся в указанный в шаблоне
каталог выгрузки:

Необязательные параметры выгрузки:
1. «Группировать файлы...» - указанное значение должно соответствовать наименования поля из запроса. Если соответствие есть, файлы выгрузки будут сортироваться по каталогам вида «каталогвыгрузки\имяполя_значениеполя».
2. «Именование файлов …» - указанное значение должно соответствовать наименованию поля из запроса. Если соответствие есть, файлы выгрузки будут именоваться по значению этого поля. Если в качестве поля указано «FULLNAME» из запроса, то файлы будут вида «Иванов_Иван_Иванович.xml».
К файлам с одинаковым именем добавляется инкрементное значение «Иванов_Иван_Иванович(4).xml».
3. «Удалять декларацию …» - в выгруженных файлах будет отсутствовать <?xml version="1.0"...?>
4. «Удалять пустые элементы …» - в выгруженных файлах будут отсутствовать пустые элементы (<node/> или <node></node>).
5. «Открывать каталог выгрузки …» - после завершения выгрузки будет открыт каталог, указанный в поле «Каталог выгрузки».
6. «Дата выгрузки с» и «по» - параметры даты, которые могут учитываться в запросе. Для этого нужно использовать в запросе параметры «:STARTDATE» и «:ENDDATE». Дата передает в формате Double (число с плавающей точкой).
Ранее в начале инструкции по установке вы скачивали SQL-запрос для российских и иностранных граждан, повторно можно скачать тут
(файлы sql_ino.txt sql_rus.txt, находятся в разных папках Russian и Foreigner).
В этих запросах уже находится необходимое закомментированное условие, которое позволяет выполнять выборку данных из необходимой нам гостиницы.
Заккоментированное условие вы можете найти в конце запросов, выглядит условие абсолютно одинаково для российских и иностранных граждан:
1. В файле sql_rus и sql_ino условие выглядит так: -- and H.ID = 1.
2. Вам необходимо раскомментировать строку убрав вначале "--". Далее нужно установить нужное значение в условии. H.ID - обозначает ID отеля из которого
мы хотим выгружать данные.
3. Чтобы узнать ID отеля нужно с помощью программы IBExpert выполнить запрос: "select * from hotels", после выполнения данного запроса вы увидите
список заведенных гостиниц в базе данных.
4. Вам необходимо из нужного вам отеля взять цифру из поля "ID" и вставить ее вместо цифры в условии H.ID = 1.
5. После этого выгрузка будет происходить только из гостиницы ID которой вы указали в запросе.
По тому же принципе в программе "XmlExport" настраивается выгрузка для второй гостиницы из БД, где будет просто указан другой ID отеля.
Интеграция Shelter 2 с релейным блоком управления светом
Для работы модуля требуется Shelter 2 и Shelter 2 Lite версии 2.12.119.2350 или новее.
Схема работы модуля :

Принцип работы :
При выполнении операции заезда/выезда/аннулирования/восстановления, Shelter отправляет команду библиотеке Shelter2gkHub.dll, с указанием
нужного реле, которая, в свою очередь обрабатывает ее и отправляет AbonHost, который отправляет ее контроллеру.
Установка модуля :
Прописываете в AbonHost.ini параметры подключения к контроллеру, где:
[Devices]
DeviceIP — IP-адрес контроллера
Далее, в каталоге shelter2gkhub настраиваете ShGkHubCtrl.ini :
[Server]
IP = 127.0.0.1
Port = 5561
Local = 0
Где IP-адрес и порт, параметры запущенного AbonHost, а :
[Light_0]
Id = 1
Hub = 32
Device = 1
Relay = 0
[Light_1]
Id = 2
Hub = 32
Device = 1
Relay = 1
Параметры реле на контроллере, где :
Далее, в карточке ресурса устанавливается чекбокс «Номер (Ресурс) оборудован устройством управления светом» и указываем ID реле
из соответствующей секции [Light_*].
После копируем файлы Shelter2gkHub.dll, Shelter2gkHub.ini, ShGkHubCtrl.ini в каталог с Shelter на рабочих местах и проверяем работу.
Корректность настройки, можно проверить утилитой TestDLL в каталоге shelter2gkhub, подложив под нее указанные выше файлы и запустив.
Далее, указываем ID устройства и нажимаем bLightOn (для включения реле) и bLightOff (для выключения).
Интеграция Shelter 2 с системой платного телевидения Hoteza
Для работы модуля требуется Shelter2 и Shelter Online Server версии 2.12.118.2325 или новее.
Схема работы модуля:

Принцип работы:
При операциях в Shelter 2:
Shelter 2 отправляет идентификатор (ID) поселения в SrvIPTV_XE, далее SrvIPTV_XE запрашивает информацию по данному поселению
через Shelter Online Server, формирует команду и отправляет ее в Hoteza.
Поддерживаемые функции:
При операциях Hoteza:
Hoteza отправляет идентификатор поселения (гостя) в SrvIPTV_XE, далее SrvIPTV_XE формирует команду и отправляет через Shelter Online Server,
полученные данные отправляются обратно в Hoteza.
Поддерживаемые функции:
Внешний вид модуля при просмотре счета гостя (фолио поселения):

Установка модуля:
Скачиваем дистрибутив SrvIPTV_XE по ссылке и распаковываем в любой каталог на сервере, где установлен Shelter 2.
Создаем ярлык SrvIPTV_XE_Service.exe и прописываем в нем ключ: /install

Запускаем ярлык от имени администратора. Получите информационное сообщение: "Service installed successfully".
В службах появится - UCS Shelter IPTV Service
Далее, настраиваем SrvIPTV_XE.ini
[Shelter_Intermediate] - параметры подключения к Shelter Online Server
TCPHost = 127.0.0.1
TCPPort = 7779
TCPTimeout = 5000
[Shelter] - порт, на который будет отправлять команды Shelter.
TCPHost = 0.0.0.0
TCPPort = 51000
Дополнительно требуется прописать этот порт в настройках Shelter.
Должен указываться внутренний адрес сервера сети

[IPTV] - порт, на который будет отправлять команды Hoteza
RTCPPort = 52000
Порядок запуска:
1. Shelter Online_Server
2. SrvIPTV_XE
3. Shelter 2
Возможная проблема с отображением кодировки в логах ShelterOnlineServer связана с тем, что лог-файл пишется с кодировкой Windows-1251, а в логе строка с UTF-8.
Пример :
name1="Сазонов " name2="Алексей " name="Сазонов Алексей"
При этом в логе SrvIPTV и в HOTEZA имя и фамилия гостя будет отображаться корректно.
Сканер паспортов Cognitive
1. Устанавливаем ScAPI;
2. На всю папку Сognitive даем полный доступ;
3. В Shelter заходим в «Настройки» - «Сервисы и оборудование» жмем «Добавить», выбираем драйвер «Сканер» - «Cognitive Scanify API» (рис. 1)

(рис. 1)
4. Далее нужно указать путь до библиотеки Cognitive (...\Cognitive\ScanifyAPI\Scanify\Bin32\) (рис.2)

(рис. 2)
5. На Windows 8.1 требуется так же прописать этот путь в Path в переменные среды.
Автоматизация прохода гостя в гостиницу после заселения
Гостя заселяют на ресепшене, выдают карту (прикрепляют идентификатор) по которой гость проходит на территорию гостиницы:

Рис.1 Прикрепление идентификатора к фолио гостя
При работе с некоторыми замковыми системами, данная карта может использоваться и как ключ от номера. В данном примере, это отдельный идентификатор для доступа в гостиницу. Турникет оборудован двумя считывателями и двумя контроллерами (одна пара на вход, одна на выход). Осуществить вход может только поселенный гость. Если гость уже прошел, то войти второй раз он не может. Это приравнивается к передаче карты другому гостю. Сначала нужно выйти. Осуществлять вход/выход гость вправе любое кол-во раз на протяжении всего проживания. Если наступило время выезда, но из Shelter гость еще не выселен, то гость может выйти, а на вход турникет его уже не пропустит. Требуется продлить период проживания (допустим на 1 час).
Если гость не может войти, то он подходит к администратору. Администратор находит гостя в системе Shelter, заходит на его фолио открывает отчет "Отчет по проходам" (см. Рис.2). В данном отчете отображаются все проходы, включая неудачные с причиной отказа. Данный отчет устанавливается отдельно. Печатная форма приложена к статье. Чтобы гость мог самостоятельно проверить почему турникет его не пускает, можно установить модуль "Инфоплазма" (требуется доработка внешнего вида под требования Заказчика).

Рис.2 отчет "Отчет по проходам"
Протестирована работа в следующих случаях:
- Shelter 2.12.127.2750 (Шелтер-полная версия, проект 3, модули 1, 2, 3);
- Турникеты (Триподы, см. http://support.ucs.ru/ru/node/8920);
- Контроллеры UCS (http://support.ucs.ru/ru/node/8742);
- Считыватели IronLogic Matrix III RD-ALL (для Турникетов), IronLogic Z-2 USB (Рецепция).
1. Добавляем тип ресурса на вкладке "Справочники"-"Типы ресурсов":

Рис.3 Добавление типа ресурса
2. Добавляем ресурс на вкладке "Справочники"-"Ресурсы":

Рис.4 Добавление ресурса
Смотрим статью http://support.ucs.ru/ru/node/8737
В интерфейсе модуля GkHostConnect необходимо указать следующие параметры для каждого из устройств контроля доступа:

Рис.5 Настройки в модуле управления турникетами
После применения скрипта (XX_ACCESS_SH2.sql) необходимо установить параметры в модуле GkHostConnect секция Действия и проверки по SQL-запросам:
Запрос для проверки доступа:
select * from XX_CHECK_A_FOR_SH2(:par)
[general]
usemask=1
TrackResultLog=
[mask]
card_mif=ifare*
card_em =arine*
[cards.card_em]
ExcludedPrefix=arine[
code=200
CardDecodeType = MASK
mask=****dddddddddd
[cards.card_mif]
excludedprefix=ifare[
CardDecodeType=MASK
mask=hhhhhhhh
code=200Содержимое tcpcardreader.ini:
[application]
AutoStart = 1
AutoHide = 1
[TCP]
PORT=7760
IP=0.0.0.0
[READER1]
COMPORT=5
COMPORTPARAMS=baud=9600 data=8 parity=N stop=1
;Параметр Prefix задаёт строку, которая передаётся клиентам перед первым прочтенным символом
Prefix=;
;Параметр Postfix задаёт строку, которая передаётся клиентам после последнего прочтенного символа
Postfix=?
;Использовать decodecards.dll
useDecodeCards=1
StartTermChars=M
FinishTermChars=?#13;#10;#0;
;Файл логирования треков
TrackLogFile=
ConvertTrackLog=0
IncludeTypeStartTermChar=0
IncludeStartTermChar=0
NeedCheckAndReopenCom=1
[log]
level=30
debuglevel=30
showlog=1| Вложение | Размер |
|---|---|
| xx_access_sh2.zip | 1.37 КБ |
| login_report.zip | 3.48 КБ |
Translater1C
Программа загрузки платежных операций в Shelter2.

Рис. №1. Общий вид Translater1C
Рассмотрим на примере банк клиента 1С.
Скачать необходимую сборку можно тут
Пример настройки Translater1C.ini
DBName = 127.0.0.1/3080:D:\Base\SHELTER.FDB - Путь к БД Shelter
SaveToLog = 1 - Сохранять лог или нет (1 - да, 0 - нет)
TrSourceDir = D:\SHELTER\Translater1C\source\ - Путь к папке, где искать файлы
TrTargerDir = D:\SHELTER\Translater1C\Target\ - Папка, в которую складываются обработанные файлы
TrErrorDir = D:\SHELTER\Translater1C\error\ - Папка, в которую складываются ошибочно обработанные файлы
ScanInterval = 5000 - Интервал сканирования (в милисекундах)
WhereSeek = НазначениеПлатежа - Строка в файле, в которой содержится необходимая для Shelter информация
WhatSeek = BR - Подстрока, которую искать в строке WhereSeek. После «BR» символы являются номером счета.
BeginOfBlock = СекцияДокумент= - Часть строки, определяющая начало блока
EndOfBlock = КонецДокумента - Строка, определяющая конец блока
OperCode = НАЛ - Код платежа, который регистрирует на фолио
AutoStart = 1 - Начало обработки документов при запуске программы: (1 – да, 0 – нет)
Схема работы
В программе Shelter выставляются счета на оплату по безналичному расчету. Номер счета формируется следующим образом:
<Номер брони>BR<номер счета>
После оплаты данных счетов, средства в бухгалтерию гостиницы попадают через систему Клиент Банка 1С. Из данной системы нужно подготовить
файл экспорта данных.
Пример данного фала 20120125132950.txt
Программа Translater1C обрабатывает все файлы, находящиеся в директории TrSourceDir.
Обработка файла производиться по блочно. Начало блока указывает параметр BeginOfBlock. Конец блока параметр EndOfBlock. С начала блока до его конца в файле ищется строка из параметра WhereSeek.
Далее в этой строке ищется позиция параметра WhatSeek. Далее набор цифр после параметра WhatSeek является «номером счета».
Далее по номеру счета ищется «номер брони» и на фолио начисляется сумма денежных средств указанные после слова «Сумма»
Описание схемы работы Shelter
1) Регистрируется бронь.
2) Производится выставление счета.
3) Производится отправка клиенту счета.
4) Клиент оплачивает счет и в банк клиент 1С приходят средства.
5) Приложение 1CClientBankExchange обрабатывает данные и формирует файлы, представленные в примере 20120125132950.txt
6) Программа обрабатывает файл и выдает следующий результат. (см. Рис. №2)

Рис. № 2 Результат работы программы Translater1С
7) Если после зайти на фолио гостя, то там будет указан платеж указанный в файле. (Рис. № 3)

Рис. № 3 Вид фолио брони
Интеграция Shelter 2 с системой платного телевидения NetUp
Для работы модуля требуется Shelter2 и Shelter Online Server версии 2.12.118.2325 или новее, а так же версия SrvIPTV_XE_Service 1.0.0.9
Схема работы модуля:

Принцип работы:
При операциях в Shelter 2:
Shelter 2 отправляет идентификатор (ID) поселения в SrvIPTV_XE_Service, далее SrvIPTV_XE_Service запрашивает информацию по данному поселению
через Shelter Online Server, формирует команду и отправляет ее в NetUp.
Поддерживаемые функции:
При операциях NetUp:
NetUp отправляет идентификатор поселения (гостя) в SrvIPTV_XE, далее SrvIPTV_XE формирует команду и отправляет через Shelter Online Server,
полученные данные отправляются обратно в NetUp.
Поддерживаемые функции:
Установка модуля:
Скачиваем дистрибутив SrvIPTV_XE_Service по ссылке и распаковываем в любой каталог на сервере, где установлен Shelter 2.
Для передачи флага FD и его значения, необходимо, чтобы рядом с SrvIPTV_XE_Service находился SQL_GetFolio.sql, который можно скачать по ссылке выше.
В SQL_GetFolio.sql находится запрос, который возвращает список неоплаченных услуг.
Создаем ярлык SrvIPTV_XE_Service.exe и прописываем в нем ключ: /install

Запускаем ярлык от имени администратора. Получите информационное сообщение: "Service installed successfully".
В службах появится - UCS Shelter IPTV Service
Далее, настраиваем SrvIPTV_XE.ini
[Shelter_Intermediate] - параметры подключения к Shelter Online Server
TCPHost = 127.0.0.1
TCPPort = 7779
TCPTimeout = 5000
[Shelter] - порт, на который будет отправлять команды Shelter.
TCPHost = 0.0.0.0
TCPPort = 51000
Дополнительно требуется прописать этот порт в настройках Shelter.
Должен указываться внутренний адрес сервера сети

[IPTV] - порт, на который будет отправлять команды NetUp
TCPPort = 52000
Порядок запуска:
1. Shelter Online_Server
2. SrvIPTV_XE
3. Shelter 2
Возможная проблема с отображением кодировки в логах ShelterOnlineServer связана с тем, что лог-файл пишется с кодировкой Windows-1251, а в логе строка с UTF-8.
Пример :
name1="Сазонов " name2="Алексей " name="Сазонов Алексей"
При этом в логе SrvIPTV и в NetUp имя и фамилия гостя будет отображаться корректно.
Модуль можно скачать тут
Порядок установки модуля:
1. Выполняем скрипты из архива exportdata_1_7_0_1.rar на базе данных Shelter в следующем порядке:
2. Создаем папку ImportToSH4.
3. Копируем все содержимое папки с ImportRK.exe и переносим в созданную папку ImportToSH4.
4. SHTR.dll и Shelter.ini из архива exportdata_1_7_0_1.rar копируем с заменой в новую папку ImportToSH4 с заменной.
!!!ВАЖНО! Обязательно заменять вышеуказанные файлы в новой созданной папке с ImportRK.exe!
5. ExportData.exe и ExportData.ini переносим в папку ImportToSH4.
6. В ExportData.ini указываем путь до БД Shelter.
7. Открываем ExportData.exe. (Рис. 1)

(Рис. 1)
Для того, чтобы войти в ExportData нужно, чтобы в Shelter был пользователь с правами «R» и цифровым паролем
или завести такого, в случае его отсутствия.
8. Добавляем условие выгрузки (Рис. 2)

(Рис. 2)

(Рис. 3)
Описание полей
|
Код |
Уникальный код для данного условия выгрузки. В SH4 не передается. |
| Наименование | Наименование товарной группы в справочнике товаров SH4. Данная товарная группа будет автоматически добавлена в группу «Меню ресторана». (Рис 4). Будет создано «Место реализации» с таким названием. См. рис 5 |
| Место реализации | Код места реализации См. рис 5 |
| Префикс для элементов | Префикс для кодов товаров. См.рис 6 |
| Префикс | Префикс группы товаров см.рис 6 |
| Внешний ID | Номер группы товаров. Объединение Префикса и Внешнего ID даст код группы. ВНИМАНИЕ! Важно чтобы данный ID не пересекался с другими Внешними ID. |
| Тип экспорта | Возможны 3 варианта: «Услуги», «Номерной фонд», «Номерной фонд и корпуса» |
| Доп. опции экспорта | Задает аналитику выгрузки. Предопределенные варианты. |
| Включен | Если данный флаг установлен, то условие выгрузки активно |

(Рис.4)

(Рис. 5)

(Рис. 6)
Происходит выгрузка услуг оказанных в данном периоде. Используется смена начисления услуги. При настройке важно учитывать,
что Внешний ID не должен пересекаться с Внешним ID у групп услуг.
На рис.7 максимальный внешний ID у групп выгружаемых услуг 900, а Внешний ID - 1000.
Для типа экспорта «Услуги» дополнительные опции недоступны.

(Рис. 7)
После экспорта данных в SH4, создана группа верхнего уровня «Реализация услуг» в которой дерево товаров такой же структуры,
как и в Shelter. (Рис.8)
Если в данную смену были реализованы отмеченные услуги, то в SH4 будет сформирован документ расхода.(рис.9)

(Рис. 8)

(Рис. 9)
Происходит выгрузка выездов из номеров. Данные типы экспорта нужны, например, для списания хозяйственных единиц на уборку номера.
Если делать выгрузку без доп. опций, то каждый выезд из номера дает кол-во «единица», при этом не важно сколько гостей проживало в номере.
Если включена доп. опция «Учитывать гостей в заезде». Если она включена, то будет анализироваться кол-во уникальных гостей, проживавших
в этом номере. Уникальными считаются гости, на которого заведена регистрационная карта гостя. См. рис 10. При выселении данной заявки в выгрузку
попадет кол-во 2. Доп. место учитываться не будет.

(Рис. 10)
Например, если мы хотим выгружать выезд из номеров только первого корпуса, то нужно настроить условие выгрузки, аналогично тому,
как показано на рис.11.

(Рис. 11)
После успешного экспорта данных в SH4 появится товарная группа, список товаров и документы расхода. См. рис.12

(Рис. 12)
Если вы столкнулись с проблемой, что при входе в ExportData у вас не отображаются иконки, вам нужно сделать следующее:
1. Скачать архив skins.rar с FTP
2. Папку skins из архива помещаем в любое удобное место.
3. Файл ShelterIB.ini необходимо поместить по пути C:\Windows
4. В ShelterIB.ini нужно прописать путь до файла skins.ini, который распологается в ранее разорхивированной папке skins. (Рис.13)

(Рис. 13)
После проделанных настроек иконки в ExportData должны отобразиться.
Для выгрузки данных из Shelter в StoreHouse5 используются утилиты ExportData (из поставки ПО "Абонемент") и QUSH (SH5).
Для работы с QUSH, на базе Shelter необходимо применить скрипт export_to_storehouse5.sql из поставки утилиты ExportData.
Данный функционал тестировался на версиях ПО "Shelter" 2.12.125.2480 и ExportData 1.9.0.2.
Утилиту ExportData можно найти в поставке Абонемент в папке FullversionVerxxx\util\ExportData\
В файле ExportData.ini указать путь БД Shelter.
В программе ExportData.exe добавляются условия выгрузки. См. рис.1.
|
Код |
уникальный код для данного условия выгрузки. |
|
Наименование |
Наименование товарной группы в справочнике товаров SH5 |
|
Место реализации |
Наименование места реализации См. рис 3 |
|
Префикс для элементов |
Для SH5 не актуально |
|
Префикс |
Для SH5 не актуально |
|
Внешний ID |
Для SH5 не актуально |
|
Тип экспорта |
«Услуги», «Номерной фонд» |
|
Доп. опции экспорта |
Задает аналитику выгрузки. Предопределенные варианты. |
|
Включен |
Если данный флаг установлен, то условие выгрузки активно. |
| Выгружать место реализации как группу услуг | Для SH5 данный флаг должен быть снят. |
|
Рис.1 |
|
|
Рис.3 |
Рис.4 |
Происходит выгрузка услуг оказанных в данном периоде. Используется смена начисления услуги.
В данной интеграции связь сущностей ПО "Shelter" и ПО SH5 происходит по уникальному идентификатору - guid.
Для типа экспорта «Услуги» дополнительные опции недоступны.
После экспорта данных в SH5, номенклатура и группы услуг ПО Shelter будут ипортированы в SH5 (рис.6.), корневую группу товаров необходимо выбрать в настройках модуля QUSH на вкладке Справочники. (Рис.7.)
Если в данную смену были реализованы отмеченные услуги, то в SH5 будут сформированы заявки, по которым можно создать накладные.
|
Рис.6 |
Рис.7 |
|
Рис.8 |
|
|
Рис.9 |
Рис.10 |
Происходит выгрузка выездов из номеров. Данные типы экспорта нужны, например, для списания хозяйственных единиц на уборку номера.
Если делать выгрузку без доп. опций, то каждый выезд из номера дает кол-во «единица», при этом не важно сколько гостей проживало в номере.
Для типа экспорта «Услуги» дополнительные опции недоступны.
После экспорта данных в SH5, номенклатура и группы услуг ПО Shelter будут ипортированы в SH5 (рис.11), корневую группу товаров необходимо выбрать в настройках модуля QUSH на вкладке Справочники. (Рис.12)
|
Рис.11 |
Рис.12 |
В ПО QUSH необходимо создать связку с Shelter (файл->Связки с "Абонемент"->правая кнопка мыши->создать, На момент написания статьи пункт "Связки с Shelter" отсутствовует).
В настройках необходимо выбрать товарную группу на вкладке "Справочники" и настроить связь с БД SH5 и БД Shelter (рис.13). Прим.: Для подключения QUSH к БД ПО Shelter необходим провайдер LCPI OLE DB Provider for InterBase [v3] (можно скачать в интернете или взять на нашем ftp в папке /rk7/INSTALL/OTHER/IBProvider/).
|
Рис.13 |
Если вы столкнулись с проблемой, что при входе в ExportData у вас не отображаются иконки, вам нужно сделать следующее:
1. Скачать архив skins.rar с FTP
2. Папку skins из архива помещаем в любое удобное место.
3. Файл ShelterIB.ini необходимо поместить по пути C:\Windows
4. В ShelterIB.ini нужно прописать путь до файла skins.ini, который распологается в ранее разорхивированной папкеskins. (Рис.14)

Рис. 14
После проделанных настроек иконки в ExportData должны отобразиться.
Модуль CSV Импорт
Данная утилита предназначена для парсинга *.csv файлов со списком гостей, выгруженным из другой гостиничной системы, для последующей загрузки в базу данных Shelter2.
Данный модуль не лицензируется, предоставляется на бесплатной основе.
Скачать модуль можно тут.
В файле CSVParser.xml указать путь до БД Shelter.
Рабочее окно программы :

ВНИМАНИЕ!!! Сотрудники комании UCS не занимаются выгрузкой списка гостей из других гостиничных систем. Так же, рекомендуем все последующие действия вначале выполнять на тестовой БД Shelter2.
Структура выгруженного файла должна быть следующего формата :
"Иванов";"Иван";"Иванович";"Иванов Иван Иванович";"7374";"178910";"УВД Заволжского р-на";"г.Ульяновск";" 702-013";"Россия";"testivanov@yandex.ru";"7859125"
Разделитель - ;
Формат даты/времени - числовой
Содержимое полей должно быть обернуто в апострофы (")
Далее, в выгруженном файле, в самой первой строке, мы "сопоставляем" значения с полями в БД Shelter (для сопоставления рекомендую использовать Notepad++):
NAME;NAME1;NAME2;FULLNAME;DOC_SERIES;NOGUEST;NOCONTENT;BIRTH_LOCALITY;DOC_CODEDEPAT;;EMAIL;PHONES
Где :
NAME - фамилия гостя
NAME1 - имя гостя
NAME2 - отчество гостя
FULLNAME - ФИО гостя
DOC_SERIES - серия паспорта
NOGUEST - номер паспорта
NOCONTENT - кем выдан
BIRTH_LOCALITY - город рождения
DOC_CODEPAT - код подразделения
EMAIL - почта гостя
PHONES - номер телефона гостя
Если в выгруженном файле присутсвутют поля, которые в Shelter не имеют аналогов, то их можно пропустить, указав над соответствующим полем разделитель - ;
После соответствующих настроек, *.csv файл выглядит так :






Руководство пользователя
по работе с обработкой переноса данных из Shelter в 1С:Бухгалтерия (редакции 2.0) 1С:Предприятия 8.2, 1С:Бухгалтерия (редакции 3.0) 1С:Предприятия 8.2 (8.3) и в 1С:Бухгалтерия (редакции 4.5) 1С:Предприятия 7.7
Дистрибутив и необходимые обработки находятся тут
ВНИМАНИЕ!!! При работе с ФФД 1.05, при проведении полного расчета после принятий платежей с ПРЕДОПЛАТА/ПРЕДОПЛАТА 100% и зачета аванса (предварительная оплата(аванс)) после принятия платежа с признаком АВАНС, в 1С информация по этим признакам способа расчета передаваться не будет, так как данные признаки способа расчета не являются операцией приема денежных средств от клиента.
Описание программного комплекса.
Программа предназначена для загрузки данных из Shelter в 1С:Бухгалтерию (редакции 3.0) 1С:Предприятия 8.2(8.3), 1С:Бухгалтерию (редакции 2.0) 1С:Предприятия 8. (Важно! Если 1.6, то обновить до 2.0) и в 1С:Бухгалтерию (редакции 4.5) 1С:Предприятия 7.7. Программа загружает все наличные и безналичные платежи и реализацию услуг. Все типы платежей и реализации услуг переносятся опционально. Что позволяет использовать программу совместно с клиент-банком и другими обработками для 1С:Предприятия. Программа является обработкой, написанной на языке «1С» с открытым исходным кодом, что позволяет пользователю самостоятельно вносить изменения в порядок загрузки данных.
Данные формируются следующим образом: все оплаты выгружаются день в день. Услуги проживающих гостей - только в день выезда гостя. Если услуга была оказана на фолио, до момента размещения в номер (фолио открыто по брони), то эти услуги выгрузятся в день их реализации, т.е. днем, когда они были начислены. После выезда гостя из номера, эти услуги выгружаться не будут. Если услуга(оплата) находится на фолио организации или группы от юридического лица, то она принадлежит юр. лицу. Фолио группы создается на организацию плательщика, установленного в карточке брони. Если услуга(оплата) находится на фолио заезда, то она принадлежит частному лицу, не важно установлена ли в карточке поселения организация или нет. Важно чтобы после выгруженных данных в Shelter не проводились скидки задним числом и не совершались трансферы. Т.е. до момента выгрузки все трансферы и скидки были сделаны.
Описание поставки программного комплекса.
Установочный диск (архив):
Firebird_ODBC_2.0.0.148_win32.exe — ODBC драйвер для FireBird
GDS32.DLL – клиентская библиотека FireBird.
UCSimportFromShelterTo1C8_BUX_3_0_709.epf – Обработка 1С:Предприятия 8.2 (8.3) Конфигурация Бухгалтерия предприятия, редакция 3.0. Работает с версиями Shelter 709 и выше, Абонемент 68.
UCSimportFromShelterTo1C8_BUX_3_0_709_ИзФайла.epf – Обработка 1С:Предприятия 8.2 (8.3) Конфигурация Бухгалтерия предприятия, редакция 3.0. Работает с версиями Shelter 709 и выше, Абонемент 68.
UCSimportFromShelterTo1C8_BUX_3_0_709_ВыборОтеля.epf – Обработка 1С:Предприятия 8.2 (8.3) Конфигурация Бухгалтерия предприятия, редакция 3.0. Работает с версиями Shelter 709 и выше, Абонемент 68.
UCSimportFromShelterTo1C8_2_BUX_709.epf – Обработка 1С:Предприятия 8.2 Конфигурация Бухгалтерия предприятия, редакция 2.0. Работает с версиями Shelter 709 и выше, Абонемент 68.
UCSimportFromShelterTo1C8_2_BUX_709_ЧастноеЛицо.epf - Обработка 1С:Предприятия 8.2 Конфигурация Бухгалтерия предприятия, редакция 2.0. Все контрагенты — частные лица заменены одним контрагентом Частное Лицо. Работает с версиями Shelter 709 и выше, Абонемент 68.
UCSimportFromShelterTo1C8_2_BUX_709_Загрузка_ИЗ_Файла.epf - Обработка 1С:Предприятия 8.2 Конфигурация Бухгалтерия предприятия, редакция 2.0. Данные при выгрузке в 1С берутся не из базы Shelter непосредственно, а из файлов, созданных в базе Shelter.
UCSimportFromShelterTo1C8_2_BUX_709_ВыборОтеля.epf – Обработка 1С:Предприятия 8.2 Конфигурация Бухгалтерия предприятия, редакция 2.0. Работает с версиями Shelter 709 и выше, Абонемент 68.
UCSimportFromShelterTo1C8_BUX.epf - Обработка 1С:Предприятия 8. Конфигурация Бухгалтерия предприятия, редакция 2.0. Работает с версиями Shelter ниже 709.
UCSimportFromShelterTo1C8_BUX_Казахстан.epf - Обработка 1С:Предприятия 8.2 Конфигурация Бухгалтерский учет для Казахстана, редакция 2.5. Работает с версиями Shelter ниже 709.
UCSimportfromShelterTo1C77_Complex_709.ert – Обработка 1С:Предприятия 7.7. Комплексная конфигурация ред. 4.5. Работает с версиями Shelter 709 и выше, Абонемент 68.
UCSimportfromShelterTo1C77_BUH_709.ert - Обработка 1С:Предприятия 7.7. Конфигурация Бухгалтерский учет, редакция 4.5. Работает с версиями Shelter 709 и выше, Абонемент 68.
UCSimportfromShelterTo1C77_USN_ЧастноеЛицо_709.ert - Обработка 1С:Предприятия 7.7. Конфигурация Упрощенная система налогообложения, ред. 1.3. Все контрагенты — частные лица заменены одним контрагентом Частное Лицо. Работает с версиями Shelter 709 и выше, Абонемент 68.
UCSimportfromShelterTo1C77_USN_709.ert - Обработка 1С:Предприятия 7.7. Конфигурация Упрощенная система налогообложения, ред. 1.3. Работает с версиями Shelter 709 и выше, Абонемент 68.
Описание установки программного комплекса.
Проверить наличие лицензии (проект 4, модуль 12)
Установить ODBC драйвер (Firebird_ODBC_2.0.0.148_win32.exe) для 32-битной ОС.
Либо установить драйвер (Firebird_ODBC_2.0.0.151_x64.exe) для 64-битной ОС.
Скопировать библиотеку GDS32.DLL в Windows\System32 (если ее там нет) для 32-битной ОС, либо в Windows\sysWOW64 и Windows\System32 для 64-битной ОС
ВАЖНО!!! Иногда бывают случаи, когда необходимо использовать модифицированную версию библиотеки gds32.dll - зависит от разрядности 1С. Скачать ее можно тут
ВАЖНО!!! На актуальной версии Shelter 2 можно использовать стаднартный сервер блокировок для подключения(UCS Shelter Lock Server). Убедиться, что в папке UDF на сервере Shelter присутствует sh2_udf.dll
Из 1С-Бухгалтерии v8.1 ред. 2.0 запустить UCSimportFromShelter.epf или из 1С-Бухгалтерии v7.7 ред. 4.5 запустить UCSimportFromShelter.ert.
Если используется v8.2, предварительно открыть обработку в конфигураторе для конвертации.
На странице настроек все выбрать и сохранить настройки. Далее сначала "Заполнить", потом "Загрузить" на каждой странице отдельно или "Загрузить все".
Проверить подключение можно следующим образом:
Если запустить ODBC из директории SYSTEM32, настроить по аналогии с рисунком 1 и нажать "Проверка соединения", то получим ошибку, что GDS32.dll не загружена. Также эта ошибка может возникать из-за версионности библиотеки (x32/x64).

Рис 1
Если запустить ODBC из директории SYSWOW64 и по аналогии настроить, то ошибок не будет и соединение с БД пройдет корректно

Рис 2.
Также неоходимо проверить корректность директории SYSWOW64 и SYSTEM32, т.к может быть установлено несколько ОС и библиотека скопирована в не тот экземпляр windows.
Описание настройки программного комплекса.
[LOCK.SERVER]
TCPHost: ip адрес или dns имя сервера блокировок.
TCPPort: tcp порт сервера блокировок.
Проверить настройки сервера блокировок можно кнопкой «Проверить».
DbName: ip адрес или dns имя сервера FireBird и путь к файлу БД.
Кнопка «Сформировать список отелей»: при её нажатии считывается информация из Абонемента(Shelter) по отелям и организациям-собственникам. Заполняются: поле списка «Наименование отеля», поле списка выгруженных значений «Наименование организации».
«Наименование отеля»: тот отель, по которому будут заполнены и загружены данные из Абонемента(Shelter).
«Наименование организации: та организация, по которой будут заполнены и загружены данные из Абонемента(Shelter).
Организация: Организация в 1С:Предприятие для создания документов.
Группа контрагентов: Группа контрагентов в 1С:Предприятие. В эту группу будут заноситься новые контрагенты из Shelter с указанием их адреса и паспортных данных (если клиент - физ.лицо).
Группа услуг: группа справочника номенклатура в 1С:Предприятие. В эту группу будут заноситься новые услуги из Shelter, т.е номенклатура с признаком услуг в Shelter.
Группа товаров: группа справочника номенклатура в 1С:Предприятие. В эту группу будет заноситься новый товар из Shelter, т.е номенклатура с признаком товара в Shelter.
Склад: Место Хранения (Склад) в 1С:Предприятие. Для подстановки в документы. Необязательный параметр, так как номенклатура Shelter — суть услуги.
Банковский счет (кк): Банковский счет в 1С:Предприятие. Для отражения операций оплаты по кредитным картам.
Платежные карты
Банковский счет (бп): Банковский счет в 1С:Предприятие. Для отражения операций оплаты банковскими переводами.
Флажок «Загружать реализации услуг». Указывает, загружать ли документы «Реализация товаров и услуг». При загрузке документов реализации если сумма указана отрицательная, то вместо документа "Реализация товаров и услуг" формируется документ "Возврат товаров от покупателя". Этот документ только записывается (не проводится), т.к. в колонку "Номенклатура" из Shelter может переноситься не только товар, но и услуга. Поэтому (на усмотрение бухгалтера) можно сделать изменения в конфигурации, которые позволят провести этот документ, или перевыбрать услугу на товар и тоже провести.
Флажок "Группировка услуг по контрагенту". При включенном флаге суммируются по контрагентам количество и суммы услуг за день. Т.е., если по контрагенту за день введена какая-либо услуга и она же прошла как возврат(отсторнирована) на эту же сумму, то при включении этого флажка не будут формироваться документы "Реализация товаров и услуг" и "Возврат товаров от покупателя". При этой группировке не учитываются даты начала и окончания оказания услуг.
Флажок «Загружать оплаты наличными». Указывает, загружать ли документы «Приходный кассовый ордер» и «Расходный кассовый ордер». Если сумма указана отрицательная, то вместо документа "Приходный кассовый ордер" формируется документ "Расходный кассовый ордер".
Флажок «Загружать оплаты кредитными картами (кк)». Указывает, загружать ли оплаты кредитными картами.
Вид загрузки КК: «Оплата платёжной картой» либо «Операция БУ». Если выбрать значение «Оплата платёжной картой», при загрузке будут сформированы документы «Оплата платёжной картой». Если выбрать значение «Операции БУ» будут формироваться два вида документа «Операция БУ» (Проводки: Дт 57.03 Кт 62.02) и «Поступление на расчетный счет» (Проводки: Дт 51 Кт 57.03).
Флажок «Загружать оплаты банковским переводом (бп)». Указывает, загружать ли документы «Поступление на расчетный счет в банке».
Флажок «Выгрузка услуг в последний день месяца». Указывает, выгружаются ли услуги в последний день месяца независимо от того, выехал ли гость.
Флажок «Выгрузка на дату окончания брони». Выгрузка данных производится на дату окончания брони, независимо от фактической даты выезда.
Флажок «Формировать счета - фактуры». Указывает, формировать ли на основании созданного проведенного документа "Реализация товаров и услуг" счет-фактуру выданную. По кнопке "Печать методом подстановки" можно увидеть печатную форму счета-фактуры, сформированную методом "подстановки". Если в этой печатной форме в колонке оказанных услуг необходимо вместе с наименованием услуги указывать даты заезда-выезда гостя, то в списке кодов, вызванных по кнопке "Коды услуг", необходимо отметить эти коды. Коды совпадают с кодами услуг из Shelter.
Флажок «Загружать счета». Показывать/Загружать ли выставленные счета на оплату покупателю. Счет выставляется только юридическому лицу.
Флажок «Частное лицо»(Только для Бухгалтерия 3.0). Указывает, формировать ли все документы частных лиц на одного контрагента «Частное лицо».

Рис.1
P.S.: Образцы всех настроек показаны на рис.1

Рис.2
Загрузка данных.
После того, как все настройки сделаны. Нужно их сохранить, нажав кнопку «Сохранить параметры» .
Потом нажать кнопку «Заполнить». Просмотреть и отметить нужные документы. Нажать либо кнопку «Загрузить» на каждой нужной закладке либо «Загрузить все». См. Рис.2

Рис.3
На командной панели имеются 4 кнопки:
Кнопка «Коды услуг», по которой заносятся в список код услуги из Shelter. При печати счет - фактуры методом «подстановки» эти услуги печатаются с датой проживания. См. Рис.3

Рис.4
Кнопка «Соответствие контрагентов 1С и Shelter» показывает наличие (выделено зеленым цветом) или отсутствие (показано в таблице «Соответствие не найдено»)
контрагентов, которые будут участвовать в создании документов. Если нажать кнопку «Заполнить», то для всех строк списка внизу формы будут добавлены новые элементы в справочник Контрагенты в группу контрагентов, которая указана в настройках. См. Рис.4
Кнопка «Соответствие номенклатуры 1С и Shelter» показывает наличие (выделено зеленым цветом) или отсутствие (показано в таблице «Соответствие не найдено») номенклатуры, которые будут участвовать в создании документов. Если нажать кнопку «Заполнить», то для всех строк списка внизу формы будут добавлены новые элементы в справочник Номенклатура в группу услуг либо группу товаров, указанных в настройках в зависимости от вида номенклатуры.См. Рис.5

См. Рис.5
Кнопка «Печать Запроса». По ней в удобной форме можно посмотреть результат запроса из Shelter (Абонемента). Данная печатная форма используется в случайх, когда необходимо выяснить какие-либо несоответствия данных , полученных из Shelter. Данные запроса могут группироваться различным способами для удобства чтения информации. При необходимости форму можно распечатать. Пример формы печати запроса см. на рис.6

Рис.6
Возможные ошибки при подключении к базе данных SHELTER( Абонемент) и методы их решения
function CHKLIC is not defined
module name or entrypoint could not be found»
Причина ошибки: в базе данных не найдена функция, отвечающая за нахождение лицензии выгрузки в 1С.Метод исправления ошибки: в папку UDF необходимо поместить файл sh_licudf.dll . И кроме того необходимо выполнить скрипт script_1c.sql.
Если НаборЗаписей.RecordCount() <> 0
По причине: Произошла исключительная ситуация (ADODB.Recordset): Операция не допускается, если объект закрыт. В той же задаче сообщение об ошибке SQL error code = - 104. Причина ошибки: возможные ошибки в SQL запросе, в том числе использование некоторых функций. Например, использование функции Iif, с которой firebird 1.5 ещё не знаком.
По причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Driver): [ODBC Firebird Driver] File Database is not found. Причина ошибки : некорректно заполнено поле «DbName». Пример правильного заполнения поля указан ниже: 127.0.0.1/3080:C:\КакаяТоПапка\SHELTER.FDB
По причине: Произошла исключительная ситуация: SQLCODE = - 902: I/O error during «@1» operation for file «@2». Error while trying to open file. Причина ошибки: см.пункт 3
Не удалось подключиться к FireBird.
Причина ошибки : некорректно заполнено поле «DbName. См. п. 3
Причина ошибки : некорректная установка необходимых драйверов Firebird (для 32 либо 64-битной системы) .
Информация о выгрузке из Абонемент в 1С находится тут
Распознавание документов с помощью ПО и сканера документов Regula
Используется программа распознавания документов DocumentReader, разработанная компанией Regula (https://regulaforensics.com/) поставляемая со сканерами документов Regula. (Дополнительное лицензирование от Regula не требуется. Достаточно приобрести и подключить сканер)
Внимание!!! Для работы с модулем требуется версия Shelter не ниже 2.12.126.2480
Стоимость и условия приобретения
Установка и настройка программы DocumentReaderSDK
Достаточно скачать актуальную версию DocumentReaderSDK с сайта производителя и установить её. Или же установить версию, поставляемую в комплекте со сканером документов, если невозможно получить актуальную версию. (Тестирование производилось на версии SDK 4.12)
После установки требуется подключить сканер к ПК, дождаться установки драйверов на устройство, добавленных при установке SDK. (Тестирование производилось на считывателе документов «Регула» 7017, «Регула» 7027), виды протестированных документов: Паспорт РФ (с МЧЗ и без), Загранпаспорт РФ, Водительское удостоверение РФ, Паспорт Беларусь, Водительское удостоверение Беларусь, Паспорт Украина, Водительское Удостоверение Украина, Паспорт Казахстан, Паспорт США, Паспорт Латвия, Водительское удостоверение Латвия.
Теперь необходимо запустить программу Document Reader, проверить работоспособность сканера и модуля распознования, подобрать настройки сканирования для улучшения качества распознования. (Для значительного улучшения качества сканирования рекомендуется откалибровать сканер перед использованием)
После готовности настройте параметры сохранения результатов сканирования для обмена с Shelter, согласно прилагаемому примеру:
|
Рис. 1 Пример настроек Document Reader |
Pic. 2 Example for Results tab in Document Reader Options |
|
Рис. 3 Пример настроек Document Reader |
Pic. 4 Example for Results tab in Document Reader Options |
Настройка Shelter
Проверка проходила в Shelter ver. 2.12.126.2480.
Из папки «..\FullVersionVerXXX\Fullversion\_INTERFACE\HW\Scan\Regula\» в папку «Shelter» скопировать следующие файлы:
regula.js ScRegulaRecog.dll ScRegulaRecog.ini
Пример файла настроек ScRegulaRecog.ini:
[Main] ;Кодировка возвращаемой строки: 0-ANSI (по умолчанию) 1-UTF8 UseUtf8=0 ;Сообщение при сканировании ScanningStr = Приложите документ к сканеру... ;Скрипт, в котором реализована процедура запуск сканера. По умолчанию regula.js JSFile=regula.js ;Функция из JSFile, которая запускает сканирование. По умолчанию regulaReaderScan() EValCode=regulaReaderScan() ;Функция из JSFile, которая останавливает сканирование. По умолчанию stopFileFileCreate() StopCode=stopFileFileCreate() [LOCK.SERVER] TCPHost= TCPPort = AbonementOnly=0 [Localization] CurrentLanguage=default
Лицензирование
Модуль распознования защищён проектом 4, модулем 11 в ключе (аналогично системе распознавания Cognitive).
Работа в Shelter
Вы можете использовать сканер при добавлении клиента:

Важно!!!
Shelter использует APIi функции программы Document Reader SDK и за качество распознавания компания UCS ответственности не несет.
(Например, устройство на котором производилось тестирование (Регула 7017, Регула 7027 ) не имело лицензии на распознавание документов без Машиночитаемой зоны (МЧЗ). Исправлено тех. поддержкой Регула по нашему запросу.)
Актуальную сборку можно скачать на FTP
Классическая схема подключения АТС через COM-порт. АСТ настроена на передачу данных по протоколу RS232, подключена нульмодемным кабелем в COM-порт.
1. RS232Reader слушает COM порт и формирует файлы в директории WorkDir. WorkDir это папка которая может находиться на любом компьютере в сети.
Имя файла имеет вид типа 000012FA.$qi.
2. SPCServ забирает из WorkDir этот файл и анализирует парсером commonparser.dll (для настройки см. раздел Настройка Commonparser.ini), определяет
время звонка, телефонный номер по которому был произведен звонок, продолжительность. При определённых настройках программы файл уже может
содержать в себе стоимость и направление. В этом случае пункт 2.1 не выполняется, а в настройках SPCServ.ini за место PhoneCalc.dll
прописываем "-" без ковычек.
2.1. Срабатывает PhoneCalc.dll (для настройки см. раздел Настройка PhoneCalc.ini и PhoneTariff.ini), которая из базы ShelterPhone.fdb определяет
направление звонка и стоимость. PhoneCalc.dll подключается к серверу блокировок v1.4. Backup базы ShelterPhone.fdb сделан под FireBird 1.5,
можно не переводить базу под FireBird 2.5.
2.2. Затем, SCNAS.dll (для настройки см. раздел Настройка SCNAS.ini) передает информацию о звонке в NAS базу (база данных всех телефонных
звонков – копия пустой empty базы Shelter.fdb, любой версии). В этой базе храниться информация обо всех исходящих звонках.
При необходимости по информации в этой базе можно строить отчёты с использование программы shphone.exe.
2.3. Срабатывает ShelterConnect.dll (для настройки см. раздел Настройка ShelterConnect.ini) и информация о звонке поступает в базу данных
программы Shelter.

Данная схема является классической. Если АТС работает по TCP/IP, то используется программа TelnetLogger.exe
Программа PhoneTariff предназначена для настройки тарифов телефонных звонков по всему миру в разное время суток.
После копирования программы на диск необходимо сделать restore базы ShelterPhone.fbk. В ней хранится все информация о тарифах, зонах,
телефонные коды регионов и городов, информация о праздничных и выходных днях. Данные в базу можно заносить при помощи программы Transfer.exe*.
Загрузка осуществляется из DBF файла, следущего формата:

формат DBF файла из которого происходит выгрузка данных в ShelterPhone.fdb (Рис. 1)
В файле PhoneTariff.ini(для настройки см. раздел Настройка PhoneCalc.ini и PhoneTariff.ini) необходимо прописать путь к базе ShelterPhone.fdb
и запустить программу phonetariff.exe.

Вид программы PhoneTariff.exe (Рис. 2)
На рисунке 2 в окне 1 отображаются зоны, например, SNG – СНГ, AFRICA – Африка. Можно создавать свои зоны. В окне 2 для каждой зоны
формируется тариф. Окно 3 предназначено для присваивания телефонным кодам определенной зоны. Можно присвоить всему континенту одну зону,
а можно для каждого города разные зоны.
Все незаполненные промежутки времени в определении тарифов наполняются значениями. Если не заполнены временные промежутки в тарифе рабочего
или выходного дня, то они заполняются со стоимостью равной нулю.
Если в тарифе выходного дня нет ни одной записи, то тариф выходного дня заполняется всеми данными из тарифа рабочего дня. Если есть хотя бы одна
запись в в тарифе выходного дня, то стоимость не заполненных временных промежутков будет равна нулю.
Если существует необходимость звонки в определенные населенные пункты тарифицировать по особым ценам (например, они должны быть бесплатными),
то можно добавить зону, настроить её тарифный план и, затем, выбрать в карточке кода нужных населенных пунктов выбрать нужную зону.
У зоны есть два ключевых параметра: округление и чувствительность. Если продолжительность звонка меньше указанной чувствительности,
то данный звонок будет игнорироваться. (Например, звонки до 5 сек. бесплатно).
В России используется сокращенный набор телефонных номеров. Например, для звонка в московскую область можно использовать следующие варианты:

Соответственно для правильной тарификации звонков необходимо настроить префиксы. В программе PhoneTariff используются международная
система телефонных префиксов. Настройка префиксов осуществляется на соответствующей закладке. Например телефонный тарификатор установлен
в г.Кемерово, код города 3842, но при звонке по городу гости отеля из своего номера набирают просто шестизначный номер телефона, а для того чтобы
привести его к международной системе необходимо завести префикс «пусто» - подстановка «73842».
В программе PhoneTariff существует проверка расчета стоимости звонка. Для удобства можно ограничиться четырьмя зонами: 1 - по городу; 2 - по области;
3 - по стране; 4 - по остальному миру.
Данные настройки всегда согласовываются с заказчиком.
После каждого исходящего звонка сторонняя программа формирует в определенной папке (WORKDIR) текстовые файлы, например 000012FA.$qi, где:
Каждый такой файл содержит следующие данные:
| Название блока | Символы | Формат | Пример |
|---|---|---|---|
| Дата начала соединения | 1-10 | любой |
27042007 27/04/2007 2007-04-27 |
| Время начала соединения | 11-20 | любой |
13:29:56 13/29/56 132956 |
| Продолжительность соединения | 21-30 | Hh:mm:ss | 00:12:42 |
| Набранный номер | 31-70 | 83452288654 | |
| Признак исходящего звонка | 71-75 | символ |
О |
|
Внутренний номер телефона, с которого осуществлен звонок |
76-79 | 1812 | |
| Символы окончания строки и возврата коретки | 80-82 | данное поле не обязательно | 0D0A |
1. Скопировать на компьютер подключенный к АТС RS232Reader.exe и RS232Reader.ini;
2. Скопировать на любой компьютер находящийся в сети файлы SCPServ.exe, SCPServ.ini, ShelterConnect.ini, ShelterConnect.dll, SCNAS.ini, SCNAS.dll,
phonecalc.ini, phonecalc.dll, CommonParser.ini, CommonParser.dll, phonetariff.exe, phonetariff.ini, SHELTERPHONE.back;
3. Сделать Restore базы SHELTERPHONE.back и настроить файл phonetariff.ini;
4. В программе PhoneTariff настроить тарифы;
5. Настроить все оставшиеся ini файлы;
6. В настройках Shelter.exe в карточке номера комнаты указать внутренний телефонный номер;
7. После всех настроек на базе Shelter выполнить скрипт: execute procedure xx_fill_services (см. раздел Работа с IBExpert. Выполнение SQL скриптов).
Файл CommonParser.ini служит для настройки параметров CommonParser.dll. Данная DLL отвечает за разбор строки лога звонка.
Настройку CommonParser.ini рекомендуются выполнять в текстовом редакторе, используя шрифты, у которых длина всех символов одинаковая
(например «Terminal»).
Для получения лога звонка необходимо настроить программу RS232Reader, совершить звонок, после которого в папке WorkDir
(параметр из файла RS232Reader.ini) появится файл с расширением $qi. Содержимое этого файла переписываем в файл CommonParser.ini:

Затем нужно «наложить»на строку лога маску

Настройка преобразования даты звонка:
Соответственно DateAsDAte = 0 для того чтобы использовалось преобразование
Настройка преобразования времени звонка:
Продолжительность звонка:
Т.к. продолжительность соединения задается в «явном» виде, а не в частях суток, то CoefDuration = 0
На данном этапе можно не тарифицировать часть звонков. При этом информация о данных звонках не попадет ни в одну базу.
FilterExtn = * ; маска для исходящего номера. Если «звездочка», то тарифицировать звонки со всех номером. Если, например, FilterExtn = 1* ,
то будут тарифицироваться звонки, начинающиеся с единицы.
FilterDial = * ; маска для набранных номеров. Если «звездочка», то тарифицировать звонки на все набранные номера.
OutGoingText = O ; признак тарифицируемого звонка. Часто в специалисты не могу настроить АТС и она вы дает и входящие звонки.
Тогда данный признак помещается специальным символом. В нашем примере признаком тарифицируемого звонка является буква «O».
В маске сказали, что в этом будет тип звонка (сиввол Y). OutGoingText = O если в этом месте не O, то этот звонок тарифицироваться не будет.
Если OutGoingText = * , то все звонки считать тарифицируемыми.
Если АТС (или сторонняя программа тарификации) выдает в лог информацию о цене звонка, то используются параметры:
Лог файл может формироваться с переменным числом пробелов перед первым символом, для работы с такими АТС используется параметр:
Конечный вид CommonParser.ini будет следующий:

Файл SCNAS.ini содержит внутри следующую информацию:
[Database]
DBname = <path do NAS database>
Где:
Файл ShelterConnect.ini содержит внутри следующую информацию:
Где:
[Application]
Данная утилита используется в случае, если АТС работает не через COM-порт, а TCP/IP соединение.
[Net]
Host = 192.168.3.253 - адрес АТС
Port = 8800 - порт АТС
BoundPort = 0 - предпочитаемый порт, который выделит атс для соединения
ConnectionTimeout = 50 - Тайм аут подключения (сек.)
[Log]
WriteLog = 1
FileName = TelnetLogger.log
[Other]
PBXDir = c:\Temp
LastFileNumber =31
AutoStart = 1
AutoHide = 0
RestoreConnection = 1 - Автоматически пытаться востановить соединение
RestoreConnectionTimeOut = 5000 - Таймаут автоматического соединения (мск.)
FirstSymbolIsNum = 1 - Только строки, где первый символ число
AutoLogin=1 - автологин: 1 - передает логин/пароль из файла TelnetLogger.ini, 0 - будет ожидать ввода вручную
WordLogin=- - слово "Логин" (т.е. строка, которая будет искаться в приглашении "логин")
WordPassword=Enter Password: - слово "Password" (аналогично логину)
Login=smdr - логин АТС
Password=1234 - пароль АТС
Соответственно при варианте подключения АТС через TelnetLogger параметры запуска будут следующие: TelnetLogger.exe → SCPServ.exe
1. Выполнить скрипт TR_AU_ROOM_STATE :
2. В ShelterConnect.ini добавить секцию :
[TranslateRoomState]
999 = 1
888 = 0
Где 999 - номер телефона, который набирает горничная после уборки для смены статус номера на грязынй номер
888 - номер телефона, который набирает горничная после уборки номер для смены статуса номер на чистый номер
3. В CommonParser.ini добавить, в секцию [parser] добавить :
ROOMSTATUS = 888,999
ВНИМАНИЕ!!! В описанном случае, номера телефонов 888 и 999 являются примерами.
Модули Shelter 2 Full и Lite версии
| Наименование модуля | Lite | Полная версия |
|---|---|---|
|
Модуль «Телефонный тарификатор» |
+ | + |
|
Модуль «Интернет-бронирования» |
+ | + |
|
Модуль «Channel Manager» (GDS) |
+ | + |
|
Модуль «Менеджер мероприятий» |
- | + |
|
Модуль «Горничные» |
- | + |
|
Модуль «Медицина» |
- | + |
|
Модуль «Абонемент» |
+ | + |
|
Модуль «Банковский протокол» |
- | + |
|
Интерфейс «Замковая система» |
+ | + |
|
Модуль «Выгрузка в 1С» |
+ | + |
|
«ПДС» |
- | + |
|
Интерфейс «R-Keeper» |
+ только закрытие на номер |
+ |
|
E-Mail и SMS рассылка (GuestAnnouncer) |
+ | + |
|
Модуль «IPTV» (Hoteza) |
- | + |
|
Интерфейс связи с Cognitive «Сканер паспортов» |
- | + |
|
Модуль «Платежные системы» (Ассист, Робокасса, Резервмастер) |
- | + |
|
Модуль «Выгрузка в XML» (УФМС ПО Контур и Радиус) |
+ |
+ |
|
Модуль «Выгрузка в StoreHouse4» |
+ | + |
|
Интерфейс «Wi-Fi» |
+ | + |
| Модуль «Управления светом Light Control» | + | + |
Обновление Shelter 2 (глобальное)
Для обновления программного обеспечения Shelter 2 до актуальной версии, необходимо выполнить подготовительные действия на сервере :
1. В обязательном порядке выполнить резервное копирование рабочей базы данных, при помощи bat-файла backup.bat.
В названии файла резервной копии не должно присутствовать «breaked». Если в названии архива присутствует «breaked»,
то это может свидетельствовать о повреждении базы данных, либо некорректно выполнен backup.
ВНИМАНИЕ (!!!) Все действия, выполняемые с базой данных Shelter (backup/restore), должны производиться только от пользователя UCS в FireBird (не путать с пользователем ucs в Shelter)
ВНИМАНИЕ (!!!) Обновление должно выполняться "стандратным" методом (через глобальное/локальное обновление), не через IBExpert.
2. Создать папку в дистрибутиве Shelter, в которую скопировать созданный в п.1 backup базы данных, а так же все .dll и .exe до обновления (пример):

3. Создать папку в дистрибутиве Shelter, в которую будут скачиваться файлы для обновления с глобального сервера shelter2.ucs.ru
Для этой папки настроить права доступа.
4. Проверить доступность порта командой telnet
Сервер : shelter2.ucs.ru
Порт : 21
Если подключение успешно, то должно появиться следующее сообщение в командной строке :

Если подключиться не удалось, то необходимо проверить настройки антивируса/брандмауэра.
Так же, необходимо удалить «update.exe» и очистить папку, в которую ранее скачивались файлы для обновления, если на объекте уже выполнялось
обновление ранее.
5. Далее необходимо запустить Shelter и перейти во вкладку «Обновление» - «Глобальный» (служебный пароль для входа: ucs-shelter )перейти во вкладку «Сервер обновлений»
и в поле «Путь до сервера обновлений:» указать путь до папки, которую создавали в п.3 :

6. Убедиться, что чек-боксы установлены как на скриншоте выше.
7. Перед запуском обновления, необходимо всем пользователям осоединиться от базы данных (закрыть Shelter), а так же остановить
службы (OnlineServer, WuBookServer, TravellineServer и пр.)
8. Перейти во вкладку «Мониторинг транзакций», убедиться, что активных транзакций (подключений) нет.
Если кто-то из пользователей не вышел из Shelter, то в «Мониторинг транзакций», будет отображаться список подключенных клиентов :

9. Нажать кнопку «Проверить обновления» - происходит подключение к глобальному серверу обновлений shelter2.ucs.ru и скачивание
необходимых файлов в папку, которую указали в п.3
В первую очередь скачиваются «updateversions.ini» и «update_1.0.0.52.rar», после чего распаковывается и запускается файл «update.exe».
Если возникает ошибка «Не найден файл обновлений! (Больше файлов не осталось)» :

То необходимо выполнить запуск процедуры обновления повторно, начиная с п.5. Данная проблема решена в версии Shelter_2.12.120.2365
10. Далее скачиваются необходимые для обновления *.ini - файлы :

И открывается список доступных обновлений :

Необходимо отметить чек-боксами необходимые модули для обновления и нажать «Ок»
В соответствии с выбранными модулями для обновления происходит скачивание *.rar – файлов :

И последующее выполнение скрипта :

В момент выполнения скрипта ошибок быть не должно
Если происходит ошибка во время выполнения скрипта, то необходимо разбираться, в какой части запроса возвращается ошибка.
После успешного выполнения скрипта, происходит скачивание архива, содержащего отчеты :

После, появляется окно со списком отчетов :

Нажимаем «Ок»,происходит обновление отчетов:

После чего вновь появляется окно, с выбором модулей для обновлений :

Нажимаем «Ок», распаковываются и заменяются файлы :

Если файлы не заменились автоматически (возможно какой-либо процесс удерживает shelter.exe), то можно распаковать архив
shelter_2.12.120.2365 (пример) и заменить файлы вручную. Если какие-либо службы запускаются из отдельной папки,
то необходимо заменить все содержимое этих папок (shelter.exe, shelter.dll и пр.)
11. После обновления серверной части Shelter, необходимо запустить остановленные ранее службы.
Перед запуском службы ShelterOnlineServer не забывайте удалять «OnlineServer.xml», после запуска создается актуальный файл.
Не стоит забывать, что если в старом файле «OnlineServer.xml» у Вас значение autostart ="0", то и в новом файле необходимо изменить значение.
Обновление Shelter 2 (локальное)
Для удобства обновления клиентских машин, на которых установлен Shelter 2, можно «расшарить» (дать общий доступ) папку на сервере,
в которую скачивались файлы для обновлений.
1. Перед локальным обновлением рабочих мест, рекомендуется скопировать текущий дистрибутив Shelter 2 в отдельную папку.
2. Запустить Shelter 2, перейти во вкладку «Сервер обновлений», и в поле «Путь до сервера обновлений:»
указать путь до «расшаренной» папки на сервере, которую создавали в п.3, а так же настроить по аналогии со скриншотом :

3. Закрыть окно «Обновление системы», в меню аутентификации пользователя нажать «Обновление», выбрать «Локально».
4. В открывшемся окне выбрать необходимые модули и нажать «Ок». Файлы скачаются и заменятся автоматически.
5. Если, по какой-то причине, локально обновиться не получается, то можно скопировать из дистрибутив с сервера и заменить вручную на рабочих местах.
Переход с Shelter1 на Shelter2
Структура баз данных и принцип работы многих блоков ПО Shelter1 и Shelter2 сильно отличается друг от друга. Появились новые справочники, сущности и механизмы работы.
Возможно 2 пути перехода:
1. Обновление существующей версии Shelter1 на Shelter2 путем выполнения скриптов и изменения структуры базы данных. Все данные остаются.
2. Установка пустой чистой базы. Новая настройка и заполнение справочников.
Возможен частичный перенос данных:
- Список гостей
- Список организаций
- Список броней
Далее по порядку о плюсах и минусах каждого метода.
1. Обновление Shelter1 до версии Shelter2 – трудоемкий процесс, занимающий длительное время. И чем больше данных в базе, чем больше истории,
тем дольше и сложнее обновлять.
Зачастую приводит к полному переходу на ручное выполнение скриптов. Часто встречаются кастомизированные базы данных, которые приходится анализировать через отдел
разработки и создание ремонтирующих скриптов.
На практике имели место случаи, когда крупные объекты на большой базе переводились более чем 12 часов, при условии, что заранее все подготовлено и проверено.
При таком методе обновления с Shelter1 на Shelter2 в базе остается весь «мусор»: не нужные услуги, тарифы, сезоны, не правильно оформленные гости и д.р. Многие справочники после обновления приходится переделывать (например, тарифы), а какие-то заводить заново, т.к. появились новые сущности.
В результате в базе получаются обновленные старые данные от Shelter1 и новые данные от Shelter2. При разработке отчетов и прочих доработок всегда ориентируются на текущие актуальные данные Shelter2, в следствие чего появляются ошибки, когда в выборку попадают старые данные. Бывали случаи полной блокировки работоспособности системы. Некоторые крупные объекты, перейдя на Shelter2 методом прямого обновления, после работы в течение нескольких месяцев, принимали решение об установке новой базы данных.
2. Установка чистой базы данных — значительно проще и выполняется быстрее. База данных берется из чистового протестированного дистрибутива актуальной версии. При заполнении базы данных «с нуля» есть возможность пересмотреть тарифную сетку и завести только актуальную информацию в корректном виде. При заполнении данных проводится обучение персонала. По практике, обучение в этом случае более эффективно, чем в случае обновления.
Основной минус состоит в том, что история по старым гостям остается в старой базе данных. База данных может быть размещена на этом же сервере. Доступ к этой базе останется на требуемых рабочих местах.
Инженеры ТП могут выгрузить данные по гостям, организациям и броням на будущий период в текстовые файлы. В файле содержатся только линейные данные с ограниченным набором полей. Эти данные можно загрузить в новую базу Shelter2, но после загрузки ВСЕ брони нужно обязательно пересохранить, указав нужные тарифы, проверить категории номеров и полученные цены. Список гостей же содержит карточки всех гостей, среди которых обычно много лишних. Перед загрузкой его в Shelter 2 требуется обязательная обработка в ручном режиме. Были случаи, когда гостиницы после загрузки всего списка профайлов клиентов из старой базы присылали запросы на удаление данных, т.к. среди этих профайлов много ненужной информации: дубли карточек, некорректно заведенные данные гостей и т.д.
Также в актуальных версиях продуктов мы уже практически полностью отказались от работы ПО Абонемент и ПО Shelter в одной базе. Для взаимодействия используем интерфейс по аналогии закрытия на фолио из RKeeper. Интерфейс позволяет делать закрытие на фолио проживающего гостя в Shelter услуг из Абонемента.
Интеграция Shelter 2 и сканера ШК
Для настройки данной интеграции требуется Shelter 2 версии 2.12.123.2420 или новее.
Необходимо зайти в системные настройки Shelter :

Перейти в настройки декодирования и поставить чек-бокс напротива параметра "Штрих-код" :

Также в данном окне необходимо указать маску карты "*":

Необходимо настроить декодирование трека при помощи TcpCardReader и decodecards.
Пример настроек можно взять с ftp
При необходимости, в поле "Исключить префикс", прописать ;BarCode
Далее необходимо зайти в Shelter - Справочники - Услуги - выбрать услугу, и в карточке услуги, в поле "Бар-код", указать штрих код товара:

Данный функционал можно использовать, к примеру, для быстого поиска товара в киоске.
Рассмотрим подробнее выполнение скриптов в программе IBExpert. Вход в программу осуществляется путем запуска файла \Shelter...\IBExpert\IBExpert.exe
1. Зарегистрировать базу (если она ещё не зарегистрирована). Для этого необходимо: нажать кнопку
Register Database (в разделе Database), ввести необходимые параметры подключения (см. рис.1) (Remote - для удаленного подключения к FireBird, Local - для локального подключения к FireBird, 127.0.0.1 - IP-адрес машины, используемый порт - 3080), выбрать кодировку WIN1251, установить логин UCS и пароль ucs для базы, выбрать версию Firebird (для всех актуальных установок используется версия 2.5). Указать путь до файла gds32.dll, который по умолчанию находится в папке с установленной версией Firebird в каталоге bin. Рекомендуется для Alias'а (отображаемого названия) использовать WORK - для рабочей базы и TEST - для тестовой.

(Рис.1 - Заполненные регистрационные данные базы)
2. Создать подключение к ещё одной базе можно простым методом - Клонировать Регистрационные Данные (Clone Registration Info) - нажав правой кнопкой на БД в списке Database Explorer (см. рис. 2 - пункт 2). Подключиться к базе данных, дважды кликнув по ней в списке, либо выбрав соответствующий пункт из выпадающего меню (см. рис. 2 - пункт 1).

(Рис.2 - Клонирование данных базы и Подключение)
1. Зайти в меню
Tools\Script Executive (Ctrl+F12), открыть
sql файл (либо вставить содежримое скрипта в поле Edit), содержащий нужный скрипт, установить галочку (checkbox) "Use current connect" (данная функция будет активна, если выполнено хотя бы одно подключение).
При выполнении скриптов, базу регистрировать не обязательно - если подключение не выполнено, можно указать путь до базы в самом скрипте, например так:
CONNECT '127.0.0.1/3080:D:\Base\_Garbage_Shelter\_Tracker\SHELTER.FDB' USER 'UCS' PASSWORD 'ucs';
2. Нажать кнопку
Run Script (F9). Скрипт должен выполнится без ошибок.
3. Результат выполнения скрипта:

1. Зайти в меню
Tools\SQL Editor (F12)
2. В открывшемся окне вписать необходимый SQL-запрос, нажать F9 (Execute )
Пример запроса :
select * from folio f where f.id = 3201
3.Результат выполнения запроса :

Внешние функции - MoneyToTextEx
Описание настроек MoneyToTextEx
Настройка предназначена для вывода числительных прописью в печатных формах на определённом языке.


Название – краткое название функции.
Наименование – полное название функции.
Синтаксис функции — параметры вызова функции.
Описание – краткое описание функции.
Язык – язык локализации, для которого будет работать функция, т.е. на каком языке запущено и используется само ПО.
Исходный код – текст скрипта.
Текущая версия – номер текущей версии.
Внимание! Описанный далее код функции является примером реализации для русского языка. Для других языков он может быть изменён в соответствии с особенностями самого языка
(например, отсутствие падежей, родов числительных в английском языке).

Вспомогательная функция округления с заданной точностью
function RoundDouble(AValue: Double; FracLen: Integer): Double;
var
D10: array[0..10] of Double;
begin
D10[0] := 1;
D10[1] := 10;
D10[2] := 100;
D10[3] := 1000;
D10[4] := 10000;
D10[5] := 100000;
D10[6] := 1000000;
D10[7] := 10000000;
D10[8] := 100000000;
D10[9] := 1000000000;
D10[10] := 10000000000.0;
Result := (Round(AValue * D10[FracLen] + 1 / D10[FracLen + 1])) / D10[FracLen];
end;
Вспомогательная функция округления до второго знака после запятой
function RoundMoney(ASum: Double): Double;
begin
Result := RoundDouble(ASum, 2)
end;
Вспомогательная функция копирования части строки
function RightStr(S: string; N: Integer): string;
begin
if (N <= 0) then
N := Length(S) + N;
Result := Copy(S, Length(S) - N + 1, N);
end;
Вспомогательная функция копирования части строки и подстановки заданного символа слева
function PadLCh(S: string; C: Char; N: Byte; ExactLen: Boolean = True): string;
begin
if ExactLen then
Result := RightStr(S,N)
else
Result := S;
while Length(Result) < N do
Result := C + Result;
end;
Основная функция преобразования денежной суммы в сумму прописью
Входные параметры:
Sum — число для преобразования
Param_Language — язык локализации
Currency — код валюты
function MoneyToTextEx (Sum: Double; Param_Language: string; Currency: string): string;
var
aOnes, aTeens, aTens, aHundreds, aTrios, aTrioFemale, aTrioPostfixes, aUnits,
aUnitPostfixes, aUnitFemale, aPostfixes, aPostfix: Variant;
КЛАССЫ ЧИСЕЛ
Первый класс (класс единиц) – сотни, десятки, единицы
Второй класс (класс тысяч) – сотни тысяч, десятки тысяч, единицы тысяч
Третий класс (класс миллионов) – сотни миллионов, десятки миллионов, единицы миллионов
… и т.д.
Функция преобразования трехзначного числа в строку с добавлением класса чисел или значения валюты
function TrioToText(Trio: Integer; TrioNo: Integer): string;
var
i1, i2, i3, PostfixNo: Integer;
Female: Boolean;
begin
Result := '';
if( Trio = 0) then
if TrioNo > 0 then Exit; - если число [0] и «не копейки», то выходим из функции («ноль миллионов», «ноль тысяч» не пишем)
i1 := (Trio mod 10); - выделяем единицы
i2 := (Trio div 10) mod 10; - выделяем десятки
i3 := (Trio div 100) mod 10; - выделяем сотни
if (TrioNo > -1) then - если «не копейки»
begin
Result := aHundreds[i3]; - берем сотню из массива сотен
if (i2 = 1) then – если второй десяток сотни (десять, одиннадцать...)
Result := Trim(Result + ' ' + aTeens[i1]) - то берем из массива второго десятка по значению единиц
else - если не второй десяток сотни (т.е. двадцать..., тридцать...,..)
begin
Result := Trim(Result + ' ' + aTens[i2]); - берем из массива десятков по значению десятка
if (i1 in [1, 2]) then – если единица 1 или 2 (в русском языке «один» и «два» для женского рода это - «одна» и «две», остальные единицы идентичны для М и Ж: «три», «четыре»... «десять»)
begin
if (TrioNo > 0) then - если класс числа более первого (тысячи, миллионы, миллиарды и т.д.)
Female := aTrioFemale[TrioNo] - берем признак женского рода в заданном массиве женских родов для классов чисел более первого (тысячи, миллионы, миллиарды и т.д.), т.е. если сюда пришел второй класс, в русском языке «тысяча» женского
рода.
else
Female := aUnitFemale[1 – TrioNo] - если первый класс или «копейки», смотрим значение женского рода в массиве женских родов, заданном для конкретной валюты (рубль мужского рода, копейка женского рода; доллар мужского рода, цент
мужского рода)
end
else
Female := False; - если единица не 1 или 2, то мужской род («три», «четыре»...)
if not Female then
Result := Trim(Result + ' ' + aOnes[i1]) - если мужской род, то берем единицу из массива единиц напрямую (индекс совпадает со значением)
else
Result := Trim(Result + ' ' + aOnes[9 + i1]); - если женский род, то берем единицу из массива единиц с инкрементом (для русского языка это будет 1 или 2, соответственно 9+1 = 10, в массиве единиц с индексом 10 идет женский род «одна»)
end;
end
else - если «копейки»
Result := PadLCh(IntToStr(Trio), '0', 2); - если «копейки», то сумму прописью не пишем, а к однозначному числу добавляем ноль слева (было 5, стало 05; было 55, стало 55)
После выполнения вышеуказанной части кода процедуры мы получаем одно-, двух- или трехзначное число прописью (451 = «четыреста пятьдесят один» для мужского рода класса чисел или «четыреста пятьдесят одна» для женского
рода класса чисел).
if (TrioNo > 0) then - если класс числа более первого (тысячи, миллионы, миллиарды и тд)
Result := Trim(Result + ' ' + aTrios[TrioNo]) - берем значение из массива классов чисел напрямую
else
Result := Trim(Result + ' ' + aUnits[1 – TrioNo]); - если класс менее первого, то берем значение из массива валюты («рубл», «копе»)
После выполнения вышеуказанной части кода процедуры мы получаем число прописью + либо корень названия класса чисел, либо корень названия валюты («четыреста пятьдесят одна тысяч» либо «четыреста пятьдесят один рубл»).
PostfixNo := 1; - по умолчанию берём индекс массива окончаний 1 (тысячА/копеЙКА/рублЬ/миллион)
if (Param_Language = 'Russian') then
begin
PostfixNo := 3; - если язык русский по умолчанию, берём индекс массива окончаний 3 (рублЕЙ/копеЕК/миллионОВ/тысяч)
if not (i2 = 1) then - если не второй десяток сотни, то определяем индекс массива окончаний
begin - смотрим на единицы
if (i1 = 1) then - если единица равна 1
PostfixNo := 1 - берем индекс массива окончаний 1 (тысячА/копеЙКА/рублЬ/миллион)
else
if (i1 in [2, 3, 4]) then - если единица равна 2 или 3 или 4
PostfixNo := 2; - берём индекс массива окончаний 2 (тысячИ/копеЙКИ/рублЯ/миллионА)
end;
end
else
Для других языков
if (Param_Language = 'Lithuanian') then
begin
PostfixNo := 3;
if not (i2 = 1) then
begin
if (i1 = 1) then
PostfixNo := 1
else
if (i1 in [2..9]) then
PostfixNo := 2;
end;
end;
После определения индекса подставляем окончание.
if (TrioNo > 0) then - для классов чисел
begin
aPostfix := aPostfixes[aTrioPostfixes[TrioNo]]; - определяем массив окончаний соответствующего класса чисел
Result := Result + aPostfix[PostfixNo]; - добавляем окончание по определенному ранее индексу из соответствующего массива
end
else - для валют
begin
aPostfix := aPostfixes[aUnitPostfixes[1 – TrioNo]]; - определяем массив окончаний соответствующего значения валюты («рубл»/«копе»)
Result := Result + aPostfix[PostfixNo];- добавляем окончание по определенному ранее индексу из соответствующего массива
end;
end;
Тело основной функции преобразования денежной суммы в сумму прописью
var
I: Int64;
F: Integer;
begin
Result := '';
Создаем массивы и заполняем их соответствующими значениями на языке локализации, для которого будет работать функция.
Массив первого десятка сотни (единиц)
aOnes := VarArrayCreate([0,11], varVariant);
aOnes[0] := '';
aOnes[1] := 'один';
aOnes[2] := 'два';
aOnes[3] := 'три';
aOnes[4] := 'четыре';
aOnes[5] := 'пять';
aOnes[6] := 'шесть';
aOnes[7] := 'семь';
aOnes[8] := 'восемь';
aOnes[9] := 'девять';
aOnes[10] := 'одна';
aOnes[11] := 'две';
Массив второго десятка сотни:
aTeens := VarArrayCreate([0,9], varVariant);
aTeens[0] := 'десять';
aTeens[1] := 'одиннадцать';
aTeens[2] := 'двенадцать';
aTeens[3] := 'тринадцать';
aTeens[4] := 'четырнадцать';
aTeens[5] := 'пятнадцать';
aTeens[6] := 'шестнадцать';
aTeens[7] := 'семнадцать';
aTeens[8] := 'восемнадцать';
aTeens[9] := 'девятнадцать';
Массив десятков:
aTens := VarArrayCreate([0,9], varVariant);
aTens[0] := '';
aTens[1] := 'десять';
aTens[2] := 'двадцать';
aTens[3] := 'тридцать';
aTens[4] := 'сорок';
aTens[5] := 'пятьдесят';
aTens[6] := 'шестьдесят';
aTens[7] := 'семьдесят';
aTens[8] := 'восемьдесят';
aTens[9] := 'девяносто';
Массив сотен:
aHundreds := VarArrayCreate([0,9], varVariant);
aHundreds[0] := '';
aHundreds[1] := 'сто';
aHundreds[2] := 'двести';
aHundreds[3] := 'триста';
aHundreds[4] := 'четыреста';
aHundreds[5] := 'пятьсот';
aHundreds[6] := 'шестьсот';
aHundreds[7] := 'семьсот';
aHundreds[8] := 'восемьсот';
aHundreds[9] := 'девятьсот';
Массив классов чисел:
aTrios := VarArrayCreate([0,4], varVariant);
aTrios[0] := '';
aTrios[1] := 'тысяч';
aTrios[2] := 'миллион';
aTrios[3] := 'миллиард';
aTrios[4] := 'триллион';
Массив признаков женского рода для классов чисел:
aTrioFemale := VarArrayCreate([1,4], varVariant);
aTrioFemale[1] := True;
aTrioFemale[2] := False;
aTrioFemale[3] := False;
aTrioFemale[4] := False;
Множество массивов окончаний как для классов чисел, так и для каждого значения всех используемых видов валют (идентичные по значениям массивы для разных валют или классов делать не нужно, главное правильно их определить для
валют и классов).
aPostfixes := VarArrayCreate([1,8], varVariant);
aPostfix := VarArrayCreate([1,3], varVariant);
aPostfix[1] := 'а';
aPostfix[2] := 'и';
aPostfix[3] := '';
aPostfixes[1] := aPostfix;
aPostfix := VarArrayCreate([1,3], varVariant);
aPostfix[1] := '';
aPostfix[2] := 'а';
aPostfix[3] := 'ов';
aPostfixes[2] := aPostfix;
aPostfix := VarArrayCreate([1,3], varVariant);
aPostfix[1] := 'ь';
aPostfix[2] := 'я';
aPostfix[3] := 'ей';
aPostfixes[3] := aPostfix;
aPostfix := VarArrayCreate([1,3], varVariant);
aPostfix[1] := 'йка';
aPostfix[2] := 'йки';
aPostfix[3] := 'ек';
aPostfixes[4] := aPostfix;
aPostfix := VarArrayCreate([1,3], varVariant);
aPostfix[1] := 'ка';
aPostfix[2] := 'ка';
aPostfix[3] := 'ок';
aPostfixes[5] := aPostfix;
aPostfix := VarArrayCreate([1,3], varVariant);
aPostfix[1] := '';
aPostfix[2] := '';
aPostfix[3] := '';
aPostfixes[6] := aPostfix;
Массив соответствий классов чисел и их окончаний
aTrioPostfixes := VarArrayCreate([1,4], varVariant);
aTrioPostfixes[1] := 1; - для «тысяч» массив из массива массивов aPostfixes с индексом 1 ( ['а','и',''])
aTrioPostfixes[2] := 2; - для «миллион» массив из массива массивов aPostfixes с индексом 2 ['','а','ов']
aTrioPostfixes[3] := 2; - для «миллард» массив из массива массивов aPostfixes с индексом 2 ['','а','ов']
aTrioPostfixes[4] := 2; - для «триллион» массив из массива массивов aPostfixes с индексом 2 ['','а','ов']
aUnits := VarArrayCreate([1,2], varVariant); - массив корней значений валют (рубл, копе)
aUnitPostfixes := VarArrayCreate([1,2], varVariant); - массив соответствий корней значений валют и их окончаний
aUnitFemale := VarArrayCreate([1,2], varVariant); - массив признаков женского рода значений валют (рубль мужского рода, копейка женского рода; доллар мужского рода, цент мужского рода)
Заполняем массивы для необходимых типов валют.
if (Currency = 'USD') or (Currency = '') then
begin
aUnits[1] := 'доллар';
aUnits[2] := 'цент';
aUnitPostfixes[1] := 2;
aUnitPostfixes[2] := 2;
aUnitFemale[1] := False;
aUnitFemale[2] := False;
end
else
if (Currency = 'RUB') or (Currency = 'RUR') then
begin
aUnits[1] := 'рубл';
aUnits[2] := 'копе';
aUnitPostfixes[1] := 3;
aUnitPostfixes[2] := 4;
aUnitFemale[1] := False;
aUnitFemale[2] := True;
end
else
if Currency = 'KGS' then
begin
aUnits[1] := 'сом';
aUnits[2] := 'тыйын';
aUnitPostfixes[1] := 6;
aUnitPostfixes[2] := 6;
aUnitFemale[1] := False;
aUnitFemale[2] := False;
end
else
if Currency = 'KZT' then
begin
aUnits[1] := 'тенге';
aUnits[2] := 'тиын';
aUnitPostfixes[1] := 6;
aUnitPostfixes[2] := 6;
aUnitFemale[1] := False;
aUnitFemale[2] := False;
end
else
if Currency = 'EUR' then
begin
aUnits[1] := 'евро';
aUnits[2] := 'цент';
aUnitPostfixes[1] := 6;
aUnitPostfixes[2] := 2;
aUnitFemale[1] := False;
aUnitFemale[2] := False;
end;
Sum := RoundMoney(Abs(Sum)); - округляем исходное число
I := Trunc(Sum); - выделяем целую часть(рубли, доллары...)
F := Round(Sum * 100) mod 100; - выделяем дробную часть (копейки, центы...)
Result := Trim(Result + ' ' + TrioToText((I div 1000000000) mod 1000, 3)); - выделяем и преобразовываем в пропись миллиарды
Result := Trim(Result + ' ' + TrioToText((I div 1000000) mod 1000, 2));- выделяем и преобразовываем в пропись миллионы
Result := Trim(Result + ' ' + TrioToText((I div 1000) mod 1000, 1));- выделяем и преобразовываем в пропись тысячи
Result := Trim(Result + ' ' + TrioToText(I mod 1000, 0));- выделяем и преобразовываем в пропись сотни
Result := Trim(Result + ' ' + TrioToText(F , -1)); - преобразовываем в пропись дробную часть
Result[1] := UpperCase(Result[1])[1]; - результат пишем с большой буквы
end;
begin
end
После перевода результат можно проверить через кнопку "ПРОВЕРИТЬ"

Sum – число для преобразования.
Param_Language – язык локализации.
Currency – код валюты.
Пример 1
Программа используется на русском языке, но числительные прописью должны отображаться на другом языке (вместо «рубль» и «копейка», например, «тугрик» и «тугрятик»).
Shelter v.2 \ Настройки \ Справочники \ Услуги и оплаты \ Валюты: заменить Рубли на Тугрики.
*В коде важен регистр букв!

Shelter v.2 \ Настройки \ Настройки отчётов \ Внешние функции: открыть внешнюю функцию для программы на русском языке (по умолчанию это - №1).

Внести изменения в исходный код:

Найти раздел, например, KZT. Скопировать данные из него и вставить следующим разделом ниже.
Внести изменения: KZT -> TUG, тенге -> тугрик, тиын -> тугрятик, массив для окончаний указать 7 для обоих aUnits (базово всего 6, т.е. нужно будет добавить новый).
else
if Currency = 'TUG' then
begin
aUnits[1] := 'тугрик';
aUnits[2] := 'тугрятик';
aUnitPostfixes[1] := 7;
aUnitPostfixes[2] := 7;
aUnitFemale[1] := False;
aUnitFemale[2] := False;
end
В разделе массивов окончаний создать новый (в нашем примере - 7) и внести изменения по окончаниям и номеру массива.
aPostfix := VarArrayCreate([1,3], varVariant);
aPostfix[1] := '';
aPostfix[2] := 'а';
aPostfix[3] := 'ов';
aPostfixes[7] := aPostfix;
*Если массив с такими значениями уже присутствует (например, массив 2 имеет те же окончания, что мы создали в массиве 7), то можно новый не создавать, а установить:
aUnitPostfixes[1] := 2;
aUnitPostfixes[2] := 2;
Найти запись массива массивов окончаний и установить максимально 7, вместо 6.
aPostfixes := VarArrayCreate([1,7], varVariant);
Произвести проверку результата изменений через кнопку [Проверить]:
Sum – числительное с десятыми или сотыми (разделитель – точка!).
Param_Language – Russian (язык программы, для которого настроена валюта).
Currency – TUG (валюта, в которой нужно числительное изобразить прописью).
[Сохранить] -> Получить результат.

Внешние функции раздела «Тарифы»
Внешние функции прикрепляются к конкретной операции в формировании тарифа.
Все функции имеют стандартный набор входных параметров:
|
BeginDate |
Дата заезда |
|
EndDate |
Дата выезда |
|
PostDate |
Расчетная дата |
|
Quant |
Количество услуг |
|
Cost |
Стоимость |
|
RefType |
Тип операции: 1 - Услуга по тарифу 2 - Доп. Услуга 3 - Поздний выезд 4 - % за бронь 5 - Ранний заезд 6 - Простой номера |
|
Operation |
Идентификатор операции |
|
ParamStr |
Параметризованная строка с дополнительными входными параметрами |
Описание дополнительных входных параметров в ParamStr:
|
arrival |
Дата заезда |
|
departure |
Дата выезда |
|
ResDate |
Смена создания |
|
ResBeginDate |
Дата начала бронирования |
|
CreationDate |
Дата создания |
|
typesale |
Тип размещения |
|
CIE |
Признак раннего заезда |
|
IDLE |
Признак простоя номера |
|
COL |
Признак позднего выезда |
|
UseOrgParams |
Признак использования тарифов и скидок организации |
|
Ch |
Расчетные параметры: Время |
|
cost |
Стоимость (ручной ввод) |
|
workload |
Загрузка отеля в разрезе номера |
|
GuestsRateAdd |
Параметризованная строка. Пакеты услуг для конкретного гостя (наименование параметра: идентификатор гостя, значение параметра: код пакета услуг) |
|
RateAdd |
Код пакета услуг (для брони) |
|
GuestsPlaces |
Параметризованная строка: Наименование параметра: идентификатор гостя Значение: Параметризованная строка с двумя параметрами:
|
|
LoadingMode |
Признак автоматического добавления услуг к автоначислениям |
|
UserMode |
Признак изменения услуги из карточки брони |
|
RoomKind |
Идентификатор типа номера |
|
IDRoom |
Идентификатор номера |
|
Packagekind |
Идентификатор типа тарифа |
|
Section |
Идентификатор секции фолио |
|
Season |
Идентификатор дополнительной стоимости на дату |
|
QuantReal |
Количество услуг. Будет больше Quant в случае неиспользования настройки «Не разделять автоначисления по гостям» |
|
ISRES% |
Процент за бронь |
|
R%PACK |
Идентификатор тарифа |
|
Числовые значения в качестве имен параметров |
Идентификаторы категорий размещения. В качестве значения имеют параметризованную строку: Наименование: идентификатор возрастной категории Значение: количество занятых мест |
|
Статистические данные по гостю |
|
|
ST_Night |
Количество ночей |
|
ST_Count |
Количество заездов |
|
ST_Cancel |
Количество отмен |
|
ST_NoShow |
Количество незаездов |
|
ST_Sum_Accommodation |
Сумма за проживание |
|
ST_Sum_Service |
Сумма за доп.услуги |
|
ST_Sum |
Итоговая сумма |
|
ST_First_Arrival |
Дата первого заезда |
|
ST_Last_Arrival |
Дата последнего заезда |
Выходным значением функция является параметризованная строка
Описание возможных параметров в выходной строке:
|
COST |
Базовая стоимость |
|
PRICE1 |
Стоимость выходного дня |
|
PRICE2 |
Специальная стоимость |
|
OperationCode |
Код операции |
|
Operation |
Идентификатор операции по умолчанию (если не будет найдена операция по коду) |
|
Quant |
Количество |
|
Section |
Идентификатор секции фолио |
Описания алгоритмов работы стандартных внешних функций
Trunc – Функция Trunc возвращает целочисленную часть числа с плавающей запятой. Она возвращает эту часть как Целочисленное значение.
Пример: Trunc(12.75) = 12
Mod - дает остаток от деления делимого на делитель
Пример: 19 mod 4 = 3
Now - возвращает текущую дату и время для местной временной зоны.
GetNamedParamDefFloat(ParamStr, ParamName, DefaultValue) – возвращает из параметризованной строки вещественное значение параметра по его наименованию (ParamStr – параметризованная строка, ParamName – наименование параметра, DefaultValue – значение возвращаемое если параметр в строке не найден либо значение параметра отсутствует)
GetNamedParamDefInt(ParamStr, ParamName, DefaultValue) – возвращает из параметризованной строки целочисленное значение параметра по его наименованию (ParamStr – параметризованная строка, ParamName – наименование параметра, DefaultValue – значение возвращаемое если параметр в строке не найден либо значение параметра отсутствует)
Наименование: 4+1
Функция предназначена для реализации тарифа "Одни сутки бесплатно при покупке 4-х суток"
Исходный код:
function PackageAfterCalculate(BeginDate, EndDate, PostDate, Quant, Cost: Double; RefType, Operation: Integer; ParamStr: string): string;
begin
Result := '';
if (Trunc(EndDate) - Trunc(BeginDate) > 4) then
if ((Trunc(PostDate) - Trunc(BeginDate)) > 0) and
((Trunc(PostDate) - Trunc(BeginDate) + 1) mod 5 = 0) then
Result := '&COST=0';
end;
begin
end.
Описание алгоритма работы:
begin
Result := '';
если проживание более 4-х дней:
if (Trunc(EndDate) - Trunc(BeginDate) > 4) then
то если расчетная дата больше даты начала:
if ((Trunc(PostDate) - Trunc(BeginDate)) > 0) and
и остаток от целочисленного деления разности даты начала проживания и расчетной даты (увеличиваем на 1 из-за отбрасывания дробной части (времени)) на 5 (требуемое количество дней для скидки) равен нулю:
((Trunc(PostDate) - Trunc(BeginDate) + 1) mod 5 = 0) then
тогда обнуляем стоимость за расчетную дату и передаем значение в результирующую параметризованную строку:
Result := '&COST=0';
end;
Наименование: QUANT
Функция предназначена для автоматического изменения кол-ва гостей при фиксированной стоимости
Исходный код:
function PackageAfterCalculate(BeginDate, EndDate, PostDate, Quant, Cost: Double; RefType, Operation: Integer; ParamStr: string): string;
begin
передаем реальное значение количества услуг и вычисленное значение реальной стоимости в результирующую параметризованную строку
Result := '&QUANT=' + FloatToStr(GetNamedParamDefFloat(ParamStr, 'QUANTREAL', 0)) + '&COST=' + FloatToStr(GetNamedParamDefFloat(ParamStr, 'QUANTREAL', 0) * Cost);
end;
begin
end.
*Функция неактуальна ('QUANTREAL'=1)
Наименование: 10=0
Функция предназначена для реализации тарифа "10-е сутки бесплатно (с учетом предыдущих заездов)"
Исходный код:
function PackageAfterCalculate(BeginDate, EndDate, PostDate, Quant, Cost: Double; RefType, Operation: Integer; ParamStr: string): string;
begin
Result := '';
if (GetNamedParamDefInt(ParamStr, 'ST_NIGHT', 0) + (Trunc(PostDate) - Trunc(BeginDate) + 1) = 10) then
Result := '&COST=0';
end;
begin
end.
Описание алгоритма работы:
begin
Result := '';
Если сумма количества ночей предыдущих проживаний гостя и текущего проживания до расчетной даты равно 10
if (GetNamedParamDefInt(ParamStr, 'ST_NIGHT', 0) + (Trunc(PostDate) - Trunc(BeginDate) + 1) = 10) then
тогда обнуляем стоимость за расчетную дату и передаем значение в результирующую параметризованную строку:
Result := '&COST=0';
end.
Наименование: -10%/-20%/-30%
Функция делает скидку 10% при заезде на количество дней от 7 до 13, 20% при заезде от 14 до 29 дней, 30% при заезде от 30 и более дней
Исходный код:
function PackageAfterCalculate(BeginDate, EndDate, PostDate, Quant, Cost: Double; RefType, Operation: Integer; ParamStr: string): string;
begin
Result := '';
if (Trunc(EndDate) - Trunc(BeginDate) > 6) then
if (Trunc(EndDate) - Trunc(BeginDate) < 14) then
Result := '&COST='+floattostr(Cost-Cost*10/100)
else
if ((Trunc(EndDate) - Trunc(BeginDate) > 13)and
(Trunc(EndDate) - Trunc(BeginDate) < 30)) then
Result := '&COST='+floattostr(Cost-Cost*20/100)
else
if (Trunc(EndDate) - Trunc(BeginDate) > 29) then
Result := '&COST='+floattostr(Cost-Cost*30/100);
end;
begin
end.
Описание алгоритма работы:
begin
Result := '';
если заезд более 6 дней:
if (Trunc(EndDate) - Trunc(BeginDate) > 6) then
тогда если заезд менее 14 дней
if (Trunc(EndDate) - Trunc(BeginDate) < 14) then
тогда устанавливаем стоимость со скидкой 10% за расчетную дату и передаем значение в результирующую параметризованную строку:
Result := '&COST='+floattostr(Cost-Cost*10/100)
Else
Иначе если заезд более 6 дней: и менее 30 дней
if ((Trunc(EndDate) - Trunc(BeginDate) > 13)and
(Trunc(EndDate) - Trunc(BeginDate) < 30)) then
тогда устанавливаем стоимость со скидкой 20% за расчетную дату и передаем значение в результирующую параметризованную строку:
Result := '&COST='+floattostr(Cost-Cost*20/100)
Else
Иначе если заезд более 30 дней
if (Trunc(EndDate) - Trunc(BeginDate) > 29) then
тогда устанавливаем стоимость со скидкой 30% за расчетную дату и передаем значение в результирующую параметризованную строку:
Result := '&COST='+floattostr(Cost-Cost*30/100);
end;
Наименование: 7=0
Функция делает каждый 7-й день проживания бесплатный. Все дни после последнего бесплатного дня за заезд - со скидкой.
Исходный код:
function PackageAfterCalculate(BeginDate, EndDate, PostDate, Quant, Cost: Double; RefType, Operation: Integer; ParamStr: string): string;
begin
Result := '';
if (Trunc(EndDate) - Trunc(BeginDate) > 7) then
if ((Trunc(PostDate) - Trunc(BeginDate)) > 0) then
if((Trunc(PostDate) - Trunc(BeginDate)) mod 7 = 0) then
Result := '&COST=0'
else
if (Trunc(PostDate) > (Trunc(EndDate) - ((Trunc(EndDate) - Trunc(BeginDate)) mod 7))) then
Result := '&COST='+FloatToStr(Cost*0.9);
end;
begin
end..
Описание алгоритма работы:
begin
Result := '';
если проживание более 7 дней:
if (Trunc(EndDate) - Trunc(BeginDate) > 7) then
тогда если не первые сутки
if ((Trunc(PostDate) - Trunc(BeginDate)) > 0) then
тогда если остаток от целочисленного деления разности даты начала проживания и расчетной даты (увеличиваем на 1 из-за отбрасывания дробной части (времени)) на 7 (требуемое количество дней для скидки) равен нулю:
if((Trunc(PostDate) - Trunc(BeginDate)) mod 7 = 0) then
тогда обнуляем стоимость за расчетную дату и передаем значение в результирующую параметризованную строку:
Result := '&COST=0'
Else
иначе если расчетная дата больше чем разность даты выезда и остатка от целочисленного деления разности двты выезда и даты заезда на 7
if (Trunc(PostDate) > (Trunc(EndDate) - ((Trunc(EndDate) - Trunc(BeginDate)) mod 7))) then
тогда устанавливаем стоимость со скидкой 10% за расчетную дату и передаем значение в результирующую параметризованную строку:
Result := '&COST='+FloatToStr(Cost*0.9);
end;
Наименование: -10%
Функция делает скидку 10%, если бронирование происходит в день заезда
Исходный код:
function PackageAfterCalculate(BeginDate, EndDate, PostDate, Quant, Cost: Double; RefType, Operation: Integer; ParamStr: string): string;
begin
Result := ';
if trunc(BeginDate) = trunc(now) then
Result := '&COST=' + floattostr(cost * 0.9);
end;
begin
end.
Описание алгоритма работы:
begin
Result := '';
если дата заезда равна текущей дате
if trunc(BeginDate) = trunc(now) then
тогда устанавливаем стоимость со скидкой 10% за расчетную дату и передаем значение в результирующую параметризованную строку:
Result := '&COST=' + floattostr(cost * 0.9);
end;
Не редко требуется установить дополнительный сервер блокировок, онлайн службу или какой либо другой модуль. В этом случае возникает необходимость их создания с отличным от стандартного именем.
Делается это довольно просто:
По умолчанию Shelter при ночном аудите начисляет услуги и, если установлена схема трансфера, помещает нужные услуги в секцию «отложенные» на фолио гостя. При выезде гостя данные услуги будут перенесены на фолио группы (организации).
Данная схема не очень удобна при получении определенной бухгалтерской отчетности, т.к. пока данная услуга находится в секции «отложенные»,
то она принадлежит частному лицу, а не контрагенту. И только после выезда гостя услуга будет принадлежать юридическому лицу. Возможна настройка Shelter,
для того чтобы при каждом ночном аудите совершался автоматический трансфер из секции «отложенные» на фолио цель (фолио группы, организации).
Для этого на сервере (машина, где находится БД Shelter) в файле shelter.IB.ini нужно добавить параметры:
[CloseShift] Autopost = 1 Autotransfer = 1 CompleteTransfers = 1
После внесения изменений в данный файл необходимо перезагрузить данный компьютер.
Применяется для выгрузки в 1С.
Как бороться с ошибкой "multiple rows in singleton select в процедуре SP_GET_LOCALIZATION_EX" в логах ShelterOnline/WuBook/Travelline
Периодически, на актуальных версиях Shelter, в логах ShelterOnline/WuBook/Travelline можно увидеть следующую ошибку : multiple rows in singleton select в процедуре SP_GET_LOCALIZATION_EX
Описание тонкостей при ведении логов
| ID потока | Занимаемая/виртуальная память | Дата / Время | Тип события | Событие |
| 5984 | 55028/21032 KB | 15.01.2019 16:37:21.002 | TRY: | TEventManager.DoEvent(4100, ) |
| 5984 | 55028/21032 KB | 15.01.2019 16:37:21.002 | TRY | TEventManager.DoEvent.CallProc(4100, ) |
| 6700 | 55056/21116 KB | 15.01.2019 16:37:21.002 | TRY: | TDebugThread.Execute.Start |
| 5984 | 55056/21116 KB | 15.01.2019 16:37:21.002 | Thread TFreezeChecker (6632) Created | |
| 5984 | 55056/21116 KB | 15.01.2019 16:37:21.002 | DONE: | TEventManager.DoEvent.CallProc(4100, ) |
| 5984 | 55064/21116 KB | 15.01.2019 16:37:21.002 | DONE: | TEventManager.DoEvent(4100, ) |
При корректном поведении для большинства событий "TRY" должно быть событие "DONE". В приведенном выше примере стартует поток, но метода "DONE" нет, т.к. он вызывается при завершении приложения.
Логирование запросов
8460 73232/46048 KB 15.01.2019 16:37:23.222 TRY: 1.2.TDatabaseConnector.CreateReadQuery.CrSect.Enter
8460 73240/46048 KB 15.01.2019 16:37:23.236 DONE: 1.2.TDatabaseConnector.CreateReadQuery.CrSect.Enter
8460 74084/50560 KB 15.01.2019 16:37:23.693 TRY: 1.7.SQL_OpenSession.CreateReadQuery
-----------------------------------------------------------
select session from SYS$OPENSESSION(0, 0, '&Computer=A-SAZONOV&LangCode=RU')
-----------------------------------------------------------
8460 74084/50560 KB 15.01.2019 16:37:23.693 DONE: 1.7.SQL_OpenSession.CreateReadQuery
8460 74084/50560 KB 15.01.2019 16:37:23.700 1.7.8686.Open [10 ms]
8460 74084/50560 KB 15.01.2019 16:37:23.700 TRY: 1.7.8686.Fetch
8460 74084/50560 KB 15.01.2019 16:37:23.700 DONE: 1.7.8686.Fetch [0 ms]
8460 74084/50560 KB 15.01.2019 16:37:23.700 TRY: TDatabaseConnector.FreeQuery ReadTrans=False AssignedTransaction=False IsException=False
8460 74084/50560 KB 15.01.2019 16:37:23.701 TRY: 1.7.8686.Commit
8460 74084/50560 KB 15.01.2019 16:37:23.703 DONE: 1.7.8686.Commit.Result = 1
8460 74084/50560 KB 15.01.2019 16:37:23.703 TRY: TDatabaseConnector.FreeQuery -> CrSectLeave OnCrSectLeave=False FCrSect=True
8460 74084/50560 KB 15.01.2019 16:37:23.703 DONE: TDatabaseConnector.FreeQuery -> CrSectLeave
8460 74084/50560 KB 15.01.2019 16:37:23.703 DONE: 1.7.8686.FreeQuery [10 ms, 1 records, 52 B]
Стандартные поля описаны выше. Событие TDatabaseConnector.CreateReadQuery.CrSect.Enter следит за очередностью выполнения запросов. Если в логе есть подобное событие с типом "TRY", но нет "DONE", это значит, что какой-то другой запрос "завис", т.е. для него не было события TDatabaseConnector.FreeQuery.CrSect.Leave. Сам запрос из таблицы также исключаем.
| ID подключения к БД | Счетчик запросов | Процедура / ID транзакции | Действие |
| 1 | 7 | SQL_OpenSession | CreateReadQuery |
| 1 | 7 | 8686 | Open [10 ms] |
| 1 | 7 | 8686 | Fetch |
| 1 | 7 | 8686 | Fetch [0 ms] |
| 1 | 7 | 8686 | Commit |
| 1 | 7 | 8686 | FreeQuery |
Т.е. порядок действий таков:
Поиск ошибок в логах.
Одним из ключевых слов при поиске ошибок в логе является ERROR. Для поиска ошибок в логе, необходимо :
1. Воспроизвести проблему
2. Открыть сформировавшийся лог Shelter любым текстовым редактором (предпочтительнее Notepad++)
3. Нажать Ctrl + F в полей найти ввести error
4. Нажать Найти
5. Попытаться найти решение самостоятельно
Исключения по error, на которые можно не обращать внимание :
1. select error
2. ERROR: Different Charset [DBCharset=UNICODE_FSS,Charset=WIN1251]
3. ERROR : TShelterDLL.Destroy
Как сбросить пароль пользователя
Модули Шелтер и Абонемент в ключе защиты, а также способ их лицензирования
| Проект | Модуль | Наименование | Примечание |
| 1 | 1 | Все функции Connecter | Лицензируется по количеству одновременно запущенных экземпляров ПО |
| 1 | 2 | Абонемент-Онлайн | Один модуль на объект |
| 1 | 3 | Инфо-киоск (с оплатой) | Лицензируется по количеству киосков на объекте |
| 1 | 4 | Инфо-киоск (без оплаты) Инфотерминал | Лицензируется по количеству киосков на объекте |
| 1 | 5 | Монитор для тренера | Лицензируется по количеству мониторов на объекте |
| 1 | 6 | Модуль управления солярием | Лицензируется по количеству соляриев на объекте |
| 1 | 7 | Монитор для клиента (дисплей покупателя) | Лицензируется по количеству мониторов на объекте |
| 1 | 8 | CloudPayment | Один модуль на объект |
| 1 | 9 | Регулярные списания EFT (Абонемент) | Один модуль на объект |
| 1 | 10 | Интеграция с ПДС через FarCards, интеграция с UDS Game | Один модуль на объект |
| 1 | 11 |
Интерфейс с CRM 1C Битрикс
|
Один модуль на объект |
| 1 | 12 | Сервер статистики ServStat (Абонемент) | Одна лицензия на один сервер статистики БД |
|
|
|
|
|
| 2 | 1 | Cloudshelter | |
| 2 | 2 | Подписка на обновления для Shelter3 | |
| 2 | 3 | Модуль очистки данных из базы Shelter | |
| 2 | 4 | Модуль интеграции Shelter с Wifi системой авторизации гостей | |
| 2 | 5 | Менеджер мероприятий | Лицензируется по количеству рабочих мест |
| 2 | 6 | ------------------------------------------------------------------------------------ | |
| 2 | 7 | ------------------------------------------------------------------------------------ | |
| 2 | 8 | Монитор Ресурсов | |
| 2 | 9 | Горничные-мобайл(минибар), Web горничные | |
| 2 | 10 | Медицина | |
| 2 | 11 | Интерфейс РК-Шелтер | |
| 2 | 12 | Интерфейс РК-Либра(Фиделио) | |
|
|
|
|
|
| 3 | 1 | Шелтер-лайт (модуль 1 и 3) | |
| 3 | 2 | Шелтер-полная версия (модули 1, 2, 3) | |
| 3 | 3 | Отчеты | |
| 3 | 4 | Телефонный тарификатор | |
| 3 | 5 | Интернет-бронирование | |
| 3 | 6 | ПДС, CRM | |
| 3 | 7 | Выгрузка в XML (УФМС ПО Контур и Радиус) | |
| 3 | 8 | Банковский протокол | Лицензируется по количеству рабочих мест, где установлена связь с ПО эквайринга |
| 3 | 9 | Горничные | Один модуль на объект |
| 3 | 10 | Channel manager (Wubook, Тревеллай, Нотабене) | |
| 3 | 11 | IP TV (Hoteza, Видеолюкс, Отрум...) | |
| 3 | 12 | Замковая система | |
|
|
|
|
|
| 4 | 1 | Абонемент | Лицензируется по количеству одновременно запущенных экземпляров ПО |
| 4 | 2 | Интерфейс – турникет | Один модуль на объект |
| 4 | 3 | Отчеты, автозапуск мероприятий | Один модуль на объект |
| 4 | 4 | Интерфейс с Gantner, PocketKey | Один модуль на объект |
| 4 | 5 | Платежные системы Ассист, Робокасса, Резервмастер | Один модуль на объект |
| 4 | 6 | Монитор контролера | Лицензируется по количеству одновременно запущенных экземпляров ПО |
| 4 | 7 | Инфо-плазма | Лицензируется по количеству одновременно запущенных экземпляров ПО |
| 4 | 8 | ------------------------------------------------------------------------------------ | |
| 4 | 9 | Доступ к базе сторонних программ (connecter) – кроме функций, защищенных 1.2-1.7, 4.5 |
Лицензируется по количеству одновременно запущенных экземпляров ПО (подробнее про лицензирование Connecter см.статью о Connecter) |
| 4 | 10 | E-Mail и SMS рассылка (GuestAnnoncer) | Один модуль на объект |
| 4 | 11 | Интерфейс связи с Cognitivе, Regula (сканеры паспортов) | Лицензируется по количеству рабочих мест, где установлена связь |
| 4 | 12 | Выгрузка в 1С | Один модуль на объект |
| 6 | 1 | Web-Медицина | Лицензируется по количеству рабочих мест |
| 6 | 2 | Интеграция с системой HotBot | Один модуль на объект |
Описание работы с ключом защиты находится по ссылке http://support.ucs.ru/ru/node/8733
ВНИМАНИЕ!!! Модуль лицензируется, необходима лицензия на проект 6, модуль 1
Модуль можно скачать тут
Для работы необходим IIS и FrameWork 4.6.1.
1. Установка и конфигурирование IIS - https://professorweb.ru/my/ASP_NET/sites/level3/3_1.php
2.https://stackoverflow.com/questions/6846544/how-to-fix-handler-pagehandlerfactory-integrated-has-a-bad-module-managedpip
How to fix: Handler “PageHandlerFactory-Integrated” has a bad module “ManagedPipelineHandler” in its module list
It turns out that this is because ASP.Net was not completely installed with IIS even though I checked that box in the "Add Feature" dialog. To fix this, I simply ran the following command at the command prompt
windir\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
If I had been on a 32 bit system, it would have looked like the following:
windir\Microsoft.NET\Framework\v4.0.21006\aspnet_regiis.exe -i
Remeber to run the command prompt as administrator (CTRL+SHIFT+ENTER)
3. Далее, необходимо скопировать модуль в директорию (после устновки IIS директория должна создаться автоматически) C:\inetpub\wwwroot\
4. В диспетчере служб IIS добавить добавить приложение, и указать физический путь
5. Сайты - Привязки - Имя узла не заполнять! Тип привязки - http, порт - произвольный :

6. Путь к базе данных и путь до сервера блокировок указывается в файле Medicine_web.ini, который лежит в корне сайта.
После установки необходимо перезагрузить компьютер.
Если не подтянулись визуальные стили (style.css) - то необходимо, в компонентах Windows установить чек-бокс в "Службы IIS" - "Служба интернета" - "Общие функции HTTP" - "Статическое содержимое" :

Так же, необходимо перепроверить, что в "Пулы приложений" версия среды CLR.NET соответствует версии установленного .NET Framework

Убедиться, что для сайта с модулем указана версия 4.0
В резульате корректной настройки, при обращении к модулю должна открываться страница с авторизацией :

![]() |
![]() |
| Рис.1 | Рис.2 |
Технические рекомендации
1. Требуется наличие бесшовного WiFi покрытия. Рекомендуется чтобы устройство находилось во внутренней сети гостиницы. Работа через гостевой интернет не рекомендуется.
2. Для удобства использования рекомендуется приобретать модели планшетов с большой диагональю экрана (на фото использован планшет Samsung XE500T1C, диагональ 11.6", разрешение 1366x768);
3. Установка ПО Shelter производится стандартным образом (в соотв. со статьей http://support.ucs.ru/ru/node/9001);
4. Рекомендуется использовать стилус.
Не работают или работают не корректно следующие функции:
1. Нет функционала открывать контекстное меню (как правой кнопкой мыши на ПК);
2. Не работает перетягивание на шахматке;
3. Не удобно пользоваться внесением цифровой и буквенной информации – нужно отдельно открывать клавиатуру, которая перекрывает основное окно;
4. Есть проблемы с модальностью окон;
5. Нельзя повторно сформировать отчет «Счет» из-за отсутствия функционала вызова контекстного меню.
Работают следующие функции:
1. Двойной клик работает: на шахматке, в модуле бронирования, при открытии отчетов, в модуле список гостей, в модуле список фолио, внутри фолио, в справочниках;
2. Зажать значок со статусом комнаты – открывается окно с возможностью смены статуса номера;
3. Бронирование/заезд по кнопке работают;
4. Окно оплаты работает;
5. Работа с фолио (начисление услуг, проведение оплат, коррекция через двойной клик, ручные скидки, перетаскивание из секции в секцию);
6. Переселение гостя возможно только через кнопки на верхней панели;
7. Работают фильтры в модулях;
8. Создание групповой брони (добавление заездов, добавление организации, распределение брони, выставление счета);
9. Основной функционал Справочников работает (добавление гостиниц и юр.лица собственника, добавление категорий номеров и номерного фонда, тарифы, киоски);
10. Пользовательские настройки работают;
11. Поселение/бронирование/аннуляция работают в модуле Список гостей, в том числе и групповой/выборочный заезд;
12. Закрытие смены работает;
13. Ночной аудит работает;
14. Модуль «Свободные номера по типам» работает;
15. Калькулятор тарифов работает;
16. Базовые функции в модуле «Киоск» работают;
17. Базовые отчеты открываются (Счет, Фолио, Отчет Менеджера, Комплексный отчет ночного аудита, Питание на день (по расписанию питания), Список гостей, Отчет по услугам, Сводка по доходу и заселению).
Настройка интеграции Shelter и CRM (Card System)
Реализуемые функции
| Действие в Shelter | Результат |
| 1. Поиск гостя через список гостей. В списке гостей провести картой | Если в Shelter гость с такой картой уже есть, то в списке появляется найденный гость. Если такого гостя нет, то происходит добавление гостя (в Shelter передаётся ФИО гостя) |
| 2. Поиск гостя при поселении/бронировании в форме поселения/брони провести картой | Поиск осуществляется аналогично, как и в списке гостей |
| 3. Передача в CRM суммы потрат | Потраты передаются на счет потрат со всех платежей, кроме тех типов оплат, где установлен чек-бокс "ПДС" |
| 4. Передача количества ночей | В CRM осуществляется передача количества ночей, проведенных гостем в гостинице (после выезда гостя) |
| 5. Передача количества визитов | В CRM осуществляется передача количества заездов гостя (после выезда гостя) |
| 6. Пополнение депозитного счета через вкладку ПДС в фолио | Происходит пополнение депозитного счета в CRM |
| 7. Списание с депозитного счета через вкладку ПДС в фолио | Происходит списание с депозитного счета в CRM |
| 8. Работа со скидками для гостей при бронировании/послении | Подтягивается скидка гостя при послении/бронировании от стойки |
Для настройки интеграции необходимо обновить Shelter до актуальной версии. Настройки необходимо выполнять через "Сервисы и оборудование" :

Рис. 1
В shelter.ini не должно быть подключенного модуля ПДС CardSystem.
Необходимо убедиться, что в ключе защиты присутствует Проект 3, модуль 6 (ПДС, CRM).
Для интеграции с CRM 5 необходимо запросить "короткий" лицензионный код для интеграции с Shelter :

Рис. 2
Для этого необходимо связаться с отделом лицензирования UCS.
При интеграции с CRM 7 короткий код указывать не нужно.
1. Необходимо перейти во вкладку "Сервисы и оборудование" - нажать кнопку "Добавить" - нажать на "Драйвер", в открывшемся окне выбрать "Персональная Дискнонтная Система (ПДС)" - "Card System" - "Выбрать" :

Рис. 3
2. Нажать кнопку "Настройка" :

Рис. 4
3. В открывшемся окне необходимо настроить следующим образом :
Лицензионный код : Указать "короткий код" (для CRM7 можно оставить это поле пустым)
Логин : Указать логин для входа в CRM
Пароль : Указать пароль для входа в CRM
Хост : Указать IP адрес ПК, где находится база данных CRM
Порт : указать порт для подключения к CRM (сервер авторизации (API) - порт TCP)
Таймаут соединения : время в мс ( можно оставить 0)
Номер терминала : 13
Тип счета : 0
Передача карты (чек-бокс) : возможность передачи дисконтной карты другому гостю
Платежи : код типа счета - депозит
Потраченные средства : код типа счета - потраты
Скидки : код типа счета - скидка
Ночи : код типа счета - ночи
Визиты : код типа счета - визиты


Рис. 6

В параметре "Код операции для платежей" указать тип оплаты, заденный ранее. "Код операции для пополнения" - указать услугу, которые мы заводили ранее (Пополнение CRM).
Чек-бокс "Разрешать ручной ввод номера карты" и "Возможность проведения операции пополнения баланса карты" - указывается по необходимости.
Настройки в CRM (пример)
1. Завести "Классификатор ПО" :
Файл - Классификаторы ПО - Добавить

Рис. 8
2. Завести "Типы счетов" :
Справочники - Типы счетов

Рис. 9
3. Настроить схемы :
Справочники - Схемы.

Рис. 10
4. Добавить типы счетов для классификатора ПО :
Классификаторы ПО (выбрать ранее созданный) - В поле "Типы счетов" ПКМ - "Настройки для работы с типами счетов" :

Рис. 11
5. Выпусть карту :
Владельцы и карты - Выпуск карт

Рис. 12
6. Создать гостя :
Владельцы и карты - Добавить нового владельца. Заполинить согласно скриншоту.

Рис. 13
7. Далее необходимо сопоставить коды скидок в CRM и Shelter. Скидки заводятся в Shelter, код скидки в Shelter = код внешний в схемах CRM

Рис. 14

Рис. 15
Операции в Shelter
1. Настроить считыватель (мануал можно посмотреть тут)
2. В карточке бронирования приложить карту к считывателю, появится окно следующего содержания :

Рис. 16
Если в БД Shelter уже заведен гость с такой фамилией, то при нажатии "ОК" откроется окно поиска гостя, где можно выбрать уже существующего гостя, таким образом мы "привяжем" гостя из CRM к гостю в Shelter.
Если нажать "Отмена", то будет создана новая карточка гостя. После сохранения карточки гостя, появляется следующее окно :

Рис. 17
Нажимаем "Да".
Если гостю положена скидка, то она отобразится в соответствующем поле при послении/бронировании.

Рис. 18
3. Пополнение карты гостя :
Перейти в фолио - Доп.операции - ПДС - Ввести номер или приложить к считывателю карту, должен подтянуться гость из CRM :

Рис. 19
Ввести сумму пополнения
Нажать "Пополнить баланс карты"
В открывшемся окне выбрать типа оплаты, нажать оплата. После оплаты баланс карты гостя увеличится на ту сумму, на которую выполнили пополнение :

Рис. 20
При этом на фолио отобразится сумма пополения карты (услуга + оплата) :

Рис. 21
Баланс счета в CRM :

Рис. 22
4. Списание с карты гостя :
Перейти в фолио - Доп.операции - ПДС - Ввести номер или приложить к считывателю карту, должен подтянуться гость из CRM
Ввести сумму списания
Нажать "Списать деньги на фолио"
После списания баланс карты гостя уменьшится на сумму списания :

Рис. 23
При этом баланс фолио станет положительный, так как мы фактически перенесли часть депозитных средств с CRM на фолио в Shelter :

Рис. 24

Рис. 25
Данную оплату можно отменить стандартныим средствами Shelter (возврат оплаты), при этом баланс фолио гостя изменится, а счет гостя в CRM пополнится на сумму той транзацкции, которую мы отменили.
5. Ночи и заезды передаются в CRM только после выезда гостя!
6. Оплата услуг с депозитного счета CRM :
Начислить услугу на фолио, при оплате этой услуги (в окне оплаты) приложить карту гостя к считывателю - тип оплаты должен измениться автоматически на "Оплата CRM":

Рис. 26
7. Передача "Потрат" выполняется автоматически, при выезде гостя. Потраты - сумма оплат гостя за предоставленные услуги в гостинице.
На примере :

Рис. 27
Общая сумму оплат - 162009 р., однако, оплаты, с помощью депозитного счета (Оплата в CRM), передаваться в CRM не будут!
Баланс счетов гостя в CRM после выезда :

Рис. 28
* В случае использования карт Em-Marine возможна удобная настройка в CRM для привязки карт, а именно:

Настройка интеграции Shelter и UDS-GAME
Реализуемые функции
| Действие в Shelter | Результат |
| 1. Оплата услуг при помощи скидки | Применяется процентная скидка на сумму чека (зависит от настроек лк UDS-GAME - параметр "Понижать сумму чека") |
| 2. Оплата при помощи бонусных баллов | Происходит списания баллов от суммы чека (зависит от настроек лк UDS-GAME - параметр "Начислять бонусные баллы", а так же от процента счета для оплаты бонусными баллами) |
| 3. Накопление баллов | Накапливаются баллы с каждого чека (зависит от настроек лк UDS-GAME - "статусы клиентов") |
| 4. Оплата по коду из приложения UDS-GAME | Вводится код из приложения UDS-GAME, по которому происходит начисления баллов/списание баллов/применяется скидка |
| 5. Оплата по номеру телефона | Вводится номер телефона гостя для последующего накопления баллов (по номеру телефона возможно только накопление баллов) |
| 6. Проверка баланса бонусов гостя | Отображается баланс баллов гостя (только по коду из приложения UDS-GAME) |
ВНИМАНИЕ!!! В указанной ниже версии amPDS_UDSGame.dll не поддержан возврат бонусных баллов при возврате в Shelter.
| ПО Shelter | Версия 2.12.130.3100 |
| amPDS_UDSGame.dll | Версия 1.2.0.14 |
Настройки необходимо выполнять через "Сервисы и оборудование":

Необходимо убедиться, что в ключе защиты присутствует Проект 1, модуль 10 (Интеграция с UDS-GAME).
1. Необходимо перейти во вкладку "Сервисы и оборудование" - нажать кнопку "Добавить" - нажать на "Драйвер", в открывшемся окне выбрать "Персональная Дискнонтная Система (ПДС)" - "UDS-Game" - "Выбрать" :

2. Нажать кнопку "Настройка"

3. В открывшемся окне необходимо настроить следующим образом :

4. Далее Настройки -> Справочники -> Услуги и оплаты -> Оплаты -> Безналичный расчет -> Добавить новый тип оплтаты, к примеру, "Оплата CRM"

5. В файле amPDS_UdsGame.ini необходимо указать значение key_api можно получить в настройках личного кабинета UDS Game - Интеграция - API Key :

Оплата услуг при помощи скидки
В личном кабинете UDS Game способ предоставления скидки : "Понижать сумму чека", в этом случае скида будет применяться на всю сумму к оплате (размер скидки зависит от уровня статуса клиента в UDS Game)
В окне оплаты необходимо ввести код из приложения UDS в поле "ПДС(Карта/Телефон)" и нажать кнопку оплатить, появится следующее окно :

Для данного клиента, в UDS Game заведена скидка 11% :

Внимание!!! Одновременная работа с понижением суммы счета (скидка) и с начислением бонусных баллов не представляется возможным
Внимание!!! "Время жизни" одно кода составляет 30 минут, либо 1 транзакция
Внимание!!! Использование скидки возможно только в следующих случаях :
- если оплачиваются все услуги (т.е.в чеке нет услуг с предоплатой 100% или ценой = 0)
- если все услуги начислены на фолио
Внимание!!! Номер телефона должен вводиться в формате 79991234567
При вводе номера телефона данные по скидкам отображаться не будут. В UDS будет передана сумма чека.
Внимание!!! При изменении схемы работы в UDS, необходимо в обязательном порядке перезапускать Shelter
Оплата услуг при помощи бонусных баллов.
В личном кабинете UDS Game способ предоставления скидки : "Начислять бонусные баллы", в этом случае скида будет применяться на всю сумму к оплате (размер процента бонусных баллов зависит от уровня статуса клиента в UDS Game)
В окне оплаты необходимо ввести код из приложения UDS в поле "ПДС(Карта/Телефон)" и нажать кнопку оплатить, появится следующее окно :

В данном случае, можно накопить баллы в размере 10% (зависит от процента бонусов для гостя из личного кабинета UDS-Game) от суммы чека, либо списать 20 бонусных баллов (зависит от настройки "Какой процент счета можно оплатить баллами" из личного кабинета UDS-Game) со счета гостя.
Если нажать "Накопление баллов 10.00%", то в UDS-Game баланс бонусных баллов увеличиться на 10, к оплате : 100р
Если нажать "Списание баллов : 20.00", то с бонусного счета гостя будет списано 20 баллов, к оплате : 80р.
Если нажать "Отмена", то будет произведена попытка обычной оплаты
При вводе номера телефона в окне "ПДС(Карта/Телефон)" появляется возможность только накопления (Shelter передает сумму оплаты в UDS-Game, который в свою очередь начисляет бонусные баллы)
Проверка баланса бонусов гостя
Проверка баланса бонусных баллов гостя возможна только по коду из приложения UDS-Game.
Есть 2 варианта проверки баласна :
1. Через окно оплаты Shelter : В окне оплаты в поле "ПДС(Карта/Телефон)" ввести номер из приложения UDS-Game :

Нажать информационную кнопку, откроется окно с информацией по клиенту :

2. Через Фолио - Доп.операции - ПДС :

Настройка интеграции Shelter и HotBot
| ПО Shelter | Версия 2.12.132.3280 |
| HotBot.dl | Версия 1.0.1.24 |
Необходимо убедиться, что в ключе защиты присутствует Проект 6, модуль 2 (Интеграция с HotBot).
ВНИМАНИЕ!!! На 17.09.2019, версия 2.12.132.3280 является BETA-версией, и не доступна для обновления. Если есть необходимость запуска данной интеграции на более ранних версиях Shelter без обновления, то необходимо :
1. Через tracker запросить версию 2.12.132.3280
2. Установить службу ShelterOnlineServer и HotBot от версии 2.12.132.3280 в отдельной директории
2.1. Если используется ShelterOnlineServer для GDS/Интернет-бронирования, необходимо установить службу ShelterOnlineServer с другим названием (https://support.ucs.ru/ru/node/9183), в ini-файле указать другой порт (7778, к примеру)
3. Поочередно выполнить скрипты (https://support.ucs.ru/ru/node/9537) из архива, скаченного с FTP
Описание подключения считывателя к Shelter 2
Модель считывателя : Z-2 USB

Подключен по USB
Тип карты Mifare
Необходимо скачать и установить программу PuTTY (предварительно необходимо установить драйвера для считывателя с оф.сайта производителя)
После запуска программы перейти во вкладку Serial и указать COM-порт и скорость :

После нажатия Open откроется окно, необходимо приложить карту к считывателю, должна появиться такая строка (пример) :

Трек, который мы будем декодировать : B2C124CB
Для декодирования необходимо скачать и разархивировать утилиту TcpCardReader из базовой поставки ПО Абонемент (версия на момент написания манула 1.26.0.2). Далее необходимо настроить TcpCardReader.ini, в моем случае настройки выглядят так :

2999002315 - искомый трек.
Следующим шагом будет настройка считывания карты в Shelter 2. Необходимо запустить Shelter и перейти в настройки :

Ввести пароль для входа в настройки (ucs-shelter) и перейти в системные настройки. Необходимая секция для настроек :

| Тип считывателя | 4 |
;TCP/IP |
| Порт считывателя | 7760 |
;Значение из TcpCardReader.ini |
| StartChar | ; |
|
| StopChar | ? |
|
| IP | 127.0.0.1 |
;IP адрес ПК, где запущен TcpCardReader |
Далее необходимо перейти в настройки декодирования карты :

В появившемся окне нажать кнопку "Добавить" и настроить по аналогии со скриншотом :

После чего необходимо нажать "Сохранить", в каталоге с Shelter появится файл cards.ini
Если в карточке поселения считать эту карту, то в логе увидим следующую запись :
В логе видно, что трек обработался корректно.
Тип карты Mifare
После считывания карты в PuTTY :

Настройки для TcpCardReader.ini :
[application]
AutoStart = 1
AutoHide = 0
[TCP]
PORT=7760
IP=0.0.0.0
[READER1]
COMPORT=7
COMPORTPARAMS=baud=9600 data=8 parity=N stop=1
;Параметр Prefix задаёт строку, которая передаётся клиентам перед первым прочтенным символом
Prefix=;
;Параметр Postfix задаёт строку, которая передаётся клиентам после последнего прочтенного символа
Postfix=?
;Использовать decodecards.dll
useDecodeCards=1
StartTermChars=i
FinishTermChars=?#13;#10;#0;
;Файл логирования треков
TrackLogFile=
ConvertTrackLog=0
IncludeTypeStartTermChar=0
IncludeStartTermChar=0
NeedCheckAndReopenCom=1В decodecards.ini В секции [mask] добавить следующий параметр : card_em = ne* и добавляем следующую секцию :
Запускаем TcpCardReader.exe и прикладывем карту. Результат считывания карты :

Далее настраиваем подключения к Shelter, как было описано ранее. После считывания карты в логе Shelter увидим следующую запись :
Настройки DECODECARDS.INI
БЕЗ ИСПОЛЬЗОВАНИЯ USEMASK (USEMASK=0) - ПО УМОЛЧАНИЮ.
СТАРЫЙ, НЕ РЕКОМЕНДУЕТСЯ К ИСПОЛЬЗОВАНИЮ.
[cards]
;В этой секции прописываются префиксы для карт. Типы карты определяется прификсом.
Существуют 4 типа карт: CardPrefix, RegularCardPrefix, StaffCardPrefix, PDSCardPrefix. НЕ ДОЛЖНЫ СОВПАДАТЬ МЕЖДУ СОБОЙ!!!
CardPrefix - обменная гостевая, действующая на территории комплекса. может быть пустым.
Пример:
CardPrefix =
; CardPrefix =770a87121234a
; CardPrefix =770A199999999A
; CardPrefix =750
RegularCardPrefix - постоянная карта клиента. RegularCardPrefix не может быть пустым.
Пример:
RegularCardPrefix=10
;RegularCardPrefix=йцукен - Если не используется
StaffCardPrefix - постоянная карта сотрудника. StaffCardPrefix не может быть пустым. Если не используется, то следует написать, например
Пример:
; StaffCardPrefix = 770=00260001=
StaffCardPrefix = 778=87121234=
StaffCardPrefix = 778=201050001
; StaffCardPrefix =фывапр - Если не используется
PDSCardPrefix -карта ПДС. PDSCardPrefix не может быть пустым. Если не используется, то следует написать , например
PDSCardPrefix = 811876
; PDSCardPrefix =ячсмит - Если не используется
FirstSignEquallyAsLetterA = 0 - Интерпретировать первый встретившийся символ "=" в треке как символ "A". Используется FirstSignEquallyAsLetterA = 1 для совместного использования GKHOST и инфотерминалов TimeKeeper.
[cards.Card]
CardDecodeType - алгоритм извлечения истинного номера карты
ANGSTREMCARD- для карт E-Marine со считывателем СРЧ-125
ANGSTREMBRASLET- для карт E-Marine со считывателем СРЧ-2M
LAST8 - последние 8 цифр
LAST9 - последние 9 цифр
MASK - накладывается маска. Исползуется параметры mask и bitmask
Например,
mask=**hh* - взять 3-й и 4-й символ как цифры в 16-м формате
mask=**dd* - взять 3-й и 4-й символ как цифры в 10-м формате
bitmask=$00FFFFFF - и применить к ним битовую маску
MaskType= - (пусто-по умолчанию)
MaskType=ARRAYOFBYTES - то анализируется параметр mask. Значения должны быть типа "с".
Например, mask = *cccc*
Это значит, что при декодировании из трека возьмём 2-5 символы, представим каждый символ в 16-ричном формате. Объединим 16-ричные представления символов и применим к ним маску bitmask.
Пример. Со считывателя пришёл трек "Пупкин". Если mask =*cccc*, то для обработки берём часть "упки".
Представляем в 16-ричном виде
у - F3
п - EF
к - EA
и - E8
Объединяем. Получаем F3EFEAE8 . Накладываем маску bitmask=$7FFFFFFF -> Получили 73EFEAE8 - в 16-ричном формате или 1945103080 - в 10-тичном формате
code=2 - идентификатор карты в базе. ПАРАМЕТРЫ CODE ДЛЯ ВСЕХ ТИПОВ КАРТ ДОЛЖНЫ БЫТЬ РАЗЛИЧНЫМИ.
[cards.RegularCard]
Аналогично [cards.Card]
[cards.StaffCard]
Аналогично [cards.Card]
[cards.PDSCard]
Аналогично [cards.Card]
ИСПОЛЬЗОВАНИЕ USEMASK=1
Добавлена секция [mask]. В ней настраиваются маски карт в формате - ИМЯ МАСКИ=МАСКА
Добввлена секция [general] с параметром
usemask=0 – не использовать секцию MASK (по умолчанию)
usemask=1 – использовать секцию MASK
Если usemask=1, то
1. Секция [cards] игнорируется;
2. При декодировании проверяется, какой маске соответствует считанный трек.
После этого происходит обращение к секции [cards.ИМЯ МАСКИ]. Извлекается параметр CardDecodeType и ExcludedPrefix - отделяемый от трека префикс, применяется алгоритм декодирования и возвращается номер карты.
Пример 1.
Трек равен 778=12345678=1234567 . Он удовлетворяет маске card2.
Отрезаем от трека ExcludedPrefix. Получили 1234567.
К этому числу не применяем никакой алгоритм декодирования, так как CardDecodeType не заполнен. В результате получаем 1234567 - истинный номер карты.
Пример 2.
Трек равен 05987654321 . Он удовлетворяет маске card. Отрезаем от трека ExcludedPrefix.
Получили 987654321. К этому числу применяем алгоритм декодирования MASK. Согласно алгоритму декодирования берем 5 первых символов в 10-чном формате. В результате получаем 98765 - истинный номер карты.
[general]
usemask=1
[mask]
card = 05*
card2= 778=12345678=*
[cards.Card2]
ExcludedPrefix=778=12345678=
code=2
[cards.Card]
ExcludedPrefix=05
code=2
CardDecodeType = MASK
mask=ddddd
bitmask=$FFFFFFFF
Далее будут рассмотренны примеру декодирования разных карт на разных прошивках и разных считывателей.
IRON LOGIC Z-2
Все прошивки взяты с официального сайта производителя IronLogic https://ironlogic.ru
ПРИМЕР 1. Заводская прошивка для Z-2 USB. Версия: 230. Карта ISBC MIFARE Classic 1K
В putty возвращается трэк:
Mifare[23D9C4C5] 196,55587 1K (0004,08)
No card
Если необходимо получить искомое значение 19655587, то в TcpCardReader.ini указать:
Prefix=;
Postfix=?
useDecodeCards=1
StartTermChars=]
FinishTermChars=
А в decodecards.ini:
[general]
usemask=1
TrackResultLog=
[mask]
card_mif=*
[cards.card_mif]
excludedprefix=
CardDecodeType=MASK
mask=dddddddd
code=2
bitmask=$FFFFFFFF
В результате в TcpCardReader будет следующий результат:

Если необходимо получить искомое значение 601474245, что соответствует 23D9C4C5, то в TcpCardReader.ini указать:
…
Prefix=;
Postfix=?
useDecodeCards=1
StartTermChars=[
FinishTermChars=]
…
А в decodecards.ini:
[general]
usemask=1
TrackResultLog=
[mask]
card_mif=*
[cards.card_mif]
excludedprefix=
CardDecodeType=MASK
mask=hhhhhhhh
code=2
bitmask=$FFFFFFFF
В результате в TcpCardReader будет следующий результат:

ПРИМЕР 2. Прошивка для Z-2 USB. Читает только карты 13,56 МГц: Mifare. Прошивка актуальна для карт двойного стандарта (в один и тот же пластик вплавляют EM-Marine и Mifare), позволяет читать мультиформатному считывателю только один формат карт. Карта ISBC MIFARE Classic 1K.
В putty возвращается трэк:
Mifare[23D9C4C5] 217,50373 1K (0004,08)
No card
Настраивается по аналогии, как и в пример 1.
ПРИМЕР 3. Прошивка для Z-2 USB. Вывод в COM-порт код карты в формате, аналогичном Z-2 USB MF (для карт mifare). Версия: 240. Карта ISBC MIFARE Classic 1K.
В putty возвращается трэк:
Mifare[23D9C4C5] 1K (0004,08) 196,55587
No card
Если необходимо получить искомое значение 19655587, то в TcpCardReader.ini указать:
Prefix=;
Postfix=?
useDecodeCards=1
StartTermChars=]
FinishTermChars=
А в decodecards.ini:
[general]
usemask=1
TrackResultLog=
[mask]
card_mif=*
[cards.card_mif]
excludedprefix=
CardDecodeType=LAST8
code=2
В результате в TcpCardReader будет следующий результат:

Если необходимо получить искомое значение 601474245, что соответствует 23D9C4C5, то в TcpCardReader.ini указать:
…
Prefix=;
Postfix=?
useDecodeCards=1
StartTermChars=[
FinishTermChars=]
…
А в decodecards.ini:
[general]
usemask=1
TrackResultLog=
[mask]
card_mif=*
[cards.card_mif]
excludedprefix=
CardDecodeType=MASK
mask=hhhhhhhh
code=2
bitmask=$FFFFFFFF
В результате в TcpCardReader будет следующий результат:

ПРИМЕР 4. Прошивка для Z-2 USB. Вывод номера карты в формате W24(8цифр), без запятой между ними, без подавления первых нулей, без NoCard, перевод строки есть. (Десятиричный формат без nocard). Версия: 10.51.54.8. Карта ISBC MIFARE Classic 1K.
В putty возвращается трэк:
21750373
В TcpCardReader.ini не используем декодирование:
…
Prefix=;
Postfix=?
useDecodeCards=0
StartTermChars=
FinishTermChars=
…
В результате в TcpCardReader и shelter будет следующий результат:

ПРИМЕР 5. Для карт ISBC MIFARE Ultralight EV1 (7-байтный UID) настраивается по аналогии с рассмотренными примерами, за исключением следующих моментов:
В putty возвращается трэк:
Mifare[04DE4CDAA34084] UL (0144,00) 218,19678
No card
Если необходимо получить искомое значение 1370321573855364, что соответствует 04DE4CDAA34084, то TcpCardReader.ini и decodecards.ini настраивается по аналогии с рассмотренными примерами, но (ВАЖНО!!!) данное число (1370321573855364) не входит в диапазон integer и при прикреплении идентификатора будет возвращаться ошибка.
Чтобы ошибки не было необходимо получать искомое значение 21819678, либо настраивать decodecards.ini следующим образом:
[general]
usemask=1
TrackResultLog=
[mask]
card_mif=*
[cards.card_mif]
excludedprefix=
CardDecodeType=MASK
mask=*hhhhhhh*****
code=2
bitmask=$FFFFFFFF
В результате в TcpCardReader и shelter будет следующий результат:

Для считывателя Matrix-III RD-ALL настраивается аналогично, т.к возвращаемые трэки будут одинаковые.

Подключение HID-устройства (считывателя) с использованием утилиты TcpCardReader
Начиная с версии 1.27.0.1 утилиты TcpCardReader добавлена поддержка HID-устройств.
Поставка включает в себя следующий набор файлов:
KeyScan.dll
KeyScan.ini
Содержание файла KeyScan.ini:
[buffer]
; минимальное количество символов в коде, полученном от сканера
MinBufferSize=6
; Таймаут в миллисекундах между символами, приходящими со сканера
CharInterval=50
Для использования подключенного HID-устройства (В нашем случае использовался сканер штрих-кодов) необходимо в секции [READER] файла конфигурации tcpcardreader.ini прописать isKBReader=1.
После запуска TcpCardReader в области считывания должна появится надпись «Занят KBReader», что свидетельствует о подключении библиотеки KeyScan.dll, которая взаимодействует с HID устройством.

При считывании штрих-кода TcpCardReader получит трэк 46204837.

После получения трэка в TcpCardReader его можно обработать выше перечисленными способами.
Данный мануал является ознакомительным, в некоторых случаях алгоритм обработки карты будет различаться.
Удаление логов из базы данных
При длительном использовании ПО Shelter увеличивается размер БД, т.к. действия пользователей логируются и записываются в таблицы LOG$FIELDS и LOG$TABLES.
Для удаления логов из БД, сначала необходимо выполнить диагностику базы. Подключится к БД и запустить диагностику можно с помощью программы IBExpert (Рис. 1).

Рис. 1
После выполнения диагностики результаты можно посмотреть на вкладке «Tables» поля «Size» для таблиц LOG$FIELDS и LOG$TABLES (Рис. 2).

Рис. 2
Для удаления всех логов необходимо выполнить следующие скрипты:
1. Удаление логирования из таблицы LOG$FIELDS
delete from log$fields;
commit;
2. Удаление логирования из таблицы LOG$TABLES
delete from log$tables;
commit;
Для удаления логов за определенный период необходимо выполнить следующий скрипт:
delete from LOG$TABLES LT where LT.DATE_TIME < d2dbl('now') - 30;
delete from LOG$FIELDS LF where not LF.LOG_TABLES_ID in (select LT.ID from LOG$TABLES LT where LT.ID = LF.LOG_TABLES_ID);
commit;
После выполнения данного скрипта, в БД останутся логи за 30 дней, остальные будут удалены.
Для уменьшения размера БД необходимо сделать backup / restore.
Для автоматического удаления логов необходимо в «Планировщик заданий» Windows добавить простую задачу с выполнением .bat файла, рядом с котором должен быть файл script.sql.
Содержание .bat файла:
@rem Указать путь до isql.exe
@echo off
set isql="C:\Program Files (x86)\Shelter\Firebird\bin\isql.exe"
set sqlPath=%~dp0
set sqlFile=%sqlPath%script.sql
%isql% -input %sqlFile%
Содержание script.sql:
CONNECT 'localhost/3080:C:\_BASE\SHELTER.FDB' user 'ucs' PASSWORD 'ucs';
delete from LOG$TABLES LT where LT.DATE_TIME < d2dbl('now') - 30;
delete from LOG$FIELDS LF where not LF.LOG_TABLES_ID in (select LT.ID from LOG$TABLES LT where LT.ID = LF.LOG_TABLES_ID);
commit;