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

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

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

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

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

Проанализируем ситуацию: в версии 3.1.6 разработчики 1С радикально пересмотрели механизм формирования данных для формы СЗВ-СТАЖ. Был оптимизирован регистр сведений ПараметрыПериодовСтажаПФР. При обновлении конфигурации запускается специальная процедура, которая пытается пересчитать все прошлые периоды стажа сотрудников и записать их в этот регистр в новом формате.

Конфликт возникает из-за того, что в исходных данных (документах-регистраторах) уже содержатся избыточные или противоречивые записи. Механизм обновления пытается записать в регистр строку, которая по ключевым полям (Организация, ФизическоеЛицо, ДатаНачала, Регистратор) полностью совпадает с уже созданной в этой же транзакции записью. Система управления базами данных (СУБД) или сама платформа 1С блокируют это действие, так как нарушается уникальность записей регистра.

Рассмотрим подробнее основные источники «грязных» данных:

  1. Документы «Перенос данных». Если база была перенесена из ЗУП 2.5, сведения о стаже за прошлые годы хранятся в технических документах Перенос данных с кодами ПФР или РКЛ. Часто при переносе возникают дубли строк, которые «старая» версия ЗУП 3.1 игнорировала, а «новая» обработка обновления пытается превратить в уникальные записи.
  2. Ручные корректировки. Если пользователи вносили изменения в регистры накопления или сведений напрямую через универсальные формы или документы переноса.
  3. Битые ссылки. Наличие записей, ссылающихся на несуществующие (удаленные) объекты-регистраторы.

Шаг 1. Локализация проблемы с помощью консоли запросов

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

Рассмотрим пример запроса, который поможет выявить дубли:


ВЫБРАТЬ
    ПараметрыПериодовСтажаПФР.Организация,
    ПараметрыПериодовСтажаПФР.ФизическоеЛицо,
    ПараметрыПериодовСтажаПФР.ДатаНачала,
    ПараметрыПериодовСтажаПФР.Регистратор,
    КОЛИЧЕСТВО(*) КАК КоличествоДублей
ИЗ
    РегистрСведений.ПараметрыПериодовСтажаПФР КАК ПараметрыПериодовСтажаПФР
СГРУППИРОВАТЬ ПО
    ПараметрыПериодовСтажаПФР.Организация,
    ПараметрыПериодовСтажаПФР.ФизическоеЛицо,
    ПараметрыПериодовСтажаПФР.ДатаНачала,
    ПараметрыПериодовСтажаПФР.Регистратор
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(*) > 1

После выполнения этого запроса мы получим список «проблемных» сотрудников и документов-регистраторов. Если запрос в самом регистре ничего не возвращает (такое бывает, если ошибка вылетает в момент записи новых данных обработчиком), следует проанализировать источник данных — документы Перенос данных.

Шаг 2. Исправление документов «Перенос данных»

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

Алгоритм действий:

  1. Перейдем в раздел Администрирование — Переносы данных.
  2. Найдем документ, указанный в ошибке.
  3. Внутри документа найдем вкладку (регистр), отвечающую за параметры стажа ПФР.
  4. Внимательно просмотрим строки по конкретному сотруднику. Мы увидим две или более абсолютно идентичные строки (одинаковые даты начала, окончания и территориальные условия).
  5. Удалим лишнюю строку вручную и запишем документ.

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

Шаг 3. Очистка регистра перед обновлением (радикальный метод)

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

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

Для этого можно использовать простую внешнюю обработку со следующим кодом:


НаборЗаписей = РегистрыСведений.ПараметрыПериодовСтажаПФР.СоздатьНаборЗаписей();
НаборЗаписей.Записать();

После очистки регистра запустите процесс обновления снова. В большинстве случаев процедура ОбновитьДанныеРегистра отработает корректно, создав уже правильные, уникальные записи.

Шаг 4. Тестирование и исправление базы данных

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

  1. Запустим утилиту chdbfl.exe (для файловых баз), чтобы проверить физическую целостность таблиц.
  2. В режиме Конфигуратор выберем пункт Администрирование — Тестирование и исправление.
  3. Обязательно установим флажки: «Реорганизация информации» и «Очищать записи при наличии несуществующих объектов».

Это позволит удалить ссылки на удаленные документы, которые могут мешать корректной работе регистра ПараметрыПериодовСтажаПФР.

Резюме

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

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

← На главную