При увольнении сотрудника часто возникает ситуация, когда программа рассчитывает дни компенсации неиспользованного отпуска исключительно по основному ежегодному отпуску, полностью игнорируя накопленные дни дополнительных отпусков (например, за ненормированный рабочий день, вредные условия труда или работу в районах Крайнего Севера). Рассмотрим причины такого поведения системы в различных редакциях 1С:Зарплата и управление персоналом и разберем практические способы решения этой задачи.
В архитектуре типовой конфигурации 1С:ЗУП редакции 2.5 автоматический подсчет дней компенсации в документе увольнения был жестко ограничен только основным ежегодным отпуском. Функция вычисления остатка вызывалась с установленным отбором по виду отпуска. Рассмотрим типовые способы преодоления этого ограничения.
Если информационная база находится на типовой поддержке и внесение изменений в программный код нежелательно, разберем порядок действий расчетчика:
Для автоматического подтягивания всех накопленных дней отпуска в документ увольнения можно скорректировать логику вызова процедур расчета остатков. Рассмотрим два возможных варианта правки кода.
Способ А. Корректировка в общем модуле ОстаткиОтпусков
В общем модуле ОстаткиОтпусков найдем блок формирования структуры отбора и снимем жесткое ограничение по виду отпуска, чтобы в выборку попадали все виды ежегодных отпусков:
Если СтрокаДанных.ОтборПоВиДуЕжегодногоОтпуска.Пустая Тогда
ОтборПоСотруднику = Новый Структура("Сотрудник", СтрокаДанных.Сотрудник);
Иначе
// Отменяем отбор по конкретному виду отпуска, чтобы учитывался и дополнительный
// Было: ОтборПоСотруднику = Новый Структура("Сотрудник, ВидЕжегодногоОтпуска", СтрокаДанных.Сотрудник, СтрокаДанных.ОтборПоВиДуЕжегодногоОтпуска);
ОтборПоСотруднику = Новый Структура("Сотрудник", СтрокаДанных.Сотрудник);
КонецЕсли;
Способ Б. Корректировка вызова в модуле документа УвольнениеИзОрганизаций
Альтернативный и более точечный вариант — изменить параметр передачи признака отбора непосредственно при расчете строки документа. В модуле документа УвольнениеИзОрганизаций в процедуре РассчитатьКоличествоДнейОтпуска найдем вызов функции расчета остатка:
// Было:
// Результат = ОстаткиОтпусков.ОстатокОтпускаСотрудникаНаДату(СтрокаТЧ.Сотрудник, СтрокаТЧ.ДатаУвольнения, Истина, СтрокаТЧ.ПорядокРасчетаОтпуска);
// Стало (передаем Ложь для отмены отбора только по основному отпуску):
Результат = ОстаткиОтпусков.ОстатокОтпускаСотрудникаНаДату(СтрокаТЧ.Сотрудник, СтрокаТЧ.ДатаУвольнения, Ложь, СтрокаТЧ.ПорядокРасчетаОтпуска);
В современных версиях программы (редакция 3.1) проблема решена на уровне типовой функциональности. В документе Увольнение на вкладке Условия увольнения формируется подробная табличная часть, где расчет компенсации или удержания выполняется отдельно по каждому виду положенного сотруднику отпуска.
Если в 1С:ЗУП 3.1 дни дополнительного отпуска не рассчитываются при увольнении, проанализируем следующие возможные причины:
Прием на работу, Кадровый перевод), в позиции штатного расписания или документе Ввод остатков отпусков.Виды отпусков и убедимся, что для нужного элемента установлен флаг Отпуск является ежегодным. Целевые и разовые отпуска не накапливают остаток и компенсации при увольнении не подлежат.Таким образом, для старых версий конфигураций оптимальным решением является ручная корректировка или точечная адаптация кода расчета остатков, а в современных версиях достаточно корректно настроить права на отпуска в кадровом учете сотрудника.