Зависимость по базовому периоду в регистрах расчета

Курс

Зависимость по периоду действия

Рассмотрим подробнее как происходит расчет в зависимости от базы.

В документ Начисление зарплаты, созданный в предыдущей статье добавим два новых реквизита: БазаНачало и БазаКонец:

документ Начисление зарплаты

Алгоритм расчета будет следующий:

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

В настройках плана видов расчета указано, что база зависит по периоду действия:

зависит по периоду действия

Для премии в базовых видах расчета укажем оклад:

Базовые виды расчета

Начислим Иванову и Петрову оклады за август 2021:

Расчет оклада
Расчет оклада

Теперь начислим премию Иванову в размере 10%, указав в качестве базового периода август 2021:

Расчет премии

Размер премии составит 2000:

Расчет премии

Премия была рассчитана следующим образом:

  1. За период с 01.08.2021 по 31.08.2021 (базовый период премии) был получен фактический период действия оклада (23 дня).
  2. Затем была получена сумма оклада за этот же период и была рассчитана сумма за фактический период действия = 23 / 23 * 20 000 = 20 000. Это база для премии.
  3. База была умножена на процент премии = 10 / 100 * 20 000 = 2 000.

Если указать для премии базовый период с 01.08.2021 по 15.08.2021:

базовый период

То уменьшится и сумма премии:

сумма премии
  1. За период с 01.08.2021 по 15.08.2021 (базовый период премии) был получен фактический период действия оклада (11 дней).
  2. Затем была получена сумма оклада за этот же период и была рассчитана сумма за фактический период действия = 11 / 23 * 20 000 = 9565,22. Это база для премии.
  3. База была умножена на процент премии = 10 / 100 * 9565,22 = 956,52.

Виртуальная таблица с базой

Для получения базы использовалась виртуальная таблица с базой регистра расчета:

виртуальная таблица с базой

Количество виртуальных таблиц совпадает с количеством связанных регистров расчета. То есть если бы в конфигурации был еще один регистр расчета, который связан с планом видов расчетов, который указан как базовый план видов расчета для текущего плана:

базовый план видов расчета
базовый план видов расчета

То у регистра расчета была бы еще одна виртуальная таблица для базы:

план видов расчета

Состав полей виртуальной таблицы совпадает с основной таблицей регистра расчета, плюс по одному полю с базой для каждого ресурса регистра расчета и дополнительные поля с суффиксом «Разрез» для каждого поля регистра расчета:

Разрез базы

У виртуальной таблицы есть четыре параметра:

Параметры виртуальной таблицы

Параметры ИзмеренияОсновногоРегистра и ИзмеренияБазовогоРегистра обязательны к заполнению. Если их не заполнить, то при выполнении запроса будет выброшено исключение «Не задан параметр «ИзмеренияОсновногоРегистра»» или «Не задан параметр «ИзмеренияБазовогоРегистра»».

В данные параметры нужно передать массив строк с именами измерений основного регистра расчета (в котором находится рассчитываемый вид расчета) и базового регистра расчета (в котором находится базовый вид расчета). По этим измерениям будет выполнен отбор в базовом регистре расчета. Значения измерений будут взяты из основного регистра. Например, если в основном регистре измерение называется «Сотрудник», а в базовом «ФизЛицо», то нужно передать два разных массива:

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

Если основной и базовый регистры совпадают, то можно использовать один массив:

База Регистра Расчета

Если сейчас выбрать в запросе какое-нибудь поле с суффиксом «Разрез», то будет получена ошибка, что поле не найдено. Поля с суффиксом «Разрез» появляются в виртуальной таблице только в том случае, если они указаны в параметре Разрезы. Тип данного параметра тоже массив строк. Передадим в данный параметр массив с одним значением «СтатьяЗатрат» и выполним следующий запрос:

База Регистра Расчета

При этом в качестве полей для разреза нельзя использовать поля, которые указаны как измерения базового регистра, потому что по данным полям будет выполнен отбор и разрез по ним просто не имеет смысла. Если передать в параметр Разрезы такое поле, то при выполнении запроса будет выброшено исключение «Заданный разрез совпадает с измерением базового регистра».

С помощью параметра Условие можно наложить произвольный отбор на виртуальную таблицу базы.

Метод ПолучитьБазу

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

Зависимость по периоду регистрации

Если в плане видов расчета настроена зависимость базы от периода регистрации:

зависимость базы от периода регистрации

То при получении базы будет анализироваться не фактический период действия, а период регистрации. Например, изменим период регистрации оклада на июль, оставив период действия — август:

Оклады

Если для премии указать базовый период с 01.08.2021 по 31.08.2021, то размер рассчитанной премии будет равен нулю:

Премия
Премия

Если поменять базовый период на июль, то премия рассчитается:

Премия
Премия

Причем, в данном случае не имеет значения протяженность самого базового периода. Важно чтобы период регистрации попал в него. То есть если указать период с 01.07.2021 по 15.07.2021 или с 30.07.2021 по 31.07.2021 все равно премия будет равна 2000.

Базовый период как период действия

Если в плане видов расчета настроено и использование периода действия и зависимость по базовому периоду, то у вида расчета появляется флаг Базовый период как период действия:

Базовый период как период действия

Если установить данный флаг для премии, то при определении базового периода будет использоваться фактический период действия премии (обычно у премии нет периода действия, в данном случае премия используется только для примера).

Например, начислим оклад за август:

оклад

И рассчитаем премию за август, указав период действия с 01.08.2021 по 15.08.2021, а базовый период с 01.08.2021 по 31.08.2021:

Премия

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

Премия

Так произошло, потому что для получения базы использовался период действия премии, а он только до 15.08.2021.

Причем учитывается именно фактический период действия. То есть, если бы премия была вытеснена каким-то другим видом расчета в периоде с 06.08.2021 по 10.08.2021, то для получения базы использовались бы два периода:

  • С 01.08.2021 по 05.08.2021
  • И с 11.08.2021 по 15.08.2021

Подписывайтесь на группу ВКонтакте , где я публикую ссылки на новые статьи с данного сайта, а также интересные материалы с других ресурсов по программированию в 1С
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Используя этот сайт, Вы даете согласие на использование cookies. На данном этапе Вы можете отказаться от использования cookies, настроив необходимые параметры в своем браузере.
ok