Имя: Пароль:
1C
1С v8
Ошибка в базе: The maximum key length is 900 bytes
0 nikolas260579
 
16.04.20
18:34
Здравствуйте. В одной из баз вышла ошибка СУБД:
Microsoft SQL Server Native Client 10.0: Warning! The maximum key length is 900 bytes. The index '_Reference45_ByParentField4819_RLSRNG' has maximum length of 1033 bytes. For some combination of large values, the insert/update operation will fail.
HRESULT=80040E14, HRESULT=80040E14, SQLSrvr: SQLSTATE=42000, state=3, Severity=10, native=1946, line=1
SQLSrvr: SQLSTATE=01000, state=1, Severity=0, native=1945, line=1

Таблица _Reference45 - это справочник контрагентов. А вот как дальше расшифровать? Можно ли прямо в базе нужный объект найти, из-за чего ошибка пошла? Я понимаю, что строка где-то, но где?
1 Волшебник
 
модератор
16.04.20
18:39
индекс по полю Родитель.
наверное вложенность большая
2 Cyberhawk
 
16.04.20
18:40
Ну, какой-то из строковых реквизитов длиной эдак 1024 символа проиндексирован
3 nikolas260579
 
16.04.20
18:42
А конкретный объект в базе никак не найти? Как можно хотя бы по индексу узнать, какой родитель?
4 H A D G E H O G s
 
16.04.20
18:45
(3) Найди реквизит Field4819 и посмотри самый длинный.
5 Волшебник
 
модератор
16.04.20
18:46
вызови ПолучитьСтруктуруХраненияДанных и ищи там поле Field4819, узнай имя реквизита и сними по нему индекс
6 H A D G E H O G s
 
16.04.20
18:50
Ну или
SELECT TOP (100) [_IDRRef]
      ,[_Description]
      , ([_Fld4334])
  FROM [DB].[dbo].[_Reference185]
  order by len([_Fld4334]) desc
7 nikolas260579
 
16.04.20
19:06
(5) Что-то типа этого?
ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных(МассивОбъектов, Истина);


Для Каждого Таблица Из ТаблицаСтруктуры Цикл
    Сообщить(Строка(""+Таблица.Метаданные + " — " + Таблица.ИмяТаблицыХранения +" - "+Таблица.Назначение));
    Для Каждого Поле Из Таблица.Поля Цикл
        Сообщить(Строка("Поле = "+Поле.ИмяПоляХранения + " — " + Поле.ИмяПоля+" - "+Поле.Метаданные));
    КонецЦикла;
    
КонецЦикла;
8 nikolas260579
 
16.04.20
19:10
Только так я пока не нашёл нужный индекс, понял только, что это основная таблица справочника
9 nikolas260579
 
16.04.20
19:21
(3) Как это можно сделать? Наведите на мысль, пожалуйста
10 nikolas260579
 
16.04.20
19:24
Имею в виду, как реквизит по этому индексу найти
11 Cyberhawk
 
16.04.20
19:39
(4) (5) Выдыхайте, это NG.
Придется сначала триггером ловить их создание.
12 H A D G E H O G s
 
16.04.20
19:43
(11) NG NG, но имя поля то есть.
13 МихаилМ
 
16.04.20
19:51
(11) в этом случае  без триггера можно справиться.
(0)  справиться можно отменить индексацию или длину поля таблицы.
суффикс "NG" указывает на  таблицу , созданную при реструктизации.
14 nikolas260579
 
16.04.20
19:58
(13) самописные реквизиты все стоят "не индексировать".
15 nikolas260579
 
16.04.20
20:06
Реструктуризация остановилась с этой ошибкой на 43700 элементах справочника, их сейчас 43782
16 H A D G E H O G s
 
16.04.20
20:08
Позовите специалиста
17 nikolas260579
 
16.04.20
20:10
По длине там реквизит "Штрихкод" строка 200 символов, и "КодКарты" тоже такой же. Я не спец, но хочу разобраться.
18 H A D G E H O G s
 
16.04.20
20:40
Я могу удаленно подключиться, пиши на [email protected]
19 nikolas260579
 
26.04.20
19:19
Руки дошли до базы спустя 10 дней. (2) был близок к истине. Реквизит "Комментарий", длина 500 символов, стояло "Индексировать". Убрал. Работает.
20 trad
 
26.04.20
23:59
Если кто-то проиндексировал комментарий, то не исключено, что все подряд там проиндексировал. Обрати на это внимание