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

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

«Значение поля Код не уникально» в 1С: причины и способы исправления

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

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

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

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

Почему 1С требует уникальности кода

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

Уникальность проверяется в пределах всего справочника или в пределах серии/периода — это зависит от настроек конкретного объекта. Например, у справочника «Номенклатура» обычно действует сквозная уникальность по всем элементам, а у документов номер часто уникален в пределах года или префикса организации. Понимание области контроля важно: один и тот же код может быть допустим в разных подразделениях, но запрещён в рамках всего справочника.

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

Как определить источник проблемы

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

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

Поищите этот код в списке справочника — найдёте существующий элемент

Ошибка при обмене или загрузке из файлаВ загружаемых данных есть коды, совпадающие с существующими

Проверьте настройки сопоставления в обмене; посмотрите, какие элементы не загрузились

Ошибка у всех новых элементов подрядСбилась автонумерация — счётчик выдаёт занятые коды

Требуется обновление нумерации справочника

Дубль не находится поиском, но ошибка естьВозможно повреждение индексов базы

Нужно тестирование и исправление информационной базы

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

Исправление при ручном вводе кода

Самый простой сценарий — пользователь вручную заполнил поле «Код» значением, которое уже существует. Такое случается, когда в компании принята содержательная кодировка (например, коды поставщиков по ИНН или артикулы номенклатуры) и сотрудники вводят коды самостоятельно.

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

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

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

Исправление при обмене данными и загрузке

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

Что проверить в первую очередь:

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

Если дубли уже загружены частично, не пытайтесь удалять их вручную по одному — используйте штатную пометку на удаление с последующей обработкой «Удаление помеченных объектов», либо откатите загрузку, восстановив копию, и повторите обмен с исправленными настройками.

Восстановление автонумерации

Характерный признак сбитой нумерации: ошибка возникает у каждого нового элемента, даже если поле «Код» никто не трогает. Такое происходит после загрузки данных с явным указанием кодов (счётчик платформы о них «не знает»), после изменения длины кода в конфигураторе или после восстановления базы из копии.

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

Способы восстановления:

  • Вручную для разовой ситуации. Найдите максимальный существующий код (отсортируйте список по коду по убыванию), затем при создании нового элемента введите в поле «Код» значение больше максимального — платформа скорректирует счётчик, и дальше нумерация пойдёт корректно.
  • Обработкой обновления нумерации. В типовых конфигурациях и на диске ИТС есть служебные обработки обновления нумерации объектов. Они перебирают существующие элементы и устанавливают счётчик в правильное значение. Запускать такие обработки следует в монопольном режиме или в период минимальной активности пользователей.
  • Программно. Администратор или разработчик может выполнить метод платформы ОбновитьНумерациюОбъектов для нужного вида объектов через консоль кода.
bsl
ОбновитьНумерациюОбъектов(Метаданные.Справочники.Номенклатура);

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

Повреждение индексов: когда дубля нет, а ошибка есть

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

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

Если после тестирования и исправления ошибка сохраняется, проблема глубже — возможно, повреждена сама таблица или есть особенности в расширениях конфигурации. На этом этапе разумно привлечь специалиста с опытом администрирования 1С и СУБД: самостоятельные эксперименты с прямым редактированием таблиц базы данных могут привести к потере данных.

Профилактика: как не допустить повторения ошибки

Большинство случаев неуникальности кодов предотвращаются организационными и настроечными мерами:

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

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

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

Код присваивается автоматически, запись проходит без сообщений

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

Ошибка неуникальности повторяется — нумерация не восстановлена

Поиск по проблемному коду
Норма

Находится ровно один элемент — тот, что должен хранить этот код

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

Найдено несколько элементов или ни одного при сохраняющейся ошибке

Обмен данными
Норма

Все объекты загружаются, протокол без ошибок неуникальности

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

В протоколе остаются отклонённые объекты

Частые вопросы

Можно ли просто отключить контроль уникальности кода?

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

Почему ошибка возникает у документа, хотя речь о поле «Код»?

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

Как найти все дубли кодов в большом справочнике?

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

Ошибка появилась после переноса данных из старой базы. Что делать в первую очередь?

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

Может ли ошибка быть связана с правами пользователя?

Напрямую — нет, контроль уникальности не зависит от прав. Но косвенная связь возможна: если пользователь не видит часть элементов из-за ограничения доступа на уровне записей (RLS), он может не найти дубль поиском, хотя тот существует. В такой ситуации пусть поиск выполнит администратор с полными правами.

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

Помеченный на удаление элемент всё ещё физически существует в базе, поэтому его код считается занятым. Варианты: выполнить обработку «Удаление помеченных объектов», чтобы освободить код, либо снять пометку и использовать существующий элемент вместо создания нового.

Итог

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

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