Имя: Пароль:
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
Я могу удаленно подключиться, пиши на liveups@yandex.ru
19 nikolas260579
 
26.04.20
19:19
Руки дошли до базы спустя 10 дней. (2) был близок к истине. Реквизит "Комментарий", длина 500 символов, стояло "Индексировать". Убрал. Работает.
20 trad
 
26.04.20
23:59
Если кто-то проиндексировал комментарий, то не исключено, что все подряд там проиндексировал. Обрати на это внимание
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший