Как программно обнулить сумму НДФЛ в базе удержания документа «Начисление зарплаты и взносов»?

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

При работе с конфигурацией 1С:Зарплата и управление персоналом 3.1 программисты часто сталкиваются с необходимостью тонкой настройки расчетов, которые не предусмотрены типовым функционалом «из коробки». Одной из таких специфических задач является исключение НДФЛ из базы расчета удержаний, особенно когда речь идет об исполнительных листах по исправительным работам. Согласно законодательству (ст. 40 УИК РФ), такие удержания должны производиться из всей суммы заработка без вычета налогов. Однако в системе для договорников ГПХ алгоритм может срабатывать иначе, автоматически вычитая НДФЛ.

В этой статье мы подробно разберем, как программно вмешаться в структуру документа НачислениеЗарплатыИВзносов, почему обычное обнуление показателей не дает результата и как правильно использовать внутренние механизмы связи табличных частей.

Анализируем проблему: почему НДФЛ «возвращается»?

Рассмотрим ситуацию: вы пытаетесь программно изменить значение в табличной части Показатели или Удержания. На первый взгляд, достаточно найти нужную строку и присвоить ей нулевое значение. Однако при попытке проведения документа или любом интерактивном действии пользователя система восстанавливает исходные данные. Это происходит потому, что в ЗУП 3.1 реализована сложная система взаимосвязей между различными табличными частями документа.

Проанализируем основные причины неудачи при «простом» подходе:

  1. Автоматический пересчет: Документ обладает встроенными механизмами, которые инициируют пересчет зависимых сумм при изменении ключевых реквизитов.
  2. Кэширование данных: В объекте документа могут храниться промежуточные результаты расчета, которые не обновляются при прямой записи в коллекции табличных частей.
  3. Скрытые связи: Суммы удержаний распределяются по аналитике и источникам финансирования в отдельных таблицах, о которых часто забывают разработчики.

Техническая структура документа и роль «Идентификатора строки»

Чтобы успешно подавить НДФЛ программно, нам нужно понимать архитектуру данных документа НачислениеЗарплатыИВзносов. Ключевым звеном здесь выступает реквизит ИдентификаторСтроки. Это уникальное числовое значение, которое связывает записи в следующих табличных частях:

Если мы обнуляем показатель НДФЛ в одной таблице, но оставляем связанные записи в РаспределениеУдержаний, система обнаруживает логическое противоречие и пытается восстановить целостность данных, возвращая НДФЛ в расчет.

Решение 1: Программная корректировка через обход табличных частей

Рассмотрим алгоритм, который необходимо реализовать, например, в расширении или внешней обработке. Наша задача — найти строку удержания, определить её ИдентификаторСтроки и «зачистить» все упоминания НДФЛ, связанные с этим идентификатором.

Выясним последовательность действий на примере кода:


// Предположим, мы находимся в модуле документа или обработки
Для Каждого СтрокаУдержания Из Объект.Удержания Цикл
    
    // Проверяем, что это нужное нам удержание (например, по ГПХ или исправительным работам)
    Если СтрокаУдержания.Удержание = НужноеУдержание Тогда
        
        ТекущийИдентификатор = СтрокаУдержания.ИдентификаторСтроки;
        
        // 1. Обнуляем показатель НДФЛ в ТЧ Показатели
        ПараметрыОтбора = Новый Структура("ИдентификаторСтроки", ТекущийИдентификатор);
        НайденныеПоказатели = Объект.Показатели.НайтиСтроки(ПараметрыОтбора);
        
        Для Каждого СтрокаПоказатель Из НайденныеПоказатели Цикл
            // Проверяем имя показателя. В ЗУП это обычно "НДФЛ" или "Налог"
            Если СтрокаПоказатель.Показатель.Имя = "НДФЛ" Тогда
                СтрокаПоказатель.Значение = 0;
            КонецЕсли;
        КонецЦикла;
        
        // 2. Очищаем распределение, связанное с этим удержанием
        СтрокиРаспределения = Объект.РаспределениеУдержаний.НайтиСтроки(ПараметрыОтбора);
        Для Каждого СтрокаРаспределения Из СтрокиРаспределения Цикл
            // Здесь может потребоваться либо обнуление суммы, либо удаление строки
            СтрокаРаспределения.Сумма = 0; 
        КонецЦикла;
        
        // 3. Пересчитываем итоговую сумму в строке удержания
        // В зависимости от логики, возможно, придется вызвать типовой механизм расчета
    КонецЕсли;
    
КонецЦикла;

Важный нюанс: Простого обнуления в коде может быть недостаточно, если документ открыт в форме. После программного изменения коллекций необходимо оповестить форму о том, что данные изменились, чтобы сработали стандартные обработчики ПриИзменении.

Решение 2: Методологический подход (Настройка начисления)

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

Разберем этот путь по шагам:

  1. Перейдем в раздел Настройка — Удержания.
  2. Найдем вид удержания «Удержание по исполнительному документу» (или создадим копию специально для исправительных работ).
  3. На закладке Расчет базы обратим внимание на флаг «Является удержанием по исполнительному документу». Именно этот флаг заставляет систему искать НДФЛ для вычета.
  4. Если для договорников ГПХ типовой механизм не срабатывает (например, вознаграждение ГПХ не попадает в категорию оплаты труда), попробуем изменить формулу. Вместо стандартного алгоритма можно использовать формулу: РасчетнаяБаза * ПроцентУдержания / 100, где РасчетнаяБаза будет включать начисления ГПХ, а вычет НДФЛ не будет прописан явно.

Особенности работы с договорниками (ГПХ)

Выясним причину, почему именно с договорниками возникают сложности. В ЗУП расчет НДФЛ по договорам ГПХ часто происходит в момент выплаты или фиксируется документом Договор (работы, услуги) / Акт приемки-сдачи выполненных работ.

Если вы пытаетесь обнулить НДФЛ в документе Начисление зарплаты и взносов, убедитесь, что:

Где лучше разместить программный код?

Посмотрим на рекомендации по размещению кастомного кода. Использование процедуры ОбработкаПроведения в модуле документа — не самый лучший вариант. Если вы обнулите данные там, пользователь увидит в экранной форме одни цифры (с НДФЛ), а в регистрах и печатных формах — другие (без НДФЛ). Это приведет к путанице и вопросам со стороны бухгалтерии.

Рекомендуется использовать следующие точки входа:

Итоги

Проанализировав структуру документа НачислениеЗарплатыИВзносов, мы пришли к выводу, что для успешного подавления НДФЛ в удержаниях необходимо соблюдать целостность данных между Удержаниями, Показателями и РаспределениемУдержаний. Использование ИдентификатораСтроки является обязательным условием для корректной работы алгоритма. Тем не менее, всегда стоит начинать с проверки настроек расчетной базы в интерфейсе программы, так как это обеспечит более стабильную работу системы при обновлениях конфигурации.

← На главную