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