Администрирование · 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Откройте консоль кода или создайте внешнюю обработку в режиме предприятия
- 2Выполните ПолучитьСтруктуруХраненияБазыДанных() и выведите результат в таблицу
- 3Найдите строку с нужным объектом по колонке «ИмяТаблицы» (например, Документ.РеализацияТоваровУслуг)
- 4Скопируйте значение из колонки «ИмяТаблицыХранения» — это физическое имя в SQL
- 5Проверьте существование таблицы запросом в SQL Server Management Studio
Способ 2. Отчёт «Структура хранения базы данных»
Если писать код не хочется, используйте типовые внешние отчёты, которые обёртывают ту же функцию в удобную форму с поиском. Такие отчёты входят в состав «Инструментов разработчика» и ряда открытых библиотек. Они показывают дерево метаданных, физические имена таблиц и полей, а также позволяют искать в обе стороны: от объекта к таблице и от таблицы к объекту.
Обратный поиск особенно полезен, когда вы анализируете базу со стороны SQL и видите непонятную таблицу _InfoRg5891: вводите физическое имя — отчёт показывает, какому регистру сведений оно соответствует. Это экономит время при разборе чужих баз и интеграционных задачах.
Способ 3. Профилировщик SQL Server
Когда доступа к коду 1С нет, но есть доступ к SQL Server, имя таблицы можно «поймать» в момент обращения. Запустите SQL Server Profiler или Extended Events, отфильтруйте события по имени базы и выполните в 1С действие с нужным объектом — например, откройте список документов. В тексте захваченного запроса будет физическое имя таблицы.
Этот метод хорош тем, что показывает реальные запросы платформы, включая соединения таблиц итогов. Минус — требуются права на трассировку в SQL Server, а на нагруженных базах поток событий приходится тщательно фильтровать, иначе нужный запрос потеряется среди тысяч других.
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») помогает сузить круг кандидатов, после чего остаётся сверить поля.
Сравнение способов
Точный и штатный; нужен доступ к режиму предприятия с правами на выполнение кода
Удобный поиск в обе стороны; требуется скачать и открыть внешний отчёт
Работает без доступа к коду 1С; нужны права на трассировку и навык фильтрации событий
Подходит как последний вариант; трудоёмко и подвержено ошибкам
Проверка результата и типичные ошибки
После того как физическое имя найдено, проверьте соответствие, выполнив простой запрос к таблице и сопоставив данные с тем, что видно в 1С. Например, сравните количество строк в таблице справочника с количеством элементов в списке (с учётом помеченных на удаление — они физически остаются в таблице). Для документов сверьте несколько номеров и дат: поле номера хранится в колонке _Number, дата — в _Date_Time.
Помните, что ссылочные поля хранятся как двоичные идентификаторы (_IDRRef типа binary(16)), а не как читаемые GUID. Преобразование между binary-представлением в SQL и GUID в 1С требует специальной перестановки байтов — готовые функции для этого есть в открытых источниках.
Частые вопросы
Меняется ли имя таблицы при переименовании объекта в конфигураторе?
Нет. Физическое имя таблицы привязано к внутреннему идентификатору объекта, а не к его представлению. Переименование справочника в конфигураторе не меняет имя вида _Reference256 в SQL. Таблица пересоздаётся с новым именем только при удалении объекта и создании нового.
Как найти таблицу табличной части документа?
Через ПолучитьСтруктуруХраненияБазыДанных: в структуре хранения табличные части перечислены отдельными строками вида «Документ.РеализацияТоваровУслуг.Товары» с физическим именем _Document154_VT1234. Найдите строку с нужным суффиксом табличной части.
Можно ли узнать соответствие без доступа к конфигуратору?
Да. Функция ПолучитьСтруктуруХраненияБазыДанных выполняется в режиме предприятия, конфигуратор не нужен. Если нет и доступа к предприятию — используйте профилировщик SQL Server или поиск по составу полей в sys.tables и sys.columns.
Одинаковы ли имена таблиц в SQL Server и PostgreSQL?
Логика именования (префикс плюс номер) одинакова, но конкретные номера объектов зависят от конкретной базы и её истории, а не от СУБД. Одна и та же конфигурация, развёрнутая в двух базах, обычно даёт одинаковые номера, если базы созданы из одной выгрузки; при разной истории обновлений номера могут расходиться.
Как по таблице в SQL понять, какому объекту 1С она принадлежит?
Выполните обратный поиск: выгрузите ПолучитьСтруктуруХраненияБазыДанных в таблицу и найдите строку, где колонка «ИмяТаблицыХранения» равна искомому физическому имени. Отчёты-обёртки из инструментов разработчика делают это в один клик.
Безопасно ли читать данные напрямую из SQL для отчётности?
Чтение через SELECT не меняет данные и широко применяется для внешней аналитики. Учитывайте, что вы обходите механизмы прав доступа 1С, видите помеченные на удаление записи и работаете с сырыми идентификаторами. Для регулярной отчётности надёжнее использовать представления (view) с готовой логикой соединений.
Что важно запомнить
Физические имена таблиц 1С в SQL строятся по шаблону «префикс + номер» и не совпадают с именами метаданных. Точное соответствие даёт функция ПолучитьСтруктуруХраненияБазыДанных; альтернативы — отчёты-обёртки, профилировщик SQL и поиск по полям. Работайте с таблицами только на чтение: прямая запись в обход платформы разрушает целостность базы.