Почему в ЗУП 3.1 задваиваются календарные дни при расчете среднего заработка после переноса данных из 2.5?

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

При переходе с редакции 2.5 на 3.1 конфигурации «Зарплата и управление персоналом» пользователи часто сталкиваются с аномальным поведением программы при расчете отпусков или командировок. Типичный симптом: в графе «Отработано дней (календ.)» отображаются нереальные числа, например, 55 или 58 дней для февраля. Это напрямую влияет на итоговую сумму, занижая средний заработок сотрудника. Разберем подробно причины возникновения этой ошибки и способы ее устранения.

Анализ механизмов хранения данных для среднего заработка

Для начала проанализируем, как система ЗУП 3.1 собирает данные для расчета среднего заработка. В отличие от старых редакций, здесь информация аккумулируется в нескольких источниках одновременно. Рассмотрим основные регистры:

  1. Регистр накопления Данные о времени для расчета среднего (общий) — сюда записываются сведения, формируемые «естественным» путем при проведении документов начисления зарплаты и табелей непосредственно в текущей базе 3.1.
  2. Регистр сведений Данные о времени для расчета среднего (корректировка) — этот регистр предназначен для хранения данных, перенесенных из предыдущих программ (ЗУП 2.5), или для внесения ручных правок пользователем.

Выясним причину проблемы: при формировании печатной формы или расчете документа программа выполняет запрос, который суммирует показатели из обоих этих регистров за один и тот же период. Если один и тот же месяц представлен и в регистре накопления, и в регистре сведений, мы получаем «задвоение» или «удвоение» дней.

Почему данные дублируются?

Проанализируем ситуацию, когда в феврале вместо 28 дней программа видит 55. Это происходит из-за наложения периодов при разных типах переноса данных:

Решение 1: Очистка регистра сведений через внешнюю обработку

Посмотрим на самый эффективный способ решения проблемы, если количество ошибочных записей велико. Поскольку регистр Данные о времени для расчета среднего (корректировка) независимый, его можно очистить программно. Рассмотрим логику работы такой обработки:


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

После очистки этого регистра система перестанет суммировать «старые» перенесенные данные с «новыми» расчетными данными из регистра накопления. Дни в расчете среднего придут в норму.

Решение 2: Использование стандартной обработки «Групповое изменение реквизитов»

Если мы не хотим прибегать к написанию кода или внешним обработкам, воспользуемся встроенным инструментом. Разберем по шагам:

  1. Перейдем в раздел Администрирование — Обслуживание — Корректировка данных — Групповое изменение реквизитов.
  2. В поле «Выбирать из списка» нажмем гиперссылку «Дополнительные параметры» и установим галочку «Показывать служебные объекты». Без этого независимые регистры не будут доступны для выбора.
  3. Выберем в списке объектов Регистр сведений "Данные о времени для расчета среднего заработка (корректировка)".
  4. Добавим отбор по периоду или по конкретным сотрудникам, у которых наблюдается задвоение.
  5. Нажмем кнопку «Изменить параметры» и выберем действие по удалению записей (или просто очистим набор).

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

Рассмотрим математическую сторону вопроса. Формула расчета среднего заработка для отпуска выглядит следующим образом:

Средний заработок = Начисления за расчетный период / (Количество отработанных месяцев * 29.3 + Отработанные дни в неполных месяцах)

Когда у нас в знаменателе вместо положенных 28 дней стояло 55, делитель был искусственно завышен. Следовательно, итоговое значение среднего заработка за один день было значительно ниже реального. После того как мы очистили регистр и привели количество дней к фактическому значению, знаменатель уменьшился, а итоговая сумма среднего заработка выросла. Это абсолютно корректно и подтверждает правильность проведенных манипуляций.

Рекомендации по проверке данных после переноса

Чтобы избежать подобных проблем в будущем, рекомендуем придерживаться следующего алгоритма действий при переходе с 2.5 на 3.1:

  1. Проверка документов «Перенос данных»: Найдите документы с кодами ЗП_СЗО или ГР_СЗО. Именно они отвечают за наполнение регистров среднего заработка.
  2. Универсальный отчет: Сформируйте «Универсальный отчет» по регистру накопления Данные о времени для расчета среднего (общий) и регистру сведений Данные о времени для расчета среднего (корректировка). Сравните их в Excel. Если за одни и те же месяцы данные есть в обоих регистрах — это 100% причина задвоения.
  3. Выбор методики: Если вы планируете вести учет «с чистого листа» и средний заработок за прошлые периоды вам нужен только для справок, лучше оставить данные только в регистре корректировка и не перепроводить старые документы начислений. Если же вы делаете полный перенос — будьте готовы к ручной очистке корректировочных регистров за те периоды, которые вы решили пересчитать в новой базе.

Таким образом, мы выяснили, что проблема «лишних дней» в среднем заработке — это результат наложения данных из двух разных механизмов хранения 1С:Предприятия. Своевременная очистка независимого регистра сведений позволяет быстро вернуть расчеты в корректное русло.

← На главную