Опубликовано: 19.08.2022

Работа с правилами перерасчёта

Общие сведения

Правила перерасчёта являются вспомогательными объектами метаданных компоненты «Расчет». Они предназначены для автоматического отслеживания актуальности результатов проведённых расчётов при вводе новых записей журнала расчётов.

При создании правила перерасчёта в Конфигураторе определяются виды расчётов, при редактировании которых правило перерасчёта «срабатывает», и виды расчётов, которые должны быть перерасчитаны при срабатывании данного правила (см. рис. ниже).

Список видов расчёта, на основании которых срабатывает правило перерасчёта, условно называется «ведущие виды расчета». Список видов расчёта, которые должны быть перерасчитаны при срабатывании данного правила условно называется «зависимые виды расчета».

Свойства правила перерасчета

Для организации правильного перерасчёта доплат следует в качестве ведущих видов расчёта указать те, на основании которых считаются доплаты (например: оклад, тариф, сдельная оплата), а в качестве зависимых видов расчёта следует указать собственно перерасчитываемые доплаты.

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

Например, если в журнале расчётов появится новая (в результате проведения документа), исчезнет (при отмене проведения) или будет исправлена существующая запись с одним из «ведущих» видов расчёта (в нашем примере оклад, тариф, сдельная оплата), то будет снят признак «Рассчитана» со всех записей, соответствующих доплатам, если найдутся таковые с тем же периодом действия, что и введённая, удалённая или исправленная запись.

Если при этом вводится запись с периодом действия не в текущем расчётном периоде, а в одном из прошлых (например, расчёт оклада задним числом за прошлый месяц), то система введет записи-перерасчёты для всех доплат соответствующего прошлого периода.

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

Контекст работы с правилами перерасчёта

Средства языка предоставляют возможность непосредственного доступа к атрибутам и методам правил перерасчёта, объявленных в Конфигураторе, в любом программном модуле (все объявленные в Конфигураторе правила перерасчёта принадлежат глобальному контексту конфигурации). Во всех текстах программных модулей для доступа к атрибутам или вызова методов правил перерасчёта можно записать соответствующий метод или атрибут через точку после полного имени правила перерасчёта.

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

ПравилоПерерасчета.<ИдентификаторПравилаПерерасчета>

Англоязычный синоним ключевого слова «ПравилоПерерасчета» — «RecalculationRule».

Пример использования:

КолПериодов = ПравилоПерерасчета.Главное.КоличествоПериодов;
ВР = ВидРасчета.ПоОкладу;
ЗависитОтОклада = ПравилоПерерасчета.ПересчДоплат.ИмеетВедущий(ВР);

Атрибуты правил перерасчёта

Прочитать/установить значение типа правила перерасчёта позволяет атрибут Тип (англоязычный синоним — Type). Данный атрибут может принимать следующие значения:

  • 0 — зависимые виды расчётов должны быть перерасчитаны в том же периоде, что и вводимая запись журнала расчётов;
  • 1 — зависимые виды расчётов должны быть перерасчитаны в нескольких периодах, следующих за периодом действия вводимой записи журнала расчётов (количество периодов задано атрибутом КоличествоПериодов).

Пример использования:

Тип = ПравилоПерерасчета.Главное.Тип;

Прочитать/установить количество периодов перерасчёта позволяет атрибут КоличествоПериодов (англоязычный синоним — NumberOfPeriods).

Пример использования:

КолПер = ПравилоПерерасчета.Главное.КоличествоПериодов;

Методы правил перерасчёта

Узнать количество «ведущих» видов расчёта (при вводе которых в журнал расчётов необходимо произвести перерасчёты, согласно данного правила) позволяет метод КоличествоВедущих() (англоязычный синоним — NumberOfLeadings()). Параметры у данного метода отсутствуют. Возвращаемым значением является числовое значение.

Пример использования:

// выведем все виды расчета от которых зависят доплаты
Для Ном=1 По ПравилоПерерасчета.Доплаты.КоличествоВедущих() Цикл
   Сообщить(ПравилоПерерасчета.Доплаты.ПолучитьВедущий(Ном));
КонецЦикла;

Получить вид расчёта из списка «ведущих» расчётов по указанному порядковому номеру позволяет метод ПолучитьВедущий() (англоязычный синоним — GetLeading()).

Синтаксис метода:

ПолучитьВедущий(<НомерВР>)

где <НомерВР> — числовое выражение — номер вида расчёта в списке «ведущих» расчётов.

Пример использования:

// выведем все виды расчета от которых зависят доплаты
Для Ном=1 По ПравилоПерерасчета.Доплаты.КоличествоВедущих() Цикл
   Сообщить(ПравилоПерерасчета.Доплаты.ПолучитьВедущий(Ном));
КонецЦикла;

Определить принадлежность вида расчёта к ведущим для правила перерасчёта позволяет метод ИмеетВедущий() (англоязычный синоним — HasLeading()). Возвращаемым значением метода является число 1, если данное правило перерасчёта имеет заданный вид расчёта в качестве ведущего (то есть при вводе этого вида расчёта в журнал расчётов сработает данное правило перерасчёта), или 0, если данное правило перерасчёта не имеет заданный вид расчёта в качестве ведущего.

Синтаксис метода:

ИмеетВедущий(<ВидРасчета>)

где <ВидРасчета> — вид расчёта.

Пример использования:

// зависит ли доплата от премии?
Зависит = ПравилоПерерасчета.Доплаты.ИмеетВедущий(ВидРасчета.Премия);

Добавить переданный в качестве параметра вид расчёта в список «ведущих» позволяет метод ДобавитьКакВедущий() (англоязычный синоним — AddAsLeading()).

Синтаксис метода:

ДобавитьКакВедущий(<ВидРасчета>)

где <ВидРасчета> — вид расчёта.

Пример использования:

ПравилоПерерасчета.Доплаты.ДобавитьКакВедущий(ВидРасчета.Премия);

Удалить все виды расчёта из списка «ведущих» позволяет метод УдалитьВсеВедущие() (англоязычный синоним — DeleteAlILeadings()). Параметров у этого метода нет.

Пример использования:

ПравилоПерерасчета.Доплаты.УдалитьВсеВедущие();

Узнать количество «подчинённых» видов расчёта (для которых необходимо произвести перерасчёты согласно данного правила) позволяет метод КоличествоПодчиненных() (англоязычный синоним — NumberOfDependents()). Параметров у метода нет. Возвращаемым значением является числовое значение.

Пример использования:

Для Ном=1 По ПравилоПерерасчета.Доплаты.КоличествоПодчиненных() Цикл
   Сообщить(ПравилоПерерасчета.Доплаты.ПолучитьПодчиненный(Ном));
КонецЦикла;

Получить вид расчёта по его номеру в списке «подчинённых» расчётов позволяет метод ПолучитьПодчиненный() (англоязычный синоним — GetDependent()).

Синтаксис метода:

ПолучитьПодчиненный(<НомерВР>)

где <НомерВР> — числовое выражение — номер вида расчёта в списке «подчиненных» расчётов.

Пример использования:

Для Ном=1 По ПравилоПерерасчета.Доплаты.КоличествоПодчиненных() Цикл
   Сообщить(ПравилоПерерасчета.Доплаты.ПолучитьПодчиненный(Ном));
КонецЦикла;

Определить принадлежность указанного вида расчёта к подчинённым для данного правила перерасчета позволяет метод ИмеетПодчиненный() (англоязычный синоним — HasDependent()). Возвращаемым значением метода является число 1, если данное правило перерасчёта имеет указанный вид расчёта в качестве подчинённого (то есть для этого вида расчёта в журнале расчётов сработает данное правило перерасчёта), или 0, если данное правило перерасчёта не имеет указанный вид расчёта в качестве подчиненного.

Синтаксис метода:

ИмеетПодчиненный(<ВидРасчета>)

где <ВидРасчета> — вид расчёта.

Пример использования:

Подч = ПравилоПерерасчета.Доплаты.ИмеетПодчиненный(ВидРасчета.Премия);

Добавить указанный вид расчёта в список «подчинённых» расчётов позволяет метод ДобавитьКакПодчиненный() (англоязычный синоним — AddAsDependent()).

Синтаксис метода:

ДобавитьКакПодчиненный(<ВидРасчета>)

где <ВидРасчета> — вид расчёта.

Пример использования:

ВидПодчРасч = ПравилоПерерасчета.Доплаты.ДобавитьКакПодчиненный(ВидРасчета.Премия);

Удалить все виды расчёта из списка «подчинённых» расчётов позволяет метод УдалитьВсеПодчиненные() (англоязычный синоним — DeleteAllDependents()). Параметров у метода нет.

Пример использования:

ПравилоПерерасчета.Доплаты.УдалитьВсеПодчиненные();

Установить необходимость применения или не применения всех заданных в конфигурации правил перерасчётов при изменении состава или исправлении записей журнала расчётов позволяет метод Применять() (англоязычный синоним — Use()). Возвращаемым значением метода является текущее значение флага применения (до исполнения метода).

Синтаксис метода:

Применять(<ФлагПрименения>)

где <ФлагПрименения> — число: 1 — применять; 0 — не применять.

Пример использования:

ПравилоПерерасчета.Применять(1);

Другие статьи по схожей тематике