Как исправить ошибку SDBL "Для одного ссылочного кода существует более одной таблицы в базе данных"

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

Ошибка SDBL (Simple Data Access Layer) — это сигнал о серьезном внутреннем противоречии в структуре вашей базы данных. Чаще всего она возникает в моменты обновления конфигурации, когда процесс реструктуризации прерывается из-за сбоя сервера, отключения электропитания или сетевых неполадок. В результате платформа 1С «запутывается»: в системных таблицах метаданных (DBSchema) объект ссылается на одну физическую таблицу, а в реальности в SQL-базе их оказывается две (например, основная и временная, созданная для реструктуризации, но не удаленная вовремя).

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

Метод 1. Стандартная реструктуризация через Тестирование и Исправление (ТиИ)

Этот метод считается самым надежным и «каноничным» с точки зрения технической поддержки 1С. Если ваша база имеет разумный объем, а время позволяет прервать работу пользователей, начнем именно с него. Разберем по шагам, что необходимо сделать:

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

Почему это помогает? Во время реструктуризации платформа принудительно пересоздает все физические таблицы в соответствии с описанием в метаданных. В процессе этого «переезда» данных старые, некорректные связи заменяются новыми, а лишние «таблицы-фантомы» удаляются.

Метод 2. Быстрое решение через модификацию объекта (без долгого ожидания)

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

Проанализируем алгоритм действий:

  1. Выясняем, какой именно объект вызывает сбой (это можно увидеть в журнале регистрации или по результатам сравнения конфигураций). Допустим, это план видов расчета Начисления.
  2. Заходим в конфигуратор, находим этот объект и добавляем в него новый произвольный реквизит (например, с названием ТехническийРеквизит и типом Число).
  3. Выполняем Обновить конфигурацию базы данных (F7). Платформа увидит изменение структуры конкретно этого объекта и запустит локальную реструктуризацию только для него. Это произойдет быстро.
  4. После успешного обновления удаляем созданный реквизит и снова нажимаем F7.

Этот метод заставляет 1С переписать запись в системной таблице DBSchema, устраняя дублирование ссылок на физические таблицы SQL.

Метод 3. Очистка серверного кэша и перезапуск кластера

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

  1. Останавливаем службу 1C:Enterprise 8.3 Server Agent.
  2. Переходим в каталог с данными сервера (обычно это C:\Program Files\1cv8\srvinfo).
  3. Находим папки с именами типа snccntx... и reg_.... Внутри них будут папки с GUID вашей базы — их содержимое (папки cache) нужно очистить.
  4. Перезагружаем сервер СУБД (SQL) для очистки планов запросов.
  5. Запускаем службу сервера 1С.

Метод 4. Манипуляции с версиями платформы и файлом конфигурации

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

Попробуем следующий подход:

  1. Выгружаем информационную базу в файл .dt.
  2. Устанавливаем более старую, стабильную версию платформы (например, 8.3.12 или 8.3.13) на тестовый сервер или локальную машину.
  3. Создаем пустую базу на старой платформе и загружаем туда наш .dt.
  4. Выполняем обновление конфигурации там. Если оно проходит успешно, выгружаем .cf файл.
  5. Возвращаемся к основной базе на актуальной платформе и пробуем выполнить Загрузить конфигурацию из файла (именно загрузку, а не сравнение/объединение).

Метод 5. Работа на уровне СУБД (для продвинутых администраторов)

Рассмотрим, что происходит «под капотом» SQL. Ошибка означает, что в таблице Config или Params (в зависимости от версии) бинарные данные схемы не соответствуют списку таблиц в sys.tables.

Проанализируем дополнительные действия для PostgreSQL:

Для этой СУБД иногда помогает выполнение полной очистки и анализа базы. Запустите консоль и выполните команду:


VACUUM FULL ANALYZE;

Это перестроит индексы и физически перераспределит данные, что может помочь механизмам 1С корректно считать структуру таблиц при следующем обращении.

Также стоит обратить внимание на системную таблицу ConfigSave. Если в ней «зависли» данные о незаконченном редактировании конфигурации, попробуйте очистить ее (предварительно сделав бэкап!):


DELETE FROM ConfigSave;

Это заставит конфигуратор при запуске обратиться к основной, стабильной версии конфигурации Config, игнорируя черновики, которые могли вызвать конфликт имен в SDBL.

Выводы и рекомендации

Мы выяснили, что ошибка SDBL — это чаще всего следствие «мусора» в системных реестрах метаданных. Резюмируем наши действия: если время поджимает, используем метод с добавлением реквизита (Метод 2). Если нужно гарантированное исправление всей базы — запускаем ТиИ с реструктуризацией (Метод 1) на ночь. И всегда помним: любые действия со структурой базы данных начинаются с создания резервной копии.

← На главную