При разработке интеграционных решений, прямом чтении данных или анализе производительности через профайлер СУБД разработчики часто сталкиваются с необходимостью сопоставить объект конфигурации 1С (например, Справочник.Номенклатура) с реальной таблицей в реляционной СУБД (такой как Microsoft SQL Server или PostgreSQL). В физической базе данных платформа 1С использует собственные технические идентификаторы вроде _Reference123 или _Document456. Разберем по шагам, как программно и с помощью системных средств выяснить имена таблиц и полей, а также разберем назначение служебных таблиц базы. Когда нужен список физических таблиц без написания вспомогательного кода, их можно посмотреть по объектам через обработку обследования метаданных. Для отображения имён выполняется расчёт нужного вида; на платформе 8.3 совместимость не подтверждена.
В платформе 1С:Предприятие 8 предусмотрен специализированный метод глобального контекста ПолучитьСтруктуруХраненияБазыДанных(). Этот метод возвращает таблицу значений, содержащую исчерпывающую информацию о том, как объекты метаданных представлены в физических таблицах СУБД.
Рассмотрим синтаксис и параметры вызова данного метода:
Истина. Если вам требуются исключительно имена самих таблиц, укажем Ложь — это в разы ускорит выполнение функции.Посмотрим на практический пример кода, который возвращает реальное имя таблицы и структуру полей для справочника «Номенклатура»:
ОбъектыАнализа = Новый Массив;
ОбъектыАнализа.Добавить("Справочник.Номенклатура");
// Получаем структуру хранения для конкретного справочника
ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных(ОбъектыАнализа, Истина);
Для Каждого СтрокаТаблицы Из ТаблицаСтруктуры Цикл
// ИмяТаблицыХранения содержит физическое имя таблицы в SQL
Сообщить("Объект: " + СтрокаТаблицы.Имя + " | Имя в SQL: " + СтрокаТаблицы.ИмяТаблицыХранения + " | Назначение: " + СтрокаТаблицы.Назначение);
// Перебираем поля таблицы хранения
Для Каждого СтрокаПоля Из СтрокаТаблицы.Поля Цикл
Сообщить(" Поле: " + СтрокаПоля.Имя + " -> Колонка в SQL: " + СтрокаПоля.ИмяПоляХранения);
КонецЦикла;
КонецЦикла;
Платформа 1С строго стандартизирует формирование физических имен сущностей. Зная эти правила, можно легко ориентироваться в трассировках запросов:
_Reference<Номер> — основная таблица справочника (например, _Reference120)._Reference<Номер>_VT<Номер> — табличная часть справочника._ReferenceChngR<Номер> — таблица регистрации изменений справочника для планов обмена (РИБ)._Document<Номер> и _Document<Номер>_VT<Номер> — документы и их табличные части._DocumentChngR<Номер> — таблица регистрации изменений документов._InfoReg<Номер> — регистры сведений._AccumReg<Номер>, _AccumRegTotals<Номер>, _AccumRegChange<Номер> — таблицы движений, итогов и доначислений регистров накопления._Fld<Номер> — пользовательские реквизиты объектов.Системные реквизиты имеют постоянные имена во всех таблицах: _IDRRef (ссылка / GUID объекта), _Code (код элемента), _Description (наименование), _Marked (пометка на удаление), _Folder (признак группы).
В результатах вызова ПолучитьСтруктуруХраненияБазыДанных() часто можно заметить таблицы вида Справочник.<Имя>.Изменения (в SQL это таблица с суффиксом ChngR). Проанализируем назначение этой таблицы.
Это специальная служебная таблица механизма регистрации изменений. Когда объект метаданных включен в состав хотя бы одного плана обмена (например, в рамках распределенной информационной базы — РИБ), платформа при каждой записи объекта фиксирует в этой таблице ссылку на измененный элемент и узел плана обмена, в который его необходимо передать. Это не индекс и не таблица истории версий, а служебный механизм инфраструктуры синхронизации данных.
Если нет возможности запустить режим «1С:Предприятие» в режиме отладки или выполнить код, разберем альтернативные инструменты:
SELECT или UPDATE, содержащие реальные наименования таблиц и полей.DBMSSQL (или соответствующих вашей СУБД, например DBPOSTGRS). В сформированных логах будут присутствовать сгенерированные платформой запросы с точными именами задействованных таблиц.PARAMS в сжатом бинарном формате. Существуют готовые скрипты и утилиты, позволяющие десериализовать эти данные напрямую из SQL без запуска платформы.При работе с физическими таблицами напрямую через СУБД важно учитывать следующие особенности:
_Reference125) генерируется в момент создания объекта в конкретной базе данных. Если конфигурацию выгрузить в файл .cf и развернуть в новой базе, идентификаторы могут измениться. Жестко фиксировать эти имена в представлениях (SQL View), триггерах или внешних отчетах нельзя._Fld<Номер>.INSERT, UPDATE, DELETE на уровне SQL запрещено лицензионным соглашением 1С. Это нарушает кэш платформы и приводит к рассогласованию ссылочной целостности базы. Допускается только операция чтения SELECT, при этом обязательно используйте уровень изоляции READ UNCOMMITTED (или подсказку WITH (NOLOCK)), чтобы предотвратить взаимоблокировки с транзакциями пользователей 1С.