Почему 1С не даёт записать элемент с таким кодом и что с этим делать
Содержание
Сообщение Код не уникален! значит, что в справочнике уже есть другой элемент с тем же кодом, а 1С проверяет уникальность кодов перед записью. Быстрое решение: очистите поле «Код» в карточке и нажмите «Записать» — при включённой автонумерации программа сама присвоит следующий свободный код. Если ошибка не уходит или код нужен именно этот, найдите элемент-дубль и разберитесь, кто из двух лишний.
Для документов то же самое звучит как Номер не уникален!, а для регистров сведений — как сообщение о том, что запись с такими ключевыми полями уже существует. Механизм у всех трёх общий, а способы исправления различаются. Ниже — по порядку: от правки одной карточки до восстановления базы после неудачного обмена.
Зачем 1С следит за уникальностью кодов
Код — это короткий идентификатор элемента для человека. По нему ищут номенклатуру на складе, сверяют контрагентов между базами, подставляют значения в загрузку из Excel. Если у двух разных товаров код 00-00000125, любая операция «найти по коду» вернёт не тот элемент.
За проверку отвечают свойства объекта метаданных, которые разработчик задаёт в Конфигураторе:
- 🔢 Контроль уникальности — включает проверку при записи. Сняли флаг — дубли пишутся молча.
- 🗂 Серии кодов — где именно код должен быть уникален: во всём справочнике, в пределах подчинения (внутри одной группы) или в пределах подчинения владельцу (например, внутри одного контрагента для договоров).
- ⚙️ Автонумерация — платформа сама подставляет код при записи нового элемента с пустым полем «Код».
- 🏷 Префикс — в типовых конфигурациях к коду добавляется префикс базы или организации, например
БП-или00-.
От серии кодов зависит, где искать дубль. Если в справочнике «Договоры» серия «в пределах подчинения владельцу», то два договора с кодом 000000001 у разных контрагентов — норма, а у одного — ошибка.
Откуда берутся дубли кодов
Причин немного, и каждая оставляет свой след.
- ✍️ Код ввели вручную. Пользователь набрал код, который уже занят. Самый безобидный случай.
- 📋 Элемент скопировали. При копировании карточки поле «Код» в типовых формах очищается, но доработанная форма может переносить его как есть.
- 🔄 Пришёл обмен. При загрузке данных по обмену платформа работает в режиме загрузки и уникальность кодов не проверяет. Дубль приезжает тихо, а ошибку видит тот, кто потом откроет и сохранит один из двух элементов.
- 📥 Загрузка из Excel или внешней обработкой. Обработка может писать элементы в том же режиме загрузки или задавать код явно.
- 🧩 Две базы без префиксов. Филиал и головной офис нумеруют справочник с
000000001. При объединении или первой синхронизации коды пересекаются. - 💥 Сбой записи. Аварийное отключение посреди транзакции или повреждённые индексы в файловой базе оставляют физические дубли в таблицах.
Если ошибка появилась при сохранении старой карточки, которую никто не трогал месяцами, почти наверняка дубль пришёл извне: обменом, загрузкой или обработкой. Ручной ввод даёт ошибку сразу, на новом элементе.
Как исправить ошибку «Код не уникален»: пошагово
Порядок такой: сначала самое простое и безопасное, в конце — действия с базой целиком.
Шаг 1. Дайте 1С назначить код самой
- Откройте карточку элемента, на котором появилась ошибка.
- Сотрите содержимое поля «Код» полностью.
- Нажмите «Записать».
При включённой автонумерации платформа возьмёт следующий свободный код. Этого достаточно для нового элемента, у которого код не имеет значения.
Если поле «Код» недоступно для редактирования, найдите его через Еще → Изменить форму и проверьте, не скрыто ли оно. Если и там оно заблокировано, менять код вручную в этой конфигурации не предусмотрено — переходите к шагу 2.
Шаг 2. Найдите элемент-дубль
- Откройте список справочника.
- Если колонки «Код» нет, добавьте её:
Еще → Изменить форму, отметьте поле «Код». - Отсортируйте список по коду или найдите значение через строку поиска (сочетание
Alt+Fоткрывает расширенный поиск по колонке). - Отключите иерархический просмотр, если справочник разбит на группы: дубль может лежать в другой папке.
Сравните два найденных элемента. Возможны три ситуации:
| Что увидели | Что делать |
|---|---|
| Это два разных объекта (разные товары, разные контрагенты) | Перенумеруйте один из них (шаг 1) |
| Это один и тот же объект, заведённый дважды | Объедините дубли (шаг 3) |
| Второй элемент помечен на удаление | Удалите его через удаление помеченных или снимите пометку и перенумеруйте |
Элемент с пометкой удаления по-прежнему занимает код. Пока его физически не удалили, новый элемент с таким же кодом не запишется.
Шаг 3. Объедините настоящие дубли
Если в базе два «Ромашка ООО» с одним кодом, перенумерация оставит два контрагента, по которым будут разбросаны документы. Правильнее объединить их в один.
В типовых конфигурациях на библиотеке стандартных подсистем это делается двумя способами:
- в списке справочника выделите оба элемента и найдите в меню
Ещекоманду объединения выделенных элементов — программа предложит выбрать основной, перенесёт на него все ссылки, а лишний пометит на удаление; - для массового поиска в БП 3.0 и ЗУП 3.1 есть обработка «Поиск и удаление дублей» в разделе
Администрирование → Обслуживание, группа «Корректировка данных».
Объединение переписывает ссылки во всех документах, где встречается лишний элемент, включая проведённые в закрытых периодах. Сделайте резервную копию и согласуйте операцию с главным бухгалтером, если затронуты прошлые отчётные периоды.
Шаг 4. Найдите все дубли запросом
Когда дублей десятки, ловить их по одному в списке долго. Откройте внешнюю обработку «Консоль запросов» и выполните запрос, подставив имя своего справочника:
ВЫБРАТЬ
Спр.Код КАК Код,
КОЛИЧЕСТВО(Спр.Ссылка) КАК Элементов
ИЗ
Справочник.Номенклатура КАК Спр
СГРУППИРОВАТЬ ПО
Спр.Код
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Спр.Ссылка) > 1
УПОРЯДОЧИТЬ ПО
Код
Результат — список кодов, которые встречаются больше одного раза, и число элементов с каждым. Для подчинённого справочника с серией «в пределах владельца» добавьте Спр.Владелец в поля выборки и в группировку, иначе запрос покажет ложные дубли.
Шаг 5. Перенумеруйте программно (для разработчика)
Если дублей много и каждый надо просто перенумеровать, это делается кодом во внешней обработке:
Объект = Ссылка.ПолучитьОбъект();
Объект.Код = "";
Объект.УстановитьНовыйКод();
Объект.Записать();
УстановитьНовыйКод() берёт следующий свободный код с учётом серии кодов. Запускайте обработку на копии базы, проверьте результат и только потом повторите в рабочей.
Код вроде свободен, а 1С всё равно ругается
Самая неприятная ситуация: в списке ищете код — его нет, а ошибка остаётся. Вот что обычно прячется за ней.
Проверка и исправление базы в Конфигураторе
Когда дубль физический (после сбоя питания или аварийного завершения), его лечат средствами платформы.
- Сделайте резервную копию: выгрузите базу в
.dtчерезАдминистрирование → Выгрузить информационную базув Конфигураторе или скопируйте каталог файловой базы. - Откройте
Администрирование → Тестирование и исправление. - Отметьте «Реиндексация таблиц информационной базы» и «Проверка логической целостности информационной базы».
- Режим — «Тестирование и исправление», запустите проверку.
Тестирование и исправление требует монопольного доступа: всех пользователей нужно вывести из базы, их сеансы будут завершены. Запускайте вне рабочего времени. На большой базе проверка идёт часами.
Для клиент-серверной базы реиндексацию также выполняют средствами СУБД, но удалять «лишние» строки напрямую в SQL нельзя: так рвутся ссылки, и 1С потом не сможет открыть связанные документы.
Особенности после обмена данными
Обмен — самый частый источник дублей в связке «Бухгалтерия — Управление торговлей» или в распределённой базе. Здесь важно понять, какая из баз «главная» для справочника.
Разберитесь в трёх вопросах:
- Какая база создаёт элементы. Если номенклатуру заводят только в УТ, а в БП она приходит обменом, то дубль в БП нужно исправлять в УТ — иначе следующий обмен вернёт его обратно.
- Есть ли у баз разные префиксы. В БП 3.0 префикс базы задают в
Администрирование → Синхронизация данных. Если у двух баз одинаковый префикс или его нет совсем, автонумерация в обеих идёт из одной серии, и коды неизбежно пересекаются. - По каким полям обмен сопоставляет объекты. Если правило ищет элемент по коду, а коды в базах не совпадают, обмен создаст новый элемент вместо поиска существующего — и получится дубль по наименованию.
Порядок исправления после обмена:
- задайте базам разные префиксы до следующей синхронизации;
- объедините дубли в базе-источнике;
- проведите синхронизацию и убедитесь, что в приёмнике лишние элементы помечены на удаление или заменены;
- удалите помеченные объекты.
Не перенумеровывайте элементы в базе-приёмнике, если обмен сопоставляет их по коду. При следующей синхронизации связь потеряется, и вы получите ещё один комплект дублей.
Что делать с «Номер не уникален» в документах
Для документов действуют те же правила, но есть одно отличие: номер уникален не навсегда, а в пределах периода. Разработчик выбирает периодичность номера — год, квартал, месяц, день или без периода. В типовых конфигурациях для большинства документов это год, а уникальность часто считается ещё и в разрезе организации через префикс.
Отсюда типичные случаи:
- 📅 документ перенесли датой в другой год, где такой номер уже есть;
- 🏢 сменили организацию в документе, а префикс номера остался от старой;
- 📥 документы загрузили обменом из базы с той же нумерацией.
Лечится так же: очистите поле «Номер» и запишите документ — программа присвоит новый номер в нужной серии. Если номер «бумажный» и важен для контрагента (входящий счёт, акт), в типовых документах для этого есть отдельное поле номера входящего документа, а внутренний номер можно оставить любым.
Как не допустить повторения
Чтобы ошибка не возвращалась, нужны несколько правил на уровне базы и людей.
Отдельно о флаге «Контроль уникальности». Снять его в Конфигураторе технически можно, но в типовой конфигурации это снимает объект с поддержки и усложняет каждое обновление. Главное — ошибка исчезнет, а дубли останутся и всплывут в отчётах, где один товар окажется в двух строках.