AdvancedExpression е характеристика на калкулирано поле в отпечатките. Представлява формулата на калулираното поле. Ако AdvancedExpression не е попълненo формулата от Expression се използва за изчисляване на стойността на калкулираното поле.
Формулите в това поле могат да ползват редове и полета от различни таблици, например ако калкулираното поле е в таблица "Редове на продажби" формулата може да е
"[Parent.Customer_Id_Text]",
което ще върне името на клиента от таблица "Продажби".
Също ако имаме подтаблица "Продукти" може да напишем "[Related: Продукти.Product_Name]".
Операции също са позволени: "[Quantity] * [Unit_Price]".
Поддържат се и агрегатни функции.
Например ако в хедъра на отпечатката използваме калкулирано поле прибавено към таблица "Продажби"
SUM('Редове на продажби', '[Quantity]') - това ще сметне сума от количеството от редовете.
Като параметър на агрегатна функция може да се използва израз:
SUM('Редове на продажби', '[Quantity] * [Unit_Price]')
Параметрите на агрегатната функция трябва да се записват в единични кавички.
Първия параметър е таблицата в/у която се изпълнява агрегатната функция.
Втория е израз, който ще се изчислява за всеки ред от таблицата.
Има и втори вариант на функция SUM - SUM2.
SUM2 има трети параметър, който е филтриращо условие:
Sum2('Редове на продажби', '[Quantity]', '[Related: Продукт.Part_Number] = "00011" | [Related: Продукт.Part_Number] = "0001"')
Оператора | означава ИЛИ, & означава И.
Агрегатните функции са Sum, Sum2, Avg, Avg2, Min, Min2, Max, Max2, Count, Count2, First, Last.
Функции First и Last имат 4 параметъра:
1 - път до таблицата
2 - израз също като в SUM,AVG,COUNT,MIN и МAX.
3 - филтриращо условие като в SUM2,AVG2,COUNT2,MIN2,MAX2.
4 - сортиране - списък с полета, по които да е сортирана заявката.
FIRST('[Редове на продажби]', '[Line_No]', '', '[Related: Продукт.Product_Name], [Line_Amount] DESC')
Има и няколко помощни функции:
IIF(<израз условие>, <израз, който се изчислява ако условието е изпълнено>, <израз за неизпълнено условие>)
пример: IIF( [Requested_Quantity] <> '', [Requested_Quantity], [Quantity])
ISNULL(<израз който се проверява дали е празна стойност>, <израз който се връща при празен първи израз>)
пример: ISNULL([Requested_Quantity], [Quantity])
Функции за обработка на дати
Датите се представят като текст във формат YYYYMMDDHHmmss. Пример: 20120105103045 - 5ти Януари, 2012г 10:30ч. и 45 секунди.
TODAY() - връща днешна дата
пример: IIF([Документ.Document_Date] < TODAY(), 'Стар документ!', 'Документа е наред')
NOW() - връща текущо време до секунда.
ADDDAYS(<дата>,<брой дни>) - прибавя или изважда дни към съответната дата. Броят дни може да не е цяло число.
DATEADD(<дата>, <тип време>, <време за добавяне - число>) - прибавя времеви отрязък към съответната дата
<тип време> :
'year' или 'y' - година. Последния параметър е цяло число, което представлява брой години, които ще се добавят.
'month' или 'm' - месец, цяло число - брой месеци
'day' или 'd' - ден, десетично число - дни. Пример DATEADD(Document_Date, 'd', 1.5)
'hour' или 'h' - час, десетично число.
'minute', 'min' или 'mi' - минута, десетично число.
'second', 'sec' или 's' - секунда, десетично число.
DATEPART(<дата>, <тип време>) - връща указаната част от датата като цяло число. Пример DATEPART(Document_Date, 'month')
DATEDIFF(<дата1>, <дата2>) - връща разликата в дни между дата1 и дата2. Пример DATEDIFF(TODAY(), Document_Date)
Функции за обработка на числа
ROUND(number, decimals) - закръгля до посочения знак: закръгля по начина ROUND(7.5, 0) = 8, ROUND(7.4,0) = 7
MOD(num1, num2) - остатъка по подобие на c# % (modulus) оператора: MOD(5, 2) = 1; MOD(-5, 2) = -1; MOD(5.0, 2.2) = 0.6; MOD(-5.2, 2.0) = -1.2
INT(number) - отрязва числата след десетичната запетая: INT(7.6) = 7
DECIMAL(arg) - преобразува подадения параметър в число
Функции за обработка на текст
STRING(arg) - преобразува подадения параметър в текст
STRLEN(text) - връща броя символи, от който е съставен подадения текст
INDEXOF(<търсен текст>, <текст>) - връща позицията на <търсен текст> в <текст>. Ако търсения текст не се съдържа в <текст> върнатата стойност е -1. Позицията започва от НУЛА, т.е. първия символ в текста е на позиция 0. Пример: INDEXOF('вгд', 'абвгдеж') = 2.
SUBSTR(text, start, length) - връща част от текст започваща на позиция start и дълга length символа. Ако параметъра length е число по-малко от нула, то върнатата стойност е под-текста от позиция старт до края на текста. Пример: SUBSTR('абвгдеж', 2, 3) = 'вгд'.
Оператори:
Има три типа операции:
1. Операции с числа: + (събиране); - (изваждане); * (умножение); / (деление);
2. Операции с текст: ^ (слепяне на два текста)
пример: 'Име: '^[Product_Name] - резултатът е "Име: Продукт 1"
3. Операции за условие: = (проверка за равенство); <> (проверка за различно); > >= < <= (по-голямо, по-голямо или равно, по-малко, по-малко или равно); & (и); | (или); ! (отрицание)
Проверка за празна стойност (NULL) може да се направи така: [Requested_Quantity] = ''
Типа на полетата във формулата не е от значение за операциите.
Всяка операция преобразува стойността на участващите страни в нея до типа, от който е резултата на операцията.
Ако преобразуването на текст в число не е възможно, защото текста съдържа невалидни символи (например буква) преобразуването ще върне числото 0 (нула).
Преобразуването до логическа стойност (с валидни стойности ДА или НЕ) става по следния начин:
- ако стойността е число или текст, който може да се преобразува число логическата стойност ще е ДА само ако числото е различно от нула.
- ако стойността не може да се преобразува в число резултата е НЕ, ако стойността е празен стринг или NULL и ДА във всички останали случаи.
Типа на крайния резултат зависи от FieldType на калулираното поле. По подразбиране е текст (string).
0 Коментари