При работе в 1С:Зарплата и управление персоналом 3.1 (ЗУП) пользователи часто сталкиваются с ситуацией, когда при заполнении документа Отражение зарплаты в бухучете с установленным отбором по конкретному подразделению, начисления распределяются верно, а весь НДФЛ сотрудника «прилетает» в первый же созданный документ. Это создает серьезные трудности при выгрузке данных в учетные системы (например, 1С:УПП или 1С:ERP), где требуется жесткая аналитика по подразделениям на счетах 70 и 68.01.
В данной статье мы подробно проанализируем, почему типовой механизм ведет себя именно так, и разберем пошагово способы решения этой задачи — от настройки программы до программной доработки через расширение.
Проанализируем архитектуру системы. В программе 1С:ЗУП учет НДФЛ ведется в разрезе физических лиц и Регистраций в налоговом органе (ИФНС). Подразделение как самостоятельный разрез учета для налога в регистрах накопления долгое время отсутствовало или имело вторичное значение.
Когда мы нажимаем кнопку «Заполнить» в документе отражения с выбранным подразделением в шапке, программа действует следующим образом:
НачисленнаяЗарплатаИВзносы).Проблема: Если сотрудник работал в двух подразделениях (например, по внутреннему совместительству), и оба этих подразделения относятся к одной и той же ИФНС, типовой алгоритм не может «разрезать» сумму НДФЛ. Он видит одну регистрацию в налоговой и одну общую сумму налога по физлицу, которую и помещает в первый попавшийся документ отражения.
Прежде чем приступать к коду, рассмотрим стандартный функционал. В последних версиях ЗУП 3.1 (начиная с 3.1.18) разработчики улучшили детализацию учета. Если в настройках организации включено использование Территорий (раздел Настройка — Предприятие — Организации — вкладка Основные сведения), система начинает регистрировать доходы и налоги в разрезе «Мест работы».
Рассмотрим порядок действий:
Использовать территории в настройках.Территории, дублирующий структуру подразделений (или соответствующих обособленных зон).В этом случае при заполнении отражения программа будет опираться на более детальные данные регистров Расчеты налогоплательщиков с бюджетом по НДФЛ, где появится информация о месте работы, что позволит корректно разделить налог даже при одной ИФНС.
Если методика с территориями не подходит, разберем программный способ. Нам нужно «вклиниться» в процесс заполнения документа и принудительно удалять строки НДФЛ, которые не соответствуют налоговой регистрации подразделения, указанного в шапке.
Проанализируем модуль формы документа ОтражениеЗарплатыВБухучете. Основная логика завершается в процедуре ЗаполнитьНаСервереЗавершение. Именно здесь, когда все данные уже получены из регистров и помещены в объект, мы можем применить наш фильтр.
Рассмотрим пример кода для расширения (используем аннотацию &После):
&НаСервере
&После("ЗаполнитьНаСервереЗавершение")
Процедура ИТ_ЗаполнитьНаСервереЗавершениеПосле(Результат, Параметры)
// Проверяем, заполнено ли подразделение в шапке документа
Если ЗначениеЗаполнено(Объект.Подразделение) И ЗначениеЗаполнено(Объект.Подразделение.РегистрацияВНалоговомОргане) Тогда
РегистрацияШапки = Объект.Подразделение.РегистрацияВНалоговомОргане;
// Используем обратный цикл для корректного удаления строк из коллекции
КоличествоСтрок = Объект.НачисленныйНДФЛ.Количество();
Для Индекс = 1 По КоличествоСтрок Цикл
ОбратныйИндекс = КоличествоСтрок - Индекс;
ТекущаяСтрока = Объект.НачисленныйНДФЛ[ОбратныйИндекс];
// Если регистрация в строке не совпадает с регистрацией подразделения шапки - удаляем
Если ТекущаяСтрока.РегистрацияВНалоговомОргане <> РегистрацияШапки Тогда
Объект.НачисленныйНДФЛ.Удалить(ОбратныйИндекс);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Важный нюанс: Обратите внимание на использование обратного цикла (Для Индекс = 1 По КоличествоСтрок... с вычитанием индекса). Если удалять строки в прямом цикле, индексы оставшихся строк сместятся, и программа пропустит часть данных или вызовет ошибку обращения к коллекции.
Для тех, кто хочет более фундаментального решения, проанализируем общий модуль ОтражениеРасчетовЗарплатыВБухучете, метод ОтобратьРезультатыЗаполненияТаблицДокумента. Именно здесь формируются запросы к базе данных.
Логика типового фильтра по подразделению в этом методе следующая:
Различные Физлица.НДФЛ заполняется по этим физлицам без учета подразделения.Для исправления можно переписать запрос так, чтобы он учитывал связь между физлицом, его регистрацией в ИФНС и подразделением начисления. Однако это требует значительных трудозатрат и тестирования на больших объемах данных, поэтому способ с фильтрацией в форме (Способ 2) является более предпочтительным и безопасным.
Рассмотрим критические моменты, которые нужно учитывать при реализации подобных доработок:
Отражение зарплаты в бухучете с пустым подразделением в шапке. Он соберет все остатки, которые не попали в частные документы.Подведем итог: задача разделения НДФЛ по подразделениям решаема. Мы рекомендуем начать с проверки настройки Территорий, а если это не помогает — внедрить небольшое расширение с фильтрацией табличной части по РегистрацииВНалоговомОргане. Это обеспечит чистоту данных и корректность проводок при обмене между базами.