При обновлении конфигурации "1С:Зарплата и управление персоналом" до релиза 3.1.20.71 некоторые пользователи сталкиваются с критической ошибкой, которая прерывает процесс: "Запись с такими ключевыми полями существует! : Данные Отпусков Карточки Сотрудника". Эта проблема не является массовой и проявляется не на всех базах, что указывает на ее зависимость от накопленных данных. Давайте разберем, почему возникает эта ошибка и как ее можно исправить.
Чтобы понять суть проблемы, проанализируем изменения в релизе. Начиная с версий 3.1.20, разработчики 1С ввели новые регистры сведений для оптимизации хранения и отображения информации об отпусках, в частности, в личной карточке Т-2. Ключевым в нашем случае является регистр сведений Данные отпусков карточки сотрудника.
В процессе обновления конфигурации система запускает фоновую процедуру, которая пытается заполнить этот новый регистр на основании уже существующих в базе документов — Отпуск, Больничный лист и других, влияющих на остатки отпусков. Ошибка "Запись с такими ключевыми полями существует!" возникает в тот момент, когда программа пытается создать в новом регистре запись, которая дублирует уже созданную по ключевым полям (например, по сотруднику и периоду). Чаще всего это происходит из-за "проблемных" документов из прошлых периодов. Это могут быть:
В результате автоматический механизм переноса данных "спотыкается" о такой документ и прерывает обновление. В одном из случаев, описанных на форуме, виновником оказался документ Больничный лист за 2018 год.
Поскольку ошибка связана с конкретными данными, универсального патча для нее может не быть. Однако существует проверенный способ, который позволяет обойти проблему и успешно завершить обновление. Рассмотрим его по шагам.
Определение проблемного документа.
Самый сложный этап — найти тот самый документ, который вызывает конфликт. Обычно в тексте ошибки или в журнале регистрации можно найти ссылку на объект, вызвавший проблему. Если явного указания нет, придется действовать методом анализа. В обсуждаемом случае система "заткнулась" на документе Больничный лист 2018 года. Ищите документы, связанные с отпусками или их отменой, за прошлые периоды, особенно те, которые исправлялись.
Временная пометка документа на удаление.
После того как вы нашли предполагаемый "проблемный" документ, откройте его и пометьте на удаление. Важно: не удаляйте его окончательно! Нам нужно лишь временно исключить его из обработки при обновлении базы данных.
Повторный запуск обновления.
Запустите процесс обновления конфигурации заново (F5 в режиме Конфигуратора). Поскольку проблемный документ теперь помечен на удаление, обработчики обновления его проигнорируют, и процесс должен завершиться успешно.
Снятие пометки на удаление и перепроведение документа.
После успешного завершения обновления вернитесь в режим "Предприятие". Найдите ваш документ, снимите с него пометку на удаление и заново проведите его. Теперь, когда структура базы данных уже обновлена, проведение документа будет выполнено по новым алгоритмам. Это гарантирует, что в новый регистр Данные Отпусков Карточки Сотрудника будут корректно записаны все необходимые сведения из этого документа.
Этот метод является безопасным и логичным. Вы не теряете данные, а лишь меняете последовательность их обработки: сначала обновляете структуру базы, а затем, уже в новой структуре, корректно регистрируете данные из "сложного" документа. Таким образом, вы обходите ошибку автоматического переноса и добиваетесь целостности данных.