Как устроена архитектура управляемых форм 1С изнутри

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Управляемые формы в 1С — это не просто визуальный редактор, а сложная архитектурная надстройка, которая превращает декларативное описание интерфейса в работающее приложение. Часто разработчики задаются вопросом: является ли 1С-веб-приложением в классическом понимании? Разберем по шагам внутреннее устройство этой технологии, выясним роль клиент-серверного взаимодействия и проанализируем, какие паттерны проектирования лежат в основе «движка» форм.

Декларативность как фундамент управляемого интерфейса

Первое, что нам необходимо понять: управляемая форма является декларативной. В отличие от «обычных» форм (v8.2 и ниже), где разработчик жестко задавал координаты элементов (пиксельную сетку), в управляемых формах мы описываем структуру. Мы указываем платформе, что нам нужна группа, в ней — поле ввода и кнопка, а платформа сама решает, как это отрисовать в зависимости от текущей операционной системы, разрешения экрана или типа клиента (тонкий, мобильный или веб-клиент).

На уровне метаданных форма хранится в виде XML-описания. Рассмотрим, из чего состоит это описание:

  1. Реквизиты — это модель данных формы.
  2. Элементы — иерархическое дерево визуальных компонентов.
  3. Команды — логические действия, которые могут быть привязаны к кнопкам.

Когда пользователь открывает форму, платформа считывает этот XML и строит внутреннее дерево объектов. Проанализируем ситуацию: если вы открываете форму в браузере, платформа динамически генерирует JavaScript-код, который строит DOM-дерево. Если же используется тонкий клиент, задействуется нативный движок отрисовки (на базе WebKit или Chromium в последних версиях).

Клиент-серверное разделение: где живет «интеллект»?

Одной из самых важных особенностей архитектуры 1С является разделение контекста. Рассмотрим подробнее, как распределяются роли:

Серверная часть формы — это «мозг». На сервере хранится полное состояние формы. Именно здесь происходят тяжелые операции, работа с базой данных и проверка бизнес-логики. Важно понимать, что на сервере форма представлена объектом, который имеет доступ ко всем реквизитам и методам прикладных объектов.

Клиентская часть формы — это «терминал». На клиенте отображается только часть данных, необходимых пользователю в данный момент. Платформа 1С использует концепцию Server-side UI. Это роднит её с такими фреймворками, как Vaadin (для Java) или Blazor Server. Основная логика выполняется на сервере, а клиент получает лишь инструкции по обновлению интерфейса.

Модель данных: ДанныеФормы против Прикладных объектов

Часто возникает путаница между объектом базы данных (например, ДокументОбъект) и данными, которые мы видим на экране. Выясним причину этого разделения. Для оптимизации трафика платформа не передает тяжелые прикладные объекты на клиент. Вместо этого используются специальные типы-посредники:

Эти типы являются «легковесными» проекциями данных. Когда мы вызываем серверный метод, происходит автоматическая синхронизация. Рассмотрим пример кода, который демонстрирует трансформацию данных на сервере:


&НаСервере
Процедура ОбработатьДанныеНаСервере()
    // ДанныеФормы (Объект) превращаются в реальный прикладной объект
    ДокОбъект = РеквизитФормыВЗначение("Объект");
    
    // Теперь нам доступны методы документа, например, заполнение по основанию
    ДокОбъект.Заполнить(Основание);
    
    // Возвращаем изменения обратно в структуру формы
    ЗначениеВРеквизитФормы(ДокОбъект, "Объект");
КонецПроцедуры

Этот механизм называется сериализацией состояния. Платформа берет значения из полей формы, упаковывает их, передает на сервер, «оживляет» прикладной объект, выполняет код и отправляет измененные данные обратно в виде «дельты» (только измененные части).

Сходство с паттерном MVC

Можно ли сказать, что управляемые формы реализуют MVC (Model-View-Controller)? Посмотрим на структуру через призму этого паттерна:

Однако в 1С этот паттерн реализован специфически: контроллер разделен на две части (клиентскую и серверную). Основная задача разработчика — минимизировать количество переходов между ними, так как каждый вызов &НаСервере инициирует сетевой пакет и полную сериализацию контекста формы (если не используется вызов БезКонтекста).

Оптимизация передачи данных: механизм «Дельты»

Для того чтобы веб-клиент работал быстро, 1С не пересылает состояние всей формы при каждом клике. Используется механизм дифференциальной передачи данных. Платформа вычисляет разницу (diff) между состоянием формы до вызова сервера и после него. На клиент отправляется только эта разница. Проанализируем пример: если вы изменили только цвет надписи или видимость кнопки на сервере, клиент получит короткую инструкцию на изменение конкретного свойства конкретного элемента в DOM.

Взаимодействие через контекст

Рассмотрим, как правильно выбирать тип вызова сервера, исходя из знаний об архитектуре. Существует два основных типа серверных процедур в модуле формы:

  1. &НаСервере — передается весь контекст формы. Это удобно, но ресурсоемко. Платформа сериализует все ДанныеФормы и отправляет их на сервер приложений.
  2. &НаСервереБезКонтекста — контекст формы (реквизиты) на сервер не передается. Это максимально быстрый вызов. Его следует использовать для получения справочной информации или расчетов, не затрагивающих текущие данные формы.

Разберем по шагам, что происходит при контекстном вызове:

Понимание этой «внутренней кухни» позволяет писать более производительный код. Например, теперь понятно, почему не стоит хранить огромные таблицы значений в реквизитах формы — они будут «путешествовать» между клиентом и сервером при каждом контекстном вызове, замедляя работу интерфейса.

Таким образом, архитектура управляемых форм 1С — это высокоуровневая абстракция над веб-технологиями, которая берет на себя всю сложную работу по синхронизации состояний, позволяя программисту сосредоточиться на бизнес-логике, а не на особенностях рендеринга в разных браузерах.

← На главную