Как узнать соответствие имен таблиц БД объектам метаданных и исправить ошибки реструктуризации

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

В процессе администрирования или разработки в среде 1С:Предприятие часто возникает необходимость заглянуть «под капот» информационной базы. Это может быть связано как с обычным любопытством, так и с серьезными техническими сбоями, когда штатные средства конфигуратора не дают ответа на вопрос, почему база ведет себя некорректно. В данной статье мы подробно разберем, как сопоставить физические имена таблиц (типа _InfoReg123) с привычными объектами метаданных, а также проанализируем методику исправления специфической ошибки «Поле объекта не обнаружено (НомерСеанса)», часто возникающей при обновлении крупных конфигураций, таких как ЗУП 3.1.

Способ 1: Использование штатной функции ПолучитьСтруктуруХраненияБазыДанных()

Самый надежный и правильный метод, предусмотренный разработчиками платформы — это программное получение структуры. Функция ПолучитьСтруктуруХраненияБазыДанных() возвращает таблицу значений, в которой четко прописано, какой объект метаданных какой таблице в СУБД (или в файле .1CD) соответствует.

Проанализируем пример кода, который позволит нам вывести эти данные в удобном виде:


СтруктураБД = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого СтрокаСтруктуры Из СтруктураБД Цикл
    Сообщить("Объект: " + СтрокаСтруктуры.ИмяМетаданных + " -> Таблица: " + СтрокаСтруктуры.ИмяТаблицыХранения);
КонецЦикла;

Преимущества этого метода:

  1. Актуальность данных: вы получаете информацию именно от той версии платформы, на которой запущена база.
  2. Безопасность: метод не требует прямого вмешательства в структуру файла или СУБД.
  3. Детализация: функция возвращает не только имена таблиц, но и имена полей, индексов и их типы.

Способ 2: Внешние инструменты и специализированные обработки

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

  1. Инструменты разработчика (ИР): Это мощный комплекс обработок, который содержит в себе консоль запросов и консоль структуры базы данных. С их помощью можно в режиме реального времени видеть все связи между метаданными и физическими таблицами.
  2. Утилита Tool_1CD: Применяется исключительно для файловых баз. Она позволяет открыть файл 1Cv8.1CD напрямую и увидеть список всех таблиц. Однако, как верно заметил автор темы, сама утилита не всегда наглядно показывает связь с метаданными. Для этого нужно заглядывать в системную таблицу Config, где хранятся описания объектов в бинарном виде.
  3. Внешние обработки (например, StrBaseSQL.epf): Существует множество бесплатных решений, которые представляют результат работы функции ПолучитьСтруктуруХраненияБазыДанных() в виде удобного дерева или таблицы с возможностью поиска и фильтрации.

Способ 3: Исправление ошибки «Поле объекта не обнаружено (НомерСеанса)»

Рассмотрим ситуацию, когда после обновления (например, ЗУП до версии 3.1.6.38) система начинает выдавать ошибку отсутствия поля НомерСеанса. Это часто происходит в модуле менеджера справочника ВерсииРасширений. Разберем по шагам, почему это случается и как это лечить.

Причина кроется в механизме расширений и системных таблиц. Платформа 1С хранит служебную информацию о сеансах в специальных полях, которые могут «потеряться» или не создаться вовремя при некорректной реструктуризации. Выясним основные пути решения.

Настройка файла conf.cfg для глубокой реструктуризации

Одним из самых эффективных методов решения проблем «сдвинутых» или отсутствующих полей является принудительная активация нового механизма обновления конфигурации. Для этого нам необходимо создать или отредактировать файл conf.cfg, который обычно находится в папке C:\Program Files\1cv8\conf.

Добавим в него следующие параметры:


DBFormatVersion=8.3.8
UpdateDBCfg=v2

Разберем назначение этих строк:

После внесения изменений рекомендуется выгрузить базу в .dt файл и загрузить ее в новую пустую базу.

Очистка кэша и принудительное обновление

Часто проблема «Поле объекта не обнаружено» является ложной и вызвана кэшированием старой структуры метаданных на стороне сервера или клиента. Выполним следующие действия:

  1. Очистка кэша: Удалите содержимое папок %AppData%\1C\1cv8 и %LocalAppData%\1C\1cv8. Это заставит платформу заново считать структуру объектов из базы при запуске.
  2. Пересборка конфигурации: Попробуйте сохранить конфигурацию в файл (.cf), затем снимите конфигурацию с поддержки, удалите проблемный объект (если это возможно на копии) и загрузите .cf обратно.
  3. Выгрузка/загрузка XML: В самых тяжелых случаях, когда Тестирование и Исправление (ТиИ) завершается аварийно, поможет полная выгрузка всей конфигурации и данных в XML через штатную обработку «Выгрузка загрузка данных XML». Это полностью пересоздаст структуру таблиц «с нуля», исключая любые физические искажения в файле БД.

Важный совет: Перед любыми манипуляциями с файлом conf.cfg или прямым редактированием таблиц всегда создавайте резервную копию. Если база файловая, достаточно просто скопировать файл 1Cv8.1CD в безопасное место.

Проанализировав ситуацию, мы видим, что проблема «сдвига» регистров — это чаще всего следствие прерванного или некорректного процесса реструктуризации при обновлении. Использование UpdateDBCfg=v2 в сочетании с полной очисткой кэша позволяет платформе корректно пересоздать необходимые служебные поля, такие как НомерСеанса, и восстановить работоспособность системы.

← На главную