При работе в программе 1С:Зарплата и Управление Персоналом (релиз 3.1.14.97) многие пользователи столкнулись с критической проблемой: в расчете среднего заработка для отпусков и командировок начали появляться необъяснимые отрицательные значения отработанных дней и часов. Особенно ярко эта проблема проявилась в периоды, следующие за «коронавирусными» нерабочими днями. Рассмотрим причины возникновения этой коллизии и разберем способы ее решения, основываясь на техническом анализе регистров и программного кода.
Проанализируем ситуацию: при заполнении документа «Отпуск» в таблице расчета среднего заработка за прошлые месяцы (например, март или апрель) программа указывает отрицательное количество дней (например, -14 дней). Выясним причину: основным виновником является механизм учета оплачиваемых нерабочих дней (ОН).
В релизе 3.1.14.97 логика формирования движений по регистру сведений Данные о времени для расчета среднего (общий) претерпела изменения. Проблема возникает, когда данные в графике сотрудника, табеле учета рабочего времени и фактических начислениях вступают в конфликт. Рассмотрим типичные сценарии:
Начисление зарплаты и взносов система ошибочно сторнирует записи в регистре среднего заработка, создавая «минусовые» остатки, которые не перекрываются новыми записями.Прежде всего, разберем настройки программы. В системе предусмотрена опция, определяющая, должны ли оплачиваемые нерабочие дни включаться в расчет среднего. Если настройка «Выполнять расчет по постановлению 922» активирована (или наоборот, в зависимости от принятой учетной политики предприятия), алгоритм заполнения данных начинает искать вытесняющие виды времени.
Посмотрим на пример: если сотруднику в табеле поставили «Я», но в графике это время было «ОН», программа впадает в «коллизию». Она видит начисление за явку, но внутренний запрос пытается применить логику исключения времени «ОН», что и дает те самые «минусы». Проанализируем ситуацию с помощью отладки: проблема часто кроется в нескольких сложных запросах, которые подхватывают меньше дней, чем есть фактически.
Для исправления накопленных ошибок в регистрах 1С предлагает встроенную обработку. Рассмотрим порядок работы с ней:
Важный нюанс: как показывает практика, на релизе 3.1.14.97 эта обработка не всегда справляется, если в базе присутствуют документы Индивидуальный график или Перенос данных. Если после работы обработки «минусы» остались, перейдем к более радикальным мерам.
Для сотрудников, которые работали в периоды «ОН», рекомендуется использовать Индивидуальный график. Разберем правильную последовательность действий, чтобы не «сломать» регистр среднего заработка:
Начисление зарплаты и взносов за проблемный месяц.Индивидуальный график, где явно укажем вид времени «Я» (Явка) для всех рабочих дней.Табель учета рабочего времени — данные в нем должны соответствовать индивидуальному графику.Только такая строгая последовательность позволяет корректно зафиксировать связь вида времени и оплаты в регистре сведений Данные о времени для расчета среднего (общий).
Если методические способы (индивидуальные графики, патчи, перепроведение) не помогают, а обновиться на версию 3.1.14.120 или выше нет возможности, потребуется внесение изменений в код. Выясним причину в программном модуле. Ошибка часто локализована в общем модуле УчетСреднегоЗаработка, где формируется временная таблица для регистра среднего.
Рассмотрим логику исправления: необходимо доработать запрос формирования данных, чтобы принудительно исключить запись отрицательных значений времени, если они возникают в результате наложения «ОН» на фактически отработанное время. Пример схематичной логики исправления в коде:
// В процедуре формирования таблицы данных для среднего заработка
// Добавляем проверку на отрицательные значения
Для Каждого СтрокаДанных Из ТаблицаВремениСреднего Цикл
Если СтрокаДанных.ОтработаноДней < 0 Тогда
СтрокаДанных.ОтработаноДней = 0;
КонецЕсли;
Если СтрокаДанных.ОтработаноЧасов < 0 Тогда
СтрокаДанных.ОтработаноЧасов = 0;
КонецЕсли;
КонецЦикла;
Это «костыльное» решение позволяет избежать паники у расчетчиков, когда они видят пустые или отрицательные суммы в отпусках. Однако помните, что наиболее правильным решением является обновление конфигурации до релизов, вышедших после версии 3.1.14.120, где 1С полностью переписала алгоритм движений по регистрам среднего заработка.
Для релиза 3.1.14.97 выпускались оперативные патчи (исправления). Проанализируем ситуацию: установка одного патча может конфликтовать с другим, если они оба затрагивают общий модуль УчетСреднегоЗаработка. Перед установкой новых расширений обязательно отключайте старые патчи, связанные со средним заработком. Также проверьте настройку «Проверять соответствие фактического времени плановому» в настройках расчета зарплаты — в некоторых случаях именно ее включение позволяло патчам отрабатывать корректно.
Резюмируем: если вы столкнулись с «минусами» в среднем заработке, сначала попробуйте методику с индивидуальными графиками и перепроведением зарплаты. Если это не помогает, используйте расширения от 1С или, в крайнем случае, корректируйте регистры через документ Перенос данных, принудительно исправляя отрицательные значения на корректные показатели.