При выполнении технических работ по обновлению конфигурации или при попытке поднять режим совместимости (например, для подключения мобильного клиента), специалисты 1С нередко сталкиваются с критической ошибкой SDBL. Сообщение системы гласит: «Для одного ссылочного кода существует более одной таблицы в базе данных». В тексте ошибки обычно указываются конкретные имена таблиц, такие как Ecs, ErrorProcessingSettings или DynListSettings. Эта проблема блокирует возможность дальнейшего обновления и требует глубокого понимания того, как платформа взаимодействует с системой управления базами данных (СУБД).
В данной статье мы разберем природу этого сбоя, проанализируем причины его возникновения и рассмотрим пошаговые методики исправления ситуации, от самых простых до радикальных низкоуровневых манипуляций.
Рассмотрим, что происходит «под капотом» платформы. SDBL (Simple Data Base Layer) — это внутренний слой 1С, который служит прослойкой между кодом конфигурации и физическими таблицами SQL или файловой базы 1Cv8.1CD. Ошибка возникает в тот момент, когда в метаданных конфигурации (описании объектов) и в реальной физической структуре базы данных происходит рассинхронизация.
Выделим основные причины конфликта:
Params хранится бинарный объект DBSchema, который содержит описание всей структуры базы. Если в ходе прошлых обновлений произошел сбой, там могли остаться записи о таблицах, которых физически нет, или дублирующиеся коды.Проанализируем ситуацию автора темы: при попытке обновления возник конфликт с кодом 7290 и именами Ecs и ErrorProcessingSettings. Это типичный случай, когда системное имя новой версии платформы пересекается с существующим мусором в базе данных.
Первым делом нам необходимо провести инвентаризацию метаданных. Как показывает практика, проблема часто решается простым удалением лишних объектов. Разберем этот процесс по шагам:
В рассматриваемом случае именно этот метод помог пользователю. Конфликт вызывали «левые» справочники, которые не использовались, но их наличие сбивало логику обновления DBSchema при изменении режима совместимости.
Иногда резкий скачок версии режима совместимости (например, с 8.2.13 сразу до 8.3.8) вызывает шок у механизмов реструктуризации платформы. Рассмотрим стратегию плавного перехода:
Если при попытке установить режим 8.3.6 вылетает ошибка SDBL, попробуем двигаться итерациями. Установим сначала режим 8.3.1, сохранимся, затем 8.3.2 и так далее. Это заставляет платформу выполнять реструктуризацию таблиц небольшими порциями, что иногда позволяет избежать конфликта имен или кодов, так как на каждом промежуточном этапе 1С корректно пересобирает системные индексы.
Выясним, как метод выгрузки данных помогает исправить структуру. Когда мы делаем выгрузку в файл .dt, 1С сохраняет только данные и описание метаданных, но не саму физическую структуру таблиц SQL или файлового хранилища. При последующей загрузке в пустую базу платформа вынуждена построить все таблицы и индексы с чистого листа, генерируя новую, чистую таблицу DBSchema.
Алгоритм действий:
Если база работает под управлением MS SQL Server или PostgreSQL, мы можем прибегнуть к более радикальным методам. Внимание: этот метод опасен и требует обязательного бэкапа средствами СУБД!
Иногда платформа «зацикливается» на старой схеме данных. Мы можем заставить её полностью пересоздать описание таблиц. Для этого выполним следующие действия в SQL Management Studio:
Params.FileName имеет значения dbNames и DBSchema.
DELETE FROM Params
WHERE FileName = 'dbNames' OR FileName = 'DBSchema';
Для файловых версий (.1CD) существует мощный инструмент — Tool1CD. С его помощью мы можем заглянуть во внутреннее устройство базы без Конфигуратора. Разберем порядок анализа:
Чтобы минимизировать риск возникновения ошибок SDBL в будущем, придерживайтесь следующих правил:
Во-первых, перед любым изменением режима совместимости или обновлением платформы всегда выполняйте Тестирование и исправление со следующими флагами:
Во-вторых, не забывайте очищать кэш. Часто информация о структуре таблиц кэшируется локально на компьютере пользователя в папках %AppData%\1C\1cv8 или на сервере 1С в каталоге snccntx. Удаление этих папок — стандартный «первый шаг» при любой непонятной ошибке 1С.
В-третьих, если вы используете Расширения конфигурации, попробуйте временно их отключить. Расширения могут добавлять свои поля в существующие таблицы или создавать новые, что в момент глобальной реструктуризации основной базы приводит к конфликтам в SDBL-слое.
Подведем итог. Ошибка «Для одного ссылочного кода существует более одной таблицы» — это сигнал о том, что в базе накопился «технический мусор» или произошел программный сбой при записи структуры. Использование метода выгрузки/загрузки через .dt или удаление лишних объектов метаданных являются наиболее безопасными и эффективными способами решения этой проблемы.