К статье
Практический материал

Справочники и Данные · 12 мин

Код не уникален в 1С: как исправить ошибку

Ошибка «Код не уникален» в 1С: почему возникает при записи справочников, как найти дубли, сбросить нумерацию и настроить контроль уникальности.

Ошибка «Значение поля "Код" не уникально» (в ранних версиях — «Код не уникален») появляется при записи элемента справочника или документа, когда программа обнаруживает, что присвоенный код уже используется другим объектом. Пользователь видит сообщение, запись блокируется, и элемент сохранить невозможно, пока конфликт не устранён.

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

Исправление занимает от пары минут до получаса в зависимости от сценария. Ниже разобраны диагностика, поиск дублей, сброс нумерации, настройки справочника и меры профилактики, включая особенности распределённых баз и обменов.

Как работает контроль уникальности кодов в 1С

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

Важный нюанс: уникальность проверяется в пределах справочника целиком, а если справочник подчинённый или иерархический — в пределах владельца или всей таблицы в зависимости от настроек конфигурации. Два разных справочника, например «Номенклатура» и «Контрагенты», могут иметь одинаковые коды без конфликта.

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

Как определить причину: быстрая диагностика

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

Откройте справочник, отсортируйте список по колонке «Код» и найдите проблемное значение. Если элементов с таким кодом два и больше — перед вами классические дубли. Если код один, но новые элементы всё равно не записываются с этим значением — сбит нумератор.

Ошибка при создании нового элементаСбит нумератор

Проверьте, какой код предлагает программа, и есть ли уже элемент с таким кодом

Ошибка при записи старого элементаКод изменён вручную или дубль

Сравните код с другими элементами справочника через сортировку

Ошибка после обмена или загрузкиКоды пришли из другой базы

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

Ошибка появляется периодическиКод «упёрся» в длину

Проверьте длину кода справочника и максимальное значение счётчика

Исправление дублей через поиск и удаление дублей

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

Обработка сравнивает элементы по выбранным полям, показывает найденные группы дублей и позволяет объединить их: один элемент остаётся основным, остальные помечаются на удаление, а все ссылки из документов и других справочников автоматически перенаправляются на основной элемент. Это критически важно — простое удаление дубля оставило бы в документах «битые» ссылки.

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

Порядок устранения дублей
  1. 1
    Сделайте резервную копию информационной базы
  2. 2
    Откройте «Администрирование» → «Обслуживание» → «Поиск и удаление дублей»
  3. 3
    Выберите проблемный справочник и задайте правила поиска (по коду или по наименованию)
  4. 4
    Запустите поиск и просмотрите найденные группы дублей
  5. 5
    Назначьте основной элемент в каждой группе и выполните объединение
  6. 6
    Проверьте документы, где участвовали дубли, и повторно запишите проблемный элемент

Как сбросить или обновить нумератор

Если дублей нет, а ошибка возникает при создании новых элементов, проблема в отставшем нумераторе. Типичный сценарий: в пустую базу загрузили данные из другой системы, у загруженных элементов коды 000000001–000005000, а счётчик остался на нуле. Первый же новый элемент получает код 000000001 — и запись падает.

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

Программный вариант — метод ОбновитьНумерациюОбъектов через внешнюю обработку или консоль кода. Он пересчитывает счётчики по фактическим данным для указанного вида метаданных или для всей конфигурации сразу.

bsl
// Выполнить в консоли кода под полными правами
ОбновитьНумерациюОбъектов(Метаданные.Справочники.Номенклатура);
// Или для всей конфигурации:
ОбновитьНумерациюОбъектов();

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

Настройки справочника, которые влияют на уникальность

Если ошибка повторяется систематически, проверьте настройки справочника в конфигураторе. Откройте свойства справочника и обратите внимание на три параметра.

  • Контроль уникальности — должен быть включён. Если его отключали «для скорости загрузки» и забыли вернуть, дубли могли накопиться.
  • Автонумерация — при включённой платформа сама выдаёт коды. Если выключена, коды присваивает код конфигурации или пользователь, и ответственность за уникальность ложится на разработчика.
  • Длина кода — при числовом коде длиной 9 максимум около миллиарда элементов, но если код строковый с префиксами, полезная ёмкость меньше. При переполнении счётчик начинает выдавать занятые значения.

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

Особый случай: обмены и распределённые базы

В распределённых информационных базах (РИБ) и при обменах между конфигурациями конфликт кодов — штатная ситуация, если не настроены префиксы. Две базы независимо создают элементы, и обе выдают код 000000123. При обмене вторая запись не может записаться.

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

Если конфликт уже случился при обмене, в регистрации изменений и в протоколе обмена будет видно, какой объект не записался. Такие объекты нужно обработать вручную: либо перенумеровать в базе-источнике, либо сопоставить с существующим элементом в приёмнике через механизм сопоставления объектов.

Маршрут решения

Как выбрать действие

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

Типичные ошибки при исправлении

Типичные ошибки
01
Удаление дубля напрямую без переноса ссылок — в документах остаются «Объект не найден», и отчёты начинают расходиться
02
Исправление нумератора установкой малого кода — через несколько элементов счётчик снова догоняет занятые значения
03
Отключение контроля уникальности «временно» без даты возврата — дубли копятся незаметно
04
Исправление кодов только в одной базе при активном обмене — при следующей синхронизации конфликт возвращается
05
Редактирование кодов в живой базе в рабочее время — пользователи в этот момент создают новые элементы со старыми кодами

Отдельная ловушка — ручная правка кодов через групповое изменение реквизитов. Обработка «Групповое изменение реквизитов» позволяет массово переписать коды, но при включённом контроле уникальности промежуточные значения могут конфликтовать между собой. Выполняйте такие операции порциями и всегда сначала на копии.

Как проверить, что проблема решена

После любого из способов исправления выполните контрольные проверки. Они занимают несколько минут, но гарантируют, что ошибка не вернётся через неделю.

Контрольные точки

Как проверить результат

Создание нового элемента
Норма

Элемент записывается, код больше максимального существующего

Тревожный признак

Снова ошибка уникальности или код из «хвоста» занятых значений

Сортировка справочника по коду
Норма

Каждый код встречается один раз

Тревожный признак

Есть повторяющиеся значения кода

Документы со ссылками на бывшие дубли
Норма

Открываются, ссылка ведёт на существующий элемент

Тревожный признак

В полях отображается «Объект не найден»

Обмен данными (если есть)
Норма

Протокол без ошибок записи объектов

Тревожный признак

В протоколе конфликты уникальности по тем же кодам

Для файловых баз дополнительно полезно запустить «Тестирование и исправление» с проверкой логической и ссылочной целостности — это выявит битые ссылки, оставшиеся от старых дублей. Для клиент-серверных баз ссылочную целостность контролирует СУБД, но логическая проверка всё равно не помешает.

Если ошибка возникла у рядового пользователя, а у администратора не воспроизводится, проверьте, не создаёт ли пользователь элемент копированием: при копировании код копируется вместе с остальными реквизитами, и до записи его нужно очистить или дать платформе присвоить новый. В типовых конфигурациях это обычно обработано, но в самописных справочниках — частая причина.
ПЗ
Практическое замечание

FAQ

Можно ли просто отключить контроль уникальности, чтобы ошибка исчезла?

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

Почему ошибка появилась после переноса данных из другой программы?

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

Что будет, если удалить дубль напрямую, а не через обработку?

Во всех документах, регистрах и других справочниках, где была ссылка на удалённый элемент, останется «битая» ссылка вида «Объект не найден». Отчёты по этим документам исказятся, а проведение может падать. Используйте «Поиск и удаление дублей» — он перенаправляет ссылки на основной элемент.

Ошибка возникает у документов, а не у справочников — это то же самое?

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

Как предотвратить проблему при обмене между двумя базами?

Задайте каждой базе уникальный префикс в настройках синхронизации — тогда коды новых элементов будут различаться уже по префиксу, и коллизии исключены. Дополнительно следите за протоколами обмена: незаписанные объекты видны там сразу и разбираются по одному.

Нужны ли права администратора для исправления?

Для обновления нумерации и запуска обработки дублей — да, нужны полные права или права администратора. Рядовой пользователь может только сообщить о проблеме и указать код из сообщения об ошибке — это ускорит диагностику.

Итог

Что важно запомнить

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