[Назад] [Дальше] [Оглавление]

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

Примеры формул:

2+2
(127+12)/(123-17)
(total()-statistic())*(1+taxes)
statistic(.6) ? 1000 : 0
((account()>1000 && statistic()<10000) ? 0 : 50000)*(1+taxes)

Количество уровней вложенности скобок практически неограничено.

  1. Арифметические операции.

    +, -, *, /

    Сложение, вычитание, умножение и деление соответсвенно.

    x % y

    Получение остатка от деления x на y. Подразумевается, что y - целое число.

  2. Логические операции. Ложь - 0, истина - не ноль. Нулем (и соответственно ложью) также считаются числа, чья абсолютная величина составляет меньше одной миллионной.

    x > y

    Истинно если x больше y.

    x < y

    Истинно если x меньше y.

    x >= y

    Истинно если x больше или равно y.

    x <= y

    Истинно если x меньше или равно y.

    x == y

    Истинно если абсолютное значение разницы x и y меньше одной миллионной.

    x != y

    Истинно если абсолютное значение разницы x и y больше или равно одной миллионной.

    x && y

    Истинно если логические выражения x и y истинны.

    x || y

    Истинно если истинно логическое выражение x или логическое выражение y.

  3. Операция выбора.

    x ? y : z

    Результатом является выражение y если логическое выражение x истинно и z в противном случае. Следует отметить, что в отличие от аналогичного оператора языка C вычисляются как выражение y, так и выражение z и лишь затем происходит выбор результата.

В порядке убывания приоритета операторы располагаются так:

  1. * и /
  2. %
  3. + и -
  4. <, >, <=, >=, == и !=
  5. && и ||
  6. ? (оператор выбора)

Среди операторов каждой группы приоритета порядок вычисления не определен. Т.е. нельзя заранее сказать в каком порядке будет вычисляться выражение `x+y-z'.

Порядком вычисления можно управлять с помощью круглых скобок.

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

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

    abs(x)

    Результатом является абсолютное значение выражения x.

    max(x,y)

    Результатом является большее из двух значений выражений x и y.

    min(x,y)

    Результатом является меньшее из двух значений выражений x и y.

    round(x,[p])

    Результатом является число, полученное из значения выражения x по правилам округления. Вторым параметром может быть задана точность - положительное число, возможно дробное. По умолчанию округление происходит до целых.

    sign(x)

    Результатом является -1, если x меньше нуля; 0, если равно нулю и 1, если значение x больше нуля.

  2. Функции для работы с датами.

    day(date)

    Результатом является день даты date. Здесь и далее дата записывается по стандартным правилам.

    ldate(date)

    Результатом является целое положительное число, цифры которого сформированы из даты date - ГГГГММДД (например для 9-го августа 1996 года результатом будет 19960809).

    month(date)

    Результатом является месяц даты date.

    year(date)

    Результатом является год даты date.

  3. Финансовые функции и константы

    taxes

    Константа ставки налога, определенная в основном конфигурационном файле.

    vatonly(sum)

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

    withvat(sum)

    Вычисление суммы с учетом налога.

Некоторые функции доступны только в контексте конкретного пользователя. Их удобно использовать в таких модулях, как mkreport, accadmin, evaluate и т.п.

account([end,[begin]])

Сумма операций на лицевом счете пользователя. Параметрами можно указать дату до которой включительно (параметр end) и дату начиная с которой (параметр begin) будет произведена выборка информации из лицевого счета абонента. По умолчанию результатом будет остаток на лицевом счете до текущей даты (включая ``сегодняшние'' операции).

statistic([end,[begin]])

Сумма статистики за текущий месяц, указанный или интервал времени. Если указан только первый параметр (end), то выводится информация за этот месяц. Если оба (begin и end) - то за интервал времени, включающий оба эти месяца. По умолчанию (если не указано ни end, ни begin) возвращает сумму статистики за текущий месяц.

total([date])

Сумма остатка на указанную или текущую дату с учетом расходов (статистики); ``баланс'' пользователя на определенный момент.

В некторых модулях могут использоваться какие-то дополнительные функции и/или константы (например значения статистики в модуле convertstat). В этом случае соответствующие описания включены в описание модулей.


[Назад] [Дальше] [Оглавление]