Ошибка «дублирование ключей в уникальном индексе» в 1С: как убрать

· 7 мин

Содержание

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

Причин две: либо повреждена сама база (файловая после сбоя питания), либо разъехались итоги регистра. От причины и зависит способ — часть решается штатной утилитой за 10 минут, часть требует пересчёта итогов или работы с СУБД.

Прежде чем что-либо трогать — сделайте резервную копию базы. Многие способы ниже необратимы, а на повреждённой базе любое действие может добить данные окончательно.

Как выглядит ошибка и что она значит

Текст в разных версиях и СУБД отличается, но смысл один. Вот типовые формулировки:

  • Дублирование ключей в уникальном индексе '_ACCRGAT' — файловая база или SQL, чаще при закрытии месяца.
  • Попытка вставки неуникального значения в уникальный индекс — то же самое, вариант в клиент-серверной базе.
  • Обнаружены дублирующиеся ключи — при тестировании базы в конфигураторе (chdbfl / ТиИ).
  • PostgreSQL 23505: ERROR: duplicate key value violates unique constraint — база на PostgreSQL.

Имя индекса в кавычках — главная подсказка. Оно говорит, в какой таблице дубль:

ИндексЧто за таблицаГде всплывает
_ACCRGATитоги бухгалтерского регистразакрытие месяца, отчёты
_ACCRGдвижения бухгалтерского регистрапроведение документов
_ACCUMRGT / _ACCUMRGитоги/движения регистра накоплениясклад, взаиморасчёты
_INFORGрегистр сведенийвыбор из справочников, подбор
_REFERENCEсправочникоткрытие/запись элемента

Суффикс T (от Totals) почти всегда указывает на битые итоги — это лечится пересчётом, а не восстановлением базы.

С чего начать: быстрая диагностика

Определите свой случай — дальше идите только по нужной ветке, не выполняя лишнего.

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

Шаг за шагом: базовый сценарий восстановления

Порядок для файловой базы (.1CD) — от безопасного к радикальному. Клиент-серверную базу лечат теми же средствами конфигуратора, минуя chdbfl.exe.

Пошаговый помощник
Резервная копия
Закройте все сеансы. Скопируйте файл 1Cv8.1CD целиком в отдельную папку. Для SQL — выгрузите .dt через конфигуратор или сделайте бэкап средствами СУБД.

Управление итогами: лечим _ACCRGAT без утилит

Самый частый случай — _ACCRGAT при закрытии месяца. База цела, разъехались итоги. Полное восстановление не нужно, помогает пересчёт.

  1. Откройте базу в режиме 1С:Предприятие под администратором.
  2. Меню ОперацииУправление итогами (в интерфейсе «Такси»: ГлавноеВсе функцииУправление итогами). Если пункта нет — включите Все функции в настройках.
  3. Снимите использование итогов: сдвиньте границу расчёта итогов на период раньше проблемного или нажмите «Отключить использование итогов».
  4. Повторите операцию, которая падала (например, перепроведите документ или запустите закрытие месяца) — теперь она пройдёт, потому что 1С обращается не к битым итогам, а к движениям.
  5. Верните итоги: «Установить границу расчёта итогов» на конец нужного периода и «Пересчитать» → «Полный пересчёт».

Если пункта «Управление итогами» нет ни в одном меню — воспользуйтесь обработкой «Управление итогами и агрегатами» либо групповым перепроведением документов за период. Результат тот же: итоги регистра собираются заново.

Определяем проблемную таблицу по имени индекса

Когда суффикса T нет, а дубль в справочнике или регистре сведений, нужно понять точную таблицу. Имя _REFERENCE123 или _INFORG456 — это внутреннее имя, которое надо сопоставить с метаданными.

  • В конфигураторе: Администрирование → структура хранения таблиц; либо стандартная обработка Структура хранения базы данных (доступна с диска ИТС как внешняя обработка).
  • Число после префикса — порядковый номер объекта метаданных. Обработка покажет, какому справочнику или регистру он соответствует.
  • Дальше открывают этот объект, ищут два элемента с одинаковым кодом/набором измерений и удаляют или правят дубль.

После правки обязательно прогоните Реиндексацию таблиц в ТиИ — старый уникальный индекс мог остаться в неконсистентном виде.

Случай PostgreSQL: ошибка 23505

На PostgreSQL ошибка приходит от самой СУБД: 23505: duplicate key value violates unique constraint. Сценарий тот же — дубль в таблице 1С, но чинить через chdbfl.exe нельзя (утилита только для файловых баз).

Порядок:

  1. Сначала — стандартное Тестирование и исправление в конфигураторе с реиндексацией. В 80% случаев решает.
  2. Не помогло — из текста ошибки берут имя constraint и таблицы, находят конфликтующие строки SQL-запросом и удаляют лишнюю. Это делает только администратор с бэкапом: прямая правка таблиц 1С в обход платформы легко ломает ссылочную целостность.
  3. После ручной чистки — снова ТиИ с реиндексацией, чтобы платформа привела индексы в порядок.

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

Если ничего не помогло

Когда chdbfl.exe и ТиИ прогнаны, а ошибка держится:

  • 🔁 Прогоните chdbfl.exe ещё несколько раз — часть повреждений уходит только после повторных проходов.
  • 📤 Попробуйте выгрузить конфигурацию/данные в .dt и загрузить в новую пустую базу. Иногда переливка снимает дубль, который правка на месте не берёт.
  • 🧩 Тяжёлый случай файловой базы — восстановление таблиц сторонней утилитой (Tool_1CD и аналоги) с выгрузкой в новую базу. Инструмент неофициальный, работайте только на копии.
  • 👤 Не уверены в результате — привлеките специалиста. Цена восстановления базы у подрядчиков ориентировочно от 3 000 до 15 000 ₽ в зависимости от объёма повреждений; это дешевле, чем потерянный учёт.

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

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

Профилактика ошибки уникального индекса
Выполнено: 0 / 6

Проверьте, что запомнили

Проверьте себя
Ошибка в индексе `_ACCRGAT` при закрытии месяца — с чего начать?
Какая утилита проверяет и чинит файловую базу `.1CD`?
Что обязательно сделать перед любым исправлением базы?

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

Что означает «дублирование ключей в уникальном индексе»?
В служебной таблице базы появились две записи с одинаковым ключом там, где допустимо только одно значение. 1С не может сохранить данные, пока дубль не устранён.
Опасна ли эта ошибка для данных?
Сама по себе — нет, она блокирует операцию, но не удаляет учёт. Опасны неаккуратные действия по исправлению без резервной копии.
Индекс `_ACCRGAT` — это что и как лечить?
Это таблица итогов бухгалтерского регистра. Лечится пересчётом итогов через «Управление итогами», восстанавливать всю базу не нужно.
chdbfl.exe помогает при клиент-серверной базе на SQL?
Нет. Утилита работает только с файловыми базами .1CD. Для SQL и PostgreSQL используйте «Тестирование и исправление» в конфигураторе.
Ошибка PostgreSQL 23505 — то же самое?
Да, это тот же дубль, но на уровне СУБД. Сначала ТиИ с реиндексацией; ручное удаление строк — только для администратора с бэкапом.
Почему ошибка появилась после отключения света?
Файловая база повреждается при обрыве записи. Индекс остаётся в несогласованном состоянии. Помогает chdbfl.exe в несколько проходов и очистка кэша.