Ошибка 1С: Длина ключа индекса превышает максимально допустимую — решение
- При обновлении конфигурации, сохранении метаданных или проведении документов вылетает окно:
Длина ключа индекса превышает максимально допустимую. - В деталях ошибки фигурирует системное имя таблицы (например,
_InfoRg...или_Reference...). - Операция аварийно прерывается, изменения в базу данных не записываются.
- Часто проявляется после добавления составных типов данных или длинных строковых реквизитов неограниченной длины в индексы.
Простое объяснение причины
База данных (MS SQL Server или PostgreSQL) использует специальные «указатели» (индексы) для быстрого поиска. В СУБД есть жесткий лимит: суммарный размер всех полей, входящих в один поисковый индекс, не может быть больше 900 байт (в старых версиях SQL) или 1700/2704 байт в современных. Если сложить длину строковых полей с признаком «Индексировать», лимит исчерпывается.
Пошаговое исправление в Конфигураторе
- Откройте проблемную базу в режиме Конфигуратор.
- Найдите объект метаданных (справочник, документ или регистр сведений), указанный в ошибке.
- Откройте его свойства и перейдите во вкладку Реквизиты (или Измерения для регистров сведений).
- Проверьте строковые поля:
- Уменьшите длину строковых реквизитов (например, со 150–250 символов до 50–100, если этого достаточно).
- Для полей, где включено свойство Индексировать (или Ведущее), снимите значение
ИндексироватьнаНе индексировать, если по этому полю не ведется постоянный поиск.
- Если реквизит содержит длинный комментарий, измените его тип на Строка неограниченной длины (такие строки не попадают в ключ индекса напрямую).
- Нажмите F7 (Обновить конфигурацию базы данных) и подтвердите изменения.
Частые вопросы (FAQ)
Почему в файловой базе ошибка не возникала, а при переходе на SQL появилась?
Встроенная файловая СУБД 1С имеет другие внутренние ограничения на индексы, чем профессиональные серверы СУБД (MS SQL Server / PostgreSQL), которые строго соблюдают стандарт длины ключа.
Как узнать, какой именно справочник или регистр сбоит по имени таблицы _InfoRg1234?
В Конфигураторе или через консоль запросов можно выполнить функцию ПолучитьСтруктуруХраненияБазыДанных(), передав имя таблицы СУБД — она выдаст человеческое название объекта 1С.
Повлияет ли снятие индексации на скорость работы?
Если по этому реквизиту бухгалтеры не делают постоянных отборов в списках, скорость работы пользователей не изменится, а запись новых элементов даже ускорится.
Можно ли исправить ошибку штатными средствами без изменения конфигурации?
Если конфигурация типовая и находится на замке, обновите ее до актуального релиза от фирмы 1С — разработчики обычно быстро устраняют подобные коллизии в официальных патчах.