Как исправить ошибку «Запись с такими ключевыми полями существует! : НачальныеОстаткиОтпусков» при переносе данных из 1С:ЗУП 2.5 в 1С:ЗУП 3.1?

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

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

В этой статье мы подробно разберем, почему возникает ошибка с текстом Запись с такими ключевыми полями существует! : НачальныеОстаткиОтпусков, проанализируем её техническую природу и рассмотрим пошаговые инструкции по её устранению различными методами.

Технический анализ проблемы: почему возникает ошибка

Для начала разберем природу возникновения данной ошибки. В процессе переноса данных (который выполняется либо напрямую через COM-соединение, либо посредством выгрузки/загрузки XML-файла) программа создает специальный документ «Перенос данных» с кодом «ОстОтп» (Остатки отпусков). Этот документ при проведении делает записи в регистр сведений Начальные остатки отпусков в новой базе ЗУП 3.1.

Регистр сведений Начальные остатки отпусков имеет строго определенную структуру. Уникальность его записей в системе обеспечивается набором так называемых ключевых полей (измерений). К ним относятся:

  1. Сотрудник (ссылка на элемент справочника Сотрудники).
  2. Вид ежегодного отпуска (например, Основной, Дополнительный за вредность и т.д.).
  3. Рабочий год (Начало) (дата начала периода работы, за который предоставляется отпуск).
  4. Рабочий год (Окончание) (дата окончания периода работы).

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

Рассмотрим подробнее основные причины, из-за которых в исходной базе 1С:ЗУП 2.5 возникают подобные дубли:

---

Способ 1. Локализация и исправление данных в исходной базе ЗУП 2.5

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

Шаг 1. Идентификация проблемного сотрудника.
Внимательно изучите текст ошибки в окне выгрузки/загрузки. Там обязательно будет указан конкретный сотрудник, вид отпуска и рабочий период. Например, в сообщении:
НачальныеОстаткиОтпусков: ФИО, Основной, 31.08.2013 0:00:00, 01.09.2012 0:00:00 (Номер строки: 2)
программа явно сообщает, что проблема возникла по сотруднику "ФИО" для "Основного" отпуска за период с 01.09.2012 по 31.08.2013.

Шаг 2. Проверка справочника сотрудников.
Откройте базу ЗУП 2.5. Перейдите в справочник Сотрудники и выполните поиск по фамилии проблемного человека. Убедитесь, что у вас нет задвоенных карточек сотрудников. Если обнаружены дубли, необходимо воспользоваться типовой обработкой Поиск и замена дубликатов для объединения некорректных элементов справочника.

Шаг 3. Анализ регистра «Фактические отпуска организаций».
Перейдите в меню Операции -> Регистры сведений -> Фактические отпуска организаций. Настройте отбор по нашему проблемному сотруднику. Внимательно изучите все записи регистра, особенно те, которые приходятся на период, указанный в ошибке. Если вы обнаружите дублирующиеся строки или документы-регистраторы, которые вызывают сомнения (например, дважды проведенный приказ на один и тот же отпуск), распроведите лишние документы или аккуратно удалите дублирующиеся записи непосредственно из регистра.

Шаг 4. Проведение тестирования и исправления.
Перед повторной выгрузкой обязательно запустите базу ЗУП 2.5 в режиме «Конфигуратор» и выполните процедуру «Тестирование и исправление» (меню Администрирование -> Тестирование и исправление...). Установите флажки:

После успешного завершения проверок повторите попытку переноса данных в ЗУП 3.1.

---

Способ 2. Отключение автоматического переноса остатков отпусков и их ручной ввод

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

Разберем данный алгоритм по шагам:

  1. Запустите помощник перехода в базе 1С:ЗУП 3.1.
  2. В окне выбора данных для переноса найдите дерево объектов и снимите отметку (галочку) с пункта, отвечающего за перенос остатков отпусков (документ Перенос данных с кодом ОстОтп).
  3. Выполните перенос основных данных (кадровой истории, личных данных, плановых начислений и расчетов). Программа завершит загрузку успешно и без ошибок.
  4. После завершения переноса перейдите в программу ЗУП 3.1.
  5. Откройте раздел Главное -> См. также -> Остатки отпусков (в зависимости от настроек интерфейса данный пункт также может находиться в разделе Кадры).
  6. Создайте новый документ Ввод остатков отпусков (или воспользуйтесь формой ввода начальной штатной расстановки).
  7. Выберите дату ввода остатков (как правило, это дата начала ведения учета в новой базе, например, 01.01.2024).
  8. Укажите проблемного сотрудника, выберите вид отпуска и вручную введите правильное количество дней неиспользованного отпуска и периоды их работы.

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

---

Способ 3. Продвинутый метод — редактирование XML-файла выгрузки

Если перенос данных осуществляется не через прямое COM-подключение к базе, а посредством выгрузки данных в файл формата XML с последующим импортом, мы можем прибегнуть к ручной корректировке выгруженного файла данных. Этот метод требует аккуратности, но позволяет решить проблему быстро без изменения исходной базы.

Рассмотрим, как локализовать и устранить дубль непосредственно в XML-файле:

  1. Выполните выгрузку данных из ЗУП 2.5 с помощью внешней обработки выгрузки в файл (например, data.xml).
  2. Скачайте и установите специализированный текстовый редактор, способный работать с большими файлами без зависаний. Отлично подойдет бесплатный редактор Notepad++. Стандартный «Блокнот» Windows использовать не рекомендуется, так как файл выгрузки может иметь размер в несколько сотен мегабайт.
  3. Откройте ваш XML-файл в Notepad++.
  4. Вызовите окно поиска комбинацией клавиш Ctrl + F.
  5. В строке поиска введите фамилию сотрудника или дату из ошибки (например, дату начала рабочего года 01.09.2012).
  6. Поиск переведет вас на блок XML-структуры, описывающей записи регистра сведений. Примерная структура блока выглядит так:
    
    <РегистрСведенийЗапись.НачальныеОстаткиОтпусков>
        <Сотрудник>Иванов Иван Иванович</Сотрудник>
        <ВидЕжегодногоОтпуска>Основной</ВидЕжегодногоОтпуска>
        <РабочийГодНачало>2012-09-01</РабочийГодНачало>
        <РабочийГодОкончание>2013-08-31</РабочийГодОкончание>
        <КоличествоДней>28</КоличествоДней>
    </РегистрСведенийЗапись.НачальныеОстаткиОтпусков>
    
  7. Проанализируйте соседние строки XML-кода. Вы обязательно обнаружите точно такой же блок для этого же сотрудника с идентичными датами периодов работы и видом отпуска.
  8. Выделите один из этих двух дублирующих блоков (открывающий тег <РегистрСведенийЗапись...> до закрывающего тега </РегистрСведенийЗапись...>) и аккуратно удалите его из файла с помощью клавиши Delete.
  9. Сохраните изменения в файле.
  10. В базе ЗУП 3.1 запустите загрузку данных через обработку Универсальный обмен данными XML, указав путь к нашему отредактированному файлу. Загрузка пройдет без ошибок, так как дублирующая запись была ликвидирована.

---

Дополнительные рекомендации по обновлению релизов

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

Перед тем как приступать к переносу, настоятельно рекомендуем выполнить следующие подготовительные шаги:

Соблюдение этих простых рекомендаций и использование описанных в статье методик позволит вам успешно преодолеть технические сложности при миграции данных и обеспечить надежный старт работы в новой конфигурации!

← На главную