В процессе работы с программой 1С:Зарплата и Управление Персоналом (ЗУП 3.1) бухгалтеры и специалисты по расчету зарплаты часто сталкиваются с ситуацией, когда необходимо внести изменения в уже начисленный отпуск. Типовой механизм предполагает создание «исправляющего» документа. Однако при использовании настройки «Предоставляется единовременная выплата к отпуску» внутри документа Отпуск может возникнуть техническая ошибка: при создании цепочки исправлений период регистрации стимулирующей выплаты «перескакивает» на месяц назад, что неоправданно увеличивает базу для расчета среднего заработка в будущем.
В этой статье мы подробно разберем причины возникновения данной ошибки, проанализируем поведение регистров и рассмотрим несколько способов решения — от программного исправления кода до изменения методики ведения учета.
Рассмотрим ситуацию: в июне сотруднику начисляется отпуск на июль. После закрытия июня создается первый документ исправления (в июле), где добавляется стимулирующая выплата. Затем, из-за появления больничного листа, создается второе исправление отпуска (также в июле). В этот момент программа ошибочно относит доход стимулирующей выплаты к июню вместо июля.
Проанализируем причину такого поведения. Основная сложность заключается в работе механизма предварительных движений по регистру накопления ДанныеДляРасчетаСреднегоЗаработкаОбщий. Когда документ исправления создается в том же расчетном периоде, что и исправляемый документ, таблица Перерасчет начислений часто остается пустой. Алгоритмы 1С при формировании движений по среднему заработку начинают некорректно определять «первичный» документ в цепочке, из-за чего данные «улетают» в период регистрации исходного документа.
Если ваша организация не может отказаться от использования «галочки» стимулирующей выплаты внутри отпуска, потребуется внести изменения в модуль объекта документа Отпуск. Выясним причину ошибки: типовая функция поиска первого документа в цепочке исправлений не всегда корректно учитывает специфику стимулирующих выплат, которые «привязаны» к документу-хозяину.
Рассмотрим предложенный вариант исправления. Нам необходимо подправить процедуру ДополнитьНачисленияВыплачиваемыеКОтпуску. Основная идея заключается в создании собственной функции для поиска корректного «предка» в цепочке документов именно для целей стимулирующей выплаты.
Ниже представлен пример кода, который необходимо внедрить в модуль объекта:
// В процедуре ДополнитьНачисленияВыплачиваемыеКОтпуску находим блок работы с исправлениями
Если ИсправлениеРасчетовБЗККлиентСервер.ЭтоИсправление(ПараметрыИсправленногоДокумента)
И (ПредоставляетсяЕдиновременнаяВыплатаКОтпуску Или ЭтотОбъект.ПредоставитьМатериальнуюПомощьПриОтпуске) Тогда
РеквизитыИсправленного = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПараметрыИсправленногоДокумента.Ссылка,
"ПредоставитьЕдиновременнуюВыплатуКОтпуску, ВидРасчетаЕдиновременнойВыплатыКОтпуску, ПредоставитьМатериальнуюПомощьПриОтпуске");
// Вместо типового поиска используем модифицированную функцию
ПервичныйДокумент = ПервыйДокументЦепочкиИсправленийСтимулирующейВыплаты(ПараметрыИсправленногоДокумента.Ссылка);
КонецЕсли;
Сама функция ПервыйДокументЦепочкиИсправленийСтимулирующейВыплаты должна выглядеть следующим образом:
Функция ПервыйДокументЦепочкиИсправленийСтимулирующейВыплаты(ИсходныйДокумент) Экспорт
ЕстьНачислениеЕдиновременнойСтимВыплаты = Ложь;
ИсправленныйДокумент = ИсходныйДокумент;
ЦепочкаИсправлений = Новый Массив;
Пока Истина Цикл
ТекущийИсправленныйДокумент = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ИсправленныйДокумент, "ИсправленныйДокумент");
Если ЗначениеЗаполнено(ТекущийИсправленныйДокумент) Тогда
ЕстьНачислениеЕдиновременнойСтимВыплаты = ТекущийИсправленныйДокумент.ПредоставитьЕдиновременнуюВыплатуКОтпуску;
КонецЕсли;
Если ЗначениеЗаполнено(ТекущийИсправленныйДокумент)
И ЦепочкаИсправлений.Найти(ТекущийИсправленныйДокумент) = Неопределено
И ЕстьНачислениеЕдиновременнойСтимВыплаты Тогда
ЦепочкаИсправлений.Добавить(ТекущийИсправленныйДокумент);
ИсправленныйДокумент = ТекущийИсправленныйДокумент;
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
Возврат ИсправленныйДокумент;
КонецФункции
Эта доработка заставляет программу «остановиться» на том документе исправления, где стимулирующая выплата была введена впервые, и не дает ей провалиться в первичный июньский документ, который еще не содержал этой выплаты.
Разберем ситуацию с точки зрения методологии учета. Использование «галочки» внутри документа отпуска — это удобный, но очень жесткий механизм. Стимулирующая выплата становится частью расчета отпуска и полностью наследует его судьбу. Если в цепочке исправлений возникают сбои, лучшим решением будет вынос выплаты за пределы документа Отпуск.
Материальная помощь или Разовое начисление.Посмотрим на проблему под другим углом. Почему возникают множественные исправления внутри одного и того же месяца? Согласно логике разработчиков 1С, если текущий период (июль) еще не закрыт, создание цепочки исправлений («исправление на исправление») является избыточным и потенциально опасным для учета НДФЛ и среднего заработка.
Проанализируем рекомендации экспертов:
Проанализируем предупреждение техподдержки 1С: «Нельзя июлем регистрировать документы, а после регистрировать июнь — ломается учет НДФЛ». Это связано с тем, что отпускные должны быть выплачены за 3 дня до начала отпуска. Если отпуск начинается 1 июля, выплата должна пройти в июне. Таким образом, доход для НДФЛ относится к июню. Любое последующее исправление этого документа в июле порождает сторно дохода июня и начисление дохода июля. При многократных повторениях этой процедуры в одном месяце, 6-НДФЛ может сформироваться некорректно.
Резюме: Для стабильной работы программы рекомендуется либо использовать программное исправление поиска документов в цепочке, либо (что более предпочтительно) выносить стимулирующие выплаты в отдельные документы, не связанные жестко с механизмом исправления отпусков.