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

В зависимости от режима работы (файловый или клиент-серверный) и типа используемой СУБД (Microsoft SQL Server, PostgreSQL, IBM DB2 или встроенная 1С:SQLite), структура хранения регистров кардинально отличается. В этой статье мы разберем все варианты, включая низкоуровневые механизмы, способы диагностики и типичные ошибки, связанные с работой регистров.

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

📊 Какой тип базы 1С вы используете?
Файловая
Microsoft SQL Server
PostgreSQL
IBM DB2
Не знаю

1. Регистры в файловом режиме: структура каталога 1Cv8

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

Каталог файловой базы typically выглядит так:


[Каталог базы]

├── 1Cv8.1CD # Основной файл данных (включает регистры)

├── 1Cv8.1CD.jrn # Журнал транзакций (если включен)

├── 1Cv8Log # Логи работы (опционально)

└── 1cv8.dt # Временные файлы (при обновлениях)

Важно понимать, что в файловом режиме нет прямого доступа к данным регистров через внешние инструменты (например, SQL-клиенты). Все операции выполняются через механизмы платформы 1С. Однако при повреждении базы можно использовать утилиту chdbfl.exe (входит в комплект поставки 1С) для проверки целостности файла 1Cv8.1CD.

⚠️

Внимание! Резервное копирование файловой базы должно выполняться только при остановленной работе пользователей. Копирование "на лету" приведет к повреждению данных, так как файл 1Cv8.1CD блокируется платформой на запись.
💡

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

2. Клиент-серверный режим: таблицы регистров в СУБД

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

Для Microsoft SQL Server и PostgreSQL:

  • 📌 _AccumRg{ИД_регистра} — таблица движений регистра накопления
  • 📌 _AccumRg{ИД_регистра}_VT{ИД_вида_движения} — виртуальные таблицы для отчетов
  • 📌 _InfoRg{ИД_регистра} — таблица регистра сведений
  • 📌 _Balance{ИД_регистра} — таблица остатков регистра бухгалтерии

Пример реальных таблиц в базе:


-- Регистр накопления "ТоварыНаСкладах"

_AccumRg12345 -- Движения

_AccumRg12345_VT811 -- Виртуальная таблица остатков

_AccumRg12345_VT812 -- Виртуальная таблица оборотов

-- Регистр сведений "ЦеныНоменклатуры"

_InfoRg67890 -- Основная таблица

⚠️

Внимание! Не рекомендуется вручную редактировать таблицы регистров в СУБД без остановки кластера 1С. Это может привести к рассинхронизации данных и ошибкам типа "Нарушена структура информационной базы". Для изменений используйте штатные механизмы платформы или утилиту v8unpack.

3. Как найти ИД регистра для поиска таблиц в СУБД

Чтобы сопоставить регистр в конфигураторе с его таблицей в СУБД, нужно узнать внутренний идентификатор (ИД) объекта. Сделать это можно несколькими способами:

Способ 1. Через конфигуратор:

  1. Откройте конфигурацию в режиме Конфигуратор.
  2. Найдите нужный регистр в дереве объектов.
  3. Кликните правой кнопкой → Скопировать имя (будет скопирован UUID объекта).
  4. Или используйте Файл → Открыть → Конфигурацию в текстовом виде и найдите строку с <Name>ИмяРегистра</Name> — рядом будет <Id>{UUID}</Id>.

Способ 2. Через запросы к системным таблицам:


-- Для Microsoft SQL Server

SELECT * FROM _ObjMetadata WHERE Name LIKE '%ТоварыНаСкладах%'

-- Для PostgreSQL

SELECT * FROM "_objmetadata" WHERE "name" ILIKE '%товарынаскладах%';

Способ 3. Через журнал регистрации (если включен):

  • 🔍 В файле 1Cv8Log\rr.log найдите записи о создании таблиц для регистра.
  • 🔍 В SQL Server Profiler или pgAdmin отследите запросы типа CREATE TABLE _AccumRg....

Найти регистр в дереве конфигурации

Скопировать UUID через контекстное меню

Проверить системные таблицы _ObjMetadata

Использовать журнал регистрации (rr.log)

Сопоставить ИД с таблицами в СУБД-->

4. Особенности хранения регистров в разных СУБД

Каждая поддерживаемая 1С система управления базами данных имеет свои нюансы организации хранения регистров. Это влияет на производительность, возможности резервного копирования и восстановления.

СУБД Формат таблиц регистров Особенности индексирования Инструменты диагностики
Microsoft SQL Server Таблицы с префиксами _AccumRg, _InfoRg Автоматические кластерные индексы по измерениям. Поддерживает INCLUDE для покрывающих индексов. SQL Server Profiler, sp_who2, DMV
PostgreSQL Таблицы в схеме public, имена в нижнем регистре (_accumrg12345) Индексы типа BRIN для больших регистров. Поддерживает PARTIAL INDEX. pg_stat_activity, EXPLAIN ANALYZE, pgBadger
IBM DB2 Таблицы с префиксами, имена в верхнем регистре (_ACCUMRG12345) Использует MDC (Multidimensional Clustering) для оптимизации. db2top, db2exfmt, SNAPSHOT
1С:SQLite (встроенная) Единый файл 1Cv8.1CD, таблицы внутри бинарной структуры Индексы хранятся в том же файле, нет отдельных инструментов управления. chdbfl.exe, 1Cv8.dt (временные файлы)

⚠️

Внимание! В PostgreSQL при большом количестве регистров может возникать проблема с autovacuum — процесс очистки "мертвых" строк. Если базу не обслуживать, таблицы регистров раздуваются, что приводит к замедлению запросов. Решение: настройка параметров autovacuum_vacuum_scale_factor и autovacuum_analyze_scale_factor в postgresql.conf.

5. Виртуальные таблицы регистров: как они работают

Платформа 1С использует виртуальные таблицы для ускорения работы с регистрами в отчетах и запросах. Эти таблицы не хранят данные физически, а формируются "на лету" на основе движений регистров. Их имена содержат суффикс _VT (например, _AccumRg12345_VT811).

Основные типы виртуальных таблиц:

  • 📊 VT811Остатки (текущие значения на дату)
  • 📈 VT812Обороты (движения за период)
  • 📉 VT813Остатки и обороты (комбинированная)
  • 🔄 VT820Последние значения (для регистров сведений)

Пример запроса к виртуальной таблице:


ВЫБРАТЬ

Товар,

СуммаОстаток

ИЗ

РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОтчета, )

В СУБД этот запрос преобразуется в SQL-конструкцию с joins к таблицам движений (_AccumRg...) и агрегацией данных. Важно: виртуальные таблицы не оптимизированы для выборки больших объемов данных — при работе с миллионами записей лучше использовать прямые запросы к таблицам движений с явной фильтрацией.

Как ускорить работу с виртуальными таблицами?

Для регистров с большим объемом данных (более 1 млн записей) виртуальные таблицы могут тормозить. Альтернативные подходы:

1. Прямые SQL-запросы к таблицам движений с явной агрегацией (только для опытных пользователей).

2. Предварительная выгрузка данных в временные таблицы через механизм ВременныеТаблицы.

3. Настройка индексов в СУБД на поля, используемые в отчетах (например, по измерению "Номенклатура").

4. Использование материализованных представлений (в PostgreSQL) для кэширования результатов.

6. Типичные проблемы с регистрами и их решение

Работа с регистрами часто сопровождается ошибками, связанными с повреждением данных, медленными запросами или блокировками. Рассмотрим наиболее распространенные случаи и способы их устранения.

🔧 Проблема 1: Медленная работа отчетов по регистрам

  • 🛠️ Причина: Отсутствие индексов на измерения регистра или неоптимизированные запросы.
  • 🛠️ Решение: Проверить план выполнения запроса в СУБД (например, через EXPLAIN ANALYZE в PostgreSQL). Добавить индексы на часто используемые поля.

🔧 Проблема 2: Ошибка "Нарушена структура информационной базы"

  • 🛠️ Причина: Повреждение таблиц регистров в СУБД (например, после аварийного завершения работы).
  • 🛠️ Решение: Выполнить Тестирование и исправление через конфигуратор. При серьезных повреждениях — восстановить базу из резервной копии.

🔧 Проблема 3: Блокировки при записи в регистры

  • 🛠️ Причина: Длительные транзакции или конфликты блокировок между пользователями.
  • 🛠️ Решение: Настроить уровень изоляции транзакций в СУБД (например, READ COMMITTED вместо SERIALIZABLE). Использовать механизм ПометитьДляУдаления вместо прямого удаления записей.

🔧 Проблема 4: Раздувание таблиц регистров

  • 🛠️ Причина: Накопление "мертвых" строк после массовых изменений (особенно актуально для PostgreSQL).
  • 🛠️ Решение: Регулярно выполнять VACUUM FULL (PostgreSQL) или REINDEX (SQL Server).
💡

Самая частая причина медленной работы регистров — отсутствие индексов на измерения, по которым идет фильтрация в отчетах. Всегда проверяйте план выполнения запроса перед оптимизацией!

7. Резервное копирование и восстановление регистров

Резервное копирование регистров не отличается от резервирования всей базы, но есть нюансы, связанные с их структурой:

💾 Файловый режим:

  • 📁 Копируйте весь каталог базы, включая 1Cv8.1CD и 1Cv8.1CD.jrn.
  • ⏹️ Обязательно останавливайте работу пользователей или используйте Конфигуратор → Администрирование → Выгрузить информационную базу.

💾 Клиент-серверный режим:

  • 🗃️ Для SQL Server: используйте BACKUP DATABASE или утилиту 1Cv8.sql (скрипт резервного копирования от 1С).
  • 🐘 Для PostgreSQL: pg_dump или pg_basebackup (для больших баз).
  • 🔄 Для восстановления отдельного регистра можно использовать UNLOAD/LOAD данных через 1С:Конвертация данных.

⚠️

Внимание! При восстановлении базы из резервной копии в PostgreSQL может потребоваться сброс последовательностей (sequences) для регистров с автонумерацией. Используйте запрос:

SELECT setval('"_accumrg12345_lineid_seq"', (SELECT MAX("LineNumber") FROM "_accumrg12345"));

8. Практические советы по работе с регистрами

Совет 1: Мониторинг размера таблиц

Регулярно проверяйте размер таблиц регистров в СУБД. В SQL Server используйте запрос:


SELECT

t.NAME AS TableName,

s.Name AS SchemaName,

p.rows AS RowCounts,

SUM(a.total_pages) * 8 AS TotalSpaceKB

FROM

sys.tables t

INNER JOIN

sys.indexes i ON t.OBJECT_ID = i.object_id

INNER JOIN

sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id

INNER JOIN

sys.allocation_units a ON p.partition_id = a.container_id

LEFT OUTER JOIN

sys.schemas s ON t.schema_id = s.schema_id

WHERE

t.NAME LIKE '_AccumRg%' OR t.NAME LIKE '_InfoRg%'

GROUP BY

t.Name, s.Name, p.Rows

ORDER BY

TotalSpaceKB DESC;

Совет 2: Оптимизация запросов

Избегайте конструкций вида ВЫБРАТЬ ПЕРВЫЕ 1000 для регистров с миллионами записей. Вместо этого используйте:


ВЫБРАТЬ

ТоварыНаСкладах.Товар КАК Товар,

ТоварыНаСкладах.КоличествоОстаток КАК Остаток

ИЗ

РегистрНакопления.ТоварыНаСкладах.Остатки(&ТекущаяДата, ) КАК ТоварыНаСкладах

ГДЕ

ТоварыНаСкладах.Товар В (

ВЫБРАТЬ ПЕРВЫЕ 1000

Номенклатура.Ссылка

ИЗ

Справочник.Номенклатура КАК Номенклатура

)

Совет 3: Архивирование старых данных

Для регистров с историей более 3–5 лет настройте архивные регистры или перенесите старые данные в отдельную базу. Это уменьшит нагрузку на основную систему.

💡

Для анализа производительности регистров в SQL Server используйте отчет "Missing Indexes" в Management Studio. Он покажет, какие индексы стоит добавить для ускорения часто выполняемых запросов.

FAQ: Частые вопросы о хранении регистров 1С

Можно ли вручную редактировать таблицы регистров в SQL?

Технически да, но это крайне не рекомендуется. Платформа 1С контролирует целостность данных через служебные таблицы (например, _1SJourn для журналов транзакций). Любые прямые изменения могут привести к рассинхронизации и ошибкам типа "Нарушена структура информационной базы". Для исправлений используйте штатные механизмы: Тестирование и исправление, Загрузка данных через Конвертацию данных или 1С:ERP.

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

В SQL Server выполните запрос:


SELECT TOP 10

t.NAME AS TableName,

SUM(a.total_pages) * 8 AS TotalSpaceKB

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

WHERE t.NAME LIKE '_AccumRg%' OR t.NAME LIKE '_InfoRg%'

GROUP BY t.Name

ORDER BY TotalSpaceKB DESC;

Для PostgreSQL используйте:


SELECT table_name,

pg_size_pretty(pg_total_relation_size(table_name)) AS size

FROM information_schema.tables

WHERE table_name LIKE '_accumrg%' OR table_name LIKE '_inforg%'

ORDER BY pg_total_relation_size(table_name) DESC;

Что делать, если регистр поврежден и не открывается?

Порядок действий:

  1. Сделайте резервную копию базы (даже в поврежденном состоянии).
  2. Запустите Тестирование и исправление в конфигураторе с флагом "Проверять логическую целостность".
  3. Если ошибка осталась, попробуйте выгрузить данные через Конвертацию данных в новую базу.
  4. Для критических случаев обратитесь в поддержку 1С с логами (1Cv8Log\rr.log).

Можно ли перенести регистр из одной базы в другую?

Да, для этого используйте:

  • 📤 Выгрузка/загрузка данных через Конвертацию данных (для частичного переноса).
  • 📥 Обмен через XML (для небольших объемов).
  • 🔄 Репликация на уровне СУБД (для полного переноса всей базы).

Для регистров с большим объемом данных (более 100 тыс. записей) рекомендуется использовать 1С:Конвертацию данных с настройкой правил соответствия.

Почему после обновления 1С перестали работать отчеты по регистрам?

Частые причины:

  • 🔧 Изменилась структура регистра (добавились/удалились измерения или ресурсы).
  • 🔧 Не обновлены виртуальные таблицы — требуется пересоздать их через Конфигуратор → Администрирование → Обновить конфигурацию базы данных.
  • 🔧 Конфликт версий — если отчет разрабатывался под старую версию платформы.

Решение: проверьте журнал обновления (1Cv8Log\update.log) на наличие ошибок и выполните полное обновление конфигурации.