Где 1С хранит информацию и кто её обрабатывает: файловый движок, сервер, SQL
Содержание
Система 1С работает с данными одним из двух способов: через собственный файловый движок (вся база лежит в одном файле 1Cv8.1CD) или через сервер 1С:Предприятия и внешнюю СУБД — Microsoft SQL Server, PostgreSQL, IBM Db2 и другие. Прикладной код при этом одинаковый: конфигурация не знает, где физически лежат её таблицы.
Частое заблуждение — «1С сама по себе база данных». Нет. 1С — платформа, которая описывает данные метаданными (справочники, документы, регистры), а хранение отдаёт движку. Одну и ту же конфигурацию можно перенести из файла на SQL-сервер и обратно без переписывания кода.
Два режима хранения данных: что выбрать и чем они отличаются
Выбор режима — первое архитектурное решение при внедрении. От него зависят скорость, число одновременных пользователей и способы резервного копирования.
| Параметр | Файловый режим | Клиент-серверный режим |
|---|---|---|
| Где лежат данные | файл 1Cv8.1CD в каталоге базы | таблицы во внешней СУБД |
| Кто выполняет запросы | клиентское приложение на каждом компьютере | рабочие процессы сервера 1С |
| Пользователи | несколько человек, ориентировочно до 5–10 | десятки и сотни |
| Блокировки | на уровне таблиц | на уровне записей |
| Лицензии | только клиентские | клиентские + лицензия на сервер 1С |
| Бэкап | копия файла или выгрузка .dt | средства СУБД + выгрузка .dt |
| Обслуживание | почти не нужно | регламентные задания СУБД |
Файловая база 1С: как устроен движок 1Cv8.1CD
В файловом режиме вся информационная база — это один файл 1Cv8.1CD. В нём хранятся и конфигурация, и данные, и служебные таблицы. Рядом платформа создаёт файлы блокировок и временные файлы.
СУБД как отдельной программы здесь нет. Файловый движок встроен в саму платформу: каждый запущенный клиент читает и пишет файл напрямую — по локальному диску или через сетевую папку.
Отсюда главные ограничения:
- 🐢 Сеть — узкое место. Тяжёлый отчёт на клиенте тянет страницы файла по сети. На медленной сети или Wi-Fi это заметно.
- 🔒 Блокировки таблиц. Пока один пользователь проводит документ, транзакция блокирует таблицу целиком. Остальные ждут.
- 💥 Риск порчи при сбое. Обрыв сети или отключение питания во время записи может повредить файл.
- 📦 Нет параллельной обработки. Всю работу делает компьютер пользователя, а не мощный сервер.
Файловую базу держите на локальном диске сервера-файлохранилища, а не на компьютере, который выключают на ночь. Антивирус настройте так, чтобы он не проверял каталог базы на лету: это замедляет каждую операцию записи.
Для проверки и ремонта файловой базы есть утилита chdbfl.exe в каталоге bin платформы. Её запускают только при закрытой базе, когда никто не работает
. Второй способ — Конфигуратор → Администрирование → Тестирование и исправление, он тоже требует монопольного доступа.
Перед любым исправлением сделайте копию каталога базы: исправление может удалить битые записи без возможности вернуть их.
Клиент-серверная архитектура 1С: кто стоит между пользователем и СУБД
В клиент-серверном режиме появляется три уровня:
- Клиент — тонкий клиент, толстый клиент или браузер. Он показывает формы и отправляет команды.
- Кластер серверов 1С:Предприятия — выполняет серверный код конфигурации и запросы.
- СУБД — хранит таблицы и выполняет SQL.
Клиент сначала обращается к агенту сервера (по умолчанию порт 1540). Агент передаёт его менеджеру кластера (1541), а тот направляет соединение на рабочий процесс rphost. Диапазон портов рабочих процессов задаётся в свойствах рабочего сервера, по умолчанию это 1560:1591.
Клиент никогда не подключается к СУБД сам. С базой данных разговаривает только рабочий процесс сервера 1С. Поэтому пользователям не нужны логины SQL Server или PostgreSQL — у сервера 1С одна учётная запись СУБД, указанная при создании базы.
Что это даёт на практике:
- ⚡ запросы выполняются рядом с данными, по сети к клиенту идёт только результат;
- 🧵 сервер обрабатывает много сеансов параллельно на нескольких процессах;
- 🔐 блокировки ставятся на отдельные записи, а не на таблицы;
- 🛠 администрирование через консоль кластера или утилиту
rac(например,rac cluster list,rac session list).
Перезапуск службы «Агент сервера 1С:Предприятия» или завершение рабочего процесса обрывает сеансы всех пользователей. Делайте это вне рабочего времени и предупредите людей заранее.
Какие СУБД поддерживает 1С:Предприятие 8.3
Платформа 8.3 в клиент-серверном режиме работает с несколькими системами управления базами данных:
| СУБД | Где применяют | Комментарий |
|---|---|---|
| Microsoft SQL Server | Windows-инфраструктура | исторически самый распространённый вариант |
| PostgreSQL | Windows и Linux | нужна сборка с патчами для 1С (от фирмы 1С или Postgres Pro); бесплатна |
| Postgres Pro | Linux, импортозамещение | российская сборка PostgreSQL, есть сертифицированные версии |
| IBM Db2 | крупные внедрения | встречается редко |
| Oracle Database | крупные внедрения | встречается редко, перед выбором проверьте поддержку в вашей версии платформы |
Обычная ванильная сборка PostgreSQL из репозитория дистрибутива не подходит: в ней нет нужных 1С доработок (например, типа mchar для строк). Берите сборку, предназначенную для 1С.
Поддерживаемые версии СУБД меняются от релиза к релизу платформы. Перед установкой сверьтесь с системными требованиями именно вашей версии платформы: свежий SQL Server может ещё не поддерживаться старой платформой.
При переходе с MS SQL на PostgreSQL чаще всего «проседают» отчёты с тяжёлыми запросами. Обычно помогает не смена железа, а настройка параметров PostgreSQL (shared_buffers, work_mem, effective_cache_size) и обновление статистики.
Как 1С переводит свои запросы в SQL
Разработчик пишет запрос на языке запросов 1С: ВЫБРАТЬ Ссылка, Наименование ИЗ Справочник.Номенклатура. Сервер 1С переводит его в SQL-диалект конкретной СУБД. Поэтому одна и та же конфигурация работает и на MS SQL, и на PostgreSQL.
В СУБД таблицы и поля 1С называются служебными именами:
_Reference45— таблица справочника;_Document123— таблица документа;_AccumRg200и_AccumRgT210— движения и итоги регистра накопления;_Fld1234— реквизит;_IDRRef— ссылка,_Marked— пометка удаления,_Version— версия объекта.
Сопоставить имена с метаданными помогает метод ПолучитьСтруктуруХраненияБазыДанных(). Его вызывают в серверном коде, например из внешней обработки:
Структура = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
Для Каждого Строка Из Структура Цикл
Сообщить(Строка.Метаданные + " = " + Строка.ИмяТаблицыХранения);
КонецЦикла;
Второй параметр Истина возвращает имена в терминах СУБД, а не в терминах файлового движка.
Что из запроса 1С превращается в тяжёлый SQL
- 🔗 Разыменование через точку.
Документ.Контрагент.ИННв тексте запроса скрыто добавляет соединение с таблицей контрагентов. Для составных типов — сразу с несколькими таблицами. - 📊 Виртуальные таблицы регистров.
Остатки()иОбороты()читают таблицы итогов. Условие, переданное в параметры виртуальной таблицы, фильтрует данные до расчёта; то же условие вГДЕ— уже после. - 🗂 Временные таблицы.
ПОМЕСТИТЬсоздаёт временную таблицу в СУБД; в MS SQL она живёт вtempdb. - 🔁 Запрос в цикле. Сто одинаковых запросов по одной строке медленнее одного запроса на сто строк.
Увидеть реальный SQL можно через технологический журнал. Его включают файлом logcfg.xml в каталоге conf платформы; события DBMSSQL (MS SQL) и DBPOSTGRS (PostgreSQL) содержат текст запроса и время выполнения. Для файловой базы аналог — событие DBV8DBEng.
Индексы и обслуживание базы данных 1С
Индексы в 1С создаёт платформа, вручную в СУБД их не добавляют. Управлять ими можно в конфигураторе через свойство реквизита «Индексировать»:
- Не индексировать — по умолчанию для большинства реквизитов;
- Индексировать — отдельный индекс по полю;
- Индексировать с доп. упорядочиванием — индекс по полю плюс поле упорядочивания (код или наименование), удобен для списков с сортировкой.
Измерения регистров, ссылки, даты и номера документов платформа индексирует сама. Лишний индекс ускоряет поиск, но замедляет каждую запись, поэтому индексируйте только поля, по которым реально отбирают данные.
Индекс, созданный вручную средствами СУБД, пропадёт после следующей реструктуризации таблицы при обновлении конфигурации. Да и поддержка такой базы становится непредсказуемой.
Для серверной базы нужно регулярное обслуживание на стороне СУБД:
| Операция | Зачем | Как часто |
|---|---|---|
| Обновление статистики | планировщик СУБД выбирает правильный план запроса | ежедневно ночью |
| Перестроение или реорганизация индексов | убирает фрагментацию | раз в неделю |
| Очистка процедурного кэша (MS SQL) | сбрасывает устаревшие планы после обновления статистики | после обновления статистики |
VACUUM / ANALYZE (PostgreSQL) | возвращает место и обновляет статистику | autovacuum + ночной ANALYZE |
| Пересчёт итогов регистров | исправляет расхождения таблиц итогов | при ошибках в остатках |
Целостность и безопасность данных в 1С
Целостность в 1С держится на нескольких механизмах сразу.
Транзакции. Запись документа с движениями по регистрам выполняется одной транзакцией. Если упала запись хотя бы одного регистра, откатывается всё. Половины проведения в базе не бывает.
Блокировки. Современные конфигурации используют управляемый режим блокировок: платформа сама решает, какие записи заблокировать, а СУБД обеспечивает изоляцию. Ошибка «Конфликт блокировок при выполнении транзакции» означает, что два пользователя одновременно меняли одни и те же данные и один не дождался другого.
Права доступа . Права пользователей задаются ролями конфигурации, ограничения на уровне записей (RLS) — тоже. Всё это работает внутри платформы. Человек с прямым доступом к таблицам SQL обходит все эти ограничения.
Отсюда правила для администратора:
- 🔑 Учётную запись СУБД, под которой работает сервер 1С, никому не выдавайте. Пароль
saилиpostgresне должен быть известен бухгалтерам. - 🚫 Не правьте данные прямыми SQL-запросами в таблицы. Платформа не узнает об изменении: собьются итоги, версии объектов, связи ссылок.
- 💾 Выгрузка
.dt— не замена бэкапу. Для серверной базы основная копия — средствами СУБД, она быстрее создаётся и восстанавливается до момента сбоя. - 🧪 Восстановление проверяйте. Бэкап, который ни разу не разворачивали, — это надежда, а не копия.
- 🔒 Порты 1540–1541 и диапазон рабочих процессов не открывайте в интернет. Удалённый доступ — через VPN или веб-публикацию с HTTPS.
Перевести файловую базу на сервер просто: в конфигураторе файловой базы Администрирование → Выгрузить информационную базу в .dt, создать пустую серверную базу в консоли кластера и загрузить файл через Администрирование → Загрузить информационную базу. Обратный путь работает так же.