В практике работы с программой 1С:Зарплата и Управление Персоналом бухгалтеры и программисты часто сталкиваются с ситуациями, когда суммы, попадающие в регистр «Данные о начислениях для расчета среднего (общий)», не соответствуют ожидаемым значениям. Особенно остро эта проблема проявилась в периоды введения «президентских» оплачиваемых нерабочих дней (ОН), таких как 24 июня и 1 июля 2020 года. В этой статье мы подробно разберем, почему программа может избыточно уменьшать базу для расчета среднего, как на это влияют настройки видов времени и каким образом можно исправить эту техническую ошибку.
Рассмотрим типичную ситуацию: сотруднику с окладом 23 000 рублей в июле 2020 года начисляется заработная плата. По графику у него 23 рабочих дня, из которых 22 дня — это «Явка», а 1 день (1 июля) — «Оплачиваемый нерабочий день» (ОН). Согласно законодательству и настройкам программы, день 1 июля не должен включаться в расчет среднего заработка. Логика расчета суммы для среднего должна быть следующей:
23 000 руб. (оклад) / 23 (дней по норме) * 22 (отработанных дня) = 22 000 руб.
Однако на практике в регистр сведений попадает сумма 21 083,33 руб. Проанализируем ситуацию: сумма оказалась меньше расчетной ровно на ту долю, которую программа «потеряла» при распределении оплаты по видам времени. Выясним причину такого поведения системы.
Одной из ключевых причин некорректного расчета является настройка самого начисления (например, «Оплата по окладу»). Перейдем на вкладку «Учет времени». Часто для того, чтобы дни отсутствия (например, отгулы) не уменьшали сумму оклада, бухгалтеры добавляют в таблицу «Дополнительные виды времени» такие значения, как «Дополнительные выходные дни (неоплачиваемые)».
Проблема заключается в том, что при наличии более чем одного вида времени в этой вкладке (например, «Явка» + «Отгул»), внутренний алгоритм 1С начинает использовать специальные коэффициенты для распределения суммы начисления. Если в месяце присутствуют оплачиваемые нерабочие дни (ОН), программа применяет сложную логику вытеснения, которая из-за программной ошибки 10224869 начинает «зацикливаться» или дважды применять понижающий коэффициент. В результате сумма, предназначенная для среднего заработка, уменьшается избыточно.
Интересно заметить, что если изменить начисление с «Оплаты по окладу» (по дням) на «Оплату по окладу (по часам)», расчет может стать корректным. Это происходит потому, что в коде конфигурации расчеты по дням и часам обрабатываются разными программными блоками, и в «часовом» модуле данная ошибка на определенном этапе отсутствовала.
Основная проблема кроется в общем модуле РасчетЗарплатыРасширенный, а именно в функции КоэффициентыОплаченногоРабочегоВремениНачислений. Проанализируем ситуацию: функция некорректно обрабатывает массив видов времени, когда их количество превышает стандартный набор.
Для исправления ситуации специалисты рекомендуют внести правки в алгоритм формирования временных таблиц запроса, чтобы корректно учитывать фактически отработанные дни и часы, не допуская их повторного уменьшения. Рассмотрим доработанный вариант функции, который помогает решить проблему для версии ЗУП 3.1.14.183 и аналогичных:
Функция КоэффициентыОплаченногоРабочегоВремениНачислений(МенеджерВременныхТаблиц) Экспорт
Коэффициенты = Новый ТаблицаЗначений;
Коэффициенты.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
Коэффициенты.Колонки.Добавить("ВидРасчета", Новый ОписаниеТипов("ПланВидовРасчетаСсылка.Начисления"));
Коэффициенты.Колонки.Добавить("Месяц", Новый ОписаниеТипов("Дата"));
Коэффициенты.Колонки.Добавить("Сторно", Новый ОписаниеТипов("Булево"));
Коэффициенты.Колонки.Добавить("Коэффициент", Новый ОписаниеТипов("Число"));
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ВыделятьНерабочиеДниОтдельнымВидомВремени", УчетРабочегоВремениРасширенный.ВыделятьНерабочиеДниОтдельнымВидомВремени);
Запрос.УстановитьПараметр("ОплачиваемыеНерабочиеДни", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.ОплачиваемыеНерабочиеДни"));
Запрос.УстановитьПараметр("РабочееВремя", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.РабочееВремя"));
Запрос.Текст =
"ВЫБРАТЬ
| НачисленияФактическийПериодДействия.Сотрудник КАК Сотрудник,
| НачисленияФактическийПериодДействия.ПериодДействия КАК Месяц,
| НачисленияФактическийПериодДействия.ВидРасчета КАК ВидРасчета,
| НачисленияФактическийПериодДействия.ОтработаноДней КАК ОтработаноДней,
| НачисленияФактическийПериодДействия.ОтработаноЧасов КАК ОтработаноЧасов,
| НачисленияФактическийПериодДействия.Сторно КАК Сторно
|ПОМЕСТИТЬ ВТНачисленияСотрудников
|ИЗ
| РегистрРасчета.Начисления.ФактическийПериодДействия КАК НачисленияФактическийПериодДействия
|..."; // далее следует логика объединения с графиками
// В данном коде критически важно правильно определить поля ОтработаноДней и ОтработаноЧасов
// чтобы система не уменьшала их при наложении дополнительных видов времени.
КонецФункции
Разберем по шагам, что можно предпринять, если вы обнаружили неверные данные в среднем заработке:
10224869 была официально исправлена компанией 1С. Для исправления необходимо обновить систему до версий 3.1.10.571 или 3.1.14.208 (и выше). После обновления потребуется перепровести документы «Начисление зарплаты и взносов» за проблемные месяцы.КоэффициентыОплаченногоРабочегоВремениНачислений в модуле РасчетЗарплатыРасширенный на корректную версию (как показано в примере выше). Это позволит избежать изменения типовой конфигурации.Данные о начислениях для расчета среднего (общий), чтобы вручную поправить суммы. Однако это трудоемкий процесс, который может привести к ошибкам в будущем.Проанализируем методическую сторону вопроса. Использование вкладки «Учет времени» в основном окладе для добавления отгулов — это «обходной путь», который часто используют, чтобы оклад не уменьшался. Правильнее настраивать вид расчета «Отгул» таким образом, чтобы он вытеснял оклад, но при этом в самом начислении оклада использовать формулу, которая учитывает время отгулов как отработанное, либо корректно настраивать приоритеты начислений.
Подведем итог: если вы видите, что сумма в среднем заработке меньше положенной, первым делом проверьте количество видов времени в настройках оклада и наличие оплачиваемых нерабочих дней в этом месяце. Обновление до актуального релиза — лучший способ забыть об этой проблеме навсегда.