Как в 1С:ЗУП 3.1 заполнить документ «Отражение зарплаты» по подразделению, чтобы НДФЛ не попадал целиком в один документ?

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

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

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

Выясним причину: почему типовой алгоритм игнорирует подразделение для НДФЛ

Проанализируем архитектуру системы. В программе 1С:ЗУП учет НДФЛ ведется в разрезе физических лиц и Регистраций в налоговом органе (ИФНС). Подразделение как самостоятельный разрез учета для налога в регистрах накопления долгое время отсутствовало или имело вторичное значение.

Когда мы нажимаем кнопку «Заполнить» в документе отражения с выбранным подразделением в шапке, программа действует следующим образом:

  1. Отбирает всех сотрудников, у которых в текущем периоде были начисления по данному подразделению (табличная часть НачисленнаяЗарплатаИВзносы).
  2. Собирает весь исчисленный НДФЛ по этим физическим лицам за месяц.
  3. Фильтрует этот налог только по Регистрации в налоговом органе, которая соответствует выбранному в шапке подразделению.

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

Способ 1: Использование механизма «Территорий» (без программирования)

Прежде чем приступать к коду, рассмотрим стандартный функционал. В последних версиях ЗУП 3.1 (начиная с 3.1.18) разработчики улучшили детализацию учета. Если в настройках организации включено использование Территорий (раздел Настройка — Предприятие — Организации — вкладка Основные сведения), система начинает регистрировать доходы и налоги в разрезе «Мест работы».

Рассмотрим порядок действий:

  1. Включим флаг Использовать территории в настройках.
  2. Создадим справочник Территории, дублирующий структуру подразделений (или соответствующих обособленных зон).
  3. Привяжем сотрудников к территориям через кадровые документы.

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

Способ 2: Программная фильтрация строк через расширение

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

Проанализируем модуль формы документа ОтражениеЗарплатыВБухучете. Основная логика завершается в процедуре ЗаполнитьНаСервереЗавершение. Именно здесь, когда все данные уже получены из регистров и помещены в объект, мы можем применить наш фильтр.

Рассмотрим пример кода для расширения (используем аннотацию &После):


&НаСервере
&После("ЗаполнитьНаСервереЗавершение")
Процедура ИТ_ЗаполнитьНаСервереЗавершениеПосле(Результат, Параметры)
    
    // Проверяем, заполнено ли подразделение в шапке документа
    Если ЗначениеЗаполнено(Объект.Подразделение) И ЗначениеЗаполнено(Объект.Подразделение.РегистрацияВНалоговомОргане) Тогда
        
        РегистрацияШапки = Объект.Подразделение.РегистрацияВНалоговомОргане;
        
        // Используем обратный цикл для корректного удаления строк из коллекции
        КоличествоСтрок = Объект.НачисленныйНДФЛ.Количество();
        Для Индекс = 1 По КоличествоСтрок Цикл
            ОбратныйИндекс = КоличествоСтрок - Индекс;
            ТекущаяСтрока = Объект.НачисленныйНДФЛ[ОбратныйИндекс];
            
            // Если регистрация в строке не совпадает с регистрацией подразделения шапки - удаляем
            Если ТекущаяСтрока.РегистрацияВНалоговомОргане <> РегистрацияШапки Тогда
                Объект.НачисленныйНДФЛ.Удалить(ОбратныйИндекс);
            КонецЕсли;
        КонецЦикла;
        
    КонецЕсли;
    
КонецПроцедуры

Важный нюанс: Обратите внимание на использование обратного цикла (Для Индекс = 1 По КоличествоСтрок... с вычитанием индекса). Если удалять строки в прямом цикле, индексы оставшихся строк сместятся, и программа пропустит часть данных или вызовет ошибку обращения к коллекции.

Способ 3: Глубокая доработка в общем модуле

Для тех, кто хочет более фундаментального решения, проанализируем общий модуль ОтражениеРасчетовЗарплатыВБухучете, метод ОтобратьРезультатыЗаполненияТаблицДокумента. Именно здесь формируются запросы к базе данных.

Логика типового фильтра по подразделению в этом методе следующая:

  1. Получаются все подразделения в иерархии того, что указано в документе.
  2. Фильтруются начисления.
  3. Из начислений выковыриваются Различные Физлица.
  4. Таблица НДФЛ заполняется по этим физлицам без учета подразделения.

Для исправления можно переписать запрос так, чтобы он учитывал связь между физлицом, его регистрацией в ИФНС и подразделением начисления. Однако это требует значительных трудозатрат и тестирования на больших объемах данных, поэтому способ с фильтрацией в форме (Способ 2) является более предпочтительным и безопасным.

Важные замечания и риски

Рассмотрим критические моменты, которые нужно учитывать при реализации подобных доработок:

  1. Контрольный документ: Если вы программно «отрезаете» НДФЛ в документах по подразделениям, всегда есть риск, что какой-то налог останется «неотраженным» (например, из-за сложных перерасчетов). Рекомендуем в конце месяца создавать финальный документ Отражение зарплаты в бухучете с пустым подразделением в шапке. Он соберет все остатки, которые не попали в частные документы.
  2. Округление: НДФЛ в 1С рассчитывается в целых рублях по сотруднику. При распределении его между подразделениями могут возникать погрешности. Типовой механизм старается их минимизировать, привязываясь к ИФНС.
  3. Синхронизация: Если данные выгружаются в 1С:УПП или 1С:Бухгалтерия КОРП, проверьте настройки субконто на счете 68.01. Если там включен учет по подразделениям, ваша доработка станет спасением для бухгалтера, избавив его от ручной правки проводок.

Подведем итог: задача разделения НДФЛ по подразделениям решаема. Мы рекомендуем начать с проверки настройки Территорий, а если это не помогает — внедрить небольшое расширение с фильтрацией табличной части по РегистрацииВНалоговомОргане. Это обеспечит чистоту данных и корректность проводок при обмене между базами.

← На главную