Как исправить ошибку SDBL "В схеме базы данных нет таблицы DataHistorySettingsExt" при работе с расширениями

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация IT и автоматизация бизнеса
← На главную

При активной разработке в среде 1С:Предприятие 8.3, особенно на релизах ветки 8.3.22, программисты часто сталкиваются с необъяснимыми на первый взгляд ошибками SDBL. Одной из наиболее коварных является ошибка: В схеме базы данных нет таблицы с именем DataHistorySettingsExt. Эта ситуация возникает при попытке добавить новый объект (например, справочник) в расширение или при открытии формы такого объекта в режиме "Предприятие".

В данной статье мы подробно разберем причины возникновения этой проблемы и рассмотрим несколько методов её решения — от простых манипуляций с настройками до радикального восстановления структуры базы данных.

Причина возникновения ошибки: системный баг платформы

Проанализируем ситуацию: почему платформа требует таблицу, которую сама же должна была создать? Таблица DataHistorySettingsExt является системной. Она отвечает за хранение настроек механизма "История данных" специально для объектов, добавленных через расширения. В версиях 8.3.21 и 8.3.22 разработчики платформы внесли существенные изменения в работу этого механизма.

Ошибка SDBL (Simple DataBase Layer) означает, что уровень доступа к данным платформы ожидает увидеть в SQL-структуре таблицу, описание которой есть в метаданных, но фактически в базе данных она отсутствует. Это происходит из-за сбоя в процессе реструктуризации при применении расширения. Платформа "забывает" создать служебные таблицы для версионирования, но при любом обращении к объекту расширения пытается к ним обратиться.

Метод 1. Манипуляция свойством "История данных"

Первым делом попробуем самый быстрый и безболезненный способ. Иногда достаточно "подтолкнуть" платформу к обновлению схемы данных для конкретного объекта. Выполним следующие шаги:

  1. Откроем расширение в Конфигураторе.
  2. Найдем добавленный справочник, который вызывает ошибку.
  3. Перейдем на закладку "Прочее" в свойствах справочника.
  4. Установим флаг в поле История данных в значение "Использовать" (если он не стоит) или, наоборот, снимем его, если он был установлен.
  5. Нажмем F7 для обновления конфигурации базы данных.
  6. Вернем настройку в исходное состояние и снова обновим конфигурацию базы данных (F7).

Этот метод заставляет механизм реструктуризации перепроверить наличие необходимых системных таблиц и может автоматически досоздать DataHistorySettingsExt.

Метод 2. Устранение ошибки "Тип не определен" при тестировании

Часто проблема с таблицей SDBL сопровождается ошибками при выполнении Тестирования и исправления (ТИИ). Например, может возникнуть ошибка: Тип не определен '3937114e-c06a-47c2-85e6-ed96c6a4d446'. Этот GUID напрямую связан с внутренними системными типами метаданных расширений.

Если ТИИ завершается аварийно на этапе пересчета итогов, воспользуемся следующим лайфхаком:

Перейдем в параметры информационной базы и установим количество заданий при пересчете итогов равным 1. В некоторых сборках платформы 8.3.22 параллельное выполнение этих операций вызывает конфликты блокировок и ошибки доступа к системным таблицам расширений. После выполнения этой настройки запустим ТИИ повторно только с флагом "Пересчет итогов".

Метод 3. Радикальное восстановление через чистый файл конфигурации (cf)

Если стандартные методы и выгрузка/загрузка .dt не помогают (так как ошибка структуры может "переехать" вместе с файлом выгрузки), придется прибегнуть к более сложному, но гарантированному способу. Рассмотрим этот алгоритм подробно:

Суть метода заключается в том, чтобы заставить платформу полностью пересоздать схему таблиц основной базы, очистив её от "фантомных" ссылок на отсутствующие таблицы расширений.

  1. Создадим полную копию базы данных и выгрузим файл конфигурации (.cf) из чистой типовой базы той же версии (например, из шаблона Комплексной автоматизации).
  2. В рабочей базе снимем конфигурацию с поддержки (если были изменения) или просто загрузим чистый типовой .cf через Конфигурация - Загрузить конфигурацию из файла. Внимание: это приведет к потере всех реквизитов и объектов, которые были добавлены в основную конфигурацию вручную (не через расширения).
  3. Применим изменения (F7). Платформа удалит "лишние" колонки и таблицы, приведя структуру SQL к эталонному виду.
  4. Теперь нам нужно вернуть доработки. Вместо того чтобы снова менять основную конфигурацию, перенесем все доработки в расширение.
  5. Для восстановления потерянных данных (которые были в удаленных реквизитах основной конфигурации до загрузки .cf) используем механизм Конвертации данных 2.0. Создадим правила обмена между "сломанной" копией базы и обновленной базой. Поскольку структуры почти идентичны (разница только в расположении объектов — в основной конфигурации или в расширении), сопоставление пройдет автоматически.

Этот метод позволяет полностью избавиться от мусора в системных таблицах Config и ConfigCAS, где хранятся данные о расширениях.

Метод 4. Очистка системных таблиц на уровне SQL

Для системных администраторов и опытных разработчиков существует путь исправления через SQL Management Studio. Платформа хранит информацию о расширениях в таблицах ConfigCAS (текущие) и ConfigCASSave (сохраняемые). Если ошибка SDBL не дает даже открыть базу, можно попробовать полностью очистить расширения из базы:


-- ВНИМАНИЕ: Это удалит ВСЕ расширения из базы данных!
DELETE FROM dbo.ConfigCAS
DELETE FROM dbo.ConfigCASSave

После выполнения этих запросов необходимо очистить серверный кэш 1С и заново добавить расширение в базу через Конфигуратор. Это спровоцирует платформу на создание структуры таблиц "с нуля".

Метод 5. Обновление платформы

Проанализировав технологические журналы многих систем, специалисты 1С подтвердили, что данная ошибка является критическим дефектом определенных сборок (в частности, 8.3.22.1709). Рекомендуется обновить платформу до релизов не ниже 8.3.22.1921 или перейти на более стабильные ветки 8.3.23 или 8.3.24.

В новых версиях механизмы SDBL при работе с DataHistorySettingsExt были значительно доработаны, и автоматическое создание недостающих системных таблиц происходит более надежно при первом же обращении к метаданным расширения.

Резюме

Если вы столкнулись с ошибкой DataHistorySettingsExt, не паникуйте. Проанализируем краткий план действий:

Помните, что работа с расширениями на уровне структуры БД — это сложный процесс, и наличие резервной копии перед любыми манипуляциями с конфигурацией является обязательным условием успеха.

← На главную