====== Константи и функции за формули и параметри за дата и час ====== ===== Константи ===== **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#Параметри|Справки - Източници, изгледи и параметри]]