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