При работе с платформой 1С:Предприятие, особенно после проведения динамических обновлений или при сбоях в сети, мы можем столкнуться с критической ошибкой, блокирующей доступ к информационной базе. Текст ошибки обычно выглядит так: Ошибка SDBL: Ожидается имя таблицы (Pos=...). Эта проблема пугает своей неинформативностью, однако в сообществе разработчиков 1С накоплен достаточный опыт для ее устранения. Проанализируем причины возникновения этой неисправности и подробно разберем способы ее решения, от простых к сложным.
Прежде чем приступать к "лечению", давайте разберемся в диагностике. Ошибка уровня SDBL (System DataBase Layer) говорит нам о том, что платформа 1С сформировала SQL-запрос, который не может быть корректно интерпретирован или выполнен. Чтобы лучше понимать, как платформа взаимодействует с СУБД, полезно анализировать SQL сервер глазами 1С-ника, выявляя проблемные запросы. Чаще всего мы сталкиваемся с этой ситуацией в следующих случаях:
Config, ConfigSave).Рассмотрим последовательно методы решения, начиная с самых безопасных.
Первым делом мы всегда должны исключить влияние временных файлов. Часто ошибка SDBL может быть "фантомной", вызванной тем, что платформа пытается обратиться к таблице, структура которой изменилась, но в кэше осталась старая информация. Проделаем следующие шаги:
Если ошибка возникает у конкретного пользователя, очистим его локальный кэш. Удалим (предварительно закрыв 1С) содержимое папок:
C:\Users\ИмяПользователя\AppData\Roaming\1C\1cv8C:\Users\ИмяПользователя\AppData\Local\1C\1cv8Для автоматизации этого процесса удобно использовать специальный Bat файл для очистки кеша 1С, который позволяет сохранить важные настройки и журналы регистрации. Если ошибка возникает на сервере или у всех пользователей, потребуется автоматическая очистка серверного кэша 1С скриптом, что потребует временной остановки службы агента сервера.
Если мы работаем с файловой базой данных (формат .1CD), нам поможет встроенная утилита проверки физической целостности. Разберем порядок действий:
1Cv8.1CD в другую папку). Это обязательное действие перед любыми манипуляциями.bin установки платформы (обычно C:\Program Files\1cv8\8.3.xx.xxxx\bin).chdbfl.exe.Если утилита нашла и исправила ошибки, пробуем запустить конфигуратор. Если ошибок не найдено, но база не запускается, переходим к следующему этапу.
В варианте работы с MS SQL Server (или PostgreSQL) ошибка "Ожидается имя таблицы" чаще всего указывает на проблему в таблице ConfigSave. Эта таблица хранит промежуточное состояние конфигурации при обновлении. Если обновление завершилось аварийно, записи в ней могут конфликтовать с основной конфигурацией.
Внимание! Все действия с SQL выполняйте только после создания полного бэкапа. Можно настроить резервное копирование базы Postgre SQL или Microsoft SQL в файл dt без принудительного закрытия сессий пользователей.
Проанализируем решение с помощью выполнения SQL-запроса. Нам потребуется очистить таблицу ConfigSave. Это заставит конфигуратор "забыть" о незавершенных изменениях. Откроем SQL Management Studio, создадим новый запрос (New Query) к нашей базе и выполним следующий код:
DELETE FROM dbo.ConfigSave
В некоторых версиях платформы проблема может крыться также в таблицах ConfigCAS, ConfigMng или IBVersion. После очистки попробуйте зайти в Конфигуратор и выполнить полное обновление (F7).
Если предыдущие методы не помогли, возможно, повреждена основная таблица Config. Прямая очистка этой таблицы приведет к тому, что база станет "пустой", хотя данные в таблицах объектов сохранятся. В такой ситуации мы можем поступить следующим образом:
.cf.DELETE FROM dbo.Config.При этом методе данные в физических таблицах сохраняются. Чтобы лучше ориентироваться в том, как устроена структура хранения базы данных и за какие объекты отвечают конкретные таблицы СУБД, можно воспользоваться специализированной обработкой.
Иногда проблема носит плавающий характер и связана с кэшем метаданных сеанса. Попробуем запустить базу с дополнительным ключом запуска. В окне списка баз нажмите "Изменить", и в поле "Дополнительные параметры запуска" пропишите:
/ClearCache
Запустите базу. Этот ключ принудительно очищает кэш клиент-серверного взаимодействия при старте.
Подводя итог нашему разбору, выделим главные правила, которые помогут избежать ошибки SDBL в будущем:
Используя эти инструкции, мы сможем восстановить работоспособность базы данных и минимизировать простой бизнеса.