Почему в записке-расчете Т-60 удваивается или суммируется НДФЛ при исправлении отпуска в 1С:ЗУП 3.1?

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

В процессе работы с конфигурацией 1С:Зарплата и управление персоналом 3.1 расчетчики часто сталкиваются с необходимостью корректировки уже проведенных и выплаченных отпусков. Для этого в программе предусмотрен штатный механизм создания документов-исправлений. Однако при печати унифицированной формы Т-60 «Записка-расчет о предоставлении отпуска работнику» из исправленного документа может возникнуть неприятная ситуация: сумма удержанного НДФЛ в печатной форме удваивается или складывается из показателей исходного и корректирующего документов.

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

В чем проявляется проблема?

Представим стандартную рабочую ситуацию. По сотруднику был оформлен и рассчитан документ Отпуск. Спустя некоторое время (в том же или в следующем расчетном периоде) возникла необходимость скорректировать данные отпуска — например, из-за болезни сотрудника или отзыва из отпуска. Расчетчик нажимает ссылку «Исправить» в исходном документе и создает документ-исправление.

При формировании печатной формы Т-60 из последнего, актуального документа-исправления обнаруживается, что:

  1. Все начисленные суммы (вкладка «Начислено») отображаются корректно и соответствуют актуальному документу-исправлению.
  2. Прочие удержания (например, погашение займов или алименты) выводятся правильно.
  3. Сумма НДФЛ в графе удержаний оказывается завышенной. Программа берет НДФЛ из первоначального (исправленного) документа и прибавляет к нему НДФЛ из текущего документа-исправления.

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

Технический анализ проблемы: заглянем в код запроса

Для того чтобы понять природу этой ошибки, проанализируем фрагмент запроса, который система использует для формирования данных печатной формы Т-60. Разработчики применили принципиально разный подход для получения обычных удержаний и для расчета налога на доходы физических лиц (НДФЛ).

Рассмотрим первую часть запроса, отвечающую за сбор информации об удержаниях и погашении займов:


|ВЫБРАТЬ
|    Отпуск.Ссылка КАК Ссылка,
|    УдержанияОтпуска.Удержание,
|    СУММА(УдержанияОтпуска.Результат) КАК Результат
|ИЗ
|    Документ.Отпуск КАК Отпуск
|    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Отпуск.Удержания КАК УдержанияОтпуска
|    ПО Отпуск.Ссылка = УдержанияОтпуска.Ссылка
|ГДЕ
|    УдержанияОтпуска.Ссылка В(&МассивОбъектов)
|
|СГРУППИРОВАТЬ ПО
|    Отпуск.Ссылка,
|    УдержанияОтпуска.Удержание
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    ОтпускПогашениеЗаймов.Ссылка,
|    "Погашение займов",
|    ОтпускПогашениеЗаймов.ПогашениеЗайма + ОтпускПогашениеЗаймов.ПогашениеПроцентов + ОтпускПогашениеЗаймов.НалогНаМатериальнуюВыгоду
|ИЗ
|    Документ.Отпуск.ПогашениеЗаймов КАК ОтпускПогашениеЗаймов
|ГДЕ
|    ОтпускПогашениеЗаймов.Ссылка В(&МассивОбъектов)
|ИТОГИ ПО
|    Ссылка
|;

Как мы видим, в данном блоке наложено жесткое ограничение по параметру &МассивОбъектов. В этот массив передается ссылка только на тот конкретный документ, из которого пользователь инициировал печать формы Т-60. Данные собираются строго по табличным частям текущего документа-исправления, поэтому удержания выводятся корректно.

Теперь обратим внимание на второй запрос в пакете, который собирает информацию по исчисленному НДФЛ:


|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    Отпуск.Ссылка КАК Ссылка,
|    СУММА(НДФЛОтпуска.Налог) КАК Налог
|ИЗ
|    ВТЦепочкаОтпусков КАК Отпуск
|    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Отпуск.НДФЛ КАК НДФЛОтпуска
|    ПО Отпуск.ДокументЦепочки = НДФЛОтпуска.Ссылка
|
|СГРУППИРОВАТЬ ПО
|    Отпуск.Ссылка
|ИТОГИ ПО
|    Ссылка";

Проанализируем ключевое отличие этого запроса. Вместо обращения к табличной части конкретного документа через условие В(&МассивОбъектов), здесь происходит соединение со специальной временной таблицей ВТЦепочкаОтпусков.

В эту временную таблицу система предварительно помещает всю цепочку связанных документов: и самый первый (исходный) отпуск, и все последующие документы-исправления. В результате внутреннее соединение происходит по полю Отпуск.ДокументЦепочки = НДФЛОтпуска.Ссылка. Программа выбирает строки НДФЛ из всех документов, входящих в данную цепочку исправлений, а затем суммирует их функцией СУММА(НДФЛОтпуска.Налог). Именно это и приводит к некорректному сложению налога.

Влияет ли период исправления на возникновение ошибки?

Среди расчетчиков и методологов часто возникает спор: нужно ли вообще создавать документ-исправление, если корректировка отпуска происходит внутри одного и того же расчетного периода? Некоторые специалисты утверждают, что в рамках одного периода достаточно просто перезаписать и пересчитать исходный документ без ввода исправления.

Однако на практике создавать документ-исправление внутри одного периода не только можно, но в ряде случаев и необходимо (например, если первоначальный отпуск уже был выплачен и отправлен в банк, а итоговая сумма после перерасчета уменьшилась).

Кроме того, эксперименты показывают, что создание документа-исправления в следующем расчетном периоде никак не решает проблему с печатной формой Т-60. Независимо от того, в каком месяце создано исправление, виртуальная таблица ВТЦепочкаОтпусков все равно свяжет эти документы вместе, и запрос просуммирует НДФЛ по всей цепочке.

Таким образом, мы имеем дело с зарегистрированной программной ошибкой релиза. В официальном реестре ошибок фирмы 1С этот баг зарегистрирован под номером 000048292 (внутренний код 00111102).

Важное дополнение: Точно такая же ошибка долгое время присутствовала и при формировании печатной формы Т-61 «Записка-расчет при увольнении». При создании документа-исправления для увольнения сумма удержанного НДФЛ из первоначального документа суммировалась с налогом из документа-исправления по аналогичным алгоритмам сбора цепочки документов.

Варианты обхода и исправления ошибки

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

Способ 1. Ручная корректировка формы перед печатью

Самый простой и быстрый способ, не требующий привлечения программистов и изменения кода системы. Подходит в тех случаях, когда документов-исправлений в базе немного.

  1. Откройте форму Т-60 для печати из документа Отпуск.
  2. В верхней панели окна печатной формы нажмите кнопку «Редактировать» (иконка с изображением карандаша) или воспользуйтесь сочетанием клавиш Ctrl + Shift + W.
  3. Перейдите к разделу «Удержано» (обычно это графа 14 во второй части записки-расчета) и вручную введите верную сумму НДФЛ.
  4. Скорректируйте итоговую сумму к выплате с учетом правильного НДФЛ.
  5. Отправьте документ на печать или сохраните его в электронном виде.

Способ 2. Подключение внешней печатной формы

Этот способ позволяет автоматизировать процесс и избежать ручных ошибок. Мы можем скачать или разработать внешнюю печатную форму Т-60, в которой запрос по получению НДФЛ изменен. Вместо обращения к цепочке документов мы настроим получение налога напрямую из текущей ссылки.

Для исправления запроса в модуле внешней печатной формы фрагмент получения НДФЛ необходимо привести к следующему виду:


ВЫБРАТЬ
    Отпуск.Ссылка КАК Ссылка,
    СУММА(НДФЛОтпуска.Налог) КАК Налог
ИЗ
    Документ.Отпуск КАК Отпуск
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Отпуск.НДФЛ КАК НДФЛОтпуска
    ПО Отпуск.Ссылка = НДФЛОтпуска.Ссылка
ГДЕ
    Отпуск.Ссылка В(&МассивОбъектов)
СГРУППИРОВАТЬ ПО
    Отпуск.Ссылка
ИТОГИ ПО
    Ссылка

Такая внешняя печатная форма подключается через меню НСИ и администрирование -> Печатные формы, отчеты и обработки -> Дополнительные отчеты и обработки и заменяет собой стандартную кнопку печати Т-60.

Способ 3. Использование расширения конфигурации

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

В процедуре формирования запроса расширение подменяет исходный текст запроса, убирая из него обращение к ВТЦепочкаОтпусков для расчета НДФЛ и заменяя его на прямое получение данных по массиву объектов. Этот метод хорош тем, что исправление продолжит работать при последующих обновлениях конфигурации.

Способ 4. Обновление конфигурации

Поскольку ошибка официально признана фирмой 1С, разработчики исправили её в последующих релизах конфигурации 1С:ЗУП 3.1. Если у вас установлена устаревшая версия (например, релизы линейки 3.1.8, 3.1.11 или ранние сборки 3.1.14), мы рекомендуем запланировать регулярное обновление программы до актуального релиза поддержки.

В современных версиях логика работы с виртуальными таблицами цепочек исправлений переработана, и данные по НДФЛ в печатных формах Т-60 и Т-61 выводятся корректно, отражая только актуальные сведения из итоговых документов.

← На главную