Где 1С хранит информацию и кто её обрабатывает: файловый движок, сервер, SQL

· 9 мин

Содержание

Система 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. Клиент — тонкий клиент, толстый клиент или браузер. Он показывает формы и отправляет команды.
  2. Кластер серверов 1С:Предприятия — выполняет серверный код конфигурации и запросы.
  3. СУБД — хранит таблицы и выполняет 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 ServerWindows-инфраструктураисторически самый распространённый вариант
PostgreSQLWindows и Linuxнужна сборка с патчами для 1С (от фирмы 1С или Postgres Pro); бесплатна
Postgres ProLinux, импортозамещениероссийская сборка 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С
Выполнено: 0 / 6

Целостность и безопасность данных в 1С

Целостность в 1С держится на нескольких механизмах сразу.

Транзакции. Запись документа с движениями по регистрам выполняется одной транзакцией. Если упала запись хотя бы одного регистра, откатывается всё. Половины проведения в базе не бывает.

Блокировки. Современные конфигурации используют управляемый режим блокировок: платформа сама решает, какие записи заблокировать, а СУБД обеспечивает изоляцию. Ошибка «Конфликт блокировок при выполнении транзакции» означает, что два пользователя одновременно меняли одни и те же данные и один не дождался другого.

Права доступа . Права пользователей задаются ролями конфигурации, ограничения на уровне записей (RLS) — тоже. Всё это работает внутри платформы. Человек с прямым доступом к таблицам SQL обходит все эти ограничения.

Отсюда правила для администратора:

  1. 🔑 Учётную запись СУБД, под которой работает сервер 1С, никому не выдавайте. Пароль sa или postgres не должен быть известен бухгалтерам.
  2. 🚫 Не правьте данные прямыми SQL-запросами в таблицы. Платформа не узнает об изменении: собьются итоги, версии объектов, связи ссылок.
  3. 💾 Выгрузка .dt — не замена бэкапу. Для серверной базы основная копия — средствами СУБД, она быстрее создаётся и восстанавливается до момента сбоя.
  4. 🧪 Восстановление проверяйте. Бэкап, который ни разу не разворачивали, — это надежда, а не копия.
  5. 🔒 Порты 1540–1541 и диапазон рабочих процессов не открывайте в интернет. Удалённый доступ — через VPN или веб-публикацию с HTTPS.

Перевести файловую базу на сервер просто: в конфигураторе файловой базы Администрирование → Выгрузить информационную базу в .dt, создать пустую серверную базу в консоли кластера и загрузить файл через Администрирование → Загрузить информационную базу. Обратный путь работает так же.

Частые вопросы

Можно ли работать с файловой базой 1С без локальной сети, через интернет?
Да, если опубликовать базу на веб-сервере (Apache или IIS). Пользователи подключаются тонким клиентом или браузером по HTTP/HTTPS, а с файлом работает только веб-сервер.
Нужна ли отдельная лицензия на СУБД?
Для MS SQL Server — да, по правилам Microsoft. PostgreSQL и сборка для 1С распространяются бесплатно. Лицензия на сервер 1С нужна в любом клиент-серверном варианте отдельно.
Почему одна и та же база на сервере работает медленнее, чем файловая?
Чаще всего виноваты не настроенная СУБД (нет обновления статистики, мало памяти), медленный диск под базу или сеть между сервером 1С и сервером СУБД. На одном-двух пользователях файловый вариант действительно может быть быстрее: в нём меньше сетевых обращений.
Можно ли читать данные 1С из SQL для отчётов в BI?
Читать можно, но имена таблиц служебные и меняются при реструктуризации. Надёжнее отдавать данные через OData, HTTP-сервисы или выгрузку, которую делает сама 1С.
Какой максимальный размер у файловой базы?
Жёсткий предел зависит от формата файла и версии платформы, но упираются обычно не в него, а в скорость. База в десятки гигабайт в файловом режиме уже работает тяжело — это сигнал к переходу на сервер.