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

В отличие от ошибок синтаксиса или проблем с правами доступа, неуникальные коды часто остаются незамеченными до момента критической необходимости — например, при выгрузке данных в ФНС или интеграции с CRM. При этом стандартные средства не всегда предлагают очевидное решение. Мы рассмотрим как ручные способы исправления через конфигуратор, так и автоматизированные подходы с использованием запросов и внешних обработок.

Почему коды справочников становятся неуникальными

Дублирование кодов в никогда не возникает просто так — этому всегда предшествует одно из следующих действий:

  • 🔄 Обмен данными между базами с разными правилами формирования кодов (например, при переносе справочника Номенклатура из УТ 11 в БП 3.0).
  • 📥 Импорт из Excel или других внешних источников, где коды не проверялись на уникальность.
  • 🛠️ Ручное редактирование кодов пользователями с правами «полный доступ», особенно в больших справочниках (например, Контрагенты или Сотрудники).
  • 🔄 Обновление конфигурации, после которого изменилась логика автонумерации (актуально для старых версий 1С 8.2 и ниже).
  • 💻 Программные ошибки в обработках, которые массово изменяют коды без проверки (например, при конвертации из 1С 7.7 в 8.3).

Особенно часто проблема проявляется в справочниках с иерархической структурой (например, Номенклатура с группами и подгруппами), где коды могут дублироваться на разных уровнях. В 1С:Управление торговлей это может привести к ошибкам при формировании Торг-12 или выгрузке в Диадок.

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

Как обнаружить дублирующиеся коды: 3 метода

Прежде чем исправлять проблему, нужно точно определить, какие именно записи имеют одинаковые коды и в каком справочнике. Для этого есть несколько способов — от простых до продвинутых.

1. Стандартный отчёт «Проверка уникальности кодов»

В большинстве типовых конфигураций (БП 3.0, УТ 11, ЗУП 3.1) есть встроенный инструмент:

  1. Откройте нужный справочник (например, Номенклатура).
  2. Перейдите в меню Все действия → Отчёты → Проверка уникальности кодов.
  3. Нажмите Сформировать — система покажет все дубли.

Если такого отчёта нет, его можно добавить через Дополнительные отчёты и обработки (раздел Администрирование).

2. Запрос через консоль запросов

Для опытных пользователей быстрее воспользоваться языком запросов. Пример для справочника Контрагенты:

ВЫБРАТЬ

Код,

COUNT(*) КАК Количество

ИЗ

Справочник.Контрагенты

СГРУППИРОВАТЬ ПО

Код

УПОРЯДОЧИТЬ ПО

Количество УБЫВ

Результат покажет все коды, которые встречаются более одного раза. Для иерархических справочников добавьте условие ГДЕ ЭтоГруппа = ЛОЖЬ, чтобы исключить группы.

3. Внешняя обработка «Поиск дублей»

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

  • 🔍 Сканирует все справочники за один проход.
  • 📊 Выводит отчёт с группировкой по дублям.
  • 🛠️ Позволяет массово переименовать коды прямо из интерфейса.
Метод поиска Скорость Точность Подходит для больших баз
Стандартный отчёт Низкая Высокая ❌ Нет
Запрос в консоли Средняя Высокая ✅ Да
Внешняя обработка Высокая Максимальная ✅ Да
💡

Если дубли найдены в справочнике Номенклатура, обязательно проверьте связанные документы (Поступление, Реализация) — изменение кодов может нарушить ссылки в движениях!

Ручное исправление неуникальных кодов

Если дублей мало (до 50 записей), проще всего исправить их вручную. Этот метод подходит для небольших баз или когда нужно сохранить историю изменений.

Шаг 1: Открытие справочника в режиме «Все записи»

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

  1. Откройте справочник (например, Сотрудники).
  2. Нажмите Ещё → Настройки списка.
  3. Снимите галочку Показывать только активные.
  4. Включите отображение колонки Код (если её нет).

Шаг 2: Поиск и переименование дублей

Отсортируйте список по колонке Код и найдите повторяющиеся значения. Для переименования:

  • 📝 Откройте карточку элемента двойным кликом.
  • 🔧 Измените код на уникальный (например, добавьте суффикс _1, _2).
  • 💾 Сохраните изменения (Ctrl+S).
⚠️ Внимание: Если справочник используется в документах (например, Номенклатура в Реализации), изменение кода может привести к разрыву ссылок. В этом случае лучше использовать массовую замену (см. следующий раздел).

Открыть справочник в режиме"Все записи"|Включить колонку"Код"|Отсортировать по коду|Проверить связанные документы|Создать резервную копию базы-->

Массовое исправление через обработку

Когда дублей сотни или тысячи, ручное редактирование неэффективно. В этом случае поможет массовая обработка — либо стандартная, либо кастомная.

Способ 1: Стандартная обработка «Групповое изменение»

В большинстве конфигураций есть встроенный инструмент:

  1. Откройте справочник, выделите все дубли (можно через Ctrl+A).
  2. Нажмите Ещё → Групповое изменение реквизитов.
  3. В поле Код укажите правило переименования, например:
    Текст.Лев(Код, 5) +"_НОВ"
  4. Запустите обработку и дождитесь завершения.

Способ 2: Кастомный скрипт на языке 1С

Если стандартные методы не подходят, можно написать свой код. Пример для справочника Номенклатура:

Процедура ИсправитьДублиКодов

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Код,

| COUNT(*) КАК Количество

|ИЗ

| Справочник.Номенклатура

|СГРУППИРОВАТЬ ПО

| Код

|ИМЕЮЩИЕ

| COUNT(*) > 1";

Результат = Запрос.Выполнить;

Выборка = Результат.Выбрать;

Пока Выборка.Следующий Цикл

ТекущийКод = Выборка.Код;

Счётчик = 1;

ЗапросДублей = Новый Запрос;

ЗапросДублей.Текст =

"ВЫБРАТЬ

| Ссылка

|ИЗ

| Справочник.Номенклатура

|ГДЕ

| Код = &Код";

ЗапросДублей.УстановитьПараметр("Код", ТекущийКод);

РезультатДублей = ЗапросДублей.Выполнить;

ВыборкаДублей = РезультатДублей.Выбрать;

Пока ВыборкаДублей.Следующий Цикл

Элемент = ВыборкаДублей.Ссылка.ПолучитьОбъект;

Элемент.Код = ТекущийКод +"_" + Счётчик;

Элемент.Записать;

Счётчик = Счётчик + 1;

КонецЦикла;

КонецЦикла;

КонецПроцедуры

Этот скрипт:

  • 🔍 Находит все дублирующиеся коды.
  • 🔧 Добавляет к каждому дублю суффикс _1, _2 и т.д.
  • 💾 Сохраняет изменения без разрыва ссылок.
⚠️ Внимание: Перед запуском массовых изменений обязательно сделайте резервную копию базы (Администрирование → Выгрузка/загрузка данных). В случае ошибки восстановить данные будет невозможно!
💡

Массовое исправление кодов следует проводить в монопольном режиме (без активных пользователей), чтобы избежать конфликтов блокировок.

Исправление через SQL-запрос (для администраторов)

Если база работает на MS SQL Server или PostgreSQL, можно устранить дубли через SQL. Этот метод самый быстрый, но требует знания синтаксиса и прав доступа к серверу.

Шаг 1: Подключение к базе через SQL Management Studio

Используйте учётные данные, указанные в настройках информационной базы (Администрирование → Настройки программы → Информационные базы).

Шаг 2: Запрос для поиска дублей

Пример для справочника Контрагенты (таблица _Reference10 в 1С 8.3):

SELECT

_IDRRef,

_Code AS Код,

COUNT(*) AS Количество

FROM

_Reference10

GROUP BY

_Code

HAVING

COUNT(*) > 1

ORDER BY

Количество DESC

Шаг 3: Обновление кодов

Для массового переименования используйте UPDATE с ROW_NUMBER:

WITH Duplicates AS (

SELECT

_IDRRef,

_Code,

ROW_NUMBER OVER (PARTITION BY _Code ORDER BY _IDRRef) AS RowNum

FROM

_Reference10

WHERE

_Code IN (

SELECT _Code

FROM _Reference10

GROUP BY _Code

HAVING COUNT(*) > 1

)

)

UPDATE _Reference10

SET _Code = _Code +'_' + CAST(RowNum AS VARCHAR)

FROM _Reference10 r

JOIN Duplicates d ON r._IDRRef = d._IDRRef

После выполнения запроса обновите представление справочника в (Файл → Обновить).

Что делать, если после SQL-обновления коды не изменились в 1С?

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

  1. Перезапустить клиент .
  2. Выполнить тестирование и исправление базы (Администрирование → Тестирование и исправление).
  3. Очистить кэш (%APPDATA%\1C\1cv8\ — удалить папку с именем базы).

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

Профилактика повторного дублирования кодов

Исправить неуникальные коды — половина дела. Гораздо важнее настроить систему так, чтобы проблема не повторялась. Вот ключевые меры профилактики:

1. Настройка автонумерации

В большинстве справочников (Номенклатура, Контрагенты) можно включить автоматическое присвоение кодов:

  1. Откройте конфигуратор (Файл → Конфигуратор).
  2. Найдите нужный справочник в дереве объектов.
  3. В свойствах справочника установите:
    • Автонумерация = Да
    • Контроль уникальности = Да
    • Тип кода = Число (рекомендуется для больших справочников).
  • Обновите конфигурацию базы (Конфигурация → Обновить конфигурацию базы данных).
  • 2. Ограничение прав на редактирование кодов

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

    • 🔒 Создайте новую роль (например, ПользовательСправочниковБезИзмененияКодов).
    • 📝 В настройках роли запретите изменение реквизита Код для критичных справочников.
    • 👥 Назначьте эту роль всем пользователям, кроме администраторов.

    3. Регулярная проверка на дубли

    Автоматизируйте проверку уникальности с помощью:

    • 📅 Регламентного задания (например, раз в неделю запускать обработку поиска дублей).
    • 📊 Отчёта в «1С:Аналитике» (если используется).
    • 🔔 Уведомлений администратору при обнаружении дублей (настраивается через Подписки на события).
    Мера профилактики Сложность внедрения Эффективность
    Автонумерация Низкая Высокая
    Ограничение прав Средняя Максимальная
    Регламентные задания Высокая Средняя

    Частые ошибки при исправлении неуникальных кодов

    Даже опытные администраторы иногда допускают ошибки, которые усложняют решение проблемы. Вот самые распространённые:

    • 🔄 Исправление кодов в рабочей базе без резервной копии — при ошибке в скрипте можно потерять данные.
    • 📝 Изменение кодов в справочниках, используемых в документах — это приводит к разрыву ссылок и ошибкам типа «Не найден объект».
    • 🛠️ Использование SQL без блокировки таблиц — может вызвать конфликты, если в базе работают пользователи.
    • 🔍 Пропуск проверки связанных объектов — например, в справочнике Номенклатура код может использоваться в Ценах номенклатуры или Остатках.
    • 📊 Игнорирование иерархии — в справочниках с группами коды должны быть уникальны в пределах уровня, а не во всём справочнике.

    Чтобы избежать этих ошибок, всегда:

    1. Делайте бэкап перед массовыми изменениями.
    2. Проверяйте связанные объекты через запрос:
      ВЫБРАТЬ РАЗРЕШЕННЫЕ
      

      Ссылка.Ссылка КАК Объект

      ИЗ

      РегистрСведений.ЦеныНоменклатуры КАК Ссылка

      ГДЕ

      Ссылка.Номенклатура.Код = &Код

    3. Тестируйте изменения на копии базы.
    💡

    Если после исправления кодов в справочнике Номенклатура перестали открываться документы, используйте обработку «Поиск и замена ссылок» с Инфостарта для восстановления связей.

    FAQ: Ответы на частые вопросы

    Можно ли исправить неуникальные коды без конфигуратора?

    Да, но с ограничениями. В пользовательском режиме вы можете:

    • Использовать стандартный отчёт Проверка уникальности кодов (если он есть в вашей конфигурации).
    • Ручной поиск и переименование дублей (подходит для небольшого количества записей).
    • Запустить внешнюю обработку (например, с Инфостарта) без прав конфигуратора.

    Однако для массовых изменений или настройки автонумерации потребуется доступ в конфигуратор.

    Что делать, если после исправления кодов перестали работать отчёты?

    Это означает, что в отчётах использовались прямые ссылки на коды (например, в формулах типа ЕСЛИ Код ="001" ТО...). Чтобы исправить:

    1. Откройте проблемный отчёт в конфигураторе.
    2. Найдите все упоминания старых кодов (через Поиск по тексту).
    3. Замените их на ссылки по Ссылке или Уникальному идентификатору.
    4. Обновите конфигурацию базы.

    Если отчёт стандартный (из типовой конфигурации), лучше восстановить его из шаблона (Конфигурация → Поддержка → Настройка поддержки).

    Как исправить неуникальные коды в справочнике с иерархией (например, «Номенклатура»)?

    В иерархических справочниках коды должны быть уникальны в пределах одного уровня. Например, в группах «Товары» и «Услуги» могут быть одинаковые коды, но не внутри одной группы.

    Чтобы исправить дубли:

    1. Используйте запрос с учётом иерархии:
      ВЫБРАТЬ
      

      Родитель.Наименование КАК Группа,

      Код,

      COUNT(*) КАК Количество

      ИЗ

      Справочник.Номенклатура КАК Элемент

      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Родитель

      ПО Элемент.Родитель = Родитель.Ссылка

      СГРУППИРОВАТЬ ПО

      Родитель.Наименование,

      Код

      ИМЕЮЩИЕ

      COUNT(*) > 1

    2. Для массового переименования добавьте к коду префикс группы, например:
      Элемент.Код = Родитель.Код +"_" + Элемент.Код;
    Можно ли вернуть старые коды после исправления, если они были важны для бизнес-процессов?

    Да, но это потребует дополнительных действий:

    1. Создайте новый реквизит в справочнике (например, СтарыйКод) и перенесите в него оригинальные значения до исправления.
    2. Используйте этот реквизит в отчётах и документах вместо стандартного Код.
    3. Настройте перерасчёт связанных регистров (например, ЦеныНоменклатуры), если код использовался в движениях.

    Для автоматизации этого процесса можно использовать обработку «Перенос данных» из ITS.

    Как предотвратить дублирование кодов при обмене данными между базами?

    Проблема неуникальных кодов часто возникает при обмене между 1С:УТ и 1С:БП или при загрузке из Excel. Чтобы избежать дублей:

    • 🔄 Настройте правила обмена так, чтобы коды в принимающей базе не переписывались, а дописывались с префиксом (например, UT_001, BP_001).
    • 📥 При импорте из Excel используйте обработку с проверкой уникальности (например, «Загрузка из Excel с контролем» с Инфостарта).
    • 🔧 В правилах конвертации добавьте условие:
      ЕСЛИ НЕ ЗначениеЗаполнено(Объект.Код) ТО
      

      Объект.Код = СформироватьУникальныйКод;

      КОНЕЦЕСЛИ;