При переходе со старых конфигураций (таких как «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 календарный день):
31 день (всего) - 6 дней (отпуск) = 25 дней. Далее подставляем в формулу: 29.3 * (25 / 31) = 23.63 дня.31 день (всего) - 14 дней (отсутствие) = 17 дней. Подставляем в формулу: 29.3 * (17 / 31) = 16.07 дня.Таким образом, программа ошибочно вычитает праздничные дни января из расчета среднего, занижая итоговый средний заработок сотрудника в будущем. Выясним, почему так происходит на уровне программного кода.
Для того чтобы понять, почему алгоритмы 1С допускают эту ошибку, обратимся к структуре запросов, которые система выполняет при сборе данных по среднему заработку. Основной алгоритм сбора информации опирается на анализ начислений и времени.
Программа обращается к виртуальной таблице регистра расчета Начисления.ФактическийПериодДействия. В нормальной ситуации, когда в системе зарегистрирован стандартный документ «Отпуск», этот вид расчета имеет жесткую привязку к вытесняющим видам расчетов и графику работы. Система четко определяет границы действия отпуска и «вырезает» праздничные дни, так как они не входят в фактический период действия начисления по ежегодному отпуску.
Однако в случае использования технического документа «Периоды, оплаченные до начала эксплуатации» ситуация меняется. Давайте проанализируем фрагмент поискового запроса системы, который собирает виды начислений для расчета отработанных календарных дней:
ВЫБРАТЬ
Начисления.Ссылка КАК Ссылка,
Начисления.ЗачетНормыВремени КАК ЗачетНормыВремени,
Начисления.ЗачетОтработанногоВремени КАК ЗачетОтработанногоВремени,
ЛОЖЬ КАК Прогул,
ЛОЖЬ КАК Отгул,
ЛОЖЬ КАК ЕжегодныйОтпуск
ПОМЕСТИТЬ ВТВидыНачислений
ИЗ
ПланВидовРасчета.Начисления КАК Начисления
ГДЕ
Начисления.ЗачетОтработанногоВремени
И ИСТИНА В
(ВЫБРАТЬ ПЕРВЫЕ 1
ИСТИНА
ИЗ
ПланВидовРасчета.Начисления.СреднийЗаработокОбщий КАК НастройкаСреднегоЗаработка
ГДЕ
НастройкаСреднегоЗаработка.Ссылка = Начисления.Ссылка
И НастройкаСреднегоЗаработка.Значение <> ЗНАЧЕНИЕ(Перечисление.УчетНачисленийВСреднемЗаработкеОбщий.НеВключать))
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Начисления.Ссылка,
ИСТИНА,
ЛОЖЬ,
ИСТИНА,
ЛОЖЬ,
ЛОЖЬ
ИЗ
ПланВидовРасчета.Начисления КАК Начисления
ГДЕ
Начисления.КатегорияНачисленияИлиНеоплаченногоВремени В(&КатегорииПрогула)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Начисления.Ссылка,
ИСТИНА,
ЛОЖЬ,
ЛОЖЬ,
ИСТИНА,
ЛОЖЬ
ИЗ
ПланВидовРасчета.Начисления КАК Начисления
ГДЕ
Начисления.КатегорияНачисленияИлиНеоплаченногоВремени В(&КатегорииОтгула)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Начисления.Ссылка,
ИСТИНА,
ЛОЖЬ,
ЛОЖЬ,
ЛОЖЬ,
ИСТИНА
ИЗ
ПланВидовРасчета.Начисления КАК Начисления
ГДЕ
Начисления.КатегорияНачисленияИлиНеоплаченногоВремени = ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОплатаОтпуска)
И Начисления.ВидОтпуска.ОтпускЯвляетсяЕжегодным
Проанализировав данный пакет запросов, мы видим, что система ожидает получить строго определенные виды расчетов (с категориями «ОплатаОтпуска», «ОтпускБезОплаты» и т. д.), у которых взведен признак ежегодного отпуска. На основании этих видов расчетов строится таблица фактически отработанных дней.
Техническое начисление Дни, учтенные до начала эксплуатации не подпадает ни под одну из этих категорий! Оно не является предопределенным ежегодным отпуском в понимании платформы. Соответственно, при заполнении виртуальной таблицы фактического периода действия система не сопоставляет этот период с графиком работы сотрудника и праздничными днями. Программа просто исключает весь зарегистрированный период «сплошным текстом», обнуляя календарные дни за весь промежуток с 1 по 14 января.
Рассмотрим, какими путями мы можем исправить эту системную ошибку.
Наиболее чистый, быстрый и методологически верный способ исправить проблему без написания кода и ручной правки регистров — это использование штатных документов «Отпуск». Этот метод полностью автоматизирует правильный расчет времени в последующих периодах.
Выполним процедуру исправления по шагам:
Результат: В системе будет зафиксировано полноценное кадровое состояние отпуска. Алгоритмы сбора среднего заработка увидят стандартный вид расчета «Отпуск ежегодный», обратятся к производственному календарю, успешно исключат праздничные дни с 1 по 8 января из периода вытеснения и выдадут правильный расчет календарных дней — 23,63.
Если документов перехода очень много или вы не хотите создавать «нулевые» кадровые документы, можно прибегнуть к прямому редактированию регистров накопления, хранящих информацию для расчета среднего заработка.
Многие пользователи пытаются сделать это с помощью универсального документа «Корректировка регистров», однако платформа часто блокирует прямую запись в специализированные зарплатные регистры. Для решения этой задачи нам понадобится специализированный инструмент переноса.
Выполним корректировку по шагам:
При последующих расчетах среднего заработка (в документах отпусков или командировок) программа в первую очередь будет обращаться к данным этого регистра корректировки и получит верные цифры.
Важное замечание: Обратите внимание на то, что если за январь по сотруднику уже было проведено штатное начисление зарплаты (например, за отработанные дни после 14 января), система при расчетах может попытаться применить приоритеты и затереть ручные записи регистра данными из фактических начислений. Тщательно проверяйте результирующую форму расчета среднего.
Если ситуация носит единичный характер и у вас нет времени разбираться с регистрами и перепроведением прошлых периодов, вы можете скорректировать данные «на лету»:
Помните, что этот способ является временной мерой: при создании любого следующего документа расчета среднего для этого сотрудника операцию по ручной правке января придется повторять заново, пока этот месяц не выйдет за пределы 12-месячного расчетного периода.
При использовании документа «Периоды, оплаченные до начала эксплуатации» в связке с последующими начислениями за первый рабочий месяц часто возникает конфликт видов расчета. Программа может выдавать предупреждение: «Период оплачен и как Оклад, и как Дни, учтенные до начала эксплуатации».
Для предотвращения этой проблемы и настройки автоматического вытеснения выполним следующие действия:
Оплата по окладу, Оплата по окладу (по часам) или Оплата по часовому тарифу).Эта простая настройка укажет механизму расчета времени, что технический период ввода исторических данных является приоритетным и должен безусловно вытеснять окладную часть, избавляя вас от ошибок наложения периодов при проведении документов начисления заработной платы.