Варианты решения расчетной задачи 3.16 из сборника по подготовке к спецу по платформе 8.2








Решение расчетной задачи 3.16 из "Сборник задач для подготовки к экзамену «1С:Специалист» по платформе  «1С:Предприятие 8»", ред.3 июнь 2010.

В описании внимание уделено расчету оклада одновременно и по часам и по дням. Описание краткое. Детали можно посмотреть непосредственно в решениях.

 

Тест. Прежде чем перейти к рассмотрению 1-го варианта, предлагаю рассмотреть демонстрацию работы свойства «Значение графика» плана видов расчета.

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

Решение выполнено на базе каркасной конфигурации.

Заведем тестовые данные в базу. В качестве расчетного периода я выбрал февраль 2011, 20 рабочих дней (в качестве выходных учитываю только субботы и воскресенья) легко поделить без остатка на 2. Подготовим 2 графика работы «Пятидневка» и «Пятидневка укороченная», у «Пятидневки» все рабочие дни по 8 часов, у «Пятидневки укороченной» первые 10 рабочих дней по 4 часа, остальные по 8 часов. Начислим оклады Бельдыеву по графику «Пятидневка», Васиной по графику «Пятидневка укороченная», часовая ставка 250 руб. И обоим сотрудникам начислим премии 100%, указав в качестве базового периода первую половину месяца (чтобы вошли туда только первые 10 дней).

Получим следующий результат:

Бельдыев: Оклад – 40000 руб, Премия – 40000 руб* 80 ч / 160 ч = 20000 руб

Васина: Оклад – 30000 руб, Премия – 30000 руб* 40 ч / 120 ч = 10000 руб

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

 

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

 

Вариант 2. В регистре сведений «Графики работы» создаем дополнительное измерение «Вид учета времени» с типом ПеречислениеСылка.ВидыУчетаВремени. Перечисление имеет два значения: «По дням», «По часам». В результате по каждому графику мы можем хранить/посчитать отработанное время по дням или по часам. В регистре расчета «Основные начисления» создаем реквизиты «График работы» и «Вид учета времени», связываем их с соответствующими измерениями регистра сведений «Графики работы» (остальное стандартно). Посчитать оклад по часам мы можем без проблем – указываем вид учета времени «По часам», а чтобы посчитать по дням создаем еще один регистр расчета «Основные начисления (Упр. учет)» — двойник регистра расчета «Основные начисления». Для оклада параллельно создаем в этом регистре-двойнике запись и указываем вид учета времени «По дням». Для видов расчета, вытесняющих оклад, тоже создаем записи. Оклад, рассчитанный по часам и по дням, храним в разных регистрах расчета.

 

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

 

Другие виды расчета в задаче. Расчет невыхода вполне понятен и во всех 3-х вариантах выполнен одинаково.

Что касается расчета надбавки, то для понимания, что же требует постановка задачи, воспользовался подсказкой http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=568247. В первых 2-х варианта реализация одинаковая. В третьем варианте сделал попытку оптимизировать запрос к регистру накопления «Продажи». Также в комментариях показан нежелательный вариант с запросом в цикле.

 

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


4 Comments

  1. DoctorRoza

    Ну что можно сказать .. почему Вы не рассматриваете решение задачи на 2-х регистрах РР? В одном будет РезультатДни, в другом — РезультатЧасы. Плюсы — не путаем результаты, вроде сказано, что для управленческого учета, так почему бы и нет!

    Reply
  2. ValeraEm

    (1) У меня во втором варианте используются 2 параллельных регистра, для оклада в часах и в днях.

    Или Вы имеете ввиду совсем разделить виды расчетов? Тогда вопрос: «Невыход», расчет по дням, будет в одном регистре, а «Оклад», рассчитываемый по часам, будет в другом — как в таком случае «Невыход» вытеснит «Оклад?

    Reply
  3. DoctorRoza

    (2) Невыход будет вытесняющим для видов расчета ПВР Основные начисления ОкладДни и ОкладЧасы. График Невыхода у обоих будет одинаковым, в качестве ресурсов у РС Графики — ЗначениеДни и ЗначениеЧасы. Соответственно, и у РР-ов значения графика будет ЗначениеДни, ЗначениеЧасы.

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

    Reply
  4. ValeraEm

    (3) Вариант во общем то.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *