СЛОЖНЫЕ ПЕРИОДИЧЕСКИЕ РАСЧЕТЫ

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

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

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

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

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

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

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

Представим себе ситуацию, которая довольно часто встречается в реальной жизни: Сотрудник предприятия взял очередной отпуск на один из месяцев года. Начислили и выплатили отпускные ему перед тем, как он ушел в отпуск. Период регистрации начисления отпускных в этом случае - месяц (в котором осуществлено начисление), предшествующий месяцу отпуска. Месяц, за который начислили сотруднику отпускные, назовем периодом действия.

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

Представим сказанное выше графически на временной оси.

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

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

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

Фактический период - это то, что получилось из периода действия после анализа всех периодов действия расчетов, которые вытесняют наш по периоду действия.

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

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

Для решения таких задач требуется универсальный механизм, позволяющий описать каждый из видов расчетов (его алгоритм, влияние на другие виды расчетов, зависимость от других видов расчетов), обеспечить хранение данных, полученных в результате этих расчетов и контроль необходимости перерасчета результатов зависимых расчетов в случае изменения результатов "первичных" расчетов.В системе 1С: Предприятие 8.0 такой универсальный механизм обеспечивают объекты конфигурации "Планы видов расчета" и "Регистры расчета".

Рис 8.3.

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

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

Рис 8.4.

Редактирование свойств объекта "План видов расчета" производится в окне редактирования, а также в палитре свойств.

Рис 8.5.

На закладке "Данные" можно ввести набор реквизитов, содержащих дополнительную информацию о виде расчета. Набор реквизитов можно сразу увидеть и в дереве конфигурации.

Рассмотрим закладку "Расчет".

Рис 8.6.

Объект конфигурации "План видов расчета" имеет свойство "Использует период действия". С помощью этого свойства определяется, используют ли виды расчета плана видов расчета период действия. Если хотя бы один вид расчета в плане видов расчета будет обладать свойством период действия, то признак необходимо установить. При этом для каждого вида расчета может быть задан список вытесняющих видов расчета.

Следующим важным свойством объекта конфигурации "План видов расчета" является свойство "Зависимость от базы". Оно определяет, будут ли в этом плане находиться зависимые по базовому периоду виды расчета. Если хотя бы один вид расчета будет иметь расчетную базу - признак устанавливается. При установленном признаке появляется возможность указать, в каком плане видов расчета будут находится базовые виды расчета и, кроме этого указать, как будет определяться эта зависимость.

Создание и редактирование видов расчета может выполняться как разработчиком (предопределенные виды расчета), так и пользователем, в процессе работы с прикладным решением. Однако пользователь не может удалять виды расчета, созданные разработчиком.

Предопределенные виды расчета вводятся в окне "Предопределенные виды расчета", вызываемом на закладке "Прочее" по кнопке "Предопределенные".

Рис 8.7.

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

План видов расчета содержит следующие предопределенные табличные части;

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

*                        Вытесняющие виды расчета;

*                        Ведущие виды расчета.

Рис 8.8

Базовые виды расчета. В табличной части "Базовые виды расчета" указываются те виды расчета, которые определяют состав расчетной базы текущего вида расчета.

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

Рис 8.9.

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

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

Например, Оклад будет вытесняться Невыходом и Отпуском.

Рис 8.10.

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

Например, Оклад является ведущим видом расчета для Премии.

Рис 8.11.

У предопределенных видов расчета свойство "Период действия является базовым периодом" устанавливается в конфигураторе и не может быть изменено пользователем в режиме "1С:Предприятие".

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

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

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

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

Рис 8.12.

Регистр расчета хранит данные не только в разрезе созданных измерений, но и в разрезе времени. Это является причиной существования у каждой записи регистра расчета еще одного обязательного поля - Период действия. При установленном флажке "Период действия" у записи регистра расчета доступны свойства ПериодДействия, ПериодДействияНачало, ПериодДействияКонец, а также доступно свойство График регистра расчета. При создании регистра расчета разработчик может указать минимальную периодичность, с которой записи будут заноситься в регистр. Следует отметить, что свойство записи ПериодДействия - это дата, которая принимает дискретные значения в зависимости от периодичности регистра расчета. Значение свойства ПериодДействия приводится к началу периода (месяца) от даты ПериодДействияНачало и может не совпадать с датой ПериодДействияНачало.

При установленном флажке "Базовый период" становятся доступны свойства записи регистра расчета БазовыйПериодНачало, БазовыйПериодКонец.

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

 

Рис 8.13.

Рис 8.14.

Рис 8.15.

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

Рис 8.16.

Регистр сведений, используемый в качестве графика, не должен быть периодическим. Вместо этого у него заводится измерение типа "Дата". Измерениями такого регистра сведений могут быть, например, график работы и дата, а ресурсом - количество рабочих часов в этой дате. Тогда можно будет связать запись регистра расчета с каким-либо конкретным графиком работы и в дальнейшем, средствами встроенного языка получать информацию о количестве рабочих часов, необходимую для выполнения расчетов.

Регистр расчета может включать в себя специальные объекты - Перерасчеты. В этих объектах система будет хранить информацию о том, какие записи регистра расчета утратили свою актуальность и подлежат перерасчету в результате работы механизмов зависимости по базовому периоду и вытеснения по периоду действия. Для одного регистра расчета могут поддерживаться несколько перерасчетов разной структуры, которые могут решать разные задачи. Подчиненный объект регистра "Перерасчет" может иметь несколько измерений, каждое из которых может устанавливать связь между измерениями данного регистра расчета и ведущих регистров расчета. В частном случае это может быть один и тот же регистр.

Рис 8.17.

Механизмы, реализуемые регистром расчета:

*                        Вытеснение по периоду действия;

*                        Зависимость по базовому периоду.

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

В общем случае, запись регистра расчета содержит две даты, определяющие период, на который распространяется действие данной записи. Этот период называется периодом действия записи. Однако, если вид расчета, к которому относится данная запись, может быть вытеснен другим видом расчета, то период действия данной записи является лишь "запрашиваемым" периодом, то есть "мы хотим, чтобы запись действовала в этом периоде". Реально, фактический период действия данной записи можно будет определить лишь после анализа всех записей видов расчета, которые вытесняют данный вид расчета по периоду действия. Фактический период действия будет представлять собой набор периодов, являющихся подмножеством исходного периода действия данной записи.

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

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

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

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

Регистр расчета поддерживает два вида зависимости по базовому периоду:

*                        зависимость по периоду действия;

*                        зависимость по периоду регистрации.

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

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

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

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

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

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

Регистрация перерасчетов производится системой автоматически или с помощью средств встроенного языка.

Принцип работы перерасчетов в системе "1С:Предприятие 8.0" является "уведомительным", т.е. разработчик сам может принимать решение о необходимости перерасчета записей регистра.

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

*                        выбор записей в заданном интервале по заданным критериям;

*                        выбор записей по регистратору;

*                        получение значения базы для записей регистра, удовлетворяющих заданному отбору;

*                        получение данных графика для записей регистра, удовлетворяющих заданному отбору;

*                        получение данных о записях, подлежащих перерасчету;

*                        чтение, изменение и запись набора записей в регистр.

Работа с регистрами расчета с помощью средств встроенного языка.

Информацию из регистра расчета можно получать как с помощью механизма запросов, так и методами встроенного языка. Выборку записей регистра расчета можно получить следующими методами объекта "РегистрРасчетаМенеджер": "Выбрать" и "ВыбратьПоРегистратору". С помощью метода ПолучитьДанныеГрафика(<Отбор>, <Вид периода>) можно получить количество отработанных сотрудником дней, если в параметре <Вид периода> указать фактический период действия, и норму дней, если в данном параметре указать период действия.

Для получения сторно-записей используется метод ПолучитьДополнение() набора записей регистра расчета. Метод получает дополнительные данные, позволяющие выполнить сторнирование записей прошлых периодов регистрации при вводе текущего набора записей. Данные получаются в виде таблицы значений со следующей структурой: все предопределенные поля записи регистра расчета кроме регистратора и номера записи, все измерения, ресурсы и реквизиты, а также дополнительные поля - период регистрации сторнирования, дата начала сторнирования и дата окончания сторнирования. Дополнение - это данные, которые система "предлагает" добавить в текущий набор записей для того, чтобы текущие записи набора в результате сохранения имели максимальный фактический период действия за счет сторнирования (если это необходимо) записей прошлых периодов регистрации. Предлагаемые дополнительные сторно-записи формируются на основании периодов действия записей регистра расчета и правил конкуренции за период действия, задаваемых списками вытесняемых видов расчета в плане видов расчета регистра.

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

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