Как в ЗУП 3.1 настроить расчет справки для пособия по безработице согласно Приказу 57н и нужно ли учитывать индексацию?

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

При формировании справки для пособия по безработице в программе "1С:Зарплата и Управление Персоналом 3.1" у пользователей и бухгалтеров часто возникают два основных вопроса: почему не учитывается индексация заработка (как это делается для отпускных) и почему программа выбирает "не те" месяцы для расчетного периода. Рассмотрим детально законодательную базу и программные алгоритмы решения этой задачи.

Вопрос 1: Должна ли учитываться индексация?

Часто бухгалтеры требуют, чтобы в справке для службы занятости (ЦЗН) учитывался коэффициент индексации, ссылаясь на аналогию с расчетом среднего заработка для отпускных или выходных пособий. Разберем, почему это требование ошибочно.

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

  1. Для отпускных и выходных пособий (от работодателя): Постановление Правительства РФ № 922. Здесь индексация обязательна.
  2. Для пособия по безработице (от государства): Приказ Минтруда России от 13.02.2024 № 57н (ранее Постановление № 1026, еще ранее № 62).

В текущем Приказе № 57н отсутствуют требования об учете коэффициентов индексации при повышении окладов в организации. Пособие по безработице выплачивается из бюджета, и государство не берет на себя обязательства увеличивать выплаты на основании внутренней индексации конкретного работодателя. Поэтому типовое поведение 1С:ЗУП, игнорирующее индексацию в данной справке, является корректным с точки зрения законодательства.

Вопрос 2: Определение расчетного периода

Более сложная проблема связана с алгоритмом выбора трех месяцев для расчета. Согласно п. 1 и п. 2 Приказа № 57н, средний заработок исчисляется за три календарных месяца, предшествующих календарному месяцу перед месяцем увольнения.

Пример: Сотрудник увольняется в июне.
Месяц увольнения — Июнь.
Месяц перед месяцем увольнения — Май.
Расчетный период — Февраль, Март, Апрель.

Однако пользователи замечают, что ЗУП иногда берет другие периоды, выбирая месяцы с максимальным доходом, что вызывает вопросы у проверяющих.

Анализ алгоритма в 1С:ЗУП

Проанализируем программный код. Расчет выполняется в общем модуле КадровыйУчетРасширенный. В типовом механизме реализована логика перебора трехмесячных интервалов внутри 12 месяцев. Программа пытается найти такой трехмесячный отрезок, где сумма заработка будет максимальной.

В функции СреднийЗаработокСотрудников происходит цикл:


// Упрощенная схема типового алгоритма
Для Каждого Отрезок В Интервал12Месяцев Цикл
    Если СуммаЗаработкаОтрезка >= ТекущийМаксимум Тогда
        ТекущийМаксимум = СуммаЗаработкаОтрезка;
        ЗафиксироватьПериод();
    КонецЕсли;
КонецЦикла;

Такой подход (поиск максимума) не всегда соответствует буквальному прочтению Приказа 57н, который предписывает брать конкретные месяцы, если они не являются "пустыми" (состоящими из исключаемых периодов). Если у вас возникла необходимость строго зафиксировать алгоритм выбора периода (сначала строго 3 месяца по приказу, если пусто — сдвиг назад), нам потребуется доработка через расширение.

Программное решение: Корректировка выбора периода

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

Логика следующая:

  1. Берем строго месяцы с 9-го по 11-й из переданного массива данных (это соответствует 3 месяцам перед месяцем, предшествующим увольнению).
  2. Если данных нет (сумма или время равны 0), берем предыдущий блок (месяцы 6-8).
  3. Если и там пусто — берем данные за 12-й месяц (редкий случай, предусмотренный правилами).

Пример реализации функции для расширения:


&Вместо("СреднийЗаработокСотрудников")
Функция Расш_СреднийЗаработокСотрудников(ДанныеОЗаработкеСотрудников)
    
    ДанныеСреднегоЗаработка = Новый Соответствие;
    
    Для Каждого ДанныеСотрудника Из ДанныеОЗаработкеСотрудников Цикл
        
        ДанныеПериодаСотрудника = Новый Структура("Сумма,Время,НачалоПериода,ОкончаниеПериода",
            0, 0, '00010101', '00010101'); 
            
        КоличествоМесяцев = ДанныеСотрудника.Значение.Количество();
        
        // Индексы для основного периода (Февраль-Апрель при увольнении в Июне)
        // Массив данных обычно содержит 12 месяцев, последний - это месяц перед увольнением
        Инд9  = КоличествоМесяцев - 4; 
        Инд10 = КоличествоМесяцев - 3; 
        Инд11 = КоличествоМесяцев - 2;
        
        // Попытка 1: Основной период
        Если Инд9 >= 0 Тогда
             СуммаПериода = ДанныеСотрудника.Значение[Инд9].Сумма + 
                            ДанныеСотрудника.Значение[Инд10].Сумма + 
                            ДанныеСотрудника.Значение[Инд11].Сумма;
                            
             ВремяПериода = ДанныеСотрудника.Значение[Инд9].Время + 
                            ДанныеСотрудника.Значение[Инд10].Время + 
                            ДанныеСотрудника.Значение[Инд11].Время;
                            
             Если СуммаПериода > 0 Или ВремяПериода > 0 Тогда
                 ДанныеПериодаСотрудника.Сумма = СуммаПериода;
                 ДанныеПериодаСотрудника.Время = ВремяПериода;
                 ДанныеПериодаСотрудника.НачалоПериода = ДанныеСотрудника.Значение[Инд9].НачалоПериода;
                 ДанныеПериодаСотрудника.ОкончаниеПериода = ДанныеСотрудника.Значение[Инд11].ОкончаниеПериода;
             КонецЕсли;
        КонецЕсли;

        // Попытка 2: Сдвиг назад на 3 месяца (если в первом периоде нули)
        Если (ДанныеПериодаСотрудника.Сумма = 0) И (ДанныеПериодаСотрудника.Время = 0) Тогда 
            Инд6 = КоличествоМесяцев - 7;
            Инд7 = КоличествоМесяцев - 6;
            Инд8 = КоличествоМесяцев - 5;
            
            Если Инд6 >= 0 Тогда
                СуммаПериода = ДанныеСотрудника.Значение[Инд6].Сумма + 
                               ДанныеСотрудника.Значение[Инд7].Сумма + 
                               ДанныеСотрудника.Значение[Инд8].Сумма;
                               
                ВремяПериода = ДанныеСотрудника.Значение[Инд6].Время + 
                               ДанныеСотрудника.Значение[Инд7].Время + 
                               ДанныеСотрудника.Значение[Инд8].Время; 
                
                Если СуммаПериода > 0 Или ВремяПериода > 0 Тогда
                    ДанныеПериодаСотрудника.Сумма = СуммаПериода;
                    ДанныеПериодаСотрудника.Время = ВремяПериода;  
                    ДанныеПериодаСотрудника.НачалоПериода = ДанныеСотрудника.Значение[Инд6].НачалоПериода; 
                    ДанныеПериодаСотрудника.ОкончаниеПериода = ДанныеСотрудника.Значение[Инд8].ОкончаниеПериода;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;

        // Сохраняем результат
        ДанныеСреднегоЗаработка.Вставить(ДанныеСотрудника.Ключ, ДанныеПериодаСотрудника);
        
    КонецЦикла;    
    
    Возврат ДанныеСреднегоЗаработка;    
КонецФункции

Важное дополнение: Подготовка данных

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

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


// Типовой код может выглядеть так:
ДатаНачалаПериода = Макс(ДанныеСотрудника.ДатаПриема, ДобавитьМесяц(ДатаОкончанияПериода, - 12));

Если сотрудник работает меньше года, массив будет короче 12 элементов, и индексы в нашем новом алгоритме могут "поплыть". Чтобы этого избежать, изменим определение начала периода, чтобы всегда захватывать год для анализа (даже если там будут нули до приема):


// Изменение в функции СведенияОСреднемЗаработкеДляСправкиПоБезработицеС2023
ДатаНачалаПериода = ДобавитьМесяц(ДатаОкончанияПериода, - 12);

Это обеспечит фиксированную длину массива данных, что упростит работу алгоритма по выбору конкретных месяцев по их индексам.

Альтернативный подход: Персонифицированные сведения

Стоит также учитывать, что с переходом на цифровое взаимодействие, Центры занятости получают данные о доходах граждан напрямую из ФНС (на основании отчета "Персонифицированные сведения о физлицах") и СФР. В большинстве случаев справка от работодателя требуется только в исключительных ситуациях (например, длительный отпуск без сохранения зарплаты, декрет).

Алгоритм расчета ЦЗН может отличаться от алгоритма ЗУП тем, что ЦЗН оперирует суммами выплат за календарные месяцы и делит их на количество месяцев, не имея точных данных об отработанных днях внутри месяца (кроме периодов болезни). Если вам часто приходится сталкиваться с расхождениями, имеет смысл создать внешний отчет-калькулятор, который будет моделировать расчет ЦЗН:

  1. Брать данные из регистров, соответствующих отчету "Персонифицированные сведения".
  2. Исключать месяцы с больничными (по данным регистра состояний).
  3. Считать среднее арифметическое доходов за "чистые" месяцы расчетного периода.

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

← На главную