Дублирование ключей в уникальном индексе ‘_ACCRGAT’ в локальной базе

В типовой файловой базе 1С при попытке удалить старые документы вылезла редкая ошибка: «Дублирование ключей в уникальном индексе ‘_ACCRGAT’». В стандартных логах деталей минимум, а типовое тестирование и исправление базы ситуацию не спасло. Рассказываю, как локализовать проблему и что именно сделать, чтобы корректно удалить документы и вернуть базе нормальное состояние.

Окружение, в котором возникла ошибка

  • Платформа: 1С:Предприятие 8.5 (8.5.1.1343)
  • Конфигурация: Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.198.19)
  • Тип базы: файловая

Задача была простая: почистить базу от старых документов через стандартные инструменты. Но при установке пометки удаления и дальнейшей попытке удаления вылезла ошибка, которую до этого я ни разу не встречал. Дублирование ключей в уникальном индексе _ACCRGAT Если открыть подробности, то нового и полезного ничего не увидим.

Как именно проявлялась ошибка

Ошибка «Дублирование ключей в уникальном индексе ‘_ACCRGAT’» проявлялась в нескольких типовых операциях:

  • Установка пометки удаления объекта
  • Отмена проведения документа
  • Удаление через мастер удаления объектов

То есть проблема не ограничивалась конкретной формой или обработкой, а всплывала при попытке изменить состояние проблемных документов любым способом из любого места.

Что не помогло

Первое, что приходит в голову при любых проблемах с файловой базой — тестирование и исправление базы (ТИИ).

  • Выполнено стандартное тестирование и исправление — без эффекта
  • Пробованы разные варианты настроек ТИИ — ошибка продолжала появляться

Дальше в списке естественных действий — chdbfl. Но база жила в 1С:ГРМ, выкачивать её ради chdbfl в конкретной ситуации было нецелесообразно, поэтому пошёл другим путём.

Поиск проблемной таблицы и регистра

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

  1. Открываем обработку для анализа структуры базы, например «Структура хранения метаданных.epf» (подойдёт любая аналогичная обработка для просмотра таблиц). Структура хранения метаданных: поиск таблицы по индексу _AccRgAT230181

  2. В списке таблиц находим ту, которая фигурирует в тексте ошибки. В моём случае это _AccRgAT230181.

По имени таблицы видно, что это таблица итогов регистра, связанная с объектом «ИтогиПоСчетамССубконто». Значит, логично двигаться в сторону управления итогами регистра накопления.

Пошаговое решение через управление итогами

Переходим в управление итогами

  1. Открываем раздел Функции для технического специалиста → Стандартные → Управление итогами.
  2. В форме управления итогами включаем режим «Полные возможности». Меню: Функции для технического специалиста – Управление итогами
Форма управления итогами регистра в режиме полных возможностей
  1. Находим нужный регистр, соответствующий нашей таблице _AccRgAT… (в моём случае — регистр «ИтогиПоСчетамССубконто»).

Временно отключаем использование итогов

  1. Проверяем, что для регистра используются Итоги и Текущие итоги.
  2. В панели команд:
    • Нажимаем «Итоги» → «Выключить использование итогов»
    • Нажимаем «Текущие итоги» → «Выключить использование текущих итогов»

Это временно отключает расчёт и использование итогов по проблемному регистру.

Повторяем проблемную операцию

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

  • Установить пометку удаления
  • Отменить проведение
  • Удалить документ через мастер удаления

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

Возвращаем итоги и пересчитываем

После успешного удаления:

  1. Возвращаемся в Управление итогами.
  2. Включаем обратно:
    • «Итоги» → «Включить использование итогов»
    • «Текущие итоги» → «Включить использование текущих итогов»
  3. Запускаем пересчёт итогов по выбранному регистру за необходимый период.

После пересчёта регистр вернулся в консистентное состояние, и ошибка «Дублирование ключей в уникальном индексе ‘_ACCRGAT’» больше не повторялась.

Выводы и рекомендации

  • Ошибка с дублированием ключей в индексе _ACCRGAT может быть связана с рассинхронизацией итогов по регистру, даже если ТИИ формально не находит проблем.
  • В ряде случаев проблему можно решить за счёт временного отключения использования итогов по конкретному регистру, выполнения проблемной операции и последующего пересчёта итогов.
  • Перед любыми манипуляциями с итогами в боевых базах рекомендуется делать резервную копию, особенно если речь идёт о старых версиях платформы и типовых конфигураций.