Что происходит внутри 1С:Предприятия, когда вы нажимаете «Провести»
Содержание
Платформа 1С работает как «движок» для прикладных программ: сама она не знает ни про НДС, ни про зарплату, а исполняет конфигурацию — описание справочников, документов, регистров и код на встроенном языке. Бухгалтерия 3.0, ЗУП 3.1 и УТ 11 — это разные конфигурации, запущенные на одной и той же платформе «1С:Предприятие 8.3».
Отсюда растут почти все практические вопросы: почему конфигурацию и платформу обновляют отдельно, почему база тормозит при 15 пользователях в файловом режиме, почему нельзя править таблицы SQL руками. Ниже — устройство платформы по слоям, с тем, что из этого следует для пользователя, администратора и программиста.
Из чего состоит платформа 1С: слои и компоненты
Удобно представлять систему как три слоя.
| Слой | Что это | Примеры |
|---|---|---|
| Платформа | Исполняемые файлы, которые ставятся на компьютер или сервер | 1cv8.exe, 1cv8c.exe, ragent.exe |
| Конфигурация | Прикладное решение: метаданные, формы, макеты, модули | БП 3.0, ЗУП 3.1, УТ 11, своя разработка |
| Информационная база | Данные конкретной организации плюс сохранённая в ней конфигурация | Файл 1Cv8.1CD или база в СУБД |
Клиентские приложения
- 🖥️ Тонкий клиент (
1cv8c.exe) — основной режим работы пользователей. Сам почти ничего не считает, данные получает с сервера. - 🧱 Толстый клиент (
1cv8.exe) — умеет работать и с обычными, и с управляемыми формами, нужен для старых конфигураций и для Конфигуратора. - 🌐 Веб-клиент — та же программа в браузере. Требует публикации базы на веб-сервере (Apache или IIS).
- 📱 Мобильный клиент — для работы с телефона и планшета.
Серверная часть
В клиент-серверном варианте ставится сервер 1С:Предприятия. Он состоит из нескольких процессов:
ragent— агент сервера, принимает подключения (по умолчанию порт 1540);rmngr— менеджер кластера, хранит реестр баз и распределяет работу (порт 1541);rphost— рабочие процессы, в которых реально выполняется серверный код (диапазон портов по умолчанию 1560–1591, задаётся в свойствах рабочего сервера).
Рядом с ними работает СУБД — она хранит таблицы. Сервер 1С и СУБД могут стоять на одной машине или на разных.
Инструменты разработчика
Конфигуратор встроен в платформу и открывается из окна запуска. Для командной разработки есть хранилище конфигурации и отдельная среда 1С:EDT на базе Eclipse. Администрирование кластера — через консоль серверов или утилиту командной строки rac в связке со службой ras.
Как 1С выполняет код: клиент, сервер и вызовы между ними
В управляемом приложении каждая строка кода выполняется в строго определённом месте. Это задают директивы компиляции перед процедурами модуля формы:
&НаКлиенте— код работает на компьютере пользователя, у него есть доступ к форме, но нет доступа к базе;&НаСервере— код работает в рабочем процессе сервера, ему доступны данные формы и база;&НаСервереБезКонтекста— серверный код без передачи формы, самый «лёгкий» вызов;&НаКлиентеНаСервереБезКонтекста— процедура, которую можно вызвать с обеих сторон.
Что происходит при нажатии «Провести»
- Пользователь нажимает кнопку в тонком клиенте.
- Клиент упаковывает данные формы и передаёт их на сервер — это и есть серверный вызов.
- На сервере платформа открывает транзакцию, вызывает обработчики объекта:
ПередЗаписью,ОбработкаПроведения. - Обработчик формирует движения по регистрам. Платформа накладывает блокировки и пишет данные в таблицы СУБД.
- Если всё прошло без исключений, транзакция фиксируется. Если нет — откатывается целиком, в базе ничего не меняется.
- Сервер возвращает клиенту обновлённую форму.
Каждый серверный вызов — это обмен по сети. Десять мелких вызовов подряд работают заметно медленнее одного крупного, особенно через интернет или веб-клиент.
Где ещё исполняется код
- 🔁 Фоновые задания — код, запущенный на сервере отдельно от пользователя. Так платформа выполняет длинные операции, не замораживая интерфейс.
- ⏰ Регламентные задания — фоновые задания по расписанию: загрузка курсов валют, обмены, обновление полнотекстового индекса.
- 📦 Общие модули — их флаги (
Сервер,Клиент,Вызов сервера,Привилегированный,Глобальный) определяют, откуда их можно вызвать и с какими правами.
Встроенный язык 1С: что умеет и где упирается
Встроенный язык — процедурный, с динамической типизацией. Писать можно русскими или английскими ключевыми словами: Если ... Тогда и If ... Then равноправны. Модули компилируются платформой во внутренний код и исполняются виртуальной машиной.
Типичный фрагмент серверного кода выглядит так:
&НаСервереБезКонтекста
Функция ОстатокТовара(Номенклатура, Склад)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЕСТЬNULL(СУММА(Остатки.КоличествоОстаток), 0) КАК Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура = &Номенклатура И Склад = &Склад) КАК Остатки";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Склад", Склад);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Возврат Выборка.Количество;
КонецФункции
Имя регистра здесь условное: в каждой конфигурации свои объекты метаданных.
Сильные стороны
- 📊 Язык запросов похож на SQL, но работает с объектами конфигурации, а не с таблицами СУБД. Есть виртуальные таблицы регистров: остатки, обороты, срез последних.
- 🧩 Готовые прикладные объекты: справочник, документ, регистр. Разработчик описывает их в метаданных, а таблицы, формы по умолчанию и блокировки платформа создаёт сама.
- 🛠️ Система компоновки данных — механизм отчётов с настройками, которые пользователь меняет без программиста.
Ограничения
- ❌ Нет классов и наследования. Роль «объекта с методами» выполняют модули менеджера и модули объектов метаданных.
- ❌ Язык запросов только читает данные. Запись идёт через объектную модель:
Справочник.Создать(),Документ.Записать(). - ❌ Нет привычной многопоточности. Параллельность делают фоновыми заданиями.
- ❌ Доступ к возможностям ОС ограничен. Для оборудования и нестандартных библиотек пишут внешние компоненты, на Windows ещё доступен COM.
Как платформа 1С хранит данные: файловый и клиент-серверный режим
Информационная база бывает двух видов.
| Файловый режим | Клиент-серверный режим | |
|---|---|---|
| Где данные | Один файл 1Cv8.1CD в каталоге базы | В СУБД: MS SQL Server, PostgreSQL, IBM Db2, Oracle Database |
| Что нужно поставить | Только клиент 1С | Сервер 1С, СУБД, лицензию на сервер |
| Сколько пользователей | Единицы, при росте нагрузки начинаются ожидания на блокировках | Десятки и сотни |
| Резервное копирование | Копия файла при закрытых сеансах или выгрузка .dt | Средствами СУБД, без остановки работы |
Как объекты конфигурации превращаются в таблицы
Платформа сама создаёт в СУБД таблицы под каждый объект метаданных. Имена у них служебные: _Reference45, _Document112, _AccumRg503 и подобные. Соответствие имён объектам хранится внутри базы.
Отсюда важное правило: не изменяйте данные напрямую в таблицах СУБД. Платформа держит в памяти кэши, ведёт итоги регистров и контроль ссылок. Запись в обход неё даёт рассогласование, которое потом лечится только тестированием и исправлением базы, а иногда — восстановлением из копии.
Итоги и блокировки
- 📈 Итоги регистров накопления хранятся отдельно и пересчитываются при записи движений. Поэтому отчёт об остатках не перебирает все документы за годы.
- 🔒 Управляемые блокировки — платформа блокирует только нужные данные (например, остатки конкретного товара на складе), а не таблицу целиком. Режим блокировок задаётся в свойствах конфигурации; типовые решения давно работают в управляемом режиме.
- ↩️ Транзакции гарантируют атомарность: документ записывается вместе со всеми движениями или не записывается вовсе.
Конфигурации, поддержка и обновления
Внутри базы одновременно живут несколько «копий» конфигурации:
- конфигурация поставщика — эталон от разработчика, с которым сравнивают изменения;
- основная конфигурация — то, что открыто в Конфигураторе, включая доработки;
- конфигурация базы данных — то, по чему реально работают пользователи.
Изменения в основной конфигурации не видны пользователям, пока не выполнено обновление конфигурации базы данных. На этом шаге платформа перестраивает таблицы СУБД, если поменялась структура.
Платформа и конфигурация обновляются отдельно
| Что обновляем | Чем | Что важно |
|---|---|---|
| Платформу | Дистрибутив технологической платформы | Конфигурация указывает минимальный номер платформы; новый релиз БП может не запуститься на старой платформе |
| Конфигурацию | Файл обновления .cfu или полный .cf | Обновлять последовательно по цепочке релизов, если файл не подходит для прыжка через версии |
| Доработки | Расширение .cfe | Не снимает конфигурацию с поддержки |
Режим поддержки и расширения
Типовая конфигурация стоит «на поддержке»: поставщик присылает обновления, а платформа сравнивает их с вашими изменениями. Если доработки внесены прямо в конфигурацию, каждое обновление превращается в ручное сравнение и объединение.
Расширения конфигурации появились в платформе 8.3.6. Доработка лежит отдельно от основной конфигурации и подключается поверх неё. Поэтому обновить типовую часть можно стандартно, а расширение потом проверить на совместимость.
Обновление структуры базы, загрузка .dt, тестирование и исправление требуют монопольного доступа. Перед этими операциями предупредите пользователей: их сеансы придётся завершить. И сделайте резервную копию.
Права доступа и защита данных в 1С
Безопасность в 1С строится на нескольких уровнях.
Пользователи и вход
Список пользователей информационной базы ведётся в самой базе. Вход возможен по паролю 1С, через аутентификацию операционной системы (доменная учётная запись Windows) или через OpenID.
Роли и права
- 👤 Роль — набор прав на объекты метаданных: чтение, добавление, изменение, проведение, интерактивное удаление и так далее.
- 📏 Ограничение доступа на уровне записей (RLS) — условие внутри роли: например, видеть документы только своей организации или своего склада.
- 🗂️ Группы доступа и профили — надстройка из Библиотеки стандартных подсистем. В типовых конфигурациях права назначают именно через неё, в разделе
Администрирование → Настройки пользователей и прав, а роли напрямую не трогают.
Защита на уровне сервера
- 🔐 Администратор кластера и администраторы баз задаются отдельно от пользователей 1С.
- 🛡️ Профили безопасности кластера ограничивают, что может делать код внешних обработок и расширений: доступ к файлам, COM, интернету.
- 📝 Журнал регистрации фиксирует вход пользователей и изменения данных — по нему разбирают, кто и когда изменил документ.
Пользователь с полными правами обходит любые ограничения RLS. Не раздавайте роль «Полные права» для удобства: это главная дыра в типовой установке.
Как 1С обменивается данными с внешними системами
Платформа даёт несколько механизмов интеграции. Выбор зависит от того, кто инициирует обмен и в каком формате.
| Механизм | Для чего | Особенности |
|---|---|---|
| Планы обмена | Синхронизация баз 1С между собой (БП ↔ ЗУП, БП ↔ УТ) | Платформа сама отслеживает изменённые объекты |
| Формат EnterpriseData | Обмен между типовыми конфигурациями | Описывается правилами конвертации |
| HTTP-сервисы | Свой REST-API на стороне 1С | Нужна публикация на веб-сервере |
| Веб-сервисы (SOAP) | Интеграция с системами на SOAP | Описание через WSDL |
| Стандартный интерфейс OData | Чтение и запись объектов без программирования API | Включается настройкой состава объектов |
| COM-соединение | Обращение к базе из скрипта или другой программы на Windows | Удобно для разовых задач, медленно при больших объёмах |
| Файлы XML, JSON, Excel | Загрузка прайсов, выписок, справочников | Встроенные средства чтения и записи |
| Внешние компоненты | Торговое оборудование, нестандартные протоколы | Пишутся на C++ по технологии Native API |
Исходящие запросы к чужим API 1С делает через объект HTTPСоединение. Банки, ЭДО, маркировка и интернет-поддержка в типовых конфигурациях работают именно поверх этих механизмов.
Почему 1С тормозит и как ускорить работу платформы
Медленная работа почти всегда упирается в одно из четырёх мест: диск и память сервера, блокировки, неудачный код или сеть.
Что проверить в первую очередь
- Режим базы. Файловая база на сетевой папке при одновременной работе нескольких человек — частая причина ожиданий. Решение — перевод на клиент-серверный вариант.
- Диск. База и временные файлы СУБД на SSD дают больший прирост, чем почти любая настройка 1С.
- Блокировки. Если пользователи жалуются на ошибку
Конфликт блокировок при выполнении транзакции, ищите долгие транзакции — обычно это групповое перепроведение или обмен в рабочее время. - Регламентные задания. Тяжёлые задания по расписанию в 10 утра конкурируют с пользователями. Переносите их на ночь.
- Кэш клиента. После обновлений помогает запуск с ключом
/ClearCache— он очищает локальный кэш конфигурации на компьютере пользователя.
Ошибки в коде, которые бьют по скорости
- 🐌 Запрос в цикле — тысяча запросов вместо одного. Лечится одним запросом с временной таблицей.
- 🐌 Обращение «через точку» вроде
Документ.Контрагент.ОсновнойДоговор.Валюта— каждая точка может читать объект из базы целиком. - 🐌 Отбор по неиндексированному реквизиту в большом справочнике.
- 🐌 Лишние серверные вызовы из формы при каждом изменении поля.
Инструменты диагностики
- 🔍 Замер производительности в режиме отладки Конфигуратора показывает, какие строки кода занимают время.
- 📜 Технологический журнал сервера (настраивается файлом
logcfg.xml) пишет длинные запросы, блокировки и исключения. - 🧰 Тестирование и исправление информационной базы — когда тормоза появились после сбоя.
Перезапуск рабочих процессов или службы сервера 1С обрывает сеансы пользователей с потерей несохранённых данных. Делайте это вне рабочего времени или после предупреждения всех, кто в базе.