В старых редакциях конфигурации «Зарплата и Управление Персоналом 2.0» (ЗУП 2.0) пользователи часто сталкиваются с ошибкой при проведении документа Начисление по больничному листу. Сообщение выглядит следующим образом:
В строке номер "N" табл. части "Начисления": нарушено требование непрерывности записей начислений!
Особенно часто эта проблема возникает, когда в документе помимо стандартной оплаты больничного (за счет работодателя и за счет ФСС) присутствует доплата до среднего заработка или иная доплата за тот же период. Давайте разберем, почему возникает эта ошибка, как работает алгоритм проверки и как исправить ситуацию программно или методически.
Давайте проанализируем, как работает проверка в документе. В конфигурации существует процедура ПроверитьНепрерывностьЗаписейНачислений. Её задача — убедиться, что периоды болезни идут строго друг за другом без разрывов.
Стандартная логика больничного листа предполагает такую последовательность:
Алгоритм сортирует таблицу начислений по дате начала и проверяет следующее условие: Дата начала следующей строки должна быть равна Дата окончания предыдущей строки + 1 день.
Посмотрим на фрагмент кода, который вызывает ошибку:
ТНачислений = Начисления.Выгрузить();
ТНачислений.Сортировать("ДатаНачала");
ПредыдущаяДатаОкончания = Дата('00010101');
СтрокаНеПервая = Ложь;
Для Каждого Строка ИЗ ТНачислений Цикл
// ... пропуск сторно записей ...
Если СтрокаНеПервая Тогда
// Проверка: есть ли разрыв или наложение
Если Строка.ДатаНачала <> ПредыдущаяДатаОкончания + мДлинаСуток Тогда
// ВЫЗОВ ОШИБКИ "нарушено требование непрерывности..."
КонецЕсли;
Иначе
СтрокаНеПервая = Истина;
КонецЕсли;
ПредыдущаяДатаОкончания = Строка.ДатаОкончания;
КонецЦикла;
Когда мы добавляем доплату до среднего заработка, её период действия (Даты начала и окончания) совпадает с периодом самого больничного. В таблице начислений появляются две строки с одинаковой датой начала (или пересекающимися датами).
В этом случае условие Строка.ДатаНачала <> ПредыдущаяДатаОкончания + 1 день выполняется (так как дата начала равна дате начала предыдущей строки, а не следует за ней), и программа выдает ошибку.
Так как ЗУП 2.0 является устаревшей конфигурацией и официальные обновления на неё выходят редко или не затрагивают такую логику, наиболее действенным способом является небольшая правка кода в модуле объекта документа.
Нам необходимо исключить строки с доплатой из этой жесткой проверки. Мы должны сказать алгоритму: «Если это доплата, просто пропусти её и не проверяй непрерывность дат относительно неё».
Рассмотрим, как правильно модифицировать цикл:
Для Каждого Строка ИЗ ТНачислений Цикл
// Пропустим сторно записи
Если Строка.Сторно Тогда
Продолжить;
КонецЕсли;
// ВАЖНО: Добавляем исключение для доплат
// Здесь нужно указать условие, по которому мы определяем доплату.
// Это может быть проверка на конкретный ВидРасчета или свойство вида расчета.
Если Строка.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ДоплатаДоСреднегоЗаработка Тогда
Продолжить;
КонецЕсли;
// Альтернативный вариант проверки (если доплат много):
// Если НЕ Строка.ВидРасчета.ТребуетПроверкиНепрерывности Тогда Продолжить; КонецЕсли;
// Далее идет стандартная проверка
Если СтрокаНеПервая Тогда
Если Строка.ДатаНачала <> ПредыдущаяДатаОкончания + мДлинаСуток Тогда
// ... код вывода ошибки ...
КонецЕсли;
Иначе
СтрокаНеПервая = Истина;
КонецЕсли;
ПредыдущаяДатаОкончания = Строка.ДатаОкончания;
КонецЦикла;
Почему важно использовать Продолжить?
Если мы просто изменим условие внутри проверки, переменная ПредыдущаяДатаОкончания перезапишется датой окончания доплаты. Это может сломать проверку для следующей "нормальной" части больничного листа. Использование Продолжить позволяет циклу полностью игнорировать строку доплаты, сохраняя цепочку дат для основных начислений (Работодатель -> ФСС).
После исправления кода проверки непрерывности может возникнуть новая ошибка платформы:
Обнаружено повторное начисление за период...
Это происходит, если вид расчета «Доплата» настроен некорректно с точки зрения учета времени. В 1С действует механизм вытеснения: два начисления, претендующие на полное отработанное (или неотработанное) время, не могут действовать одновременно.
Чтобы избежать этой ошибки без правки кода платформы, проверим настройки вида расчета Доплата до среднего заработка в режиме «1С:Предприятие».
Вид времени.
Если там установлено значение вроде «Полные смены» или «Неотработанные полные смены» (то же самое, что и у самого Больничного), платформа будет считать это дублированием.
Для доплаты следует установить переключатель в положение: Дополнительное начисление за уже оплаченное время.
Убедимся, что в списке Вытесняющие начисления нет самого больничного листа, и наоборот — в больничном листе доплата не должна стоять в вытесняющих, если они должны действовать параллельно.
Для корректного проведения документа «Начисление по больничному листу» с доплатой в ЗУП 2.0 необходимо:
ПроверитьНепрерывностьЗаписейНачислений, добавив исключение (команду Продолжить) для строк с видом расчета доплаты, чтобы они не разрывали логическую цепочку периодов больничного.