Дубль кода или номера: почему 1С не даёт записать объект

· 10 мин

Содержание

Ошибка Значение поля "Код" не уникально! (или "Номер") значит одно: в справочнике или в журнале документов уже есть объект с таким же кодом или номером, а в конфигурации включён контроль уникальности. Исправить её можно тремя способами: поменять код у записываемого объекта, перенумеровать старый дубль или убрать причину, из-за которой дубли появляются, — чаще всего это одинаковые префиксы баз при обмене.

Какой способ выбрать, зависит от масштаба. Один элемент не записывается — хватит правки в форме за минуту. Ошибка сыплется сотнями при загрузке или синхронизации — нужен поиск дублей запросом и настройка префиксов. Если же текст пришёл от СУБД (unique index, duplicate key), это уже не прикладная проверка, а повреждённые индексы, и чинят их в Конфигураторе.

Откуда в базе берутся одинаковые коды и номера

Платформа 1С проверяет уникальность при записи объекта. Проверка зависит от двух свойств объекта в конфигурации:

  • 🔑 Контроль уникальности — флажок на вкладке нумерации справочника или документа. Включён — дубль не запишется.
  • 📅 Периодичность номера у документов: непрерывно, в пределах года, квартала, месяца или дня. При периодичности «в пределах года» номер 0000-000015 может встречаться в 2025 и 2026 году, но дважды в одном году — нет.
  • 🌳 Серии кодов у справочников: во всём справочнике, в пределах подчинения (родителю) или в пределах владельца. От этого зависит, среди каких элементов ищется дубль.

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

Типичные источники:

  1. 🔄 Обмен данными без префиксов. Две базы (например, Бухгалтерия и Управление торговлей) выдают коды с одинаковым префиксом. Номенклатура 00-00000125 создана в обеих, при синхронизации вторая не записывается.
  2. 📥 Загрузка из Excel или другой базы с готовыми кодами. Загрузчик переносит код как есть.
  3. ✍️ Ручная правка кода или номера. Пользователь вписал код «на будущее» или скопировал номер из бумажного документа.
  4. 📆 Перенос документа в другой период. Документ 15 за декабрь перенесли датой в январь, а там уже есть свой 15.
  5. 🧩 Изменение конфигурации. Серию кодов поменяли с «в пределах подчинения» на «во всём справочнике», или включили контроль уникальности на заполненном справочнике. Старые дубли спокойно лежат до первой перезаписи любого из них.
  6. 🗄️ Объединение баз или свёртка через обработки переноса данных, которые пишут объекты в режиме загрузки, без проверок.

Пункт 6 важен для понимания: при записи в режиме обмена (ОбменДанными.Загрузка = Истина) часть проверок пропускается, и дубли попадают в базу молча. Ошибка всплывает позже — когда бухгалтер откроет элемент, поправит наименование и нажмёт «Записать».

Сначала диагностика: в каком объекте дубль

По тексту ошибки обычно видно поле, но не объект. Порядок такой:

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

При синхронизации данных текст ошибки сохраняется в журнале регистрации. Откройте Администрирование → Обслуживание → Журнал регистрации, установите отбор по уровню «Ошибка» и по времени обмена. В событии обычно указан объект и его представление — по нему и ищите пару.

Если поиск в списке находит только один элемент с этим кодом, проверьте помеченные на удаление. Помеченный объект физически в базе и участвует в проверке уникальности. Включите показ помеченных в списке.

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

Исправление в форме объекта: один дубль за минуту

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

Справочник: очистить код

  1. В форме элемента, который не записывается, сотрите значение поля «Код» полностью.
  2. Нажмите «Записать».
  3. При включённой автонумерации платформа сама присвоит пустому коду следующий свободный номер в серии.

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

Документ: очистить номер

  1. Откройте документ, очистите поле «Номер».
  2. Запишите или проведите документ — номер присвоится заново по нумератору текущего периода.
  3. Если номер документа важен (он совпадает с бумажным оригиналом от контрагента), используйте поле входящего номера, а не основной номер документа.

Перенумерация уже отправленных контрагенту документов (счетов-фактур, актов, УПД) меняет номер в печатной форме. Перед этим убедитесь, что документ не ушёл по ЭДО и не попал в сданную отчётность.

Когда дубль — это один и тот же объект

Часто два элемента с одинаковым кодом — это одна и та же номенклатура или контрагент, пришедший двумя путями. Переименовывать код тут бесполезно: через месяц в базе будут два «Молока 3,2%», и остатки разъедутся.

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

Массовый поиск неуникальных значений через консоль запросов

Когда дублей десятки, листать списки бессмысленно. Нужен запрос. Его выполняют в режиме 1С:Предприятие через внешнюю обработку «Консоль запросов» (её открывают через Файл → Открыть под пользователем с правами администратора).

Дубли кодов в справочнике

Пример для справочника «Номенклатура». Имя справочника замените на своё, имя видно в тексте ошибки или в журнале регистрации.

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

Если серия кодов «в пределах подчинения», дубль ищется внутри одной группы. Добавьте в выборку и группировку поле Спр.Родитель. Для серии «в пределах владельца» — поле Спр.Владелец.

Чтобы увидеть сами элементы, а не только коды, выполните второй запрос:

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

Дубли номеров документов

Для документов группируйте ещё и по периоду. При периодичности «в пределах года»:

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

Периодичность смотрите в Конфигураторе, в свойствах документа на вкладке нумерации. Если стоит «в пределах квартала» или «месяца» — замените ГОД на КВАРТАЛ или МЕСЯЦ.

Что делать с результатом

СитуацияЧто делатьРиск
Дубль — помеченный на удаление объект без ссылокУдалить помеченные (Администрирование → Обслуживание → Удаление помеченных объектов)Низкий, если ссылок нет
Два разных объекта с одним кодомОчистить код у одного и перезаписатьНизкий; меняется код в печатных формах
Один и тот же объект, заведённый дваждыОбъединить через «Поиск и удаление дублей»Средний: перезаписываются документы
Документы с одинаковым номеромОчистить номер у документа, не ушедшего контрагентуСредний: меняется номер в первичке

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

Когда ошибку выдаёт СУБД, а не 1С

Иногда текст ошибки другой и длинный: в нём есть Cannot insert duplicate key row, unique index, Попытка вставки неуникального значения в уникальный индекс. Это значит, что дубль нарушил индекс на уровне таблицы базы данных. Прикладная проверка тут ни при чём — у таблицы повреждён или рассогласован индекс, либо в ней физически лежат две строки с одинаковым ключом.

Чаще всего так бывает после аварийного отключения питания, сбоя диска, неудачной загрузки .dt или обрыва реструктуризации при обновлении.

Перед любыми действиями в Конфигураторе сделайте резервную копию базы — выгрузку .dt или бэкап средствами СУБД.

Тестирование и исправление

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

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

Файловая база: chdbfl.exe

Для файловой базы есть отдельная утилита проверки физической целостности chdbfl.exe. Она лежит в каталоге bin установленной платформы, например C:\Program Files\1cv8\8.3.25.xxxx\bin\. Запускайте при закрытой базе, укажите файл 1Cv8.1CD и включите флажок исправления ошибок.

Клиент-серверная база

На MS SQL Server или PostgreSQL сначала выполните тестирование и исправление из Конфигуратора. Если не помогло, администратор СУБД проверяет таблицы своими средствами (DBCC CHECKDB в MS SQL).

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

Как не допустить повторных конфликтов уникальности

Исправленные дубли вернутся, если не убрать их источник.

Префиксы при обмене

У каждой базы в обмене должен быть свой префикс. В Бухгалтерии 3.0 он задаётся в Администрирование → Синхронизация данных, поле префикса этой информационной базы. Пример: Бухгалтерия — БП, Управление торговлей — УТ. Тогда коды выглядят как БП-00000125 и УТ-00000125 и не пересекаются.

Префикс применяется к новым объектам. Уже созданные с одинаковыми кодами нужно перенумеровать по результатам запроса из раздела выше.

Префикс организации в номерах документов

Если в одной базе несколько организаций, задайте каждой префикс в карточке организации. Он входит в номер документа и разводит нумерацию между юрлицами.

Загрузка данных

  • 📥 При загрузке из таблицы не переносите колонку кода, если коды не нужны для сверки. Пусть автонумерация выдаст свои.
  • 🔍 Если коды нужны, сначала проверьте диапазон: у загружаемых кодов не должно быть пересечений с существующими.
  • 🧪 Тестовую загрузку делайте на копии базы.

Изменения в конфигурации

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

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

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

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