Например, для того чтобы разрешить использовать карты, которые раньше определялись маской 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"))