1С:Предприятие 8.2 /
Разработчикам /
Практикум
Практикум 11. План видов расчета, регистр расчета
Объект конфигурации План видов расчета
Создание плана видов расчета ОсновныеНачисления
Создание регистра расчета Начисления
Использование регистра расчета. Создание документа НачисленияСотрудникам
Познакомимся с объектами конфигурацииПлан видов расчета и Регистр расчета и узнаем об основных понятиях, используемых при создании сложных периодических расчетов.
Такие расчеты используются, прежде всего, при расчете заработной платы . Поэтому дальнейшее их рассмотрение мы будем строить на примере расчета заработной платы сотрудников, которые работают в нашей фирме.
В общем случае сумма заработной платы сотрудника складывается из множества частей. Например, оплата по окладу, премия, штрафы, оплаты по больничному листу, разовые выплаты и т.д. Каждая из этих частей рассчитывается по некоторому алгоритму, присущему только этой части. Например, сумма штрафа может определяться просто фиксированной суммой , сумма премии может рассчитываться как процент от оклада, а сумма оплаты по окладу рассчитывается исходя из количества рабочих дней в месяце и количества дней , отработанных сотрудником. Поэтому для обозначения каждой такой части мы будем использовать термин вид расчета.
Алгоритм каждого вида расчета опирается в общем случае на две категории параметров: период, за который нужно получить конечные данные, и набор некоторых исходных данных, используемых при расчете.
Как правило, в реальной жизни различные виды расчета существуют не сами по себе, а оказывают некоторое влияние на другие виды расчета. Исходя из того, что вид расчета опирается на две различные категории параметров, такое влияние тоже имеет двойственный характер.
Во-первых, это может быть влияние на исходные данные, используемые при расчете. В качестве примера можно привести начисление премии в виде процента от оплаты по окладу. При изменении оплаты по окладу размер премии тоже должен быть пересчитан, исходя из новой суммы начисленного оклада. Другими словами, сумма начисленного оклада является базой для расчета премии. Причем, поскольку оклад рассчитывается за некоторый период, при расчете премии нам интересно знать не значение оклада вообще, а сумму, начисленную в том периоде, который влияет на расчет премии. Такой период мы будем называть базовым, а подобную зависимость между видами расчета → зависимостью по базовому периоду.
В качестве примера рассмотрим начисление премии за апрель. Премия должна начисляться в размере 10% от суммы, начисленной в качестве оплаты по окладу. Следовательно, необходимо проанализировать все записи о начислениях оплаты по окладу, которые попадают в интересующий нас базовый период, а именно апрель. Допустим, общая сумма таких начислений составила 8 000 рублей → в этом случае премия должна быть начислена в размере 800 рублей.
Во-вторых, это влияние может быть не на исходные данные, а на сам период, за который производится расчет. В качестве примера можно привести расчет оплаты по окладу и невыход на работу. Предположим, мы начислили сотруднику оплату по окладу за март месяц. В этом случае период действия такого расчета будет с 1 марта по 31 марта. После этого мы получили информацию от руководителя отдела, что, оказывается, сотрудник отсутствовал на работе с 1 по 10 марта по неизвестной причине. В этом случае нам нужно будет произвести расчет Невыход, в котором можно рассчитать какие-то удержания с сотрудника. Но кроме этого необходимо будет пересчитать и оклад сотрудника, исходя из того, что фактический период действия расчета Оклад стал теперь с 11 марта по 31 марта. Такое влияние мы будем называть вытеснением по периоду действия. В результате если за полный месяц работы сотруднику должно было быть начислено 9 300 рублей, то теперь, за фактический период работы, начисление составит 6 300 рублей.
Таким образом, исходя из двух видов взаимного влияния расчетов, можно сказать, что в общем случае с каждым видом расчета будет связано три периода:
- период действия;
- фактический период;
- базовый период.
Период действия является «запрашиваемым». То есть, указывая период действия, мы говорим, «Мы хотели бы, чтобы результат действовал в этом периоде».
Фактический период → это то, что получилось из периода действия после анализа всех периодов действия расчетов, которые вытесняют наш по периоду действия.
Базовый период → это период, в котором мы анализируем результаты других расчетов, влияющих на наш по базовому периоду.
Как видите, взаимное влияние между видами расчетов может быть довольно разнообразным и, что самое сложное, многоуровневым. То есть один вид расчета может влиять на другой, который, в свою очередь, влияет на третий, и т.д.
Очевидно, что в такой ситуации требуется некий универсальный механизм, позволяющий описать каждый из видов расчетов (его алгоритм, влияние на другие виды расчетов , зависимость от других видов расчетов), обеспечить хранение данных, полученных в результате этих расчетов, и контроль необходимости перерасчета результатов зависимых расчетов в случае изменения результатов «первичных» расчетов.
В системе 1С:Предприятие такой универсальный механизм реализован при помощи планов видов расчета и регистров расчета.
Объект конфигурации План видов расчета
Объект конфигурацииПлан видов расчета является прикладным и предназначен для описания структуры хранения информации о возможных видах расчетов. На основе объекта конфигурацииПлан видов расчета платформа создает в базе данных информационную структуру, в которой может храниться информация о том, какие существуют виды расчета и каковы взаимосвязи между ними.
Отличительной особенностью плана видов расчета является то, что пользователь в процессе работы может добавлять новые виды расчета. Такая возможность делает механизм периодических расчетов более гибким и позволяет пользователю создавать собственные виды расчета, помимо тех, которые заданы разработчиком как предопределенные.
Объект конфигурации План видов расчета имеет свойство Использует период действия. С его помощью определяется, будут ли в этом плане находиться виды расчета, которые могут быть вытеснены по периоду действия. Если это свойство установлено, то разработчик получает возможность указать для каждого вида расчета те виды, которые вытесняют его по периоду действия.
Следующим важным свойством объекта конфигурации План видов расчета является Зависимость от базы. Оно определяет, будут ли в этом плане находиться зависимые по базовому периоду виды расчета. Если это свойство установлено, появляется возможность указать, в каком плане видов расчета будут находиться базовые виды расчета и, кроме этого, как будет определяться эта зависимость.
Существует возможность указать один из двух видов зависимости от базы:
- Зависимость по периоду действия;
- Зависимость по периоду регистрации.
Еще одной важной особенностью плана видов расчета является возможность создания предопределенных видов расчета и описания их взаимного влияния. При этом в общем случае разработчик имеет возможность указать три категории видов расчета, влияющих на предопределенный вид расчета:
- Базовые → их результаты должны быть использованы при перерасчете этого вида расчета;
- Вытесняющие → вытесняют этот вид расчета по периоду действия;
- Ведущие → изменение их результатов должно приводить к необходимости перерасчета этого вида расчета.
Здравый смысл подсказывает, что все базовые виды расчета должны быть включены и в категорию ведущих. Кроме того, ведущие виды расчета могут содержать и некоторые другие виды, косвенно влияющие на данный вид расчета.
Невыход вытесняет оклад по периоду действия, а премия зависит от оклада по базовому периоду. В этом случае для премии следует указать базовым видом расчета оклад, а ведущим → оклад и невыход, поскольку изменение результата расчета невыхода приведет к изменению результата оклада, что, в свою очередь, должно привести к изменению результата премии.
Создание плана видов расчета ОсновныеНачисления
1. Создадим новый объект конфигурации План видов расчета. Зададим ему имя → ОсновныеНачисления.
2. Перейдем на закладку Расчет и укажем, что он будет использовать период действия и зависеть от базы по периоду действия.
В качестве базового плана видов расчета укажем его самого, поскольку все наши виды расчетов будут храниться в единственном плане видов расчета.
3. Перейдем на закладку Прочее и зададим предопределенные виды расчета. Как и в случае с бухгалтерией, расчеты в нашей фирме будут «скромные», поэтому мы создадим всего три элемента:
- Невыход → с именем и наименованием Невыход и кодом Невыход;
- Оклад - с именем, кодом и наименованием Оклад и вытесняющим его видом расчета Невыход;
- Премия - с именем, кодом и наименованием Премия, с базовым видом расчета Оклад и ведущими видами расчета Невыход и Оклад.
Объект конфигурации Регистр расчета
Объект конфигурации Регистр расчета является прикладным и предназначен для описания структуры накопления данных, являющихся результатами расчетов.
Отличительной особенностью регистра расчета является то, что он не предназначен для интерактивного редактирования пользователем. Разработчик может при необходимости предоставить пользователю возможность редактировать регистр расчета, но предназначение этого регистра заключается в том, чтобы его модификация производилась на основе алгоритмов работы объектов базы данных, а не в результате непосредственных действий пользователя.
Как и другие регистры, регистр расчета имеет ресурсы, в которых хранит числовые данные; имеет измерения, в разрезе которых можно получать значения ресурсов регистра; имеет реквизиты, которые характеризуют каждую запись регистра расчета.
Особенностью же регистра расчета является его периодичность , возможность использования механизмов вытеснения по периоду действия и зависимости по базовому периоду, а также связь с планом видов расчета.
Периодичность регистра расчета может быть определена одним из следующих значений:
- День;
- Месяц;
- Квартал;
- Год.
Периодичность регистра расчета определяет промежуток времени, к которому будет относиться каждая запись регистра. Для указания факта принадлежности записи к какому-либо периоду регистр имеет служебный реквизит ПериодРегистрации типа Дата. При записи данных в регистр платформа всегда приводит значение этого реквизита к началу того периода, в который он попадает.
Например, если в регистр расчета с периодичностью месяц записать данные, где ПериодРегистрации задан как 08.04.2008, то регистр сохранит эти данные со значением поля ПериодРегистрации 01.04.2008 (см. рисунок 1).
Если в этой же ситуации периодичность регистра будет год, сохраненное значение периода регистрации будет 01.01.2008.
Следующей важной особенностью регистра расчета является возможность использования механизма вытеснения одних записей другими по периоду действия. При этом для каждой записи регистр расчета формирует фактический период действия, который является в общем случае совокупностью нескольких периодов, расположенных внутри периода действия (см. рисунок 2).
Рисунок 1
Рисунок 2
Если рассмотреть структуру записей таблиц регистра расчета, то после внесения записи о начислении по окладу таблицы регистра будут выглядеть следующим образом:
Таблица регистра расчета
Таблица фактического периода действия
После добавления в регистр записи вида расчета Невыход, который вытесняет вид расчета Оклад по периоду действия, записи о начислении по окладу примут следующий вид:
Таблица регистра расчета
Таблица фактического периода действия
Другим механизмом, который поддерживает регистр расчета, является зависимость записей по базовому периоду. Этот механизм позволяет основывать расчет зависимых (вторичных) записей регистра на данных, полученных в результате расчета первичных записей. Регистр расчета может поддерживать два вида зависимости от базы:
- зависимость по периоду действия;
- зависимость по периоду регистрации.
Зависимость по периоду действия означает, что при анализе базовых записей будут выбираться те, для которых найдено пересечение их фактического периода действия и указанного базового периода.
Например, в начале апреля производится расчет зарплаты за март. Премия за март должна быть начислена исходя из оплаты по окладу за март. В этом случае, как правило, используется зависимость по периоду действия (см. рисунок).
Следует сделать два замечания к указанному рисунку.
Поля Начало базового периода и Конец базового периода имеют смысл только для записей тех видов расчета, для которых определена зависимость по базовому периоду (в нашем случае для записи расчета премии).
Значение базы, которая будет получена от конкретной влияющей записи, в общем случае не равно результату, который содержит эта запись. База будет рассчитана пропорционально тому, какую часть от фактического интервала влияющей записи составляет перекрывающийся с указанным базовым периодом участок. При этом будут использованы данные графика, связанного с записью.
Зависимость по периоду регистрации означает, что при анализе базовых записей будут выбираться те, которые попадают в указанный базовый период значением своего поля Период регистрации.
В качестве примера можно привести расчет штрафов при начислении зарплаты за март. В качестве базы для расчета суммы штрафов должны браться записи о прогулах, зарегистрированные в марте месяце (это могут быть как записи о мартовских прогулах, так и записи о прогулах в феврале) В этом случае, как правило, используется зависимость по периоду регистрации.
Заключительной важной особенностью регистра расчета является его связь с планом видов расчета. Именно на основе этой связи работают механизмы вытеснения по периоду действия и зависимости по базовому периоду, поскольку в плане видов расчета описано взаимное влияние видов расчета друг на друга.
У регистра расчета могут существовать подчиненные объекты Перерасчет. Они предназначены для регистрации фактов появления в регистре записей, влияющих на результат расчета уже существующих записей регистра. Объект конфигурации Перерасчет может иметь несколько измерений, каждое из которых устанавливает связь между измерениями данного регистра расчета и влияющих регистров расчета. В частном случае это может быть один и тот же регистр.
В информационной структуре, созданной в базе данных на основе объекта конфигурации Перерасчет, платформа хранит информацию о том, какие записи регистра подлежат перерасчету. Таблицы перерасчета заполняются автоматически как на основании записей регистра расчета, затронутых ведущими видами расчета, так и на основании записей регистра расчета, для которых изменился фактический период действия. Исходя из этой информации, разработчик может принимать решение о необходимости перерасчета записей регистра.
Последним замечанием, которое следует сделать, говоря о регистре расчета, является возможность установки связи регистра расчета с графиком времени. Такой график времени должен представлять собой регистр сведений (непериодический, с обязательным измерением типа Дата и ресурсом типа Число), в котором содержится временная схема исходных данных, участвующих в расчетах. Измерениями этого графика могут быть, например, График работы (ссылка на справочник) и Дата, а ресурсом → количество рабочих часов в этой дате. В этом случае можно будет связать запись регистра расчета с каким-либо конкретным Графиком Работы (указав в качестве реквизита записи ссылку на справочник График работы) и в дальнейшем средствами встроенного языка получать информацию о количестве рабочих часов в периоде действия, фактическом периоде действия или периоде регистрации этой записи.
Создание регистра расчета Начисления
Прежде чем мы начнем создавать объект конфигурации Регистр расчета Начисления, нам потребуется создать два дополнительных объекта конфигурации:
- Регистр сведений ГрафикиРаботы;
- Справочник ВидыГрафиковРаботы.
Справочник понадобится нам для хранения информации о том, какие графики работы существуют на фирме, а регистр сведений → для указания того, какие дни в месяце являются рабочими, поскольку сумма оплаты по окладу будет рассчитываться исходя из того, сколько дней отработал сотрудник в расчетном месяце.
1. Создадим новый объект конфигурации Справочник с именем ВидыГрафиковРаботы.
2. В этом справочнике у нас будет два предопределенных графика работы :
- ГрафикАдминистрации;
- ГрафикМастеров.
3. После этого создадим объект конфигурации Регистр сведений с именем ГрафикиРаботы.
4. Этот регистр будет иметь два измерения:
- ГрафикРаботы, тип СправочникСсылка.ВидыГрафиковРаботы;
- Дата, тип Дата.
5. Затем создадим единственный ресурс регистра → Значение, с типом Число, длиной 1.
6. Запустим 1С:Предприятие в режиме отладки и заполним регистр данными о рабочих днях сентября графика мастеров. Чтобы проще выполнить эту довольно однообразную работу, воспользуйтесь возможностью добавления элементов в справочник копированием. У вас должно получиться 22 рабочих дня в сентябре.
7. Теперь все готово для создания регистра расчета.
Создадим новый объект конфигурации Регистр расчета с именем Начисления.
8. В качестве плана видов расчета, используемого регистром, выберем ОсновныеНачисления.
9. Установим, что
- регистр будет использовать период действия,
- График будет задаваться в регистре сведений ГрафикиРаботы,
- Значение графика будет находиться в ресурсе Значение,
- Дата графика → в измерении Дата.
10. Укажем, что регистр расчета будет использовать базовый период и периодичность регистра будет Месяц.
11. Затем перейдем на закладку Данные и создадим:
- измерение Сотрудник, тип СправочникСсылка.Сотрудники, базовое;
- ресурс Результат, тип Число, длина 15, точность 2;
- реквизит ГрафикРаботы, тип СправочникСсылка.ВидыГрафиковРаботы, связь с графиком по измерению ГрафикРаботы;
- реквизит ИсходныеДанные, тип Число, длина 15, точность 2.
Реквизит ГрафикРаботы мы будем использовать для того, чтобы связать запись регистра с используемым графиком работы, а реквизит ИсходныеДанные → чтобы хранить в нем данные, которые могут понадобиться при расчете или перерасчете (в нашем случае это будет расчет оклада).
12. Теперь перейдем на закладку Перерасчеты. Создадим объект конфигурации Перерасчет, который так и назовем → Перерасчет.
У него будет единственное измерение → Сотрудник, для которого в установке связи мы укажем измерение регистра Сотрудник и в качестве данных ведущих регистров выберем то же самое измерение Сотрудник регистра расчета Начисления.
На этом создание объекта конфигурации Регистр расчета Начисления завершено.
Использование регистра расчета. Создание документа НачисленияСотрудникам
Для того чтобы иметь возможность регистрировать в базе данных начисления, производимые сотрудникам фирмы, нам понадобится специальный документ.
1. Создадим новый документ с именем НачисленияСотрудникам.
2. Перейдем на закладку Нумерация и установим:
- Тип номера документа → Число;
- Длина номера → 5.
3. Этот документ будет иметь табличную часть Начисления, содержащую следующие реквизиты:
- Сотрудник, тип СправочникСсылка.Сотрудники;
- ГрафикРаботы, тип СправочникСсылка.ВидыГрафиковРаботы;
- ДатаНачала, тип Дата;
- ДатаОкончания, тип Дата;
- ВидРасчета, тип ПланВидовРасчетаСсылка.ОсновныеНачисления;
- Результат, тип Число, длина 15, точность 2.
Реквизиты ДатаНачала и ДатаОкончания понадобятся нам для того, чтобы задать период, в котором должна действовать запись расчета.
4. На закладке Движения запретим оперативное проведение документа. Отметим, что документ будет создавать движения по регистру расчета Начисления, и запустим конструктор движения.
5. В окне конструктора выберем табличную часть Начисления и нажмем Заполнить выражения.
6. Для реквизитов ПериодДействияКонец и БазовыйПериодКонец укажем выражение КонецДня(ТекСтрокаНачисления.ДатаОкончания).
7. Для поля ПериодРегистрации укажем выражение Дата.
8. Реквизиту ИсходныеДанные поставим в соответствие реквизит табличной части Результат.
9. Для реквизита Результат удалим выражение, присвоенное ему конструктором.
10. Нажмем ОК и посмотрим текст обработчика, созданный конструктором.
11. Запустим 1С:Предприятие в режиме отладки и посмотрим, как работает наш документ.
Начислим оклад за сентябрь всем сотрудникам фирмы:
12. Проведем документ и посмотрим, какие движения он сформировал в регистре Начисления:
Обратите внимание на то, что платформа привела период регистрации каждой записи к началу периода регистра расчета (в обработчике проведения мы указывали значение даты документа 06.10.2008). Кроме этого заметьте, что с каждой записью мы сохранили в реквизите ИсходныеДанные размер оклада сотрудника, введенный в документе, чтобы в дальнейшем рассчитать сумму оплаты по окладу.
Для дальнейшего изучения работы регистра расчета нам понадобится служебный отчет, с помощью которого мы сможем посмотреть содержимое записей перерасчета.
Иллюстрация механизмов вытеснения и зависимости от базы
1. Создадим новый объект конфигурации Отчет и назовем его Перерасчет.
2. Создадим основную схему компоновки данных, добавим Набор данных → запрос и откроем конструктор запроса.
3. Из виртуальной таблицы перерасчета Начисления.Перерасчет выберем все поля:
4. На этом создание запроса закончено, нажмем ОК.
5. Перейдем на закладку Настройки и добавим группировку детальных записей.
6. На закладке Выбранные поля выберем для вывода в отчет поля ОбъектПерерасчета, ВидРасчета и Сотрудник. На этом создание схемы компоновки данных закончено.
7. Запустим 1С:Предприятие в режиме отладки, сформируем отчет Перерасчет и убедимся, что пока он не содержит никаких данных.
8. Создадим новый документ Начисление сотрудникам №–2, в котором начислим премию за сентябрь Гусакову и Деловому. Этим документом мы фиксируем тот факт, что данным сотрудникам нужно начислить премию по итогам работы за сентябрь. Поскольку размер премии нам не известен (он будет рассчитываться по некоторому алгоритму), поля Результат мы оставляем пустыми. ОК.
9. Теперь снова откроем документ Начисление сотрудникам №–1 и изменим оклад Гусакова с 10 000 на 7 000. Нажмем ОК. Сформируем отчет Перерасчет:
10. Как видите, отчет теперь содержит какие-то данные. В самом деле, вид расчета Премия зависит у нас по базовому периоду от вида расчета Оклад. Как только мы изменили существовавшие в регистре записи по виду расчета Оклад, платформа сразу же сформировала набор записей перерасчета, которые должны быть рассчитаны заново, так как изменилась их база.
11. Перепроведем документ Начисление сотрудникам №–2 (премия) и сформируем отчет Перерасчет. Он снова не содержит никаких данных → система отметила тот факт, что мы «пересчитали» зависимые записи, и очистила таблицу перерасчета.
12. На этом примере мы познакомились с работой механизма поддержки зависимости по базовому периоду у регистра расчета.
Теперь посмотрим, как работает механизм вытеснения по периоду действия. Для этого нам понадобится создать документ Начисление сотрудникам №–3.
13. Этим документом мы зафиксируем тот факт, что Гусаков не выходил на работу 1 по 10 сентября. Очевидно, что в этом случае потребуется пересчитать его оплату по окладу и, как следствие, начисленную премию. Нажмем ОК и сформируем Перерасчет.
Как вы видите, в перерасчет попала запись о начислении оклада Гусакову. Это явилось результатом работы механизма вытеснения по периоду действия, ведь вид расчета Невыход вытесняет у нас вид расчета Оклад.
Обратите внимание, что в перерасчет попала и запись о назначении премии Гусакову, поскольку при создании предопределенных видов расчета мы указали, что результат вида расчета Премия будет зависеть от изменения результата вида расчета Невыход. Эта зависимость косвенная, но поскольку мы явно указали такую зависимость, платформа ее отследила.
Перепроведем документы Начисление сотрудникам №–1 и №–2 и убедимся, что таблица перерасчета очистилась.
Курс "Бухгалтерский учет + 1С:Бухгалтерия 8.2 для начинающих"
Тренинг-семинар «Как получить работу бухгалтера»
Курсы бухгалтеров с трудоустройством
Другие материалы по теме:
период действия, невыход, зависимость, перерасчет, премия, вид расчета, регистр., оклад, план, дата, 00, объект, результат, работы, счета, сотрудник, данные, начисления, регистр, период, справочник, действия, вид, расчет, конфигурации, счет, документ
Материалы из раздела: 1С:Предприятие 8.2 / Разработчикам / Практикум
Другие материалы по теме:
Источники данных для расчетов бюджетирования
Общесистемные механизмы и принципы
Практикум 12. Создание процедуры расчета записей регистра Начисления
Нас находят: регистр расчета возмещения акциза, план видов расчета и регистр расчета, как изменить базу начисления больничніх в 1с, https://stimul kiev ua/materialy htm?a=praktikum_11_plan_vidov_rascheta_registr_rascheta, 1с программирование регистр расчета прогул не полный день, 27972, 8566, 53420, Базовые виды расчета 1с, 10043
Мы на Facebook