Почему при обновлении 1С код справочника становится неуникальным и как это исправить?

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

При обновлении конфигураций (например, при переходе с УТ 11.1 на УТ 11.2) специалисты часто сталкиваются с предупреждением конфигуратора во время реорганизации базы данных: «Код справочника стал неуникальным». При этом проверка справочника через консоль запросов до обновления может показывать, что элементы с указанными кодами существуют в единственном экземпляре.

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

Выясним причину ошибки: механика предопределенных данных

Проанализируем архитектурные особенности платформы 1С:Предприятие. Начиная с платформы 8.3, связь между предопределенными элементами в метаданных конфигурации и физическими записями в базе данных осуществляется через служебный реквизит ИмяПредопределенныхДанных.

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

  1. Потеря связи с метаданными. Если до процедуры обновления у предопределенного элемента в базе данных по какой-то причине очистился или изменился реквизит ИмяПредопределенныхДанных (например, из-за особенностей синхронизации данных или некорректной отвязки), платформа при реорганизации базы создает из конфигуратора новый предопределенный элемент с исходным кодом. В итоге в базе образуются два элемента с одинаковыми кодами.
  2. Влияние обменов данными. При использовании механизмов интеграции и загрузке объектов в режиме ОбменДанными.Загрузка = Истина платформенные проверки уникальности кодов отключаются. Загруженные из другой базы (например, из БП 3.0) элементы могут занять код, зарезервированный разработчиками для новых предопределенных элементов в обновляемой конфигурации.
  3. Изменения структуры в новых релизах. В процессе рефакторинга типовых решений разработчики 1С могут изменять состав предопределенных элементов справочников (например, СтатьиДвиженияДенежныхСредств), вводить новые элементы или менять их коды.

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

Разберем по шагам варианты решения проблемы

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

Способ 1. Запуск процедур обновления БСП

В типовых конфигурациях 1С обработчики обновления Библиотеки Стандартных Подсистем (БСП) автоматически выполняют перенумерацию и слияние служебных элементов. Чтобы запустить этот процесс:

  1. Завершим процедуру обновления конфигурации в Конфигураторе, согласившись с предупреждением о неуникальности кодов.
  2. Запустим базу данных в режиме «1С:Предприятие» под учетной записью с административными правами.
  3. Дождемся завершения выполнения регламентных процедур обновления информационной базы. Во многих случаях БСП сама найдет задвоившиеся элементы, переименует коды или объединит их.

Способ 2. Использование типовой обработки «Поиск и удаление дублей»

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

  1. Откроем в режиме «1С:Предприятие» типовую обработку Поиск и удаление дублей (находится в разделе «Администрирование» — «Обслуживание» — «Корректировка данных»).
  2. Выберем проблемный справочник (например, СтатьиДвиженияДенежныхСредств) и настроим условие сравнения по совпадению реквизита Код.
  3. В списке найденных дублей определим главный элемент — им должен быть действующий предопределенный элемент (у которого заполнено поле ИмяПредопределенныхДанных и отображается соответствующий значок).
  4. Выполним объединение элементов. Обработка перенесет все ссылки с дублирующего элемента на корректный предопределенный объект и пометит дубль на удаление.

Способ 3. Ручное изменение кода или удаление элемента без ссылок

Если на образовавшийся дублирующий элемент нет ссылок в информационной базе, выполним его ручную adjustment-корректировку:

  1. Откроем справочник в режиме «1С:Предприятие».
  2. Найдем дублирующий элемент, у которого отсутствует привязка к предопределенным данным (значение Предопределенный равно Ложь).
  3. Если код недоступен для редактирования интерактивно, изменим код элемента программно или с помощью универсальной обработки типа «Групповая изменение реквизитов», присвоив ему любой свободный префикс или номер.
  4. Если элемент является лишним и не содержит движений, пометим его на удаление и выполним окончательное удаление через стандартную процедуру Удаление помеченных объектов.

Профилактика возникновения дублей при обновлениях

Чтобы избежать проблем с неуникальностью кодов при последующих обновлениях, придерживаемся следующих правил:

  1. Последовательное обновление: выполняем обновление конфигурации строго по цепочке релизов, рекомендованной производителем, обязательно запуская базу в режиме «1С:Предприятие» после каждого шага для отработки процедур БСП.
  2. Тестирование и исправление: перед крупными обновлениями запускаем процедуру «Тестирование и исправление» в Конфигураторе с включенными флагами Проверка логической целостности и Реорганизация информации.
  3. Контроль обменов: при настройке синхронизации данных проверяем правила конвертации объектов для предопределенных элементов, чтобы избежать затирания служебных реквизитов связи с метаданными.
← На главную