Из чего состоит 1С:Предприятие 8.3 и как его части работают вместе

· 9 мин

Содержание

Программа 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 конкретной СУБД.

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    Остатки.Номенклатура,
|    Остатки.КоличествоОстаток
|ИЗ
|    РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &Склад) КАК Остатки";
Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("Склад", Склад);
Результат = Запрос.Выполнить().Выгрузить();

Виртуальные таблицы

Остатки, Обороты, ОстаткиИОбороты, СрезПоследних — виртуальные таблицы регистров. Они используют итоги, поэтому работают быстро.

Приёмы оптимизации, которые реально работают

  1. Условия — в параметры виртуальной таблицы, а не в ГДЕ. Так отбор применяется до расчёта остатков.
  2. Никаких запросов в цикле. Сто запросов по одной строке медленнее одного запроса на сто строк. Собирайте данные во временную таблицу и соединяйте.
  3. Временные таблицы с индексами. ПОМЕСТИТЬ ВТ_Товары ... ИНДЕКСИРОВАТЬ ПО Номенклатура — для больших соединений.
  4. Осторожно с точкой через составные типы. Обращение Регистратор.Дата у поля составного типа порождает соединение со всеми таблицами документов.
  5. Индексы на реквизитах. Свойство «Индексировать» у реквизита, по которому часто отбирают.

Медленное место ищут замером производительности в Конфигураторе (Отладка → Замер производительности) и технологическим журналом.

Расширения и интеграция с другими системами

Расширения конфигурации

Расширения появились в платформе 8.3.6. Это файл .cfe, который подключается поверх типовой конфигурации, не снимая её с поддержки. В расширение выносят доработки форм, свои отчёты, перехват методов (&Перед, &После, &Вместо, &ИзменениеИКонтроль).

Главный плюс: типовое обновление ставится как обычно, а расширение проверяется на совместимость. Пользователь подключает его в Администрирование → Печатные формы, отчеты и обработки → Расширения.

Внешние обработки и отчёты

Файлы .epf и .erf открываются без изменения конфигурации. Через них часто подключают печатные формы и загрузку данных — в той же группе Печатные формы, отчеты и обработки.

Механизмы интеграции

СпособДля чего
HTTP-сервисыСвой REST-интерфейс для сайта или мобильного приложения
Веб-сервисы (SOAP)Обмен со старыми корпоративными системами
Стандартный интерфейс ODataЧтение и запись данных без программирования на стороне 1С
COM-соединениеПодключение к базе из другой программы на Windows
Планы обмена и «Конвертация данных»Синхронизация баз 1С между собой: БП ↔ ЗУП, УТ ↔ БП
Внешние компонентыПодключение оборудования и библиотек (кассы, сканеры)

Все механизмы, кроме COM, требуют публикации базы на веб-сервере.

Проверьте, что понимаете архитектуру своей базы
Выполнено: 0 / 6

Частые ошибки при работе с архитектурой 1С

  • 🚫 Дорабатывать типовую конфигурацию «напрямую». После снятия с поддержки каждое обновление превращается в ручное сравнение. Начинайте с расширения.
  • 🚫 Держать 15 пользователей в файловой базе. Ожидания на блокировках и риск повредить 1Cv8.1CD растут вместе с числом людей. Пора переходить на клиент-сервер.
  • 🚫 Открыть только порт 1541. Без диапазона рабочих процессов клиент не дойдёт до rphost.
  • 🚫 Писать запрос в цикле по строкам табличной части. На 10 строках не заметно, на 5 000 документ проводится минутами.
  • 🚫 Править данные в СУБД скриптом. Итоги регистров перестают сходиться с движениями.

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

Можно ли перенести файловую базу на сервер без потери данных?
Да. Выгрузите базу в .dt через Конфигуратор (Администрирование → Выгрузить информационную базу), создайте базу на сервере 1С и загрузите файл. Перед этим остановите работу пользователей.
Нужна ли отдельная лицензия на сервер 1С?
Да, для клиент-серверного варианта нужна лицензия на сервер 1С:Предприятия плюс клиентские лицензии по числу одновременных пользователей. Лицензия СУБД — отдельно, PostgreSQL бесплатен.
Чем тонкий клиент отличается от толстого на практике?
Тонкий клиент работает только с управляемыми формами и передаёт логику на сервер, поэтому хорошо работает через интернет. Толстый нужен для старых конфигураций на обычных формах и для Конфигуратора.
Почему одна и та же база на PostgreSQL и MS SQL работает с разной скоростью?
Платформа строит разные SQL-запросы под разные СУБД, а планировщики СУБД по-разному их выполняют. Плюс влияют настройки самой СУБД: память, параллелизм, статистика.
Где посмотреть, какие процессы сервера 1С сейчас работают?
В консоли администрирования серверов 1С: раздел кластера → «Рабочие процессы» и «Сеансы». Без консоли — через rac по ras.