Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

MSSQL_ERROR_1505 1С:Предприятие и СУБД

MSSQL Error 1505: Duplicate key found for unique index — Исправление дублей

Обновлено: 25.08.2026 · Официальная документация ↗

Ошибка 1505 возникает при попытке создания уникального индекса (Unique Index) или ограничения первичного ключа (Primary Key) на таблице, которая уже содержит неуникальные (дублирующиеся) значения в ключевых колонках.

  • Сообщение: The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name '%.*ls' and index name '%.*ls'. The duplicate key value is %ls (Severity 16).
  • Сбой обновления конфигурации 1С:Предприятие на этапе 'Реструктуризация таблиц информационной базы'.
  • Отказ выполнения скриптов миграции данных или перестроения индексов СУБД.
  • Нарушение ссылочной целостности в регистрах сведений или табличных частях.

1. Поиск дублирующихся строк по значению ключа

Используйте имя таблицы и поля из текста ошибки:

SELECT 
    KeyColumn1, 
    KeyColumn2, 
    COUNT(*) AS DuplicateCount
FROM [SchemaName].[TableName]
GROUP BY KeyColumn1, KeyColumn2
HAVING COUNT(*) > 1
ORDER BY DuplicateCount DESC;

2. Просмотр полных записей-дубликатов с использованием ROW_NUMBER()

WITH CTE_Duplicates AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY KeyColumn1, KeyColumn2 
            ORDER BY (SELECT NULL)
        ) AS RowNum
    FROM [SchemaName].[TableName]
)
SELECT * FROM CTE_Duplicates WHERE RowNum > 1;

3. Безопасное удаление избыточных дубликатов

WITH CTE_Duplicates AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY KeyColumn1, KeyColumn2 
            ORDER BY (SELECT NULL)
        ) AS RowNum
    FROM [SchemaName].[TableName]
)
DELETE FROM CTE_Duplicates WHERE RowNum > 1;

4. Повторное создание уникального индекса

CREATE UNIQUE INDEX [IndexName] 
ON [SchemaName].[TableName] (KeyColumn1, KeyColumn2) 
WITH (ONLINE = ON, DATA_COMPRESSION = PAGE);

5. Исправление в среде 1С:Предприятие

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

💡 Практика специалистов: Перед ручным удалением дубликатов из таблиц СУБД 1С обязательно создайте резервную копию таблицы через SELECT * INTO TableName_Backup FROM TableName, чтобы не нарушить ссылочную целостность платформы.

Частые вопросы (FAQ)

Почему дубликаты появляются в регистрах сведений 1С?

Дубли возникают при прямых некорректных записях в СУБД в обход объектной модели 1С, сбоях обменов РИБ или некорректном переносе данных при объединении баз.

Что делает опция WITH IGNORE_DUP_KEY при создании индекса?

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

Как найти GUID ссылки документа, вызвавшего дублирование?

Сконвертируйте бинарное поле _IDRRef в строковый UUID с помощью системных функций T-SQL или платформенной функции 1С 'Строка(Ссылка.УникальныйИдентификатор())'.

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

Нет. Уникальный индекс жестко требует единственности каждой комбинации ключевых полей. Избыточные записи должны быть удалены или объединены.

Полезные материалы
Рекомендуем