При переходе на новые версии платформы или изменении режима совместимости (особенно при «прыжке» с версии 8.2.13 на более высокие) специалисты часто сталкиваются с критическими ошибками реструктуризации. Одна из самых неприятных — ошибка SDBL: В схеме базы данных нет таблицы с именем AccumRgAggOpt.... Рассмотрим подробнее, почему это происходит и как исправить ситуацию, сохранив работоспособность системы.
Давайте проанализируем ситуацию: платформа 1С при повышении режима совместимости пытается привести структуру таблиц на SQL-сервере в соответствие с новыми внутренними стандартами. Таблица _AccumRgAggOpt (Опции сети агрегатов) является системной и хранит параметры работы агрегатов оборотных регистров накопления.
Выясним причину сбоя: ошибка возникает из-за рассинхронизации. В метаданных конфигурации указано, что регистр использует агрегаты, и платформа ожидает увидеть соответствующую таблицу в SQL. Однако в режиме совместимости 8.2.13 эта таблица могла отсутствовать или иметь другую структуру, которую новая версия платформы не может корректно подхватить. В результате DBSchema (внутренний реестр структуры базы данных) ссылается на объект, которого физически нет в базе, что и вызывает остановку процесса с ошибкой SDBL.
Прежде чем приступать к радикальным изменениям, проанализируем текущее состояние базы. Очень часто ошибка «тянется» из старого режима совместимости, просто не проявляя себя до момента реструктуризации. Проделаем следующие действия:
8.2.13).Как показывает практика и обсуждение специалистов, наиболее эффективным способом является временное отключение механизма агрегатов для «проблемного» регистра. Разберем этот процесс по шагам на примере регистра накопления Закупки:
ПолучитьСтруктуруХраненияБазыДанных).После того как агрегаты удалены, попробуйте изменить режим совместимости на 8.2.16 (или требуемый вам) и снова обновить конфигурацию базы данных. В 90% случаев реструктуризация пройдет успешно, так как платформа больше не будет искать несуществующую таблицу AccumRgAggOpt.
Проанализируем архитектурные изменения платформы. Версия 8.2.14 была переломной в части хранения данных. Если переход с 8.2.13 на 8.2.16 не удается, попробуем двигаться итерационно:
8.2.14.8.2.16.Такой подход позволяет платформе последовательно применить скрипты обновления таблиц, которые могут некорректно срабатывать при «перескакивании» через версии.
Если манипуляции с агрегатами не помогли, это может означать, что информация о таблице «застряла» в системной таблице DBSchema внутри SQL-базы. Рассмотрим, как очистить эти фантомные записи законным способом:
.dt..dt.Почему это работает? При загрузке данных из .dt платформа 1С не копирует структуру таблиц «байт в байт», а создает её заново на основе текущих метаданных конфигурации. Фантомные записи о несуществующих таблицах AccumRgAggOpt при этом не переносятся в новую DBSchema.
После успешной смены режима совместимости нам необходимо вернуть функционал агрегатов (если они используются для ускорения отчетов). Рассмотрим, как это сделать правильно:
Закупки (используйте настройки, которые сохранили на Шаге 2).Для программного контроля состояния агрегатов мы можем использовать встроенный язык 1С. Посмотрим на пример кода, который позволяет проверить, включены ли агрегаты для конкретного регистра:
Регистр = РегистрыНакопления.Закупки;
Если Регистр.ПолучитьИспользованиеАгрегатов() Тогда
Сообщить("Агрегаты для регистра Закупки активны.");
Иначе
Сообщить("Агрегаты не используются, требуется настройка.");
КонецЕсли;
В исключительных случаях, когда база огромная и выгрузка в .dt невозможна, можно прибегнуть к созданию пустой таблицы-заглушки непосредственно в SQL Management Studio. Выясним название таблицы из ошибки (например, _AccumRgAggOpt36745) и создадим её вручную:
CREATE TABLE _AccumRgAggOpt36745 (
-- Минимальный набор полей, обычно это системные поля платформы
_Period datetime,
_Splitter numeric(10,0)
);
Внимание: это экстремальный метод. После создания таблицы запустите реструктуризацию в 1С. Платформа обнаружит таблицу, «успокоится» и в процессе обновления либо пересоздаст её правильно, либо корректно удалит, если она больше не нужна в новом режиме совместимости.
Подводя итог, отметим, что наиболее безопасным и рекомендуемым путем является временное удаление настроек агрегатов в Конфигураторе с последующей пересборкой базы через .dt. Это гарантирует очистку системных таблиц от мусора и корректный переход на современные режимы работы платформы 1С.