При обновлении конфигурации в файловом варианте работы 1С:Предприятие часто возникают ошибки, связанные с физическими ограничениями формата базы данных .1CD. Одной из наиболее частых и неприятных является ошибка «Длина ключа индекса превышает максимально допустимую». Давайте разберем, почему она возникает и как пошагово устранить эту проблему.
Файловая версия базы данных имеет жесткие технические ограничения на размер индекса. Когда платформа пытается создать индекс в таблице, она суммирует длины всех полей, входящих в этот индекс. Если сумма превышает допустимый лимит (обычно 900 байт), возникает системная ошибка. В случае с регистрами сведений, в состав индекса принудительно включаются все измерения, а также период и регистратор.
Когда вы видите сообщение вида _InfoRg268094_1@, это означает, что платформа пытается создать индекс для таблицы регистра сведений с физическим именем _InfoRg268094. Обозначение 1@ — это служебное имя индекса, построенного по измерениям данного регистра.
Чтобы успешно устранить ошибку, будем действовать по следующему алгоритму:
Для определения того, какой регистр соответствует таблице _InfoRg268094, воспользуемся методом ПолучитьСтруктуруХраненияБазыДанных(). Это стандартный метод, который возвращает соответствие имен таблиц СУБД и объектов метаданных. Запустите в консоли кода следующий фрагмент:
СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого КлючИЗначение Из СтруктураХранения Цикл
Если СтрНайти(КлючИЗначение.Значение.ИмяТаблицы, "_InfoRg268094") > 0 Тогда
Сообщить("Найден объект: " + КлючИЗначение.Ключ);
КонецЕсли;
КонецЦикла;
После того как мы выяснили, какой регистр сведений является «виновником», открываем его в Конфигураторе. Помните: в файловой базе данных в состав индекса регистра сведений принудительно включаются все измерения, даже если они не помечены свойством «Индексировать». Если у вас есть измерения типа Строка, их длина напрямую влияет на размер ключа.
Проанализируйте свойства измерений:
Строка(1000) или более является приоритетным.Если вы обнаружили строковое измерение с чрезмерно большой длиной, необходимо выполнить его корректировку. Рассмотрим способы решения:
Способ А: Уменьшение длины. Если бизнес-логика позволяет, уменьшите длину строки до минимально необходимой (например, с 1000 до 150 или 200 символов). Это самый быстрый и надежный способ вернуть базу в рабочее состояние.
Способ Б: Замена типа. Если вам необходимо хранить длинные данные, рассмотрите возможность использования ХранилищеЗначения для длинных текстов или выноса таких данных в отдельный справочник, где они не будут участвовать в ключе индекса регистра.
Способ В: Оптимизация архитектуры. Если регистр перегружен измерениями, возможно, стоит пересмотреть его структуру, например, разделить один большой регистр на два специализированных, чтобы распределить нагрузку на индексы.
После внесения изменений в структуру измерения, попробуйте повторно выполнить обновление конфигурации базы данных. В большинстве случаев после уменьшения длины строкового измерения проблема исчезает, так как суммарный размер ключа индекса укладывается в допустимые лимиты платформы.
Важное примечание: Если вы планируете работать в файловой базе данных, всегда старайтесь придерживаться принципа разумной достаточности при определении длины строковых полей. Избыточная длина не только приводит к ошибкам при индексации, но и снижает производительность системы в целом.