Как исправить ошибку «Уже существует причина увольнения (сфр) с таким значением поля Код» при обновлении 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

При переходе на новые релизы конфигураций 1С:Бухгалтерия предприятия 3.0 или 1С:Зарплата и управление персоналом 3.1 (в частности, начиная с версии 3.0.194.23) многие пользователи сталкиваются с критической ошибкой. Процесс обновления прерывается сообщением: «Приложение не было обновлено на новую версию по причине: Уже существует причина увольнения (сфр) с таким значением поля Код (п3ч1с77тк)». Ситуация осложняется тем, что после перезапуска программа снова пытается завершить обновление и снова выдает ту же ошибку, создавая замкнутый круг. Рассмотрим подробно, почему это происходит и как исправить ситуацию несколькими способами.

Выясним причину конфликта данных

Разберем природу возникновения данной коллизии. В последних версиях программ 1С произошло масштабное обновление справочника ПричиныУвольненияПФР (или СФР) в связи с изменениями законодательства и введением новых форматов отчетности ЕФС-1. Разработчики добавили в конфигурацию новые предопределенные элементы, которые имеют жестко заданные коды, соответствующие классификатору СФР.

Ошибка возникает в одном из двух случаев:

  1. Ручной ввод: Пользователь ранее самостоятельно создал запись в этом справочнике с кодом п3ч1с77тк (или аналогичным), чтобы иметь возможность сдавать отчетность до выхода официального обновления.
  2. Сбой уникальности: При попытке платформы создать новый системный (предопределенный) элемент срабатывает проверка уникальности поля Код, так как в базе уже существует элемент с таким же строковым значением.

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

Способ 1: Использование параметра запуска для входа в систему

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

  1. Откроем Конфигуратор вашей информационной базы.
  2. Перейдем в меню Сервис — Параметры.
  3. На вкладке Запуск 1С:Предприятия найдем поле Параметры запуска.
  4. Введем туда следующую строку: /ОтключитьЛогикуНачалаРаботыСистемы
  5. Нажмем «ОК» и запустим сеанс 1С:Предприятия прямо из Конфигуратора (клавиша F5).

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

Способ 2: Корректировка через «Групповое изменение реквизитов»

Если войти в обычном режиме не удается или требуется более тонкая настройка, воспользуемся обработкой Групповое изменение реквизитов. Поскольку мы не можем открыть меню функций, нам придется вызвать её через окно ошибки, если оно предоставляет доступ к внешним обработкам, или через функции для технического специалиста (если вход все же удался с ключом).

Разберем алгоритм работы с обработкой:

  1. Выберем объект Справочник.ПричиныУвольненияПФР.
  2. Нажмем кнопку Дополнительные параметры и установим флаги Режим разработчика и Показывать служебные реквизиты. Это критически важно, так как поле Код часто защищено от редактирования в обычном режиме.
  3. В поле Отбор добавим условие: Код Равно "п3ч1с77тк".
  4. В колонке «Реквизит» найдем Код и установим новое значение, например п3ч1с77тк_дубль.
  5. Нажмем Изменить реквизиты.

После этого запустим программу в обычном режиме. Обработчик обновления увидит, что код свободен, создаст предопределенный элемент, и процесс завершится успешно.

Способ 3: Использование внешней обработки через окно ошибки

Рассмотрим вариант, когда программа выводит окно с сообщением об ошибке и кнопками «Перезапустить», «Завершить работу». Часто в меню Ещё этого окна доступен пункт Открыть внешнюю обработку. Это наш «черный ход» в систему.

Мы можем использовать стандартную обработку Поиск и удаление дублей или написать короткий код для разового исправления. Посмотрим на пример кода, который можно выполнить во внешней обработке для устранения проблемы:


Выборка = Справочники.ПричиныУвольненияПФР.Выбрать();
Пока Выборка.Следующий() Цикл
    Если Выборка.Код = "п3ч1с77тк" И НЕ Выборка.Предопределенный Тогда
        ОбъектОбъект = Выборка.ПолучитьОбъект();
        ОбъектОбъект.Код = "п3ч1с77тк_удал";
        ОбъектОбъект.Записать();
        Сообщить("Код элемента " + Выборка.Ссылка + " успешно изменен.");
    КонецЕсли;
КонецЦикла;

Этот код находит все непредопределенные элементы с конфликтующим кодом и переименовывает их. После выполнения этого скрипта обновление должно пройти без препятствий.

Способ 4: Работа с регистрами сведений (для продвинутых пользователей)

Иногда программа «зацикливается» не из-за самого справочника, а из-за записи в служебных регистрах, которые хранят состояние обновления. Проанализируем ситуацию, когда данные исправлены, но ошибка сохраняется. Нам нужно проверить регистр сведений Объекты с ошибками обновления.

Если в этом регистре висит запись о справочнике ПричиныУвольненияПФР, система может прерывать работу, даже не пытаясь выполнить код повторно. В таком случае необходимо очистить этот регистр. Также стоит заглянуть в регистр сведений Обработчики обновления, найти строку, отвечающую за заполнение классификатора причин увольнения, и убедиться, что её статус не заблокирован.

Способ 5: Тестирование и исправление в Конфигураторе

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

Перед выполнением этой процедуры обязательно создайте архивную копию базы (выгрузку .dt или копию файла .1cd), так как изменения необратимы.

Меры предосторожности и завершение работы

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

Важно: Для корректного заполнения отчетности ЕФС-1 необходимо использовать именно предопределенный элемент. Поэтому выполните следующие действия:

  1. Найдите все документы (Увольнение), где использовалась старая причина.
  2. Замените в них ссылку на новый предопределенный элемент (это удобно сделать через ту же обработку Поиск и удаление дублей, объединив элементы).
  3. Старый элемент пометьте на удаление и удалите через Удаление помеченных объектов.

Помните, что отсутствие актуальных бекапов — это большой риск. Всегда делайте резервную копию перед запуском обновления, даже если оно кажется незначительным. В случае возникновения подобных ошибок это позволит вам развернуть копию и внести исправления в данные до начала процесса обновления конфигурации, что гораздо проще и безопаснее. Автоматическое архивирование, обновление и тестирование баз 1С выполняется в «тихом» режиме без участия пользователя.

← На главную