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