gifts2017

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

Опубликовал Валерий Емельянов (ValeraEm) в раздел Программирование - Практика программирования

Решение расчетной задачи 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-х варианта реализация одинаковая. В третьем варианте сделал попытку оптимизировать запрос к регистру накопления «Продажи». Также в комментариях показан нежелательный вариант с запросом в цикле.

 

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


Скачать файлы

Наименование Файл Версия Размер
ОбщийАрхив.zip 57
.zip 722,92Kb
08.12.11
57
.zip 722,92Kb Скачать
ТестЗначенияГрафика.dt 3
.dt 155,86Kb
08.12.11
3
.dt 155,86Kb Скачать
Платформа8.2 Задача3.16 v1.dt 3
.dt 178,08Kb
08.12.11
3
.dt 178,08Kb Скачать
Платформа8.2 Задача3.16 v2.dt 3
.dt 196,95Kb
08.12.11
3
.dt 196,95Kb Скачать
Платформа8.2 Задача3.16 v3.dt 3
.dt 191,59Kb
08.12.11
3
.dt 191,59Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Алексей Роза (DoctorRoza) 09.12.11 18:59
Ну что можно сказать .. почему Вы не рассматриваете решение задачи на 2-х регистрах РР? В одном будет РезультатДни, в другом - РезультатЧасы. Плюсы - не путаем результаты, вроде сказано, что для управленческого учета, так почему бы и нет!
2. Валерий Емельянов (ValeraEm) 10.12.11 20:30
(1) У меня во втором варианте используются 2 параллельных регистра, для оклада в часах и в днях.
Или Вы имеете ввиду совсем разделить виды расчетов? Тогда вопрос: "Невыход", расчет по дням, будет в одном регистре, а "Оклад", рассчитываемый по часам, будет в другом - как в таком случае "Невыход" вытеснит "Оклад?
3. Алексей Роза (DoctorRoza) 11.12.11 11:28
(2) Невыход будет вытесняющим для видов расчета ПВР Основные начисления ОкладДни и ОкладЧасы. График Невыхода у обоих будет одинаковым, в качестве ресурсов у РС Графики - ЗначениеДни и ЗначениеЧасы. Соответственно, и у РР-ов значения графика будет ЗначениеДни, ЗначениеЧасы.
Все просто и понятно, в дебрях добавленных метаданных разбираться не нужно.
4. Валерий Емельянов (ValeraEm) 11.12.11 18:39
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа