Переход с редакции Зарплата и Управление Персоналом 2.5 на современную 3.1 часто сопровождается техническими сложностями. Одной из самых распространенных и неприятных проблем является прерывание загрузки с ошибкой записи объекта в регистр сведений. Чаще всего это касается регистра Записи о стаже до начала эксплуатации или Начальные остатки отпусков.
В этой статье мы подробно разберем, почему возникает эта ошибка, как проанализировать проблемные данные и какими способами можно завершить перенос успешно, сохранив целостность базы данных.
Проанализируем текст ошибки, который выдает система. Типовое сообщение выглядит так: Ошибка при вызове метода контекста (Записать): Запись с такими ключевыми полями существует!. В контексте регистра сведений ЗаписиОСтажеДоНачалаЭксплуатации это означает, что для одного физического лица на одну и ту же дату начала периода система пытается создать две абсолютно идентичные записи.
Основная причина кроется в ситуации, когда сотрудник в исходной базе ЗУП 2.5 одновременно работает по основному месту работы и по договору гражданско-правового характера (ГПХ). Алгоритм переноса (особенно в старых релизах или при «Полном переносе») считывает периоды стажа для обоих видов занятости. Поскольку в регистре Записи о стаже до начала эксплуатации ключевыми полями являются Организация, Физическое лицо и Дата начала, две записи за один и тот же период по одному человеку вызывают конфликт уникальности.
Это самый быстрый и эффективный способ «обмануть» механизм переноса, не прибегая к программированию. Рассмотрим этот алгоритм по шагам:
Договор на выполнение работ с физ. лицом. Если таких сотрудников много, можно воспользоваться обработкой Групповая обработка справочников и документов.Проанализируем методику самого процесса. Фирма 1С предлагает два варианта переноса:
1. Полный перенос: переносится вся кадровая история и документы расчетов. Именно здесь чаще всего возникают дубли в стаже и остатках.
2. Рекомендованный перенос: переносятся только данные для расчета среднего заработка (за последние 2-3 года) и остатки на дату начала эксплуатации.
Если вы столкнулись с массовыми ошибками по регистрам стажа, настоятельно рекомендуем использовать Рекомендованный перенос. В этом режиме система формирует свернутые данные, и вероятность возникновения конфликта ключей в регистре Записи о стаже до начала эксплуатации сводится к минимуму.
Иногда ошибка записи возникает в регистре Начальные остатки отпусков (Сообщение 14 в обсуждении). Это происходит из-за некорректного ведения учета в ЗУП 2.5, когда по одному сотруднику введены несколько документов Остатки отпусков на одну дату или есть «наслоение» периодов в регистре накопления Фактические отпуска.
Для исправления ситуации в базе 2.5 выполним следующие действия:
Остатки отпусков и проверим наличие дублей по сотруднику.Корректировка записей регистров, которые могли создать «мусорные» записи в кадровых регистрах.Если обновление конфигурации до актуального релиза невозможно, а документов ГПХ слишком много, можно внести изменения в правила конвертации. Рассмотрим, как это сделать через конфигурацию 1С:Конвертация данных 2.0:
Выгрузим правила из конфигурации ЗУП 3.1 (обработка Выгрузка правил для версии...). Загрузим их в КД 2.0. Найдем правило конвертации объектов (ПКО) для регистра сведений ЗаписиОСтажеДоНачалаЭксплуатации.
Нам необходимо модифицировать обработчик ПередЗагрузкой или изменить настройки поиска. Рассмотрим пример кода, который можно добавить в обработчик, чтобы избежать дублирования записей:
// Пример логики в обработчике ПередЗагрузкой для исключения дублей
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.ЗаписиОСтажеДоНачалаЭксплуатации
ГДЕ ФизическоеЛицо = &ФизЛицо И ДатаНачала = &ДатаНачала";
Запрос.УстановитьПараметр("ФизЛицо", Объект.ФизическоеЛицо);
Запрос.УстановитьПараметр("ДатаНачала", Объект.ДатаНачала);
Если НЕ Запрос.Выполнить().Пустой() Тогда
Отказ = Истина; // Если такая запись уже есть, пропускаем загрузку новой
КонецЕсли;
Однако помните, что внесение изменений в типовые правила — это крайняя мера, так как при следующем обновлении конфигурации эти правки придется переносить заново.
При переносе из старой Зарплаты и Кадров 7.7 может возникнуть ошибка Преобразование значения к типу Булево не может быть выполнено. Проанализируем причину: в 7.7 реквизиты документов (например, по уходу за ребенком) могут иметь неопределенное значение, которое конвертер 3.1 не может корректно интерпретировать как Истина или Ложь.
Как показывает практика (сообщения 15-16), самым простым решением является удаление или исправление документов Изменение условий оплаты отпуска по уходу за ребенком в базе 7.7 за периоды, которые уже не актуальны для текущих расчетов (например, если ребенок уже вырос). Если документы важны, необходимо зайти в них в 7.7 и убедиться, что все флажки и переключатели установлены в явное положение.
Чтобы минимизировать риск возникновения ошибок, перед началом переноса рекомендуем выполнить следующие действия:
Физические лица. Часто для договорника создают второе физлицо, что гарантирует ошибки в стаже.ТИИ исходной базы (Администрирование -> Тестирование и исправление) с включенной проверкой логической целостности.Подводя итог, отметим, что ошибка «Запись с такими ключевыми полями существует» — это в большинстве случаев следствие «двойного стажа» сотрудника-договорника. Использование Рекомендованного переноса и временное снятие с проведения мешающих документов ГПХ позволяют решить проблему в 90% случаев без привлечения разработчиков.