При выгрузке конфигурации из клиент-серверной базы данных (MS SQL Server или PostgreSQL) и ее последующей загрузке в пустую файловую базу разработчики часто сталкиваются с ошибкой реструктуризации: «Длина ключа таблицы превышает максимально допустимую». В тексте ошибки платформа указывает служебное имя таблицы, например _InfoReg24791. Разберем по шагам, почему возникает эта проблема, как найти проблемный объект и какими способами ее можно устранить.
Рассмотрим главные технические различия между клиент-серверным и файловым режимами работы платформы 1С:Предприятие:
.1CD) максимально допустимая суммарная длина ключа в одном индексе составляет 1920 байт. В клиент-серверных СУБД этот лимит значительно выше, поэтому база прекрасно работает на сервере, но отказывается обновляться в файловом варианте.Выясним, почему попытки найти таблицу вида _InfoReg24791 в структуре базы или в SQL-менеджере не дают результатов. Данное имя генерируется платформой динамически при первом создании таблицы регистра или в процессе его реструктуризации. Такое имя временное или новое, поэтому в физической базе до завершения обновления соответствующей таблицы с подобным номером может еще не существовать.
Проанализируем методы поиска объекта метаданных, вызывающего ошибку превышения длины ключа:
Строка. Обращайте внимание на поля, где задана высокая длина (например, 200, 500, 1024 символа).Строка установлено свойство Индексировать или Индексировать с доп. упорядочиванием, платформа создает отдельный индекс по этому полю.ПолучитьСтруктуруХраненияБазыДанных(): В исходной серверной базе можно выполнить программный код для получения полного соответствия имен таблиц СУБД и объектов метаданных.Пример кода для поиска сопоставления таблиц и анализа длины полей:
СтруктураБазы = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Таблица Из СтруктураБазы Цикл
Если СтрНачинаетсяС(Таблица.ИмяТаблицыХранения, "_INFOREG") Тогда
Сообщить("Таблица: " + Таблица.ИмяТаблицыХранения + " -> Объект: " + Таблица.ИмяТаблицы);
КонецЕсли;
КонецЦикла;
Разберем основные варианты исправления структуры регистра для успешного разворачивания файловой базы:
Измерения в Ресурсы. Ресурсы по умолчанию не входят в первичный индекс регистра.Справочник и используйте ссылку на него. Ссылочные типы имеют фиксированный и минимальный размер в индексе.Индексировать установлено в значение Не индексировать.