Введение

В системе R-Keeper CRM возможны следующие варианты добавления (или поиска) карты в Редакторе карт:

1. В ручном режиме (справочник "Выпуск карт");

2. В полуручном режиме (с ипользованием COM-считывателя карт).

Для реализации варианта №2 необходимо подключить считыватель к машине, на которой происходит работа в редакторе карт и настроить данный считыватель в конфигураторе(рис.1), а также настроить маску (рис.2). Для примера, использовался бесконтактный считыватель EM-Marine.

Рис.1

Рис.2

Формула необходима, чтобы корректно обработать данные, записанные на карте. Примеры формул описаны в пункте 2 данной статьи.

1. Функции и операции

1.1. Базовые операции

Операция Реализация
Арифметические  x + y , x - y , x * y, x / y, x ^ y
Сравнение  x > y, x < y, x >= y, x <= y, x = y, x <> y
Сравнение строк  s > t, s < t, s >= t, s <= t, s = t, s <> t
Логические  (1/0) a AND b, a OR b, NOT(a), x in [...] // Пример: 12 in [22, 12, 3]

1.2. Работа с переменными

Операция Формула
Установка  x:=formula (or value);
Уничтожение  FreeVar(s); //s = имя переменной
Проверка существования  ExistVar(s) // s = имя переменной

1.3. Преобразование из одного типа в другой

Функция Пояснение Пример
Logic(x)      Переводит значение x в логический тип (0 или 1)   Logic(0) = 0 или Logic(2) = 1
Numeric(s)  Переводит значение из строки в цифровой        Numeric("10.23") = 10.23
String(x)    Переводит значение из числа в строку      String(10.23) = "10.23"
Char(x)     Переводит число в символ    Char(65) = "A"
Ascii(s)   Переводит символ в число   Ascii("A") = 65
Eval(f)    Вычисляет формулу     Eval("2+1+4") = 7
NumBase(x, base)   Переводит число в строку в другой системе исчисления, где base - система исчисления от 2 до 16   NumBase(254, 16) = "FE"
BaseNum(s, base)   Функция обратная функции NumBase(x, base)  

1.4. Математические операции

x Div y             целочисленное деление числа x на число y
x Mod y           модуль от целочисленного деления числа x на число y

1.5. Математические функции

Abs(x)        возвращает абсолютное значение числа x
Frac(x)       возвращает дробную часть числа x
Trunc(x)    отбрасывает дробную часть числа x
Sign(x)      определяет знак числа Sign(0) = 0; Sign(2) = 1; Sign(-2) = -1
Sqrt(x)       возвращает квадратный корень числа x
Ln(x)          возвращает натуральный логарифм числа x
Exp(x)        возвращает экспоненту степени x
Cos(x)       возвращает косинус числа x
Ctg(x)        возвращает котангенс числа x
Ch(x)         возвращает гиперболический косинус числа x
Cth(x)        возвращает гиперболический котангенс числа x
Sin(x)        возвращает синус числа x
Sh(x)         возвращает гиперболический синус числа x
Tg(x)         возвращает тангенс числа x
Th(x)         возвращает гиперболический тангенс числа x
ArcSin(x)     возвращает арксинус числа x
ArcCos(x)   возвращает арккосинус числа x
ArcTg(x)      возвращает арктангенс числа x
ArcCtg(x)    возвращает аркотангенс числа x
MaxVal(x [,y, ...])        возвращает максимальное число из списка MaxVal(1,2,3,4,0,7+2,2) = 9
MinVal(x [,y, ...])         возвращает минимальное число из списка MinVal(1,2,3,4,0,-5,2) = -5
SumVal(x [,y, ...])       возвращает сумму списка SumVal(1,2,3,4,0,7,2) = 19
AvgVal(x [,y, ...])         возвращает среднее значение чисел из списка AvgVal(1,2,3,4,0,7,2) = 2.714

1.6. Операции со строками

s || t                    конкатенация строк
s Like t              определяет есть ли подстрока в строке (%,_)               "www.tsoft.szm.com" Like "%szm%" = "1"
s Wildcard t      определяет подходит ли маска (*,?)                                 "jan.tungli@seznam.cz" Wildcard "*@*.?z" = "1"

1.7. Функции работы со строками

Length(s)               возвращает длину строки
Pos(t, s)                 возвращает позицию вхождения подстроки t в строке s
Trim(s)                   удаляет пробельные символы в начала и в конце строки
TrimLeft(s)            удаляет пробельные символы в начале строки
TrimRight(s)         удаляет пробельные символы в конце строки
Upper(s)               переводит строку в верхний регистр
Lower(s)               переводит строку в нижний регистр
Copy(s, x, [y])        копирует из строки s символы с позиции x, если задано значение y, то копирует только y символов
CopyTo(s, x, [y])   копирует из строки s символы с позиции x, если задано значение y, то копирует только до символа в позиции y
Delete(s, x, [y])     удаляет из строки s символы с позиции x, если задано значение y, то удаляет только y символов
Insert(s, t, x)         вставляет в строку s подстроку t в позиции x
IFF(a, s, t)             ветвление, если a>=1 возвращается значение s иначе - t
Replace(s, t, v,              заменяет в строке s подстроку t на подстроку v, 
[1/0=ReplaceAll,           если указан параметр ReplaceAll=1, то заменяет все найденные подстроки t на подстроку v, 
[1/0=IgnoreCase]])       если задан параметр IgnoreCase=1, то при поиске подстроки t регистр учитываться не будет

1.8. Функции работы с датой и временем

Year(s)         возращает год               Year("2008/03/20") = 2008
Month(s)      возращает месяц         Month("2008/03/20") = 3
Day(s)           возращает день          Day("2008/03/20") = 20
WeekDay(s)        возращает день недели                 WeekDay("2008/03/20") = 4
Hour(s)            возращает час                                       Hour("23:55:34") = 23
Minute(s)        возращает минуты                                Minute("23:55:34") = 55
Sec(s)              возращает секунды                              Sec("23:55:34") = 34
StrToStamp(d)         преобразует строковое представление даты и времени в числовое
StampToStr(x)          преобразует числовое представление даты и времени в строковое
StampToDateStr(x) преобразует числовое представление даты встроковое
StampToTimeStr(x) преобразует числовое представление времени в строковое
Date          возвращает текущую дату
Time         возвращает текущее время
Now          возвращает текущую дату и время

2. Примеры формул

Пример 1. Нужно настроить использование карт, которые раньше определялись маской 778=99999998=####

В строке формула в конфигураторе (см. рис.1) надо написать такое выражение:     =Numeric(IFF(Copy(Value, 5, 8) = "99999998", Copy(Value, 14, 4), "0"))

Если с карты считается код, например 778=12345678=0102, то результатом вычисления будет 0, а если считается код 778=99999998=1234, то результатом вычисления будет 1234.
Если код карты после вычисления будет 0, то это значит, что карта не определена.
 
Ниже два примера для преобразования данных с карт бесконтактными считывателями.
Пример 2. Использование сложных формул. Вычисление идет слева направо.
=v1:=Pos("] ",Value);v2:=Copy(Value,v1+2,255);v1:=Pos(",",v2); v3:=Copy(v2,1,v1);v4:=Copy(v2,v1+1,255);Numeric(v3+v4)
Пример 3. Преобразование шестнадцатиричного вида в десятичный.
=V1:=String(BaseNum(Copy(Value, 1, 2), 16));V2:=String(BaseNum(Copy(Value,3,4), 16));V2:=IFF(Length(V2) < 5, "0"||V2, V2);V2:=IFF(Length(V2) < 5, "0"||V2, V2);V2:=IFF(Length(V2) < 5, "0"||V2, V2);V2:=IFF(Length(V2) < 5, "0"||V2, V2);result:=Numeric(V1 || V2)
Маска: 778=199999999=########

3. Работа со считывателем СРЧ-125 фирмы UCS

Пример считывателя и карты.

Рис.3

Настраиваем в конфигураторе считываетель (указываем № COM-порта, скорость и код организации (необязательно), см.рис.4) и маску (см. рис. 5).

Рис.4 Настройка считывателя

Прописываем маску в виде формулы, например: =V:=Value;V:=Delete(V,1,Pos("=",V));V:=Delete(V,1,Pos("=",V));result:=Numeric(V) или маски, например: 778=199990099=#######.

Данная формула выделяет подстроку (после 2-го знака "=") в строке (параметр Message** в лог-файле) после преобразования данных с карты, т.е. возвращает номер карты. При применении формулы код организации(см.рис.4) можно не указывать. 

Маска так же возвращает номер карты, но число знаков "#" должно соответствовать числу цифр в серии карт (см.рис.3, первая группа цифр).

Проанализировать работу драйвера можно по записям в лог-файле iod_MCR_Serial.01.log после прикладывания карты к считывателю при запущенном Редакторе карт.

14.05.2014 15:23:23.355>       Enable Reader
14.05.2014 15:23:24.261>          Buffer : 750=2364000162753731310                              //  прошито на карте (можно проверить с помощью утилиты HyperTerminal)
14.05.2014 15:23:24.261>          Message : 778=199990099=1702866                            //  ** 199990099 - код организации (прописывается в свойствах драйвера, см.рис.4);  1702866 - номер карты (результат преобразования 750=2364000162753731310)
 

Рис.5 Настройка маски

4. Работа со считывателем RFID RDM530

Для данного устройства написан специальный драйвер (прикреплен к статье). Для работы данного считывателя достаточно подкинуть данный драйвер и настроить в конфигураторе маску =Numeric(Value)

ВложениеРазмер
iod_mcr_serial_mifare_14443.7z420.82 КБ