При подготовке к экзамену «1С:Специалист» по платформе или при разработке новых учетных механизмов с нуля разработчики часто сталкиваются с крайне неприятной системной ошибкой. В процессе обновления конфигурации базы данных (БД) система выдает критический сбой: «Ошибка SDBL: В таблице Acc... нет вложенной таблицы ExtDim...». После этого база данных может заблокироваться, не позволяя продолжить работу.
В этой статье мы подробно разберем природу этого сбоя, выясним истинные причины его возникновения, рассмотрим правильную профилактику и научимся восстанавливать работоспособность конфигурации без использования сомнительных методов.
Для начала проанализируем ситуацию и поймем, что означает данное сообщение. Аббревиатура SDBL (Simple Database Layer) обозначает внутренний слой абстракции СУБД в платформе «1С:Предприятие». Этот слой транслирует высокоуровневые запросы и метаданные 1С в физические таблицы базы данных (будь то файловый вариант или клиент-серверный SQL).
Ошибка вида В таблице Acc... нет вложенной таблицы ExtDim... указывает на то, что на уровне СУБД физическая структура таблиц перестала соответствовать метаданным конфигурации. Префикс Acc всегда относится к таблицам планов счетов, а ExtDim — к таблицам субконто (видам субконто).
Этот сбой является известной особенностью платформы 1С. Он возникает из-за того, что разработчик пытается одновременно создать (или существенно изменить) взаимосвязанные объекты метаданных и за один раз обновить базу данных. Платформа пытается сопоставить таблицы планов счетов и субконто, но на физическом уровне вложенная таблица еще не успела инициализироваться. В результате транзакция обновления прерывается, а структура базы данных оказывается поврежденной.
Чтобы полностью исключить появление ошибки SDBL при разработке бухгалтерского учета, мы должны приучить себя к строго последовательному созданию метаданных. Нельзя создавать всю схему учета «одним махом» и нажимать обновление только в самом конце. Рассмотрим правильный, безопасный алгоритм работы.
Выполним следующие шаги по порядку:
ПланВидовХарактеристик (ПВХ), который будет отвечать за виды субконто. Настраиваем его типы значений, добавляем необходимые предопределенные характеристики.ПланСчетов. Связываем его с ранее созданным ПВХ на вкладке «Данные» и указываем максимальное количество субконто. Задаем необходимые предопределенные счета.ExtDim в таблице Acc.РегистрБухгалтерии, привязываем его к нашему ПлануСчетов, настраиваем ресурсы и балансовые измерения.Если мы будем соблюдать эту простую последовательность и делать промежуточные обновления структуры БД на каждом этапе, платформа гарантированно успеет правильно перестроить таблицы СУБД, и ошибка SDBL никогда не возникнет.
Для наглядности зафиксируем правильную схему разработки в виде структуры зависимостей:
// Правильная последовательность разработки:
[Создание ПланВидовХарактеристик] -> [Обновление БД (F7)]
↓
[Создание ПланСчетов + Привязка ПВХ] -> [Обновление БД (F7)]
↓
[Создание РегистрБухгалтерии] -> [Обновление БД (F7)]
На форумах часто советуют обойти проблему простым понижением режима совместимости конфигурации (например, до версии 8.3.3). Обратите внимание: делать так крайне не рекомендуется! Понижение режима совместимости — это деструктивный метод. Он отключает современные механизмы платформы, ломает другие функции и гарантирует незачет при сдаче экзамена «1С:Специалист».
Выясним, как восстановить работоспособность базы данных правильным путем:
Конфигурация -> Сохранить конфигурацию в файл... и сохраним ее в формате .cf.Конфигурация -> Конфигурация базы данных -> Вернуться к конфигурации БД. Это действие сбросит все некорректные изменения, которые вызвали ошибку SDBL, и вернет базу в работоспособное состояние..cf как ориентир, создадим объекты метаданных заново, строго следуя описанному выше алгоритму профилактики (с промежуточными сохранениями через F7)..cf во втором окне конфигуратора или воспользоваться стандартным механизмом Сравнить, объединить с конфигурацией из файла..., выбрав только модули и не затрагивая структуру таблиц.Если подобный сбой произошел не в процессе учебной разработки, а в реальной рабочей базе (например, после аварийного завершения работы сервера или сбоя СУБД), нам помогут следующие классические инструменты администрирования 1С:
%userprofile%\AppData\Local\1C и %userprofile%\AppData\Roaming\1C), а также почистим кэш на сервере приложений 1С.Администрирование -> Тестирование и исправление.... Обязательно отметим пункты «Реиндексация таблиц информационной базы» и «Проверка логической целостности»..dt. Затем создадим чистую пустую базу данных и загрузим этот файл обратно. В процессе загрузки платформа принудительно пересоздает и оптимизирует всю физическую структуру таблиц СУБД, устраняя логические нестыковки SDBL.Мы проанализировали критическую ошибку SDBL, поняли логику ее возникновения и освоили надежные методы борьбы с ней. Помните, что аккуратность при проектировании метаданных и регулярные промежуточные обновления — залог стабильной работы любой конфигурации 1С!