К статье
Практический материал

Администрирование · 9 мин

Как узнать, какая таблица SQL соответствует объекту 1С

Способы определить, в какой таблице SQL Server хранится справочник, документ или регистр 1С: функция ПолучитьСтруктуруХраненияБазыДанных, поиск по имени, практические примеры.

Любой объект конфигурации 1С — справочник, документ, регистр сведений или накопления — физически хранится в одной или нескольких таблицах базы данных SQL Server (или PostgreSQL). При этом имена таблиц в СУБД не совпадают с именами объектов в конфигураторе: вместо понятного «Справочник.Номенклатура» вы увидите что-то вроде _Reference256. Зная соответствие, можно строить прямые запросы к базе для аналитики, интеграций и диагностики проблем.

Есть несколько рабочих способов узнать соответствие: встроенная функция платформы ПолучитьСтруктуруХраненияБазыДанных(), отчёты на её основе, поиск по структуре таблиц в самой СУБД и косвенные методы через профилировщик запросов. Ниже разобраны все подходы с точными действиями и ограничениями.

Как 1С называет таблицы в базе данных

Платформа 1С формирует физические имена таблиц по шаблону: префикс типа объекта плюс порядковый номер. Префиксы стандартные: _Reference — справочники, _Document — документы, _InfoRg — регистры сведений, _AccumRg — регистры накопления, _Const — константы, _Enum — перечисления, _Chrc — планы видов характеристик. Номер присваивается при создании объекта и не меняется при переименовании объекта в конфигураторе.

Один объект метаданных часто порождает несколько физических таблиц. Например, документ с табличными частями создаёт основную таблицу _Document154 и отдельные таблицы вида _Document154_VT1234 для каждой табличной части. Регистр сведений с режимом «Подчинение регистратору» хранится в одной таблице, а регистр накопления — в таблице итогов и таблице движений.

Способ 1. Функция ПолучитьСтруктуруХраненияБазыДанных

Это штатный и самый точный метод. Функция платформы возвращает таблицу значений, где для каждого объекта указаны назначение, имя в метаданных и физическое имя таблицы в СУБД. Выполнить её можно во внешней обработке, консоли кода или через «Выполнить произвольный код» в инструментах разработчика.

Минимальный пример кода, который выводит соответствие для конкретного справочника:

Таблицы = ПолучитьСтруктуруХраненияБазыДанных();

Для Каждого Строка Из Таблицы Цикл

Если Строка.ИмяТаблицы = "Справочник.Номенклатура" Тогда

Сообщить(Строка.ИмяТаблицыХранения);

КонецЕсли;

КонецЦикла;

Чтобы увидеть всю структуру целиком, передайте результат в табличный документ или сохраните в файл. Функция поддерживает параметры: можно отфильтровать по конкретным объектам метаданных и запросить имена в терминах СУБД или в терминах метаданных, что удобно для сопоставления полей.

Порядок действий
  1. 1
    Откройте консоль кода или создайте внешнюю обработку в режиме предприятия
  2. 2
    Выполните ПолучитьСтруктуруХраненияБазыДанных() и выведите результат в таблицу
  3. 3
    Найдите строку с нужным объектом по колонке «ИмяТаблицы» (например, Документ.РеализацияТоваровУслуг)
  4. 4
    Скопируйте значение из колонки «ИмяТаблицыХранения» — это физическое имя в SQL
  5. 5
    Проверьте существование таблицы запросом в SQL Server Management Studio

Способ 2. Отчёт «Структура хранения базы данных»

Если писать код не хочется, используйте типовые внешние отчёты, которые обёртывают ту же функцию в удобную форму с поиском. Такие отчёты входят в состав «Инструментов разработчика» и ряда открытых библиотек. Они показывают дерево метаданных, физические имена таблиц и полей, а также позволяют искать в обе стороны: от объекта к таблице и от таблицы к объекту.

Обратный поиск особенно полезен, когда вы анализируете базу со стороны SQL и видите непонятную таблицу _InfoRg5891: вводите физическое имя — отчёт показывает, какому регистру сведений оно соответствует. Это экономит время при разборе чужих баз и интеграционных задачах.

Способ 3. Профилировщик SQL Server

Когда доступа к коду 1С нет, но есть доступ к SQL Server, имя таблицы можно «поймать» в момент обращения. Запустите SQL Server Profiler или Extended Events, отфильтруйте события по имени базы и выполните в 1С действие с нужным объектом — например, откройте список документов. В тексте захваченного запроса будет физическое имя таблицы.

Этот метод хорош тем, что показывает реальные запросы платформы, включая соединения таблиц итогов. Минус — требуются права на трассировку в SQL Server, а на нагруженных базах поток событий приходится тщательно фильтровать, иначе нужный запрос потеряется среди тысяч других.

sql
SELECT t.name AS TableName FROM sys.tables t WHERE t.name LIKE '_Document%' ORDER BY t.name;

Способ 4. Поиск по структуре таблиц в СУБД

Если известно примерное содержимое объекта, таблицу можно найти по составу полей. Например, у документа «Реализация товаров и услуг» в таблице будут поля соглашения, валюты, организации. Запрос к системным представлениям sys.tables и sys.columns позволяет найти таблицы, содержащие нужный набор колонок. Это косвенный метод: он требует ручной проверки и легко даёт ложные совпадения в больших конфигурациях.

Ещё один ориентир — объём данных. Таблицу регистра накопления «Продажи» часто можно опознать как одну из самых больших таблиц базы. Отчёт по размерам таблиц в SQL Server Management Studio (стандартный отчёт «Disk Usage by Table») помогает сузить круг кандидатов, после чего остаётся сверить поля.

Сравнение способов

ПолучитьСтруктуруХраненияБазыДанных

Точный и штатный; нужен доступ к режиму предприятия с правами на выполнение кода

Отчёты-обёртки

Удобный поиск в обе стороны; требуется скачать и открыть внешний отчёт

Профилировщик SQL

Работает без доступа к коду 1С; нужны права на трассировку и навык фильтрации событий

Поиск по полям в СУБД

Подходит как последний вариант; трудоёмко и подвержено ошибкам

Проверка результата и типичные ошибки

После того как физическое имя найдено, проверьте соответствие, выполнив простой запрос к таблице и сопоставив данные с тем, что видно в 1С. Например, сравните количество строк в таблице справочника с количеством элементов в списке (с учётом помеченных на удаление — они физически остаются в таблице). Для документов сверьте несколько номеров и дат: поле номера хранится в колонке _Number, дата — в _Date_Time.

Помните, что ссылочные поля хранятся как двоичные идентификаторы (_IDRRef типа binary(16)), а не как читаемые GUID. Преобразование между binary-представлением в SQL и GUID в 1С требует специальной перестановки байтов — готовые функции для этого есть в открытых источниках.

Типичные ошибки
01
Искать таблицу по имени объекта в конфигураторе — физические имена не содержат слов «Номенклатура» или «Реализация»
02
Забывать про табличные части: данные позиций документа лежат не в _Document154, а в отдельной таблице _Document154_VT…
03
Считать, что помеченные на удаление объекты удалены из таблицы — они остаются до физического удаления
04
Менять данные напрямую в SQL — это нарушает логику итогов, последовательностей и лицензионные ограничения

Частые вопросы

Меняется ли имя таблицы при переименовании объекта в конфигураторе?

Нет. Физическое имя таблицы привязано к внутреннему идентификатору объекта, а не к его представлению. Переименование справочника в конфигураторе не меняет имя вида _Reference256 в SQL. Таблица пересоздаётся с новым именем только при удалении объекта и создании нового.

Как найти таблицу табличной части документа?

Через ПолучитьСтруктуруХраненияБазыДанных: в структуре хранения табличные части перечислены отдельными строками вида «Документ.РеализацияТоваровУслуг.Товары» с физическим именем _Document154_VT1234. Найдите строку с нужным суффиксом табличной части.

Можно ли узнать соответствие без доступа к конфигуратору?

Да. Функция ПолучитьСтруктуруХраненияБазыДанных выполняется в режиме предприятия, конфигуратор не нужен. Если нет и доступа к предприятию — используйте профилировщик SQL Server или поиск по составу полей в sys.tables и sys.columns.

Одинаковы ли имена таблиц в SQL Server и PostgreSQL?

Логика именования (префикс плюс номер) одинакова, но конкретные номера объектов зависят от конкретной базы и её истории, а не от СУБД. Одна и та же конфигурация, развёрнутая в двух базах, обычно даёт одинаковые номера, если базы созданы из одной выгрузки; при разной истории обновлений номера могут расходиться.

Как по таблице в SQL понять, какому объекту 1С она принадлежит?

Выполните обратный поиск: выгрузите ПолучитьСтруктуруХраненияБазыДанных в таблицу и найдите строку, где колонка «ИмяТаблицыХранения» равна искомому физическому имени. Отчёты-обёртки из инструментов разработчика делают это в один клик.

Безопасно ли читать данные напрямую из SQL для отчётности?

Чтение через SELECT не меняет данные и широко применяется для внешней аналитики. Учитывайте, что вы обходите механизмы прав доступа 1С, видите помеченные на удаление записи и работаете с сырыми идентификаторами. Для регулярной отчётности надёжнее использовать представления (view) с готовой логикой соединений.

Итог

Что важно запомнить

Физические имена таблиц 1С в SQL строятся по шаблону «префикс + номер» и не совпадают с именами метаданных. Точное соответствие даёт функция ПолучитьСтруктуруХраненияБазыДанных; альтернативы — отчёты-обёртки, профилировщик SQL и поиск по полям. Работайте с таблицами только на чтение: прямая запись в обход платформы разрушает целостность базы.