3.16Арифметические операторы над сводными показателями
Операторы СВОД(), КОЛИЧЕСТВО(),ПОКАЗАТЕЛЬ(), ЕСЛИ(), ABS() и т.д. могут быть объединены арифметическими операциями: +, -, *, /, скобки. Используется стандартный арифметический приоритет операций. Перед началом арифметических действий необходимо рассчитать каждый из операндов.
Арифметические операции проводятся над значениями сводных показателей, обладающих одинаковыми значениями по каждому из признаков разреза. В случае если разрезы операндов различаются и у одного из показателей-операндов отсутствует ряд признаков, входящих в рассчитываемый разрез, то при проведении арифметических действий над этими операндами, проверка равенства по данным признакам не осуществляется. Также при сравнении необходимо учитывать признаки, исключенные из сравнения (см. Исключение признаков).
Если у одного из показателей-операндов отсутствует совокупность значений признаков разреза, присутствующего у другого показателя (учитываются только признаки, входящие в рассчитываемый разрез и являющиеся общими для обоих операндов), то у первого операнда значение по данной совокупности принимается = 0 и далее используется вышеприведенный механизм расчёта.
3.17Арифметические операторы над сводом и числом
Аналогичны арифметическим оператором над сводами, за исключением того, что в качестве одного или обеих из операндов выступает константа или импортируемый показатель-константа (для таких показателей предусмотрены признаки s_razrez = -1, s_tipisvodov = 0).
При проведении операции между сводным показателям и константой необходимо осуществить сложение/вычитание/умножение/деление каждого значения сводного/импортируемого сводного показателя с числом.
4Описание условий отбора
4.1Арифметические операторы
В операторах СВОД(), ПОКАЗАТЕЛЬ(), КОЛИЧЕСТВО() и т.д. есть возможность указания условий отбора показателей. Условия отбора накладываются на признаки показателя и описываются следующими операторами:
=, !=
|
равно, не равно
|
>, >=
|
больше, больше или равно
|
<, <=
|
меньше, меньше или равно
|
ИЗ, БЕЗ
|
подробное описание – в разделе Операторы ИЗ, БЕЗ
|
Арифметический оператор = имеет следующий синтаксис:
<�Код признака> = <�Значение признака>
Синтаксис прочих арифметических операторов аналогичен.
4.2Операторы ИЗ, БЕЗ
Оператор ИЗ проверяет принадлежность значения признака к выборке, определенной в виде списка значений, разделенных запятыми или к заранее подготовленной выборке. Оператор БЕЗ является обратным к оператору ИЗ. Таким образом, синтаксис данных операторов выглядит следующим образом:
<�Код признака> ИЗ (<�Набор значений, разделенных запятыми>)
<�Код признака> ИЗ @<�Код выборки>
<�Код признака> БЕЗ (<�Набор значений, разделенных запятыми>)
<�Код признака> БЕЗ @<�Код выборки>
4.3Оператор Период()
Оператор Период() позволяет задать условие на принадлежность показателя к тому или иному периоду разработки (или сразу к нескольким периодам).
Оператор Период() имеет следующий синтаксис:
Период(<�Смещение по году>, <�Смещение относительно текущего периода>, <�Нарастающий итог?>)
Параметр "Смещение по году" указывает смещение в годах относительно года текущего периода разработки. Может принимать положительные, отрицательные значения и 0.
Параметр "Смещение относительно текущего периода" указывает смещение в периодах относительно номера текущего периода. Может принимать положительные, отрицательные значения и 0
Параметр "Нарастающий итог?" служит для указания, требуются ли данные за конкретный период или нарастающим итогом с начала года до конкретного периода.
Алгоритм применения оператора Период() следующий:
Смещаемся относительно текущего периода разработки на количество периодов, определенное параметром "Смещение относительно текущего периода". При этом учитывается периодичность периода разработки и переходы между годами. Например, смещение на -2 периода для 1 квартала 2015 года будет соответствовать 3 кварталу 2014 года.
Относительно найденного периода смещаемся на количество лет, определенное параметром "Смещение по году".
-
В зависимости от значения параметра "Нарастающий итог"
Если параметр "Нарастающий итог?" = 0, то в условия фильтрации добавляем p_period_number = <�номеру полученного периода> И p_year = <�году полученного периода>
Если параметр "Нарастающий итог?" = 1, то в условия фильтрации добавляем p_period_number <= <�номеру полученного периода> И p_year = <�году полученного периода>
Подстановки относительных периодов, описанные в "Подстановки относительных периодов", заменяются на оператор Период() следующим образом:
Подстановка
|
Реализация оператором Период()
|
$ТекущийПериод
|
Период(0, 0, 0)
|
$ПредыдущийПериод
|
Период(0, -1, 0)
|
$ПериодПрошлогоГода
|
Период (-1, 0, 0)
|
$ПериодСНачалаГода
|
Период(0, 0, 1)
|
$ПериодСНачалаПрошлогоГода
|
Период(-1, 0, 1)
|
4.4Объединение условий отбора
Условия отбора могут быть объединены при помощи логических операций И, ИЛИ и скобок.
5Группировочные признаки разреза
При расчёте по формуле группировка осуществляется по признакам, входящим в разрез.
5.1Результат вычисления
Результат вычисления по формуле должен быть записан в структуру хранения, позволяющую использовать его в дальнейших вычислениях. При этом для каждого результата вычисления (т.е. для группы показателей) указываются следующие признаки:
Признак
|
Значение
|
s_knp
|
$ОПЕРКОД
|
s_razrez
|
$РАЗРЕЗ
|
s_tipisvodov
|
$ТИП_СВОДА
|
s_valuetype
|
$ТИП_ЗНАЧЕНИЯ
|
p_year
|
$ГОД
|
p_period_number
|
$НомерПериода
|
s_periodicity
|
$ПЕРИОДИЧНОСТЬ
|
s_togs
|
$ТОГС
|
Также добавляются все признаки, входящие в разрез $РАЗРЕЗ со значениями, соответствующими данному значению. Например, для разреза 3 (ОКАТО, Основной ОКВЭД) у результатов вычисления будут указаны следующие признаки:
s_knp
s_razrez
s_tipisvodov
s_valuetype
p_year
p_period_number
s_periodicity
s_togs
s_okved_main
s_okato
5.2Использование схем сборок
Для каждого признака, входящего в разрез может быть указана схема сборки, отражающая иерархию данного признака в пределах этого разреза. Схемы сборки применяются для каждого агрегирующего оператора, кроме ПОКАЗАТЕЛЬ() после того как рассчитаны значения показателя по каждой из имеющихся в исходных данных комбинаций значений признаков разреза. При этом применяются схемы сборки, соответствующие разрезу = $РАЗРЕЗ (текущему значению подстановки). В случае если в формуле содержится несколько операторов необходимо применять соответствующие схемы сборки для каждого оператора.
В случае если разрез содержит более одного признака с указанной схемой сборки, схемы сборки применяются в произвольном порядке.
Алгоритм применения схем сборки:
Применяем 1-ую по порядку схему сборки, соответствующую Признаку1. Суммируем по данной схеме сборки элементы с одинаковыми значениями других признаков (кроме Признака1). При этом у суммарного элемента значение всех признаков, кроме Признака1 должны совпадать с соответствующими значениями этих признаков у входящих в него элементов. Суммирование осуществляется, начиная с листовых элементов и заканчивая корнем.
Применяем 2-ую по порядку схему сборки, соответствующую Признаку2. Аналогично суммируем по данной схеме сборки элементы с одинаковыми значениями других признаков (кроме Признака2). При этом суммируются и те элементы, которые были получены при суммировании по первой схеме сборки (по Признаку1).
…Применяем N-ую по порядку схему сборки, соответствующую ПризнакуN. Аналогично суммируем по данной схеме сборки элементы с одинаковыми значениями других признаков (кроме ПризнакаN). При этом суммируются и те элементы, которые были получены при суммировании по все предыдущим схемам сборки (по Признакам1, 2 …).
ВАЖНО! При суммировании с листовых элементов до корня необходимо просуммировать все входящие элементы перед тем как суммировать головной
Схема сборки в дополнении к своей основной функции является фильтром. Те элементы, которых нет в схеме сборки (ни в столбце ParentCode, ни в столбце Code), не должны попасть в результат, даже если они встречаются в исходных данных. Таким образом, если в исходных данных есть ОКВЭДы A, B, C, D, а схема сборки выглядит как C=A+B, то D не должен попасть в результат.
5.3Включение элемента в себя в схеме сборки
Схема сборки позволяет указать, что для вычисления элемента необходимо суммировать не только вложенные в него элементы, но и сам этот элемент (если он уже присутствует в исходных данных). Данная возможность обеспечивает суммирование иерархических справочников, в которых исходные данные могут находиться сразу на нескольких уровнях.
При этом действуют следующие правила:
Если в схеме сборки указана циклическая связь (например, C=A+B+C), это значит, что при вычислении C следует помимо A и B включить в сумму C, присутствующие в данных, на которых применяется схема сборки. При этом в результат должен попасть именно рассчитанный элемент C = A+B+C, а не исходный элемент C.
Так как суммирование по схеме сборки идёт строго вверх по дереву, то повторное включение уже рассчитанного элемента в себя исключается.
Если же циклической связи не указано (C=A+B), а в итоговых данных есть элементы C, то эти элементы полностью игнорируются при сборке и не попадают в результат.
6Описание контролей
Для описаний ФЛК (контролей) используются те же параметризуемые подстановки и операторы, что и для расчёта показателей. Специфика заключается в том, что при расчёте ФЛК система должна выдавать сведения о корректности контроля для каждого элемента разреза (вместо конкретного значения показателя). Для этого при описании ФЛК вводятся дополнительные операторы сравнения:
Каждый из приведенных операторов сравнения работает с двумя операндами. При этом сравнение производится между ними поэлементно – по тем значениям, которые обладают одинаковыми значениями всех признаков разреза. Если у одного из операндов отсутствует комбинация признаков, присутствующая у второго, значение по этой комбинации у этого операнда принимается равным 0. На выходе для каждой комбинации признаков разреза получаем булево значение.
6.1Дополнительные правила
Если формула не указана, то подразумевается, что используется формула СВОД()
Используемые в формулах коды признаков и значения элементов справочников должны быть регистронезависимыми.
|