При обновлении конфигурации 1С:Зарплата и управление персоналом (ЗУП) на актуальные релизы (особенно версий 3.1.23.x и 3.1.27.x) пользователи часто сталкиваются с критической ошибкой, которая прерывает процесс обновления информационной базы. Текст ошибки обычно выглядит так: Запись с такими ключевыми полями существует! : МероприятияТрудовойДеятельностиПереданные. Далее следует уникальный идентификатор (UUID) и указание на конкретный набор записей.
В этой статье мы подробно разберем, почему возникает эта ситуация, как проанализировать проблемные данные и какими способами можно восстановить работоспособность базы.
Проанализируем ситуацию: в последних версиях ЗУП фирма 1С изменила структуру регистра сведений МероприятияТрудовойДеятельностиПереданные. Это связано с переходом на новый формат отчетности ЕФС-1. Поле Организация, которое ранее могло быть обычным реквизитом, стало измерением регистра.
Когда при обновлении запускается обработчик ЗаполнитьОрганизации, система пытается пересчитать уникальность записей с учетом нового измерения. Если в вашей базе по каким-то причинам (например, из-за некорректного копирования документов «Регистрация трудовой деятельности» или сбоев при синхронизации) оказались записи с одинаковыми ИдМероприятия, которые раньше считались разными из-за других полей, то теперь они конфликтуют. Система не может записать две строки с одинаковым ключом, что и вызывает остановку обновления.
Рассмотрим по шагам методы решения этой проблемы — от ручного поиска до программной очистки.
Если обновление прервалось, мы можем использовать встроенные инструменты или внешние обработки для поиска «виновника». Проанализируем сообщения об ошибке: в них часто указывается конкретный GUID (например, 378b6771-bc83-437e-9ec2-0daaeb21b088).
Выполним следующие действия:
МероприятияТрудовойДеятельностиПереданные, чтобы найти документы-регистраторы, которые содержат дублирующийся идентификатор.Пример логики запроса:
ВЫБРАТЬ
Мероприятия.Регистратор,
Мероприятия.НомерСтроки,
Мероприятия.ИдМероприятия
ИЗ
РегистрСведений.МероприятияТрудовойДеятельностиПереданные КАК Мероприятия
ГДЕ
Мероприятия.ИдМероприятия = "378b6771-bc83-437e-9ec2-0daaeb21b088"
Разберем ситуацию: если запрос вернул два разных документа-регистратора с одним и тем же ИдМероприятия, нам необходимо:
ПринятоВПФР равен Ложь).Если дублей много, ручной поиск станет слишком трудоемким. В этом случае мы можем применить программный код, который найдет все записи, не принятые в ПФР (СФР), и обновит их уникальные идентификаторы. Это позволит системе создать уникальные ключи при записи в регистр.
Рассмотрим пример кода для исправления ситуации:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| МероприятияТрудовойДеятельностиПереданные.Регистратор КАК Регистратор
|ИЗ
| РегистрСведений.МероприятияТрудовойДеятельностиПереданные КАК МероприятияТрудовойДеятельностиПереданные
|ГДЕ
| МероприятияТрудовойДеятельностиПереданные.ПринятоВПФР = ЛОЖЬ";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Набор = РегистрыСведений.МероприятияТрудовойДеятельностиПереданные.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(Выборка.Регистратор);
Набор.Прочитать();
Для Каждого Запись Из Набор Цикл
// Генерируем новый Уникальный Идентификатор для записи
Запись.ИдМероприятия = Новый УникальныйИдентификатор;
КонецЦикла;
Если Набор.Модифицированность() Тогда
Набор.Записать();
Сообщить("Обновлены идентификаторы в документе: " + Выборка.Регистратор);
КонецЕсли;
КонецЦикла;
Важное примечание: данный метод следует применять только к тем записям, по которым отчет еще не был сдан и принят контролирующим органом. Если вы измените ИдМероприятия у уже принятого мероприятия, при последующей подаче корректировок система фонда не сможет сопоставить данные.
Иногда ошибка возникает из-за наличия в регистре записей, ссылающихся на несуществующие (удаленные) документы-регистраторы. В такой ситуации стандартные механизмы обновления не могут корректно обработать данные.
Проанализируем план действий для очистки базы:
Это позволит удалить «фантомные» записи из регистра МероприятияТрудовойДеятельностиПереданные, которые могут провоцировать дублирование ключей при обновлении.
Поскольку проблема носит массовый характер, фирма 1С оперативно выпускает исправления (патчи). Если ваша база подключена к интернету и настроена на автоматическую загрузку исправлений, проверьте раздел Администрирование — Обслуживание — Обновление программы — Установленные исправления.
Ищите патч с описанием, относящимся к обработчику ЗаполнитьОрганизации или регистру МероприятияТрудовойДеятельностиПереданные. Часто установка актуальных патчей перед запуском обновления полностью снимает проблему без необходимости писать код или править данные вручную.
Мы рассмотрели основные причины ошибки «Запись с такими ключевыми полями существует» при обновлении ЗУП. Основной алгоритм действий должен быть следующим:
ИдМероприятия.Помните, что любые манипуляции с регистром сведений по трудовой деятельности должны проводиться с осторожностью, чтобы не нарушить целостность сданной отчетности в СФР.