При обновлении или доработке конфигураций 1С на платформе 8.3 специалисты часто сталкиваются со специфической и крайне неприятной ошибкой процессора базы данных SDBL. Выглядит она следующим образом: «Таблица или поле FldXXXXX не содержится в разделе FROM (pos=...)». Особенно часто этот сбой проявляется в файловых базах данных при попытке обновить измененную конфигурацию, изменить режим совместимости или загрузить новый файл конфигурации (.cf).
В этой статье мы подробно разберем, почему возникает эта ошибка, как локализовать проблемное поле в структуре хранения данных 1С и какими методами можно восстановить работоспособность базы данных, когда стандартные инструменты тестирования не помогают.
---
Процессор SDBL (Simple Data Base Language) — это внутренний транслятор платформы 1С, который преобразует запросы платформы в SQL-запросы (в случае клиент-серверного варианта) или во внутренние обращения к таблицам файла .1CD (в файловом варианте). Ошибка метаданных вида «Таблица или поле не содержится в разделе FROM» означает, что в логической схеме конфигурации (в конфигураторе) это поле или таблица задекларированы, однако физически в таблицах базы данных (в файле СУБД) они отсутствуют либо имеют некорректные внутренние идентификаторы.
Выделим основные причины возникновения этой коллизии:
Fld33315), но физически поле еще не создано.8.2.10) на новые версии платформы (например, 8.3.12 и выше) резко меняет логику генерации SQL-запросов процессором SDBL. Старые неявные связи таблиц начинают вызывать критические ошибки СУБД.---
Прежде чем приступать к лечению базы данных, нам необходимо выяснить, какому именно объекту метаданных принадлежит таинственное поле (в нашем примере — Fld33315). Для этого мы можем использовать встроенный метод платформы ПолучитьСтруктуруХраненияБазыДанных().
Выполним простой алгоритм для поиска проблемного реквизита. Напишем внешнюю обработку и запустим в режиме «1С:Предприятие» следующий код:
ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
Для Каждого СтрокаТаблицы Из ТаблицаСтруктуры Цикл
Для Каждого СтрокаПолей Из СтрокаТаблицы.Поля Цикл
Если ВРег(СтрокаПолей.ИмяПоляХранения) = "FLD33315" Тогда
Сообщить("Поле найдено!");
Сообщить("Объект метаданных: " + СтрокаТаблицы.ИмяТаблицы);
Сообщить("Имя реквизита в 1С: " + СтрокаПолей.ИмяРеквизита);
Возврат;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если данное поле присутствует в логической структуре, этот код сразу укажет вам на конкретный справочник, документ, константу или общий реквизит. Однако часто бывает так, что поиск по структуре не дает результатов (поле уже удалено из метаданных, но СУБД продолжает его требовать). В этом случае переходим к практическим методам исправления.
---
Практический опыт показывает, что виновниками подобных ошибок при переходе между старыми релизами часто выступают константы. Платформа некорректно обрабатывает таблицу констант, если они жестко привязаны к конфигурации поставщика.
Разберем по шагам схему решения:
.cf) или выполним сравнение/объединение.---
Релизы платформы линейки 8.3.12 обладают повышенной строгостью проверок транслятора SDBL. Если база данных имеет скрытые логические ошибки реструктуризации, новые платформы будут аварийно завершать работу. Стабильным обходным путем является использование более ранних версий платформы для исправления схемы данных.
Выполним следующие действия:
---
Если мы локализовали объект (например, справочник «Контрагенты»), в котором должно находиться потерянное поле Fld33315, мы можем заставить платформу 1С принудительно переписать физическую таблицу в файле базы данных .1CD. Так как в файловом варианте мы не можем выполнить прямой SQL-запрос ALTER TABLE, мы применим обходной маневр в Конфигураторе.
Разберем данный алгоритм:
ВременныйРеквизитТест и типом Число).---
Если в базе данных установлен очень старый режим совместимости (например, 8.2.10), а целевая конфигурация требует работы без совместимости, процессор SDBL может заблокировать прямое обновление. Нам потребуется «подсказать» платформе правильный путь конвертации таблиц.
Сделаем это по шагам:
Применяя указанные методы последовательно, мы сможем гарантированно обойти ограничения процессора SDBL и успешно обновить даже сильно доработанную файловую информационную базу 1С.