1
0
mirror of https://github.com/netology-code/1c-homeworks.git synced 2024-11-30 08:06:56 +02:00
1c-homeworks/diploma-c-howto-salary.md
2020-09-13 15:54:43 +03:00

12 KiB

Зарплата

Все добавляемые объекты включаем в новую подсистему Зарплата, выведенную в командный интерфейс, и включаем в состав функциональной опции ВестиРасчетЗарплаты.

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

  • Определив сумму, сформировать парное движение на такую же сумму по регистру бухгалтерии Управленческий в Дт счета Расходы и в Кт счета РасчетыССотрудникми, заполнив субконто Сотрудник.
  • Создав документ, заполните календарь и убедитесь в том, что документ:
    • В отсутствие вытесняющих начислений начисляет за месяц полную сумму оклада.
    • После ввода оклада или больничного документом НачислениеСписком уменьшает начисления по окладу пропорционально дням невыхода.
  1. Добавить документ НачислениеПремииПроцентом для начисления премии процентом от оклада:
  • С обязательным числовым реквизитом Процент
  • С обязательным реквизитом ЗаМесяц типа Дата с форматом "MM.yyyy", чтобы пользователь видел только месяц.
  • С табличной частью Сотрудники с единственным реквизитом Сотрудник (СправочникСсылка.Сотрудники).
  • Создать для него понятную форму документа.
  • На закладке "Движения" сделать его регистратором для регистра расчета Зарплата и для регистра бухгалтерии Управленческий
  • В обработке проведения:
    • Записать движения, пока без сумм, по регистру расчета Зарплата. При этом:
      • В качестве периода регистрации указать дату документа, а в качестве периода действия и базового периода действия - начало и конец месяца даты ЗаМесяц.
      • В качестве вида расчета указать предопределенный ПланыВидовРасчета.Начисления.ПремияПроцентом.
    • Записав движения, получить базу запросом:
	Запрос = Новый Запрос(
		"ВЫБРАТЬ
		|	ЗарплатаБазаЗарплата.Сотрудник КАК Сотрудник,
		|	ЗарплатаБазаЗарплата.СуммаБаза КАК СуммаБаза
		|ИЗ
		|	РегистрРасчета.Зарплата.БазаЗарплата(
		|			&Измерения,
		|			&Измерения,
		|			,
		|			Регистратор = &Регистратор
		|				И ВидРасчета = &ВидРасчета) КАК ЗарплатаБазаЗарплата");
	Запрос.УстановитьПараметр("Регистратор", Ссылка);
	Запрос.УстановитьПараметр("ВидРасчета", ПланыВидовРасчета.Начисления.ПремияПроцентом);
	Измерения = Новый Массив;
	Измерения.Добавить("Сотрудник");
	Запрос.УстановитьПараметр("Измерения", Измерения);
	База = Запрос.Выполнить().Выгрузить();
  • Обойти движения повторно и для каждой записи рассчитать сумму премии процентом. При этом:
    • Базу определить, найдя сотрудника в ранее выбранной таблице База.
    • Сумму определить, умножив базу на процент премии и поделив на 100.
	Для Каждого Движение Из Движения.Зарплата Цикл
		СтрокаБазы = База.Найти(Движение.Сотрудник);
		Если СтрокаБазы = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		Движение.Сумма = СтрокаБазы.СуммаБаза * Процент / 100;
	КонецЦикла;
  • Определив сумму, сформировать парное движение на такую же сумму по регистру бухгалтерии Управленческий в Дт счета Расходы и в Кт счета РасчетыССотрудниками, заполнив субконто Сотрудник.
  • Создав документ, проверьте себя, начислив премию процентом от оклада и выплатив все начисления документом СписаниеДенежныхСредств. В оборотно-сальдовой ведомости кредитовые обороты счета РасчетыССотрудниками должны полностью закрыться дебетовыми, и остаток стать нулевым.