При разработке внешних интеграций, построении систем аналитики (DWH, BI) или анализе технологического журнала разработчики часто сталкиваются с физическими именами таблиц и полей в СУБД. Возникает закономерный вопрос: сохраняются ли значения ИмяТаблицыХранения при переносе конфигурации и разворачивании базы на другом сервере баз данных. Разберем детально механизм формирования имен, факторы их изменения и методы работы с ними в платформе 1С:Предприятие.
Платформа 1С:Предприятие абстрагирует разработчика от физической схемы базы данных. При создании объектов метаданных платформа автоматически генерирует для них таблицы в СУБД. Имя физической таблицы строится по следующему правилу:
_Reference для справочников, _Document для документов, _InfoRg для регистров сведений, _AccumRg для регистров накопления).Таким образом, имя таблицы в SQL выглядит, например, как _Reference45 или _Document120.
Проанализируем различные сценарии разворачивания базы на новом сервере, так как результат напрямую зависит от выбранного способа:
Соответствие между объектами метаданных конфигурации 1С и физическими именами таблиц/колонок в СУБД хранится во внутреннем служебном хранилище платформы DBNames, расположенном в системной таблице параметров (PARAMS или Config). Прямое чтение или изменение этих данных вручную через SQL крайне не рекомендуется и может привести к повреждению информационной базы.
Для гарантированного получения актуальных физических имен таблиц и полей в коде 1С предназначен метод глобального контекста ПолучитьСтруктуруХраненияБазыДанных(). Рассмотрим пример его использования:
// Получаем структуру хранения для всех объектов конфигурации
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить("Справочник.Номенклатура");
МассивОбъектов.Добавить("Документ.РеализацияТоваровУслуг");
// Параметры: СписокОбъектов, ВключатьВторичныеТаблицы, ВариантВыводаПолей
ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных(МассивОбъектов, Истина);
Для Каждого Стр Из ТаблицаСтруктуры Цикл
Сообщить("Метаданные: " + Стр.ИмяТаблицы
+ " | Таблица СУБД: " + Стр.ИмяТаблицыХранения
+ " | Назначение: " + Стр.Назначение);
КонецЦикла;
Если вызвать метод без параметров, он вернет полную карту соответствия для всей базы данных, включая вспомогательные таблицы (табличные части, таблицы итогов, виртуальные таблицы).
Выясним правила безопасной работы, если перед нами стоит задача чтения данных из СУБД сторонними инструментами:
_Document120 в постоянный код внешних отчетов или скриптов выгрузки, так как при обновлении или реструктуризации базы эти имена могут измениться.ПолучитьСтруктуруХраненияБазыДанных() формирует актуальный словарь соответствий метаданных и физических таблиц СУБД, после чего передает его во внешнюю систему.