User Rating: 0 / 5

Star InactiveStar InactiveStar InactiveStar InactiveStar Inactive
 

Если Вам это интересно, то говорить "Добрый день" - неуместно.

Ситуация, о которой идет речь, может возникать в разных случаях. Например, при загрузке в файловую базу выгрузки из SQLного варианта базы. Так же это может случиться и при попытки обновить конфигурацию БД. Начинается все с непонятного сообщения:

 

Ошибка загрузки информационной базы. В информационную базу загружены не все данные

Собственно, первым делом жмите кнопку "Подробнее...".

Ошибка загрузки информационной базы. В информационную базу загружены не все данные по причине: Ошибка СУБД: Длина ключа индекса превышает максимально допустимую '_InfoR15768_ByNodeMsg_RNRSRSSS (_NodeTRef, _NodeRRef, _MessageNo, _Fld14802_TYPE, _Fld14802_RTRef, _Fld14802_RRRef, _Fld14519_TYPE, _Fld14519_S, _Fld14520_TYPE, _Fld14520_RTRef, _Fld14520_RRRef, _Fld14521, _Fld15539, _Fld15540)' по причине: Длина ключа индекса превышает максимально допустимую '_InfoR15768_ByNodeMsg_RNRSRSSS (_NodeTRef, _NodeRRef, _MessageNo, _Fld14802_TYPE, _Fld14802_RTRef, _Fld14802_RRRef, _Fld14519_TYPE, _Fld14519_S, _Fld14520_TYPE, _Fld14520_RTRef, _Fld14520_RRRef, _Fld14521, _Fld15539, _Fld15540)'

Тут мы начинаем скролить сообщение в целях понять причину страшного события. Но нифига, кроме непонятных латинских символов мы не видим.

_InfoR15768_ByNodeMsg_RNRSRSSS

_InfoR15768_ByNodeMsg_RNRSRSSS

На самом деле эти латинские символы - единственная зацепка, но она настолько нечеткая, что придется изрядно потрудиться, чтобы найти ВРАГА.

Итак, сначала предыстория о том, что это такое. Дело в том, что в разных движках СУБД есть разные ограничения на эту самую длину ключа индекса. Отсюда засада в том, что в одном СУБД база работает (MS SQL), а в другом - нет (файловая СУБД). Очень часто это случается, когда индексируются реквизиты, являющиеся длинной строкой. Например строка длинной 1000 знаков. Еще есть такая вещь, как составной индекс, он используется у регистров. У регистров всегда индексируется ключ записи, которой состоит из всех измерений и стандартных полей (период, регистратор, номер строки...). Таким образом если в измерениях регистра несколько полей типа строка, то длина ключа равна сумме длин полей. Говорят, что длина ключа в файловой базе не должна превышать 1920 байт. Но это было давно, сейчас 8.3, хрен их знает. Подробнее о том, какой тип данных сколько съедает байт в какой СУБД и какое точно ограничение в той или иной СУБД я писать не буду. Я буду писать о том, что с этим делать.

Итак ошибка выявлена, и теперь нам надо что-то предпринимать.

Если ошибка вылазиет в процессе обновления конфигурации ИБ, то сценарий - прост. Сравните основную конфигурацию с конфигурацией ИБ. Обращайте внимание на новые измерения регистров, на изменение индексации реквизитов. Скорее всего, внимательно осмотрев сравнение, Вы быстро поймете, где надо исправить. Исправляем просто: уменьшаем длину строковых полей, убираем индексацию, убираем измерения в реквизиты. Конечно, это может вызвать проблемы с логикой системы, ведь не просто так Вы добавили измерение или включили индексацию, но другого варианта нет.

Сложнее при загрузке dt файла. Тут сравнивать нечего. Самое паршивое, что в сообщении нет имени метаданных, в сообщении только имя физической таблицы в СУБД. Как узнать где косяк?

Первым Вашим помощником будет обработка StrukturaHraneniaBazyDannyh_Xr8v.epf (она есть во вложении). Основана обработка на методе платформы ПолучитьСтруктуруХраненияБазыДанных(). Этот метод возвращает таблицу с соответствием физических таблиц и метаданных. Т.е. если Вы знаете имя таблицы, то Вы легко найдет имя справочника или регистра сведений.

Итак открываем серверную базу и запускаем в ней обработку.

Но рано радоваться!!! имена физическим таблицам присваиваются в момент создания или реструктуризации базы. И они разные в разных копиях одной и той же базы.

Грубо говоря я свои _InfoR15768_ByNodeMsg_RNRSRSSS - в таблице не нашел. Что же делать? А ничего, искать методом тыка.

Есть одна особенность, что разные у имен таблиц только цифры, а префикс и постфикс - одинаковые. Таким образом я нашел все индексы содержащие строку ByNodeMsg_RNRSRSSS. В результате осталось 5 регистров сведений. Далее методично, по очереди, в каждом из них грохаем измерения, сохраняемся, выгружаемся, загружаемся в файловую... загрузилось - УРА, нет - следующий.

StrukturaHraneniaBazyDannyh_Xr8v.epf у меня немного доработана, я для удобства решения данной задачи вывожу все имена индексов на отдельной закладке.

Еще она у меня конвертирована под 8.3

И еще:) она для обычного приложения, а сейчас у всех управляемые формы. Запускаем 1С с ключом /RunModeOrdinaryApplication.

 Удачи в поиске ВРАГОВ! :)

 

Авторизуйтесь пожалуйста