Базы данных в 1С:Предприятие — это основа, от которой зависит скорость работы, стабильность и возможности масштабирования системы. Без понимания их устройства сложно эффективно администрировать платформу, оптимизировать запросы или устранять ошибки. В этой статье разберём внутреннюю структуру баз данных 1С: от простой файловой модели до распределённых SQL-кластеров, а также выясним, как платформа взаимодействует с СУБД и почему некоторые операции занимают так много времени.
Многие ошибочно думают, что база 1С — это просто набор таблиц в Microsoft SQL Server или PostgreSQL. На самом деле платформа добавляет свой слой абстракции, который кардинально меняет логику хранения данных. Например, объекты метаданных (справочники, документы) физически хранятся не так, как их видит пользователь в конфигураторе. Это приводит к неожиданным последствиям: от медленных отчётов до блокировок при параллельной работе. Далее — подробности с примерами и практическими советами.
Чтобы не запутаться в терминах, сразу уточним: когда речь идёт о "базе данных 1С", имеется в виду две вещи:
1) Логическая структура — как данные организованы в метаданных платформы (справочники, регистры, документы).
2) Физическое хранение — как эти данные реально записываются на диск (файлы .1CD, таблицы SQL, индексы).
1. Файловая база данных: как устроен формат 1CD
Файловая модель — самый простой вариант развёртывания 1С, который не требует отдельного сервера СУБД. Все данные хранятся в одном бинарном файле с расширением .1CD (ранее — .1CD для версий 7.7 и .DT для 8.0). Этот файл представляет собой контейнер, внутри которого платформа организует собственную файловую систему с таблицами, индексами и служебной информацией.
Главная особенность файловой базы — монопольный доступ. Платформа блокирует файл на время работы, поэтому одновременно с базой может взаимодействовать только один пользователь (или сеанс). Это ограничение делает файловую модель непригодной для многопользовательских систем, но идеальной для:
- 🔹 Локальных установок (например, 1С:Бухгалтерия на ноутбуке главного бухгалтера).
- 🔹 Тестовых и обучающих конфигураций.
- 🔹 Резервных копий (файл легко архивировать и восстанавливать).
Внутри .1CD платформа хранит данные в страницах фиксированного размера (обычно 4 КБ). Каждая страница может содержать:
- Табличные данные (аналог строк в SQL).
- Индексы (для ускорения поиска).
- Служебную информацию (версии объектов, журнал транзакций).
Важно: файловая база не поддерживает транзакции в привычном понимании. Все изменения фиксируются сразу, и откатить их можно только через резервную копию. Это отличает её от клиент-серверных баз, где используется полноценный механизм ACID-транзакций.
При повреждении файла Что будет если файл 1CD повреждён?
.1CD (например, из-за сбоя питания) платформа может не открыть базу или потерять часть данных. Восстановление возможно через утилиту chdbfl.exe (входит в дистрибутив 1С), но гарантии 100% восстановления нет. Рекомендуется регулярно создавать резервные копии и проверять целостность файла командой chdbfl.exe /F [путь_к_файлу] /C.
2. Клиент-серверная архитектура: как 1С работает с SQL
Для многопользовательских систем используется клиент-серверная модель, где данные хранятся в внешней СУБД: Microsoft SQL Server, PostgreSQL или IBM DB2. В этом случае платформа 1С выступает посредником между пользователем и базой данных, преобразуя объекты метаданных (справочники, документы) в реляционные таблицы.
Основные компоненты клиент-серверной архитектуры:
- 🖥️ Сервер 1С:Предприятия — обрабатывает бизнес-логику и формирует SQL-запросы.
- 🗃️ СУБД — хранит данные и выполняет запросы (например, MS SQL Server).
- 💻 Клиентские приложения — тонкий/толстый клиент, веб-интерфейс.
Когда пользователь открывает справочник или формирует отчёт, происходит следующее:
1. Клиент отправляет запрос на сервер 1С.
2. Сервер преобразует запрос в SQL-код (например, SELECT * FROM _Reference123 WHERE...).
3. СУБД выполняет запрос и возвращает результат.
4. Сервер 1С обрабатывает данные и отправляет их клиенту.
Критическая особенность: платформа 1С не использует прямые SQL-запросы от клиента к базе. Все взаимодействия проходят через сервер 1С, что добавляет накладные расходы, но обеспечивает безопасность и абстракцию от структуры хранения.
Чтобы увидеть реальные SQL-запросы, которые генерирует 1С, включите журнал регистрации на сервере 1С или используйте профилировщик в SQL Server Management Studio. Это поможет найти "тяжёлые" запросы и оптимизировать их.
3. Физическая структура: таблицы, индексы и служебные объекты
Независимо от типа базы (файловая или SQL), платформа 1С хранит данные в виртуальных таблицах, которые делятся на несколько категорий:
1. Таблицы объектов — хранят данные справочников, документов, планов видов характеристик (ПВХ). Например:
- _Document123 — таблица для документа с идентификатором 123.
- _Reference456 — таблица для справочника.
2. Таблицы регистров — содержат записи регистров накопления, бухгалтерии, расчётов. Примеры:
- _AccumRg123 — регистр накопления.
- _AccountingRg456 — регистр бухгалтерии.
3. Служебные таблицы — управляют версиями, блокировками, правами доступа:
- _1SJourn — журнал регистрации.
- _Subsys — подсистемы конфигурации.
- _Users — пользователи и их права.
Каждая таблица имеет первичный ключ (обычно поле _IDRRef для ссылок или _ID для числовых идентификаторов) и индексы для ускорения поиска. Например, в справочниках индексируются поля _Description (наименование) и _Code (код).
⚠️ Внимание: Платформа 1С автоматически создаёт индексы для полей, помеченных в конфигураторе как "индексируемые". Однако избыточные индексы могут замедлить запись данных, особенно в регистрах с высокой частотой изменений (например, регистры накопления остатков). Проверяйте их актуальность черезSQL Server Management StudioилиpgAdmin.
Пример структуры таблицы справочника в MS SQL Server:
| Поле | Тип данных | Описание |
|---|---|---|
_IDRRef |
binary(16) | Уникальный идентификатор ссылки (GUID). |
_Description |
nvarchar(150) | Наименование элемента справочника. |
_Code |
nvarchar(20) | Код элемента (индексируется). |
_Marked |
bit | Пометка на удаление. |
_ParentIDRRef |
binary(16) | Ссылка на родительский элемент (для иерархических справочников). |
4. Транзакции и блокировки: почему 1С иногда "зависает"
В клиент-серверных базах 1С использует транзакции для обеспечения целостности данных. Каждая операция (например, проведение документа) запускается в отдельной транзакции, которая либо фиксируется (commit), либо откатывается (rollback) при ошибке.
Проблемы начинаются, когда транзакции блокируют друг друга. Например:
- Пользователь 1 начал проводить документ и заблокировал записи в регистре накопления.
- Пользователь 2 пытается провести другой документ, который тоже меняет этот регистр.
- В результате второй пользователь ждёт, пока первый завершит транзакцию (или наоборот).
Типичные причины долгих блокировок:
- 🔄 Длинные транзакции — когда пользователь надолго оставляет документ открытым в режиме редактирования.
- 📊 Массовые операции — групповой пересчёт итогов или обнуление остатков.
- 🔌 Сетевые задержки — медленное соединение между сервером 1С и СУБД.
⚠️ Внимание: В файловой базе блокировки работают иначе — весь файл блокируется на время записи. Если два пользователя попытаются одновременно сохранить данные, один из них получит ошибку "Файл заблокирован другим пользователем". Это одна из причин, почему файловую базу не рекомендуется использовать в сетях.
Разбивать массовые операции на пакеты|Использовать фоновые задания|Ограничивать время редактирования документов|Настраивать уровни изоляции транзакций в СУБД-->
5. Оптимизация производительности: индексы, запросы и аппаратные ресурсы
Медленная работа 1С часто связана не с самой платформой, а с неоптимальной структурой базы данных. Вот ключевые направления для ускорения:
1. Индексы
- Платформа автоматически создаёт индексы для полей, помеченных как "индексируемые" в конфигураторе.
- Проблема: избыточные индексы замедляют запись (при каждом изменении данных СУБД обновляет все индексы).
- Решение: удаляйте ненужные индексы через SQL Server Management Studio или настройте их в конфигураторе.
2. Запросы
- Избегайте конструкций вида ВЫБРАТЬ * — они загружают все поля таблицы, даже ненужные.
- Используйте ИНДЕКСИРОВАТЬ ПО для ускорения соединений (join).
- Пример оптимизированного запроса:
ВЫБРАТЬ
Справочник1.Ссылка КАК Ссылка,
Справочник1.Наименование КАК Наименование
ИЗ
Справочник.Справочник1 КАК Справочник1
ГДЕ
Справочник1.ПометкаУдаления = ЛОЖЬ
ИНДЕКСИРОВАТЬ ПО Наименование
3. Аппаратные ресурсы
- Для SQL-баз критичен объём оперативной памяти (рекомендуется не менее 16 ГБ для 10+ пользователей).
- Дисковая подсистема: используйте SSD или RAID-массивы для хранения базы. Медленные HDD могут стать "бутылочным горлышком".
- Сеть: задержки между сервером 1С и СУБД должны быть минимальны (идеально — менее 1 мс).
Самая частая причина тормозов — отсутствие индексов на полях, по которым идут выборки в отчётах. Проверьте планы выполнения запросов в СУБД!
6. Резервное копирование и восстановление
Резервные копии в 1С можно создавать несколькими способами, в зависимости от типа базы:
Файловая база (.1CD):
- Просто копируйте файл .1CD в безопасное место (например, облако или внешний диск).
- Для проверки целостности используйте утилиту chdbfl.exe:
chdbfl.exe /F "C:\Bases\MyBase.1CD" /C
- Важно: копирование должно выполняться, когда база не используется (иначе файл может быть повреждён).
Клиент-серверная база (SQL):
- Используйте стандартные средства СУБД:
- В MS SQL Server: BACKUP DATABASE.
- В PostgreSQL: pg_dump.
- Для 1С также доступна утилита 1cv8.exe с ключом /DumpIB:
1cv8.exe CONFIG /DumpIB "C:\Backup\mybase.dt" /Out "C:\log.txt"
Облачные базы (1C:Fresh):
- Резервирование выполняется автоматически провайдером, но вы можете создавать точки восстановления вручную через личный кабинет.
⚠️ Внимание: При восстановлении базы из резервной копии проверьте версию платформы 1С. Если копия создана в более новой версии, чем текущая, восстановление может завершиться ошибкой. Используйте команду 1cv8.exe /Version для проверки совместимости.
Если файл Если это не поможет, обратитесь в поддержку 1С с логом ошибок.Что делать если резервная копия повреждена?
.dt или .1CD повреждён, попробуйте восстановить его через утилиту 1cv8.exe с ключом /RestoreIB и параметром /TestAndRepair. Например:1cv8.exe CONFIG /RestoreIB "C:\Backup\corrupted.dt" /TestAndRepair /Out "C:\repair_log.txt"
7. Особенности работы с большими базами данных
Если объём базы превышает 10 ГБ, возникают специфические проблемы:
- Длинные транзакции — операции занимают минуты вместо секунд.
- Фрагментация данных — таблицы и индексы "разрослись" и требуют дефрагментации.
- Ограничения СУБД — например, в MS SQL Server лимит на размер строки (8060 байт), что может привести к ошибкам при работе с большими текстами.
Рекомендации для крупных баз:
- 📦 Архивирование данных — переносите старые документы в отдельные архивные базы.
- 🔧 Регулярная дефрагментация — используйте
REINDEX(SQL Server) илиVACUUM FULL(PostgreSQL). - 📊 Разделение на логические части — например, вынесите расчёты зарплаты в отдельную базу.
Пример команды дефрагментации для MS SQL Server:
ALTER INDEX ALL ON Справочник.Номенклатура REBUILD;
SELECT
DB_NAME(database_id) AS DatabaseName,
CAST(SUM(size * 8.0 / 1024) AS DECIMAL(10,2)) AS SizeMB
FROM sys.master_files
WHERE type_desc = 'ROWS'
GROUP BY database_id;
Это поможет вовремя заметить "раздувание" базы.-->
FAQ: Частые вопросы о базах данных 1С
Можно ли перенести файловую базу 1С в SQL без потери данных?
Да, для этого используйте утилиту 1cv8.exe с ключом /ConvertDB. Пример команды:
1cv8.exe CONFIG /ConvertDB "C:\Base\filebase.1CD" /SQLServer "SERVER\INSTANCE" /SQLDB "NewDatabaseName" /SQLUser "sa" /SQLPwd "password"
Важно: перед конвертацией создайте резервную копию файловой базы и проверьте совместимость версий платформы.
Почему после обновления конфигурации база стала работать медленнее?
Причины могут быть разные:
- 🔹 Добавлены новые индексы, которые замедлили запись.
- 🔹 Изменилась структура таблиц (например, добавлены поля с большим объёмом данных).
- 🔹 Обновились алгоритмы расчётов (например, в регистрах накопления).
Проверьте журнал регистрации на сервере 1С и проанализируйте медленные запросы через профилировщик СУБД.
Как узнать, какая СУБД используется в моей базе 1С?
Откройте конфигуратор, перейдите в меню Справка → О программе. В разделе Информация о базе данных будет указан тип СУБД (например, "Microsoft SQL Server 2019").
Также можно выполнить запрос в 1С:
Сообщить(ТипСервераБД());
Функция вернёт строку вида "MSSQLServer" или "PostgreSQL".
Что такое "разделение данных" в 1С и зачем оно нужно?
Разделение данных — это механизм, позволяющий хранить часть информации (например, документы за прошлые годы) в отдельной базе, а текущие данные — в основной. Это уменьшает размер рабочей базы и ускоряет её работу.
Реализуется через:
- 🔹 Архивные базы — перенос старых данных в отдельный файл.
- 🔹 Распределённые информационные базы (РИБ) — синхронизация между несколькими базами.
Можно ли подключиться к базе 1С напрямую через SQL?
Технически да, но это крайне не рекомендуется. Платформа 1С использует собственную логику хранения данных, и прямые изменения в таблицах могут привести к:
- 🔹 Нарушению целостности ссылок (например, "битые" ссылки на несуществующие объекты).
- 🔹 Потере данных при следующем обновлении конфигурации.
- 🔹 Ошибкам при проверке базы (
Тестирование и исправление).
Если нужно массово изменить данные, используйте внешние обработки или загрузку через XML/JSON.