Регистры в 1С:Предприятие — это ключевые объекты конфигурации, отвечающие за хранение и обработку данных о движениях, остатках и накоплениях. Их правильная организация напрямую влияет на производительность системы, скорость формирования отчетов и стабильность работы базы. Однако многие администраторы и разработчики сталкиваются с вопросом: где именно физически хранятся эти регистры и как к ним можно получить доступ?
В зависимости от режима работы (файловый или клиент-серверный) и типа используемой СУБД (Microsoft SQL Server, PostgreSQL, IBM DB2 или встроенная 1С:SQLite), структура хранения регистров кардинально отличается. В этой статье мы разберем все варианты, включая низкоуровневые механизмы, способы диагностики и типичные ошибки, связанные с работой регистров.
Особое внимание уделим скрытым таблицам СУБД, которые 1С создает автоматически для каждого регистра — их названия, связи и особенности индексирования часто становятся ключом к оптимизации медленных запросов или восстановлению данных после сбоев.
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. Через конфигуратор:
- Откройте конфигурацию в режиме
Конфигуратор. - Найдите нужный регистр в дереве объектов.
- Кликните правой кнопкой →
Скопировать имя(будет скопирован UUID объекта). - Или используйте
Файл → Открыть → Конфигурацию в текстовом видеи найдите строку с<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 к таблицам движений (
Для регистров с большим объемом данных (более 1 млн записей) виртуальные таблицы могут тормозить. Альтернативные подходы: 1. Прямые SQL-запросы к таблицам движений с явной агрегацией (только для опытных пользователей). 2. Предварительная выгрузка данных в временные таблицы через механизм 3. Настройка индексов в СУБД на поля, используемые в отчетах (например, по измерению "Номенклатура"). 4. Использование материализованных представлений (в PostgreSQL) для кэширования результатов._AccumRg...) и агрегацией данных. Важно: виртуальные таблицы не оптимизированы для выборки больших объемов данных — при работе с миллионами записей лучше использовать прямые запросы к таблицам движений с явной фильтрацией.
Как ускорить работу с виртуальными таблицами?
ВременныеТаблицы.
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С с логами (
1Cv8Log\rr.log).
Можно ли перенести регистр из одной базы в другую?
Да, для этого используйте:
- 📤 Выгрузка/загрузка данных через Конвертацию данных (для частичного переноса).
- 📥 Обмен через XML (для небольших объемов).
- 🔄 Репликация на уровне СУБД (для полного переноса всей базы).
Для регистров с большим объемом данных (более 100 тыс. записей) рекомендуется использовать 1С:Конвертацию данных с настройкой правил соответствия.
Почему после обновления 1С перестали работать отчеты по регистрам?
Частые причины:
- 🔧 Изменилась структура регистра (добавились/удалились измерения или ресурсы).
- 🔧 Не обновлены виртуальные таблицы — требуется пересоздать их через
Конфигуратор → Администрирование → Обновить конфигурацию базы данных. - 🔧 Конфликт версий — если отчет разрабатывался под старую версию платформы.
Решение: проверьте журнал обновления (1Cv8Log\update.log) на наличие ошибок и выполните полное обновление конфигурации.