====== Константи и функции за формули и параметри за дата и час ======
===== Константи =====
**CURRENT_DATE, DATE, TODAY** - връща текущата дата с час 00:00:00.000 като дата и час (DM_DATETIME) \\
**CURRENT_TIME, TIME** - връща текущия час (без дата) като час (DM_TIME) \\
**CURRENT_TIMESTAMP, NOW** - връща текущата дата и час като дата и час (DM_DATETIME) \\
**YESTERDAY** - връща вчерашната дата с час 00:00:00.000 като дата и час (DM_DATETIME) \\
**TOMORROW** - връща утрешната дата с час 00:00:00.000 като дата и час (DM_DATETIME) \\
**CURRENT_WEEK_START** - връща първия ден от текущата седмица с час 00:00:00.000 като дата и час (DM_DATETIME) \\
**CURRENT_WEEK_END** - връща последния ден от текущата седмица с час 23:59:59:999 като дата и час (DM_DATETIME) \\
**CURRENT_MONTH_START** - връща първия ден от текущия месец с час 00:00:00.000 като дата и час (DM_DATETIME) \\
**CURRENT_MONTH_END** - връща последния ден от текущия месец с час 23:59:59:999 като дата и час (DM_DATETIME) \\
**CURRENT_YEAR_START** - връща първия ден от текущата година с час 00:00:00.000 като дата и час (DM_DATETIME) \\
**CURRENT_YEAR_END** - връща последния ден от текущата година с час 23:59:59:999 като дата и час (DM_DATETIME) \\
**CURRENT_DAY_START** - връща началото на текущата дата с час 00:00:00.000 като дата и час (DM_DATETIME) \\
**CURRENT_DAY_END** - връща края на текущата дата с час 23:59:59:999 като дата и час (DM_DATETIME) \\
**LAST_WEEK_START** - връща първия ден от предишната седмица с час 00:00:00.000 като дата и час (DM_DATETIME) \\
**LAST_WEEK_END** - връща последния ден от предишната седмица с час 23:59:59:999 като дата и час (DM_DATETIME) \\
**LAST_MONTH_START** - връща първия ден от предишния месец с час 00:00:00.000 като дата и час (DM_DATETIME) \\
**LAST_MONTH_END** - връща последния ден от предишния месец с час 23:59:59:999 като дата и час (DM_DATETIME) \\
**LAST_YEAR_START** - връща първия ден от предишната година с час 00:00:00.000 като дата и час (DM_DATETIME) \\
**LAST_YEAR_END** - връща последния ден от предишната година с час 23:59:59:999 като дата и час (DM_DATETIME) \\
**NEXT_WEEK_START** - връща първия ден от следващата седмица с час 00:00:00.000 като дата и час (DM_DATETIME) \\
**NEXT_WEEK_END** - връща последния ден от следващата седмица с час 23:59:59:999 като дата и час (DM_DATETIME) \\
**NEXT_MONTH_START** - връща първия ден от следващия месец с час 00:00:00.000 като дата и час (DM_DATETIME) \\
**NEXT_MONTH_END** - връща последния ден от следващия месец с час 23:59:59:999 като дата и час (DM_DATETIME) \\
**NEXT_YEAR_START** - връща първия ден от следващата година с час 00:00:00.000 като дата и час (DM_DATETIME) \\
**NEXT_YEAR_END** - връща последния ден от следващата година с час 23:59:59:999 като дата и час (DM_DATETIME)
==== Функции ====
**ROUND** - закръгля зададеното дробно число до цяло число (половинките се закръглят нагоре за положителните числа и надолу за отрицателните)\\
ROUND(4.5) = 5 \\
ROUND(-4.5) = -5
**ROUND1-10** - закръгля зададеното дробно число до посочения брой знаци след дес. точка \\
ROUND2(4.6666) = 4.67
**ROUNDTOCONFIG** - закръгля зададеното дробно число до броя знаци след дес. точка, посочен в конфигурацията (поле ROUND_DIGITS) \\
ROUNDTOCONFIG(4.6666) = 4.67, ако в конфигурацията е зададена точност от 2 знака след дес. точка
**INC_CURRENT_DATE, INC_CURRENT_DAY** - добавя към текущата дата и час зададения брой дни (цяло число) и връща резултата като дата и час (DM_DATETIME) \\
INC_CURRENT_DATE(3) = 21.11.2019 08:00:00, ако текущата дата и час е 18.11.2019 08:00:00
**INC_CURRENT_WEEK** - добавя към текущата дата и час зададения брой седмици (цяло число) и връща резултата като дата и час (DM_DATETIME) \\
INC_CURRENT_WEEK(2) = 02.12.2019 08:00:00, ако текущата дата и час е 18.11.2019 08:00:00
**INC_CURRENT_MONTH** - добавя към текущата дата и час зададения брой месеци (цяло число) и връща резултата като дата и час (DM_DATETIME). Деня от месеца се запазва, като ако резултатния месец съдържа по-малко дни, деня се установява на последния ден от резултатния месец. \\
INC_CURRENT_MONTH(1) = 18.12.2019 08:00:00, ако текущата дата и час е 18.11.2019 08:00:00 \\
INC_CURRENT_MONTH(3) = 29.02.2020 08:00:00, ако текущата дата и час е 30.11.2019 08:00:00
**INC_CURRENT_YEAR** - добавя към текущата дата и час зададения брой години (цяло число) и връща резултата като дата и час (DM_DATETIME). Деня от месеца се запазва, като ако резултатния месец съдържа по-малко дни, деня се установява на последния ден от резултатния месец. \\
INC_CURRENT_YEAR(1) = 18.11.2020 08:00:00, ако текущата дата и час е 18.11.2019 08:00:00 \\
INC_CURRENT_YEAR(1) = 28.02.2021 08:00:00, ако текущата дата и час е 29.02.2020 08:00:00
**INC_CURRENT_HOUR** - добавя към текущата дата и час зададения брой часове (цяло число) и връща резултата като дата и час (DM_DATETIME) \\
INC_CURRENT_HOUR(3) = 19.11.2019 01:00:00, ако текущия час е 18.11.2019 22:00:00
**INC_CURRENT_MINUTE** - добавя към текущата дата и час зададения брой минути (цяло число) и връща резултата като дата и час (DM_DATETIME) \\
INC_CURRENT_MINUTE(90) = 19.11.2019 00:30:00, ако текущия час е 18.11.2019 23:00:00
**INC_CURRENT_SECOND** - добавя към текущата дата и час зададения брой секунди(цяло число) и връща резултата като дата и час (DM_DATETIME) \\
INC_CURRENT_SECOND(5400) = 19.11.2019 00:30:00, ако текущия час е 18.11.2019 23:00:00
**GET_CURRENT_DATE** - добавя към текущата дата (без час) зададения брой дни (дробно число) и връща резултата като дата и час (DM_DATETIME) \\
GET_CURRENT_DATE(3.5) = 21.11.2019 12:00:00, ако текущата дата и час е 18.11.2019 03:00:00
**INC_CURRENT_TIME, GET_CURRENT_TIME** - добавя към текущия час (без дата) зададения брой часове (дробно число) и връща резултата като час (DM_TIME) \\
INC_CURRENT_TIME(3.5) = 11:50:00, ако текущия час е 08:20:00
**INC_CURRENT_DATETIME, INC_CURRENT_TIMESTAMP, GET_CURRENT_TIMESTAMP** - добавя към текущата дата и час зададения брой дни (дробно число) и връща резултата като дата и час (DM_DATETIME) \\
INC_CURRENT_DATETIME(3.5) = 21.11.2019 12:00:00, ако текущата и час е 18.11.2019 00:00:00
==== Допълнителни функции ====
1. IsFieldValueNull(AFieldIndex: Integer) - връща 1 ако е null или 0 \\
2. IsNull - аналогична на IsFieldValueNull \\
3. ShowFieldName(AFieldIndex: Integer) - като грешка ще покаже кое е името на полетo зад индекс AFieldIndex
Ако някой иска да зачисти поле трябва да напише:
FIELD_NAME__CLEAR - където FIELD_NAME е името на полето и завършва с "__CLEAR"
Аналогично - "__SETNULL"
Aко тази променлива има стойност 1 ще се зачисти полето иначе няма да се случи нищо.
Ако имаме променлива от вида COPYFROMFIELD__FIELD1__TOFIELD__FIELD2 и има стойност 1,
ще извърши копиране на стойността от поле с име FIELD1 в поле с име FIELD2.
Примерни формули:
{Ако поле DISCNT_PCT_WO_VAT = 0 - ще се зачисти (поставя се null) поле DISCNT_VALUE_WO_VAT}
DISCNT_VALUE_WITH_VAT := round3(DISCNT_VALUE_WITH_VAT)
if DISCNT_PCT_WO_VAT = 0 then
DISCNT_VALUE_WO_VAT__CLEAR := 1
if DISCNT_PCT_WITH_VAT = 0 then
DISCNT_VALUE_WITH_VAT__SETNULL := 1
{При надвишаване на количество 1 се копира ППT1 в ППT4 !}
if QTY1 > 10 then
COPYFROMFIELD__USER_FIELD_STRING1__TOFIELD__USER_FIELD_STRING4 := 1
{Ако се промени ППT2 да покаже с грешка кое е 4-то поле в дейтасета}
ShowFieldName(4)
{Ако 4-то поле DISCNT_PCT_WO_VAT е празно да се постави празна стойност}
X := IsNull(4)
if X = 1 then DISCNT_VALUE_WO_VAT__CLEAR := 1 else DISCNT_VALUE_WO_VAT := 0
[[documenti:obsti:tabove_nastrojki_na_targ.documenti:td_formuli|Настройки на ТД/таб Формули]] \\
[[spravki_new:osnovni_pol#Параметри|Справки - Източници, изгледи и параметри]]