При переходе на новые релизы программы 1С:Зарплата и управление персоналом 8 (начиная с версии 3.1.11 и выше) многие пользователи столкнулись с неприятным поведением системы: расчет НДФЛ перестал автоматически распределяться по обособленным территориям выполнения работ. Программа упорно регистрирует доход и налог по кадровым подразделениям, даже если сотрудник в течение месяца перемещался по различным объектам и территориям с уникальными регистрациями в налоговых органах.
В этой статье мы подробно разберем, почему изменилось поведение системы, проанализируем законодательную базу и внутреннюю методологию 1С, а также внедрим готовое техническое решение на базе расширения конфигурации, которое позволит вернуть автоматическое заполнение территорий.
Для начала проанализируем ситуацию и поймем, почему программа стала вести себя иначе. Начиная с версии 1С:ЗУП 3.1.10, разработчики кардинально изменили подход к учету НДФЛ. Ранее место уплаты налога определялось исключительно периодом начисления. В новых релизах программа стала рассчитывать ИФНС и место получения дохода по плановой дате выплаты начисленной суммы.
Во всех расчетных документах появилась колонка МестоПолученияДохода. В эту колонку программа может записывать как Подразделение, так и Территорию. По умолчанию система отдает приоритет кадровому подразделению сотрудника. Если у вас на предприятии организована сложная схема перемещений (например, вахтовый метод работы, строительные объекты или буровые бригады), то привязка к подразделению ломает устоявшуюся схему распределения налогов по муниципальным бюджетам.
С точки зрения статьи 226 НК РФ, налог должен перечисляться по месту нахождения обособленного подразделения, в котором сотруднику фактически начисляется доход. Однако Минфин в своих разъяснениях (например, в Письме от 04.08.2014 № 03-04-06/38350) указывает, что при вахтовом методе работы НДФЛ должен распределяться пропорционально отработанному времени на конкретных объектах (обособках). Именно для этих целей в программе используются Территории.
Если на вашем предприятии «территориальный» учет НДФЛ ведется на основании табелей учета рабочего времени, и вы не используете ежедневные документы ПеремещениеМеждуТерриториями, то после обновления вам придется корректировать место получения дохода вручную. Чтобы избежать этой рутины, мы можем использовать механизм расширений и вмешаться в процесс формирования движений по расчету зарплаты.
Рассмотрим, как это реализовать. Нам необходимо перехватить заполнение сведений о начислениях непосредственно перед проведением расчетов в модуле менеджера расчета зарплаты.
Создайте новое расширение в вашей информационной базе. Назовите его, например, УчетНДФЛПоТерриториям. Снимите флажки «Безопасный режим» и «Защита от опасных действий» для корректной работы серверных процедур.
Найдите в дереве метаданных обработку МенеджерРасчетаЗарплаты и добавьте её в ваше расширение. В этой обработке нас интересует процедура, отвечающая за подготовку и заполнение временных таблиц начислений для последующего расчета НДФЛ — ЗаполнитьСведенияНачисленийДляРасчетаСлужебный.
Мы применим аннотацию &После для перехвата результатов работы стандартного алгоритма. Внедряемый код будет анализировать каждую строку начислений, определять фактическую территорию работы сотрудника на дату начала начисления и подставлять её в качестве места получения дохода.
Добавьте в модуль обработки МенеджерРасчетаЗарплаты вашего расширения следующий программный код:
&После("ЗаполнитьСведенияНачисленийДляРасчетаСлужебный")
Процедура Расш_ЗаполнитьСведенияНачисленийДляРасчетаСлужебный(Требования)
// Перенаправляем таблицу начислений в наш общий модуль для постобработки
РазнестиСтрокиНДФЛПоТерриториям(Начисления);
КонецПроцедуры
Теперь создадим в расширении новый общий модуль (например, с именем Расш_ОбщиеПроцедурыИФункции) с установленными свойствами «Сервер» и «Вызов сервера». В нем мы реализуем алгоритм поиска территории сотрудника на нужную дату и подмены аналитики в табличной части:
Процедура РазнестиСтрокиНДФЛПоТерриториям(ТаблицаНачислений) Экспорт
Для Каждого СтрокаТЗ Из ТаблицаНачислений Цикл
// Получаем территорию выполнения работ сотрудника на дату начала начисления
Территория = ПолучитьТерриториюСотрудникаНаДату(СтрокаТЗ.Сотрудник, СтрокаТЗ.ДатаНачала);
Если ЗначениеЗаполнено(Территория) Тогда
// Принудительно подменяем МестоПолученияДохода кадрового подразделения на территорию
СтрокаТЗ.МестоПолученияДохода = Территория;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ПолучитьТерриториюСотрудникаНаДату(Сотрудник, ДатаАнализа) Экспорт
// Запрос к регистру сведений, фиксирующему работу сотрудников на территориях
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| ТерриторииСотрудниковСрезПоследних.Территория КАК Территория
|ИЗ
| РегистрСведений.ТерриторииСотрудников.СрезПоследних(&Период, Сотрудник = &Сотрудник) КАК ТерриторииСотрудниковСрезПоследних";
Запрос.УстановитьПараметр("Период", ДатаАнализа);
Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Территория;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Этот код позволяет вернуть автоматическое заполнение территорий «на лету» в момент проведения документов начисления (таких как Командировка, Премия, Начисление зарплаты и взносов). Вся цепочка последующих документов и отчетов по НДФЛ начнет корректно видеть именно территории.
Применяя этот подход, обязательно учитывайте следующие системные особенности программы:
Увольнение на вкладке расчета НДФЛ колонка подразделения заполняется по кадровым данным. При необходимости вам может потребоваться точечно скорректировать модуль расчета НДФЛ при увольнении аналогичным образом.Подразделения. Если вам жизненно необходим автоматический сбор статистики по обособленным территориям, рассмотрите переход на версию ЗУП КОРП, где этот функционал поддерживается на штатном уровне.Таким образом, мы проанализировали изменения в логике 1С:ЗУП версии 3.1.11, нашли первопричину сбоя распределения и внедрили гибкое решение через расширение конфигурации, которое защитит вашу базу от слета настроек при последующих обновлениях системы.