При ведении кадрового учета и расчета заработной платы в конфигурации «1С:Зарплата и управление персоналом 2.5» расчетчики нередко сталкиваются с коллизией: сотруднику прекращают действие постоянной надбавки или премии (например, документом Ввод постоянного начисления или удержания организаций), а затем регистрируют документ Отпуск по уходу за ребенком с указанием даты окончания. После проведения отпуска программа в движениях по регистрам снова ставит действие «Начать» для всех действовавших ранее начислений на дату завершения отпуска. В результате после выхода сотрудника на работу отмененное ранее начисление начинает начисляться вновь.
Разберем детально, почему так происходит в типовой конфигурации, и рассмотрим варианты устранения этой проблемы как на уровне методологии учета, так и программными средствами.
Проанализируем работу механизма проведения документа Отпуск по уходу за ребенком:
ПлановыеНачисленияРаботниковОрганизаций. Записи в нем определяются событиями (видами действий): Начать, Изменить, Прекратить.Отпуск по уходу за ребенком алгоритм считывает действующие начисления сотрудника через срез последних на дату начала отпуска.Прекратить для всех активных плановых начислений.Начать со старыми тарифными ставками.Начать на дату окончания отпуска перекрывает все предшествующие прекращения начислений.Рассмотрим типовой сценарий работы, рекомендуемый при длительных отсутствиях сотрудников:
Изменение условий оплаты отпуска по уходу за ребенком или кадровый приказ Возврат на работу / Кадровое перемещение организаций. В этих документах расчетчик явно указывает актуальный перечень плановых начислений, что создает новую запись среза последних в регистре ПлановыеНачисленияРаботниковОрганизаций и исключает старые неактуальные премии.Ввод постоянного начисления или удержания организаций с действием Прекратить на дату окончания отпуска для тех начислений, которые возобновились ошибочно.Когда на предприятии числятся сотни и тысячи сотрудников, отслеживать пересечения вручную становится трудоемко. Для регулярного аудита создадим отчет или внешнюю обработку, выявляющую некорректные возобновления.
Посмотрим на пример логики запроса для поиска начислений, которые были отменены, но повторно возобновлены документом отпуска:
ВЫБРАТЬ
Плановые.Сотрудник КАК Сотрудник,
Плановые.ВидРасчета КАК ВидРасчета,
Плановые.Период КАК ДатаВозобновления,
Плановые.Регистратор КАК Регистратор
ИЗ
РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК Плановые
ГДЕ
Плановые.ВидДействия = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислениями.Начать)
И Плановые.Регистратор ССЫЛКА Документ.ОтпускПоУходуЗаРебенком
И Плановые.ВидРасчета В
(ВЫБРАТЬ
Прекращенные.ВидРасчета
ИЗ
РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК Прекращенные
ГДЕ
Прекращенные.Сотрудник = Плановые.Сотрудник
И Прекращенные.ВидДействия = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислениями.Прекратить)
И Прекращенные.Регистратор НЕ ССЫЛКА Документ.ОтпускПоУходуЗаРебенком
И Прекращенные.Период <= Плановые.Период)
Такой инструмент позволяет расчетчикам перед формированием документа Начисление зарплаты работникам организаций быстро увидеть список сотрудников с некорректно возобновившимися надбавками и скорректировать их.
Если требуется полностью автоматизировать поведение без вмешательства в типовые формы документов, создадим подписку на событие ОбработкаПроведения для документа ОтпускПоУходуЗаРебенком.
Разберем по шагам реализацию обработчика в общем модуле:
ПлановыеНачисленияРаботниковОрганизаций.ВидДействия = Перечисления.ВидыДействияСНачислениями.Начать (будущие возобновления на дату окончания отпуска).ВводПостоянногоНачисленияИлиУдержания).Движения.ПлановыеНачисленияРаботниковОрганизаций те строки возобновления, которые ранее были отменены.Посмотрим на пример программной реализации проверки в общем модуле:
Процедура ДокументОтпускПоУходуЗаРебенкомОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
Если Отказ Тогда
Возврат;
КонецЕсли;
НаборПлановые = Источник.Движения.ПлановыеНачисленияРаботниковОрганизаций;
// Получаем массив видов расчета, которые документ пытается возобновить
СписокПроверяемых = Новый Массив;
Для Каждого Стр Из НаборПлановые Цикл
Если Стр.ВидДействия = Перечисления.ВидыДействияСНачислениями.Начать Тогда
СписокПроверяемых.Добавить(Стр.ВидРасчета);
КонецЕсли;
КонецЦикла;
Если СписокПроверяемых.Количество() = 0 Тогда
Возврат;
КонецЕсли;
// Проверяем наличие сторонних документов прекращения
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Рег.ВидРасчета КАК ВидРасчета
|ИЗ
| РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК Рег
|ГДЕ
| Рег.Сотрудник = &Сотрудник
| И Рег.ВидРасчета В (&СписокВидов)
| И Рег.ВидДействия = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислениями.Прекратить)
| И Рег.Регистратор <> &ТекущийДокумент";
Запрос.УстановитьПараметр("Сотрудник", Источник.Сотрудник);
Запрос.УстановитьПараметр("СписокВидов", СписокПроверяемых);
Запрос.УстановитьПараметр("ТекущийДокумент", Источник.Ссылка);
ОтмененныеВиды = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ВидРасчета");
// Удаляем ошибочные строки возобновления
Индекс = НаборПлановые.Количество() - 1;
Пока Индекс >= 0 Цикл
Стр = НаборПлановые[Индекс];
Если Стр.ВидДействия = Перечисления.ВидыДействияСНачислениями.Начать
И ОтмененныеВиды.Найти(Стр.ВидРасчета) <> Неопределено Тогда
НаборПлановые.Удалить(Индекс);
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
КонецПроцедуры
Если отпуск по уходу уже проведен в закрытом периоде и перепроводить цепочку документов нельзя, воспользуемся документом Корректировка записей регистров:
Корректировка записей регистров.Плановые начисления работников организаций.Прекратить.