Администрирование · 13 мин
_Reference в 1С: что это за таблица и как ей пользоваться
Разбираемся, что означают таблицы _Reference в базе 1С на SQL Server: структура имен, связь со справочниками, поиск нужной таблицы и безопасная работа.
Когда база 1С развёрнута на Microsoft SQL Server или PostgreSQL, администратор, открывший список таблиц через Management Studio, обнаруживает сотни объектов с непонятными именами вида _Reference123, _Document456, _InfoRg789. Запрос «reference 1c что за таблица» — один из самых частых у тех, кто впервые столкнулся с физической структурой базы 1С на уровне СУБД.
Короткий ответ: таблицы с префиксом _Reference — это физическое хранилище справочников конфигурации 1С. Каждому справочнику, который вы видите в конфигураторе (Номенклатура, Контрагенты, Сотрудники и т.д.), соответствует одна таблица _ReferenceNNN в базе данных, где NNN — внутренний числовой идентификатор объекта метаданных.
Проблема в том, что по имени таблицы невозможно понять, какой именно справочник она хранит. Соответствие между номером и объектом конфигурации хранится в специальной системной таблице, и умение быстро найти нужную таблицу — базовый навык для администраторов, интеграторов и разработчиков отчётов на прямых SQL-запросах.
Как устроена физическая структура базы 1С на SQL Server
1С:Предприятие работает с данными через объектную модель: справочники, документы, регистры, планы счетов. На уровне СУБД этой модели соответствует набор таблиц со строго регламентированными префиксами. Платформа сама создаёт и обслуживает эти таблицы при реструктуризации, и их структура не предназначена для прямого изменения.
Основные префиксы, которые встречаются в любой базе:
_Reference— справочники (Номенклатура, Контрагенты, Склады);_Document— документы (Реализация товаров, Поступление, Приказ);_InfoRg— регистры сведений;_AccumRg— регистры накопления;_AccRg— регистры бухгалтерии;_Enum— перечисления;_Consts— константы;_Params,_Files,_Config— служебные и системные таблицы.
Числовой суффикс после префикса — это порядковый номер объекта метаданных внутри конфигурации. Он присваивается платформой автоматически и может меняться при серьёзной реструктуризации, поэтому жёстко «зашивать» номера таблиц в интеграционные скрипты — плохая практика.
Какие поля есть внутри таблицы _Reference
Структура таблицы справочника формируется платформой и включает служебные поля, которые есть всегда, плюс пользовательские реквизиты, определённые в конфигураторе. Служебные поля имеют префикс подчёркивания и стандартное назначение.
| Поле | Назначение |
|---|---|
_IDRRef | Уникальный идентификатор ссылки (GUID в бинарном виде), первичный ключ |
_Code | Код элемента справочника |
_Description | Наименование элемента |
_ParentIDRRef | Ссылка на родительскую группу (для иерархических справочников) |
_OwnerID_TYPE / _OwnerID_RRRef | Владелец (для подчинённых справочников) |
_Marked | Признак пометки на удаление |
_PredefinedID | Идентификатор предопределённого элемента |
_IsMetadata | Служебный признак служебной записи |
_FldNNN | Пользовательские реквизиты справочника |
Реквизиты, созданные в конфигураторе (ИНН, КПП, Артикул), хранятся в полях _FldNNN с тем же механизмом нумерации, что и сами таблицы. Соответствие номера поля конкретному реквизиту также определяется через структуру метаданных.
Табличные части справочника хранятся в отдельных таблицах вида _Reference123_VT456, где второй номер — идентификатор табличной части. Связь с основной таблицей осуществляется через поле ссылки на владельца строки.
Как узнать, какой справочник скрывается за номером таблицы
Соответствие между физическими именами таблиц и объектами конфигурации хранится в специальной таблице соответствия. В зависимости от версии платформы и режима совместимости она может называться по-разному, но классический подход — запрос к таблице, содержащей сопоставление идентификаторов метаданных.
Способ 1: запрос к таблице соответствия
В большинстве конфигураций работает запрос к системной таблице, хранящей пары «идентификатор объекта — имя таблицы»:
SELECT TOP 50 * FROM _Reference22 -- пример: таблица соответствия объектов метаданныхБолее надёжный путь — использовать стандартную функцию платформы. В языке 1С есть метод ПолучитьСтруктуруХраненияБазыДанных(), который возвращает таблицу соответствия всех объектов метаданных и физических имён таблиц и полей. Это самый безопасный и документированный способ.
Структура = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из Структура Цикл
Если Строка.ИмяТаблицыХранения = "_Reference123" Тогда
Сообщить(Строка.Метаданные); // например, "Справочник.Номенклатура"
КонецЕсли;
КонецЦикла;Способ 2: через содержимое таблицы
Если доступа к конфигуратору нет, можно выполнить простой запрос SELECT TOP 10 _Code, _Description FROM _Reference123 и по наименованиям понять, что это за справочник. Коды и названия обычно однозначно указывают на содержимое: «ООО Ромашка» — контрагенты, артикулы — номенклатура, фамилии — сотрудники.
- 1Откройте консоль запросов или внешнюю обработку в режиме Предприятия
- 2Выполните ПолучитьСтруктуруХраненияБазыДанных() с фильтром по метаданным
- 3Найдите нужный справочник и запомните имя его таблицы и полей
- 4Проверьте результат простым SELECT по нескольким записям
- 5Зафиксируйте соответствие в документации интеграции, но не зашивайте номера в код
Чем _Reference отличается от других таблиц платформы
Понимание различий между типами таблиц важно при построении прямых SQL-запросов: у каждого типа свой набор служебных полей и своя логика хранения.
| Префикс | Объект 1С | Ключевые особенности полей |
|---|---|---|
_Reference | Справочник | Код, наименование, родитель, владелец, пометка удаления |
_Document | Документ | Номер, дата, признак проведения, ссылка |
_InfoRg | Регистр сведений | Измерения, ресурсы, период (для периодических) |
_AccumRg | Регистр накопления | Период, регистратор, вид движения, измерения, ресурсы |
_Enum | Перечисление | Ссылка и порядок значения |
Ключевое отличие справочников — отсутствие привязки ко времени и движениям. Это «плоский» список записей, на который ссылаются документы и регистры через поля типа _FldNNN_TYPE (тип), _FldNNN_RTRef (вид объекта) и _FldNNN_RRRef (сама ссылка) — так платформа хранит составные типы.
Безопасная работа с таблицами _Reference: что можно и что нельзя
Чтение данных напрямую из таблиц SQL — распространённая практика для интеграций, выгрузок в хранилища данных и тяжёлых аналитических отчётов. При соблюдении ряда правил это безопасно для целостности базы.
Категорически запрещены любые операции записи: INSERT, UPDATE, DELETE напрямую в таблицы платформы. Платформа 1С поддерживает служебные механизмы — нумерацию, контроль ссылочной целостности, версионирование объектов, итоги регистров. Прямая запись обходит все эти механизмы и приводит к рассогласованию данных, которое проявляется не сразу, а в момент обновления конфигурации или пересчёта итогов.
Дополнительные правила безопасного чтения:
- Используйте подсказку
WITH (NOLOCK)или читайте из реплики, чтобы не создавать блокировки на рабочей базе; - Учитывайте пометку удаления: фильтр
_Marked = 0отсекает помеченные элементы; - Помните про разделители данных в режиме сервиса (SaaS) — в таблицах могут быть поля области данных;
- Не стройте логику на конкретных номерах таблиц — при обновлении конфигурации они могут измениться.
Практические сценарии использования
Выгрузка справочника во внешнюю систему
Типовая задача интеграции — забрать актуальный список контрагентов в CRM или BI-систему. Правильный подход: определить таблицу через структуру хранения, построить запрос с фильтром по пометке удаления и соединить пользовательские поля по их именам хранения.
SELECT r._IDRRef, r._Code, r._Description, f._Fld1001 AS INN
FROM _Reference123 r WITH (NOLOCK)
LEFT JOIN ... -- соединения по необходимости
WHERE r._Marked = 0Поиск потерянного элемента
Если пользователь утверждает, что элемент справочника «исчез», проверка на уровне SQL показывает реальную картину: элемент может быть помечен на удаление (_Marked = 1), перенесён в другую группу или переименован. Запрос по коду или наименованию быстро проясняет ситуацию без перебора в интерфейсе.
Анализ дублей
Запрос с группировкой по наименованию или ИНН позволяет найти дубли элементов до запуска штатной обработки поиска и удаления дублей. Это безопасная read-only операция, которая помогает оценить масштаб проблемы.
Как проверить результат
Имя из ПолучитьСтруктуруХраненияБазыДанных совпадает с содержимым SELECT
В выборке данные другого объекта — номер таблицы изменился после реструктуризации
Количество строк с _Marked = 0 совпадает с числом элементов в интерфейсе 1С
Разница в количестве — проверьте разделители данных и отборы
Все _IDRRef из выборки находятся в базе
Есть ссылки на несуществующие записи — признак прошлых прямых правок SQL
Альтернативы прямому доступу к таблицам
Прямые запросы к SQL — не единственный и не всегда лучший способ получить данные справочников. В зависимости от задачи существуют штатные механизмы, которые не требуют знания физической структуры.
Сравнение вариантов доступа к данным справочников
Быстро для больших выборок и BI. Требует знания структуры хранения, риск блокировок, ломается при реструктуризации
Штатный механизм, не зависит от физических имён таблиц. Медленнее на очень больших объёмах
Стандартный интерфейс для внешних систем, автоматически сериализует объекты. Требует настройки и публикации
Подходят для регулярной синхронизации между базами. Избыточны для разовой выгрузки
Для разовой аналитики достаточно консоли запросов в режиме Предприятия. Для постоянной интеграции надёжнее опубликовать HTTP-сервис: он переживёт обновление конфигурации, тогда как SQL-скрипт с жёсткими номерами таблиц — нет.
Что важно запомнить
Таблицы _Reference — это физическое хранилище справочников 1С в базе SQL. Соответствие номера таблицы конкретному справочнику узнают через ПолучитьСтруктуруХраненияБазыДанных(). Читать напрямую можно с осторожностью (NOLOCK, фильтр по _Marked), изменять — нельзя никогда. Для постоянных интеграций предпочтительны штатные механизмы платформы.
Частые вопросы
Почему в базе несколько таблиц _Reference с похожими номерами?
Каждому справочнику конфигурации соответствует своя таблица, поэтому в типовой конфигурации их десятки или сотни. Дополнительно рядом могут быть таблицы табличных частей с суффиксом _VT и служебные таблицы. Это нормальная структура, а не признак дублирования данных.
Можно ли переименовать таблицу _Reference в понятное имя?
Нет. Имена физических таблиц генерирует и контролирует платформа 1С. Ручное переименование на уровне SQL приведёт к тому, что платформа не найдёт таблицу и база перестанет работать. Для удобства создавайте представления (VIEW) с понятными именами поверх системных таблиц.
Как понять, какой реквизит хранится в поле _Fld1001?
Через ту же функцию ПолучитьСтруктуруХраненияБазыДанных(): в её результате для каждого объекта перечислены поля с указанием имени реквизита и имени поля хранения. Внешние обработки «структура хранения базы данных» выводят это в удобной таблице.
Что означает поле _Marked = 1 в таблице справочника?
Элемент помечен на удаление. Физически запись остаётся в таблице, пока не будет выполнено штатное удаление помеченных объектов с контролем ссылочной целостности. В выгрузках и отчётах такие записи обычно исключают фильтром _Marked = 0.
Изменятся ли номера таблиц после обновления конфигурации?
Могут измениться при реструктуризации, особенно при добавлении или удалении объектов метаданных. Поэтому в интеграционных решениях соответствие таблиц объектам нужно определять динамически или перепроверять после каждого обновления конфигурации.
Безопасно ли читать таблицы _Reference из Excel или Power BI?
Да, если подключение выполняется под отдельной учётной записью только с правами на чтение и запросы используют NOLOCK или направлены на реплику. Главные риски — блокировки на рабочей базе и устаревание структуры запроса после обновлений конфигурации.