Почему 1С не даёт записать элемент с таким кодом и что с этим делать

· 10 мин

Содержание

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

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

Зачем 1С следит за уникальностью кодов

Код — это короткий идентификатор элемента для человека. По нему ищут номенклатуру на складе, сверяют контрагентов между базами, подставляют значения в загрузку из Excel. Если у двух разных товаров код 00-00000125, любая операция «найти по коду» вернёт не тот элемент.

За проверку отвечают свойства объекта метаданных, которые разработчик задаёт в Конфигураторе:

  • 🔢 Контроль уникальности — включает проверку при записи. Сняли флаг — дубли пишутся молча.
  • 🗂 Серии кодов — где именно код должен быть уникален: во всём справочнике, в пределах подчинения (внутри одной группы) или в пределах подчинения владельцу (например, внутри одного контрагента для договоров).
  • ⚙️ Автонумерация — платформа сама подставляет код при записи нового элемента с пустым полем «Код».
  • 🏷 Префикс — в типовых конфигурациях к коду добавляется префикс базы или организации, например БП- или 00-.

От серии кодов зависит, где искать дубль. Если в справочнике «Договоры» серия «в пределах подчинения владельцу», то два договора с кодом 000000001 у разных контрагентов — норма, а у одного — ошибка.

Откуда берутся дубли кодов

Причин немного, и каждая оставляет свой след.

  • ✍️ Код ввели вручную. Пользователь набрал код, который уже занят. Самый безобидный случай.
  • 📋 Элемент скопировали. При копировании карточки поле «Код» в типовых формах очищается, но доработанная форма может переносить его как есть.
  • 🔄 Пришёл обмен. При загрузке данных по обмену платформа работает в режиме загрузки и уникальность кодов не проверяет. Дубль приезжает тихо, а ошибку видит тот, кто потом откроет и сохранит один из двух элементов.
  • 📥 Загрузка из Excel или внешней обработкой. Обработка может писать элементы в том же режиме загрузки или задавать код явно.
  • 🧩 Две базы без префиксов. Филиал и головной офис нумеруют справочник с 000000001. При объединении или первой синхронизации коды пересекаются.
  • 💥 Сбой записи. Аварийное отключение посреди транзакции или повреждённые индексы в файловой базе оставляют физические дубли в таблицах.

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

Как исправить ошибку «Код не уникален»: пошагово

Порядок такой: сначала самое простое и безопасное, в конце — действия с базой целиком.

Шаг 1. Дайте 1С назначить код самой

  1. Откройте карточку элемента, на котором появилась ошибка.
  2. Сотрите содержимое поля «Код» полностью.
  3. Нажмите «Записать».

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

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

Шаг 2. Найдите элемент-дубль

  1. Откройте список справочника.
  2. Если колонки «Код» нет, добавьте её: Еще → Изменить форму, отметьте поле «Код».
  3. Отсортируйте список по коду или найдите значение через строку поиска (сочетание Alt+F открывает расширенный поиск по колонке).
  4. Отключите иерархический просмотр, если справочник разбит на группы: дубль может лежать в другой папке.

Сравните два найденных элемента. Возможны три ситуации:

Что увиделиЧто делать
Это два разных объекта (разные товары, разные контрагенты)Перенумеруйте один из них (шаг 1)
Это один и тот же объект, заведённый дваждыОбъедините дубли (шаг 3)
Второй элемент помечен на удалениеУдалите его через удаление помеченных или снимите пометку и перенумеруйте

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

Шаг 3. Объедините настоящие дубли

Если в базе два «Ромашка ООО» с одним кодом, перенумерация оставит два контрагента, по которым будут разбросаны документы. Правильнее объединить их в один.

В типовых конфигурациях на библиотеке стандартных подсистем это делается двумя способами:

  • в списке справочника выделите оба элемента и найдите в меню Еще команду объединения выделенных элементов — программа предложит выбрать основной, перенесёт на него все ссылки, а лишний пометит на удаление;
  • для массового поиска в БП 3.0 и ЗУП 3.1 есть обработка «Поиск и удаление дублей» в разделе Администрирование → Обслуживание, группа «Корректировка данных».

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

Шаг 4. Найдите все дубли запросом

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

ВЫБРАТЬ
    Спр.Код КАК Код,
    КОЛИЧЕСТВО(Спр.Ссылка) КАК Элементов
ИЗ
    Справочник.Номенклатура КАК Спр
СГРУППИРОВАТЬ ПО
    Спр.Код
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(Спр.Ссылка) > 1
УПОРЯДОЧИТЬ ПО
    Код

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

Шаг 5. Перенумеруйте программно (для разработчика)

Если дублей много и каждый надо просто перенумеровать, это делается кодом во внешней обработке:

Объект = Ссылка.ПолучитьОбъект();
Объект.Код = "";
Объект.УстановитьНовыйКод();
Объект.Записать();

УстановитьНовыйКод() берёт следующий свободный код с учётом серии кодов. Запускайте обработку на копии базы, проверьте результат и только потом повторите в рабочей.

Код вроде свободен, а 1С всё равно ругается

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

Диагностика: выберите симптом

Проверка и исправление базы в Конфигураторе

Когда дубль физический (после сбоя питания или аварийного завершения), его лечат средствами платформы.

  1. Сделайте резервную копию: выгрузите базу в .dt через Администрирование → Выгрузить информационную базу в Конфигураторе или скопируйте каталог файловой базы.
  2. Откройте Администрирование → Тестирование и исправление.
  3. Отметьте «Реиндексация таблиц информационной базы» и «Проверка логической целостности информационной базы».
  4. Режим — «Тестирование и исправление», запустите проверку.

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

Для клиент-серверной базы реиндексацию также выполняют средствами СУБД, но удалять «лишние» строки напрямую в SQL нельзя: так рвутся ссылки, и 1С потом не сможет открыть связанные документы.

Особенности после обмена данными

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

Разберитесь в трёх вопросах:

  1. Какая база создаёт элементы. Если номенклатуру заводят только в УТ, а в БП она приходит обменом, то дубль в БП нужно исправлять в УТ — иначе следующий обмен вернёт его обратно.
  2. Есть ли у баз разные префиксы. В БП 3.0 префикс базы задают в Администрирование → Синхронизация данных. Если у двух баз одинаковый префикс или его нет совсем, автонумерация в обеих идёт из одной серии, и коды неизбежно пересекаются.
  3. По каким полям обмен сопоставляет объекты. Если правило ищет элемент по коду, а коды в базах не совпадают, обмен создаст новый элемент вместо поиска существующего — и получится дубль по наименованию.

Порядок исправления после обмена:

  • задайте базам разные префиксы до следующей синхронизации;
  • объедините дубли в базе-источнике;
  • проведите синхронизацию и убедитесь, что в приёмнике лишние элементы помечены на удаление или заменены;
  • удалите помеченные объекты.

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

Что делать с «Номер не уникален» в документах

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

Отсюда типичные случаи:

  • 📅 документ перенесли датой в другой год, где такой номер уже есть;
  • 🏢 сменили организацию в документе, а префикс номера остался от старой;
  • 📥 документы загрузили обменом из базы с той же нумерацией.

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

Как не допустить повторения

Чтобы ошибка не возвращалась, нужны несколько правил на уровне базы и людей.

Настройки против дублей кодов
Выполнено: 0 / 6

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

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

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