При расчете заработной платы в программе «1С:Зарплата и управление персоналом 3.1» (ЗУП 3.1) расчетчики часто сталкиваются с ситуацией, когда удержание по исполнительному листу, имеющему ограничение (предел удержания), внезапно прекращается или рассчитывается в меньшем размере, хотя заработка сотрудника достаточно для полного погашения, а сам лимит еще не исчерпан.
В этой статье мы подробно разберем, почему возникает эта проблема, как устроена внутренняя архитектура учета лимитов в программе, проанализируем взаимосвязь документов и регистров, а также рассмотрим несколько практических способов исправления ситуации — от простых пользовательских действий до программной очистки регистров.
Рассмотрим классическую ситуацию. В программе зарегистрирован документ Исполнительный лист с установленным флагом «Удерживать до предела» и указанием конкретной конечной суммы (например, 31 328,22 руб.). В течение нескольких месяцев удержания производятся корректно, однако в очередном месяце программа вместо положенной суммы (например, 7 000 руб.) удерживает значительно меньше (например, 2 800 руб.), сигнализируя о том, что лимит исчерпан.
Если мы искусственно увеличим предел удержания в документе (например, до 50 000 руб.), программа сразу же начнет рассчитывать удержание корректно. Это прямо указывает на то, что система ошибочно вычисляет накопленный итог удержаний, считая, что лимит уже практически исчерпан. Выясним причину такого поведения.
Основная причина кроется во взаимодействии механизма автоматических перерасчетов и специализированных регистров накопления. В программе 1С:ЗУП 3.1 при проведении, изменении или даже простом распроведении расчетных документов система регистрирует записи в таблицах перерасчетов. Если документ (например, второй исполнительный лист или документ-исправление) был создан, а затем распроведен или помечен на удаление, записи в регистре сведений Перерасчеты удержаний могут остаться заблокированными («зависшими»). Наличие таких записей заставляет алгоритм расчета удержаний учитывать фантомные задолженности или неверно определять базу для сравнения с пределом.
---
Для того чтобы эффективно решать подобные проблемы, нам необходимо понимать, где именно программа хранит информацию о лимитах и перерасчетах. Проанализируем два ключевых регистра:
Удержания до предела по сотрудникам. Именно здесь фиксируются все фактически произведенные удержания по документам, у которых установлен лимит. Каждое начисление зарплаты делает движение «Приход» в этот регистр. При достижении суммы «Прихода» величине предела из исполнительного листа программа прекращает расчет.Перерасчеты удержаний. Этот регистр служит для фиксации необходимости пересчитать результаты прошлых периодов. Записи сюда добавляются автоматически при любых изменениях кадровых данных, плановых начислений или самих исполнительных документов. К сожалению, платформа не всегда корректно очищает этот регистр при распроведении документов, что ведет к накоплению «мусора».Важный нюанс: Очень часто сбой происходит, если в базе применяется документ Ограничение взысканий (согласно ст. 138 ТК РФ, ограничивающий удержания 50% или 70% заработка). Программа может ошибочно записать в регистр Удержания до предела по сотрудникам первоначальную (расчетную) сумму до ограничения, хотя фактически удержано было меньше. В результате реальный долг у сотрудника остается, а программа считает лимит исчерпанным.
---
Вместо радикального отключения механизма автоматических перерасчетов (которое может привести к тому, что программа перестанет реагировать на ввод документов задним числом, например, больничных листов), правильнее всего очистить «очередь» перерасчетов для конкретного сотрудника.
Рассмотрим по шагам, как это сделать в пользовательском интерфейсе:
Начисление зарплаты и взносов и заново рассчитайте сотрудника. Сумма удержания должна рассчитаться в полном объеме.---
Если ручное удаление перерасчетов не помогло, необходимо детально проанализировать движения по лимитам. Посмотрим, как это сделать с помощью технических средств платформы:
Удержания до предела по сотрудникам.Перенос данных (раздел Администрирование — Перенос данных). Создайте новый документ, выберите регистр накопления Удержания до предела по сотрудникам и сделайте корректирующую запись (например, расходное движение с минусом или плюсом), чтобы выровнять остаток лимита до правильного значения.---
Если база данных большая, а проблема носит массовый характер, вы можете воспользоваться внешней обработкой или выполнить программный код в консоли кода для быстрой очистки зависших записей по конкретному физическому лицу.
Рассмотрим пример кода, который выполняет выборочную очистку записей в регистре сведений Перерасчеты удержаний:
// Создаем набор записей для работы с регистром
НаборЗаписей = РегистрыСведений.ПерерасчетыУдержаний.СоздатьНаборЗаписей();
// Устанавливаем отбор по проблемному физическому лицу
НаборЗаписей.Отбор.ФизическоеЛицо.Установить(СсылкаНаФизическоеЛицо);
// Читаем текущие записи регистра по отбору
НаборЗаписей.Прочитать();
// Очищаем набор записей от "мусорных" строк
НаборЗаписей.Очистить();
// Записываем пустой набор с замещением существующих данных по отбору
НаборЗаписей.Записать(Истина);
Сообщить("Регистр перерасчетов удержаний по сотруднику успешно очищен!");
Важно: Программное вмешательство в регистры рекомендуется выполнять исключительно на резервной копии информационной базы и только после предварительного согласования с системным администратором.
---
В условиях жестких дедлайнов по сдаче отчетности и выплате заработной платы, когда времени на детальный анализ регистров и программирование нет, можно применить временный практический прием:
Исполнительный лист.Начисление зарплаты и взносов, перезаполните или пересчитайте удержания по данному сотруднику. Программа рассчитает полную сумму (процент от заработка) без учета лимитов. Если рассчитанная сумма превышает реальный остаток долга, вручную скорректируйте ее в строке расчета до нужного значения.Исполнительный лист, снова установите флаг предела удержания и укажите оставшуюся сумму лимита с учетом уже фактически удержанных средств.Этот способ требует ручного контроля со стороны расчетчика, но позволяет оперативно закрыть текущий месяц без задержки выплаты зарплаты.
---
Мы выяснили, что основной причиной некорректного расчета лимитов по исполнительным листам в 1С:ЗУП 3.1 является несовершенство платформенного механизма автоматической регистрации перерасчетов. Для того чтобы минимизировать возникновение подобных ошибок в будущем, рекомендуем соблюдать следующие правила:
Изменение исполнительного листа или документ-исправление вместо удаления или распроведения старых документов.