Приложение 2 Синтаксис языка описания алгоритмов расчётов СПЭЭО Общие принципы работы с формализованным языком
Для описания формул на формализованном языке используются операторы. Для каждого оператора в круглых скобках могут быть указаны условия отбора показателей, который используются в расчете (признаки и их значения), дополнительные подстановки. Если условия отбора не указаны, система учитывает значения признаков по умолчанию (описаны для каждого оператора).
Подстановки
Параметризуемые подстановки
В понятие «параметризуемые подстановки» входят признаки:
Операционный код показателя ($ОПЕРКОД);
Разрез разработки ($РАЗРЕЗ);
Тип свода ($ТИП_СВОДА);
Тип значений ($ТИП_ЗНАЧЕНИЯ).
Данные признаки указываются в соответствующих столбцах таблицы Расчет.
При осуществлении обработки, происходит «размножение» формулы на несколько, в каждой из которых будет использована уникальная комбинация значений подстановок.
Кроме того, параметризуемой подстановкой также является номер ТОГС ($ТОГС), который не указывается напрямую в таблице Расчет.
Подстановки относительных периодов
В формулах есть возможность использования относительных периодов – «предыдущий месяц», «все месяцы с начала года» и т.п. При обработке, данные относительные периоды заменяются на условия фильтрации по году и номеру периода.
Используемые подстановки относительных периодов:
Подстановка
| Наименование подстановки
| Условия фильтрации
| $ТекущийПериод
| Текущий период
| Год и номер периода = году/номеру периода текущего отчётного периода
| $ПредыдущийПериод
| Предыдущий период
| Если периодичность текущего отчётного периода – квартальная и номер текущего отчётного периода = 1, то
Год = Году отчётного периода – 1
Номер периода = 4
Если периодичность текущего отчётного периода – месячная и номер текущего отчётного периода = 1, то
Год = Году отчётного периода – 1
Номер периода = 12
Если номер текущего отчётного периода != 1, то
Год = Году отчётного периода
Номер периода = номеру отчётного периода - 1
| $ПериодПрошлогоГода
| Соответствующий период прошлого года
| Год = году отчётного периода – 1
Номер периода = номеру отчётного периода
| $ПериодСНачалаГода
| Период с начала текущего года
| Год = году отчётного периода
Номер периода <= номеру отчётного периода
| $ПериодСНачалаПрошлогоГода
| Соответствующий период с начала прошлого года
| Год = году отчётного периода – 1
Номер периода <= номеру отчётного периода
| Прочие подстановки
В формулах также есть возможность использования прочих подстановок:
Подстановка
| Наименование подстановки
| $Тогс
| номер текущего ТОГС
| $НомерПериода
| номер текущего периода разработки
| $НомерПредыдущегоПериода
| номер предыдущего периода разработки
| $Год
| год текущего периода разработки
| $ПредыдущийГод
| год текущего периода разработки - 1
| $Периодичность
| периодичность текущего периода разработки
| Операторы
Оператор СВОД()
Данный оператор используется при агрегации данных (например, при своде пообъектной БД). Наиболее часто используется в формулах.
Оператор СВОД имеет синтаксис:
СВОД(условия отбора показателей).
Условия отбора необязательны для заполнения.
Если в условиях отбора не указаны признаки, перечисленные ниже, эти признаки автоматически добавляются в условия отбора по следующим правилам:
Признак
| Значение по умолчанию
| Операционный код показателя (признак s_knp)
| s_knp = $ОПЕРКОД (текущее значение подстановки)
| Разрез разработки (признак s_razrez)
| Для РУ: s_razrez = 0
Для ФУ: s_razrez = $РАЗРЕЗ (текущее значение подстановки)
| Тип свода (признак s_tipisvodov)
| Для РУ: s_tipisvodov = 0
Для ФУ: s_tipisvodov = $ТИП_СВОДА (текущее значение подстановки)
| Тип значений (признак s_valuetype)
| s_valuetype = $ТИП_ЗНАЧЕНИЯ (текущее значение подстановки)
| Период (отсутствует любая из подстановок из раздела «Подстановки относительных периодов» и не указан напрямую признак p_period_number)
| $ТЕКУЩИЙ_ПЕРИОД
| Номер ТОГС (признак s_togs)
| s_togs = $ТОГС для РУ. Для ФУ значение по умолчанию отсутствует.
|
Оператор ПОКАЗАТЕЛЬ()
Данный оператор используется, когда в формуле необходимо обратиться к уже рассчитанному показателю.
Оператор ПОКАЗАТЕЛЬ имеет синтаксис:
ПОКАЗАТЕЛЬ (условия отбора показателей).
Условия отбора необязательны для заполнения.
Если в условиях отбора не указаны признаки, перечисленные ниже, эти признаки автоматически добавляются в условия отбора по следующим правилам:
Признак
| Значение по умолчанию
| Операционный код показателя (признак s_knp)
| s_knp = $ОПЕРКОД (текущее значение подстановки)
| Разрез разработки (признак s_razrez)
| s_razrez = $РАЗРЕЗ (текущее значение подстановки)
| Тип свода (признак s_tipisvodov)
| s_tipisvodov = $ТИП_СВОДА (текущее значение подстановки)
| Тип значений (признак s_valuetype)
| s_valuetype = $ТИП_ЗНАЧЕНИЯ (текущее значение подстановки)
| Период (отсутствует любая из подстановок из раздела «Подстановки относительных периодов» и не указан напрямую признак p_period_number)
| $ТЕКУЩИЙ_ПЕРИОД
| Номер ТОГС (признак s_togs)
| s_togs = $ТОГС для РУ. Для ФУ значение по умолчанию отсутствует.
| Пример
По форме П-1 показатель 1002 заполняется в отчете за следующие периоды: за текущий месяц, за предыдущий месяц, за соответствующий месяц прошлого года. Необходимо посчитать пообъектные показатели за период с начала года и за период с начала предыдущего года.
Группа
| Код
| Показатель
| Отключен
| Описание
| Тип значения
| Тип свода
| Разрезы разработки
| Формула
| П1_Открытая\П1Р202\1
| OE005
| 1002
| 0
| за период с начала года
| 4
| 0
| 0
| ПОКАЗАТЕЛЬ ($ПериодСНачалаГода И s_valuetype=1)
| П1_Открытая\П1Р202\1
| OE006
| 1002
| 0
| за соответствующий период прошлого года
| 6
| 0
| 0
| ПОКАЗАТЕЛЬ ($ПериодСНачалаГода И s_valuetype=3)
|
Оператор КОЛИЧЕСТВО()
Оператор используется для расчета количества организаций на региональном уровне (для вычисления типа значений 200), а также для вычисления количества сводных показателей (при необходимости).
Синтаксис аналогичен синтаксису оператора СВОД ():
КОЛИЧЕСТВО(условия отбора показателей).
Условия отбора необязательны для заполнения.
Если в условиях отбора не указаны признаки, перечисленные ниже, эти признаки автоматически добавляются в условия отбора по следующим правилам (аналогично оператору СВОД()):
Признак
| Значение по умолчанию
| Операционный код показателя (признак s_knp)
| s_knp = $ОПЕРКОД (текущее значение подстановки)
| Разрез разработки (признак s_razrez)
| Для РУ: s_razrez = 0
Для ФУ: s_razrez = $РАЗРЕЗ (текущее значение подстановки)
| Тип свода (признак s_tipisvodov)
| Для РУ: s_tipisvodov = 0
Для ФУ: s_tipisvodov = $ТИП_СВОДА (текущее значение подстановки)
| Тип значений (признак s_valuetype)
| s_valuetype = $ТИП_ЗНАЧЕНИЯ (текущее значение подстановки)
| Период (отсутствует любая из подстановок из раздела «Подстановки относительных периодов» и не указан напрямую признак p_period_number)
| $ТЕКУЩИЙ_ПЕРИОД
| Номер ТОГС (признак s_togs)
| s_togs = $ТОГС для РУ. Для ФУ значение по умолчанию отсутствует.
|
Оператор СРЕДНЕЕ()
Используется, когда необходимо подсчитать среднее значение, а не сумму. В остальном аналогичен оператору СВОД().
Оператор МИН()
Используется, когда необходимо подсчитать минимальное значение, а не сумму. В остальном аналогичен оператору СВОД().
Оператор МАКС()
Используется, когда необходимо подсчитать максимальное значение, а не сумму. В остальном аналогичен оператору СВОД().
Оператор ЕСЛИ()
Обеспечивает возможность вычисления значения показателя в конкретном разрезе различным образом, в зависимости от заранее определенных условий.
Синтаксис:
ЕСЛИ (<Условие>,<Формула, если условие выполнено>, <Формула, если условие не выполнено)
Условие представляет собой формулу, возвращающую конкретные значения признаков разреза. По каждому элементу разреза в зависимости от результата проверки условия, значение вычисляется по соответствующей формуле.
Оператор ВЫБОР()
Используется в случаях, когда в зависимости от условий, которые можно проверить до начала вычисления, необходимо использовать ту или иную формулу. Например, в зависимости от номера отчётного периода, использовать разные формулы.
Синтаксис:
ВЫБОР(Подстановка) {
Значение1 [, Значение2, …]: [Формула1];
[Значение3 [, Значение4, …]: [Формула2]];
[…]
[ИНАЧЕ: [Формула3]];
}
Квадратными скобками обозначены необязательные составляющие формулы.
Алгоритм работает следующим образом: если значение подстановки совпадает со Значение1 или Значение2, используется Формула1, и т.д. В качестве подстановок могут использоваться подстановки из раздела «Прочие подстановки».
В случае если не одно из значений не подходит и ключевое слово ИНАЧЕ не указано, расчёт не должен выполняться. Аналогично в случае, если формула не указана.
Оператор ПЕРЦЕНТИЛЬ()
Оператор ПЕРЦЕНТИЛЬ() аналогичен оператору СВОД(), но использует иную агрегатную функцию – в то время как СВОД() суммирует все элементы, обладающие одинаковыми значениями признаков разреза, ПЕРЦЕНТИЛЬ() использует следующий алгоритм агрегации (по каждой из групп, обладающей одинаковыми значениями признаков разреза):
Все значения в каждой группе упорядочиваются в порядке увеличения.
Рассчитывается порядковый номер элемента, который является i-ым перцентилем в данной группе: p = i% * (n + 1), где n – количество элементов. Т.е. порядковый номер 63% перцентиля в группе из 5 элементов будет равен p = 0.63*(5+1) = 3.78
Далее в зависимости от значения p:
Если полученный номер p <=1, то искомый перцентиль = первому элементу в упорядоченном наборе (т.е. минимальному элементу)
Если полученный номер p >= наибольшего номера элемента, то искомый перцентиль = последнему элементу в упорядоченном наборе (т.е. максимальному элементу)
Если полученный номер p целый, то искомым перцентилем является элемент с порядковым номером p (в отсортированном наборе)
Если порученный номер p дробный, то искомым перцентилем является среднее между двумя элементами в наборе, между номерами которых заключен p.
Оператор Перцентиль() имеет синтаксис:
ПЕРЦЕНТИЛЬ(<уровень перцентиля>, <условия отбора показателей>)
Уровень перцентиля – это число от 1 до 100. Условия отбора необязательны для заполнения.
Если в условиях отбора не указаны некоторые выделенные признаки, эти признаки автоматически добавляются в условия отбора, объединяются с другими условиями отбора через оператор «И» и устанавливаются значениями по умолчанию для оператора ПЕРЦЕНТИЛЬ ():
Признак
| Значение по умолчанию
| Операционный код показателя (признак s_knp)
| s_knp = $ОПЕРКОД (текущее значение подстановки)
| Разрез разработки (признак s_razrez)
| Для РУ: s_razrez = 0
Для ФУ: s_razrez = $РАЗРЕЗ (текущее значение подстановки)
| Тип свода (признак s_tipisvodov)
| Для РУ: s_tipisvodov = 0
Для ФУ: s_tipisvodov = $ТИП_СВОДА (текущее значение подстановки)
| Тип значений (признак s_valuetype)
| s_valuetype = $ТИП_ЗНАЧЕНИЯ (текущее значение подстановки)
| Период (отсутствует любая из подстановок из раздела «Подстановки относительных периодов» и не указан напрямую признак p_period_number)
| $ТЕКУЩИЙ_ПЕРИОД
| Номер ТОГС (признак s_togs)
| s_togs = $ТОГС для РУ. Для ФУ значение по умолчанию отсутствует.
| Оператор КВАРТИЛЬ()
Аналогичен оператору ПЕРЦЕНТИЛЬ(). Имеет синтаксис:
КВАРТИЛЬ(<уровень квартиля>, <условия отбора показателей>)
Уровень квартиля – это число от 1 до 3. Условия отбора необязательны для заполнения.
Оператор КВАРТИЛЬ() сводится к применению оператора ПЕРЦЕНТИЛЬ следующим образом:
КВАРТИЛЬ()
| Заменяется на
| КВАРТИЛЬ(1, <условия отбора>)
| ПЕРЦЕНТИЛЬ(25, <условия отбора>)
| КВАРТИЛЬ(2, <условия отбора>)
| ПЕРЦЕНТИЛЬ(50, <условия отбора>)
| КВАРТИЛЬ(3, <условия отбора>)
| ПЕРЦЕНТИЛЬ(75, <условия отбора>)
| Оператор МЕДИАНА()
Аналогичен оператору ПЕРЦЕНТИЛЬ(). Имеет синтаксис:
МЕДИАНА(<условия отбора показателей>)
Уровень квартиля – это число от 1 до 3. Условия отбора необязательны для заполнения.
Оператор МЕДИАНА() сводится к применению оператора ПЕРЦЕНТИЛЬ следующим образом:
МЕДИАНА()
| Заменяется на
| МЕДИАНА(<условия отбора>)
| ПЕРЦЕНТИЛЬ(50, <условия отбора>)
| Оператор ОКРУГЛ()
Оператор реализует округление значений показателя до указанного количества знаков после запятой. Имеет синтаксис:
ОКРУГЛ(<Разрядность>, <Формула>)
Разрядность – количество знаков после запятой, до которого надо округлить каждое из значений показателя, являющегося результатом формулы.
Формула представляет собой ряд операторов (СВОД(), ПОКАЗАТЕЛЬ(), КОЛИЧЕСТВО(), ЕСЛИ(), ABS() и т.д., объединенных арифметическими операторами.
Оператор ABS()
Оператор ABS() реализует вычисление модуля числа. Применяется над всеми значениями сводного показателя, указанного в качестве параметра. Имеет следующий синтаксис:
ABS(<Формула>)
Формула представляет собой ряд операторов (СВОД(), ПОКАЗАТЕЛЬ(), КОЛИЧЕСТВО(), ЕСЛИ(), ABS() и т.д., объединенных арифметическими операторами.
Оператор СПРАВОЧНИК()
Позволяет выбрать значение указанного столбца в любом из справочников по условиям, наложенным на другие столбцы этого же справочника. Имеет следующий синтаксис:
СПРАВОЧНИК(<код справочника>, <поле справочника>, <условие отбора>)
Код справочника – код справочника, из которого нам необходимо получить значение.
Поле справочника – код дополнительного поля справочника, которое необходимо вернуть в результате.
Условие отбора – условие, накладываемое на поля указанного справочника (включая дополнительные поля) и позволяющее отобрать конкретный элемент этого справочника, значение указанного поля по которому вернется в результате. Условие записывается в виде:
<Код поля справочника> = <Значение> И <Код поля справочника> = <Значение> И…
При этом для значений можно указывать стандартные подстановки ($ГОД, $ТОГС, $НомерПериода и т.д.).
Исключение признаков
Используется для операторов СВОД и ПОКАЗАТЕЛЬ. Указывается в квадратных скобках после оператора, до круглых скобок:
СВОД[<Перечень исключаемых признаков>](<условия отбора>)
ПОКАЗАТЕЛЬ[<Перечень исключаемых признаков>](<условия отбора>)
При работе с операторами СВОД() и ПОКАЗАТЕЛЬ() система автоматически сравнивает признаки каждого показателя, находит показатели с одинаковой призначной частью и дальнейшие вычисления производит над ними.
Арифметические операторы над сводными показателями
Операторы СВОД(), КОЛИЧЕСТВО(),ПОКАЗАТЕЛЬ(), ЕСЛИ(), ABS() и т.д. могут быть объединены арифметическими операциями: +, -, *, /, скобки. Используется стандартный арифметический приоритет операций. Перед началом арифметических действий необходимо рассчитать каждый из операндов.
Арифметические операции проводятся над значениями сводных показателей, обладающих одинаковыми значениями по каждому из признаков разреза. В случае если разрезы операндов различаются и у одного из показателей-операндов отсутствует ряд признаков, входящих в рассчитываемый разрез, то при проведении арифметических действий над этими операндами, проверка равенства по данным признакам не осуществляется. Также при сравнении необходимо учитывать признаки, исключенные из сравнения (см. «Исключение признаков»).
Если у одного из показателей-операндов отсутствует совокупность значений признаков разреза, присутствующего у другого показателя (учитываются только признаки, входящие в рассчитываемый разрез и являющиеся общими для обоих операндов), то у первого операнда значение по данной совокупности принимается = 0 и далее используется вышеприведенный механизм расчёта.
Арифметические операторы над сводом и числом
Аналогичны арифметическим оператором над сводами, за исключением того, что в качестве одного или обеих из операндов выступает константа или импортируемый показатель-константа (для таких показателей предусмотрены признаки s_razrez = -1, s_tipisvodov = 0).
При проведении операции между сводным показателям и константой необходимо осуществить сложение/вычитание/умножение/деление каждого значения сводного/импортируемого сводного показателя с числом.
Описание условий отбора
Арифметические операторы
В операторах СВОД(), ПОКАЗАТЕЛЬ(), КОЛИЧЕСТВО() и т.д. есть возможность указания условий отбора показателей. Условия отбора накладываются на признаки показателя и описываются следующими операторами:
=, !=
| равно, не равно
| >, >=
| больше, больше или равно
| <, <=
| меньше, меньше или равно
| ИЗ, БЕЗ
| подробное описание – в разделе «Операторы ИЗ, БЕЗ»
| Арифметический оператор = имеет следующий синтаксис:
<Код признака> = <Значение признака>
Синтаксис прочих арифметических операторов аналогичен.
Операторы ИЗ, БЕЗ
Оператор ИЗ проверяет принадлежность значения признака к выборке, определенной в виде списка значений, разделенных запятыми или к заранее подготовленной выборке. Оператор БЕЗ является обратным к оператору ИЗ. Таким образом, синтаксис данных операторов выглядит следующим образом:
<Код признака> ИЗ (<Набор значений, разделенных запятыми>)
<Код признака> ИЗ @<Код выборки>
<Код признака> БЕЗ (<Набор значений, разделенных запятыми>)
<Код признака> БЕЗ @<Код выборки>
Оператор Период()
Оператор Период() позволяет задать условие на принадлежность показателя к тому или иному периоду разработки (или сразу к нескольким периодам).
Оператор Период() имеет следующий синтаксис:
Период(<Смещение по году>, <Смещение относительно текущего периода>, <Нарастающий итог?>)
Параметр "Смещение по году" указывает смещение в годах относительно года текущего периода разработки. Может принимать положительные, отрицательные значения и 0.
Параметр "Смещение относительно текущего периода" указывает смещение в периодах относительно номера текущего периода. Может принимать положительные, отрицательные значения и 0
Параметр "Нарастающий итог?" служит для указания, требуются ли данные за конкретный период или нарастающим итогом с начала года до конкретного периода.
Подстановки относительных периодов, описанные в "Подстановки относительных периодов", заменяются на оператор Период() следующим образом:
Подстановка
| Реализация оператором Период()
| $ТекущийПериод
| Период(0, 0, 0)
| $ПредыдущийПериод
| Период(0, -1, 0)
| $ПериодПрошлогоГода
| Период (-1, 0, 0)
| $ПериодСНачалаГода
| Период(0, 0, 1)
| $ПериодСНачалаПрошлогоГода
| Период(-1, 0, 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
Использование схем сборок
Для каждого признака, входящего в разрез может быть указана схема сборки, отражающая иерархию данного признака в пределах этого разреза. Схемы сборки применяются для каждого агрегирующего оператора, кроме ПОКАЗАТЕЛЬ() после того как рассчитаны значения показателя по каждой из имеющихся в исходных данных комбинаций значений признаков разреза. При этом применяются схемы сборки, соответствующие разрезу = $РАЗРЕЗ (текущему значению подстановки). В случае если в формуле содержится несколько операторов необходимо применять соответствующие схемы сборки для каждого оператора.
В случае если разрез содержит более одного признака с указанной схемой сборки, схемы сборки применяются в произвольном порядке.
Алгоритм применения схем сборки:
Применяем 1-ую по порядку схему сборки, соответствующую Признаку1. Суммируем по данной схеме сборки элементы с одинаковыми значениями других признаков (кроме Признака1). При этом у суммарного элемента значение всех признаков, кроме Признака1 должны совпадать с соответствующими значениями этих признаков у входящих в него элементов. Суммирование осуществляется, начиная с листовых элементов и заканчивая корнем.
Применяем 2-ую по порядку схему сборки, соответствующую Признаку2. Аналогично суммируем по данной схеме сборки элементы с одинаковыми значениями других признаков (кроме Признака2). При этом суммируются и те элементы, которые были получены при суммировании по первой схеме сборки (по Признаку1).
…
Применяем N-ую по порядку схему сборки, соответствующую ПризнакуN. Аналогично суммируем по данной схеме сборки элементы с одинаковыми значениями других признаков (кроме ПризнакаN). При этом суммируются и те элементы, которые были получены при суммировании по все предыдущим схемам сборки (по Признакам1, 2 …).
ВАЖНО! При суммировании с листовых элементов до корня необходимо просуммировать все входящие элементы перед тем как суммировать головной
Схема сборки в дополнении к своей основной функции является фильтром. Те элементы, которых нет в схеме сборки (ни в столбце ParentCode, ни в столбце Code), не должны попасть в результат, даже если они встречаются в исходных данных. Таким образом, если в исходных данных есть ОКВЭДы A, B, C, D, а схема сборки выглядит как C=A+B, то D не должен попасть в результат.
Включение элемента в себя в схеме сборки
Схема сборки позволяет указать, что для вычисления элемента необходимо суммировать не только вложенные в него элементы, но и сам этот элемент (если он уже присутствует в исходных данных). Данная возможность обеспечивает суммирование иерархических справочников, в которых исходные данные могут находиться сразу на нескольких уровнях.
При этом действуют следующие правила:
Если в схеме сборки указана циклическая связь (например, C=A+B+C), это значит, что при вычислении C следует помимо A и B включить в сумму C, присутствующие в данных, на которых применяется схема сборки. При этом в результат должен попасть именно рассчитанный элемент C = A+B+C, а не исходный элемент C.
Так как суммирование по схеме сборки идёт строго вверх по дереву, то повторное включение уже рассчитанного элемента в себя исключается.
Если же циклической связи не указано (C=A+B), а в итоговых данных есть элементы C, то эти элементы полностью игнорируются при сборке и не попадают в результат.
Описание контролей
Для описаний ФЛК (контролей) используются те же параметризуемые подстановки и операторы, что и для расчёта показателей. Специфика заключается в том, что при расчёте ФЛК система должна выдавать сведения о корректности контроля для каждого элемента разреза (вместо конкретного значения показателя). Для этого при описании ФЛК вводятся дополнительные операторы сравнения: Каждый из приведенных операторов сравнения работает с двумя операндами. При этом сравнение производится между ними поэлементно – по тем значениям, которые обладают одинаковыми значениями всех признаков разреза. Если у одного из операндов отсутствует комбинация признаков, присутствующая у второго, значение по этой комбинации у этого операнда принимается равным 0. На выходе для каждой комбинации признаков разреза получаем булево значение.
Дополнительные правила
Если формула не указана, то подразумевается, что используется формула СВОД()
Используемые в формулах коды признаков и значения элементов справочников должны быть регистронезависимыми.
Примеры ФЛК:
ЕСЛИ (ПОКАЗАТЕЛЬ (s_knp=1081_w) >= ПОКАЗАТЕЛЬ (s_knp=1082_w), ПОКАЗАТЕЛЬ (s_knp=1081_w) >= ПОКАЗАТЕЛЬ (s_knp=1080_w) И ПОКАЗАТЕЛЬ (s_knp=1080_w) >= ПОКАЗАТЕЛЬ (s_knp=1082_w), ПОКАЗАТЕЛЬ (s_knp=1082_w) >= ПОКАЗАТЕЛЬ (s_knp=1080_w) И ПОКАЗАТЕЛЬ (s_knp=1080_w) >= ПОКАЗАТЕЛЬ(s_knp=1081_w))
| ((ПОКАЗАТЕЛЬ(s_razrez=3 И s_okved_main=00 И s_okato ИЗ @pril_okato_77_%togs%)-ПОКАЗАТЕЛЬ(s_razrez=45 И s_okved_pure=00)) / ПОКАЗАТЕЛЬ(s_razrez=3 И s_okved_main=00 И s_okato ИЗ @pril_okato_77_%togs%))*100 >= -0.15 И ((ПОКАЗАТЕЛЬ(s_razrez=3 И s_okved_main=00 И s_okato ИЗ @pril_okato_77_%togs%)-ПОКАЗАТЕЛЬ(s_razrez=45 И s_okved_pure=00)) / ПОКАЗАТЕЛЬ(s_razrez=3 И s_okved_main=00 И s_okato ИЗ @pril_okato_77_%togs%))*100 <= 0.15
| ВЫБОР($НомерПериода) { 6: ((ПОКАЗАТЕЛЬ()*100) / ПОКАЗАТЕЛЬ(ПЕРИОД (0,-3,0)) - 100) >= -10 И ((ПОКАЗАТЕЛЬ()*100) / ПОКАЗАТЕЛЬ(ПЕРИОД (0,-3,0)) - 100) <=10; 9: ((ПОКАЗАТЕЛЬ()*100) / ПОКАЗАТЕЛЬ(ПЕРИОД (0,-3,0)) - 100) >= -10 И ((ПОКАЗАТЕЛЬ()*100) / ПОКАЗАТЕЛЬ(ПЕРИОД (0,-3,0)) - 100) <=10; 12: ((ПОКАЗАТЕЛЬ()*100) / ПОКАЗАТЕЛЬ(ПЕРИОД (0,-3,0)) - 100) >= -10 И ((ПОКАЗАТЕЛЬ()*100) / ПОКАЗАТЕЛЬ(ПЕРИОД (0,-3,0)) - 100) <=10; }
| ((ПОКАЗАТЕЛЬ(s_razrez = 3 И s_okato ИЗ @pril_okato_77_%togs% И s_okved_main ИЗ @pril_okved_13)-ПОКАЗАТЕЛЬ[s_grup_org_50, s_kfs](s_razrez = 87 И s_okato ИЗ @pril_okato_77_%togs% И s_grup_org_50 = 18 И s_kfs=199))/ПОКАЗАТЕЛЬ[s_grup_org_50, s_kfs](s_razrez = 87 И s_okato ИЗ @pril_okato_77_%togs% И s_grup_org_50 = 18 И s_kfs=199))*100 >= -1 И ((ПОКАЗАТЕЛЬ(s_razrez = 3 И s_okato ИЗ @pril_okato_77_%togs% И s_okved_main ИЗ @pril_okved_13)-ПОКАЗАТЕЛЬ[s_grup_org_50, s_kfs](s_razrez = 87 И s_okato ИЗ @pril_okato_77_%togs% И s_grup_org_50 = 18 И s_kfs=199))/ПОКАЗАТЕЛЬ[s_grup_org_50, s_kfs](s_razrez = 87 И s_okato ИЗ @pril_okato_77_%togs% И s_grup_org_50 = 18 И s_kfs=199))*100 <= 1
| Примеры расчётов показателей:
| ВЫБОР($Тогс) { 71: (ПОКАЗАТЕЛЬ(s_knp=4002 И s_tipisvodov=251 И s_razrez = 4 И s_okato ИЗ @pril_okato_han И s_okved_pure ИЗ @pril_okved_43)*ПОКАЗАТЕЛЬ[s_okato](s_knp=8801_h И s_valuetype=1)) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8811_h И s_valuetype=1) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8802_h И s_valuetype=1) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8803_h И s_valuetype=1) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8808_h И s_valuetype=2) + (ПОКАЗАТЕЛЬ(s_knp=4002 И s_tipisvodov=251 И s_razrez = 4 И s_okato ИЗ @pril_okato_yam И s_okved_pure ИЗ @pril_okved_43)*ПОКАЗАТЕЛЬ[s_okato](s_knp=8801_y И s_valuetype=1)) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8811_y И s_valuetype=1) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8802_y И s_valuetype=1) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8803_y И s_valuetype=1) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8808_y И s_valuetype=2) + (ПОКАЗАТЕЛЬ(s_knp=4002 И s_tipisvodov=251 И s_razrez = 4 И s_okato ИЗ @pril_okato_tum И s_okved_pure ИЗ @pril_okved_43)*ПОКАЗАТЕЛЬ[s_okato](s_knp=8801_t И s_valuetype=1)) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8811_t И s_valuetype=1) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8802_t И s_valuetype=1) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8803_t И s_valuetype=1) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8808_t И s_valuetype=2); }
| ВЫБОР($Тогс) { 71: (ПОКАЗАТЕЛЬ(s_knp=4007 И s_tipisvodov=251 И s_razrez = 4 И s_okato ИЗ @pril_okato_han И s_okved_pure ИЗ @pril_okved_43)*ПОКАЗАТЕЛЬ[s_okato](s_knp=8804_h И s_valuetype=1)) + (ПОКАЗАТЕЛЬ(s_knp=4030 И s_tipisvodov=251 И s_razrez = 4 И s_okato ИЗ @pril_okato_han И s_okved_pure ИЗ @pril_okved_43) * (ПОКАЗАТЕЛЬ[s_okato](s_knp=8812_h И s_valuetype=1)*ПОКАЗАТЕЛЬ[s_okato](s_knp=8811_h И s_valuetype=1) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8806_h И s_valuetype=1)*ПОКАЗАТЕЛЬ[s_okato](s_knp=8802_h И s_valuetype=1) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8807_h И s_valuetype=1)*ПОКАЗАТЕЛЬ[s_okato](s_knp=8803_h И s_valuetype=1)))/1000 + ПОКАЗАТЕЛЬ[s_okato](s_knp=8809_h И s_valuetype=2) + (ПОКАЗАТЕЛЬ(s_knp=4007 И s_tipisvodov=251 И s_razrez = 4 И s_okato ИЗ @pril_okato_yam И s_okved_pure ИЗ @pril_okved_43)*ПОКАЗАТЕЛЬ[s_okato](s_knp=8804_y И s_valuetype=1)) + (ПОКАЗАТЕЛЬ(s_knp=4030 И s_tipisvodov=251 И s_razrez = 4 И s_okato ИЗ @pril_okato_yam И s_okved_pure ИЗ @pril_okved_43) * (ПОКАЗАТЕЛЬ[s_okato](s_knp=8812_y И s_valuetype=1)*ПОКАЗАТЕЛЬ[s_okato](s_knp=8811_y И s_valuetype=1) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8806_y И s_valuetype=1)*ПОКАЗАТЕЛЬ[s_okato](s_knp=8802_y И s_valuetype=1) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8807_y И s_valuetype=1)*ПОКАЗАТЕЛЬ[s_okato](s_knp=8803_y И s_valuetype=1)))/1000 + ПОКАЗАТЕЛЬ[s_okato](s_knp=8809_y И s_valuetype=2) + (ПОКАЗАТЕЛЬ(s_knp=4007 И s_tipisvodov=251 И s_razrez = 4 И s_okato ИЗ @pril_okato_tum И s_okved_pure ИЗ @pril_okved_43)*ПОКАЗАТЕЛЬ[s_okato](s_knp=8804_t И s_valuetype=1)) + (ПОКАЗАТЕЛЬ(s_knp=4030 И s_tipisvodov=251 И s_razrez = 4 И s_okato ИЗ @pril_okato_tum И s_okved_pure ИЗ @pril_okved_43) * (ПОКАЗАТЕЛЬ[s_okato](s_knp=8812_t И s_valuetype=1)*ПОКАЗАТЕЛЬ[s_okato](s_knp=8811_t И s_valuetype=1) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8806_t И s_valuetype=1)*ПОКАЗАТЕЛЬ[s_okato](s_knp=8802_t И s_valuetype=1) + ПОКАЗАТЕЛЬ[s_okato](s_knp=8807_t И s_valuetype=1)*ПОКАЗАТЕЛЬ[s_okato](s_knp=8803_t И s_valuetype=1)))/1000 + ПОКАЗАТЕЛЬ[s_okato](s_knp=8809_t И s_valuetype=2); }
| ВЫБОР($НомерПериода) {1: СВОД (p_period_number=1 И s_valuetype=4);2: СВОД (p_period_number=2 И s_valuetype=4) - СВОД (p_period_number=1 И s_valuetype=1);3: СВОД (p_period_number=3 И s_valuetype=4 И s_okved_main БЕЗ (03.00.09)) - СВОД (p_period_number=2 И s_valuetype=4);4: СВОД (p_period_number=4 И s_valuetype=4) - СВОД (p_period_number=3 И s_valuetype=4 И s_okved_main БЕЗ (03.00.09));5: СВОД (p_period_number=5 И s_valuetype=4) - СВОД (p_period_number=4 И s_valuetype=4);6: СВОД (p_period_number=6 И s_valuetype=4 И s_okved_main БЕЗ (03.00.09)) - СВОД (p_period_number=5 И s_valuetype=4);7: СВОД (p_period_number=7 И s_valuetype=4) - СВОД (p_period_number=6 И s_valuetype=4 И s_okved_main БЕЗ (03.00.09));8: СВОД (p_period_number=8 И s_valuetype=4) - СВОД (p_period_number=7 И s_valuetype=4);9: СВОД (p_period_number=9 И s_valuetype=4 И s_okved_main БЕЗ (03.00.09)) - СВОД (p_period_number=8 И s_valuetype=4);10: СВОД (p_period_number=10 И s_valuetype=4) - СВОД (p_period_number=9 И s_valuetype=4 И s_okved_main БЕЗ (03.00.09));11: СВОД (p_period_number=11 И s_valuetype=4) - СВОД (p_period_number=10 И s_valuetype=4);12: СВОД (p_period_number=12 И s_valuetype=4 И s_okved_main БЕЗ (03.00.09)) - СВОД (p_period_number=11 И s_valuetype=4);}
|
|