Что происходит внутри 1С:Предприятия 8.3 — от запуска клиента до записи в СУБД

· 10 мин

Содержание

1С:Предприятие 8.3 работает в два слоя: технологическая платформа (исполняемые файлы 1cv8.exe, 1cv8c.exe, сервер ragent/rmngr/rphost) и конфигурация — описание объектов, форм и кода конкретной программы: Бухгалтерии, ЗУП, УТ. Платформа читает метаданные конфигурации, сама создаёт по ним таблицы в базе данных и переводит запросы 1С в SQL нужной СУБД. Механизм работы общий для всех типовых решений, отличаются только метаданные и код.

Режимов работы базы два. Файловый — данные лежат в одном файле, клиент открывает его напрямую. Клиент-серверный — между пользователем и данными стоит кластер серверов 1С и отдельная СУБД. Первый выбирают для небольших офисов, второй — когда пользователей много или база тяжёлая.

Архитектура платформы: файловый и клиент-серверный режимы

Файловый вариант

Вся информационная база — это файл 1Cv8.1CD в каталоге базы. Отдельной СУБД нет: её роль выполняет движок, встроенный в платформу. Каждый клиент открывает файл сам, по локальному диску или по сетевой папке.

Что из этого следует на практике:

  • 📁 копия базы — это копия каталога (но только когда в базе никто не работает );
  • 🐢 при работе по сети через общую папку каждый клиент гоняет страницы файла по сети, поэтому скорость сильно зависит от сети и антивируса на файловом сервере;
  • 🔒 блокировки данных крупнее, чем в клиент-серверном варианте, поэтому при одновременном проведении документов пользователи чаще ждут друг друга;
  • 🌐 файловую базу можно опубликовать на веб-сервере (IIS или Apache), тогда клиенты работают через веб-сервер, а файл открывает только модуль расширения веб-сервера.

Клиент-серверный вариант

Здесь три звена: клиентское приложение, кластер серверов 1С и СУБД (MS SQL Server, PostgreSQL и другие поддерживаемые платформой).

Как проходит подключение:

  1. Клиент обращается к агенту сервера ragent — по умолчанию порт 1540.
  2. Агент передаёт клиента менеджеру кластера rmngr — порт 1541.
  3. Менеджер выделяет рабочий процесс rphost, он берёт порт из диапазона, заданного в свойствах рабочего сервера (по умолчанию 1560:1591).
  4. Рабочий процесс выполняет серверный код и сам ходит в СУБД. Клиент к СУБД напрямую не подключается.

Консоль администрирования кластера тоже работает через агент, по порту 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. ПередЗаписью — проверка и дозаполнение; можно отказаться от записи (Отказ = Истина).
  2. Запись документа в таблицу.
  3. ОбработкаПроведения — формирование движений по регистрам (только при проведении).
  4. ПриЗаписи — действия после записи, в той же транзакции.

Если на любом шаге установлен Отказ, транзакция откатывается целиком.

Подписки на события позволяют повесить обработчик сразу на группу объектов: например, вызывать одну процедуру при записи всех документов. Так типовые конфигурации ведут регистрацию изменений для обменов.

Регламентные задания — код по расписанию: загрузка курсов валют, обмены, обновление индекса полнотекстового поиска . В клиент-серверном варианте их выполняет кластер, без запущенного клиента.

Клиент и сервер в коде формы

Код формы делится директивами &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Каждый переход с клиента на сервер — это вызов по сети. Если в цикле по строкам таблицы на каждой строке вызывать сервер, форма начинает тормозить даже на хорошем сервере.

Обмен данными и интеграция 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С при выборе базы.
Нужна ли платная СУБД для клиент-серверного варианта?
Нет. Платформа поддерживает PostgreSQL, сборки которого для 1С распространяются бесплатно. MS SQL Server потребует своих лицензий.
Почему конфигурацию называют «на поддержке»?
Это значит, что конфигурация связана с поставкой разработчика и обновляется его релизами. Изменения прямо в коде усложняют обновление, поэтому доработки чаще выносят в расширения.
Работает ли 1С без лицензии?
Нет: без доступной лицензии платформа не запустит базу. Исключение — учебная версия с её ограничениями.