При расчете отпускных в конфигурации 1С:УПП 1.3 (релизы 1.3.245.3 и 1.3.246.1 и выше), пользователи часто сталкиваются с ошибкой: "Оплата отпуска по календарным дням: Нет данных для расчета среднего заработка". Эта проблема возникла после обновлений, связанных с изменениями в законодательстве, вступившими в силу с начала 2025 года, и существенно затрудняет корректный расчет отпускных. Мы рассмотрим причины этой ошибки и предложим эффективные способы ее устранения, включая ручные обходные пути и программные доработки.
Ключевая причина возникновения ошибки кроется в изменениях, внесенных в алгоритмы расчета среднего заработка в 1С:УПП 1.3 для соответствия новым законодательным требованиям 2025 года. Эти изменения были направлены на более детализированное отражение начислений, таких как районные коэффициенты (РК) и северные надбавки (СН), а также других видов оплат. Однако в процессе реализации этих доработок возникли недочеты, приводящие к некорректному заполнению данных на вкладке "Расчет среднего заработка".
Прежде чем приступать к программным доработкам, мы рекомендуем провести первичную диагностику и попробовать ручные обходные пути. Это поможет убедиться в характере проблемы и, возможно, временно решить ее для конкретного случая.
В документе "Оплата отпуска" присутствуют несколько кнопок для расчета. Мы советуем избегать большой кнопки "РассчитатьВсе", которая может нарушать порядок вычислений. Вместо этого, выполните расчет по шагам:
Если после этого расчет не происходит, мы переходим к самому эффективному ручному способу.
Если предыдущие шаги не помогли, наиболее верный способ временно решить проблему — это вручную проставить количество дней расчетного периода на вкладке "Расчет среднего заработка" для строк, соответствующих окладу или тарифу. Мы проанализируем этот подход подробнее:
Этот метод подтверждает, что корень проблемы именно в отсутствии дней для оклада в знаменателе. Однако он является лишь временным решением, поскольку ручной ввод данных не является оптимальным для системного учета.
Для постоянного решения проблемы, мы должны внести изменения в код конфигурации. Мы выяснили, что основная причина некорректного заполнения дней лежит в логике формирования данных для расчета среднего заработка, где система либо не проставляет дни вовсе, либо может суммировать их неправильно. Нам нужно обеспечить, чтобы дни расчетного периода проставлялись автоматически и корректно только для базовых начислений (оклад, тариф).
Мы проанализировали, что до 2025 года в УПП на вкладке среднего заработка присутствовал только общий заработок без деления по начислениям, и по каждому месяцу была одна строка с одним числом дней для знаменателя. Несколько строк появлялись, когда внутри месяца зарплата делилась по каким-то причинам. В коде, соответственно, использовалась агрегатная функция СУММА в запросе по дням. С 2025 года потребовалось выделять каждое начисление: оклад, надбавка и т.д. Если для каждой строки месяца (Оклад, Надбавка, Премия) проставлялось 29.3 дня, то в результате СУММА в запросе брала 29.3 + 29.3 + 29.3, что приводило к резкому занижению отпускных сумм. Разработчики должны были либо оставить дни только для базового начисления, либо исключить их в запросе для всех, кроме оклада. В их реализации возникли недочеты, которые нам предстоит исправить.
Мы предлагаем внести корректировки в общий модуль ПроведениеРасчетовПереопределяемый, а именно в процедуру СформироватьИЗаписатьДанныеРасчетаСреднего2025. Этот модуль отвечает за формирование и запись данных, используемых при расчете среднего заработка.
Найдем в указанном модуле место, где происходит заполнение отработанных дней и часов, и добавим логику, которая будет корректно устанавливать эти значения для основных видов начислений. Код, который мы будем использовать, поможет обеспечить, что ОтработаноДней и ОтработаноЧасов будут заполнены для оклада и тарифа, но не будут задваиваться для других начислений.
Вот пример кода, который необходимо добавить или скорректировать в процедуре СформироватьИЗаписатьДанныеРасчетаСреднего2025:
// ... (существующий код процедуры) ...
Если ТипЗнч(ВыборкаБазы.Начисление) <> Тип("ПланВидовРасчетаСсылка.СреднийЗаработок") Тогда
Если ВыборкаБазы.Начисление.КодДоходаНДФЛ = Справочники.ДоходыНДФЛ.РайонныеСеверныеНадбавки Тогда
СтрокаДвижений.ОтработаноДней = ВыборкаОтработанноеВремя.ОтработаноДней;
СтрокаДвижений.ОтработаноЧасов = ВыборкаОтработанноеВремя.ОтработаноЧасов;
// 2025-04-29 ошибка расчета среднего заработка
ИначеЕсли ВыборкаБазы.Начисление = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ТарифЧасовой ИЛИ
ВыборкаБазы.Начисление = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням ИЛИ
ВыборкаБазы.Начисление = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоЧасам ИЛИ
ВыборкаБабазы.Начисление = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ТарифДневной Тогда
СтрокаДвижений.ОтработаноДней = ВыборкаОтработанноеВремя.ОтработаноДней;
СтрокаДвижений.ОтработаноЧасов = ВыборкаОтработанноеВремя.ОтработаноЧасов;
// 2025-04-29 ошибка расчета среднего заработка
КонецЕсли;
КонецЕсли;
// ... (остальной код процедуры) ...
Мы разберем этот фрагмент кода:
Если ТипЗнч(ВыборкаБазы.Начисление) <> Тип("ПланВидовРасчетаСсылка.СреднийЗаработок") Тогда: Эта проверка гарантирует, что мы работаем с обычными начислениями, а не с самим видом расчета "СреднийЗаработок", который является служебным.
Если ВыборкаБазы.Начисление.КодДоходаНДФЛ = Справочники.ДоходыНДФЛ.РайонныеСеверныеНадбавки Тогда: Мы сначала обрабатываем районные и северные надбавки. Для них также проставляются отработанные дни и часы из выборки ВыборкаОтработанноеВремя. Это соответствует текущей логике, где эти надбавки могут влиять на средний заработок.
ИначеЕсли ВыборкаБазы.Начисление = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ТарифЧасовой ИЛИ ... Тогда: Это ключевая часть кода. Мы явно указываем, что для следующих видов основных начислений:
ТарифЧасовойОкладПоДнямОкладПоЧасамТарифДневной...мы также должны заполнить поля СтрокаДвижений.ОтработаноДней и СтрокаДвижений.ОтработаноЧасов значениями из ВыборкаОтработанноеВремя. Это обеспечивает, что для базовых начислений, которые формируют основу заработка, дни и часы будут проставлены корректно и автоматически.
Комментарий // 2025-04-29 ошибка расчета среднего заработка: Это полезный комментарий, который был оставлен разработчиком или тем, кто внес это исправление. Он указывает на контекст изменений.
Внесение этого кода в конфигурацию устранит проблему с автоматическим незаполнением дней для оклада, что является основной причиной ошибки "Нет данных для расчета среднего заработка". После этого изменения система должна будет корректно подставлять значения ОтработаноДней для оклада, позволяя корректно рассчитывать средний заработок.
Важно: Перед внесением изменений в типовую конфигурацию всегда создавайте резервную копию базы данных. Мы рекомендуем также протестировать изменения на копии базы перед их применением в рабочей среде.
Мы также рассмотрим несколько дополнительных рекомендаций, которые могут быть полезны в контексте данной проблемы.
Понимание этих изменений поможет нам лучше ориентироваться в логике расчетов и выявлять потенциальные ошибки.
Таким образом, проблема "Нет данных для расчета среднего заработка" в 1С:УПП 1.3, хоть и вызывает значительные трудности, имеет четкие причины и решения. Мы можем временно обойти ее ручным заполнением дней, но для стабильной и корректной работы системы требуется программная доработка конфигурации, обеспечивающая автоматическое заполнение дней расчетного периода для базовых начислений.