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

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

1С: что за таблица _InfoRg в базе данных и как её расшифровать

Таблица _InfoRg в базе 1С — это регистр сведений на уровне СУБД. Разбираем структуру, назначение полей, поиск нужной таблицы и безопасные способы чтения данных.

Администраторы и разработчики, которые открывают базу 1С напрямую в SQL Server Management Studio или pgAdmin, сталкиваются с сотнями таблиц с непонятными именами: _Reference123, _Document456, _InfoRg789. Префикс _InfoRg означает Information Register — регистр сведений. Это один из основных типов объектов метаданных 1С, и каждый регистр сведений конфигурации хранится в отдельной таблице с таким префиксом и числовым суффиксом.

Число после префикса — внутренний идентификатор объекта, который платформа присваивает автоматически. Он не совпадает с именем регистра в конфигураторе и может отличаться между разными базами одной и той же конфигурации. Поэтому запрос вида SELECT * FROM _InfoRg12345 без предварительной расшифровки имени бессмысленен: сначала нужно понять, какому именно регистру соответствует таблица.

Типичные ситуации, когда возникает вопрос про таблицу _InfoRg: поиск «раздувшейся» таблицы при анализе размера базы, оптимизация медленных запросов, прямое чтение данных для интеграции, восстановление после сбоя. Во всех этих случаях важно понимать структуру таблицы и границы безопасной работы с ней.

Что такое регистр сведений и почему он называется _InfoRg

Регистр сведений в 1С — объект для хранения информации в разрезе заданных измерений: курсы валют по датам, цены номенклатуры по видам цен, штрихкоды товаров, адреса контрагентов. В отличие от регистра накопления, он не хранит «обороты и остатки», а содержит актуальные записи с произвольными ресурсами.

Платформа 1С не использует осмысленные имена объектов на уровне СУБД. Вместо этого применяется схема: префикс типа объекта плюс порядковый номер. Справочники — _Reference, документы — _Document, регистры накопления — _AccumRg, регистры сведений — _InfoRg. Такой подход делает структуру базы независимой от переименований в конфигураторе.

У периодических регистров сведений и регистров, подчинённых регистратору, структура сложнее: добавляются поля периода, регистратора, признака активности. Независимые непериодические регистры — самый простой случай: измерения, ресурсы, реквизиты и служебные поля.

Структура таблицы _InfoRg: какие поля вы увидите

Открыв таблицу _InfoRg в Management Studio, вы увидите набор колонок с техническими именами. Их можно разделить на группы, и понимание этих групп сильно упрощает чтение данных.

  • _Fld... — пользовательские поля: измерения, ресурсы и реквизиты регистра. Их имена нужно сопоставлять с метаданными через структуру хранения.
  • _Period — дата записи, присутствует только у периодических регистров.
  • _RecorderRRef — ссылка на регистратор (документ), если регистр подчинён регистратору.
  • _LineNo — номер строки в наборе записей регистратора.
  • _Active — признак активности записи.
  • _SimpleKey — служебный ключ у независимых регистров (в отдельных режимах совместимости).

Ссылки на другие объекты (например, измерение «Номенклатура») хранятся как 16-байтные двоичные значения вида 0x.... Это внутренние GUID-ссылки, и соединять таблицы в запросах нужно именно по ним, учитывая особенности хранения GUID в 1С — байты переставлены относительно привычного строкового представления.

Как узнать, какому регистру соответствует таблица

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

Альтернативный путь — обработки «Структура хранения базы данных», которые выводят ту же информацию в удобном виде с отбором по типу объекта. Для разовой задачи это быстрее, чем писать код.

bsl
ТаблицаХранения = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из ТаблицаХранения Цикл
    Если Строка.ИмяТаблицыХранения = "_InfoRg12345" Тогда
        Сообщить(Строка.ИмяТаблицы); // имя регистра в конфигурации
    КонецЕсли;
КонецЦикла;

Есть и косвенный признак: состав и типы колонок. Если в таблице есть поле-ссылка на справочник валют и числовое поле с типом курса — вероятно, это регистр курсов валют. Но такой метод подходит только для грубой оценки, для точной идентификации используйте структуру хранения.

Порядок действий
  1. 1
    Откройте конфигуратор или внешнюю обработку с доступом к структуре хранения
  2. 2
    Вызовите ПолучитьСтруктуруХраненияБазыДанных() и найдите строку с именем _InfoRgNNNN
  3. 3
    Сопоставьте найденное имя регистра с объектом в дереве метаданных
  4. 4
    Проверьте назначение таблицы: основная таблица, итоги среза последних или служебная

Дополнительные таблицы регистра: итоги и срезы

У одного регистра сведений может быть несколько физических таблиц. Помимо основной таблицы _InfoRgNNNN, платформа создаёт служебные: например, таблицу среза последних для периодических регистров и таблицу настроек хранения итогов. Их имена содержат суффиксы вроде _InfoRgSL или схожие, в зависимости от версии платформы.

Таблица среза последних — материализованное представление актуальных значений на текущий момент. Именно поэтому виртуальная таблица «СрезПоследних» в запросах 1С работает быстро: данные уже подготовлены. При прямом чтении из SQL учитывайте, что основная таблица содержит всю историю, а срез — только последние значения.

Безопасная работа: что можно, а что нельзя

Чтение данных напрямую из SQL — допустимая практика для анализа, интеграций и построения внешней отчётности. Запросы SELECT не нарушают целостность базы, хотя тяжёлые запросы без индексов могут создать блокировки и замедлить работу пользователей. Для регулярной выгрузки лучше использовать копию базы или читать с рекомендуемым уровнем изоляции.

Прямая запись в таблицы _InfoRg командами INSERT, UPDATE или DELETE категорически не рекомендуется. Платформа кэширует данные, ведёт служебные таблицы итогов и контролирует версии объектов — обход этих механизмов приводит к рассинхронизации, ошибкам при обновлении конфигурации и потере данных. Все изменения выполняйте через язык 1С: наборы записей, менеджеры записей.

Отдельный риск — очистка «тяжёлых» таблиц. Если вы обнаружили, что _InfoRg занимает гигабайты, не удаляйте строки вручную. Сначала определите регистр, проанализируйте его содержимое штатными средствами (например, найдите устаревшие записи обмена или лишние версии объектов) и удаляйте данные через обработки 1С.

Типичные ошибки
01
Поиск регистра по номеру таблицы из чужой базы — номера не совпадают между базами, получите неверный объект
02
Прямое удаление строк из _InfoRg для «очистки места» — итоговые таблицы рассинхронизируются, возможны ошибки при реструктуризации
03
Соединение таблиц по строковому GUID без учёта перестановки байт — запрос вернёт пустой или неверный результат
04
Чтение основной таблицы вместо среза последних — в отчёт попадёт вся история вместо актуальных значений

Когда прямой доступ оправдан, а когда лучше обойтись средствами 1С

Прямой SQL-доступ оправдан для: анализа размера таблиц и поиска причин роста базы, чтения данных внешними системами отчётности, диагностики производительности силами DBA, разовой выгрузки при отсутствии доступа к конфигуратору. В этих сценариях знание структуры _InfoRg экономит часы работы.

Средствами 1С лучше решать: любые изменения данных, регулярные обмены (для этого есть планы обмена, HTTP-сервисы, COM/ODBC-подключения), построение отчётов внутри системы. Прямые запросы хрупки: при обновлении конфигурации структура таблиц может измениться, и интеграция сломается без предупреждения.

Маршрут решения

Как выбрать действие

Нужно только прочитать данные для внешнего отчётаИспользуйте SELECT по основной таблице или таблице среза, предварительно расшифровав имя через структуру хранения
Нужно изменить или удалить записи регистраРаботайте только через язык 1С: наборы записей и менеджеры записей
Таблица _InfoRg занимает аномально много местаОпределите регистр, проанализируйте содержимое в 1С и очистите штатной обработкой на копии базы
Нужна постоянная интеграция с внешней системойПредпочтите HTTP-сервисы или планы обмена вместо прямых SQL-запросов
Итог

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

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

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

Чем _InfoRg отличается от _AccumRg?

_InfoRg — таблица регистра сведений (измерения и произвольные ресурсы, например цены или курсы). _AccumRg — регистр накопления, хранящий приходы и расходы с видами движения. У регистров накопления есть поле вида записи и таблицы итогов по периодам, у регистров сведений — таблицы срезов.

Почему в одной базе регистр называется _InfoRg100, а в другой _InfoRg250?

Номер присваивается платформой при создании объекта и зависит от истории изменений конкретной базы. При загрузке конфигурации из файла или обновлении номера могут меняться. Всегда определяйте соответствие через структуру хранения текущей базы.

Можно ли восстановить удалённые записи регистра напрямую в SQL?

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

Как по таблице _InfoRg понять, что база «раздулась» из-за конкретного регистра?

В SQL Server используйте отчёт по размеру таблиц (sp_spaceused или стандартный отчёт SSMS). Найдя крупную таблицу _InfoRg, расшифруйте её имя через структуру хранения и проанализируйте содержимое регистра уже в 1С — часто виновниками оказываются регистры версий объектов или служебных очередей.

Видны ли таблицы _InfoRg в файловой базе 1С?

Нет. В файловом варианте вся база хранится в одном файле 1Cv8.1CD, и таблицы с такими именами существуют только в клиент-серверном варианте на SQL Server, PostgreSQL, Oracle или IBM Db2. Для анализа файловой базы используются специальные утилиты чтения формата 1CD.