Как исправить некорректный расчет среднего заработка и занижение календарных дней после переноса данных в 1С:КА 2 и ЗУП 3?

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

При переходе со старых конфигураций (таких как «1С:Управление производственным предприятием 1.3», «1С:Комплексная автоматизация 1.1» или «1С:Зарплата и управление персоналом 2.5») на современные программные продукты платформы 1С:Предприятие 8.3 (например, «1С:Комплексная автоматизация 2» или «1С:ЗУП 3.1») технические специалисты часто сталкиваются с методологическими трудностями. Одним из наиболее коварных и трудноотслеживаемых нюансов является расчет среднего заработка за периоды, которые «переходят» через границу начала эксплуатации новой системы.

В этой статье мы подробно разберем типичную проблему: почему при расчете среднего заработка за январь программа учитывает только 16,07 календарных дней вместо положенных 23,63, если сотрудник находился в отпуске в начале года. Мы проанализируем математику этого расчета, заглянем в структуру запросов системы и рассмотрим три гарантированных способа решения этой проблемы.

Суть проблемы и математика некорректного расчета

Рассмотрим конкретную практическую ситуацию. Сотрудник организации находился в ежегодном оплачиваемом отпуске в период с 1 по 14 января. Данный период был оплачен еще в старой программе до момента перехода на новую систему. Для того чтобы зафиксировать этот факт в новой базе, при начале эксплуатации был введен документ «Периоды, оплаченные до начала эксплуатации». Данный документ регистрирует в системе технический вид расчета Дни, учтенные до начала эксплуатации.

При расчете среднего заработка в последующих периодах (когда январь попадает в расчетные 12 месяцев) бухгалтер замечает, что количество учтенных дней за январь составляет 16,07. По закону и логике расчетов это значение должно быть равно 23,63. Давайте разберем, откуда берутся эти цифры.

Согласно Положению об особенностях порядка исчисления средней заработной платы (утв. Постановлением Правительства РФ № 922), средний дневной заработок для оплаты отпусков исчисляется за последние 12 календарных месяцев. Если один из месяцев расчетного периода отработан не полностью (в нашем случае — из-за отпуска), количество календарных дней в нем рассчитывается по формуле:

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

Проанализируем ситуацию с январем (в январе всего 31 календарный день):

  1. Сотрудник отсутствовал по причине отпуска с 1 по 14 января.
  2. Период с 1 по 8 января — это официальные нерабочие праздничные дни РФ. По закону праздничные дни не включаются в число календарных дней отпуска и за них не начисляются отпускные.
  3. Следовательно, фактические дни отпуска, исключаемые из расчетного периода, длятся с 9 по 14 января (всего 6 дней). Праздники с 1 по 8 января исключаться не должны — они считаются «отработанными» в терминах расчета среднего заработка.
  4. Правильный расчет календарных дней для среднего заработка: 31 день (всего) - 6 дней (отпуск) = 25 дней. Далее подставляем в формулу: 29.3 * (25 / 31) = 23.63 дня.
  5. Некорректный расчет программы: система вычитает из расчетного периода все 14 дней целиком (включая праздничные дни с 1 по 8 января). Расчет выглядит так: 31 день (всего) - 14 дней (отсутствие) = 17 дней. Подставляем в формулу: 29.3 * (17 / 31) = 16.07 дня.

Таким образом, программа ошибочно вычитает праздничные дни января из расчета среднего, занижая итоговый средний заработок сотрудника в будущем. Выясним, почему так происходит на уровне программного кода.

Технический анализ проблемы: почему СУБД не видит вытеснения?

Для того чтобы понять, почему алгоритмы 1С допускают эту ошибку, обратимся к структуре запросов, которые система выполняет при сборе данных по среднему заработку. Основной алгоритм сбора информации опирается на анализ начислений и времени.

Программа обращается к виртуальной таблице регистра расчета Начисления.ФактическийПериодДействия. В нормальной ситуации, когда в системе зарегистрирован стандартный документ «Отпуск», этот вид расчета имеет жесткую привязку к вытесняющим видам расчетов и графику работы. Система четко определяет границы действия отпуска и «вырезает» праздничные дни, так как они не входят в фактический период действия начисления по ежегодному отпуску.

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


ВЫБРАТЬ
    Начисления.Ссылка КАК Ссылка,
    Начисления.ЗачетНормыВремени КАК ЗачетНормыВремени,
    Начисления.ЗачетОтработанногоВремени КАК ЗачетОтработанногоВремени,
    ЛОЖЬ КАК Прогул,
    ЛОЖЬ КАК Отгул,
    ЛОЖЬ КАК ЕжегодныйОтпуск
ПОМЕСТИТЬ ВТВидыНачислений
ИЗ
    ПланВидовРасчета.Начисления КАК Начисления
ГДЕ
    Начисления.ЗачетОтработанногоВремени
    И ИСТИНА В
        (ВЫБРАТЬ ПЕРВЫЕ 1
            ИСТИНА
        ИЗ
            ПланВидовРасчета.Начисления.СреднийЗаработокОбщий КАК НастройкаСреднегоЗаработка
        ГДЕ
            НастройкаСреднегоЗаработка.Ссылка = Начисления.Ссылка
            И НастройкаСреднегоЗаработка.Значение <> ЗНАЧЕНИЕ(Перечисление.УчетНачисленийВСреднемЗаработкеОбщий.НеВключать))
 ОБЪЕДИНИТЬ ВСЕ
 ВЫБРАТЬ
    Начисления.Ссылка,
    ИСТИНА,
    ЛОЖЬ,
    ИСТИНА,
    ЛОЖЬ,
    ЛОЖЬ
ИЗ
    ПланВидовРасчета.Начисления КАК Начисления
ГДЕ
    Начисления.КатегорияНачисленияИлиНеоплаченногоВремени В(&КатегорииПрогула)
 ОБЪЕДИНИТЬ ВСЕ
 ВЫБРАТЬ
    Начисления.Ссылка,
    ИСТИНА,
    ЛОЖЬ,
    ЛОЖЬ,
    ИСТИНА,
    ЛОЖЬ
ИЗ
    ПланВидовРасчета.Начисления КАК Начисления
ГДЕ
    Начисления.КатегорияНачисленияИлиНеоплаченногоВремени В(&КатегорииОтгула)
 ОБЪЕДИНИТЬ ВСЕ
 ВЫБРАТЬ
    Начисления.Ссылка,
    ИСТИНА,
    ЛОЖЬ,
    ЛОЖЬ,
    ЛОЖЬ,
    ИСТИНА
ИЗ
    ПланВидовРасчета.Начисления КАК Начисления
ГДЕ
    Начисления.КатегорияНачисленияИлиНеоплаченногоВремени = ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОплатаОтпуска)
    И Начисления.ВидОтпуска.ОтпускЯвляетсяЕжегодным

Проанализировав данный пакет запросов, мы видим, что система ожидает получить строго определенные виды расчетов (с категориями «ОплатаОтпуска», «ОтпускБезОплаты» и т. д.), у которых взведен признак ежегодного отпуска. На основании этих видов расчетов строится таблица фактически отработанных дней.

Техническое начисление Дни, учтенные до начала эксплуатации не подпадает ни под одну из этих категорий! Оно не является предопределенным ежегодным отпуском в понимании платформы. Соответственно, при заполнении виртуальной таблицы фактического периода действия система не сопоставляет этот период с графиком работы сотрудника и праздничными днями. Программа просто исключает весь зарегистрированный период «сплошным текстом», обнуляя календарные дни за весь промежуток с 1 по 14 января.

Рассмотрим, какими путями мы можем исправить эту системную ошибку.

Вариант решения №1: Замена технического документа «нулевым» отпуском (Рекомендуемый метод)

Наиболее чистый, быстрый и методологически верный способ исправить проблему без написания кода и ручной правки регистров — это использование штатных документов «Отпуск». Этот метод полностью автоматизирует правильный расчет времени в последующих периодах.

Выполним процедуру исправления по шагам:

  1. Перейдем в раздел программы, содержащий документы по вводу исторических данных, найдем документ «Периоды, оплаченные до начала эксплуатации» по проблемному сотруднику и распроведем его (или полностью удалим переходящую строчку по январю).
  2. Перейдем в раздел «Кадры» — «Отпуска» и создадим новый стандартный документ «Отпуск».
  3. В качестве периода отпуска укажем реальные переходящие даты (например, с 1 по 14 января). Нам важно зафиксировать кадровое состояние нахождения сотрудника в отпуске.
  4. Так как данный отпуск уже был фактически рассчитан и выплачен в старой информационной базе до перехода, нам не нужно повторно начислять за него деньги. Перейдем на вкладку «Начислено (подробно)» в документе отпуска.
  5. Вручную очистим все строки начислений (удалим рассчитанные суммы). Итоговая сумма к выплате по этому документу должна стать строго равной 0 рублей.
  6. Проведем созданный документ «Отпуск».

Результат: В системе будет зафиксировано полноценное кадровое состояние отпуска. Алгоритмы сбора среднего заработка увидят стандартный вид расчета «Отпуск ежегодный», обратятся к производственному календарю, успешно исключат праздничные дни с 1 по 8 января из периода вытеснения и выдадут правильный расчет календарных дней — 23,63.

Вариант решения №2: Использование документа «Перенос данных» для корректировки регистров среднего

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

Многие пользователи пытаются сделать это с помощью универсального документа «Корректировка регистров», однако платформа часто блокирует прямую запись в специализированные зарплатные регистры. Для решения этой задачи нам понадобится специализированный инструмент переноса.

Выполним корректировку по шагам:

  1. Перейдем в раздел «Администрирование» — «Переносы данных».
  2. Создадим новый документ корректировки. В качестве кода документа укажем префикс ЗП_СЗО. Данный документ предназначен непосредственно для хранения сведений о времени для расчета общего среднего заработка.
  3. В табличную часть регистра внесем запись по нашему сотруднику за январь месяц.
  4. В колонках, отвечающих за календарные дни для расчета среднего, укажем корректное, рассчитанное вручную значение — 23,63 дня.
  5. Сохраним и проведем документ «Перенос данных».

При последующих расчетах среднего заработка (в документах отпусков или командировок) программа в первую очередь будет обращаться к данным этого регистра корректировки и получит верные цифры.

Важное замечание: Обратите внимание на то, что если за январь по сотруднику уже было проведено штатное начисление зарплаты (например, за отработанные дни после 14 января), система при расчетах может попытаться применить приоритеты и затереть ручные записи регистра данными из фактических начислений. Тщательно проверяйте результирующую форму расчета среднего.

Вариант решения №3: Быстрая ручная корректировка в форме расчета

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

  1. Откройте документ (например, новый «Отпуск» в текущем периоде), где рассчитывается средний заработок сотрудника.
  2. Нажмите на кнопку с изображением зеленого карандаша («Показать подробности расчета среднего заработка») рядом с полем среднедневного заработка.
  3. В открывшейся форме найдите строку за январь.
  4. Вручную скорректируйте ячейку с количеством календарных дней, введя вместо 16,07 значение 23,63.
  5. Сохраните изменения и пересчитайте документ.

Помните, что этот способ является временной мерой: при создании любого следующего документа расчета среднего для этого сотрудника операцию по ручной правке января придется повторять заново, пока этот месяц не выйдет за пределы 12-месячного расчетного периода.

Дополнительная настройка: Устранение конфликтов вытеснения начислений

При использовании документа «Периоды, оплаченные до начала эксплуатации» в связке с последующими начислениями за первый рабочий месяц часто возникает конфликт видов расчета. Программа может выдавать предупреждение: «Период оплачен и как Оклад, и как Дни, учтенные до начала эксплуатации».

Для предотвращения этой проблемы и настройки автоматического вытеснения выполним следующие действия:

  1. Перейдем в меню «Настройка» — «Начисления».
  2. Найдите ваши основные виды начислений, по которым рассчитываются сотрудники (например, Оплата по окладу, Оплата по окладу (по часам) или Оплата по часовому тарифу).
  3. Откройте карточку настройки начисления и перейдите на вкладку «Приоритет».
  4. В левой табличной части под названием «Начисления, приоритет которых выше» нажмите кнопку «Добавить».
  5. Выберите из списка видов расчета техническое начисление «Дни, учтенные до начала эксплуатации».
  6. Сохраните настройки начисления.

Эта простая настройка укажет механизму расчета времени, что технический период ввода исторических данных является приоритетным и должен безусловно вытеснять окладную часть, избавляя вас от ошибок наложения периодов при проведении документов начисления заработной платы.

← На главную