Контроль логической даты - LOGDATE.DLL
Вводная информация
Кассовый сервер самостоятельно не производит контроль кассовой даты на соответствие физической дате, что иногда приводит к искаженным отчетам в системе R-Keeper. Нижеописанная процедура позволяет производить, начиная с кассовой версии 6.61 и выше, автоматический контроль даты и, в зависимости от настроек и категории сотрудника, выполнять корректировку даты.
Определение терминов
- Логическая дата - внутренняя дата, определенная в системе R-Keeper (устанавливается в таблице SYSTEM.DB с помощью утилиты SETCODAT.EXE). Изменение логической даты происходит при закрытии кассового дня.
- Физическая дата - реальная дата, которая на станции определяется значением системных часов BIOS. Если кассовый сервер выделенный, то физическая дата определяется системной датой олерационной системы.
Примечание: При начале рабочего кассового дня логическая и физическая даты должны совпадать (за исключением некоторых случаев). Если работа продолжается после 24:00, то логическая дата остается неизменной, тогда как физическая меняеться.
- Битовая маска — определённые данные, которые используются для выбора битов из двоичной строки или числа. Например, для получения значения пятого бита (считая слева) числа 10111011 нужно использовать маску 00001000 и применить операцию побитового алгебраического «И» (^ - конъюнкция). В результате получится: 10111011 ^ 00001000 = 00001000
Настройка процесса контроля
Для настройки контроля скопируйте библиотеку LOGDATE.DLL (можно взять на фтп dealers/r-keeper/Tools/LogicDate/LOGDATE.DLL) на рабочую станцию в директорию RKCLIENT\EXTENS. Далее пропишите в конфигурационном файле RKEEPER6.INI параметр:
LogDate_Action = <FLAGS>
- где <FLAGS> – битовая маска, значение которой определяется следующими битами (считая справа):
- 0-й бит - определяет, запретить {1} или разрешить {0} дальнейшую загрузку при неравенстве дат без подтверждения менеджера
- 1-й бит - определяет, запретить {1} или разрешить {0} дальнейшую загрузку при неравенстве дат при любых условиях
- 2-й бит - определяет, разрешить {1} или запретить {0} приравнять дату любому сотруднику
- 3-й бит - определяет, разрешить {1} или запретить {0} менеджеру приравнивать дату
- 4-й бит - определить, разрешить {1} или запретить {0} сдвиг логической даты назад
Важно! в параметре LogDate_Action указывается значение битовой маски в десятичном виде!
Особенности использования
- Если в системе есть оплаченные чеки, то процесс контроля игнорируется
- Если настройки позволяют изменить дату, то появляется окно «Исправить лог дату» - см. Рис.1. Если настройки не позволяют менять дату, но при этом надо перевести дату назад, а в настройках такая возможность не предусмотрена, то окно не появляется на экране
- Если настройки не позволяют загружать систему при несоответствии логической и физической даты, то при нажатии на кнопку «Продолжать» ничего не поизойдет.
Правила и примеры использования
Как отмечалось выше, значение параметра LogDate_Action должно быть указано в десятичном виде. Для этого, сначала мы формируем битовую маску в виде двоичного числа (подставляем значущие биты на свои позици) и переводим двоичное значение в десятичное - сделать это можно с помощью стандартного калькулятура Windows или путем несложных вычислений (более подробно о системах счисления здесь)
Рассмотрим небольшой пример. Допустим, надо организовать контроль логической даты, при котором необходимо запретить загружать систему при неравенстве дат без подтверждения менеджера, при этом разрешить менеджеру приравнять логическую дату к физической только в том случае, если логическая дата меньше физической - иначе запретить загрузку.
Для формирования итоговой битовой маски мы должны подставить следющие значение (начиная справа!):
- 0-й бит - значение 1 (запретить загрузку системы без подтверждения менеджера)
- 1-й бит - значение 0 (разрешить загрузку системы при неравенстве дат при любых условиях, т.к. первое условие перекрывает его)
- 2-й бит - значение 0 (запретить приравнивать дату любому сотруднику)
- 3-й бит - значение 1 (разрешит менеджеру приравнять дату)
- 4-й бит - значение 0 (запрещаем сдвигать логическую дату назад, т.е приравнивание разрешено только вперед)
Получаем следующее значение битовой маски в двоичном виде: 01001, что соответствует десятичному числу 9
Таблица: Описание возможных значений параметра LogDate_Action
Битовая маска | Десятичное значение | Описание действия |
00001 | 1 | Разрешает загрузить систему при неравенстве дат только с подтверждением менеджера, но приравнять дату нельзя |
00010 | 2 | Запрещает загрузить систему при неравенстве дат при любых условиях и запрещает приравнять дату также при любых условиях |
00011 | 3 | Не имеет смысла, т.к. содержит взаимоисключающие условия |
00100 | 4 | Разрешает загрузить систему при неравенстве дат и приравнять дату (только вперед) любому сотруднику |
00101 | 5 | Разрешает загрузить систему при неравенстве дат только с подтверждением менеджера или приравнять дату (только вперед) может любой сотрудник |
00110 | 6 | Запрещает загрузить систему при неравенстве дат, но приравнять дату (только вперед) может любой сотрудник |
00111 | 7 | Не имеет смысла, т.к. содержит взаимоисключающие условия |
01000 | 8 | Разрешает загрузить систему при неравенстве дат и позволяет приравнять дату (только вперед) с подтверждением менеджера |
01001 | 9 | Разрешает загрузить систему при неравенстве дат только с подтверждением менеджера и приравнять дату (только вперед) только с подтверждением менеджера |
01010 | 10 | Запрещает загрузить систему при неравенстве дат при любых условиях, но приравнять дату (только вперед) можно только с подтверждением менеджера |
01011 | 11 | Не имеет смысла, т.к. содержит взаимоисключающие условия |
01100 | 12 | Разрешает загрузку системы при неравенстве дат без подтверждения менеджера и позволяет приравнять дату (только вперед) любому сотруднику |
01101 | 13 | Разрешает загрузку системы при неравенстве дат при подтверждении менеджера и позволяет приравнять даты (только вперед) любому сотруднику |
01110 | 14 | Запрещает загрузку системы при неравенстве дат при любых условиях и позволяет приравнять дату (только вперед) любому сотруднику |
01111 | 15 | Не имеет смысла, т.к. содержит взаимоисключающие условия |
10000 | 16 | Не имеет особого смысла, т.к. не заданы разрешения для возможности приравнивания дат. Просто предупреждает о несоответствии дат |
10001 | 17 | Не имеет особого смысла, т.к. не указаны полномочия сотрудников на приравнивание даты. Можно лишь загрузить систему с разными датами с подтверждением менеджера. |
10010 | 18 | Запрещает загрузить систему при неравенстве дат при любых условиях и запрещает приравнять дату также при любых условиях. Аналогична значению 2 |
10011 | 19 | Не имеет смысла, т.к. содержит взаимоисключающие условия |
10100 | 20 | Разрешает загрузить систему с разными датами и приравнять дату (в любую сторону) любому сотруднику |
10101 | 21 | Разрешает загрузить систему с разными датами только с подтверждением менеджера или приравнять дату (в любую сторону) может любой сотрудник. Не рекомендуется использовать для предотвращения злоупотреблений! |
10110 | 22 | Запрещает загрузить систему с разными датами, но приравнять дату (в любую сторону) может любой сотрудник. Не рекомендуется использовать для предотвращения злоупотреблений! |
10111 | 23 | Не имеет смысла, т.к. содержит взаимоисключающие условия |
11000 | 24 | Разрешает загрузить систему с разными датами и/или приравнять дату (в любую сторону) с подтверждением менеджера |
11001 | 25 | Запрещает загрузить систему с разными датами без подтверждения менеджера и приравнять дату (в любую сторону) можно только с подтверждением менеджера |
11010 | 26 | Запрещает загрузить систему с разными датами, но приравнять дату (в любую сторону) может только менеджер |
11011 | 27 | Не имеет смысла, т.к. содержит взаимоисключающие условия |
11100 | 28 | Разрешает загрузить систему при неравенстве дат при любых условиях и позволяет приравнять дату (в любую сторону) любому сотруднику. Не рекомендуется использовать для предотвращения злоупотреблений! |
11101 | 29 | Запрещает загрузить систему с разными датами без подтверждения менеджера, но позволяет приравнять дату (в любую сторону) любому сотруднику. Не рекомендуется использовать для предотвращения злоупотреблений! |
11110 | 30 | Запрещает загрузку системы при неравенстве дат при любых условиях, но позволяет приравнять дату (в любую сторону) любому сотруднику. Не рекомендуется использовать для предотвращения злоупотреблений! |
11111 | 31 | Запрещает загрузить систему при неравенстве дат при любых условиях, но позволяет приравнять дату (в любую сторону) любому сотруднику. Не рекомендуется использовать для предотвращения злоупотреблений! |