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Дополнительные правила Если формула не указана, то подразумевается, что используется формула СВОД()
Используемые в формулах коды признаков и значения элементов справочников должны быть регистронезависимыми.
|