Что такое сложные периодические расчеты. Механизм сложных периодических расчетов

Условие задачи

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

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

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

сотрудника складываются из двух частей:

Некоторой фиксированной суммы, компенсирующей его транспортные расходы;

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

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

Механизм перерасчетов в рамках данной задачи использовать не надо.

Ввод всех начислений происходит документом «Начисление зарплаты». Считать, что все данные вводятся только в пределах одного месяца, например, можно указать начисление по тарифу с 10.01 по 31.01, а запись: тариф с 10.01 по 03.02 вводить нельзя.

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

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

Отчет может быть построен за любой расчетный период.


Решение

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

· Начисление за обучение слушателей по основному месту работы Результат = ТарифнаяСтавка * КоличествоОтработанныхЧасов;

Обратите внимание, для годовой премии сразу указан способ расчета общей суммы всех начислений, сделанных за прошедший год - «Получение базы».

2. На следующем этапе для вышеперечисленных видов расчета укажем зависимости между ними.

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

Вид расчета Вытесняющий Базовый
ТРФ КМД -
ТРН - -
КМД - -
ПРМ - ТРФ, ТРН, КМД

3. Создадим вышеперечисленные виды расчетов в конфигурации. Настроим раздел «Расчет» для каждого используемого плана расчетов;

4. Создадим регистры расчетов;

5. Внесем необходимые изменения в структуру документа «Начисление зарплаты»;

6. Перейдем к проведению документа «Начисление зарплаты»:

a. Добавим в регистр необходимое количество записей:

i. Определим границы интервалов всех существующих периодов у каждой записи;

ii. Укажем значения измерений и реквизитов регистра;

b. Проведем расчет записей сформированных наборов для первичных видов расчета:

i. Если введены транспортные расходы - результат начисления

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

ii. Расчет по тарифу на основном месте работы

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

2. Организуем цикл по записям набора. Для каждой записи реализуем прямое позиционирование на нужную строку в выборке запроса. Рассчитаем результат начисления;

3. Запишем набор, без пересчета фактического периода действия;

iii. Расчет начисления за выезд

1. Создадим оборотный регистр накопления «Оплаты

слушателей»;

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

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

4. Организуем цикл по записям набора. Для каждой записи реализуем прямое позиционирование на нужную строку в выборке запроса. Рассчитаем результат начисления;

5. Запишем набор, без пересчета фактического периода действия;

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

i. Расчет годовой премии

1. Создадим константу для хранения процента премии. Включим режим использования основной формы констант по умолчанию;

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

3. Организуем цикл по записям набора. Для каждой записи реализуем прямое позиционирование на нужную строку в выборке запроса. Рассчитаем результат начисления;

4. Запишем набор;

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

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


Управляемые формы

Условие задачи

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

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

Решение

1. Создадим основные формы документов. Откроем каждую форму в окне редактораформы. На закладке «Командный интерфейс» раскроем ветвь «Панель навигации - Перейти». Установим флажки «Видимость» для регистров.

2. Создадим не основную форму выбора справочника «Физические лица»;

a. Внесем необходимые изменения в структуру регистра «Сведения о сотрудниках»;

b. Создадим новую форму;

c. Откроем палитру свойств основного реквизита формы;

d. В разделе «Объект» установим флаг «Произвольный запрос»;

e. Откроем настройку списка;

f. Внесем необходимые изменения в текст запроса;

g. При создании формы на сервере определим значения внешних параметров запроса;

h. Определим собственную обработку выбора значения из формы справочника;

3. Организуем вызов формы справочника из формы документа

a. Создадим основную форму документа «Начисление зарплаты»;

b. Укажем созданную форму справочника в качестве значения свойства «Форма выбора» элемента формы документа «ОсновныеНачисленияСотрудник »;

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

Теория

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

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

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

механизма вытеснения по периоду действия «:

Здесь мы видим что вид расчёта «Командировка» обладает протяжённостью во времени и действует с 10 по 20 апреля, «Командировка» указана как вытесняющий вид расчёта для вида расчета «Оклад». «Оклад» также обладает протяжённостью во времени и действует с 1 по 30 апреля. Так как «Командировка» указана как вытесняющий вид расчёта для вида расчета «Оклад»(имеет больший приоритет, чем оклад) и действует на периоде действия оклада, то происходит вытеснение оклада командировкой и формируется «Фактический период действия оклада».»Фактический период действия оклада» это период действия оклада после вытеснения командировкой, в нашем случае он состоит из 2 периодов — с 1 по 9 апреля и с 21 по 30 апреля и в сумме составляет 19 дней. Механизм вытеснения по периоду действия работает только для протяжённых во времени расчетов.

На рисунке выше графически показан принцип «механизма зависимости по базовому периоду «:

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

Но в качестве «базы» для расчета премии мы возьмём не весь месяц апрель, а только интервал с 10 по 20 апреля(11 дней). Рассчитаем базу для премии, оклад сотрудника составляет 60000 рублей, в месяце имеем 30 дней, дневной оклад = 60000/30 = 2000 руб. Далее 2000*11 = 22000 руб. База для расчета премии составляет 22000 рублей.

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

С регистром расчета тесно связан прикладной объект метаданных «План видов расчета».

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

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

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

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

Практика

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

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

Создадим план видов расчета «Основные начисления». Сразу же перейдём на вкладку «Расчет». Здесь мы сразу же видим флаг «Использует период действия «, при установке данного флага все виды расчета входящие в данный план будут обладать протяжённостью во времени (например Оклад, Командировка), а также для данного плана видов расчета включается «механизма вытеснения по периоду действия «. Если флаг «Использует период действия» не установлен, то виды расчета не будут обладать протяжённостью во времени(например Премия, Штраф) и «механизма вытеснения по периоду действия» действовать не будет. Также на данной вкладке есть разделы «Зависимость от базы» и «Базовые планы видов расчета» — они служат для реализации «механизма зависимости по базовому периоду «, но об нём поговорим позже. Пока оставим «Зависимость от базы» в режиме «Не зависит».

Создадим предопределённый вид расчета «Оклад». На вкладке «Основное» всё просто. Задаём имя и код вида расчета.

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

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

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

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

Шаг 2 .Создадим справочник «Графики» со структурой по-умолчанию. В справочнике «Графики» будем хранить режимы работы сотрудников(пятидневка, шестидневка и.т.д.).

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

Создадим непериодический независимый регистр сведений «Графики работы» с 2 измерениями «Дата» и «График» и ресурсом «Количество часов».

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

Шаг 4 .Создадим документ «Начисление зарплаты» со структурой реквизитов показанной ниже:

Реквизиты:

Оперативное проведение ставим в значение «Запретить» т.к. оно не имеет смысла для механизма периодических расчётов в 1С — ни премию, ни оклад, ни штраф мы никогда не начисляем в реальном времени.

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

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

Объект метаданных регистр расчета расположен в ветке «Регистры расчета» конфигуратора.

Создадим регистр расчета «Основные начисления». Настройки регистра расчета рассмотрим ниже:

1.В поле «План видов расчета» указываем ПВР «Основные начисления» созданный на шаге 1.

2.Ставим флаг «Период действия» в значение «Истина» т.к. ПВР, указанный на шаге 1 обладает протяжённостью во времени.

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


P.S. Если указать ПВР, обладающий протяжённостью во времени у РР с флагом «Период действия» в значении «Ложь», то данный ПВР будет работать как ПВР не обладающий протяжённостью во времени.

3.После установки флага «Период действия» в значение «Истина» у нас становятся доступны поля «График», «Значение графика», «Дата графика».

В поле «График» указываем регистр сведений «Графики работы», созданный на шаге 3.

В поле «Значение графика» указываем ресурс «КоличествоЧасов» регистра сведений «Графики работы».

В поле «Дата графика» указываем измерение «Дата» регистра сведений «Графики работы».

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

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

Флаг «Базовое» у измерения влияет только на производительность, его можно и не проставлять, но если поставить, то поле «Сотрудник» будет проиндексировано.

Измерение «Сотрудник» — оно применяется в «механизме вытеснения по периоду действия » и «механизме зависимости по базовому периоду «.

Ресурс «Сумма» — туда запишется рассчитанная зарплата.

Реквизит «График» указан как реквизит, а не измерение регистра т.к. ни его, ни он ничего не вытесняет — по сути справочное поле. Важно!!! Не забудьте заполнить поле «Связь с графиком» у реквизита «График», там должно быть указано измерение «График» регистра сведений «Графики работы» иначе размер заработной платы не будет рассчитываться.

Реквизит «Параметр» будет хранить значение оклада.

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

В качестве регистратора указываем документ «Начисление зарплаты «, созданный на шаге 4.

Шаг 6 . Делаем движения по регистру расчета «Основные начисления».

Вернёмся к документу «Начисление зарплаты» созданному на шаге 4.

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

Фрагмент кода обработки проведения документа

1С (Код)

Процедура ОбработкаПроведения(Отказ, РежимПроведения) // регистр ОсновныеНачисления Движения.ОсновныеНачисления.Записывать = Истина; Движения.ОсновныеНачисления.Очистить(); ПериодРегистрации=НачалоМесяца(Дата); Для Каждого ТекСтрокаОсновныеНачисления Из ОсновныеНачисления Цикл Движение = Движения.ОсновныеНачисления.Добавить(); Движение.Сторно = Ложь; Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета; Движение.ПериодДействияНачало = ТекСтрокаОсновныеНачисления.ДатаНачала; Движение.ПериодДействияКонец = КонецДня(ТекСтрокаОсновныеНачисления.ДатаОкончания); Движение.ПериодРегистрации = ПериодРегистрации; Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник; Движение.График = ТекСтрокаОсновныеНачисления.График; Движение.Параметр = ТекСтрокаОсновныеНачисления.Размер; КонецЦикла; КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

// регистр ОсновныеНачисления

Движения. ОсновныеНачисления. Записывать= Истина;

Движения. ОсновныеНачисления. Очистить() ;

ПериодРегистрации=НачалоМесяца(Дата) ;

Для Каждого ТекСтрокаОсновныеНачисленияИз ОсновныеНачисленияЦикл

Движение= Движения. ОсновныеНачисления. Добавить() ;

Движение. Сторно= Ложь;

Движение. ВидРасчета= ТекСтрокаОсновныеНачисления. ВидРасчета;

Движение. ПериодДействияНачало= ТекСтрокаОсновныеНачисления. ДатаНачала;

Движение. ПериодДействияКонец= КонецДня(ТекСтрокаОсновныеНачисления. ДатаОкончания) ;

Движение. ПериодРегистрации = ПериодРегистрации;

Движение. Сотрудник= ТекСтрокаОсновныеНачисления. Сотрудник;

Движение. График= ТекСтрокаОсновныеНачисления. График;

Движение. Параметр= ТекСтрокаОсновныеНачисления. Размер;

КонецЦикла;

КонецПроцедуры

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

Перейдём в «Движения документа»:

Видим, что период регистрации установился как начало месяца т.к. периодичность РР указана «Месяц». Так же видим, что заполнились все поля кроме суммы(ЗП ещё не рассчитана).

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

Создадим общий модуль «Расчет» со следующими флагами:

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

Напишем в модуле «Расчет» экспортную функцию «Рассчитать начисления»:

Так как мы заполнили в настройках РР «Основные начисления» поля «График», «Значение графика», «Дата графика» у нас стала доступна виртуальная таблица регистра расчета ДанныеГрафика, в запросе к виртуальной таблице нас интересуют поля:

«КоличествоЧасовФактическийПериодДействия» — содержит рассчитанное на основании данных графика количество фактически отработанных часов

«КоличествоЧасовПериодДействия» — содержит рассчитанное на основании данных графика количество рабочих часов в периоде расчёта

Процедура расчета заработной платы

1С (Код)

Процедура РассчитатьНачисления(Регистратор, НаборЗаписей) Экспорт //Оклад Запрос=Новый Запрос; Запрос.Текст="ВЫБРАТЬ | ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.КоличествоЧасовФактическийПериодДействия, 0) КАК ЧасовФакт, | ОсновныеНачисленияДанныеГрафика.Параметр, | ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.КоличествоЧасовПериодДействия, 0) КАК ЧасовПлан, | ОсновныеНачисленияДанныеГрафика.НомерСтроки |ИЗ | РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(| Регистратор = &Регистратор | И ВидРасчета = &ВидРасчетаОклад) КАК ОсновныеНачисленияДанныеГрафика"; Запрос.УстановитьПараметр("Регистратор", Регистратор); // передаём документ регистратор чтобы поиск выполнялся только по текущему документу Запрос.УстановитьПараметр("ВидРасчетаОклад", ПланыВидовРасчета.ОсновныеНачисления.Оклад); //устанавливаем вид расчёта оклад т.к. рассчитываем оклад Выборка=Запрос.Выполнить().Выбрать(); СтруктураПоиска=Новый Структура; СтруктураПоиска.Вставить("НомерСтроки",0); //создадим структуру для поиска данных для расчёта по номеру строки Для Каждого Запись Из НаборЗаписей Цикл //цикл по набору записей текущего документа СтруктураПоиска.НомерСтроки=Запись.НомерСтроки; //заполняем номер строки для поиска Если Выборка.НайтиСледующий(СтруктураПоиска) Тогда //ищем в выборке данные для расчёта по текущему номеру строки Запись.Сумма =?(Выборка.ЧасовПлан=0,0, Выборка.ЧасовФакт/Выборка.ЧасовПлан * Выборка.Параметр); //рассчитываем ЗП пропорционально отработанным дням, в Параметр - текущий оклад КонецЕсли; Выборка.Сбросить(); //сбросим выборку, нужно чтобы следующая запись набора записей делала поиск по выборке сначала КонецЦикла; НаборЗаписей.Записать(,Истина); //записываем рассчитанные записи в базу, передаём параметр Замещать = Истина КонецПроцедуры

//Оклад

Запрос=Новый Запрос;

Запрос. Текст="ВЫБРАТЬ

| ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.КоличествоЧасовФактическийПериодДействия, 0) КАК ЧасовФакт,

| ОсновныеНачисленияДанныеГрафика.Параметр,

| ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.КоличествоЧасовПериодДействия, 0) КАК ЧасовПлан,

| ОсновныеНачисленияДанныеГрафика.НомерСтроки

|ИЗ

| РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(

| Регистратор = &Регистратор

Интересно, когда же я все таки прочитаю эту книжку? 8.3 тогда уже выйдет поди)))

Что такое сложные периодические расчеты?

Разберем по словам. Слово «Расчет» - надеюсь, понятно, что надо подсчитать какие-либо цифери. «Периодический» означает, что делать это надо время от времени, с каким-то интервалом (который и называется «периодом», как мог догадаться пытливый чЕтатель). А в чем заключается сложность? Ну вот в книжке приводится примерзаработной платы жи. Она считается раз в месяц (как правило), а сложность заключается в том, что зп складывается из каких-либо частей, типа оклад, премия, разовая премия, больничные и т.д. И каждая из этих частей рассчитывается по своему алгоритму, например, оклад – это стоимость нормочаса помноженное на количество отработанных часов минус налог, премия – некий процент от оклада и т.д.

Что такое вид расчета, база?

Вид расчета – какая-либо часть из сложного периодического расчета, например, премия.

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

Какая разница между базовым периодом, фактическим периодом и периодом действия?

Период действия – указывается вами, то есть данные, действующие в указанном периоде.

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

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

На самом деле вот конкретно этот вопрос я нихера не понимаю. Какая-то словесная эквилибристика, чесслово.

Что такое зависимость по базовому периоду?

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

Что такое вытеснение по периоду действия?

Начнем с того, что «вытеснение» - это влияние на расчет. Некст.Вот мы считаем, что кто-то проработал 20 дней, насчитали ему оклад, а выяснилось, что он отработал всего 10 дней. Тогда оклад надо пересчитать, как раз за тот период, когда сотрудник непосредственно работал, это и называют одинэсники как вытеснение по периоду действия.

Для чего предназначен объект конфигурации План видов расчета?

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

Во время работы пользователь сам может добавить новые виды расчета.

Каковы основные свойства плана видов расчета?

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

Зависимость от базы – будут ли находится зависимые по базовому периоду виды расчета.

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

Зависимость по периоду регистрации – будет идти работа с теми данными, чья запись в поле Период Регистрации попадает в базовый период;

Какая разница между базовыми, вытесняющими и ведущими видами расчетов?

Базовые – результаты базовых видов расчета должны быть использовать при перерасчете;

Вытесняющие – вытесняют расчет по периоду действия;

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

Как создать план видов расчета?

Так же, как и все в 1С же! В дереве конфигурации правый клик.

Что такое объект конфигурации Регистр расчета?

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

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

Свойства регистра расчета

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

Редактирование регистра расчета выполняется в окне редактирования.

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

План видов расчета - основная характеристика регистра. Выбирается один из объектов типа "План видов расчетов" .

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

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

Значение графика - свойство доступно, если установлено свойство Период действия . В свойстве выбирается ресурс регистра сведений, определенного в свойстве График .

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

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

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

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

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

На закладке "Прочее" задается режим блокировки объекта (автоматический или управляемый) и устанавливается признак полнотекстового поиска по объектам данного типа.

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

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

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

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

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

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

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

Реквизиты - дополнительная характеристика записи расчета. Реквизиты могут быть почти любого сохраняемого в базе данных типа. Например, реквизиты Дни и Часы для регистра ОсновныеНачисления, реквизит ДокументОснование для регистра Удержания. Нижена рисунке показана структура регистра расчета НачисленияСотрудников.

Графики

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

Ниже приведен пример регистра сведений, который служит графиком работы.

Перерасчеты

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

Например, при изменении начислений сотрудника нужно пересчитать налоги. Тогда для вида расчета «НДФЛ» начисления будут являться ведущими видами расчета, что настраивается в плане видов расчета на закладке «Ведущие».

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

Для автоматического отслеживания актуальности записей о налогах по каждому сотруднику необходимо у регистра Удержания создать перерасчет с измерением Физлицо. В качестве данных базовых регистров назначается измерение Физлицо из регистра ОсновныеНачисления и регистра Премии.

Ниже на примере показана схема работы перерасчета:

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

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

Запросы к регистрам расчета

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

  • основная таблица записей регистра расчета,
  • таблица фактического периода действия,
  • таблица перерасчета.

С помощью средств механизма запросов можно группировать результаты расчета в необходимых разрезах, подсчитывать итоги, отбирать только нужные записи расчета. Это позволяет сформировать весь спектр необходимых отчетов, например, РасчетныеЛистки, ЛицевыеСчета, ВедомостьВыплатыЗарплаты и т.д. Механизм запросов был подробно описан в главе «Запросы». Список полей таблиц-источников регистров расчета приведен в документации.

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

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

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

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

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

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

Сотрудник

Период

Вид расчета

Результат

Данные

Комментарий

Измерение

Служебный

Служебный

Реквизит

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

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

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

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

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

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

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

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

Вид расчета

Описание

Пример

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

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

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

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

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

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

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

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

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

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

Период

Описание

Период регистрации

В каком периоде зарегистрировано событие, т.е. обычно когда введен документ.

Период действия

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

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

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

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

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

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

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

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

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

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

Дата

Вид графика

Значение

11.01.05 пт

Пятидневка

11.01.05 пт

Шестидневка

12.01.05 сб

Пятидневка

12.01.05 сб

Шестидневка

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

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

Перерасчет

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

Для этого и служат перерасчеты.

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

По сути перерасчеты - это список записей регистра расчета, которые нужно перерасчитать .

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

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

Практическое задание

Достаточно теории. Попробуем изучить детали на практике. За основу возьмем каркасную конфигурацию.

Постановка задачи:

Пусть премия задается фиксированным процентом к окладу (за вычетом невыходов и командировочных).

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

Пусть за невыходы с сотрудника взымается штраф в размере половины оклада за период невыхода.

Ход выполнения:

Начальная подготовка

Создадим новый план видов расчета «Основной».

Определим виды расчета и зависимости между ними:

Базовые

Вытесняющие

Ведущие

Оклад

Невыход, Командировка

Премия

Невыход, Командировка

Оклад, Невыход, Командировка

Командировка

Невыход

Занесем эти виды расчета в план видов расчета «Основной» и в свойствахвидов расчета поставим зависимости согласно таблице.

В регистре расчета зарплаты сделаем измерение «Сотрудник» типа «ФизическиеЛица » - чтобы в регистре был разрез аналитики по сотрудникам.

В конфигурации уже имеется документ «Начисление зарплаты».

В нем две даты в шапке - «дата» и «период регистрации», а также по две даты «дата начала» и «датаконца » в каждой строчке.

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

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

Модуль документа будет выглядеть примерно так:

Для К аждого ТекСтрокаСписок Из Список Цикл

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

Движение = Движения.Р асчеты.Добавить ();

Движение.С торно = Ложь;

Движение.В идРасчета = ТекСтрокаСписок.ВидРасчета ;

Движение.П ериодДействияНачало = НачалоДня (ТекСтрокаСписок.ДатаНачала );

Движение.П ериодДействияКонец = КонецДня ();

Движение.П ериодРегистрации = ПериодРегистрации ;

Движение.Б азовыйПериодНачало = НачалоДня (ТекСтрокаСписок.ДатаНачала );

Движение.Б азовыйПериодКонец = КонецДня (ТекСтрокаСписок.ДатаОкончания );

Движение.С отрудник = ТекСтрокаСписок.Сотрудник ;

Движение.Г рафикРаботы = ТекСтрокаСписок.График ;

Движение.Р езультат = 0;

Движение.Д анные = ТекСтрокаСписок.Размер ;

КонецЦикла ;

Реквизит Сторно нужен чтобы сторнировать записи (аналог минуса).

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

Все документы датировать будем 20.01.2003, период регистрации будем ставить 02.01.2003 (специально указываю не начальные и конечные данные, здесь это неважно, все равно при записи в ПериодРегистрации преобразуется в начало периода 01.01.2003). Январь 2003 года используем, потому что за этот период заполнены графики работ.

Заведем перерасчет «Перерасчет», добавим в него измерение «Сотрудник», связанное с измерением «Сотрудник».

Играем с Перерасчетами.

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

ВЫБРАТЬ

РасчетыПерерасчет.О бъектПерерасчета ,

РасчетыПерерасчет.В идРасчета ,

РасчетыПерерасчет.С отрудник

ИЗ

РегистрРасчета.Р асчеты.Перерасчет КАК РасчетыПерерасчет

Сформируем три документа - первым начислим оклад сотрудникам А и Б. Сотрудник А работает с 1 по 31 января, Б работает с 1 по 20 января. Вторым начислим премию сотруднику Б за период с 1 по 31 января, третьим назначим невыход сотруднику А с 20 по 25 января.

Играем с Фактическим периодом действия.

Создадим новый запрос - на этот раз в него добавим данные таблицы РегистрыРасчета.Р асчеты.ФактическийПериодДействия .

Сформируем запрос и увидим, что сотруднику А период действия оклада разбит на два периода - с 1 по 19 и с 26 по 31 января. Надеюсь вам понятно, что период был разбит на два, т.к. невыход вытеснил оклад.

Думаю, механизмы работы регистра расчета проясняются на глазах.

Изучаем графики.

Теперь попробуем начислить зарплату по окладу сотрудника.

Создадим новый запрос по регистру расчета используя виртуальную таблицу РегистрыРасчета.Р асчеты.ДанныеГрафика . У этой виртуальной таблицы можно задать параметр - условие отбора записей, например Сотрудник=&ВыбСотрудник и ВидРасчета=&ВидРасчета и График=&ВидГрафика .

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

Колонка результата

Значение

ЗначениеПериодДействия

На какой период действия в часах была запись в регистре.

ЗначениеФактическийПериодДействия

Сколько сотрудник фактически проработал в часах

ЗначениеБазовыйПериод

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

ЗначениеПериодРегистрации

Сколько рабочих часов в периоде регистрации (месяц январь)