Почему документ «Отпуск по уходу за ребенком» возобновляет ранее отмененные начисления и как это исправить в 1С:ЗУП 2.5?

Программист 1С v8.3 (Обычные формы) 1С:Зарплата и Управление Персоналом Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При ведении кадрового учета и расчета заработной платы в конфигурации «1С:Зарплата и управление персоналом 2.5» расчетчики нередко сталкиваются с коллизией: сотруднику прекращают действие постоянной надбавки или премии (например, документом Ввод постоянного начисления или удержания организаций), а затем регистрируют документ Отпуск по уходу за ребенком с указанием даты окончания. После проведения отпуска программа в движениях по регистрам снова ставит действие «Начать» для всех действовавших ранее начислений на дату завершения отпуска. В результате после выхода сотрудника на работу отмененное ранее начисление начинает начисляться вновь.

Разберем детально, почему так происходит в типовой конфигурации, и рассмотрим варианты устранения этой проблемы как на уровне методологии учета, так и программными средствами.

Причина поведения: механика регистра плановых начислений

Проанализируем работу механизма проведения документа Отпуск по уходу за ребенком:

  1. Информация о действующих видах расчета сотрудников хранится в периодическом регистре сведений ПлановыеНачисленияРаботниковОрганизаций. Записи в нем определяются событиями (видами действий): Начать, Изменить, Прекратить.
  2. При проведении документа Отпуск по уходу за ребенком алгоритм считывает действующие начисления сотрудника через срез последних на дату начала отпуска.
  3. На дату начала отпуска документ формирует запись с действием Прекратить для всех активных плановых начислений.
  4. Если в шапке документа заполнена дата окончания, то на эту дату (будущий период) документ автоматически формирует обратные записи с действием Начать со старыми тарифными ставками.
  5. Типовой алгоритм проведения не анализирует будущие движения в регистре, которые могли быть введены промежуточными документами (например, если надбавка должна была закончиться в середине отпуска или была отменена с конкретной даты). В итоге запись с действием Начать на дату окончания отпуска перекрывает все предшествующие прекращения начислений.

Вариант 1. Методический: проведение документов возврата и кадрового контроля

Рассмотрим типовой сценарий работы, рекомендуемый при длительных отсутствиях сотрудников:

  1. Не фиксировать жесткую дату окончания в первичном документе. Если при уходе сотрудницы в отпуск дата окончания начислений не формирует гарантированный список надбавок, дату выхода фиксируют отдельными документами при фактическом возвращении.
  2. Оформление выхода на работу специализированными документами. При реальном выходе сотрудника на работу вводится документ Изменение условий оплаты отпуска по уходу за ребенком или кадровый приказ Возврат на работу / Кадровое перемещение организаций. В этих документах расчетчик явно указывает актуальный перечень плановых начислений, что создает новую запись среза последних в регистре ПлановыеНачисленияРаботниковОрганизаций и исключает старые неактуальные премии.
  3. Перезаполнение постоянных начислений. После окончания отпуска вводится документ Ввод постоянного начисления или удержания организаций с действием Прекратить на дату окончания отпуска для тех начислений, которые возобновились ошибочно.

Вариант 2. Контроль с помощью служебной обработки или отчета

Когда на предприятии числятся сотни и тысячи сотрудников, отслеживать пересечения вручную становится трудоемко. Для регулярного аудита создадим отчет или внешнюю обработку, выявляющую некорректные возобновления.

Посмотрим на пример логики запроса для поиска начислений, которые были отменены, но повторно возобновлены документом отпуска:


ВЫБРАТЬ
    Плановые.Сотрудник КАК Сотрудник,
    Плановые.ВидРасчета КАК ВидРасчета,
    Плановые.Период КАК ДатаВозобновления,
    Плановые.Регистратор КАК Регистратор
ИЗ
    РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК Плановые
ГДЕ
    Плановые.ВидДействия = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислениями.Начать)
    И Плановые.Регистратор ССЫЛКА Документ.ОтпускПоУходуЗаРебенком
    И Плановые.ВидРасчета В
        (ВЫБРАТЬ
            Прекращенные.ВидРасчета
        ИЗ
            РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК Прекращенные
        ГДЕ
            Прекращенные.Сотрудник = Плановые.Сотрудник
            И Прекращенные.ВидДействия = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислениями.Прекратить)
            И Прекращенные.Регистратор НЕ ССЫЛКА Документ.ОтпускПоУходуЗаРебенком
            И Прекращенные.Период <= Плановые.Период)

Такой инструмент позволяет расчетчикам перед формированием документа Начисление зарплаты работникам организаций быстро увидеть список сотрудников с некорректно возобновившимися надбавками и скорректировать их.

Вариант 3. Программная корректировка движений через подписку на событие

Если требуется полностью автоматизировать поведение без вмешательства в типовые формы документов, создадим подписку на событие ОбработкаПроведения для документа ОтпускПоУходуЗаРебенком.

Разберем по шагам реализацию обработчика в общем модуле:

  1. В обработчике подписки получаем набор записей движений документа по регистру сведений ПлановыеНачисленияРаботниковОрганизаций.
  2. Находим строки, где ВидДействия = Перечисления.ВидыДействияСНачислениями.Начать (будущие возобновления на дату окончания отпуска).
  3. Выполняем запрос к регистру сведений, проверяя, не было ли для данного сотрудника и вида расчета введено прекращение начисления иным документом (например, ВводПостоянногоНачисленияИлиУдержания).
  4. Удаляем из коллекции Движения.ПлановыеНачисленияРаботниковОрганизаций те строки возобновления, которые ранее были отменены.

Посмотрим на пример программной реализации проверки в общем модуле:


Процедура ДокументОтпускПоУходуЗаРебенкомОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт

    Если Отказ Тогда
        Возврат;
    КонецЕсли;

    НаборПлановые = Источник.Движения.ПлановыеНачисленияРаботниковОрганизаций;
    
    // Получаем массив видов расчета, которые документ пытается возобновить
    СписокПроверяемых = Новый Массив;
    Для Каждого Стр Из НаборПлановые Цикл
        Если Стр.ВидДействия = Перечисления.ВидыДействияСНачислениями.Начать Тогда
            СписокПроверяемых.Добавить(Стр.ВидРасчета);
        КонецЕсли;
    КонецЦикла;

    Если СписокПроверяемых.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;

    // Проверяем наличие сторонних документов прекращения
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	Рег.ВидРасчета КАК ВидРасчета
    |ИЗ
    |	РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК Рег
    |ГДЕ
    |	Рег.Сотрудник = &Сотрудник
    |	И Рег.ВидРасчета В (&СписокВидов)
    |	И Рег.ВидДействия = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислениями.Прекратить)
    |	И Рег.Регистратор <> &ТекущийДокумент";
    
    Запрос.УстановитьПараметр("Сотрудник", Источник.Сотрудник);
    Запрос.УстановитьПараметр("СписокВидов", СписокПроверяемых);
    Запрос.УстановитьПараметр("ТекущийДокумент", Источник.Ссылка);

    ОтмененныеВиды = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ВидРасчета");

    // Удаляем ошибочные строки возобновления
    Индекс = НаборПлановые.Количество() - 1;
    Пока Индекс >= 0 Цикл
        Стр = НаборПлановые[Индекс];
        Если Стр.ВидДействия = Перечисления.ВидыДействияСНачислениями.Начать 
           И ОтмененныеВиды.Найти(Стр.ВидРасчета) <> Неопределено Тогда
            НаборПлановые.Удалить(Индекс);
        КонецЕсли;
        Индекс = Индекс - 1;
    КонецЦикла;

КонецПроцедуры

Вариант 4. Исправление прошлых движений без перепроведения документов

Если отпуск по уходу уже проведен в закрытом периоде и перепроводить цепочку документов нельзя, воспользуемся документом Корректировка записей регистров:

  1. Создаем новый документ Корректировка записей регистров.
  2. В настройке состава регистров отмечаем регистр сведений Плановые начисления работников организаций.
  3. Добавляем строку: указываем сотрудника, проблемный вид расчета, дату (совпадающую с датой возобновления из отпуска) и устанавливаем действие Прекратить.
  4. Проводим документ. После этого регистр среза последних на дату выхода сотрудника будет содержать корректное состояние.
← На главную