Приложение №8 Формулы
Например, для того чтобы разрешить использовать карты, которые раньше определялись маской 778=99999998=#### надо написать такое выражение:
=Numeric(IFF(Copy(Value, 5, 8) = "99999998", Copy(Value, 14, 4), "0"))
Если считается код, например 778=12345678=0102, то результатом вычисления будет 0, а если считается карта 778=99999998=1234, то результатом вычисления будет 1234. Если код карты после вычисления будет 0, то это значит, что карта не определена.
А. Функции и операции
Базовые операции
Арифметические 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]
Работа с переменными
Установка x:=formula (or value);
Уничтожение FreeVar(s); //s = имя переменной
Проверка существования: ExistVar(s) // s = имя переменной
Преобразование из одного типа в другой
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)
Математические операции
x Div y целочисленное деление числа x на число y
x Mod y модуль от целочисленного деления числа x на число y
Математические функции
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
Операции со строками
s || t конкатенация строк
s Like t определяет есть ли подстрока в строке (%,_) "www.tsoft.szm.com" Like "%szm%" = "1"
s Wildcard t определяет подходит ли маска (*,?) "jan.tungli@seznam.cz" Wildcard "*@*.?z" = "1"
Функции работы со строками
Length(s) возвращает длину строки
Pos(t, s) возвращает позицию вхождения подстроки t в строке s
Trim(s) удаляет пробельные символы в начала и в конце cтроки
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, [1/0=ReplaceAll, [1/0=IgnoreCase]]) заменяет в строке s подстроку t на подстроку v, если указан параметр ReplaceAll=1, то заменяет все найденные подстроки t на подстроку v, если задан параметр IgnoreCase=1, то при поиске подстроки t регистр учитываться не будет.
Функции работы с датой и временем
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 возвращает текущую дату и время
Пример 1.
Задача: получить на выходе номер карты в формате АAABBBBB, где ААА - номер серии (1 байт), BBBBB - номер карты в серии (2 байта). Например, на карте нанесен номер 120.00001, где 120 - номер серии, 00001 - номер карты, касса должна обратиться к CRM, используя номер 12000001
Формула:
=V1:=String(BaseNum(Copy(Value, 7, 2),16)); V2:=String(BaseNum(Copy(Value,9,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)
Пример 2.
Задача: объединить 2 группы карт с разными масками. Например, карты
- 42 (787=49995=42=3315170=85)
- 1 (778=49995=0001=8543257=951).
Формула:
=V1:=Value;V1:=Delete(V1, 1, 10);result:=Numeric(IFF(Copy(Value, 5, 5) = "49995", Copy(V1, 1, Pos("=", V1) - 1), "0"))