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

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

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

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

Выясним причину возникновения ошибки

Прежде чем переходить к лечению, разберем природу заболевания. Таблица DataHistorySettingsExt является системной. Она отвечает за хранение настроек механизма "История данных" именно для тех объектов, которые были добавлены через расширения конфигурации. Когда мы создаем новый РегистрСведений в расширении, платформа при обновлении конфигурации базы данных должна инициализировать соответствующие записи в системных таблицах. Из-за бага (например, зафиксированного под номером 10237424), при определенных условиях (разные режимы совместимости, кэширование метаданных или специфический порядок обновления) эта таблица не создается или платформа "теряет" связь с ней.

В результате при попытке открыть форму регистра или обратиться к нему программно, сервер 1С посылает запрос к SQL-серверу (или файловой таблице), не находит нужную структуру и выбрасывает исключение. Рассмотрим наиболее эффективные способы решения этой проблемы.

Решение 1: Принудительное включение Истории данных

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

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

Решение 2: Синхронизация режима совместимости

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

Откроем свойства расширения (правой кнопкой на корне расширения — "Свойства"). Убедимся, что значение в поле РежимСовместимости в точности совпадает со значением в основной конфигурации. Если в основной базе стоит "Не использовать", то и в расширении должно быть "Не использовать". Любое различие может привести к тому, что при генерации SQL-запросов платформа будет использовать разные стандарты именования или структуры системных таблиц, что и приводит к ошибке DataHistorySettingsExt.

Решение 3: Полная реструктуризация через Тестирование и Исправление

Если стандартные методы не помогают, стоит прибегнуть к более глубокой проверке базы данных. Обычное "Тестирование и исправление" может не дать результата, если не выбраны правильные опции. Рассмотрим правильную последовательность:

  1. Обязательно создадим резервную копию базы данных.
  2. Зайдем в меню "Администрирование" — "Тестирование и исправление...".
  3. Установим флаг только на пункте "Реструктуризация таблиц информационной базы".
  4. В нижней части окна выберем вариант "Тестирование и исправление" (а не только тестирование).
  5. Нажмем "Выполнить".

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

Решение 4: Очистка кэша и перезапуск службы

Иногда проблема кроется не в самой базе данных, а в локальных сеансах или кэше сервера. Рассмотрим комплексную очистку:

Сначала попробуем очистить локальный кэш пользователя. Для этого можно удалить базу из списка и добавить её заново или воспользоваться очисткой папок %AppData%\1C\1cv8 и %LocalAppData%\1C\1cv8. Однако при работе с расширениями важнее бывает серверный кэш.

Если у вас клиент-серверный вариант работы, рекомендуется:

  1. Остановить службу агента сервера 1С:Предприятие.
  2. Удалить содержимое папки snaccxt в каталоге описания информационной базы на сервере (это кэш расширений).
  3. Запустить службу заново.
  4. Запустить обновление информационной базы с ключом /ЗапуститьОбновлениеИнформационнойБазы.

Решение 5: Создание объекта "с нуля" без копирования

Выясним еще одну интересную особенность: иногда при копировании объектов из основной конфигурации в расширение или между расширениями переносятся скрытые идентификаторы (UUID), которые могут конфликтовать. Если вы создавали регистр копированием, попробуйте следующий метод:

Удалим проблемный регистр из расширения совсем. Применим изменения (F7). Затем вручную, через кнопку "Добавить", создадим новый РегистрСведений, прописав все его измерения и ресурсы заново. Это гарантирует, что платформа воспримет его как абсолютно новый объект и инициирует создание всех необходимых системных структур с чистыми идентификаторами.

Решение 6: Обновление платформы

Как мы уже выяснили, данная проблема признана официальной ошибкой. В версиях 8.3.21 она проявляется наиболее часто. Проанализируем возможности обновления. Если ваш текущий релиз ниже чем 8.3.22.1923 или 8.3.23, настоятельно рекомендуем выполнить переход на более свежую сборку. В версиях ветки 8.3.23 и выше механизмы работы с историей данных в расширениях были значительно переработаны, и данная ошибка там практически не встречается.

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

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

← На главную