При работе в среде 1С:Предприятие разработчики и администраторы баз данных иногда сталкиваются с пугающими критическими ошибками, которые полностью блокируют работу пользователей. Одной из таких проблем является невосстановимая ошибка при выполнении запроса POST к ресурсу /e1cib/logForm с диагностическим сообщением: «Ошибка SDBL: Ссылочная константа содержит недопустимый ссылочный номер таблицы».
Эта ошибка указывает на глубокий конфликт на уровне SDBL (System Data Base Layer) — промежуточного слоя платформы, который транслирует запросы 1С на язык СУБД (MS SQL Server, PostgreSQL и др.). В этой статье мы подробно разберем, почему возникает этот сбой, проанализируем внутренние механизмы платформы и рассмотрим пошаговые методы устранения проблемы.
Для того чтобы понять природу ошибки, заглянем под капот платформы 1С. Каждому объекту метаданных (справочнику, документу, регистру) в базе данных соответствует физическая таблица (или набор таблиц) в СУБД. Платформа сопоставляет уникальные идентификаторы классов метаданных (UUID) с физическими номерами таблиц.
Когда вы открываете форму списка или элемента (что инициирует POST-запрос к /e1cib/logForm), платформа пытается обратиться к физической таблице по её внутреннему номеру. Если это соответствие нарушено, SDBL выдает ошибку о «недопустимом ссылочном номере таблицы». Выделим основные ситуации, когда это происходит:
.cf) в базу данных, платформа может неверно сопоставить внутренние идентификаторы таблиц предопределенных данных. База ожидает увидеть один номер таблицы, а в СУБД физически создается или сопоставляется другой.X1) может не создаться в СУБД. При обращении к форме списка система выдаст ошибку SDBL._Config и реальной структуры метаданных.Если ошибка возникла непосредственно после объединения конфигураций или получения изменений из хранилища, самым надежным способом будет откат к стабильному состоянию. Это позволяет избежать ручной правки таблиц СУБД, которая может окончательно разрушить базу данных.
Рассмотрим этот процесс по шагам:
.dt или сделаем бэкап средствами СУБД)..cf, внесем изменения вручную. Создадим справочник в конфигураторе самостоятельно, зададим ему необходимые реквизиты и формы, а затем вручную перенесем предопределенные элементы.Если у нас нет возможности откатить базу данных, мы можем заставить платформу 1С принудительно переписать структуру проблемной таблицы в СУБД и обновить связи в словаре SDBL. Для этого применим проверенную хитрость:
ВременныйРеквизитДляРеструктуризации с типом данных Строка (длина 10).Иногда ошибка указывает на конкретный номер таблицы (например, «...недопустимый ссылочный номер таблицы 34332»). В этом случае мы можем точно определить, какой объект метаданных вызывает проблему, с помощью встроенных инструментов 1С.
Проанализируем ситуацию программным путем. Напишем простой код во внешней обработке для получения точной структуры хранения базы данных:
ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого СтрокаСтруктуры Из ТаблицаСтруктуры Цикл
Если Найти(СтрокаСтруктуры.ИмяТаблицыХранения, "34332") > 0 Тогда
Сообщить("Проблемный объект найден: " + СтрокаСтруктуры.ИмяТаблицы + " (" + СтрокаСтруктуры.Метаданные + ")");
КонецЕсли;
КонецЦикла;
Выяснив, какой именно объект (или расширение) вызывает сбой, мы можем прицельно работать с ним: удалить его из расширения, пересоздать или очистить связанные с ним записи в служебных регистрах. Для удобного анализа и поиска объектов по номерам таблиц без ручного написания кода подойдёт обработка для просмотра структуры хранения базы данных.
Если база работает в клиент-серверном режиме, внутренние кэши сервера 1С:Предприятия и СУБД могут удерживать некорректные схемы метаданных. В таких случаях помогает глубокая очистка через создание промежуточного файлового образа базы данных:
.dt..dt в эту файловую базу. На файловом движке механизмы SDBL работают иначе, и при загрузке платформа попытается перестроить индексы и внутренние таблицы «с нуля»..dt.Если вы столкнулись с этой ошибкой в современных версиях платформы (начиная с релиза 8.3.24), обратите внимание на то, что стандартное тестирование и исправление теперь содержит специализированные механизмы для расширений конфигурации. При запуске тестирования и исправления обязательно отмечайте флажками опции «Проверка логической целостности расширений конфигурации» и «Реструктуризация таблиц расширений конфигурации». Это позволяет автоматически вылечить «битые» ссылки SDBL в таблицах с постфиксами X1 без ручного удаления расширений. При необходимости пакетного отключения или настройки сбойных модификаций можно использовать инструмент для группового управления расширениями информационной базы.