Объект конфигурации и таблица СУБД: как найти соответствие в обе стороны
Содержание
Узнать, какая таблица СУБД хранит объект 1С, проще всего функцией ПолучитьСтруктуруХраненияБазыДанных(). Она возвращает пары «имя в конфигурации — имя в базе»: например, Справочник.Номенклатура ↔ _Reference25, а реквизит Артикул ↔ _Fld1234. Числа в именах у каждой базы свои, поэтому угадать их по префиксу нельзя — только сверить.
Обратная задача встречается чаще. В отчёте SQL Server, в логе блокировок или в технологическом журнале всплывает _AccumRg4512, и нужно понять, какой это регистр. Ниже — способы для режима 1С:Предприятие, Конфигуратора и прямой работы с SQL Server и PostgreSQL.
С чего начать: объект в режиме Предприятия и в Конфигураторе
Сначала нужно точно знать имя объекта метаданных. Пользователь видит синоним («Реализация (акты, накладные, УПД)»), а в коде и в структуре хранения фигурирует имя (РеализацияТоваровУслуг).
Как узнать имя объекта из открытой формы
- Откройте список или документ в режиме 1С:Предприятие.
- Нажмите
Shift+F11— команда «Получить ссылку». - В навигационной ссылке читайте часть после
e1cib/list/илиe1cib/data/: например,e1cib/list/Документ.РеализацияТоваровУслуг.
Первое слово — вид объекта (Справочник, Документ, РегистрСведений), второе — его имя. Этого достаточно, чтобы искать таблицу.
Поиск по синониму через «Все функции»
Если известно только название из интерфейса, откройте главное меню → Все функции. Если пункта нет, включите его: главное меню → Сервис → Параметры → флажок «Отображать команду “Все функции”». В дереве видны синонимы объектов, а при открытии списка по Shift+F11 получите имя.
В Конфигураторе
В дереве метаданных у нижнего края есть строка поиска: она фильтрует объекты по имени. В свойствах объекта (Alt+Enter) видны имя, синоним и подчинённые табличные части. Сам Конфигуратор имена таблиц СУБД не показывает — их даёт только структура хранения.
💡 Синоним в разных конфигурациях и релизах может меняться, имя — почти никогда. Записывайте в заметки именно имя.
Правила именования таблиц 1С в базе данных
Платформа не использует русские имена в СУБД. Каждая таблица получает служебный префикс и порядковый номер, поле — префикс _Fld и номер.
Устройство имени:
- 🧱 Префикс — вид объекта:
_Referenceдля справочника,_Documentдля документа,_InfoRgдля регистра сведений. - 🔢 Номер — присваивается при создании таблицы в конкретной базе. В копии той же конфигурации номер может быть другим.
- 📎 Суффикс — вспомогательная таблица:
_VTдля табличной части,Tв_AccumRgTдля итогов.
Стандартные реквизиты имеют постоянные имена без номеров:
| Поле в СУБД | Что хранит |
|---|---|
_IDRRef | Ссылка (уникальный идентификатор) |
_Version | Версия данных объекта |
_Marked | Пометка удаления |
_Code, _Description | Код и наименование справочника |
_ParentIDRRef | Родитель в иерархии |
_OwnerIDRRef | Владелец подчинённого справочника |
_Number, _Date_Time, _Posted | Номер, дата и проведение документа |
_Period, _RecorderRRef, _LineNo, _Active | Период, регистратор, номер строки и активность записи регистра |
_PredefinedID | Признак предопределённого элемента |
Реквизиты составного типа раскладываются на несколько колонок с общим началом: _Fld567_TYPE (тип значения), _Fld567_RTRef (номер таблицы ссылки), _Fld567_RRRef (сама ссылка), _Fld567_N, _Fld567_S, _Fld567_L, _Fld567_T для числа, строки, булева и даты.
Смещение дат в SQL Server
При создании базы на MS SQL Server указывают смещение дат. Если выбрано 2000, дата 01.01.2025 лежит в таблице как 4025-01-01. Значение смещения хранится в служебной таблице _YearOffset. Учитывайте это в любых условиях WHERE по датам.
Функция ПолучитьСтруктуруХраненияБазыДанных
Это главный инструмент. Функция работает на сервере, в толстом клиенте и во внешнем соединении. Возвращает таблицу значений с колонками:
ИмяТаблицы— имя в терминах 1С, напримерРегистрНакопления.ТоварыНаСкладах.Итоги;ИмяТаблицыХранения— имя в базе, например_AccumRgT4520;Назначение— «Основная», «ТабличнаяЧасть», «Итоги», «РегистрацияИзменений» и т. п.;Метаданные— полное имя объекта;Поля— вложенная таблица:ИмяПоляХранения,ИмяПоля,Метаданные;Индексы— индексы таблицы.
Первый параметр — массив объектов метаданных (не указан — вернётся вся база). Второй параметр, Истина, просит имена так, как они записаны в конкретной СУБД. Для PostgreSQL это важно: там имена в нижнем регистре (_reference25).
Таблица по имени объекта
Код для внешней обработки или серверного модуля:
&НаСервере
Процедура ПоказатьТаблицыОбъектаНаСервере()
Объекты = Новый Массив;
Объекты.Добавить(Метаданные.Справочники.Номенклатура);
Структура = ПолучитьСтруктуруХраненияБазыДанных(Объекты, Истина);
Для Каждого СтрТабл Из Структура Цикл
Сообщить(СтрТабл.ИмяТаблицы + " -> " + СтрТабл.ИмяТаблицыХранения);
Для Каждого СтрПоле Из СтрТабл.Поля Цикл
Сообщить(" " + СтрПоле.ИмяПоля + " -> " + СтрПоле.ИмяПоляХранения);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Объект по имени таблицы
Обратный поиск — по всей структуре, без отбора:
&НаСервере
Процедура НайтиОбъектПоТаблицеНаСервере(ИмяТаблицыСУБД)
Структура = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
Для Каждого СтрТабл Из Структура Цикл
Если НРег(СтрТабл.ИмяТаблицыХранения) = НРег(ИмяТаблицыСУБД) Тогда
Сообщить(СтрТабл.ИмяТаблицы + " (" + СтрТабл.Назначение + ")");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
НРег() снимает разницу регистра между SQL Server и PostgreSQL. Вызов без отбора по большой конфигурации (ERP, КА) идёт несколько секунд — это нормально.
Запускайте обработку под пользователем с полными правами. Встраивать её в рабочую конфигурацию не нужно: хватит внешней обработки, открытой через Файл → Открыть.
Прямой анализ таблиц в SQL Server и PostgreSQL
Работа на уровне СУБД нужна, когда база тормозит и надо понять, какие таблицы самые тяжёлые, или когда разбираете блокировку из профайлера.
Самые большие таблицы в MS SQL Server
SELECT TOP 20
t.name AS table_name,
SUM(a.total_pages) * 8 / 1024 AS size_mb
FROM sys.tables t
JOIN sys.indexes i ON t.object_id = i.object_id
JOIN sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN sys.allocation_units a ON p.partition_id = a.container_id
GROUP BY t.name
ORDER BY size_mb DESC;
Самые большие таблицы в PostgreSQL
SELECT relname,
pg_size_pretty(pg_total_relation_size(relid)) AS size
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC
LIMIT 20;
Типичный результат: сверху _InfoRg…, _AccumRg…, _AccRg…, таблицы регистрации изменений. Каждое имя затем прогоняете через обработку из предыдущего раздела.
Поиск всех таблиц одного вида
-- SQL Server
SELECT name FROM sys.tables WHERE name LIKE '[_]AccumRg%' ORDER BY name;
-- PostgreSQL
SELECT tablename FROM pg_tables
WHERE schemaname = 'public' AND tablename LIKE '\_accumrg%'
ORDER BY tablename;
Подчёркивание в LIKE — подстановочный символ, поэтому его экранируют: [_] в SQL Server и \_ в PostgreSQL.
Имена таблиц в технологическом журнале
В событиях DBMSSQL и DBPOSTGRS технологического журнала поле Sql содержит текст запроса с физическими именами: _Document45, _Fld1234, _AccumRgT4520. Выпишите все имена из медленного запроса и расшифруйте их одной обработкой — так видно, какой отчёт или документ создаёт нагрузку.
Только чтение. Никаких UPDATE и DELETE напрямую в таблицах 1С. Платформа не узнает об изменении: разойдутся итоги регистров, версии объектов и кэш на клиентах. Тяжёлые аналитические запросы запускайте на копии базы или вне рабочего времени.
Табличные части, регистры и служебные таблицы
Один объект метаданных почти всегда занимает несколько таблиц.
Табличные части
Имя строится от таблицы владельца: _Document45_VT678. В ней ссылка на документ — поле _Document45_IDRRef, номер строки — _LineNo679. Порядок строк хранит именно это поле, а не порядок записей.
Регистры накопления
_AccumRg— сами движения;_AccumRgT— итоги остатков;- отдельные таблицы для настроек итогов и агрегатов.
Если _AccumRgT раздулась больше основной таблицы, стоит пересчитать итоги или проверить период их рассчитанности.
Регистры сведений и бухгалтерии
У периодического регистра сведений могут быть таблицы среза последних (_InfoRgSL) и среза первых (_InfoRgSF) — если в свойствах регистра включено их использование. Регистр бухгалтерии
хранит проводки в _AccRg, значения субконто — в _AccRgED, итоги — в отдельных таблицах с суффиксом AT.
Служебные таблицы платформы
У них нет номера, и через ПолучитьСтруктуруХраненияБазыДанных их не найти:
| Таблица | Назначение |
|---|---|
Config | Основная конфигурация базы |
ConfigSave | Конфигурация, сохранённая в Конфигураторе, но ещё не применённая |
Params | Параметры базы, в том числе файл DBNames с соответствием имён |
DBSchema | Описание структуры базы |
Files | Служебные файлы платформы |
v8users | Список пользователей информационной базы |
_YearOffset | Смещение дат (SQL Server) |
DBNames хранится в двоичном сжатом виде. Читать его вручную нет смысла: ту же информацию в удобной форме выдаёт функция платформы.
Шпаргалка: объект метаданных → префикс таблицы
| Объект в 1С | Префикс основной таблицы | Связанные таблицы |
|---|---|---|
| Справочник | _Reference | _Reference…_VT… (ТЧ), _ReferenceChngR (регистрация изменений) |
| Документ | _Document | _Document…_VT…, _DocumentChngR |
| Журнал документов | _DocumentJournal | — |
| Перечисление | _Enum | — |
| Константа | _Const | каждая константа — отдельная таблица |
| План видов характеристик | _Chrc | _Chrc…_VT… |
| План счетов | _Acc | _Acc…_ExtDim… (виды субконто) |
| План видов расчёта | _CKinds | — |
| План обмена | _Node | — |
| Регистр сведений | _InfoRg | _InfoRgSL, _InfoRgSF |
| Регистр накопления | _AccumRg | _AccumRgT (итоги) |
| Регистр бухгалтерии | _AccRg | _AccRgED, _AccRgAT… |
| Регистр расчёта | _CalcRg | перерасчёты, фактический период |
| Бизнес-процесс | _BPr | точки маршрута |
| Задача | _Task | — |
| Последовательность | _Seq | границы последовательности |
Таблица помогает быстро отсеять гипотезы: _InfoRg — это точно регистр сведений
, а какой именно — покажет только структура хранения.
Ошибки и подводные камни при определении таблиц
- ❌ Номер взяли из другой базы. Копия той же конфигурации на тестовом сервере может иметь
_Reference31вместо_Reference25. Структуру хранения снимайте с той базы, где разбираете проблему. - ❌ Сравнили имена с учётом регистра. В PostgreSQL
_reference25, в SQL Server_Reference25. БезНРег()или второго параметраИстинаобратный поиск ничего не находит. - ❌ Перепутали основную таблицу и итоги. Блокировка на
_AccumRgT— это итоги регистра, а не движения. Решения у этих проблем разные. - ❌ Структуру сняли до обновления. После реструктуризации таблицы могут получить новые номера, а у новых реквизитов появятся новые поля. Сохранённую раньше выгрузку обновляйте.
- ❌ Ищут таблицу в файловой базе через SQL. Файловая база лежит в одном файле
1Cv8.1CD, к ней нельзя подключиться SQL-клиентом. ФункцияПолучитьСтруктуруХраненияБазыДанныхпри этом работает и там. - ❌ Ждут, что язык запросов 1С увидит
_Reference25. Запросы 1С работают только с именами метаданных, обращение к таблице СУБД по физическому имени в них невозможно.