Справочники и Данные · 11 мин
Что значит в 1С ошибка «код не уникален» и как её исправить
Почему 1С пишет «код не уникален»: причины ошибки в справочниках и документах, как найти дубль, исправить нумерацию и настроить контроль уникальности кода.
Ошибка «Код не уникален» появляется в 1С при сохранении элемента справочника, документа или другого объекта, у которого поле «Код» уже занято другой записью. Платформа 1С контролирует уникальность кодов в пределах объекта метаданных: если вы вручную ввели код, который уже существует, запись не сохранится, пока конфликт не будет устранён.
Чаще всего проблема возникает в справочниках «Номенклатура», «Контрагенты», «Сотрудники», а также при ручном создании документов после обмена данными между базами. Причина почти всегда одна из трёх: ручной ввод уже занятого кода, сбой автонумерации или перенос данных из другой информационной базы, где действовала своя нумерация.
Хорошая новость: ошибка не разрушает данные. Это защитный механизм платформы, который не даёт создать две записи с одинаковым идентификатором. Ниже разберём, как быстро найти дубль, исправить код и предотвратить повторение ситуации.
Как 1С контролирует уникальность кодов
У каждого справочника, документа, плана счетов и ряда других объектов в конфигураторе есть свойство «Контроль уникальности». Если оно включено, платформа при записи проверяет, нет ли в базе другого объекта с таким же кодом, и блокирует сохранение дубликата.
Для справочников уникальность может действовать в разных пределах: в рамках всего справочника, в пределах подчинения владельцу или внутри группы (для иерархических справочников). Поэтому один и тот же код иногда допустим в разных группах, но запрещён внутри одной.
Для документов контролируется уникальность номера в пределах периода нумерации (обычно год) и, если задано, в пределах префикса. Ошибка «номер не уникален» у документа — та же ситуация, что и с кодом справочника.
Основные причины появления ошибки
Первая и самая частая причина — ручной ввод кода, который уже существует. Такое случается, когда пользователь копирует элемент, меняет наименование, но забывает изменить код, либо вводит артикул или табельный номер, уже присвоенный другой записи.
Вторая причина — сбой автонумерации. Если кто-то вручную ввёл код «вперёд» (например, 000001500 при текущем счётчике 000000200), автонумератор при достижении этого значения начнёт генерировать занятые коды, и ошибка будет повторяться при создании каждого нового элемента.
Третья причина — обмен данными между базами. При загрузке из другой информационной базы приходят объекты с чужими кодами. Если нумерация в базах пересекается, при записи загруженных объектов возникают конфликты уникальности.
Реже встречается четвёртая причина — длина кода. Если код введён с большим числом знаков, чем позволяет длина кода объекта, значение обрезается, и два разных кода могут превратиться в одинаковые.
Проверьте, существует ли уже запись с таким кодом
Сравните последний свободный код с тем, что предлагает программа
Проверьте настройки префиксов в узлах обмена
Проверьте нумерацию документов за текущий год
Как быстро исправить ошибку у одного элемента
Если конфликт возник при создании новой записи, самое простое решение — очистить поле «Код» и записать объект. При включённой автонумерации 1С сама присвоит следующий свободный код. В большинстве типовых конфигураций код заполняется автоматически, и поле можно оставить пустым.
Если код должен быть осмысленным (например, табельный номер сотрудника или артикул), найдите, какая запись уже занимает нужное значение. Откройте список справочника, отсортируйте по колонке «Код» или используйте поиск по коду — так вы увидите существующий элемент и сможете выбрать свободное значение.
Иногда полезно не менять код нового элемента, а проверить, не является ли существующая запись дублем. Если две карточки контрагента описывают одну компанию, правильнее объединить их штатной обработкой поиска и удаления дублей, чем плодить записи с разными кодами.
- 1Прочитайте текст сообщения: в нём обычно указан конфликтующий код
- 2Откройте список справочника и найдите запись с этим кодом
- 3Определитесь: это дубль существующей записи или действительно новый элемент
- 4Если новый элемент — очистите поле кода или введите свободное значение
- 5Запишите объект и убедитесь, что ошибка не повторилась
- 6Если запись-дубль лишняя — пометьте её на удаление или объедините через обработку поиска дублей
Что делать при сбое автонумерации
Признак сбоя: ошибка появляется при создании каждого нового элемента, а предлагаемый программой код уже существует в базе. Это значит, что счётчик автонумерации отстал от фактически занятых кодов.
В типовых конфигурациях на управляемых формах часто есть команда «Обновить нумерацию» или подобная — она вызывается из формы элемента или списка. Платформа при записи также умеет автоматически освобождать занятый номер: при попытке записи с дублирующимся номером документа система предложит присвоить новый.
Если штатных средств недостаточно, администратор может использовать обработку обновления нумерации объектов (входит в состав стандартных подсистем БСП во многих конфигурациях). Она пересчитывает счётчики по фактически занятым кодам и устраняет конфликт.
Ошибка при обмене данными между базами
Если ошибка возникает регулярно после синхронизации, причина почти всегда в пересекающейся нумерации узлов обмена. Две базы независимо присваивают одинаковые коды, и при загрузке объектов возникает конфликт.
Стандартное решение — префиксы информационных баз. В настройках синхронизации (или в разделе «Префиксы информационной базы») каждой базе назначается уникальный префикс, который добавляется к кодам и номерам создаваемых объектов. Тогда диапазоны нумерации не пересекаются.
Проверьте, что префикс задан в каждой базе-участнице обмена и что префиксы различаются. После настройки новые объекты будут создаваться с уникальными кодами, а конфликты прекратятся для всего, что создано после изменения настроек.
Как выбрать действие
Настройки в конфигураторе: что проверить разработчику
Если ошибка возникает систематически и штатные средства не помогают, разработчику стоит проверить свойства объекта в конфигураторе: включён ли контроль уникальности, какая задана длина кода, включена ли автонумерация и какой выбран вид периодичности нумерации для документов.
Обратите внимание на свойство «Серии кодов» у справочников: значение «В пределах подчинения» или «В пределах группы» меняет область уникальности. Иногда конфликт возникает именно потому, что пользователь ожидает уникальность внутри группы, а контроль настроен на весь справочник.
Для обменов проверьте, не отключён ли контроль уникальности при загрузке (параметр «ОбменДанными.Загрузка»). Запись с таким параметром обходит ряд проверок, и дубли могут появляться молча — тогда ошибка всплывёт позже, при обычной интерактивной записи.
Как проверить, что проблема решена
После исправления создайте тестовый элемент справочника или документ и запишите его. Если код присвоился автоматически и запись прошла без сообщений — механизм работает корректно.
Для массовых случаев полезно найти все дубли кодов: в типовых конфигурациях есть обработка «Поиск и удаление дублей» (раздел администрирования), а администратор может выполнить запрос по группировке кодов. Если дублей нет, а новые записи создаются без ошибок — проблема закрыта.
Как проверить результат
Код присваивается автоматически, запись сохраняется
Снова появляется сообщение о неуникальности
Находится ровно одна запись
Несколько записей с одинаковым кодом
Нумерация идёт последовательно без пропусков и дублей
Новые документы получают уже занятые номера
Обмен завершается без ошибок записи
В протоколе обмена ошибки уникальности
Типичные ошибки при устранении проблемы
Отдельная ошибка — пытаться «исправить» ситуацию удалением существующей записи с занятым кодом, не проверив, есть ли на неё ссылки. Удаление элемента, используемого в документах, приведёт к битым ссылкам. Сначала выполните поиск ссылок на объект, и только если их нет — помечайте запись на удаление.
Что важно запомнить
Ошибка «код не уникален» — это защита платформы от дублей, а не сбой данных. Одиночный конфликт решается очисткой поля кода или выбором свободного значения. Повторяющиеся ошибки указывают на сбой автонумерации или отсутствие префиксов в обмене — тогда нужно обновить нумерацию и настроить префиксы. Перед массовыми изменениями кодов делайте резервную копию.
Частые вопросы
Можно ли просто отключить контроль уникальности, чтобы ошибка не появлялась?
Технически да, в конфигураторе это делается в свойствах объекта, но делать так не рекомендуется. Без контроля в базе появятся записи с одинаковыми кодами: поиск по коду станет неоднозначным, обмены данными могут сопоставлять не те объекты, а отчёты — выдавать неверные данные. Правильнее устранить причину конфликта.
Почему ошибка появляется, хотя я код вообще не вводил?
Значит, автонумератор предлагает уже занятый код. Такое бывает, если кто-то ранее вручную ввёл код «вперёд» или в базу загрузили данные с чужой нумерацией. Нужно обновить нумерацию штатной командой или обработкой, чтобы счётчик сдвинулся за фактически занятые значения.
Одинаковый код в разных группах справочника — это нормально?
Зависит от свойства «Серии кодов» в конфигураторе. Если выбрано «В пределах группы» или «В пределах подчинения», одинаковые коды в разных группах допустимы. Если «В пределах справочника» — код должен быть уникален везде, и дубль в другой группе вызовет ошибку.
Как найти все дубли кодов в базе?
В типовых конфигурациях используйте обработку «Поиск и удаление дублей» в разделе администрирования. Администратор также может построить запрос с группировкой по коду и подсчётом количества записей — все значения, где записей больше одной, и есть дубли.
Ошибка возникает у документов, а не у справочников — это то же самое?
Да, механизм тот же, только контролируется номер документа в пределах периода нумерации (обычно года) и префикса. При записи документа с занятым номером платформа обычно предлагает автоматически присвоить новый — достаточно согласиться.
После обмена с другой базой ошибки появляются постоянно. Что делать?
Настройте уникальные префиксы информационных баз в каждом узле обмена. Тогда объекты, созданные в разных базах, будут получать непересекающиеся коды, и конфликты уникальности прекратятся для всех новых записей.