Как исправить ошибку «Запись с такими ключевыми полями существует» при исключении сотрудника из списков части в 1С?

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

При оформлении кадровых документов в программных продуктах семейства «1С:Предприятие 8» пользователи периодически сталкиваются с неприятной ошибкой СУБД: «Запись с такими ключевыми полями существует!». Особенно часто эта проблема проявляется при проведении документов Исключение из списков части (ведомственный аналог документа Увольнение) в специализированных конфигурациях, таких как «1С:Витязь» или «1С:Зарплата и кадры государственного учреждения» (ЗГУ).

В этой статье мы подробно разберем, почему возникает данная ошибка, проанализируем внутренние механизмы работы платформы 1С с регистрами сведений и рассмотрим пошаговые сценарии решения этой проблемы — от официального обновления до практических обходных путей без изменения конфигурации.

Что такое подсистема «1С:Витязь» и почему в ней возникают подобные сбои?

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

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

Техническая природа ошибки уникальности записей

Чтобы понять, почему система выдает сообщение о существовании аналогичной записи, обратимся к структуре хранения данных в 1С. Учет плановых начислений военнослужащих и сотрудников (таких как оклады по должности, званию, надбавки за секретность, выслугу лет и др.) ведется в периодических регистрах сведений:

Когда мы проводим документ Исключение из списков части, программа должна автоматически закрыть все действующие плановые начисления сотрудника на дату исключения. Для этого в регистры сведений записываются новые строки, где в качестве даты окончания действия начислений устанавливается день увольнения.

В релизах ветки 3.1.12 разработчики 1С кардинально обновили механизмы формирования движений в интервальных регистрах. При определенных сценариях (например, когда сотрудник увольняется сразу после длительного отпуска) алгоритм проведения документа давал сбой. Программа пыталась дважды записать одну и ту же информацию по плановым начислениям на одну и ту же дату. Платформа 1С, обнаружив попытку создания дублирующей строки с идентичным набором ключевых полей (Сотрудник, Начисление, Дата начала интервала), блокировала транзакцию и возвращала ошибку СУБД.

---

Способ 1. Официальное исправление (Рекомендуемый путь)

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

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

---

Способ 2. Обходные пути решения проблемы без обновления

В закрытых ведомственных сетях и на секретных объектах оперативное обновление программного обеспечения часто невозможно из-за длительных процедур согласования. В таком случае мы можем воспользоваться альтернативными методиками исправления данных непосредственно в пользовательском режиме.

Шаг 1. Анализ интервального регистра плановых начислений

Выясним, какие именно записи мешают проведению кадрового документа. Для этого выполним рекогносцировку в регистрах:

  1. Перейдем в главное меню программы и выберем пункт «Функции для технического специалиста» (в более старых версиях платформы этот пункт называется «Все функции»).
  2. В открывшемся дереве объектов найдем раздел «Регистры сведений».
  3. Перейдем в регистр Плановые начисления интервальный.
  4. Установим отбор по проблемному сотруднику (военнослужащему).
  5. Внимательно проанализируем записи. Если мы обнаружим «зависшие» интервалы с некорректными датами окончания или наложения периодов, их необходимо аккуратно скорректировать вручную или временно очистить.

Шаг 2. Корректировка последовательности проведения кадровых документов

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

Попробуем восстановить чистую последовательность проведения документов:

  1. Найдем и временно открепим (отменим проведение) для документа Отпуск за февраль по данному сотруднику.
  2. Откроем документ Исключение из списков части, снимем его с проведения (если он был частично записан), очистим табличные части расчета и заполним их заново.
  3. Попробуем провести документ Исключение из списков части. Без проведенного ранее отпуска расчетные регистры должны записаться корректно.
  4. После успешного проведения исключения вернемся к документу Отпуск и заново проведем его. Программа автоматически скорректирует пересекающиеся периоды.

Шаг 3. Ручное прекращение начислений перед исключением

Если алгоритм автоматического увольнения все равно двоит записи при попытке прекратить плановые начисления, мы можем «облегчить» ему задачу и закрыть их вручную предварительно:

  1. Создадим документ Изменение плановых начислений (находится в разделе «Зарплата» или «Кадры»).
  2. В качестве даты документа установим день, предшествующий дате исключения из списков части (например, 24.02.2020).
  3. Добавим в табличную часть нашего сотрудника и для всех его активных плановых начислений выберем действие «Прекратить».
  4. Проведем этот документ. Теперь начисления сотрудника официально закрыты в системе.
  5. Откроем документ Исключение из списков части от 25.02.2020 и проведем его. Поскольку начисления уже прекращены предыдущим документом, алгоритм проведения исключения не будет пытаться повторно записать строки прекращения в регистр ПлановыеНачисленияИнтервальный, и ошибка уникальности ключей не возникнет.

Шаг 4. Очистка расчетных документов и тестирование базы данных

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

  1. Проверим документ Начисление зарплаты и взносов за текущий месяц (февраль) и за последующий (март). Если в мартовских документах начисления или табелях данный сотрудник уже присутствует, полностью удалим его из табличных частей этих документов.
  2. Пометим документ Исключение из списков части на удаление.
  3. Запустим процедуру «Удаление помеченных объектов» и полностью удалим этот документ из базы данных, чтобы стереть все возможные незавершенные транзакции в СУБД.
  4. Для профилактики логической целостности базы данных откроем программу в режиме «Конфигуратор».
  5. Перейдем в меню «Администрирование» — «Тестирование и исправление...».
  6. Установим все флаги тестирования (включая реиндексацию таблиц и проверку логической целостности) и запустим процесс.
  7. После завершения тестирования зайдем в пользовательский режим 1С и заново создадим документ Исключение из списков части с чистого листа.

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

← На главную