1
0
mirror of https://github.com/netology-code/1c-homeworks.git synced 2024-11-24 08:02:20 +02:00
1c-homeworks/homework-9-2.md
2020-09-06 22:49:15 +03:00

5.2 KiB

Вытеснение и расчет по базе

Задание 1

Описание задачи

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

Требование к результату

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

Процесс выполнения

Конфигурация из предыдущего задания.

  1. Добавьте непериодический регистр сведений Календарь.

Добавьте измерение Дата (Дата) и ресурс РабочийДень (Число). Ресурс будет содержать 1, если день рабочий, и 0 в противном случае. Укажите его в качестве графика регистра расчета Зарплата. Включите его в состав функциональной опции ВестиРасчетЗарплаты.

  1. В плане видов расчета НачисленияУдержания:

Добавьте предопределенные виды расчетов Больничный и Оклад как вытесняющие для вида расчета ОплатаПоОкладу.

  1. Добавьте документ НачислениеПоОкладу.

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

  1. В модуле документа создайте обработку проведения документа, в которой:
  • Соберите запросом оклады сотрудников из документа по данным справочника Сотрудники.
  • Очистите набор записей Движения.Зарплата.
  • Для каждой строки табличной части создайте движение, заполнив в нем вид расчета (ПланыВидовРасчета.НачисленияУдержания.ОплатаПоОкладу), сотрудника, период регистрации и период действия. Период действия берите как начало и конец месяца даты документа. Сумму на этом этапе не заполняйте.
  • Запишите набор записей Движения.Зарплата.
  • Для каждой записи:
    • Вызовом функции РегистрыРасчета.Зарплата.ПолучитьДанныеГрафика получите число рабочих дней в периоде действия (норму) и число рабочих дней в фактическом периоде (факт).
    • Установите сумму как Оклад * Факт / Норма:
Отбор = Новый Структура("Регистратор, Сотрудник", Ссылка, Движение.Сотрудник);
Норма = РегистрыРасчета.Зарплата.ПолучитьДанныеГрафика(Отбор, 
ВидПериодаРегистраРасчета.ПериодДействия)[0].РабочийДень;
Факт = РегистрыРасчета.Зарплата.ПолучитьДанныеГрафика(Отбор, 
ВидПериодаРегистраРасчета.ФактическийПериодДействия)[0].РабочийДень;
вижение.Сумма = ?(Норма = 0, 0, Оклад * Факт / Норма);
  • Снова запишите набор записей Движения.Зарплата.
  1. Заполните и проведите документ. Удостоверьтесь в том, что движения по регистру формируются по окладу в отсутствие вытесняющих оклад начислений (больничного, отпуска), и уменьшаются согласно дням неявки.