Ошибка SDBL (Simple Database Layer) является одной из самых труднодиагностируемых в системе 1С:Предприятие. Она возникает на уровне внутреннего слоя платформы, который отвечает за трансляцию запросов с языка 1С на язык SQL. Когда этот механизм не находит соответствия между объектами метаданных в конфигурации и реальными таблицами или полями в базе данных СУБД, система выдает сообщение вида Ошибка SDBL: Таблица или поле FldXXXX не содержится в разделе FROM (pos=...).
В этой статье мы подробно разберем, почему возникает эта проблема и как ее устранить, используя опыт разработчиков и системных администраторов.
Прежде чем переходить к лечению, проанализируем ситуацию. Ошибка SDBL чаще всего свидетельствует о рассинхронизации. Кэш сервера или пользователя «думает», что поле существует, и пытается к нему обратиться, в то время как в физической структуре таблицы этого поля нет (или наоборот). Это часто случается при:
Рассмотрим очень распространенный случай, когда ошибка содержит упоминание поля parentPredefinedID. Эта ситуация часто возникает при доработке конфигурации. Если мы одновременно у справочника (или плана видов характеристик) включаем иерархию и добавляем предопределенный элемент, платформа 1С может некорректно перестроить структуру таблиц.
Разберем по шагам, как правильно вносить такие изменения:
F7).Если ошибка уже возникла, попробуйте временно удалить новые предопределенные элементы, отключить иерархию, обновить БД, а затем повторить действия в указанном выше порядке. Это заставит SDBL-процессор корректно пересоздать необходимые колонки в SQL-таблицах.
Иногда физически база данных в порядке, но сервер приложений 1С хранит устаревшие метаданные в своем кэше. Проанализируем стандартную процедуру очистки, которая помогает в большинстве случаев «необъяснимых» ошибок SDBL.
Для клиент-серверного варианта:
1C:Enterprise 8.3 Server Agent).C:\Program Files\1cv8\srvinfo).snaccfg, reg_1541 (кроме файлов настроек).Для локального компьютера (пользовательский кэш):
Очистите временные файлы в папках %AppData%\1C\1cv8 и %LocalAppData%\1C\1cv8. Часто ошибка уходит именно после удаления локальных кэшированных данных пользователя, так как именно там может храниться старая структура форм или списков.
Посмотрим на ситуацию, когда ошибка возникает при записи элемента справочника. В некоторых версиях платформы был замечен баг: если у справочника убрать свойство Иерархия, но при этом оставить флаг Ограничивать количество уровней включенным, возникает конфликт в SDBL-запросе.
Выясним причину: платформа пытается наложить условие на количество уровней, но само поле иерархии в таблице уже отсутствует. Чтобы это исправить, выполните следующие действия:
Иерархия.Ограничивать количество уровней (или установите значение в Ложь).Иерархия.F7).Рассмотрим специфический случай (ошибка с полем active). Если вы используете периодический регистр сведений и включили флаг Разрешить итоги: Срез последних, это может вызвать ошибку SDBL в формах, где данный регистр используется как источник данных для динамического списка.
Попробуйте следующий алгоритм:
РегистрСведенийСписок.ИмяВашегоРегистра на ТаблицаЗначений.РегистрСведенийСписок.Если вышеперечисленные методы не помогают и стандартное Тестирование и исправление (ТиИ) выдает ту же ошибку SDBL, необходимо прибегнуть к полной пересборке базы. Рассмотрим этот метод как наиболее надежный:
Администрирование -> Выгрузить информационную базу...), получив .dt файл..dt файл в новую базу.При загрузке из .dt система заново создает все таблицы и индексы «с нуля», основываясь на текущей конфигурации. Весь «мусор» и битые ссылки, которые мешали работе SDBL в старой базе, будут отсеяны.
Для системных администраторов, работающих с MS SQL Server, можно предложить очистку системных таблиц, отвечающих за регистрацию изменений конфигурации. Иногда проблема кроется в таблицах _ConfigChngR и _ConfigChngR_ExtProps. Если в них зависли записи о незавершенных реструктуризациях, это может блокировать нормальную работу. Однако такие операции следует проводить только после создания полного бэкапа SQL-базы и при четком понимании структуры таблиц 1С.
В заключение отметим, что если вы столкнулись с ошибкой SDBL на релизах платформы ниже 8.3.14, настоятельно рекомендуем выполнить обновление платформы до актуальной стабильной версии. Многие ошибки SDBL-процессора были признаны разработчиками 1С и исправлены в последующих выпусках.