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

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

Где хранятся регистры 1С и как их найти

Разбираем, где физически хранятся регистры 1С: таблицы SQL-базы, файл 1Cv8.1CD, инструменты просмотра данных и способы найти нужную таблицу регистра.

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

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

Физическая структура хранения зависит от режима работы информационной базы. В файловом варианте всё находится в одном файле 1Cv8.1CD, в клиент-серверном — в таблицах MS SQL Server, PostgreSQL, Oracle или IBM Db2. При этом логическая структура регистров одинакова: платформа сама преобразует описание регистра из конфигурации в набор физических таблиц.

Какие бывают регистры и что это меняет для хранения

В платформе 1С:Предприятие 8 существует четыре вида регистров, и каждый хранится в собственном наборе таблиц. Регистры сведений хранят произвольные данные в разрезе измерений (например, курсы валют, цены номенклатуры). Регистры накопления хранят остатки и обороты ресурсов (остатки товаров, взаиморасчёты). Регистры бухгалтерии привязаны к плану счетов и хранят проводки и остатки по счетам. Регистры расчёта связаны с планом видов расчёта и используются в зарплатных конфигурациях.

Для регистра накопления вида «Остатки» платформа создаёт не одну, а как минимум три физические таблицы: таблицу движений (каждая строка проведённого документа), таблицу итогов (рассчитанные остатки по периодам) и служебные таблицы для ускорения расчёта итогов. Именно поэтому физических таблиц в базе всегда существенно больше, чем регистров в конфигураторе.

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

Хранение регистров в файловой базе (1Cv8.1CD)

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

Файл 1Cv8.1CD имеет собственный внутренний формат: внутри него таблицы, индексы и служебные структуры, напоминающие встроенную СУБД. Открыть его внешними средствами вроде Excel или текстового редактора нельзя — данные регистров читаются только через платформу: запросами, таблицами регистров в режиме «Все функции» или специализированными обработками.

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

Хранение регистров в клиент-серверной базе (SQL)

В клиент-серверном варианте данные регистров лежат в таблицах СУБД: MS SQL Server, PostgreSQL, Oracle или IBM Db2. Сервер 1С:Предприятия выступает посредником: он получает запрос из кода конфигурации, транслирует его в SQL и возвращает результат. База данных целиком создаётся платформой при публикации, и её структура полностью управляется платформой.

Имена физических таблиц формируются по шаблону с префиксом, отражающим тип объекта. Для регистров характерны префиксы: _InfoReg — регистры сведений, _AccumReg — движения регистров накопления, _AccumRgOpt и _AccumRgTot — служебные таблицы итогов, _AccumlReg и подобные варианты в зависимости от версии платформы, _BPRg и др. для регистров бухгалтерии, таблицы регистров расчёта имеют собственные префиксы. За префиксом идёт числовой идентификатор объекта метаданных, например _InfoReg123.

Внутри таблицы регистра поля тоже имеют технические имена: измерения получают имена вида _Fld с номером, добавляются служебные поля периода (_Period), регистратора (_Recorder), номера строки, активности записи. Поэтому читать такую таблицу «в лоб» затруднительно — без сопоставления с метаданными непонятно, какое поле какому измерению соответствует.

Префикс _InfoRegРегистр сведений

Найдите номер таблицы и сопоставьте через структуру хранения

Префикс _AccumRegДвижения регистра накопления

Каждая строка — запись движения документа

Таблицы итоговХранят рассчитанные остатки

Обновляются платформой автоматически при проведении

Поля _Fld с номерамиИзмерения и ресурсы регистра

Расшифровка только через ПолучитьСтруктуруХраненияБазыДанных

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

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

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

Для регистра накопления в структуре хранения будет несколько строк: основная таблица движений и таблицы итогов. Обращайте внимание на колонку «Назначение» — она подсказывает, где лежат сами записи, а где агрегированные данные, которые платформа пересчитывает сама и которые вручную трогать нельзя.

Как найти физическую таблицу регистра
  1. 1
    Откройте базу в режиме 1С:Предприятие с правами администратора
  2. 2
    Включите отображение команды «Все функции» в параметрах
  3. 3
    Откройте «Структуру хранения базы данных» через «Все функции»
  4. 4
    Найдите нужный регистр по имени метаданных в колонке «Имя»
  5. 5
    Снимите имя физической таблицы и назначение из соседних колонок
  6. 6
    Проверьте результат простым запросом к таблице через консоль запросов

Как посмотреть содержимое регистра без прямого доступа к СУБД

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

Второй способ — консоль запросов (в типовых конфигурациях есть встроенная, либо используется внешняя обработка). Запрос к регистру пишется на встроенном языке запросов 1С по имени метаданных, например «ВЫБРАТЬ * ИЗ РегистрНакопления.ТоварыНаСкладах», и платформа сама обращается к нужной физической таблице. Это избавляет от необходимости знать технические имена таблиц и полей.

Третий вариант — стандартные отчёты. Практически каждый регистр накопления в типовых конфигурациях обслуживается отчётом (ведомость по товарам, взаиморасчёты и т. п.), который читает те же таблицы, но через безопасный механизм СКД с учётом прав доступа.

bsl
Таблицы = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из Таблицы Цикл
    Если СтрНайти(Строка.ИмяТаблицыХранения, "_InfoReg") > 0 Тогда
        Сообщить(Строка.ИмяТаблицы + " -> " + Строка.ИмяТаблицыХранения);
    КонецЕсли;
КонецЦикла;

Почему нельзя менять данные регистров напрямую в SQL

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

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

Допустимый сценарий прямого доступа к SQL — только чтение (SELECT) для интеграций и аналитики, и даже тогда предпочтительнее штатные механизмы: HTTP-сервисы, OData, планы обмена. Если данные в регистре нужно исправить, правильный путь — документ корректировки, обработка через объектную модель или пересчёт итогов в режиме конфигуратора.

Типичные ошибки
01
Ручная правка таблиц регистров в SQL — рассинхронизация итогов и движений, непредсказуемые суммы в отчётах
02
Поиск данных в таблице итогов вместо таблицы движений — итоги агрегированы по месяцам и не содержат документов-источников
03
Редактирование файла 1Cv8.1CD сторонними утилитами — полное разрушение файловой базы без возможности восстановления
04
Очистка «лишних» таблиц с непонятными именами — часть из них служебные, их удаление ломает работу регистра целиком

Рост таблиц регистров и обслуживание

Таблицы движений регистров растут быстрее всего остальных объектов базы: каждый проведённый документ добавляет строки во все регистры, по которым делает движения. В активно используемой базе именно регистры определяют основной объём данных и основную нагрузку на дисковую подсистему.

Для контроля ситуации полезно периодически оценивать размер таблиц: в файловой базе — косвенно, по размеру 1Cv8.1CD и времени выполнения отчётов; в клиент-серверной — штатными отчётами СУБД по размеру таблиц. Таблицы-лидеры по объёму почти всегда оказываются регистрами накопления и сведений.

Методы сдерживания роста штатные: свёртка базы с вводом остатков на дату, установка периодичности регистров сведений там, где история не нужна, отключение неиспользуемых итогов, архивация старых периодов в отдельную базу. Любая из этих операций выполняется через механизмы платформы, а не удалением строк из таблиц.

Если отчёт по регистру внезапно стал показывать остатки, не совпадающие с движениями, первым делом выполните пересчёт итогов в конфигураторе (Администрирование → Проверка и исправление или управление итогами). В большинстве случаев расхождение вызвано сбитым состоянием итогов, а не порчей самих данных.
ПЗ
Практическое замечание

Как проверить, что данные регистра в порядке

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

Штатная проверка выполняется через «Тестирование и исправление» информационной базы с включёнными режимами реструктуризации таблиц и пересчёта итогов. Операция требует монопольного доступа и на больших базах занимает заметное время — планируйте её на нерабочие часы и обязательно с резервной копией.

Контрольные точки

Как проверить состояние регистра

Остаток в отчёте против суммы движений запросом
Норма

Значения совпадают

Тревожный признак

Расхождение — нужен пересчёт итогов

Наличие записей без регистратора в подчинённом регистре
Норма

Все записи привязаны к документам

Тревожный признак

«Висячие» записи — след прямого вмешательства или сбоя обмена

Скорость формирования отчёта по регистру
Норма

Отчёт формируется за приемлемое время

Тревожный признак

Резкое замедление — проверяйте размер таблицы и индексы

Часто задаваемые вопросы

Можно ли найти регистры 1С в виде отдельных файлов на диске?

Нет. В файловой базе все регистры находятся внутри единого файла 1Cv8.1CD, отдельных файлов под каждый регистр не существует. В клиент-серверном варианте данные лежат в таблицах СУБД, которые физически размещаются в файлах самой СУБД, но работать с ними напрямую на уровне файлов нельзя.

Как открыть таблицу регистра, если нет доступа к SQL-серверу?

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

Чем таблица движений отличается от таблицы итогов?

Таблица движений содержит каждую запись, созданную документами, с указанием регистратора, периода и вида движения. Таблица итогов хранит предрассчитанные остатки на конец периодов и документов в ней нет. Для анализа операций нужна таблица движений, итоги платформа использует для ускорения отчётов.

Безопасно ли читать данные регистров напрямую запросами к SQL?

Чтение (SELECT) обычно не повреждает данные, но создаёт нагрузку и может конфликтовать с блокировками платформы. Для регулярных интеграций надёжнее использовать штатные механизмы: OData, HTTP-сервисы, планы обмена. Прямое чтение допустимо как разовая аналитическая мера на копии базы или в часы минимальной нагрузки.

Что делать, если таблица регистра занимает слишком много места?

Сначала убедитесь, что это действительно таблица движений, а не журналы или служебные объекты. Затем применяйте штатные методы: свёртку базы с переносом остатков на дату, архивацию старых периодов, пересмотр состава измерений регистра. Удалять строки из таблицы средствами СУБД нельзя — это разрушит согласованность итогов.

Где посмотреть соответствие полей таблицы измерениям регистра?

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

Итог

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

Регистры 1С хранятся в таблицах базы данных: в файловой базе — внутри 1Cv8.1CD, в клиент-серверной — в таблицах СУБД с префиксами _InfoReg, _AccumReg и подобными. Сопоставление регистра и таблицы смотрят через структуру хранения базы данных. Читать данные безопасно штатными средствами платформы, а прямая запись в таблицы регистров в обход платформы недопустима.