Формула и функции расчета и контроля
При построении формул расчета необходимо придерживаться определенных правил. Структура или порядок элементов в формуле
определяет конечный результат вычислений. Формулы подчиняются определенному синтаксису, или порядку, согласно которому в
формулу включается знак равенства (=), за которым идут вычисляемые элементы (операнды), разделенные операторами. В качестве
операндов могут выступать постоянные значения (константы), ссылки на ячейки или функции.
Элемент формулы (операнд)
ga055_3, где
ga - код документа. Кодом документа является строка до 4-х символов латинского алфавита. Код документа предназначен для
сокращенного обозначения документа.
055 - код строки ga-документа;
_ - разграничитель кода строки и номера графы;
3 - номер графы.
Операторами обозначаются операции, которые следует выполнить над операндами формулы. В формулах используются следующие виды
операторов: арифметические, логические и операторы сравнения.
Арифметические операторы
Служат для выполнения арифметических операций, таких как сложение, вычитание, умножение, деление. Операции выполняются над
числовыми значениями. Используются следующие арифметические операторы:
+ |
Сложение |
ga056_3+ga057_3 |
- |
Вычитание |
ga056_3-ga057_3 |
* |
Умножение |
ga056_3*20.000 |
/ |
Деление |
ga056_3/100 |
Операторы сравнения
Используются для сравнения двух значений. Результатом сравнения является логическое значение: либо ИСТИНА, либо ЛОЖЬ. Здесь
следует сказать, что операторы сравнения в формулах расчета применимы только в составе функции IIF().
= |
Равно |
IIF(ga056_3=0,0,100/ga056_3) |
> |
Больше |
IIF(ga056_4>ga056_5,ga056_4,ga056_5) |
< |
Меньше |
IIF(ga056_4<ga056_5,ga056_5,ga056_4) |
>= |
Больше или равно |
IIF(ga056_4>=ga056_5,ga056_4,ga056_5) |
<= |
Меньше или равно |
IIF(ga056_4<=ga056_5,ga056_5,ga056_4) |
<> |
Не равно |
IIF(ga056_3<>0,100/ga056_3,0) |
Логические операторы
Используются для соединения логических выражений. Могут быть двух видов: .AND. (И) .OR. (ИЛИ).
.AND.
Синтаксис: <выр1L> .AND. <выр2L> .AND. <выр3L> .AND. ...
Возвращает значение ИСТИНА, если все аргументы имеют значение ИСТИНА; возвращает значение ЛОЖЬ, если хотя бы один аргумент
имеет значение ЛОЖЬ.
Пример: IIF(pf:23_5='301' .AND. pf:23_3='1510',1,0)
.OR.
Синтаксис: <выр1L> .OR. <выр2L> .OR. <выр3L> .OR. ...
Возвращает значение ИСТИНА, если хотя бы один из аргументов имеет значение ИСТИНА; возвращает значение ЛОЖЬ, если все
аргументы имеют значение ЛОЖЬ.
Пример: IIF(pf:23_5='301' .OR. pf:23_3='1510',1,0)
Логические значения
.T. - возвращает логическое значение ИСТИНА
.F. - возвращает логическое значение ЛОЖЬ
Пример: .T.=IIF(pf:23_5='404',.T.,.F.) (на примере описания контрольного соотношения)
При построении формул расчета следует учесть, что его левая часть формируется автоматически, и показывает в какую ячейку
будет занесен конечный результат вычислений. Поэтому описывается только правая часть формулы. При расчете формулы действия
выполняются слева направо - с учетом приоритета операторов. Порядком вычисления можно управлять с помощью скобок, группируя
действия, которые должны выполняться в первую очередь. Если в формуле содержатся несколько операторов, то порядок вычислений
определяется приоритетом операторов. Вначале выполняются операции с более высоким приоритетом, затем - с менее высоким. Если
формула содержит операторы с одинаковым приоритетом, например, операторы умножения и деления, то операции выполняются слева
направо. Для изменения порядка выполнения операций используются скобки. Вначале вычисляются те части формулы, которые
заключены в скобки, затем – остальные части.
В формулах можно использовать функции и переменные. Функции представляют собой встроенные формулы, выполняющие простые или
сложные вычисления. Реализованы следующие функции: NMONTH(), SUM01(), SUM02(), SUM04(), SUM05(), SUM06(), SUMV(), SUML(), COUNTV(), COUNTL(), COUNTR01(),
VLINENUMBER(), VLISTNUMBER(). Также разрешается использовать функции FoxPro (описание наиболее часто используемых этих функций приведено ниже).
Описание функций
IIF()
Синтаксис: IIF(<вырL>,<выр1>,<выр2>)
Функция IIF() возвращает значение <выр1> или <выр2> в зависимости от значения <вырL>. Если значение
<вырL> - ИСТИНА, функция возвращает значение <выр1>. Если значение <вырL> - ЛОЖЬ - функция возвращает
значение <выр2>.
Пример: IIF(ga056_3=0,0,100/ga056_3)
EMPTY()
Синтаксис: EMPTY(<вырL>)
Функция EMPTY() возвращает логическое значение ИСТИНА, если заданное выражение является ПУСТЫМ. Если выражение не ПУСТОЕ,
возвращается ЛОЖЬ. Функция возвращает значение ИСТИНА для выражений символьного типа при пустом значении или пробелах, для
числового типа при равенстве нулю, для даты при пустом значении.
Пример: .T.=IIF(EMPTY(iu:010_3),.F.,.T.))
NMONTH()
Синтаксис: NMONTH(<вырD>) или NMONTH(<вырC>)
Функция NMONTH() возвращает название месяца из показателя, указанного в качестве параметра. В качестве параметра может быть
указана дата или ее символьное представление.
Пример: NMONTH(con91)
ROUND()
Синтаксис: ROUND(<вырN1>,<вырN2>)
Функция ROUND() округляет значение числа, заданного <вырN1>, до указанного в <вырN2> количества десятичных знаков.
Пример: .T.=IIF(ed190_3<ROUND(ed160_3*ed180_3*0.7+ed170_3*ed180_3,0),.F.,.T.)
SUM01()
Синтаксис: SUM01('(код документа)(код строки)_(номер графы)')
Функция SUM01() возвращает сумму с начала года по текущий период включительно по показателю, указанного в качестве параметра.
Пример: SUM01('da1_3')
SUM02()
Синтаксис: SUM02('(код документа)(код строки)_(номер графы)')
Функция SUM02() возвращает сумму с начала года до текущего периода по показателю, указанного в качестве параметра.
Пример: SUM02('da1_3')
SUM04()
Синтаксис: SUM04('(код документа)(код строки)_(номер графы)')
Функция SUM04() возвращает сумму за предыдущий отчетный период по показателю, указанного в качестве параметра.
Пример: SUM04('da1_3')
SUM05()
Синтаксис: SUM05('(код документа)(код строки)_(номер графы)')
Функция SUM05() возвращает сумму за последний введенный предыдущий период по показателю, указанного в качестве параметра.
Пример: SUM05('da1_3')
SUM06()
Синтаксис: SUM06('(код документа)(код строки)_(номер графы)')
Функция SUM06() возвращает сумму за аналогичный период прошлого года по показателю, указанного в качестве параметра.
Пример: SUM06('da1_3')
SUMV()
Синтаксис: SUMV('(код документа)(код строки)_(номер графы)')
Функция SUMV() возвращает сумму значений показателя переменных строк, указанного в качестве параметра.
Пример: SUMV('gb:10_3')
Суммирование переменных строк по условию
Может возникнуть ситуация, когда требуется суммировать не все значения переменной строки, а только те, которые удовлетворяют
определенным условиям. Тогда необходимо в качестве параметра указать не ячейку переменной строки, а условную функцию IIF().
Синтаксис: SUMV('IIF(<вырL>,<выр1>,<выр2>)')
Пример: SUMV('IIF(in:030_3="510" .OR. in:030_3="520",in:030_4,0)')
В данном примере функция SUMV() суммирует значения ячейки in:030_4 при условии, что значение, указанное в ячейке in:030_3,
равно "510" или "520". Обратите внимание, что, если параметр, передаваемый в функции SUMV() заключается в одинарные кавычки,
то в функции IIF() при сравнении с символьными выражениями используется только двойная кавычка.
SUML()
Синтаксис: SUML('(код документа)(код строки)_(номер графы)')
Функция SUML() возвращает сумму листов документа за текущий отчетный период по показателю, указанного в качестве параметра.
Данную функцию можно применить по отношению к документу, у которой заполнена строка множественности.
Пример: SUML('ga010_3')
Суммирование листов по условию
Может возникнуть ситуация, когда требуется суммировать не все листы документа, а только те,
которые удовлетворяют определенным условиям. Тогда необходимо в качестве параметра указать не ячейку строки, а условную
функцию IIF().
Синтаксис: SUML('IIF(<вырL>,<выр1>,<выр2>)')
Пример: SUML('IIF(ed5_3="05000",ed10_3,0)')
В данном примере функция SUML() суммирует значения ячейки ed10_3 при условии, что значение, указанное в ячейке ed5_3, равно
"05000". Обратите внимание, что, если параметр, передаваемый в функции SUML() заключается в одинарные кавычки, то в функции
IIF() при сравнении с символьными в выражениями используется только двойная кавычка.
COUNTV()
Синтаксис: COUNTV('(код документа)(код строки)_(номер графы)')
Функция COUNTV() возвращает количество переменных строк по показателю, указанного в качестве параметра.
Пример: COUNTV('gb:10_3')
COUNTL()
Синтаксис: COUNTL('(код документа)(код строки)_(номер графы)')
Функция COUNTL() возвращает количество листов документа за текущий отчётный период по показателю, указанного в качестве параметра. Данную функцию можно
применить по отношению к документу, у которой заполнена строка множественности.
Пример: COUNTL('ga010_3')
COUNTR01()
Синтаксис: COUNTR01()
Функция COUNTR01() возвращает количество представленных документов с начала года для текущей формы, включая документы представленные за отчетный период
множественно.
Пример: COUNTR01()
VLINENUMBER()
Синтаксис: VLINENUMBER()
Функция VLINENUMBER() возвращает порядковый номер переменной строки в документе.
Пример: VLINENUMBER()
VLISTNUMBER()
Синтаксис: VLISTNUMBER()
Функция VLISTNUMBER() возвращает порядковый номер раздела в документе.
Пример: VLISTNUMBER()
Переменные
period - текущий отчетный период. Для документов с месячной периодичностью представления - 1,2, ..., 12;
для квартальных - 1,2,3,4; полугодовых - 1,2.
Пример: iif(period=1,su0110_3,sum04('su0100_3')+su0110_3)