Веб-сервисы для эффективного управления бизнесом!

Инструменты пользователя

Инструменты сайта


formulas

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
formulas [2019/07/05 07:38]
ilya [2. Очередность выполненияопераций]
formulas [2021/03/13 10:55] (текущий)
butov [4.2. Агрегатные функции:]
Строка 3: Строка 3:
    
  
-• **Числа** - константы,​ используемые для вычисления. Дробная часть отделяется точкой.+• **Числа** - константы,​ используемые для вычисления. Дробная часть отделяется точкой.\\ 
 • **Ссылки на локальные поля** в виде ${field_id}. Пробелы внутри скобок допускаются. field_id - • **Ссылки на локальные поля** в виде ${field_id}. Пробелы внутри скобок допускаются. field_id -
 номер поля, в котором хранится необходимое значение. может быть числом номер поля, в котором хранится необходимое значение. может быть числом
 или id (указывает на поле, в котором хранится ID объекта)\\ ​ или id (указывает на поле, в котором хранится ID объекта)\\ ​
-• **Ссылки на поля в других документах** в виде ${field_id1.field_id2.field_id3 ​etc}. Пробелы внутри\\ ​+• **Ссылки на поля в других документах** в виде ${field_id1.field_id2.field_id3}. Пробелы внутри\\ ​
 скобок допускаются. field_id - номер поля, в котором хранится ссылка или необходимое значение. Может быть \\  скобок допускаются. field_id - номер поля, в котором хранится ссылка или необходимое значение. Может быть \\ 
 числом. parent (указывает на родительский объект,​ если есть), а id (указывает на поле, в котором хранится ID объекта)\\ ​ числом. parent (указывает на родительский объект,​ если есть), а id (указывает на поле, в котором хранится ID объекта)\\ ​
Строка 18: Строка 18:
 • Знаки бинарных операций:​ ~, &, |\\  • Знаки бинарных операций:​ ~, &, |\\ 
 • **Знаки сравнения**:​ ==, !=, >, >=, =>, <, <=, =<​\\ ​ • **Знаки сравнения**:​ ==, !=, >, >=, =>, <, <=, =<​\\ ​
-• Знаки скобок:​ (,)\\  +• Знаки скобок:​ ()\\  
-• Знак разделения операндов:​ ,\\ +• Знак разделения операндов: ​**,**\\ 
     ​     ​
     ​     ​
Строка 47: Строка 47:
 **3.5. В случае преобразования Double => Long теряется дробная часть,​ но ошибка не возникает.**\\ ​ **3.5. В случае преобразования Double => Long теряется дробная часть,​ но ошибка не возникает.**\\ ​
 **3.6. Допускается сложение строк (склейка). Для преобразования значения в строку используется  **3.6. Допускается сложение строк (склейка). Для преобразования значения в строку используется
-выражение:​ ""​ + value.**+выражение:​ +"value".**
  
  
Строка 63: Строка 63:
  
   * avg(x),​ где x – номер поля или id. Вычисляет среднее арифметическое среди значений одного поля всех документов. Возвращаемый тип данных - double;   * avg(x),​ где x – номер поля или id. Вычисляет среднее арифметическое среди значений одного поля всех документов. Возвращаемый тип данных - double;
-  * count(x),​ где x – номер поля или id. Вычисляет количество документов,​ имеющих это поле.  +  * count(x),​ где x – номер поля или id. Вычисляет количество документов,​ имеющих это поле. Имеет сокращение – cnt(x). Возвращаемый тип данных - long;
-  * Имеет сокращение – cnt(x). Возвращаемый тип данных - long;+
   * min(x,​ type),​ где x – номер поля или id,​ type – тип данных. Вычисляет минимальное значение    * min(x,​ type),​ где x – номер поля или id,​ type – тип данных. Вычисляет минимальное значение
   * среди одного поля всех документов;​   * среди одного поля всех документов;​
Строка 105: Строка 104:
 ''​⇒ gen(10, week). Генерирует номер для поля 10 с периодичностью в неделю.\\ ​ ''​⇒ gen(10, week). Генерирует номер для поля 10 с периодичностью в неделю.\\ ​
 ⇒ generator(12,​ year). Генерирует номер для поля 12 с периодичностью в год''​ ⇒ generator(12,​ year). Генерирует номер для поля 12 с периодичностью в год''​
 +
 +==== 4.5. add_date(${parent.512.452.41},​ -7, month). Отнимает от даты (значение берется из поля if(eval, x, y) - функция "​если"​. ====
 +
 +Классическое условие:​ если eval, то вернуть x, иначе - вернуть y.
 +
 +==== 4.6. add_date(date,​ val, dim) – прибавляет к дате заданное количество единиц. ====
 +
 +Допустимые значения параметра dim: milisecond, second,​ minute,​ hour,​ day, week, month,​ year.\\ ​
 +**Например:​**\\ ​
 +''​⇒ add_date('​10.02.1975',​ 5, week). Прибавляет к дате 5 недель.\\ ​
 +⇒ add_date(${parent.512.452.41},​ -7, month).\\ ​
 +Отнимает от даты (значение берется из поля родительского документа) 7 месяцев.
 +⇒ add_date(${512},​ ${587}, year). Прибавляет к дате из поля 512 значение поля 587, выраженное в годах.\\ ​
 +
 +==== 4.7.diff(date1,​ date2, dim) - функция вычисления расстояния между датами в заданных единицах.''​ ====
 + 
 +Если date1 > date2 - результат позитивный,​ в противном случае - негативный. Допустимые
 +значения параметра dim:​ milisecond,​ second, minute, hour, day, week, month,​ year.
 +Например:​
 +''​⇒ diff('​10.02.1975',​ '​25.02.2005',​ week). Возвращает разницу между двумя датами (заданы константами),​ выраженную в неделях.
 +⇒ diff(${parent.512.452.41},​ '​25.02.2005',​ month). Возвращает разницу между двумя датами
 +(поле и константа),​ выраженную в месяцах.
 +⇒ diff(${512},​ ${587}, year). Возвращает разницу между двумя датами (значение из полей),​ выраженную в годах.''​
 +
 +==== 4.8. find(val, searchId, resultId, type) - ищет заданное значение в поле и возвращает значение другого поля,​ найденного объекта. ====
 +
 +
 +val - искомое значение или ссылка на поле, в котором это значение.\\ ​
 +searchId - номер поля, где ищем (число).\\ ​
 +resultId - номер поля, из которого извлекаем данные или id для получения ID объекта\\ ​
 +type – тип данных значения,​ которое ищет функция.\\ ​
 +
 +**Например:​**\\ ​
 +''​⇒ find(test string, 1253, id, string). Возвращает ID объекта в поле №1253 которого,​ имеется значение test string (как string).\\ ​
 +⇒ find(true, 6787, 3847, boolean). Возвращает значение поля №3847 объекта,​ поле № 6787 которого равно true (как boolean).\\ ​
 +⇒ find(${343},​ 153, 9874, date). Возвращает значение поля №9874 объекта,​ поле №153 которого равно значению поля №343 (как date).''​\\ ​
 +
 +==== 4.9. between(val,​ startId, endId, resultId, type) - ищет объект,​ имеющий два поля, которые описывают диапазон,​ в который попадает заданное значение,​ и возвращает значение другого поля этого объекта. ====
 +
 +val - искомое значение или ссылка на поле, в котором это значение.\\ ​
 +startId - номер поля,​ где записаны начальные значения диапазонов.\\ ​
 +endId - номер поля, где записаны конечные значения диапазонов.\\ ​
 +resultId - номер поля, из которого извлекаем данные или id для получения ID объекта.\\ ​
 +type – тип данных значения,​ которое ищет функция.\\ ​
 +**Например:​**\\ ​
 +''​⇒ between('​12.10.1975',​ 1253, 1254, id, date). Осуществляет поиск вхождения даты 12.10.1975.
 +Диапазон указан в полях №1253 и №1254. Результирующее значение – ID объекта.\\ ​
 +⇒ between(235,​ 251, 252, 253, integer). Осуществляет поиск вхождения числа 235. Диапазон указан в полях №251 и №252. Результирующее значение – значение поля №253 объекта.\\ ​
 +⇒ between($(235),​ 251, 252, 253, string). Осуществляет поиск вхождения значения поля №235.
 +Диапазон указан в полях № 251 и № 252. Результирующее значение – значение поля № 253 объекта.\\ ​
 +''​
 +==== 4.10. exchange(currency,​ relevance) - ищет информацию об обменном курсе валюты (currency) на указанную дату (relevance). ====
 +
 +Синоним названия - ex_rate. Currency может быть как строкой с кодом валюты,​ так и числом
 +со значением ID для нужной валюты.
 +**Например:​**\\ ​
 +''​⇒exchange(usd,​ '​12.10.2015'​). Осуществляет поиск обменного курса для американского доллара на дату '​12.10.2015.\\ ​
 +⇒ ex_rate(3, '​10.11.2016'​). Осуществляет поиск обменного курса для евро (ID = 2) на дату '​10.11.2016.''​
 +
 +===== 5. Пример получения коэффициента страховки,​ в зависимости от возраста человека на момент начала страховки. =====
 +
 +==== 5.1. Создаем справочник,​ в котором храним зависимость возраста и коэф., поля: ====
 +
 +  * название (# 523)
 +  * от (# 524) в годах
 +  * до (# 525) в годах
 +  * коэф (# 526) в абсолютных единицах
 + 
 +==== 5.2. Заносим значения справочника:​ ====
 +
 +  * "до 14", 0, 14, 0.5
 +  * "​15-18",​ 15, 18, 0.75
 +  * "​19-35",​ 19, 35, 1
 +  * "​36-50",​ 36, 50, 1.25
 +  * "​51-75",​ 51, 75, 1.5
 +  * "76 и старше",​ 76, 150, 2
 +
 +==== 5.3. В документе создаем поле-ссылку на справочник контрагентов (№ 1235) и поле начала действия страховки (№1236). ====
 +
 +==== 5.4. Дата рождения рождения находится в поле № 222 справочника контрагентов. ====
 +
 +==== 5.5. Формула будет иметь вид: between(diff($(1236},​ ${1235.222},​ year), 524, 525, 526,​ integer) ====
 +
 +Она вернет значение коэффициента страховки,​ в зависимости от возраста контрагента на момент начала страховки.
 +
 +
 +
formulas.1562312281.txt.gz · Последние изменения: 2019/07/05 07:38 — ilya