В конце 2023 года многие пользователи столкнулись со специфической проблемой в программе 1С:Зарплата и Управление Персоналом (релиз 3.1.27.129 и аналогичные). При попытке сформировать документы для подачи уведомлений по НДФЛ за декабрь, система предлагала странные интервалы: либо короткий промежуточный период, либо один огромный период с 23 ноября по 31 декабря. Это вызывало сложности, так как согласно законодательству (Федеральный закон № 539-ФЗ), в декабре 2023 года необходимо было отчитаться по двум обязательным срокам. Разберем подробно, почему так происходит, как работает программный код и как можно скорректировать ситуацию.
Прежде чем переходить к программному коду, проанализируем ситуацию с точки зрения методологии. В 2023 году действовал переходный порядок. До декабря мы подавали одно уведомление в месяц (за период с 23-го числа предыдущего месяца по 22-е число текущего). Однако именно для декабря 2023 года были введены особые правила:
Проблема заключалась в том, что в типовых конфигурациях 1С на определенном этапе разработки логика документа Отражение удержанного НДФЛ в бухучете еще не была полностью адаптирована под эти изменения, или предполагалось, что разделение сумм произойдет на стороне бухгалтерской программы (БП 3.0).
Рассмотрим программную логику, которая управляет заполнением периодов в документе. Основная работа происходит в функции ПериодыЗаполнения. Посмотрим на фрагмент кода, который вызвал вопросы у разработчиков:
Функция ПериодыЗаполнения(Период, ДатаДокумента, ПередаватьЧастичныеУведомленийПоНДФЛ) Экспорт
ПериодыЗаполнения = Новый Структура("ДатаНачала,ДатаОкончания");
ЧастичноеУведомление = (ПередаватьЧастичныеУведомленийПоНДФЛ И Месяц(Период) = Месяц(ДатаДокумента) И День(ДатаДокумента) <= 12);
Если Период < Дата(2023,1,1) Тогда
ПериодыЗаполнения.ДатаНачала = НачалоМесяца(Период);
ПериодыЗаполнения.ДатаОкончания = КонецМесяца(Период);
Иначе
НомерГода = Год(Период);
НомерМесяца = Месяц(Период);
Если НомерМесяца = 1 Тогда
ПериодыЗаполнения.ДатаНачала = Дата(НомерГода,НомерМесяца,1);
ПериодыЗаполнения.ДатаОкончания = Дата(НомерГода,НомерМесяца,22);
ИначеЕсли НомерМесяца = 12 Тогда
ПериодыЗаполнения.ДатаНачала = Дата(НомерГода,НомерМесяца-1,23);
Если ЧастичноеУведомление Тогда
ПериодыЗаполнения.ДатаОкончания = Дата(НомерГода,НомерМесяца,9);
Иначе
ПериодыЗаполнения.ДатаОкончания = Дата(НомерГода,НомерМесяца,31);
КонецЕсли;
Иначе
// Логика для остальных месяцев
ПериодыЗаполнения.ДатаНачала = Дата(НомерГода,НомерМесяца-1,23);
Если ЧастичноеУведомление Тогда
ПериодыЗаполнения.ДатаОкончания = Дата(НомерГода,НомерМесяца,9);
Иначе
ПериодыЗаполнения.ДатаОкончания = Дата(НомерГода,НомерМесяца,22);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат ПериодыЗаполнения;
КонецФункции
Проанализируем этот код. Мы видим, что для декабря (НомерМесяца = 12) программа жестко устанавливает дату начала периода как 23 ноября (Дата(НомерГода,НомерМесяца-1,23)). При этом дата окончания зависит от того, считается ли уведомление "частичным" (до 12-го числа месяца). Если дата документа больше 12-го декабря, программа безусловно ставит дату окончания 31 декабря. Именно поэтому у пользователя не получается штатно "отсечь" период с 23 по 31 декабря в отдельный документ — программа всегда захватывает хвост ноября.
Если вам необходимо принудительно разделить эти периоды в ЗУП для корректной синхронизации с бухгалтерской программой, можно внести изменения в логику выбора дат. Основная задача — заставить систему увидеть период с 23 по 31 декабря как самостоятельный. Выясним, как это сделать на примере предложенной правки:
// Вместо стандартного условия для декабря:
ИначеЕсли НомерМесяца = 12 И День(ДатаДокумента) > 25 Тогда
// Устанавливаем начало периода с 23 декабря
ПериодыЗаполнения.ДатаНачала = Дата(НомерГода, НомерМесяца, 23);
// Устанавливаем окончание периода концом года
ПериодыЗаполнения.ДатаОкончания = Дата(НомерГода, НомерМесяца, 31);
Разберем, что дает эта правка. Мы вводим дополнительную проверку на День(ДатаДокумента). Если бухгалтер создает документ в самом конце года (после 25 декабря), система понимает, что это второе, итоговое уведомление, и автоматически ограничивает выборку данных только последней неделей декабря. Это позволяет избежать дублирования данных, которые уже ушли в первое уведомление (за период по 22.12).
Важно понимать, как эти данные ведут себя при синхронизации. В 2023 году механизм работал следующим образом: документ Отражение удержанного НДФЛ из ЗУП перегружается в БП. На его основании в БП создается документ Сведения об удержанном НДФЛ. Если в ЗУП период был указан сплошным (с 23.11 по 31.12), то и в БП сумма придет общим итогом.
Чтобы в 1С:Бухгалтерии уведомление заполнилось корректно по двум срокам, система должна уметь распределять общую сумму из "Сведений" по разным датам удержания. Если типовой механизм БП не справляется с распределением общей суммы, то именно разделение документов в ЗУП (путем вышеуказанной правки или ручной корректировки дат в документе, если это позволяет интерфейс) становится единственным выходом.
Стоит отметить, почему разработчики 1С изначально могли оставить такой "широкий" период. В форме 6-НДФЛ за 2023 год еще не было разделения на два периода внутри одного месяца в том виде, в котором это появилось в 2024 году. Существовал "четвертый срок" уплаты, но структура отчета позволяла аккумулировать данные. Однако для оперативного учета на Едином налоговом счете (ЕНС) разделение уведомлений было критически важным для корректного зачета авансов.
Выяснив причину такого поведения программы, мы можем сделать следующие выводы:
Отражение... для двух уведомлений.ПериодыЗаполнения, смещая ДатаНачала на 23 декабря.Если вы столкнулись с подобной ситуацией в старых базах, рекомендуем проверить актуальность релиза и, при необходимости, применить точечную правку кода или воспользоваться ручной корректировкой сумм в документе Отражение удержанного НДФЛ перед выполнением синхронизации.