Что происходит внутри информационной базы 1С 8.3
Содержание
База данных 1С 8.3 — это набор обычных таблиц, которые платформа сама создаёт по метаданным конфигурации. Каждый справочник, документ, регистр и табличная часть превращаются в отдельную таблицу. Хранятся эти таблицы либо в одном файле 1Cv8.1CD (файловый вариант), либо в СУБД — MS SQL Server, PostgreSQL, IBM Db2 или Oracle (клиент-серверный вариант).
Структура одна и та же в обоих случаях, меняются особенности: как работают блокировки, как делать резервную копию, где искать причину тормозов. Если понимать эти слои, проще найти, где именно база теряет скорость или данные. Материал общий для платформы и не зависит от конфигурации: БП, ЗУП и УТ хранят данные одинаково.
Файловая и клиент-серверная база 1С: где физически лежат данные
Файловый вариант
Вся база — один файл 1Cv8.1CD в каталоге информационной базы. Внутри него собственный формат платформы: и данные, и сама конфигурация, и служебные таблицы. Рядом лежат:
- 📄 файл блокировки
1Cv8.cdn— появляется, пока с базой кто-то работает; - 📁 каталог
1Cv8Log— журнал регистрации; - 📁 временные файлы сеансов.
Работает это просто: каждый клиент сам открывает файл по сети и читает его. Отдельного сервера нет. Отсюда главные ограничения — сеть и диск становятся узким местом, а запись идёт с блокировкой целых таблиц.
Клиент-серверный вариант
Здесь участвуют три звена:
- Клиент — тонкий клиент, толстый клиент или браузер.
- Кластер серверов
1С — процессы
ragent(агент, порт 1540),rmngr(менеджер кластера, порт 1541) иrphost(рабочие процессы, диапазон портов задаётся в свойствах рабочего сервера, по умолчанию 1560–1591). - СУБД — хранит таблицы и выполняет SQL-запросы.
Клиент никогда не обращается к СУБД напрямую. Он передаёт код и запросы серверу 1С, а тот переводит запрос на языке 1С в SQL нужного диалекта.
Чем варианты отличаются на практике
| Параметр | Файловая | Клиент-серверная |
|---|---|---|
| Где данные | один файл 1Cv8.1CD | таблицы в СУБД |
| Пользователей комфортно | до 5–10 | десятки и сотни |
| Блокировки при записи | на всю таблицу | на уровне записей |
| Резервная копия | копия файла или .dt | средствами СУБД или .dt |
| Обслуживание | chdbfl.exe, тестирование и исправление | регламенты СУБД |
| Стоимость | только клиентские лицензии | плюс лицензия сервера 1С и, при MS SQL, СУБД |
PostgreSQL в сборке для 1С бесплатен. Это частый выбор, когда файловая база выросла, а на MS SQL нет бюджета.
Как метаданные превращаются в таблицы СУБД
Если открыть базу в SQL Server Management Studio или pgAdmin, привычных названий «Контрагенты» или «РеализацияТоваровУслуг» там не будет. Таблицы и поля имеют служебные имена с номерами.
Как называются таблицы
| Объект метаданных | Таблица в СУБД |
|---|---|
| Справочник | _Reference123 |
| Документ | _Document456 |
| Табличная часть документа | _Document456_VT789 |
| Регистр сведений | _InfoRg100 |
| Регистр накопления | _AccumRg200 и таблицы итогов _AccumRgT… |
| Регистр бухгалтерии | _AccRg300 и таблицы итогов |
| Перечисление | _Enum50 |
| Константа | _Const10 |
Поля называются _Fld1234. Стандартные реквизиты имеют говорящие имена: _IDRRef (ссылка), _Version, _Marked (пометка удаления), _Code, _Description, _Number, _Date_Time, _Posted.
Как узнать, какая таблица чья
Номера назначаются при реструктуризации и в разных базах отличаются. Соответствие возвращает метод глобального контекста ПолучитьСтруктуруХраненияБазыДанных(). Его можно выполнить в любой внешней обработке на сервере:
Структура = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
Для Каждого Строка Из Структура Цикл
Сообщить(Строка.Метаданные + " → " + Строка.ИмяТаблицыХранения);
КонецЦикла;
Второй параметр Истина возвращает имена таблиц и полей в терминах СУБД. Без него — в терминах платформы.
Как хранятся ссылки и даты
- 🔑 Ссылка на объект — 16-байтный уникальный идентификатор (
binary(16)в MS SQL). Поэтому ссылки не повторяются между базами и переживают выгрузку-загрузку. - 📅 Даты в MS SQL могут храниться со смещением 2000 лет. Этот параметр выбирают при создании базы на сервере. Если вы читаете таблицы внешними средствами и видите 4026 год вместо 2026, дело в смещении.
- 🧩 Составной тип реквизита превращается в несколько полей: признак типа, номер таблицы и само значение.
Помимо таблиц данных, в базе есть служебные: Config (конфигурация базы данных), ConfigSave (основная конфигурация, ещё не применённая), Params, Files, DBSchema. В них не нужно ничего менять руками.
Не меняйте данные базы 1С прямыми SQL-запросами. Платформа не узнает об изменениях: сломаются итоги регистров, версии объектов и обмены. Чтение внешними средствами допустимо, запись — только через 1С.
Транзакции и блокировки: откуда берутся ожидания
Любая запись в 1С идёт в транзакции. Проведение документа — это одна транзакция: запись шапки, табличных частей, движений по всем регистрам. Если что-то упало, откатывается всё целиком.
Автоматический и управляемый режим
- 🔒 Автоматический режим — блокировки ставит СУБД. Под нагрузкой они легко расширяются до страниц и таблиц.
- 🎯 Управляемый режим — блокировки ставит менеджер блокировок сервера 1С по конкретным значениям измерений. СУБД при этом работает с меньшим уровнем изоляции. Все современные типовые конфигурации используют именно его.
Режим задаётся в свойствах конфигурации, свойство «Режим управления блокировкой данных».
Почему 1С «тормозит» из-за блокировок
Два пользователя проводят документы, которые пишут в одни и те же строки регистра. Второй ждёт, пока первый закончит транзакцию. Если ожидание длится дольше таймаута, появляется ошибка:
Превышено максимальное время ожидания предоставления блокировки
Взаимоблокировка выглядит иначе — сервер выбирает «жертву» и откатывает её транзакцию:
Конфликт блокировок при выполнении транзакции
Типичные причины:
- 🐢 долгое проведение — в транзакции выполняются тяжёлые запросы;
- 📦 массовые операции в рабочее время: перепроведение, закрытие месяца , загрузка обменов;
- 🧮 все документы пишут в одну и ту же строку итогов.
У регистров накопления и бухгалтерии есть свойство «Разрешить разделение итогов». Оно позволяет параллельным транзакциям писать в разные строки итогов и снимает часть конфликтов на одних и тех же измерениях.
В файловой базе всё проще и жёстче: пока один пользователь записывает данные в таблицу, остальные ждут целиком. Поэтому файловая база с десятью активными пользователями «встаёт» при закрытии месяца.
Регистры и итоги: как устроено хранение данных для отчётов
Документ — это факт события. Отчёты строятся не по документам, а по регистрам: туда документ при проведении записывает движения.
Какие регистры бывают
| Регистр | Что хранит | Пример |
|---|---|---|
| Регистр сведений | значение на дату или без даты | цены, курсы валют |
| Регистр накопления (остатки) | приход и расход с остатком | товары на складах |
| Регистр накопления (обороты) | только обороты | продажи |
| Регистр бухгалтерии | проводки Дт/Кт по плану счетов | хозрасчётный регистр в БП |
| Регистр расчёта | начисления с периодом действия | зарплата в ЗУП |
Зачем нужны таблицы итогов
Если считать остаток товара по всем движениям за пять лет, отчёт будет строиться минутами. Поэтому у регистров накопления и бухгалтерии есть отдельные таблицы итогов: платформа хранит остатки и обороты на начало каждого месяца. Запрос остатка на дату берёт ближайший итог и досчитывает движения от него.
Отсюда практический вывод. Если отчёт показывает странные остатки, а движения верные, проблема может быть в итогах. Их пересчитывают:
- в режиме Предприятие — через
Все функции → Стандартные → Управление итогами; - в Конфигураторе — галочкой «Пересчёт итогов» в режиме тестирования и исправления.
У регистров сведений есть похожий механизм для быстрых запросов к последним значениям — таблицы среза последних. Его включают в свойствах регистра.
Индексы и регламентное обслуживание базы данных
Платформа сама создаёт индексы по ссылке, коду, наименованию, номеру и дате, по измерениям регистров. Для остальных реквизитов индекс включает разработчик свойством «Индексировать».
Когда индекс нужен
- 🔍 реквизит участвует в условиях отбора запросов и списков;
- 📋 по нему часто фильтруют динамические списки;
- 🔗 по реквизиту соединяют таблицы в отчётах.
Лишние индексы замедляют запись: каждое проведение обновляет их все. Индексировать реквизит «Комментарий» почти никогда не нужно.
Регламент для СУБД
Индексы со временем фрагментируются, статистика устаревает. СУБД начинает выбирать плохие планы запросов, и база медленно деградирует без видимых причин.
| Задача | MS SQL Server | PostgreSQL |
|---|---|---|
| Обновление статистики | ежедневно, ночью | ANALYZE или автовакуум |
| Дефрагментация индексов | реорганизация еженедельно | REINDEX по необходимости |
| Очистка мёртвых строк | не требуется | VACUUM |
| Очистка процедурного кеша | после обновления статистики | не требуется |
Для файловой базы аналог — периодическое тестирование и исправление со сжатием таблиц.
Резервное копирование базы 1С: три способа и их ограничения
Выгрузка в .dt
Конфигуратор → Администрирование → Выгрузить информационную базу. Файл .dt содержит конфигурацию и все данные в формате, не зависящем от СУБД. Через него переносят базу с файлового варианта на сервер и обратно.
Минусы: для крупной базы выгрузка идёт часами, а для загрузки нужен монопольный доступ.
Копия файла 1Cv8.1CD
Для файловой базы — самый быстрый способ. Но копировать файл можно только когда в базе никто не работает . Копия «на ходу» может оказаться неконсистентной.
Средства СУБД
Для серверной базы основной способ. Полная копия раз в сутки плюс копии журнала транзакций каждые 15–60 минут позволяют восстановиться почти на любую минуту. В MS SQL для этого нужна модель восстановления Full.
| Способ | Скорость | Восстановление на момент | Пользователи во время копии |
|---|---|---|---|
.dt | медленно | только на момент выгрузки | лучше без них |
Копия .1CD | быстро | на момент копии | только без них |
| Бэкап СУБД | быстро | на любую минуту (Full) | работают |
Копия, которую ни разу не восстанавливали, — не копия. Раз в месяц разворачивайте её в тестовую базу и открывайте.
Распределённая база и обмены данными между филиалами
Когда у компании несколько офисов без надёжной связи, базу делят на узлы. Механизм строится на планах обмена: в них платформа регистрирует, какие объекты изменились и в какой узел их нужно отправить.
Распределённая информационная база (РИБ)
- 🏢 Все узлы работают на одной конфигурации.
- 👑 Есть главный узел, конфигурацию меняют только в нём. Изменения уходят в подчинённые узлы вместе с данными.
- 🔄 Можно настроить фильтры: филиал получает только свои склады и организации.
Обмен между разными конфигурациями
Например, УТ и БП. Здесь используется универсальный формат EnterpriseData или правила конвертации. Объекты сопоставляются по реквизитам, а не по ссылкам, поэтому возникают дубли, если сопоставление настроено плохо.
Частая проблема обменов — разросшиеся таблицы регистрации изменений. Если узел давно не выгружался, по нему копятся миллионы записей, и каждое проведение тормозит. Неиспользуемые узлы удаляют из плана обмена.
Диагностика: чем смотреть, что происходит в базе
| Инструмент | Что показывает | Когда применять |
|---|---|---|
| Журнал регистрации | кто, когда и что изменил, ошибки | разбор инцидентов, аудит |
Технологический журнал (logcfg.xml) | запросы, блокировки, взаимоблокировки, длительность | тормоза и конфликты на сервере |
| Консоль кластера | сеансы, соединения, нагрузка рабочих процессов | зависшие сеансы, перегрузка |
| Замер производительности в Конфигураторе | время выполнения каждой строки кода | медленная операция у одного пользователя |
| Тестирование и исправление | ошибки структуры и ссылочной целостности | после сбоя, перед обновлением |
chdbfl.exe | проверка физической целостности .1CD | файловая база не открывается |
Тестирование и исправление
Запускается из Конфигуратора: Администрирование → Тестирование и исправление. Варианты проверок: реиндексация таблиц, проверка логической и ссылочной целостности, пересчёт итогов, сжатие таблиц, реструктуризация таблиц.
Режим требует монопольного доступа: все сеансы пользователей нужно завершить заранее. Запускайте его после рабочего дня и только после свежей резервной копии — исправление удаляет или создаёт объекты, и результат не всегда тот, что ожидаете.
chdbfl.exe
Утилита лежит в каталоге bin установленной платформы. Проверяет файл 1Cv8.1CD на уровне страниц без запуска Конфигуратора. Помогает, когда база после сбоя питания не открывается вовсе.
Технологический журнал
Настраивается файлом logcfg.xml в каталоге conf платформы. Включайте его только на время расследования и с отбором событий: полный журнал за час работы может занять десятки гигабайт.
Частые вопросы о базе данных 1С
Можно ли подключиться к базе 1С из Excel или Power BI напрямую через SQL?
Какой максимальный размер у файловой базы 1С?
Почему после перехода с файловой базы на сервер база стала больше?
Можно ли перенести базу с MS SQL на PostgreSQL?
.dt и загрузку в новую базу на сервере с PostgreSQL. Структуру таблиц платформа создаст заново.Где хранятся настройки пользователей?
.dt настройки отчётов и форм переезжают вместе с данными.