Ошибка «дублирование ключей в уникальном индексе» в 1С: как убрать
Содержание
Ошибка Дублирование ключей в уникальном индексе означает, что в таблице базы 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 через конфигуратор или сделайте бэкап средствами СУБД.C:\Program Files\1cv8\<версия>\bin\chdbfl.exe. Запустите, укажите путь к 1Cv8.1CD, поставьте галку «Исправлять обнаруженные ошибки», нажмите «Выполнить». Прогоните 2–3 раза подряд, пока ошибок не останется.%LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8. Либо запустите базу с ключом /ClearCache. Кэш пересоберётся при следующем входе._ACCRGAT или _ACCUMRGT — переходите к разделу «Управление итогами» ниже. Это точечнее и быстрее полного ТиИ.Управление итогами: лечим _ACCRGAT без утилит
Самый частый случай — _ACCRGAT при закрытии месяца. База цела, разъехались итоги. Полное восстановление не нужно, помогает пересчёт.
- Откройте базу в режиме
1С:Предприятиепод администратором. - Меню
Операции→Управление итогами(в интерфейсе «Такси»:Главное→Все функции→Управление итогами). Если пункта нет — включитеВсе функциив настройках. - Снимите использование итогов: сдвиньте границу расчёта итогов на период раньше проблемного или нажмите «Отключить использование итогов».
- Повторите операцию, которая падала (например, перепроведите документ или запустите закрытие месяца) — теперь она пройдёт, потому что 1С обращается не к битым итогам, а к движениям.
- Верните итоги: «Установить границу расчёта итогов» на конец нужного периода и «Пересчитать» → «Полный пересчёт».
Если пункта «Управление итогами» нет ни в одном меню — воспользуйтесь обработкой «Управление итогами и агрегатами» либо групповым перепроведением документов за период. Результат тот же: итоги регистра собираются заново.
Определяем проблемную таблицу по имени индекса
Когда суффикса T нет, а дубль в справочнике или регистре сведений, нужно понять точную таблицу. Имя _REFERENCE123 или _INFORG456 — это внутреннее имя, которое надо сопоставить с метаданными.
- В конфигураторе:
Администрирование→ структура хранения таблиц; либо стандартная обработкаСтруктура хранения базы данных(доступна с диска ИТС как внешняя обработка). - Число после префикса — порядковый номер объекта метаданных. Обработка покажет, какому справочнику или регистру он соответствует.
- Дальше открывают этот объект, ищут два элемента с одинаковым кодом/набором измерений и удаляют или правят дубль.
После правки обязательно прогоните Реиндексацию таблиц в ТиИ — старый уникальный индекс мог остаться в неконсистентном виде.
Случай PostgreSQL: ошибка 23505
На PostgreSQL ошибка приходит от самой СУБД: 23505: duplicate key value violates unique constraint. Сценарий тот же — дубль в таблице 1С, но чинить через chdbfl.exe нельзя (утилита только для файловых баз).
Порядок:
- Сначала — стандартное
Тестирование и исправлениев конфигураторе с реиндексацией. В 80% случаев решает. - Не помогло — из текста ошибки берут имя constraint и таблицы, находят конфликтующие строки SQL-запросом и удаляют лишнюю. Это делает только администратор с бэкапом: прямая правка таблиц 1С в обход платформы легко ломает ссылочную целостность.
- После ручной чистки — снова ТиИ с реиндексацией, чтобы платформа привела индексы в порядок.
Никогда не удаляйте строки в боевой SQL-базе без свежей резервной копии и понимания, какая из двух записей «правильная». Ошибочное удаление уносит документы или движения.
Если ничего не помогло
Когда chdbfl.exe и ТиИ прогнаны, а ошибка держится:
- 🔁 Прогоните
chdbfl.exeещё несколько раз — часть повреждений уходит только после повторных проходов. - 📤 Попробуйте выгрузить конфигурацию/данные в
.dtи загрузить в новую пустую базу. Иногда переливка снимает дубль, который правка на месте не берёт. - 🧩 Тяжёлый случай файловой базы — восстановление таблиц сторонней утилитой (
Tool_1CDи аналоги) с выгрузкой в новую базу. Инструмент неофициальный, работайте только на копии. - 👤 Не уверены в результате — привлеките специалиста. Цена восстановления базы у подрядчиков ориентировочно от 3 000 до 15 000 ₽ в зависимости от объёма повреждений; это дешевле, чем потерянный учёт.
Как предотвратить повторение
Дубли в уникальном индексе почти всегда — следствие некорректного завершения работы или отсутствия бэкапов.
Проверьте, что запомнили
Частые вопросы
Что означает «дублирование ключей в уникальном индексе»?
Опасна ли эта ошибка для данных?
Индекс `_ACCRGAT` — это что и как лечить?
chdbfl.exe помогает при клиент-серверной базе на SQL?
.1CD. Для SQL и PostgreSQL используйте «Тестирование и исправление» в конфигураторе.Ошибка PostgreSQL 23505 — то же самое?
Почему ошибка появилась после отключения света?
chdbfl.exe в несколько проходов и очистка кэша.