Администрирование · 11 мин
Как узнать имя таблицы 1С в SQL
Как узнать имя таблицы 1С в базе SQL Server: структура хранения, обработка СтруктураХраненияБазыДанных, запросы к Params и поиск по метаданным.
Когда база 1С развёрнута на SQL Server, PostgreSQL или другой СУБД, объекты конфигурации хранятся в таблицах с техническими именами вида _Document123 или _Reference45. Прямого соответствия «Документ.РеализацияТоваров → понятное имя таблицы» в самой СУБД нет: платформа 1С генерирует идентификаторы автоматически и хранит соответствие в служебных структурах. Поэтому задача «как узнать имя таблицы 1С в SQL» возникает у каждого администратора, который хочет читать данные напрямую, строить внешние отчёты или диагностировать проблемы производительности.
Существует несколько рабочих способов получить соответствие между объектом метаданных и физической таблицей: штатная функция ПолучитьСтруктуруХраненияБазыДанных(), разбор служебной таблицы Params, а также косвенные признаки по составу полей. Ниже разобраны все подходы с конкретными шагами, ограничениями и типичными ошибками.
Почему имена таблиц в SQL не совпадают с метаданными
Платформа 1С при создании информационной базы генерирует физические имена таблиц по внутренним правилам: префикс зависит от типа объекта (_Document — документы, _Reference — справочники, _InfoRg — регистры сведений, _AccumRg — регистры накопления), а числовой суффикс — это внутренний порядковый номер объекта. Имя «РеализацияТоваров» нигде в структуре SQL не фигурирует.
Такой подход позволяет платформе переименовывать объекты конфигурации без перестроения физической структуры базы. Обратная сторона — администратор, открывший SQL Server Management Studio, видит сотни таблиц с нечитаемыми именами и не может сразу понять, где лежат нужные данные.
Важно понимать: соответствие «метаданные → таблица» не вычисляется по формуле, а хранится в самой базе. Поэтому попытки угадать номер таблицы по порядку создания объектов ненадёжны — после реструктуризации, загрузки конфигурации или обмена метаданными номера могут не совпадать с вашими ожиданиями.
Способ 1: функция ПолучитьСтруктуруХраненияБазыДанных()
Штатный и самый безопасный метод — встроенная функция платформы ПолучитьСтруктуруХраненияБазыДанных(). Она возвращает таблицу значений, где для каждого объекта указаны имя в метаданных, имя таблицы в СУБД, назначение, а при вызове с параметром — и состав полей.
Чтобы воспользоваться функцией, не нужно программировать отчёт: достаточно выполнить код через внешнюю обработку или консоль кода. В управляемом приложении удобно использовать любую обработку «Консоль кода», в обычном приложении — внешнюю обработку с кнопкой «Выполнить».
Структура = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из Структура Цикл
Если Строка.ИмяТаблицыХранения <> "" Тогда
Сообщить(Строка.Метаданные + " -> " + Строка.ИмяТаблицыХранения);
КонецЕсли;
КонецЦикла;Результатом будет список вида Документ.РеализацияТоваровУслуг -> _Document231. Если нужны поля конкретной таблицы, передайте в функцию отбор по метаданным и изучите колонки ИмяПоля и ИмяПоляХранения — так вы узнаёте, например, что реквизит «Контрагент» физически хранится в поле _Fld1234.
- 1Сделайте резервную копию базы средствами СУБД
- 2Откройте 1С в режиме предприятия под пользователем с полными правами
- 3Запустите внешнюю обработку с консолью кода
- 4Выполните ПолучитьСтруктуруХраненияБазыДанных() и выведите результат
- 5Найдите нужный объект по имени метаданных и запишите физическое имя таблицы
- 6Проверьте результат простым SELECT к найденной таблице
Способ 2: готовые обработки для просмотра структуры хранения
Если писать код не хочется, используйте готовые внешние обработки, которые выводят структуру хранения в удобном виде с поиском. Наиболее известные — «Структура хранения базы данных» с диска ИТС и аналогичные разработки с портала Infostart. Они строят дерево метаданных, где рядом с каждым объектом показано физическое имя таблицы и полей.
Такие обработки особенно удобны, когда нужно быстро найти несколько таблиц или посмотреть, какие таблицы обслуживают регистр (основная, итоги, субконто). Открываются они стандартно: Файл → Открыть в режиме предприятия, никаких изменений конфигурации не требуется.
Единственное ограничение — обработка должна соответствовать версии платформы. Старые обработки, написанные под платформу 8.2, могут некорректно работать на новых релизах, поэтому берите свежие версии и проверяйте результат на одной известной таблице.
Способ 3: разбор служебной таблицы Params
Соответствие метаданных и физических имён хранится в самой базе — в таблице Params, в записи с именем DBSchema. Это сериализованное описание структуры хранения. Прямой запрос к этой записи вернёт бинарные или текстовые данные, которые неудобно читать вручную, но метод полезен, когда доступа к режиму предприятия нет, а доступ к SQL есть.
SELECT FileName, BinaryData
FROM Params
WHERE FileName = 'DBSchema';Практический сценарий: выгрузить содержимое поля в файл и разобрать его средствами 1С или сторонними утилитами разбора DBSchema. Учитывайте, что формат хранения может отличаться между версиями платформы, и гарантированно документированного способа чтения этой структуры вне платформы нет.
Дополнительно можно сориентироваться по таблице Config — она содержит сериализованную конфигурацию базы данных, откуда тоже извлекаются имена объектов. Но это ещё более трудоёмкий путь, который оправдан только в исследовательских задачах.
Как определить таблицу по косвенным признакам
Если ни конфигуратор, ни обработки недоступны, таблицу можно идентифицировать по составу полей и данным. Например, у таблиц документов всегда есть поля _IDRRef (ссылка), _Number (номер), _Date_Time (дата), _Posted (проведение). У справочников — _Code и _Description.
Практический приём: найти таблицу по известному значению. Если вы знаете номер конкретного документа, выполните поиск по всем таблицам документов через системные представления SQL Server и найдите, в какой из них встречается это значение. Это медленно, но работает как метод последней инстанции.
SELECT t.name AS TableName, c.name AS ColumnName
FROM sys.tables t
JOIN sys.columns c ON c.object_id = t.object_id
WHERE t.name LIKE '_Document%'
AND c.name LIKE '_Fld%'
ORDER BY t.name;Другой ориентир — количество строк. Таблица с миллионами записей среди документов — скорее всего, самый массовый документ учёта (реализация или поступление). Сопоставив это со статистикой из 1С, можно сузить круг кандидатов до двух-трёх таблиц и затем проверить их выборкой.
Типичные префиксы таблиц 1С в SQL
Знание префиксов сокращает поиск: по имени таблицы сразу видно тип объекта, и не приходится перебирать всю базу. Ниже — основные префиксы, которые генерирует платформа.
| Префикс | Тип объекта | Пример |
|---|---|---|
_Reference | Справочники | _Reference45 |
_Document | Документы | _Document231 |
_InfoRg | Регистры сведений | _InfoRg88 |
_AccumRg | Регистры накопления | _AccumRg102 |
_AccRg | Регистры бухгалтерии | _AccRg56 |
_Enum | Перечисления | _Enum12 |
_Chrc | Планы видов характеристик | _Chrc30 |
_Const | Константы | _Const1 |
Кроме основных таблиц у объектов есть вспомогательные: табличные части документов и справочников (суффикс вида _Document231_VT1234), таблицы итогов регистров, таблицы изменений для планов обмена (_Document231_ChangeRec). Все они видны в результате ПолучитьСтруктуруХраненияБазыДанных() с указанием назначения.
Проверка результата и ограничения прямого доступа
После того как физическое имя найдено, проверьте его простым запросом: выполните SELECT TOP 10 * FROM _Document231 и сопоставьте значения полей с данными, которые видите в 1С. Совпадение номеров документов, кодов или наименований — надёжное подтверждение, что таблица определена верно.
Как проверить результат
Номера документов или наименования в SQL совпадают с тем, что видно в 1С
Данные не похожи на ожидаемый объект — таблица определена неверно
Число строк сопоставимо с количеством объектов в 1С
Разница на порядки — вероятно, это другая таблица или таблица итогов
Структура получена после последнего обновления конфигурации
Соответствие сохранено давно — возможны расхождения после реструктуризации
Помните про ограничения прямого чтения. Запросы SELECT к большим таблицам без индексов по условиям могут вызвать блокировки и просадку производительности рабочей базы. Для тяжёлых аналитических выборок используйте копию базы или читайте данные в часы минимальной нагрузки, а на SQL Server применяйте подсказку WITH (NOLOCK) с пониманием того, что вы можете прочитать незафиксированные данные.
Также учитывайте: данные в полях хранятся в формате платформы. Ссылки — это 16-байтовые двоичные значения, даты смещены относительно начала отсчёта, значения перечислений — числа. Для осмысленного чтения потребуется преобразование, и это отдельная тема, выходящая за рамки поиска имён таблиц.
Что важно запомнить
Физические имена таблиц 1С не вычисляются, а хранятся в базе. Получите соответствие через ПолучитьСтруктуруХраненияБазыДанных() или готовую обработку, работайте с SQL только на чтение и обновляйте соответствие после каждого изменения конфигурации.
Частые вопросы
Можно ли изменить физическое имя таблицы в SQL вручную?
Нет. Имена генерируются и контролируются платформой 1С. Переименование таблицы средствами СУБД приведёт к тому, что платформа перестанет находить объект и база станет неработоспособной. Восстановление потребует отката имени или восстановления из копии.
Совпадают ли имена таблиц в файловой и клиент-серверной базе?
Нумерация объектов при создании базы обычно формируется одинаково, но гарантии совпадения нет, особенно если базы создавались в разное время или проходили разные циклы обновлений. Соответствие всегда получайте для конкретной базы.
Как узнать, в какой таблице лежит табличная часть документа?
Через ПолучитьСтруктуруХраненияБазыДанных() табличные части видны как отдельные строки с назначением «Табличная часть» и именем вида _Document231_VT1234. В дереве метаданных готовых обработок они показываются как дочерние узлы документа.
Нужны ли особые права для выполнения ПолучитьСтруктуруХраненияБазыДанных()?
Функция требует права на администрирование или полные права, поскольку раскрывает внутреннюю структуру базы. Под обычным пользователем вызов завершится ошибкой нарушения прав доступа.
Меняются ли имена таблиц при обновлении конфигурации?
Существующие таблицы обычно сохраняют имена, но при добавлении объектов, реструктуризации или загрузке конфигурации из файла нумерация новых объектов может отличаться от ожидаемой. Поэтому после каждого обновления соответствие нужно получать заново, а не использовать сохранённый список.
Можно ли строить отчёты в Excel или Power BI напрямую по таблицам SQL?
Технически да, если вы определили нужные таблицы и разобрались с форматом полей. Но такое решение хрупкое: при реструктуризации структура может измениться. Для стабильной интеграции лучше использовать HTTP-сервисы, OData или планы обмена, которые предоставляет платформа.