Переход между редакциями в экосистеме 1С — это всегда ответственный и технологически сложный процесс. При обновлении конфигурации «1С:Управление торговлей» (УТ) с редакции 11.3 на 11.4 многие специалисты сталкиваются с неприятным системным сбоем. На этапе принятия изменений и реструктуризации базы данных система аварийно завершает работу, выдавая ошибку СУБД:
Ошибка SDBL: Ссылка на таблицу Enum... недопустима. Нет таблицы или отсутствует RefSelf.
Чаще всего в тексте ошибки упоминаются таблицы Enum475 или Enum304, которые в системной структуре базы данных соответствуют метаданным перечисления Перечисление.УдалитьТипыОперацийЗаказаНаСборку. Давайте подробно разберем, почему возникает этот программный сбой, и проанализируем все доступные методы его решения — от стандартных штатных средств до глубокой ручной работы со структурами СУБД и XML-файлами конфигурации.
Для начала разберем природу механизма SDBL (Simple Data Base Layer). Это внутренний слой платформы «1С:Предприятие», который служит абстракцией между объектной моделью метаданных 1С и реляционными таблицами СУБД (будь то MS SQL Server, PostgreSQL, IBM DB2 или Oracle). Когда мы запускаем обновление конфигурации базы данных, SDBL транслирует изменения метаданных в SQL-запросы для изменения физической структуры таблиц.
В процессе перехода с УТ 11.3 на 11.4 разработчики компании 1С удаляют устаревшие объекты метаданных, включая перечисление Перечисление.УдалитьТипыОперацийЗаказаНаСборку. В этот момент может произойти рассинхронизация:
_Enum475) в базе данных нет, либо нарушены внутренние ссылки самоидентификации таблицы (RefSelf).Ниже мы подробно рассмотрим по шагам, как преодолеть это препятствие и успешно завершить переход на новую редакцию программы.
Если база данных имеет умеренный объем, лучшим и самым безопасным решением будет запуск штатного механизма платформы. Однако классическое полное тестирование может занять слишком много времени. Нам необходимо выполнить процедуру точечно.
Рассмотрим пошагово этот алгоритм:
.dt.В процессе реструктуризации платформа 1С полностью пересоздаст физические таблицы базы данных на основе актуального описания метаданных конфигурации БД, заново пропишет все внутренние индексы и системные связи, а также корректно удалит «осиротевшие» ссылки. После завершения этого процесса (который занимает значительно меньше времени, чем полная проверка логической целостности) запустите обновление на редакцию 11.4. Процедура пройдет штатно и без ошибок SDBL.
Иногда корни проблемы лежат в локальном или серверном кэше платформы. На старый кэш метаданных накладывается новая структура, вызывая ложное срабатывание SDBL. Обычная очистка временных файлов пользователя помогает не всегда. Проанализируем более глубокий метод очистки:
Что делать, если база данных весит несколько сотен гигабайт, а тестирование и исправление с реструктуризацией выполняется несколько суток, что абсолютно неприемлемо для непрерывного бизнеса клиента? В этом случае мы можем прибегнуть к искусственному восстановлению соответствия идентификаторов без изменения самих физических таблиц.
Давайте разберем этот процесс по шагам:
ConfigDumpInfo.xml из Папки 1.УдалитьТипыОперацийЗаказаНаСборку. Зафиксируйте его имя и уникальный идентификатор (UUID).ConfigDumpInfo.xml в Папке 2, отыщите там наше перечисление и скопируйте его «родной» UUID из атрибута id тега <Metadata>.ConfigDumpInfo.xml, так и в сам XML-файл описания этого перечисления в заголовке тега uuid="...").Благодаря этому действию платформа сопоставит объект со старым физическим аналогом в СУБД по верному UUID и беспрепятственно удалит его из структуры данных.
Довольно часто удаление физических таблиц блокируется СУБД из-за того, что на них остаются ссылки в системных механизмах регистрации изменений для планов обмена (особенно если база участвует в РИБ или обменивается данными с другими системами).
Рассмотрим, как решить эту проблему:
Перечисление.УдалитьТипыОперацийЗаказаНаСборку на каких-либо узлах планов обмена._ConfigChngR или _ConfigChngR_ExtProps) и очистить записи, указывающие на идентификатор удаляемого перечисления.Еще один нетривиальный, но эффективный способ обхода ошибки на больших базах без проведения долгого тестирования и исправления заключается в использовании механизма распределенных информационных баз (РИБ):
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
Иногда виновником ошибки SDBL выступает конкретный релиз платформы 1С. В версиях линеек 8.3.11, 8.3.12 и 8.3.13 присутствовали зафиксированные технологические ошибки реструктуризации баз данных при удалении объектов метаданных.
Рекомендуем придерживаться следующего правила: если вы столкнулись с ошибкой «Нет таблицы или отсутствует RefSelf», попробуйте временно обновить платформу «1С:Предприятие» до актуального стабильного релиза (например, ветки 8.3.20, 8.3.22 или выше) и выполнить обновление конфигурации на ней. В современных версиях платформы алгоритмы работы SDBL с СУБД существенно оптимизированы, и многие старые коллизии реструктуризации разрешаются автоматически в процессе обновления.
Используя приведенные методики, вы гарантированно сможете преодолеть ошибку SDBL при обновлении вашей конфигурации УТ 11.3 на 11.4 и успешно перевести информационную базу на новую ветку развития программного продукта.