При создании начального образа распределенной информационной базы (РИБ) в конфигурациях на базе БСП (например, 1С:Управление торговлей 11, ERP или Комплексная автоматизация) разработчики могут столкнуться с критическим сбоем платформы. Ошибка выглядит следующим образом: «Не удалось создать начальный образ по причине: Ошибка SDBL. Таблица или поле dataseparationUse... не содержится в разделе From». Разберем причины возникновения этой неполадки и подробно рассмотрим практические способы ее решения.
Проанализируем природу данной ошибки. Служебные поля вида DataSeparationUse<Идентификатор> генерируются платформой для обслуживания механизма разделения данных (общих реквизитов-разделителей, таких как ОбластьДанныхОсновныеДанные или ОбластьДанныхВспомогательныеДанные).
Сбой происходит при сочетании следующих факторов:
FROM.Выясним наиболее правильный и системный вариант устранения проблемы. Если ошибка вызвана недоработкой транслятора SDBL в конкретном релизе платформы (например, в ранних сборках ветки 8.3.11), оптимальным решением является переход на проверенную стабильную версию платформы 1С:Предприятие, рекомендованную для используемого релиза конфигурации.
Разберем последовательность действий:
ReadMe.txt из дистрибутива обновления.Если обновление платформы временно невозможно или требует длительного согласования, рассмотрим обходной путь с отключением расширения, добавляющего собственные реквизиты.
Пошаговый порядок действий:
Когда создание образа блокируется платформенным механизмом, а отключать расширения с данными нежелательно, сформируем подчиненный узел прямым копированием базы данных с последующей программной настройкой узлов обмена.
Разберем по шагам создание узла через копию базы:
1Cv8.1CD (для файлового варианта) или копию базы на SQL-сервере.Посмотрим на пример программного кода для настройки узлов:
// 1. Снимаем признак подчиненности текущей базы
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
// 2. Находим узел центральной базы в плане обмена
УзелЦентральнойБазы = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоКоду("ЦБ");
// 3. Устанавливаем центральный узел в качестве главного для текущей базы
Если ЗначениеЗаполнено(УзелЦентральнойБазы) Тогда
ПланыОбмена.УстановитьГлавныйУзел(УзелЦентральнойБазы);
КонецЕсли;
После выполнения данного кода база переходит в режим подчиненного узла РИБ. Останется только очистить избыточную регистрацию изменений в периферийной базе, чтобы избежать дублирования данных при первой синхронизации.
Иногда ошибка SDBL вызывается рассинхронизацией внутренних идентификаторов метаданных и служебных таблиц базы после многократных реструктуризаций.
Проанализируем процесс нормализации структуры:
.dt..dt..dt внутренняя структура таблиц и разделителей оптимизируется, что часто позволяет транслятору SDBL корректно отработать запрос.