Как исправить ошибку «Запись с такими ключевыми полями существует» в ЗУП 3.1 при увольнении сотрудника

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

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

Анализируем причину возникновения ошибки

Разберем ситуацию: при проведении документа система сообщает о дублировании записи по конкретному сотруднику и начислению (например, Северная надбавка). При этом в основном регистре Плановые начисления записей может быть всего три, а ошибка указывает на номер строки 4. Проанализируем, откуда берется эта «невидимая» запись.

Основная причина кроется в архитектурных особенностях ЗУП 3.1. Для ускорения расчетов в программе используются вспомогательные интервальные регистры. Если обычный регистр Плановые начисления хранит только сведения о том, что с определенной даты назначено начисление, то интервальный регистр (например, ПлановыеНачисленияИнтервальный) хранит четкие периоды «С» и «По».

Чаще всего такие сбои происходят в следующих случаях:

  1. Последствия переноса данных: При переходе с версии 2.5 на 3.1 данные переносятся документами Перенос данных. Механизмы формирования интервалов могут отработать некорректно, создавая «битые» периоды.
  2. Наложение микросекунд: В записях регистра могут присутствовать наложения периодов в доли секунды, которые не видны в стандартных списках, но считываются системой при попытке записи нового набора.
  3. Логические конфликты в ТЧ «Оплата»: Документ «Увольнение» пытается автоматически прекратить плановые начисления, формируя новые записи, которые конфликтуют с уже существующими интервалами в базе.

Использование отладчика для локализации проблемы

Рассмотрим, как увидеть ту самую «четвертую запись», которой нет в основном регистре. Для этого программисту необходимо зайти в процедуру проведения документа и исследовать переменную НаборыИсточникиВторичныхДанных.

Посмотрим на пример того, как данные попадают в набор записей в момент проведения:


// Фрагмент кода, где формируется набор данных для записи
Набор = НаборыИсточникиВторичныхДанных.Добавить();
Набор.ИмяРегистра = "ПлановыеНачисления";
// В этот момент в "Набор" попадают текущие данные из БД 
// и новые данные, генерируемые документом Увольнение.
// Если в БД есть скрытый "кривой" интервал, 
// возникнет конфликт ключей при фиксации транзакции.

В отладчике можно заметить, что в коллекции записей появляется строка, ссылающаяся на старый документ (например, Кадровый перевод), который вы уже пробовали распроводить или удалять. Это явный признак того, что данные «застряли» не в основном регистре, а во вспомогательных таблицах интервалов.

Способ 1: Использование штатных инструментов пересчета интервалов

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

Выполним следующие шаги:

  1. Перейдем в раздел Администрирование — Обслуживание — Корректировка данных.
  2. Найдем пункт Заполнение интервалов плановых начислений (в некоторых версиях доступно через «Функции технического специалиста»).
  3. Запустим обработку для проблемного сотрудника. Программа полностью очистит интервальный регистр и пересчитает его заново на основании первичных документов (приказов, кадровых переводов).

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

Способ 2: Корректировка интервального регистра вручную

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

Посмотрим на алгоритм действий:

  1. Через Функции технического специалиста откроем регистр сведений Плановые начисления интервальный.
  2. Установим отбор по конкретному сотруднику и организации.
  3. Внимательно изучим колонки Дата начала и Дата окончания. Часто там можно обнаружить записи, которые ссылаются на уже удаленные или пустые документы.
  4. Удалим проблемную запись, которая создает дубль ключевых полей (Сотрудник, Начисление, Организация).

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

Проверка перерасчетов и документов переноса

Рассмотрим еще один важный аспект: документ Увольнение может пытаться выполнить перерасчет за прошлые периоды. Проверим наличие записей в регистре Перерасчеты. Если система видит необходимость пересчитать период, в котором данные были перенесены из ЗУП 2.5 некорректно, она столкнется с той же ошибкой записи.

Рекомендуется выполнить следующие действия:

Резюме для технического специалиста

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

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

← На главную