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