Из чего состоит 1С:Предприятие 8.3 и как его части работают вместе
Содержание
Программа 1С устроена в два слоя: платформа 1С:Предприятие 8.3 — это движок, а конфигурация (Бухгалтерия, ЗУП, УТ) — прикладное решение, написанное на этом движке. Платформа одна на все решения: она отвечает за интерфейс, хранение данных, транзакции и выполнение кода. Конфигурация описывает справочники, документы, регистры и бизнес-логику.
Отсюда главный принцип работы: разработчик не пишет SQL и не рисует таблицы базы вручную. Он описывает объекты в дереве метаданных, а платформа сама создаёт под них таблицы в СУБД и формирует интерфейс. Разберём каждую часть архитектуры — от слоёв до сервера приложений.
Платформа и конфигурация: два уровня одной программы
Платформа — это набор исполняемых файлов: 1cv8.exe (Конфигуратор и толстый клиент), 1cv8c.exe (тонкий клиент), 1cestart.exe (окно запуска), серверные компоненты. Её версия выглядит как 8.3.24.1586. Платформу обновляют отдельно от конфигурации.
Конфигурация — это метаданные плюс код. Она хранится внутри информационной базы, а не в отдельной папке программы. Поэтому одна и та же платформа запускает и Бухгалтерию, и ЗУП, и самописную базу.
Что входит в конфигурацию
- 📚 Справочники — списки: контрагенты, номенклатура, сотрудники.
- 📄 Документы — факты хозяйственной жизни: поступление, реализация, начисление зарплаты.
- 📊 Регистры — накопители данных для отчётов: сведений, накопления, бухгалтерии, расчёта.
- 🧮 Планы счетов, планы видов характеристик, планы видов расчёта — специализированные справочники.
- ⚙️ Общие модули, обработки, отчёты, роли, подсистемы — логика, права и навигация.
Типовые решения построены на БСП — Библиотеке стандартных подсистем. Отсюда похожий раздел Администрирование в БП 3.0, ЗУП 3.1 и УТ 11: пользователи, права, обновление, интернет-поддержка реализованы одним кодом.
Три конфигурации внутри одной базы
Практик знает, что в типовой базе с поддержкой живут три копии метаданных:
| Конфигурация | Что это | Где видна |
|---|---|---|
| Основная | Та, которую правит разработчик | Конфигуратор, Конфигурация → Открыть конфигурацию |
| Конфигурация базы данных | С ней реально работают пользователи | Применяется командой «Обновить конфигурацию базы данных» (F7) |
| Конфигурация поставщика | Эталон фирмы-разработчика | Используется при сравнении и объединении во время обновления |
Пока изменения основной конфигурации не применены к базе данных, пользователи их не видят. Это частая причина вопроса «я поменял, а у бухгалтера ничего не изменилось».
Режимы работы: файловый вариант и клиент-сервер
У информационной базы два варианта размещения. Выбор влияет на скорость, число пользователей и способы администрирования.
Файловый вариант
Вся база — один файл 1Cv8.1CD в каталоге. Клиент 1С сам открывает этот файл и работает с ним, отдельного сервера нет. Сетевой доступ — через общую папку.
- ✅ Ставится за минуты, не нужна СУБД.
- ✅ Подходит для 1–5 пользователей и небольших объёмов.
- ❌ Медленнее при одновременной работе: блокировки идут на уровне таблиц.
- ❌ Файл уязвим к обрывам сети и отключению питания.
Клиент-серверный вариант
Здесь три звена: клиент → сервер 1С:Предприятия → СУБД. Сервер 1С состоит из процессов:
- 🛰 ragent — агент сервера, порт
1540. К нему клиент обращается первым, через него же работает консоль администрирования. - 🗂 rmngr — менеджер кластера, порт
1541. Хранит реестр баз, сеансов, распределяет нагрузку. - 🔧 rphost — рабочие процессы. Выполняют серверный код и запросы. Диапазон портов по умолчанию
1560:1591, задаётся в свойствах рабочего сервера.
Порядок соединения: клиент стучится к агенту, получает адрес менеджера кластера, затем назначается рабочий процесс, через который идёт весь обмен. Если открыт только 1541, а диапазон рабочих процессов закрыт брандмауэром, база не откроется.
Список кластеров и сеансов можно получить утилитой rac через сервер администрирования ras: rac cluster list, затем rac session list --cluster=<id>. Остальные подкоманды — в rac help.
Как узнать, какой вариант у вашей базы
Откройте окно запуска 1С, выделите базу и посмотрите строку внизу списка. Файловая база показывается путём к каталогу, в строке подключения — File="D:\Bases\Buh". Серверная — именем сервера и базы, строка вида Srvr="srv1c";Ref="buh". Ту же информацию видно в программе в окне «О программе».
Какие бывают клиенты
| Клиент | Файл/способ | Где выполняется код |
|---|---|---|
| Тонкий клиент | 1cv8c.exe | Интерфейс на клиенте, данные и логика на сервере |
| Веб-клиент | Браузер, публикация на веб-сервере Apache или IIS | Как у тонкого клиента |
| Толстый клиент | 1cv8.exe | Может работать с данными на стороне клиента; нужен для обычных форм |
| Мобильный клиент | Приложение для Android/iOS | Подключается к опубликованной базе |
Управляемые формы разделяют код директивами &НаКлиенте и &НаСервере. Каждый вызов сервера из клиента — это сетевой обмен. Чем их меньше, тем быстрее форма открывается через интернет
или RDP.
Где живёт код и когда он выполняется
Код на встроенном языке лежит в модулях. У каждого свой момент срабатывания:
- 🧩 Модуль объекта — события
ПередЗаписью,ОбработкаПроведения,ОбработкаЗаполнения. Выполняется на сервере при записи и проведении. - 🪟 Модуль формы — реакция на кнопки и поля. Часть процедур на клиенте, часть на сервере.
- 📦 Модуль менеджера — процедуры уровня всего справочника или документа, например печать.
- 🔁 Общие модули — библиотеки процедур. Флажки «Клиент», «Сервер», «Вызов сервера» решают, откуда модуль доступен.
- 🚀 Модуль сеанса и модуль управляемого приложения — действия при старте сеанса и открытии программы.
Пример: бухгалтер нажимает «Провести». Форма передаёт объект на сервер, там срабатывает ОбработкаПроведения, формируются движения, всё пишется одной транзакцией. На клиент возвращается только результат.
Как 1С хранит данные в СУБД
В клиент-серверном варианте 8.3 работает с Microsoft SQL Server, PostgreSQL, IBM Db2 и Oracle Database. Для PostgreSQL нужна сборка с патчами под 1С — их распространяют фирма 1С и Postgres Professional.
Платформа сама создаёт таблицы. Имена у них служебные, не русские:
| Объект в конфигурации | Пример таблицы в СУБД |
|---|---|
| Справочник | _Reference45 |
| Документ | _Document312 |
| Табличная часть документа | _Document312_VT1520 |
| Регистр накопления (движения) | _AccumRg1205 |
| Итоги регистра накопления | _AccumRgT1219 |
| Константа | _Const88 |
Цифры в именах уникальны для каждой базы. Узнать соответствие можно функцией ПолучитьСтруктуруХраненияБазыДанных() — она возвращает таблицу имён метаданных и имён хранения.
Не изменяйте данные 1С напрямую SQL-запросами в обход платформы. Сломаются итоги регистров, ссылочная целостность и регистрация изменений для обменов.
Ссылки и итоги
Любой объект ссылочного типа идентифицируется GUID — 16-байтным полем _IDRRef. Поэтому документ можно переименовать или перенумеровать, а связи не порвутся.
Регистры накопления и бухгалтерии хранят не только движения, но и итоги по периодам. Отчёт по остаткам на дату не суммирует все движения с начала учёта, а берёт ближайший итог и докручивает разницу. Отсюда регламентная операция
«Пересчёт итогов» в Конфигураторе (Администрирование → Тестирование и исправление) и в типовых решениях.
Транзакции и блокировки: почему база не «разъезжается»
Каждая запись объекта выполняется в транзакции. Проведение документа — это одна транзакция: записать сам документ, записать движения по регистрам, проверить остатки. Если на любом шаге ошибка, откатывается всё целиком.
Разработчик может открыть явную транзакцию:
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
Элемент = Блокировка.Добавить("РегистрНакопления.ТоварыНаСкладах");
Элемент.УстановитьЗначение("Склад", Склад);
Элемент.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
// чтение остатков и запись движений
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Автоматический и управляемый режим блокировок
Режим задаётся в свойствах конфигурации — свойство «Режим управления блокировкой данных».
| Режим | Кто ставит блокировки | Что получается |
|---|---|---|
| Автоматический | СУБД по своим правилам | Блокируется больше, чем нужно; пользователи чаще ждут друг друга |
| Управляемый | Платформа по объекту БлокировкаДанных из кода | Блокируется только нужный срез, например один склад |
Все современные типовые конфигурации работают в управляемом режиме. Если два пользователя одновременно проводят документы по одному складу, второй ждёт. Время ожидания ограничено — по умолчанию 20 секунд, затем ошибка Превышено максимальное время ожидания предоставления блокировки.
Взаимная блокировка (deadlock) возникает, когда две транзакции захватывают ресурсы в разном порядке. Платформа выбирает «жертву» и отменяет одну из транзакций, пользователь видит сообщение о конфликте блокировок.
Завершать «зависший» сеанс из консоли кластера можно, но у этого пользователя оборвётся работа и откатится незафиксированная транзакция. Предупредите человека и делайте это вне пика.
Монопольный режим
Монопольный доступ нужен не для обычной работы, а для отдельных операций: применения изменённой структуры базы, загрузки .dt, тестирования и исправления. В это время другие пользователи в базу не войдут.
Язык запросов и что делает 1С быстрой или медленной
Данные читают на языке запросов 1С. Он похож на SQL, но работает с объектами метаданных: Справочник.Контрагенты, РегистрНакопления.ТоварыНаСкладах.Остатки. Платформа транслирует запрос в SQL конкретной СУБД.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Номенклатура,
| Остатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &Склад) КАК Остатки";
Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("Склад", Склад);
Результат = Запрос.Выполнить().Выгрузить();
Виртуальные таблицы
Остатки, Обороты, ОстаткиИОбороты, СрезПоследних — виртуальные таблицы регистров. Они используют итоги, поэтому работают быстро.
Приёмы оптимизации, которые реально работают
- Условия — в параметры виртуальной таблицы, а не в
ГДЕ. Так отбор применяется до расчёта остатков. - Никаких запросов в цикле. Сто запросов по одной строке медленнее одного запроса на сто строк. Собирайте данные во временную таблицу и соединяйте.
- Временные таблицы с индексами.
ПОМЕСТИТЬ ВТ_Товары ... ИНДЕКСИРОВАТЬ ПО Номенклатура— для больших соединений. - Осторожно с точкой через составные типы. Обращение
Регистратор.Датау поля составного типа порождает соединение со всеми таблицами документов. - Индексы на реквизитах. Свойство «Индексировать» у реквизита, по которому часто отбирают.
Медленное место ищут замером производительности в Конфигураторе (Отладка → Замер производительности) и технологическим журналом.
Расширения и интеграция с другими системами
Расширения конфигурации
Расширения появились в платформе 8.3.6. Это файл .cfe, который подключается поверх типовой конфигурации, не снимая её с поддержки. В расширение выносят доработки форм, свои отчёты, перехват методов (&Перед, &После, &Вместо, &ИзменениеИКонтроль).
Главный плюс: типовое обновление ставится как обычно, а расширение проверяется на совместимость. Пользователь подключает его в Администрирование → Печатные формы, отчеты и обработки → Расширения.
Внешние обработки и отчёты
Файлы .epf и .erf открываются без изменения конфигурации. Через них часто подключают печатные формы и загрузку данных — в той же группе Печатные формы, отчеты и обработки.
Механизмы интеграции
| Способ | Для чего |
|---|---|
| HTTP-сервисы | Свой REST-интерфейс для сайта или мобильного приложения |
| Веб-сервисы (SOAP) | Обмен со старыми корпоративными системами |
| Стандартный интерфейс OData | Чтение и запись данных без программирования на стороне 1С |
| COM-соединение | Подключение к базе из другой программы на Windows |
| Планы обмена и «Конвертация данных» | Синхронизация баз 1С между собой: БП ↔ ЗУП, УТ ↔ БП |
| Внешние компоненты | Подключение оборудования и библиотек (кассы, сканеры) |
Все механизмы, кроме COM, требуют публикации базы на веб-сервере.
Частые ошибки при работе с архитектурой 1С
- 🚫 Дорабатывать типовую конфигурацию «напрямую». После снятия с поддержки каждое обновление превращается в ручное сравнение. Начинайте с расширения.
- 🚫 Держать 15 пользователей в файловой базе. Ожидания на блокировках и риск повредить
1Cv8.1CDрастут вместе с числом людей. Пора переходить на клиент-сервер. - 🚫 Открыть только порт 1541. Без диапазона рабочих процессов клиент не дойдёт до
rphost. - 🚫 Писать запрос в цикле по строкам табличной части. На 10 строках не заметно, на 5 000 документ проводится минутами.
- 🚫 Править данные в СУБД скриптом. Итоги регистров перестают сходиться с движениями.
Частые вопросы
Можно ли перенести файловую базу на сервер без потери данных?
.dt через Конфигуратор (Администрирование → Выгрузить информационную базу), создайте базу на сервере 1С и загрузите файл. Перед этим остановите работу пользователей.Нужна ли отдельная лицензия на сервер 1С?
Чем тонкий клиент отличается от толстого на практике?
Почему одна и та же база на PostgreSQL и MS SQL работает с разной скоростью?
Где посмотреть, какие процессы сервера 1С сейчас работают?
rac по ras.