Как исправить ошибку «SDBL: Ожидается имя таблицы (pos=19)» в 1С

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Сбой при обновлении конфигурации или платформы — одна из самых неприятных ситуаций, с которой может столкнуться администратор или программист 1С. Одной из наиболее известных системных ошибок является «Ошибка SDBL: Ожидается имя таблицы (pos=19)». При ее возникновении база данных перестает запускаться в пользовательском режиме, утилита chdbfl.exe не находит повреждений, а стандартное «Тестирование и исправление» может аварийно завершать работу программы.

В этой статье мы подробно разберем природу возникновения данной ошибки, проанализируем, почему она происходит, и рассмотрим пошаговые методы восстановления работоспособности базы данных как для ПРОФ, так и для базовых версий конфигураций.

Аббревиатура SDBL (Simple Data Base Language) обозначает внутренний язык запросов платформы 1С. Он служит транслятором между объектными запросами системы и физическими таблицами СУБД (будь то файловая база данных .1CD или клиент-серверный вариант под управлением MS SQL, PostgreSQL и др.). Ошибка означает, что транслятор SDBL пытается обратиться к таблице или полю метаданных, которые задекларированы в конфигурации, но фактически отсутствуют в физической структуре таблиц базы данных.

Проанализируем классическую ситуацию возникновения сбоя. Вы работаете на старой версии платформы (например, 8.2.13) и решаете обновить конфигурацию до нового релиза (например, БП 2.0.43). В метаданных обновленной конфигурации автоматически повышается режим совместимости (до 8.2.16). Однако старая платформа 8.2.13 физически не умеет создавать новые системные таблицы (такие как ScheduledJobs — регламентные задания) или новые служебные поля (например, PredefinedID). После этого вы устанавливаете новую платформу (например, 8.2.17 или 8.3). Новая платформа видит в метаданных режим совместимости 8.2.16 и полагает, что структура таблиц уже приведена в соответствие. Происходит рассинхронизация: конфигурация требует наличия таблиц, которых физически нет в базе данных. При обращении к ним транслятор SDBL выдает ошибку «Ожидается имя таблицы».

---

Метод 1. Исправление структуры через изменение режима совместимости (классический способ)

Этот способ подходит, если у вас есть доступ к платформе, на которой выполнялось обновление конфигурации (в нашем примере — 8.2.13), и база позволяет открыть себя в Конфигураторе.

Разберем по шагам алгоритм действий для конфигураций версии ПРОФ:

  1. Откроем поврежденную базу данных Конфигуратором под старой версией платформы (в которой выполнялось обновление, например, 8.2.13).
  2. Выгрузим конфигурацию в файл для подстраховки. Для этого перейдем в меню Конфигурация — Сохранить конфигурацию в файл... и сохраним файл с расширением .cf.
  3. Включим возможность изменения конфигурации (если она находится на поддержке). Перейдем в меню Конфигурация — Поддержка — Настройка поддержки и нажмем кнопку Включить возможность изменения.
  4. Выделим корневой элемент в дереве метаданных (самая верхняя строка с названием конфигурации), откроем его свойства (клавиша F4) и найдем свойство Режим совместимости.
  5. Понизим режим совместимости до значения Версия 8.1. Сохраним конфигурацию (клавиши Ctrl + S) и обновим конфигурацию базы данных (клавиша F7).
  6. Выполним частичную реструктуризацию. Перейдем в меню Администрирование — Тестирование и исправление.... Снимем все флажки, оставив активным только пункт Реструктуризация таблиц информационной базы. Нажмем кнопку Выполнить.
  7. После завершения процесса вернемся в свойства конфигурации и установим режим совместимости в значение Не используется. Снова сохраним конфигурацию и обновим базу данных (клавиша F7). Снова запустим процедуру реструктуризации таблиц через Тестирование и исправление.
  8. Закроем Конфигуратор старой платформы.
  9. Откроем базу Конфигуратором новой платформы (например, 8.2.17 или 8.3). Система предложит выполнить конвертацию базы данных — соглашаемся.
  10. Загрузим ранее сохраненную конфигурацию из файла .cf (меню Конфигурация — Загрузка конфигурации из файла...), чтобы вернуть конфигурацию к исходному типовому состоянию. Обновим конфигурацию базы данных (клавиша F7) и согласимся с реструктуризацией.

Для автоматизации запуска Конфигуратора с целью реструктуризации при пакетной обработке можно использовать параметры командной строки. Посмотрим на пример пакетного файла запуска:


"C:\Program Files (x86)\1cv82\8.2.13.219\bin\1cv8.exe" CONFIG /F"D:\1C_Bases\Accounting" /N"Администратор" /P"Пароль" /IBCheckAndRepair -RebuildTable

---

Метод 2. Особенности восстановления базовых версий конфигураций

Если у вас установлена базовая версия 1С:Бухгалтерии, вы не сможете просто так снять конфигурацию с поддержки и изменить режим совместимости, так как базовые лицензии жестко ограничивают возможность редактирования конфигурации. Однако выход есть.

Рассмотрим, как решить проблему, если у вас базовая версия:

  1. Для проведения технических работ нам потребуется временно запустить базу под платформой версии ПРОФ. Если у вас или у ваших коллег есть лицензия ПРОФ (или вы можете развернуть базу на компьютере с установленным ключом ПРОФ), используйте её. Платформа ПРОФ позволит выполнить манипуляции по снятию с поддержки.
  2. Выполним шаги, описанные в Методе 1, используя платформу ПРОФ.
  3. На этапе сохранения конфигурации (шаг 2 в первом методе) очень важно выгрузить именно исходный файл базовой конфигурации .cf.
  4. После прохождения всех этапов реструктуризации таблиц на новой платформе, нам необходимо вернуть базу в базовый статус. Для этого загрузим в нее сохраненный файл конфигурации базовой версии (через Конфигурация — Загрузить конфигурацию из файла...).
  5. Обновим базу данных. Конфигурация снова встанет на поддержку как базовая, и вы сможете вернуть файл базы данных .1CD клиенту для работы на базовой лицензии.

---

Метод 3. Исправление ошибки с помощью обновления платформы до 8.2.18 / 8.3

Если вы столкнулись с этой ошибкой, проанализируем возможность обновления самой технологической платформы. Фирма 1С признала данное поведение системы ошибкой платформы (код ошибки 10125390). Начиная с релизов платформы 8.2.18.82 / 8.2.18.96 и во всех последующих версиях ветки 8.3, разработчики добавили автоматический механизм исправления этой коллизии.

Выполним следующие действия:

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

Новая платформа обнаружит несоответствие структуры таблиц заданному режиму совместимости, выведет служебное сообщение о запуске принудительной реструктуризации и автоматически пересоздаст недостающие служебные поля (такие как PredefinedID) и индексы. После успешного завершения процесса база данных запустится в пользовательском режиме без каких-либо ошибок.

---

Метод 4. Выгрузка и загрузка данных через универсальный формат XML

Бывают запущенные случаи, когда база повреждена настолько, что Конфигуратор новой платформы аварийно завершает работу при попытке выполнить конвертацию или тестирование целостности, а старая платформа не может реструктурировать таблицы из-за внутренних конфликтов СУБД. В этом случае мы можем прибегнуть к переносу данных на уровне XML.

Выясним пошагово, как реализовать этот метод:

  1. Запустим исходную поврежденную базу данных на старой платформе (например, 8.2.13), на которой она еще способна открываться в режиме «Предприятие».
  2. Воспользуемся универсальной обработкой ВыгрузкаЗагрузкаДанныхXML82.epf (ее можно найти на дисках ИТС или в каталоге установки конфигурации «Конвертация данных»).
  3. В обработке отметим галочками все объекты метаданных (константы, справочники, документы, регистры сведений и накопления) и выполним выгрузку всех данных в один файл формата .xml.
  4. Создадим абсолютно новую, пустую базу данных на новой платформе (например, 8.3).
  5. Развернем в этой пустой базе чистый шаблон той же конфигурации и того же релиза, до которого была обновлена старая база (например, БП 2.0.43.13). При этом структура таблиц новой базы будет создана корректно в соответствии с требованиями новой платформы.
  6. Запустим новую базу в режиме «Предприятие», откроем ту же обработку ВыгрузкаЗагрузкаДанныхXML и перейдем на вкладку Загрузка.
  7. Выберем наш файл выгрузки и нажмем кнопку Загрузить данные.
  8. После загрузки данных обязательно выполним перепроведение документов и сделаем стандартное Тестирование и исправление для перерасчета итогов регистров, так как при переносе остатки могут временно «поплыть».

Для иллюстрации процесса импорта данных рассмотрим пример кода, который используется внутри подобных обработок для программного чтения объектов XML:


ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлуДанных);
Пока ЧтениеXML.Прочитать() Цикл
    Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Object" Тогда
        ОбъектДесериализации = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
        ОбъектДесериализации.Записать();
    КонецЕсли;
КонецЦикла;
ЧтениеXML.Закрыть();

---

Метод 5. Решение проблемы для клиент-серверных баз (SQL)

Если ваша база данных работает на сервере под управлением MS SQL Server или PostgreSQL, то простая очистка локального кэша пользователя на компьютере не решит проблему, так как SDBL-запросы формируются на стороне сервера приложений 1С.

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

  1. Остановим службу Агент сервера 1С:Предприятия (через консоль services.msc).
  2. Перейдем в каталог кэша сервера приложений. По умолчанию в ОС Windows он находится по пути: C:\Program Files\1cv8\srvinfo\reg_1541\ (или C:\Program Files (x86)\1cv82\srvinfo\).
  3. Найдем папки с временными файлами сеансов (каталог snccntry) и удалим их содержимое. Это позволит полностью сбросить кэш метаданных сервера.
  4. Запустим службу Агента сервера 1С.
  5. Если ошибка сохраняется, выполним проверку физической целостности базы на уровне СУБД. В среде MS SQL Server Management Studio запустим следующий запрос к вашей базе данных:

ALTER DATABASE [Имя_Вашей_Базы] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
DBCC CHECKDB ('Имя_Вашей_Базы', REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO
ALTER DATABASE [Имя_Вашей_Базы] SET MULTI_USER;
GO

После проверки СУБД исправит возможные логические несоответствия в таблицах индексов, что позволит Конфигуратору 1С провести корректную реструктуризацию без вылета рабочих процессов сервера rphost.

---

Рекомендации по предотвращению ошибки SDBL в будущем

Для того чтобы избежать подобных критических сбоев при обслуживании информационных баз 1С, рекомендуем придерживаться простых правил:

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

← На главную