diff --git a/09. Механизмы расчета/01. Планы видов расчета и регистры расчета/homework-9-1.dt b/09. Механизмы расчета/01. Планы видов расчета и регистры расчета/homework-9-1.dt new file mode 100644 index 0000000..2fa200a Binary files /dev/null and b/09. Механизмы расчета/01. Планы видов расчета и регистры расчета/homework-9-1.dt differ diff --git a/09. Механизмы расчета/01. Планы видов расчета и регистры расчета/homework-9-1.md b/09. Механизмы расчета/01. Планы видов расчета и регистры расчета/homework-9-1.md new file mode 100644 index 0000000..b4bb3dc --- /dev/null +++ b/09. Механизмы расчета/01. Планы видов расчета и регистры расчета/homework-9-1.md @@ -0,0 +1,61 @@ +# Планы видов расчета и регистры расчета + +## Задание 1 + +### Описание задачи + +Создать простой план видов расчета и регистр для расчета управленческой зарплаты. + +### Требование к результату + +Выгрузка информационной базы (.dt) с конфигурацией из [диплома Б](diploma-b.md), содержащая план видов расчета "НачисленияИУдержания" с предопределенными видами расчета "Оплата по окладу", "Оплата по ставке часа", "Премия", "Отпуск", "Больничный" и регистр расчета "Зарплата" с единственным измерением "Сотрудник" и ресурсом "Сумма". + +### Процесс выполнения + +Используйте конфигурацию из предыдущих заданий. + +1. Добавьте подсистему **Зарплата**. + +2. Добавьте в нее план видов расчета **НачисленияУдержания**, использующий период действия. +К нему добавьте предопределенные виды расчетов: + +* ОплатаПоОкладу ("Оплата по окладу") +* ОплатаПоСтавкеЧаса ("Оплата по ставке часа") +* Премия ("Премия") +* Отпуск ("Отпуск") +* Больничный ("Больничный") + +3. Добавьте в нее регистр расчетов **Зарплата** с периодичностью "Месяц", использующий период действия и базовый период. +К нему добавьте измерение **Сотрудник** (СправочникСсылка.Сотрудники) и ресурс **Сумма** (ОпределяемыйТип.Сумма). + +4. Включите добавленные объекты в состав функциональной опции **ВестиРасчетЗарплаты**. + +## Задание 2 + +### Описание задачи + +Создать документ "Начисление списком", позволяющий ввести начисление фиксированной суммой (например, премию) по списку сотрудников с указанным периодом действия. + +### Требование к результату + +Выгрузка информационной базы (.dt) с конфигурацией из предыдущего задания, содержащая документ **НачислениеСписком**, позволяющий указать вид начисления и таблицу сотрудников с суммами. +Помимо даты документа (периода регистрации) документ должен давать возможность указать период действия, отличающийся от периода регистрации. + +### Процесс выполнения + +Конфигурация из предыдущего задания. + +1. Добавьте документ **НачислениеСписком** с реквизитами шапки **Начисление** (ПланВидовРасчетаСсылка.НачисленияУдержания), **НачалоПериодаДействия**, **КонецПериодаДействия** (Дата и время). +Добавьте к нему табличную часть **Сотрудники** с реквизитами **Сотрудник** (СправочникСсылка.Сотрудники) и **Сумма** (ОпределяемыйТип.Сумма). +Сделайте его регистратором регистра расчета **Зарплата**. +Включите его в состав функциональной опции **ВестиРасчетЗарплаты**. + +2. Выведите реквизиты на форму разумным образом. + +3. В модуле документа создайте обработку проведения. В ней: + +* Очистите набор записей Движения.Зарплата. +* Для каждой строки табличной части создайте движение, заполнив в нем вид расчета, сотрудника, сумму, период регистрации (по дате документа) и период действия (по значениям реквизитов **НачалоПериодаДействия** и **КонецПериодаДействия**). Базовый период заполнять не нужно: фиксированное начисление ни от чего не зависит. +* Запишите набор записей Движения.Зарплата. + +4. Заполните и проведите документ. Удостоверьтесь в том, что движения по регистру формируются без ошибок. diff --git a/09. Механизмы расчета/02. Вытеснение/homework-9-2.dt b/09. Механизмы расчета/02. Вытеснение/homework-9-2.dt new file mode 100644 index 0000000..124dea6 Binary files /dev/null and b/09. Механизмы расчета/02. Вытеснение/homework-9-2.dt differ diff --git a/09. Механизмы расчета/02. Вытеснение/homework-9-2.md b/09. Механизмы расчета/02. Вытеснение/homework-9-2.md new file mode 100644 index 0000000..602a9b9 --- /dev/null +++ b/09. Механизмы расчета/02. Вытеснение/homework-9-2.md @@ -0,0 +1,57 @@ +# Вытеснение и расчет по базе + +## Задание 1 + +### Описание задачи + +Создать документ "Начисление по окладу", позволяющий ввести начисление по окладу по списку сотрудников с учетом графика работы и вытеснения. + +### Требование к результату + +Выгрузка информационной базы (.dt) с конфигурацией из предыдущего задания, содержащая документ **НачислениеПоОкладу**, позволяющий указать таблицу сотрудников. +Документ должен рассчитывать оклад, умножая реквизит **Оклад** справочника **Сотрудники** на отношение фактически отработанного времени к норме. +Норма должна рассчитываться согласно графику по периоду действия. Факт - согласно графику по фактическому периоду (т.е. с учетом вытеснения). + +### Процесс выполнения + +Конфигурация из предыдущего задания. + +1. Добавьте непериодический регистр сведений **Календарь**. + +Добавьте измерение **Дата** (Дата) и ресурс **РабочийДень** (Число). Ресурс будет содержать 1, если день рабочий, и 0 в противном случае. +Укажите его в качестве графика регистра расчета **Зарплата**. +Включите его в состав функциональной опции **ВестиРасчетЗарплаты**. + +2. В плане видов расчета **НачисленияУдержания**: + +Добавьте предопределенные виды расчетов **Больничный** и **Отпуск** как вытесняющие для вида расчета **ОплатаПоОкладу**. + +3. Добавьте документ **НачислениеПоОкладу**. + +Добавьте к нему табличную часть **Сотрудники** с реквизитом **Сотрудник**. +Сделайте его регистратором регистра расчета **Зарплата**. +Включите его в состав функциональной опции **ВестиРасчетЗарплаты**. +Выведите реквизиты на форму разумным образом. + +4. В модуле документа создайте обработку проведения документа, в которой: + +* Соберите запросом оклады сотрудников из документа по данным справочника **Сотрудники**. +* Очистите набор записей Движения.Зарплата. +* Для каждой строки табличной части создайте движение, заполнив в нем вид расчета (**ПланыВидовРасчета.НачисленияУдержания.ОплатаПоОкладу**), сотрудника, период регистрации и период действия. Период действия берите как начало и конец месяца даты документа. Сумму на этом этапе не заполняйте. +* Запишите набор записей Движения.Зарплата. +* Для каждой записи: + * Вызовом функции **РегистрыРасчета.Зарплата.ПолучитьДанныеГрафика** получите число рабочих дней в периоде действия (норму) и число рабочих дней в фактическом периоде (факт). + * Установите сумму как Оклад * Факт / Норма: + +```bsl +Отбор = Новый Структура("Регистратор, Сотрудник", Ссылка, Движение.Сотрудник); +Норма = РегистрыРасчета.Зарплата.ПолучитьДанныеГрафика(Отбор, +ВидПериодаРегистраРасчета.ПериодДействия)[0].РабочийДень; +Факт = РегистрыРасчета.Зарплата.ПолучитьДанныеГрафика(Отбор, +ВидПериодаРегистраРасчета.ФактическийПериодДействия)[0].РабочийДень; +вижение.Сумма = ?(Норма = 0, 0, Оклад * Факт / Норма); +``` + +* Снова запишите набор записей Движения.Зарплата. + +5. Заполните и проведите документ. Удостоверьтесь в том, что движения по регистру формируются по окладу в отсутствие вытесняющих оклад начислений (больничного, отпуска), и уменьшаются согласно дням неявки. diff --git a/09. Механизмы расчета/03. Виртуальные таблицы регистров расчёта/homework-9-3.dt b/09. Механизмы расчета/03. Виртуальные таблицы регистров расчёта/homework-9-3.dt new file mode 100644 index 0000000..8040f5d Binary files /dev/null and b/09. Механизмы расчета/03. Виртуальные таблицы регистров расчёта/homework-9-3.dt differ diff --git a/09. Механизмы расчета/03. Виртуальные таблицы регистров расчёта/homework-9-3.md b/09. Механизмы расчета/03. Виртуальные таблицы регистров расчёта/homework-9-3.md new file mode 100644 index 0000000..4a288f1 --- /dev/null +++ b/09. Механизмы расчета/03. Виртуальные таблицы регистров расчёта/homework-9-3.md @@ -0,0 +1,56 @@ +# Виртуальные таблицы регистра расчета + +## Задание 1 + +### Описание задачи + +Создать документ "Начисление премии процентом", позволяющий ввести начисление премии процентом по базе от оклада. + +### Требование к результату + +Выгрузка информационной базы (.dt) с конфигурацией из предыдущего задания, содержащая документ **НачислениеПремииПроцентом**, позволяющий указать таблицу сотрудников и общий процент премии. +Документ должен рассчитывать премию, получая базу запросом к виртуальной таблице **Зарплата.БазаЗарплата** и умножая базу на процент. + +### Процесс выполнения + +Конфигурация из предыдущего задания. + +1. Удостоверьтесь, что в плане видов расчета есть предопределенный вид расчета **ПремияПроцентом**, зависящий от базового **ОплатаПоОкладу** по периоду действия. + +2. Добавьте документ **НачислениеПремииПроцентом** (можно скопировать другой зарплатный документ). + +* Добавьте к нему табличную часть **Сотрудники** с реквизитом **Сотрудник** и реквизит шапки **ПроцентПремии**. +* Сделайте его регистратором регистра расчета **Зарплата**. +* Включите его в состав функциональной опции **ВестиРасчетЗарплаты** и подсистемы **Зарплата**. +* Выведите реквизиты на форму разумным образом. + +3. В модуле документа создайте обработку проведения документа, в которой: + +* Очистите набор записей Движения.Зарплата. +* Для каждой строки табличной части создайте движение, заполнив в нем вид расчета (**ПланыВидовРасчета.НачисленияУдержания.ПремияПроцентом**), сотрудника, период регистрации, период действия и базовый период. Период действия берите как начало и конец месяца даты документа. Сумму на этом этапе не заполняйте. +* Запишите набор записей Движения.Зарплата. +* Запросом получите таблицу базовых начислений: +```bsl + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ЗарплатаБазаЗарплата.Сотрудник КАК Сотрудник, + | ЗарплатаБазаЗарплата.СуммаБаза КАК СуммаБаза + |ИЗ + | РегистрРасчета.Зарплата.БазаЗарплата( + | &Измерения, + | &Измерения, + | , + | Регистратор = &Регистратор + | И ВидРасчета = &ВидРасчета) КАК ЗарплатаБазаЗарплата"); + Запрос.УстановитьПараметр("Регистратор", Ссылка); + Запрос.УстановитьПараметр("ВидРасчета", ПланыВидовРасчета.НачисленияУдержания.ПремияПроцентом); + Измерения = Новый Массив; + Измерения.Добавить("Сотрудник"); + Запрос.УстановитьПараметр("Измерения", Измерения); + База = Запрос.Выполнить().Выгрузить(); +``` +* Обойдя записи повторно, для каждой записи: + * Найдите в таблице строку сотрудника. + * Установите сумму как СуммаБаза * ПроцентПремии / 100. + +4. Заполните и проведите документ. Удостоверьтесь в том, что движения по регистру формируются как процент от оклада за соответствующий период.