Добавил блок 9
This commit is contained in:
BIN
09. Механизмы расчета/02. Вытеснение/homework-9-2.dt
Normal file
BIN
09. Механизмы расчета/02. Вытеснение/homework-9-2.dt
Normal file
Binary file not shown.
57
09. Механизмы расчета/02. Вытеснение/homework-9-2.md
Normal file
57
09. Механизмы расчета/02. Вытеснение/homework-9-2.md
Normal file
@@ -0,0 +1,57 @@
|
||||
# Вытеснение и расчет по базе
|
||||
|
||||
## Задание 1
|
||||
|
||||
### Описание задачи
|
||||
|
||||
Создать документ "Начисление по окладу", позволяющий ввести начисление по окладу по списку сотрудников с учетом графика работы и вытеснения.
|
||||
|
||||
### Требование к результату
|
||||
|
||||
Выгрузка информационной базы (.dt) с конфигурацией из предыдущего задания, содержащая документ **НачислениеПоОкладу**, позволяющий указать таблицу сотрудников.
|
||||
Документ должен рассчитывать оклад, умножая реквизит **Оклад** справочника **Сотрудники** на отношение фактически отработанного времени к норме.
|
||||
Норма должна рассчитываться согласно графику по периоду действия. Факт - согласно графику по фактическому периоду (т.е. с учетом вытеснения).
|
||||
|
||||
### Процесс выполнения
|
||||
|
||||
Конфигурация из предыдущего задания.
|
||||
|
||||
1. Добавьте непериодический регистр сведений **Календарь**.
|
||||
|
||||
Добавьте измерение **Дата** (Дата) и ресурс **РабочийДень** (Число). Ресурс будет содержать 1, если день рабочий, и 0 в противном случае.
|
||||
Укажите его в качестве графика регистра расчета **Зарплата**.
|
||||
Включите его в состав функциональной опции **ВестиРасчетЗарплаты**.
|
||||
|
||||
2. В плане видов расчета **НачисленияУдержания**:
|
||||
|
||||
Добавьте предопределенные виды расчетов **Больничный** и **Отпуск** как вытесняющие для вида расчета **ОплатаПоОкладу**.
|
||||
|
||||
3. Добавьте документ **НачислениеПоОкладу**.
|
||||
|
||||
Добавьте к нему табличную часть **Сотрудники** с реквизитом **Сотрудник**.
|
||||
Сделайте его регистратором регистра расчета **Зарплата**.
|
||||
Включите его в состав функциональной опции **ВестиРасчетЗарплаты**.
|
||||
Выведите реквизиты на форму разумным образом.
|
||||
|
||||
4. В модуле документа создайте обработку проведения документа, в которой:
|
||||
|
||||
* Соберите запросом оклады сотрудников из документа по данным справочника **Сотрудники**.
|
||||
* Очистите набор записей Движения.Зарплата.
|
||||
* Для каждой строки табличной части создайте движение, заполнив в нем вид расчета (**ПланыВидовРасчета.НачисленияУдержания.ОплатаПоОкладу**), сотрудника, период регистрации и период действия. Период действия берите как начало и конец месяца даты документа. Сумму на этом этапе не заполняйте.
|
||||
* Запишите набор записей Движения.Зарплата.
|
||||
* Для каждой записи:
|
||||
* Вызовом функции **РегистрыРасчета.Зарплата.ПолучитьДанныеГрафика** получите число рабочих дней в периоде действия (норму) и число рабочих дней в фактическом периоде (факт).
|
||||
* Установите сумму как Оклад * Факт / Норма:
|
||||
|
||||
```bsl
|
||||
Отбор = Новый Структура("Регистратор, Сотрудник", Ссылка, Движение.Сотрудник);
|
||||
Норма = РегистрыРасчета.Зарплата.ПолучитьДанныеГрафика(Отбор,
|
||||
ВидПериодаРегистраРасчета.ПериодДействия)[0].РабочийДень;
|
||||
Факт = РегистрыРасчета.Зарплата.ПолучитьДанныеГрафика(Отбор,
|
||||
ВидПериодаРегистраРасчета.ФактическийПериодДействия)[0].РабочийДень;
|
||||
вижение.Сумма = ?(Норма = 0, 0, Оклад * Факт / Норма);
|
||||
```
|
||||
|
||||
* Снова запишите набор записей Движения.Зарплата.
|
||||
|
||||
5. Заполните и проведите документ. Удостоверьтесь в том, что движения по регистру формируются по окладу в отсутствие вытесняющих оклад начислений (больничного, отпуска), и уменьшаются согласно дням неявки.
|
Reference in New Issue
Block a user