Advanced Expression в отпечатките

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 от 0 считат материала за полезен
Имате още въпроси? Подаване на заявка

0 Коментари

Влезте в услугата, за да оставите коментар.
Powered by Zendesk