За что отвечает таблица URLExternalData в базе данных 1С и как исправить ошибку SDBL при ее обновлении

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

При работе с современными версиями платформы «1С:Предприятие 8.3» (начиная с релиза 8.3.19 и выше) специалисты часто сталкиваются с появлением в структуре базы данных таблицы URLExternalData. Особенность этой таблицы заключается в том, что она является системной и не отображается в дереве метаданных конфигурации, что вызывает массу вопросов при возникновении ошибок реструктуризации, таких как «Ошибка SDBL: Таблица или поле DataSeparationUse не содержится в разделе FROM». В этой статье мы подробно разберем, зачем нужна эта таблица, как она функционирует и как устранить технические проблемы, связанные с ней.

Назначение таблицы URLExternalData

Рассмотрим природу появления этого объекта. Таблица URLExternalData (в терминах структуры БД — «Хранилище внешних данных навигационных ссылок») была введена для расширения возможностей механизма навигационных ссылок. Ранее навигационные ссылки имели жесткое ограничение по длине, поскольку все параметры (например, отборы в форме списка) должны были упаковываться непосредственно в строку URL. Это делало невозможным передачу сложных структур или больших объемов данных.

Начиная с версии 8.3.19, платформа реализует новый подход: если при формировании ссылки во второй параметр метода ПолучитьНавигационнуюСсылку() передается структура с данными, платформа выполняет следующие действия:

  1. Сериализует переданную структуру параметров.
  2. Записывает эти данные в системную таблицу URLExternalData.
  3. В саму навигационную ссылку добавляет короткий идентификатор в виде параметра extdata (GUID).

Таким образом, при переходе по ссылке платформа считывает extdata, находит соответствующую запись в URLExternalData, восстанавливает структуру параметров и применяет их к открываемой форме. Это позволяет передавать практически неограниченные объемы настроек через лаконичные ссылки.

Механизм работы в различных режимах совместимости

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

Выясним причину, по которой таблица может присутствовать в базе даже при низком режиме совместимости. Если база данных эксплуатировалась на высоких релизах платформы (например, 8.3.22), платформа могла инициировать создание таблицы при определенных действиях пользователя (например, сохранении в «Избранное»), даже если режим совместимости формально ниже 19-го. Это создает «фантомный» объект, который при последующем обновлении конфигурации вступает в конфликт с логикой SDBL-процессора.

Разбор ошибки SDBL: DataSeparationUse

Посмотрим на техническую сторону ошибки DataSeparationUseXXXX. Это поле отвечает за разделение данных в мультиарендных архитектурах (областях данных). Ошибка «Таблица или поле не содержится в разделе FROM» означает, что внутренний движок 1С (SDBL) при генерации SQL-запроса ожидает увидеть в таблице URLExternalData колонки, отвечающие за разделители, но фактически в СУБД их нет, либо они имеют неверный индекс.

Это происходит из-за рассинхронизации логической модели данных, которую хранит платформа, и физической структуры таблиц в SQL. Поскольку таблица URLExternalData системная, она не всегда корректно проходит стандартную процедуру реструктуризации вместе с объектами метаданных .cf файла.

Способы решения проблемы

Если при обновлении или работе вы столкнулись с ошибками, связанными с этой таблицей, разберем по шагам варианты исправления ситуации.

1. Выгрузка и загрузка в формат .dt

Это наиболее «чистый» и рекомендуемый способ. Процесс выгрузки в .dt и последующей загрузки в новую базу данных заставляет платформу пересоздать все системные индексы и таблицы с нуля. Поскольку URLExternalData не является частью прикладных метаданных, при загрузке в новую базу она будет создана в корректном формате, соответствующем текущему релизу платформы и настройкам разделителей.

2. Удаление таблицы на уровне СУБД

Рассмотрим более радикальный метод для администраторов БД. Если вы используете MS SQL Server или PostgreSQL, и база не находится в облаке, таблицу можно удалить вручную. Перед этим обязательно создайте резервную копию.

После удаления таблицы URLExternalData средствами SQL, платформа при следующем обращении к механизму внешних навигационных ссылок автоматически создаст её заново с правильной структурой. Это часто помогает, если ошибка SDBL блокирует обновление конфигурации.

3. Очистка серверного кэша

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

  1. Остановите службу сервера «1С:Предприятия».
  2. Очистите содержимое папки snccntxt в каталоге данных сервера.
  3. Очистите локальные кэши пользователя.
  4. Запустите службу и повторите попытку обновления.

4. Программное управление хранилищем

Выясним, как можно взаимодействовать с этими данными из кода. Платформа не предоставляет прямого доступа к URLExternalData через запросы ВЫБРАТЬ, но работать с данными можно через стандартные хранилища настроек. Если вы хотите реализовать очистку устаревших ссылок (так как платформа не делает этого автоматически, и таблица может бесконтрольно расти), используйте следующий подход:


// Пример получения доступа к хранилищу через встроенный язык
Настройки = СтандартноеХранилищеНастроекВыборка.Выбрать();
Пока Настройки.Следующий() Цикл
    // Проверяем дату изменения, чтобы удалить старые данные
    Если Настройки.ДатаИзменения < НужнаяДата Тогда
        СтандартноеХранилищеНастроек.Удалить("ВнешниеДанныеНавигационныхСсылок", Настройки.КлючОбъекта, Настройки.КлючНастроек);
    КонецЕсли;
КонецЦикла;

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

Заключение

Подведем итог: таблица URLExternalData — это важный элемент современной инфраструктуры 1С, обеспечивающий гибкость работы с навигационными ссылками. Ошибки SDBL, связанные с ней, чаще всего вызваны «наследованием» некорректной структуры таблицы при переходе между версиями платформы. Использование метода выгрузки/загрузки .dt или временное удаление таблицы на уровне СУБД являются проверенными способами восстановления работоспособности базы данных.

← На главную