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

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

При обновлении конфигурации 1С:Зарплата и управление персоналом (ЗУП) на актуальные релизы (особенно версий 3.1.23.x и 3.1.27.x) пользователи часто сталкиваются с критической ошибкой, которая прерывает процесс обновления информационной базы. Текст ошибки обычно выглядит так: Запись с такими ключевыми полями существует! : МероприятияТрудовойДеятельностиПереданные. Далее следует уникальный идентификатор (UUID) и указание на конкретный набор записей.

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

Выясним причину возникновения ошибки

Проанализируем ситуацию: в последних версиях ЗУП фирма 1С изменила структуру регистра сведений МероприятияТрудовойДеятельностиПереданные. Это связано с переходом на новый формат отчетности ЕФС-1. Поле Организация, которое ранее могло быть обычным реквизитом, стало измерением регистра.

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

Рассмотрим по шагам методы решения этой проблемы — от ручного поиска до программной очистки.

Способ 1. Поиск и исправление через консоль запросов

Если обновление прервалось, мы можем использовать встроенные инструменты или внешние обработки для поиска «виновника». Проанализируем сообщения об ошибке: в них часто указывается конкретный GUID (например, 378b6771-bc83-437e-9ec2-0daaeb21b088).

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

  1. Запустим базу в режиме «Толстый клиент» или воспользуемся обработкой «Консоль запросов».
  2. Составим запрос к регистру сведений МероприятияТрудовойДеятельностиПереданные, чтобы найти документы-регистраторы, которые содержат дублирующийся идентификатор.

Пример логики запроса:


ВЫБРАТЬ
    Мероприятия.Регистратор,
    Мероприятия.НомерСтроки,
    Мероприятия.ИдМероприятия
ИЗ
    РегистрСведений.МероприятияТрудовойДеятельностиПереданные КАК Мероприятия
ГДЕ
    Мероприятия.ИдМероприятия = "378b6771-bc83-437e-9ec2-0daaeb21b088"

Разберем ситуацию: если запрос вернул два разных документа-регистратора с одним и тем же ИдМероприятия, нам необходимо:

Способ 2. Программное исправление идентификаторов (UUID)

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

Рассмотрим пример кода для исправления ситуации:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	МероприятияТрудовойДеятельностиПереданные.Регистратор КАК Регистратор
    |ИЗ
    |	РегистрСведений.МероприятияТрудовойДеятельностиПереданные КАК МероприятияТрудовойДеятельностиПереданные
    |ГДЕ
    |	МероприятияТрудовойДеятельностиПереданные.ПринятоВПФР = ЛОЖЬ";

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл
    Набор = РегистрыСведений.МероприятияТрудовойДеятельностиПереданные.СоздатьНаборЗаписей();
    Набор.Отбор.Регистратор.Установить(Выборка.Регистратор);
    Набор.Прочитать();
    
    Для Каждого Запись Из Набор Цикл
        // Генерируем новый Уникальный Идентификатор для записи
        Запись.ИдМероприятия = Новый УникальныйИдентификатор;
    КонецЦикла;
    
    Если Набор.Модифицированность() Тогда
        Набор.Записать();
        Сообщить("Обновлены идентификаторы в документе: " + Выборка.Регистратор);
    КонецЕсли;
КонецЦикла;

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

Способ 3. Проверка «битых» ссылок и тестирование базы

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

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

  1. Запустите конфигуратор.
  2. Перейдите в меню Администрирование — Тестирование и исправление.
  3. Установите флажки «Проверка логической целостности» и «Проверка ссылочной целостности».
  4. В опциях при наличии ссылок на несуществующие объекты выберите «Очищать объекты».

Это позволит удалить «фантомные» записи из регистра МероприятияТрудовойДеятельностиПереданные, которые могут провоцировать дублирование ключей при обновлении.

Способ 4. Использование официальных патчей

Поскольку проблема носит массовый характер, фирма 1С оперативно выпускает исправления (патчи). Если ваша база подключена к интернету и настроена на автоматическую загрузку исправлений, проверьте раздел Администрирование — Обслуживание — Обновление программы — Установленные исправления.

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

Подведем итоги

Мы рассмотрели основные причины ошибки «Запись с такими ключевыми полями существует» при обновлении ЗУП. Основной алгоритм действий должен быть следующим:

  1. Идентификация: через журнал регистрации или окно ошибки найти конкретный UUID.
  2. Поиск дубля: с помощью консоли запросов найти документы-регистраторы, использующие этот UUID.
  3. Устранение конфликта: отменить проведение документов-дублей или программно обновить ИдМероприятия.
  4. Профилактика: выполнить тестирование и исправление базы для удаления некорректных записей.

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

← На главную