Почему в 1С:ЗУП 3.1 при начислении зарплаты по подразделению в удержания попадают лишние сотрудники и как это исправить?

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

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

Анализ ситуации: почему «вылезают» лишние сотрудники

Рассмотрим типичный сценарий: сотрудник в 2024 году работал в подразделении «Администрация ЦО», а в 2025 году был переведен в «Администрацию ВК». При расчете зарплаты за текущий месяц по подразделению «Администрация ЦО» программа упорно добавляет этого сотрудника в список удержаний. На первый взгляд это кажется ошибкой, но давайте проанализируем архитектуру системы.

В ЗУП 3.1 учет удержаний (особенно исполнительных листов, профсоюзных взносов и страховых премий) ведется в разрезе физических лиц, а не конкретных рабочих мест или табельных номеров. Программа стремится собрать все доходы физлица, чтобы правильно рассчитать базу для удержания. Если у сотрудника в расчетном периоде была хоть какая-то активность в старом подразделении (например, доначисления, перерасчеты или остатки по взаиморасчетам), система включает его в документ.

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

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

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


Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
КадровыйУчет.СоздатьВТСотрудникиОрганизации(Запрос.МенеджерВременныхТаблиц, Истина, Параметры);

Запрос.Текст = 
"ВЫБРАТЬ
|    СотрудникиОрганизации.Сотрудник
|ИЗ
|    ВТСотрудникиОрганизации КАК СотрудникиОрганизации";
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Сотрудник");

Функция СоздатьВТСотрудникиОрганизации является ключевой. Проблема заключается в том, что при заполнении начислений по подразделениям, ЗУП вызывает дополнительный сбор данных для тех, кто «возможно, имел доход в выбранном периоде». В общем модуле Обработка.МенеджерРасчетаЗарплаты.МодульОбъекта мы можем найти вызов функции СотрудникиДополнительныйДоход.

Рассмотрим фрагмент кода, где происходит это добавление:


// Для сотрудников, уже не работающих, но, возможно, имевших доход в выбранном периоде.
Если ЗаполнятьНачисленияПоТрудовымДоговорам Тогда
    СотрудникиДополнительныйДоход = СотрудникиДополнительныйДоход(
        Организация,
        Подразделение,
        МесяцНачисления,
        ПараметрыСотрудников,
        Сотрудники,
        РассчитыватьНДФЛ,
        РассчитыватьВзносы); 
КонецЕсли;

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

Как решить проблему программно через расширение

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

  1. Проанализируем функцию ДанныеДляЗаполненияТаблицДокумента в модуле МенеджерРасчетаЗарплаты.
  2. В расширении необходимо перехватить формирование таблицы удержаний.
  3. Важный момент: в настройках самих удержаний часто присутствует аналитика Рабочее место. Мы можем использовать ее для фильтрации.

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

Рекомендации для пользователей и бухгалтеров

Если вы не планируете вносить изменения в код, разберем, как минимизировать неудобства административными методами:

Подведем итог: появление «беглецов» в удержаниях — это не ошибка, а реализация принципа сквозного расчета налогов и удержаний по физическому лицу. Программа пытается гарантировать, что исполнительный лист будет удержан в полном объеме, независимо от того, в скольких подразделениях работал человек в течение месяца.

← На главную