1с какие виртуальные таблицы бывают у регистра расчетов

Обновлено: 07.07.2024

Многие программисты 1С никогда не сталкивались в своей практике с компонентой «Расчет»,поэтому, когда им приходится сдавать экзамены на Специалиста по Платформе 8.0, где в каждомзадании есть задача по сложным периодическим расчетам, возникают сложности, прежде всего сложности понимания.

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

Для примера будем использовать каркасную конфигурацию, устанавливаемую на экзаменах.

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

Что такое расчеты

В принципе, конечный продукт расчета зарплаты – это набор записей регистра расчета вида:

Сотрудник

Период

Вид расчета

Результат

Данные

Комментарий

1 января – 31 января

1 январь – 31 января

1 января – 10 февраля

Значение в колонке «Данные» отражают базовый оклад работника ( согласно трудового договора), но эта сумма может быть увеличена премиями, уменьшена штрафами и невыходами и т.п., поэтому реальная сумма к выплате заносится после выполнения расчета в колонку «Результат». В этом и заключается расчет. Сумма по колонке «Ресурс» для данного сотрудника – причитающаяся ему зарплата.

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

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

Виды расчетов

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

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

Для примера заведем план видов расчета Основной и в нем предопределенные виды расчета оклад, премия, невыход, командировка.

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

Вид расчета

Описание

Пример

По базовому периоду

Результат расчета зависимого периода зависит от результата базового периода. Если результат базового периода изменится, то результат зависимого периода нужно пересчитать.

Премия зависит по базовому периоду от оклада.

Вытеснение по периоду

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

Невыход влияет на фактический период действия оклада.

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

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

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

Период

Описание

В каком периоде действует событие, т.е. к какому периоду относится событие.

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

Фактический период действия

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

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

Графики времени

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

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

Измерение, которое связывается с регистром расчета обычно носит смысл «вид графика».

Особенности работы с виртуальной таблицей данных графика регистра расчета

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

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

  • <Имя ресурса графика>БазовыйПериод;
  • <Имя ресурса графика>ПериодДействия;
  • <Имя ресурса графика>ПериодРегистрации;
  • <Имя ресурса графика>ФактическийПериодДействия.

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

При построении виртуальной таблицы данных графика происходит соединение таблиц регистра расчета, регистра сведений, а в случае получения поля "<Имя ресурса графика>ФактическийПериодДействия" - еще и таблицы фактического периода действия регистра расчета. Так как данные для всех четырех перечисленных полей получаются путем соединения с таблицей регистра сведений по разным условиям, это значит, что в общем случае будет выполнено четыре соединения с таблицей регистра сведений.

При получении виртуальных таблиц система старается действовать оптимально, в частности, выполняется только то количество соединений, которое необходимо для получения полей виртуальной таблицы перечисленных в разделе "ВЫБРАТЬ".

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

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

Рассмотрим пример. В регистре сведений, назначенном в качестве графика, есть ресурсы "ЧислоДней" и "ЧислоЧасов". Рассмотрим три запроса.

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

Это связано с тем, что для получения полей "ЧислоДнейПериодРегистрации" и "ЧислоЧасовПериодРегистрации" выполняется одно соединение с регистром сведений по значению поля "ПериодРегистрации" регистра расчета (сколько бы ресурсов регистра при этом не пришлось суммировать). А при получении еще и поля "ЧислоЧасовПериодДействия", выполняется еще одно соединение с регистром сведений, которое выполняется по значению поля "ПериодДействия".

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

Структура

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

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

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

записи, хранимые в базе данных, будут выглядеть следующим образом:

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

Связь с планом видов расчета

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

Периодичность

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

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

Подчинение регистратору

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

Связь с графиком времени

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

Например, график времени, имеющий следующую структуру:

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

может содержать информацию о количестве рабочих часов:

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

Перерасчеты

Регистр расчета может включать в себя специальные объекты — Перерасчеты:

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

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

Уникальность записей

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

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

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

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

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

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

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

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

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

Регистр расчета поддерживает два вида зависимости по базовому периоду:
  • зависимость по периоду действия;
  • зависимость по периоду регистрации.

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

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

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

Формирование записей перерасчета

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

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

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

Теория

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

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



Допустим, в конце апреля 2017 мы хотим начислить сотруднику премию в размере 10% от оклада. В качестве базовых видов расчёта для премии указан оклад.

Рассчитаем премию: (22000/100)*10 = 2200 руб. Премия в размере 10% от оклада составляет 2200 рублей.

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

Один план видов расчета может использоваться в нескольких регистрах расчета, но один регистр расчета не может использовать несколько планов видов расчета одновременно.

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

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

Практика

Рассмотрим подробнее регистры расчета на практике:

Шаг 1.Начнём с плана видов расчета. План видов расчета необходимо создать перед созданием регистра расчета. План видов расчета создаём перед регистром расчёта потому, что перед созданием таблицы для хранения рассчитанных данных(т.е. регистра расчета) необходимо задать алгоритмы расчета этих данных(т.е. план видов расчета).



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

Шаг 3.Также нам нужен объект в котором мы будем хранить Производственный календарь(рабочие и выходные дни). Для этих целей используем непериодический независимый регистр сведений.



Создадим форму документа с настройками по-умолчанию.

Шаг 5. Наконец-то мы дошли и до создания регистров расчета.


Ниже представлена структура метаданных регистра:


Опишем обработку проведения в модуле объекта документа:

Создадим тестовый документ и проведём его:

Шаг 7.Напишем код расчета заработной платы.


В данном общем модуле у нас и будет происходить сам расчёт.

Шаг 8.Рассчитаем заработную плату сотрудника.

Перепроведём ранее созданный документ Начисление зарплаты и увидим, что зарплата у нас рассчиталась пропорционально отработанному времени:

Читайте также: