Алгоритмы блоков отчета

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

Понимание необходимости создания алгоритма возникает в процессе конструирования отчета. Рассмотрим создание алгоритма блоков отчета на примере управленческого баланса.

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

Такие показатели находятся в составе как оборотных активов, так и в составе текущих обязательств.

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

  1. Необходимо рассчитать начальный остаток (начальный остаток может быть введен по разным статьям - ДЗ по клиентам, КЗ по клиентам).
  2. Суммируются все обороты по реализации.
  3. Суммируются все обороты по выручке.
  4. Вычисляется показатель по формуле : Начальный остаток (+/-) + Оборот по реализации + Оборот по выручке.

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

Такие блоки создаются по каждой статье управленческого баланса, отражающей состояние расчетов с контрагентами.

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

Эту последовательность расчетов мы можем записать в виде алгоритма, в таком случае вместо 6 блоков мы создадим только один с типом Алгоритм (см. Типы блоков кросс-таблицы). Таким образом значительно уменьшиться время перестройки отчета.

Для создания нового алгоритма перейдите в меню Отчетность -> Настройки -> Алгоритмы блоков отчетов. Откроется окно диалога Преднастроенные алгоритмы.

Этот диалог позволяет создать новый алгоритм, удалить выделенный и отредактировать ранее созданный алгоритм.

Чтобы создать новый алгоритм кликните по кнопке Добавить. Откроется следующее окно:

Нажмите на кнопку +Корень и создайте корневой элемент алгоритма. Откроется окно Карточки блока кросс-таблицы с пустыми полями.

Присвойте имя корневому блоку. Задайте наименование в поле Имя-параметр для родителя. Укажить тип разделения - Нет разделения. Сохраните корневой блок нажав на кнопку ОК.

Теперь создайте блоки согласно выше описанной последовательности расчета.
Блок НачОстаткиДТ (+) рассчитывает сумму начальных остатков задолженности, отражаемой в оборотных активах:

В блоке НачОстаткиКТ (-) суммируется начальные остатки по кредиторской задолженности:

ПереплатаАвансДТ (+) - собирается оборот по всем платежам в адрес контрагента:

В блоке ПереплатаАвансКЗ(-) суммируются все обороты по поступившим платежам от контрагента:

УвеличениеДЗ(+) - все операции по реализации:

УвеличениеКЗ (+) оборот по всем поставкам, принятым работам, полученным услугам от контрагента:

Обратите внимание, для каждого блока алгоритма применяется свое выражение. Для записи выражений необходимо предварительно создать соответствующие параметры. Параметр можно создать непосредственно в окне диалога Преднастроенные алгоритмы. Для создания параметра нажмите на кнопку с изображением + в нижнем левом углу окна

Для блока НачОстаткиДТ (+) выражение ($dictBalanceDebt.Contains(@Stat)),

где
параметр dictBalanceDebt - ссылка на элемент справочника Статьи - ДЗ по заказчикам в группе статей Ввод начальных остатков. Могут быть указаны все статьи Актива баланса на которых отражается начальное сальдо по дебиторской задолженности.

Для блока НачОстаткиКТ (-) выражение ($dictAccountsPayable.Contains(@Stat)),

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

Для блока ПереплатаАвансДТ (+) ($dicCashOutFO.Contains(@TypeFO) ),

где
параметр dicCashOutFO указывает только на тип операции Платежи, по отбору подлежат все суммы выплаченные контрагенту.

Для блока ПереплатаАвансКЗ (-) ($dicCashInFO.Contains(@TypeFO) ),

где
параметр dicCashInFO указаывает только на тип операции Поступления, в данном случае в выборку будут попадать все суммы полученные от контрагента

Для блока УвеличениеДЗ(+) ($dicIncomeFO.Contains(@TypeFO)),

где
параметр dicIncomeFO - отбираются все операции по реализации.

Для блока УвеличениеКЗ (+) ($dicExpensesFO.Contains(@TypeFO)),

где
Параметр dicExpensesFO - отбираются все операции, увеличивающие кредиторскую задолженность (в данном примере реализова учет по методу начисления).