> For the complete documentation index, see [llms.txt](https://leossnet.gitbook.io/jetcalc/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://leossnet.gitbook.io/jetcalc/raschetnaya-sistema/funktsii.md).

# 4.2. Функции

Расчетная система **JetCalc** поддерживает следующие группы функций:

* математические функции
* условные функции;
* функции сравнения;
* функции проверки контекста;
* функции суммирования;
* функции фильтрации;
* функции перемещения по дереву объектов учета;
* функции обработки тегов;
* функции атрибутов ячеек;
* логические функции;

### Математические функции

#### round - функция округления до целого значения

Функция округляет до целых первичное значение либо результата вычисления формулы:

| round ( *число \| формула* ) |
| ---------------------------- |

Пример:

`round ( @SUMMA? / @KOL? )`

Для округления значения до определенного количества знаков после запятой, можно воспользоваться следующим шаблоном:

| round ( *формула \* 10^n* ) / 10^n |
| ---------------------------------- |

Пример с округлением до двух знаком после запятой:

`round ( @SUMMA? / @KOL? * 100 ) / 100`

### Условные функции

#### **check - функция условного перехода**

Функция предоставляет возможность выбора вычисляемой формулы в зависимости от результата проверки некоторого условия. Синтаксис функции **check**:

| **check** ( *условие : формула1 \[; формула2 ]* ) |
| ------------------------------------------------- |

Пример:

`check ( @KOL? < 1 : @CENA? * 1000 ; @CENA )`

Аргументы:

* ***условие*** - условное выражение, результатом которой является логическое значение **TRUE** или **FALSE;**
* ***формула1*** - формула, вычисляемая, если результат условного выражения равен **TRUE**;
* ***формула2*****&#x20;-** формула, вычисляемая, если результат условного выражения равен **FALSE**; при отсутствии формулы функция **check** возвращает 0.

Возвращаемые значения:

* результат вычисления ***формула1*** или ***формула2*** в зависимости от результата вычисления условного выражения;
* 0 - при отсутствии ***формула2*** и результата условного выражения **FALSE**.

Условное выражение может быть представлена в виде:

* ***формула1 ОП формула2*** - сравнение результата вычислений одной формулы с результатом вычислений другой формулы, где **ОП** - операторы сравнения  **<, <=, >, >=, <>, =**;
* ***формула ОП число*** - сравнение результата вычисления формулы с натуральным числом, где **ОП** - операторы сравнения **<, <=, >, >=, <>, =;**
* ***функция ( аргумент1,  аргумент2, ... )*** - логическая функция, в перечне аргументов содержащая перечень эталонных значений, с которыми сравниваются атрибуты контекста ячейки.

### Функции сравнения

#### **limit - лимит значения**

Функция, устанавливающая лимит точности для формул сверки, ожидаемый результат которых должен быть равен 0. Синтаксис функции **limit**:

| **limit (&#x20;*****число : формула*****&#x20;)** |
| ------------------------------------------------- |

Пример:

`limit ( 1.0 : $a110? - $a240? )`

Аргументы:

* ***число*** - положительное натуральное число;
* ***формула*** - произвольная формула, ожидаемый результат которой должен быть равен 0.

Возвращаемые значение:

* ***0*** - если, если результат расчета формулы по модулю меньше или равен модулю числа
* ***результат расчета формулы*** - если результат расчета формулы по модулю больше модуля числа

#### gt (ge) - больше (больше или равно) значения

Функции, которые выводят значение, если оно превышает минимальную величину (без включения либо с включением данной величины в диапазон сравнения). Синтаксис функций gt (ge) :

| gt **(&#x20;*****число : формула*****&#x20;) или ge ( число : значение )** |
| -------------------------------------------------------------------------- |

Пример:

`gt( 100 : ( $a110@OK? - $a110@ON? ) / $a110@OK? * 100 )`

Аргументы:

* ***число*** - натуральное число;
* ***формула*** - произвольная формула,.

Возвращаемые значение:

* ***результат расчета формулы*** - если результат расчета формулы больше (больше или равен) числа;
* ***0*** - если, если результат расчета формулы меньше или равен (меньше) числа.

#### lt (le) - меньше (меньше или равно) значения

Функции, которые выводят значение, если оно меньше максимальной величины (без включения либо с включением данной величины в диапазон сравнения). Синтаксис функций gt (ge) :

| lt **(&#x20;*****число : формула*****&#x20;) или le ( число : значение )** |
| -------------------------------------------------------------------------- |

Пример:

`lt( 0 : $a210@PRIB? )`

Аргументы:

* ***число*** - натуральное число;
* ***формула*** - произвольная формула,.

Возвращаемые значение:

* ***результат расчета формулы*** - если результат расчета формулы меньше (меньше или равен) числа;
* ***0*** - если, если результат расчета формулы больше или равен (больше) числа.

#### **min - минимальное значение**

Функция, вычисляющая значения двух формул и возвращающая меньшее из двух значений. Синтаксис функции **min**:

| **min (&#x20;*****формула1 ; формула2*****&#x20;)** |
| --------------------------------------------------- |

Пример:

`min ( $a110.P11? ; $a120.P12? )`

Аргументы:

* ***формула1*** - произвольная формула
* ***формула2*** - произвольная формула

Возвращаемое значение:

* ***меньшее значение*** из двух значений результата вычисления **формулы1** и **формулы2**

#### **max - максимальное значение**

Функция, вычисляющая значения двух формул и возвращающая большее из двух значений. Синтаксис функции **max**:

| **max (&#x20;*****формула1 ; формула2*****&#x20;)** |
| --------------------------------------------------- |

Пример:

`max ( $a110.P11? ; $a120.P12? )`

Аргументы:

* ***формула1*** - произвольная формула
* ***формула2*** - произвольная формула

Возвращаемое значение:

* ***большее значение*** из двух значений результата вычисления **формулы1** и **формулы2**

### Функции проверки контекста

Функции проверки контекста являются обертками над функцией check, предоставляющими более наглядный и сжатый синтаксис наиболее часто используемых проверок контекста ячейки

#### forperiod - расчет формул для периодов и их групп

Функция, ограничивающая вычисление формул в контексте ячейки для определенных периодов и их групп:

| **forperiod (&#x20;*****периоды1 : формула1 \[ ; периоды2 : формула 2 ] ... \[ ; default : формулаN ]*****&#x20;)** |
| ------------------------------------------------------------------------------------------------------------------- |

Пример:

`forperiod ( FSNG : @VAL.P-202? + @VAL.P-207? ; FJAN : @VAL.P11? )- для группы периодов FSNG расчет по формуле @VAL.P-202? + @VAL.P-207?, а для группы периодов FJAN - по формуле`@VAL.P11?

Аргументы:

* ***периоды1*** - один или несколько кодов периодов или их групп, перечисленных через запятую;
* ***формула1*** - формула, вычисляемая при вхождении периода контекста ячейки в перечень периодов, определенных в параметре периоды1;
* ***периоды2*** - необязательный набор кодов периодов или их групп
* ***формула2*** - формула, вычисляемая при вхождении периода в необязательный набор кодов периодов или их групп
* ***default*** - необязательный атрибут, определяющий формулу по умолчанию;
* ***формулаN*** - необязательная формула, вычисляемая для ячеек, период контекста которой не вошел в ранее определенные в функции перечни периодов.

Возвращаемое значение:

* ***результат расчета формулы*** - если период контекста ячейки входит в перечень периодов либо при наличии атрибута **default**;
* ***0*** - если период контекста ячейки не входит в перечень периодов при одновременном отсутствии атрибута **default**.

#### forcol - расчет формул для колонок

Функция, ограничивающая вычисление формул в контексте ячейки для определенных колонок:

| **forcol (&#x20;*****колонки1 : формула1 \[ ; колонки2 : формула 2 ] ... \[ ; default : формулаN ]*****&#x20;)** |
| ---------------------------------------------------------------------------------------------------------------- |

Пример:

`forcol ( OK : @OK? / ( $m110@ON? + $m110@OK? ) * 2 )- для колонки OK выполнить расчет деления значения по колонке OK к среднему остатку по строке $m110`

Аргументы:

* ***колонки1*** - один или несколько кодов колонок, перечисленных через запятую;
* ***формула1*** - формула, вычисляемая при вхождении колонки контекста ячейки в перечень колонок, определенных в параметре **колонки1**;
* ***колонки2*** - необязательный набор кодов колонок;
* ***формула2*** - формула, вычисляемая при вхождении колонки в необязательный набор кодов колонок;
* ***default*** - необязательный атрибут, определяющий формулу по умолчанию;
* ***формулаN*** - необязательная формула, вычисляемая для ячейки, колонка контекста которой не вошла в ранее определенные в функции перечни колонок.

Возвращаемое значение:

* ***результат расчета формулы*** - если колонка контекста ячейки входит в перечень колонок либо при наличии атрибута **default**;
* ***0*** - если колонка контекста ячейки не входит в перечень колонок при одновременном отсутствии атрибута **default**.

#### forobj - расчет формул для объектов учета

Функция, ограничивающая вычисление формул в контексте ячейки для определенных объектов учета или их групп:

| **forobj (&#x20;*****объкты1 : формула1 \[ ; объекты2 : формула 2 ] ... \[ ; default : формулаN ]*****&#x20;)** |
| --------------------------------------------------------------------------------------------------------------- |

Пример:

`forobj ( NEWPRD : @OV? ; default : @OK.Y-1.P112? )- для группы новых предприятия ( NEWPRD ) вернуть значение по колонке @OV текущего периода, а для остальных вернуть значение по колонке @OK периода .P112 предыдущего года .Y-1`

Аргументы:

* ***объекты1*** - один или несколько кодов объектов учета, перечисленных через запятую;
* ***формула1*** - формула, вычисляемая при вхождении объекта учета контекста ячейки в перечень объектов учета, определенных в параметре **объекты1**;
* ***объекты2*** - необязательный набор кодов объектов учета;
* ***формула2*** - формула, вычисляемая при вхождении объекта учета в необязательный набор кодов объектов учета;
* ***default*** - необязательный атрибут, определяющий формулу по умолчанию;
* ***формулаN*** - необязательная формула, вычисляемая для ячейки, объект учета контекста которой не вошла в ранее определенные в функции перечни объектов учета.

Возвращаемое значение:

* ***результат расчета формулы*** - если объект учета контекста ячейки входит в перечень объектов учета либо при наличии атрибута **default**;
* ***0*** - если объект учета контекста ячейки не входит в перечень объектов учета при одновременном отсутствии атрибута **default**.

### Функция суммирования

Функция суммирования позволяет сложить значения одной ячейки по нескольким объектам учета. В системе JetCalc функция суммирования подразделяется на два вида:

* **<<** - суммирование ячеек дочерних объектов учета всех уровней вложенности для текущего объекта учета;
* **<<<** - суммирование ячеек всех объектов учета.

Синтаксис функции суммирования:

| $код\_ячейки<<( *фильтр* )? или $код\_ячейки<<<( *фильтр* )? |
| ------------------------------------------------------------ |

Пример:

`$m120@VAL<<<( G:NEWPRD, ( D:MET | R:66 ))?-сумма ячеек $m120@VAL? по группе всех новых предприятия (G:NEWPRD), входящих в металлургический дивизион (D:MET) или расположенный в Свердловской области (R:66)`

Аргументы:

* ***фильтр*** - логическое выражение с операторами **NOT**, **AND**, **OR** и круглыми скобками, операндами которого выступают  пары "**ключ:значение**".

Возвращаемое значение:

* **сумма значений** ячеек по перечню объекта учета, каждый из которых соответствует логическому выражению фильтра объектов учета.

В целях сокращения синтаксиса вместо полного наименования операторов **NOT**, **AND**, **OR** допустимо использовать их сокращенные обозначения:

* **!** (восклицательный знак) - аналог **NOT**;
* **,** (запятая) - аналог **AND**;
* **|** (вертикальная черта) - аналог **OR**.

В фильтре для пар "**ключ:значение**" могут использоваться следующие ключи в виде латинских букв:

* **C** - класс объектов учета;
* **T** - тип объектов учета;
* **D** - дивизион;
* **S** - отрасль (сектор);
* **R** - регион;
* **G** - группа объектов учета.

На практике при суммирование по дочерних объектов учета (функция **<<** ) использование в качестве фильтра дивизионов (D) и отраслей (S) обычно не имеет смыла, поэтому как правило не применяется.

### Функция фильтрации

Функция фильтрации используется в бизтран-документах, каждая строка которых дополнительно детализируется по счетам бухгалтерского учета, а также контрагентам и договорам (подробнее см. [**главу 9**](/jetcalc/tranzaktsii.md)), и позволяет отфильтровать по этим дополнительным атрибутам. Функция фильтрации обычно используется в качестве дополнительного фильтра для функции суммирования.

Синтаксис функции фильтрации:

| $код\_ячейки>>( *фильтр* )? |
| --------------------------- |

Пример (продолжение примера функции суммирования):

`$m120@VAL<<<( G:NEWPRD, ( D:MET | R:66 ))>>(G:INORG,B:90_01)?- сумма ячеек $m120@VAL? по группе всех новых предприятия (G:NEWPRD), входящих в металлургический дивизион (D:MET) или расположенный в Свердловской области (R:66), в части группы иностранных контрагентов (G:INORG) по бухгалтерскому счету 90.01 (B:90_01)`

Возвращаемое значение:

* **сумма значений** ячеек по перечню строк, детализированных по контрагентам, счетам бухгалтерского учета и типам договоров, каждый из которых соответствует логическому выражению фильтра.

В целях сокращения синтаксиса вместо полного наименования операторов **NOT**, **AND**, **OR** допустимо использовать их сокращенные обозначения:

* **!** (восклицательный знак) - аналог **NOT**;
* **,** (запятая) - аналог **AND**;
* **|** (вертикальная черта) - аналог **OR**.

В фильтре для пар "**ключ:значение**" могут использоваться следующие ключи в виде латинских букв:

* **G** - группа организаций-контрагентов;
* **B** - бухгалтерский счет;
* **K** - тип договора.

### Функция перемещения по дереву объектов учета

Функции перемещения по дереву объектов учета расчетной системы JetCalc позволяют вместо явного указания кода объекта учета использовать контекстное переопределение объекта учета у ячейки путем перемещения по дереву объектов учета снизу-вверх.

* **^** - смена текущего объекта учета на родительский объект учета;
* ^^ - смена текущего объекта учета на корневой объект учета, у которого родительский объект учета не определен.&#x20;
* ^(n) - смена текущего объекта учета выше на n уровней (по умолчанию n = 1)

Функции объекта учета используются путем подстановки вместо кода объекта учета в коде ячейки на код функции.

Примеры:

`$a120@VAL#^?- смена текущего объекта учета с #100pl20 на родительский объект учета #100`

`$a120@VAL##?- смена текущего объекта учета с #100pl20ce5 на корневой объект учета #100`

### Функции обработки тегов

Функции обработки тегов возвращают текущее значение тега на стадии приведения формул строк или колонок к контексту ячейки в момент открытия документа (подробнее см.[ **раздел 6.1**](/jetcalc/raschetnaya-sistema/formuli.md)).

Возвращаемое значение функций обработки тегов может использоваться в формулах как:

* атрибут кода ячейки - значение тега приводится к текстовому типу ;
* числовой операнд - значение тега приводится к числовому типу.

Если **приведение** значение тега **невозможно**, то расчетная системе **JetCalc** возвращает ошибку, которая на интерфейсе выделяет ячейку бледно-красным фоном.

Если формула ячейки содержит тег, то **поиск определения** значения тега выполняется в следующей **последовательности**:

1. Текущая строка или колонка.
2. Родительские строки вплоть до корневого узла.
3. Объект учета.
4. Тип объекта учета.
5. Класс объекта учета.

Если в вышеописанной цепочке поиска искомый **тег не находится**, то расчетная система **JetCalc** возвращает ошибку, которая на интерфейсе выделяет ячейку бледно-красным фоном.

Синтаксис формул обработки тегов:

| ${тег1}@{тег2}#{тег3}? \[+-\*/] {тег4} |
| -------------------------------------- |

Примеры:

`$a120@{kolcalc}? - подстановка колонки с объемам производства, значение которой содержится в теге kolcalc`

`${strcalc}@VAL? - подстановка строки с объемам производства, значение которой содержится в теге strcalc`

`$i100@VAL#{ucomp}? - подстановка кода управляющей компании, значение которой содержится в теге ucomp`

Особым случаем является встроенный в расчетную систему JetCalc тег **KMULT**, имеющий значение **1000**. Тег KMULT представляет собой коэффициент (мультипликатор), обозначающий минимальную денежную единицу, в которой обычно составляется финансовая отчетность в стране. В России такой единице является **тысяча рублей**, поэтому по умолчанию **KMULT = 1000**.

Значение тега **KMULT** определено в файле **/htdocs/jetcalc/config.js** и может быть при необходимости изменено. В рабочей модели тег **KMULT** может быть переопределен на любом уровне - от строки до класса объекта учета.

### Функции атрибутов ячеек

Функции атрибутов ячеек позволяют определить переменные характеристики атрибутов ячеек, зависящие от контекста ячеек. Расчетная система **JetCalc** поддерживает следующие функции атрибутов ячеек:

* **MCOUNT** - число месяцев в отчетном периоде
* **DCOUNT** - число дней в отчетном периоде&#x20;

Пример:

`$t100? / $t200? * 1000 / MCOUNT- расчет среднемесячной заработной платы в рублях исходя из фонда оплаты труда в тысячах рублей $t100? и среднесписочной численности $t200?.`

Значения, возвращаемые функциями **MCOUNT** и **DCOUNT**, определяются на основании числа месяцев в периоде, а также даты начала и даты окончания периода, определенных при настройке периодов (подробнее см. [**главу 3**](/jetcalc/iii-periodi.md)).

## Логические функции

Логические функции в системе **JetCalc** являются вспомогательными и обычно используются в условных выражениях функции **check**.

#### hastag - проверка наличия кода тега в контексте ячейки и опционально его значения

| hastag ( ключ:тег\[=значение] ) |
| ------------------------------- |

Пример:

`check ( not hastag( R:nobal ) : @ON? + @PD? - @RD? )- вычисление формулы для строк, которые не содержат тег nobal`

`check ( hastag ( C:ndsrate=0.18 ) : $a100@VAL? * {ndsrate} )- расчет суммы НДС по ставке 18% только для колонки с тегом ndsrate, имеющим значение 0.18`

Возвращаемое значение:

* **истина (true)** - если тег и опционально его значение найдены в текущем контексте ячейки;
* **ложь (false)** - если тег и опционально его значение найдены в текущем контексте ячейки.

Атрибут **ключ** аргумента функции **hastag** допускает следующие значения:

* **R** - проверяется наличие тега только в текущей строке
* **W** - проверяется наличие тега в текущей строке и всех родительских узлах до корневого узла
* **C** - проверяется наличие тега в текущей колонке
* **O** - проверяется наличие тега в текущем объекте учета
* **T** - проверяется наличие тега в типе текущего объекта учета
