Как исправить ошибку SDBL «В схеме базы данных нет таблицы AccumRgAggOpt» при смене режима совместимости

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

При переходе на новые версии платформы или изменении режима совместимости (особенно при «прыжке» с версии 8.2.13 на более высокие) специалисты часто сталкиваются с критическими ошибками реструктуризации. Одна из самых неприятных — ошибка SDBL: В схеме базы данных нет таблицы с именем AccumRgAggOpt.... Рассмотрим подробнее, почему это происходит и как исправить ситуацию, сохранив работоспособность системы.

Разберем причину возникновения ошибки

Давайте проанализируем ситуацию: платформа 1С при повышении режима совместимости пытается привести структуру таблиц на SQL-сервере в соответствие с новыми внутренними стандартами. Таблица _AccumRgAggOpt (Опции сети агрегатов) является системной и хранит параметры работы агрегатов оборотных регистров накопления.

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

Шаг 1: Предварительная проверка исходного состояния

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

  1. Верните режим совместимости в исходное состояние (в нашем случае 8.2.13).
  2. Запустите Тестирование и исправление (ТиИ).
  3. В настройках выберите пункты: «Проверка логической целостности» и «Проверка ссылочной целостности».
  4. Если ТиИ проходит без ошибок, значит, проблема кроется именно в механизме трансформации таблиц при смене режима. Если ошибка появляется уже здесь — необходимо сначала восстановить целостность текущей базы.

Шаг 2: Удаление агрегатов из метаданных (Основное решение)

Как показывает практика и обсуждение специалистов, наиболее эффективным способом является временное отключение механизма агрегатов для «проблемного» регистра. Разберем этот процесс по шагам на примере регистра накопления Закупки:

  1. Откройте Конфигуратор и найдите регистр, на который ругается система (в тексте ошибки обычно указан индекс, который можно сопоставить через ПолучитьСтруктуруХраненияБазыДанных).
  2. Нажмите правой кнопкой мыши по регистру и выберите пункт «Агрегаты...».
  3. В открывшемся окне мы увидим список настроенных агрегатов. Важно: запишите или сделайте скриншот текущих настроек, чтобы потом их восстановить.
  4. Удалите все настроенные агрегаты из списка.
  5. Примените изменения (нажмите F7). Платформа выполнит реструктуризацию и удалит все связанные системные таблицы агрегатов, включая проблемную таблицу опций.

После того как агрегаты удалены, попробуйте изменить режим совместимости на 8.2.16 (или требуемый вам) и снова обновить конфигурацию базы данных. В 90% случаев реструктуризация пройдет успешно, так как платформа больше не будет искать несуществующую таблицу AccumRgAggOpt.

Шаг 3: Использование промежуточной версии режима совместимости

Проанализируем архитектурные изменения платформы. Версия 8.2.14 была переломной в части хранения данных. Если переход с 8.2.13 на 8.2.16 не удается, попробуем двигаться итерационно:

  1. Установите режим совместимости 8.2.14.
  2. Выполните реструктуризацию и сохраните изменения.
  3. Только после успешного завершения повышайте режим до 8.2.16.

Такой подход позволяет платформе последовательно применить скрипты обновления таблиц, которые могут некорректно срабатывать при «перескакивании» через версии.

Шаг 4: Пересборка схемы данных через выгрузку в .dt

Если манипуляции с агрегатами не помогли, это может означать, что информация о таблице «застряла» в системной таблице DBSchema внутри SQL-базы. Рассмотрим, как очистить эти фантомные записи законным способом:

  1. Выгрузите информационную базу в файл .dt.
  2. Создайте на SQL-сервере абсолютно новую пустую базу данных.
  3. Загрузите в неё ранее созданный файл .dt.

Почему это работает? При загрузке данных из .dt платформа 1С не копирует структуру таблиц «байт в байт», а создает её заново на основе текущих метаданных конфигурации. Фантомные записи о несуществующих таблицах AccumRgAggOpt при этом не переносятся в новую DBSchema.

Шаг 5: Программная очистка и восстановление агрегатов

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

  1. Вернитесь в Конфигуратор и заново добавьте агрегаты для регистра Закупки (используйте настройки, которые сохранили на Шаге 2).
  2. Обновите конфигурацию базы данных.
  3. В пользовательском режиме воспользуйтесь встроенной обработкой «Управление итогами» (или «Управление агрегатами»).
  4. Включите использование агрегатов и запустите процесс их заполнения.

Для программного контроля состояния агрегатов мы можем использовать встроенный язык 1С. Посмотрим на пример кода, который позволяет проверить, включены ли агрегаты для конкретного регистра:


Регистр = РегистрыНакопления.Закупки;
Если Регистр.ПолучитьИспользованиеАгрегатов() Тогда
    Сообщить("Агрегаты для регистра Закупки активны.");
Иначе
    Сообщить("Агрегаты не используются, требуется настройка.");
КонецЕсли;

Дополнительный метод: Создание «заглушки» в SQL (для системных администраторов)

В исключительных случаях, когда база огромная и выгрузка в .dt невозможна, можно прибегнуть к созданию пустой таблицы-заглушки непосредственно в SQL Management Studio. Выясним название таблицы из ошибки (например, _AccumRgAggOpt36745) и создадим её вручную:


CREATE TABLE _AccumRgAggOpt36745 (
    -- Минимальный набор полей, обычно это системные поля платформы
    _Period datetime,
    _Splitter numeric(10,0)
);

Внимание: это экстремальный метод. После создания таблицы запустите реструктуризацию в 1С. Платформа обнаружит таблицу, «успокоится» и в процессе обновления либо пересоздаст её правильно, либо корректно удалит, если она больше не нужна в новом режиме совместимости.

Подводя итог, отметим, что наиболее безопасным и рекомендуемым путем является временное удаление настроек агрегатов в Конфигураторе с последующей пересборкой базы через .dt. Это гарантирует очистку системных таблиц от мусора и корректный переход на современные режимы работы платформы 1С.

← На главную