Расчет остатков отпуска (включая дополнительные) при увольнении, Зарплата и управление персоналом КОРП 2.5

Публикация № 1112470

Администрирование - Администрирование данных 1С - Обработка документов

Остатки отпуска Увольнение дополнительный отпуск

Обработка заполнения табличной части остатками Основного отпуска + Дополнительными (из карточки должности сотрудника на момент увольнения). Исправление в модуле, либо внешняя обработка заполнения табличной части документа. Код открыт (в описании).

     Типовая редакция конфигурации "Зарплата и управление персоналом КОРП 2.5" не выполняет расчет остатков дополнительных отпусков при увольнении (в т.ч. например обязательно положенные северные отпуска). Согласно модуля расчета отпусков основным ежегодным отпуском для расчета является отпуск используемый в основном виде расчета "Оплата отпуска по календарным дням" (реквизит ежегодные отпуска).

Для скачивания предлагаю обработку подключения к табличной части "Сотрудники организации" документа "Увольнение из организации".

Для тех кто открывал конфигурацию для изменения, предлагаю свое решение, можно внести исправление в модуль документа.

Исправил 1 процедуру, добавил 1 функцию.

Все изменения в модуле документа "Увольнения из организации".

 

1) Процедура "РассчитатьКоличествоДнейОтпуска" (свой блок в рамках //&&&)

// Процедура рассчитывает количество дней отпуска, которые необходимо компенсировать или удержать
//
Процедура РассчитатьКоличествоДнейОтпуска(СтрокаТЧ, СведенияОСотрудниках = Неопределено) Экспорт
	
	Если Не ЗначениеЗаполнено(СтрокаТЧ.Сотрудник) ИЛИ Не ЗначениеЗаполнено(СтрокаТЧ.ДатаУвольнения) ИЛИ СтрокаТЧ.ПорядокРасчетаОтпуска.Пустая() Тогда
		Возврат;
	КонецЕсли;
	
	Результат = ОстаткиОтпусков.ОстатокОтпускаСотрудникаНаДату(СтрокаТЧ.Сотрудник, СтрокаТЧ.ДатаУвольнения, Истина, СтрокаТЧ.ПорядокРасчетаОтпуска);
	
	СтрокаТЧ.РабочийГодС							= Результат.РабочийГодС;
	СтрокаТЧ.РабочийГодПо							= Результат.РабочийГодПо;
	СтрокаТЧ.ДнейЧасовКомпенсацииУдержанияОтпуска	= Результат.ОстатокНаДату * ?(Результат.ОстатокНаДату >= 0, 1, -1);
	СтрокаТЧ.ПризнакКомпенсацииОтпуска				= Результат.ОстатокНаДату >= 0;
//&&& Начало изменения
	КоличествоДополнительногоОтпуска = 0;
	ДополнительныеОтпускаПоСотруднику = СтрокаТЧ.Сотрудник.ТекущаяДолжностьОрганизации.ЕжегодныеОтпуска;
	Для Каждого СтрокаДО ИЗ ДополнительныеОтпускаПоСотруднику Цикл
		Если СтрокаДО.КоличествоДнейОтпускаВГод = 0 Тогда
			Продолжить;
		КонецЕсли;
		РезультатДО = ОстаткиОтпуска_ОстатокОтпускаСотрудникаНаДату(СтрокаТЧ.Сотрудник, СтрокаТЧ.ДатаУвольнения, Истина, СтрокаТЧ.ПорядокРасчетаОтпуска, СтрокаДО.ВидЕжегодногоОтпуска, СтрокаДО.КоличествоДнейОтпускаВГод);
		КоличествоДополнительногоОтпуска = КоличествоДополнительногоОтпуска + РезультатДО.ОстатокНаДату;
	КонецЦикла;	
	ДнейОстатка = Результат.ОстатокНаДату + КоличествоДополнительногоОтпуска * ?(Результат.ОстатокНаДату + КоличествоДополнительногоОтпуска >= 0, 1, -1);
	СтрокаТЧ.ДнейЧасовКомпенсацииУдержанияОтпуска	= ДнейОстатка;
	СтрокаТЧ.ПризнакКомпенсацииОтпуска				= ДнейОстатка >= 0;
//&&& Конец изменения
	УвольнениеИзОрганизацийПереопределяемый.ДополнительноУточнитьДниКомпенсации(СтрокаТЧ, ПолучитьСведенияОСотрудниках(СведенияОСотрудниках, СтрокаТЧ.Сотрудник));
	
КонецПроцедуры

2) Добавил функцию, куда передаю свое значение отпуска (дополнительного из должности):

//&&& 
Функция ОстаткиОтпуска_ОстатокОтпускаСотрудникаНаДату(Сотрудник, ДатаОстатков = '00010101', ЭтоРасчетПриУвольнении = Ложь, ПорядокРасчетаОсновногоОтпуска = Неопределено, ВидДополнительногоОтпуска, КоличествоДнейДополнительногоОтпуска = 0) Экспорт 
	
	Если Не ЗначениеЗаполнено(Сотрудник) Тогда
		Возврат 0;
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(ДатаОстатков) Тогда
		ДатаОстатков = НачалоДня(ТекущаяДатаСеанса());
	КонецЕсли;
	
	ТаблицаДанных = ОстаткиОтпусков.ОписаниеТаблицыДанных();
	
	Строка = ТаблицаДанных.Добавить();
	Строка.Сотрудник							= Сотрудник;
	Строка.ДатаОстатков							= НачалоДня(ДатаОстатков);
	Строка.ЭтоРасчетПриУвольнении				= ЭтоРасчетПриУвольнении;
	Строка.ОтборПоВидуЕжегодногоОтпуска			= ВидДополнительногоОтпуска;
	
	Результат = ОстаткиОтпусков.ОстаткиОтпусков(ТаблицаДанных)[0];
	
	ОстаткиВРазрезеРабочихЛетИВидовОтпусков = Новый Массив;
	Для Каждого РабочийГод Из Результат.ДанныеРасчета Цикл
		Если РабочийГод.ДоступноДляСписанияВЭтомГоду = 0 Тогда
			Продолжить;
		КонецЕсли;
		ОстаткиВРазрезеРабочихЛетИВидовОтпусков.Добавить(Новый Структура("ВидЕжегодногоОтпуска, ОсталосьДней, РабочийГодС, РабочийГодПо, ПоследнийРабочийГод",
			РабочийГод.ВидЕжегодногоОтпуска, РабочийГод.ДоступноДляСписанияВЭтомГоду, РабочийГод.ДатаНачала, РабочийГод.ДатаОкончания, РабочийГод.ПоследнийРабочийГод));
	КонецЦикла;
	
	Возврат Новый Структура("ОстатокНаДату, РабочийГодС, РабочийГодПо, Примечание, ОстаткиВРазрезеВидовОтпусков, ОстаткиВРазрезеРабочихЛетИВидовОтпусков",
		Результат.ОстатокНаДату, Результат.РабочийГодС, Результат.РабочийГодПо, Результат.Примечание, Результат.ОстатокНаДатуПоВидамЕжегодныхОтпусков, ОстаткиВРазрезеРабочихЛетИВидовОтпусков);
	
КонецФункции

В модуль документа не стал добавлять комментарии при расчете, во внешней обработке заполнения табличной части, они есть:

Результат расчета по сотруднику: ******* *************** ************************
    Остаток основного отпуска: 4,670
    Остаток дополнительного отпуска (Доп.отпуск за работу в местностях с особыми климатическими условиями, дн/год:16,000): 2,670
Всего остаток отпуска: 7,340

 

Тестировалось на конфигурации: Зарплата и управление персоналом КОРП, редакция 2.5 (2.5.143.1).

Скачать файлы

Наименование Файл Версия Размер
Расчет остатков отпуска (включая дополнительные) при увольнении, Зарплата и управление персоналом КОРП 2.5:

.epf 6,60Kb
1
.epf 6,60Kb 1 Скачать

Специальные предложения

Оставьте свое сообщение