Что происходит внутри 1С:Предприятия 8.3 — от запуска клиента до записи в СУБД
Содержание
1С:Предприятие 8.3 работает в два слоя: технологическая платформа (исполняемые файлы 1cv8.exe, 1cv8c.exe, сервер ragent/rmngr/rphost) и конфигурация — описание объектов, форм и кода конкретной программы: Бухгалтерии, ЗУП, УТ. Платформа читает метаданные конфигурации, сама создаёт по ним таблицы в базе данных и переводит запросы 1С в SQL нужной СУБД. Механизм работы общий для всех типовых решений, отличаются только метаданные и код.
Режимов работы базы два. Файловый — данные лежат в одном файле, клиент открывает его напрямую. Клиент-серверный — между пользователем и данными стоит кластер серверов 1С и отдельная СУБД. Первый выбирают для небольших офисов, второй — когда пользователей много или база тяжёлая.
Архитектура платформы: файловый и клиент-серверный режимы
Файловый вариант
Вся информационная база — это файл 1Cv8.1CD в каталоге базы. Отдельной СУБД нет: её роль выполняет движок, встроенный в платформу. Каждый клиент открывает файл сам, по локальному диску или по сетевой папке.
Что из этого следует на практике:
- 📁 копия базы — это копия каталога (но только когда в базе никто не работает );
- 🐢 при работе по сети через общую папку каждый клиент гоняет страницы файла по сети, поэтому скорость сильно зависит от сети и антивируса на файловом сервере;
- 🔒 блокировки данных крупнее, чем в клиент-серверном варианте, поэтому при одновременном проведении документов пользователи чаще ждут друг друга;
- 🌐 файловую базу можно опубликовать на веб-сервере (IIS или Apache), тогда клиенты работают через веб-сервер, а файл открывает только модуль расширения веб-сервера.
Клиент-серверный вариант
Здесь три звена: клиентское приложение, кластер серверов 1С и СУБД (MS SQL Server, PostgreSQL и другие поддерживаемые платформой).
Как проходит подключение:
- Клиент обращается к агенту сервера
ragent— по умолчанию порт1540. - Агент передаёт клиента менеджеру кластера
rmngr— порт1541. - Менеджер выделяет рабочий процесс
rphost, он берёт порт из диапазона, заданного в свойствах рабочего сервера (по умолчанию1560:1591). - Рабочий процесс выполняет серверный код и сам ходит в СУБД. Клиент к СУБД напрямую не подключается.
Консоль администрирования кластера тоже работает через агент, по порту 1540. Параметры отказоустойчивости и требования назначения функциональности настраивают в свойствах рабочего сервера, а не информационной базы.
| Признак | Файловый | Клиент-серверный |
|---|---|---|
| Где данные | файл 1Cv8.1CD | база в СУБД |
| Что нужно поставить | только клиент | сервер 1С + СУБД + клиенты |
| Блокировки | крупные | на уровне записей (управляемые) |
| Резервная копия | копия каталога или выгрузка .dt | средства СУБД или .dt |
| Лицензии | клиентские | клиентские + лицензия сервера |
| Типичный масштаб | ориентировочно до 5–10 одновременных пользователей | десятки и сотни |
Виды клиентов
- 💻 Тонкий клиент (
1cv8c.exe) — только интерфейс и клиентский код, данные запрашивает у сервера. Основной вариант для современных конфигураций. - 🧱 Толстый клиент (
1cv8.exe) — может выполнять и серверный код. Через него же открывается Конфигуратор. - 🌍 Веб-клиент — работа в браузере через опубликованную базу.
- 📱 Мобильный клиент — для решений, где это предусмотрено разработчиком.
Что такое метаданные и как из них получается конфигурация
Метаданные — это описание того, из чего состоит программа: какие есть справочники, документы, регистры, какие у них реквизиты и формы. В Конфигураторе это дерево слева: Общие, Константы, Справочники, Документы, Регистры сведений, Регистры накопления, Регистры бухгалтерии и так далее.
Разработчик не пишет CREATE TABLE. Он добавляет, например, справочник «Контрагенты» с реквизитом ИНН, а платформа при обновлении конфигурации базы данных сама создаёт таблицу и нужные индексы.
Основная и конфигурация базы данных
В базе хранятся две копии конфигурации:
- основная конфигурация — та, что открыта в Конфигураторе и которую правит разработчик;
- конфигурация базы данных — та, по которой реально работают пользователи.
Пока не выполнено Конфигурация → Обновить конфигурацию базы данных (клавиша F7), изменения пользователям не видны. Если меняется структура хранения — добавлен реквизит, новый регистр, — платформе нужна реструктуризация таблиц. Для неё требуется монопольный доступ: работу пользователей придётся завершить.
Перед обновлением конфигурации с реструктуризацией сделайте выгрузку .dt или резервную копию СУБД.
Объекты, таблицы и индексы
У каждого объекта метаданных своя группа таблиц в СУБД. Имена у них служебные: _Reference123 для справочника, _Document45 для документа, _AccumRg67 для движений регистра накопления и отдельная таблица итогов к нему.
Посмотреть соответствие имён можно функцией встроенного языка:
Структура = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из Структура Цикл
Сообщить(Строка.Метаданные + " -> " + Строка.ИмяТаблицыХранения);
КонецЦикла;
Код выполняется на сервере, например во внешней обработке в процедуре с директивой &НаСервере.
Расширения конфигурации
С платформы 8.3.6 изменения можно вынести в расширение .cfe, не снимая конфигурацию с поддержки. Расширение подключается поверх типовой конфигурации, и при обновлении типового релиза доработки не теряются. Загрузка расширения и обновление конфигурации
базы данных — отдельные шаги.
Работа 1С с базой данных: запросы, итоги и транзакции
Язык запросов
Запрос в 1С пишут не на SQL, а на языке запросов 1С: ВЫБРАТЬ ... ИЗ Справочник.Контрагенты. Платформа переводит его в SQL той СУБД, на которой стоит база. Поэтому одна конфигурация работает и в файловом режиме, и на MS SQL, и на PostgreSQL без переписывания кода.
Самое ценное в языке запросов — виртуальные таблицы регистров: Остатки, Обороты, ОстаткиИОбороты, СрезПоследних. Они берут данные из таблиц итогов, а не перебирают все движения. Отчёт «остатки на дату» строится быстро даже в базе за десять лет.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &Склад) КАК ТоварыНаСкладахОстатки";
Имена регистра и измерений здесь условные: в каждой конфигурации они свои.
💡 Условие на измерения ставьте в параметры виртуальной таблицы, как в примере, а не в ГДЕ. Тогда отбор выполняется до расчёта остатков, и запрос обрабатывает меньше строк.
Транзакции и проведение
Каждая запись объекта и каждое проведение документа идёт в транзакции. Если на любом шаге случилась ошибка, откатывается всё: и сам документ, и его движения по регистрам. Полупроведённого документа не бывает.
Из кода транзакцию открывают явно:
НачатьТранзакцию();
Попытка
// запись нескольких объектов
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Блокировки
Чтобы два пользователя не списали один и тот же остаток, нужны блокировки. В клиент-серверном режиме современные конфигурации используют управляемый режим (свойство конфигурации «Режим управления блокировкой данных»). Код заранее блокирует нужные записи объектом БлокировкаДанных, и второй пользователь ждёт только на тех же товарах и складах.
Если ожидание длится дольше таймаута, пользователь видит ошибку вида Превышено время ожидания захвата блокировки. Это не сбой, а сигнал, что кто-то держит долгую транзакцию.
Почему 1С тормозит: кэширование и узкие места
Какие кэши есть
- 🗂️ Кэш конфигурации на клиенте — в профиле пользователя,
%APPDATA%\1C\1cv8\и%LOCALAPPDATA%\1C\1cv8\. Клиент не скачивает формы и модули при каждом запуске. - 🖥️ Кэш на сервере — в каталоге кластера (папки вида
snccntx...), там хранятся служебные данные сеансов и конфигурации. - ♻️ Модули с повторным использованием возвращаемых значений — общие модули, где разработчик включил свойство повторного использования «На время вызова» или «На время сеанса». Результат функции считается один раз и берётся из памяти.
Когда кэш повреждён или устарел, появляются странности: форма не открывается, после обновления видна старая версия, база запускается медленно. Клиентский кэш чистят запуском с параметром /ClearCache или удалением папки базы в профиле при закрытой программе.
Серверный кэш чистят только при остановленной службе агента сервера 1С. Остановка оборвёт сеансы всех пользователей, поэтому делайте это вне рабочего времени и предупредите людей заранее.
Где обычно теряется скорость
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Медленно всё и у всех | нехватка памяти или диска на сервере, устаревшая статистика СУБД | загрузку сервера, регламент обслуживания СУБД |
| Медленно у одного пользователя | сеть, клиентский кэш, слабый ПК | запуск с /ClearCache, пинг до сервера |
| Долго проводится один вид документов | тяжёлый запрос в коде проведения | замер производительности в Конфигураторе |
| Пользователи ждут друг друга | долгие транзакции, блокировки | технологический журнал, события блокировок |
| Тормозит файловая база по сети | общая папка, антивирус проверяет 1Cv8.1CD | исключение каталога базы из проверки антивируса |
💡 В клиент-серверной базе для СУБД важен регламент: обновление статистики и обслуживание индексов. Без него планы запросов портятся, и база замедляется постепенно, без видимой причины.
Где живёт бизнес-логика: модули, события, подписки
Аналогов триггеров СУБД в 1С нет. Логику пишут на встроенном языке, а платформа вызывает её в нужный момент через события.
Модули
- Модуль объекта — код, привязанный к конкретному документу или справочнику.
- Модуль менеджера — код уровня всего списка объектов (печать, общие функции).
- Модуль формы — поведение формы на экране.
- Общие модули — функции, которыми пользуются все.
- Модуль сеанса — код при старте сеанса, например установка параметров сеанса.
Порядок событий при записи документа
ПередЗаписью— проверка и дозаполнение; можно отказаться от записи (Отказ = Истина).- Запись документа в таблицу.
ОбработкаПроведения— формирование движений по регистрам (только при проведении).ПриЗаписи— действия после записи, в той же транзакции.
Если на любом шаге установлен Отказ, транзакция откатывается целиком.
Подписки на события позволяют повесить обработчик сразу на группу объектов: например, вызывать одну процедуру при записи всех документов. Так типовые конфигурации ведут регистрацию изменений для обменов.
Регламентные задания — код по расписанию: загрузка курсов валют, обмены, обновление индекса полнотекстового поиска . В клиент-серверном варианте их выполняет кластер, без запущенного клиента.
Клиент и сервер в коде формы
Код формы делится директивами &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Каждый переход с клиента на сервер — это вызов по сети. Если в цикле по строкам таблицы на каждой строке вызывать сервер, форма начинает тормозить даже на хорошем сервере.
Обмен данными и интеграция 1С с другими системами
| Механизм | Для чего | Пример |
|---|---|---|
| Планы обмена | регистрация изменений между базами 1С | синхронизация УТ и Бухгалтерии |
| EnterpriseData | общий формат обмена типовых конфигураций | обмен через «Синхронизацию данных» |
| HTTP-сервисы | своё REST-API на стороне 1С | приём заказов с сайта |
| Веб-сервисы (SOAP) | обмен по WSDL | интеграция с корпоративными системами |
| Стандартный интерфейс OData | чтение и запись объектов по REST без программирования | выгрузка в BI-систему |
| COM-соединение | подключение к базе из внешней программы в Windows | скрипты, старые интеграции |
| Файлы (XML, JSON, Excel) | загрузка и выгрузка | банковские выписки, прайсы |
Логика плана обмена простая. При записи объекта платформа отмечает, что его надо отправить на такой-то узел. При следующем сеансе обмена уходят только отмеченные изменения, а после подтверждения приёма отметки снимаются. Поэтому обмен не гоняет всю базу целиком.
Не пишите данные в таблицы СУБД 1С напрямую в обход платформы. Таблицы итогов и служебные данные при этом не обновятся, и база получит расхождения, которые потом ищут неделями. Для записи из внешних систем есть HTTP-сервисы, OData и COM.
Права доступа: как 1С защищает данные
Пользователи и аутентификация
Список пользователей информационной базы хранится в самой базе. Вход возможен:
- по логину и паролю 1С;
- через аутентификацию операционной системы (доменная учётная запись Windows);
- через OpenID и другие механизмы, если они настроены.
В типовых конфигурациях пользователей заводят не в Конфигураторе, а в режиме Предприятия: Администрирование → Настройки пользователей и прав.
Роли и группы доступа
На уровне метаданных права задаются ролями: роль разрешает чтение, добавление, изменение, проведение конкретных объектов. Пользователь получает набор ролей.
В БСП-конфигурациях (Бухгалтерия, ЗУП, УТ) роли напрямую не раздают. Используют профили групп доступа — готовые наборы ролей вроде «Бухгалтер» или «Кадровик».
Ограничение на уровне записей (RLS)
Роль может пускать к документам, но только к части строк: своей организации, своего склада. Это ограничение доступа на уровне записей. Платформа добавляет условие в каждый запрос пользователя, и чужие строки просто не попадают в выборку.
Привилегированный и безопасный режим
- 🔓 Привилегированный режим — серверный код временно игнорирует права, например чтобы записать служебные данные от имени обычного пользователя.
- 🛡️ Безопасный режим и профили безопасности кластера ограничивают внешние обработки и расширения: доступ к файлам, COM-объектам, внешним ресурсам. Так непроверенная внешняя обработка не прочитает чужие файлы на сервере.
💡 Регулярно смотрите журнал регистрации (Администрирование → Обслуживание → Журнал регистрации в БСП-конфигурациях): там видно, кто, когда и что изменил.
Частые вопросы о том, как устроена 1С
Можно ли перевести файловую базу на сервер 1С?
.dt через Конфигуратор и загрузите этот файл в новую базу. Конфигурация и данные переносятся полностью, менять код не нужно.Где физически лежат данные файловой базы?
1Cv8.1CD в каталоге базы. Путь к каталогу видно в окне запуска 1С при выборе базы.