Разработка и Конфигурация · 11 мин
Чем отличаются управляемые формы от обычных в 1С
Разбираем отличия управляемых форм от обычных в 1С: принципы работы, клиент-серверное взаимодействие, совместимость, миграция и практические советы разработчику.
Обычные и управляемые формы — это два разных механизма построения интерфейса в платформе 1С:Предприятие. Обычные формы появились в версии 8.0 и работали по принципу «всё на клиенте»: вся логика, данные и отрисовка выполнялись на компьютере пользователя. Управляемые формы введены с версии 8.2 и построены на другой архитектуре: форма описывается декларативно, а платформа сама решает, как её отрисовать на толстом, тонком или веб-клиенте.
Главное практическое отличие — разделение кода на клиентскую и серверную части. В обычной форме весь модуль выполняется на клиенте, и обращения к базе данных идут напрямую. В управляемой форме каждый вызов сервера — это отдельное сетевое взаимодействие, поэтому непродуманный код с десятками серверных вызовов в цикле может сделать форму заметно медленнее, чем аналогичную обычную.
Понимание различий важно в трёх ситуациях: при доработке старых конфигураций, при переходе на управляемое приложение и при выборе подхода для нового решения. Ниже разберём архитектуру, синтаксис, ограничения и порядок миграции.
Архитектура: где выполняется код и рисуется интерфейс
В обычной форме разработчик вручную размещает элементы на макете: кнопки, поля, табличные части имеют фиксированные координаты и размеры. Весь модуль формы исполняется на клиенте, а запросы к данным отправляются напрямую. Такая модель проста для понимания, но требует толстого клиента и плохо переносится на другие способы доступа.
Управляемая форма описывается декларативно: разработчик задаёт состав элементов и их связи с данными, а конкретное расположение и отрисовку платформа выбирает сама в зависимости от клиента — толстого, тонкого или веб-браузера. Именно это позволяет одной и той же форме работать в браузере без доработок.
Модуль управляемой формы разделён директивами компиляции: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста, &НаКлиентеНаСервереБезКонтекста. Данные формы хранятся в специальных реквизитах, а при серверном вызове сериализуются и передаются между клиентом и сервером.
Ключевые отличия в одной таблице
| Критерий | Обычная форма | Управляемая форма |
|---|---|---|
| Описание интерфейса | Координаты и размеры элементов вручную | Декларативно, авторазмещение платформой |
| Исполнение кода | Весь модуль на клиенте | Разделение на клиентскую и серверную части |
| Поддерживаемые клиенты | Только толстый клиент | Толстый, тонкий, веб-клиент |
| Работа с данными | Объектные типы доступны напрямую | Данные формы, объектные типы только на сервере |
| Режим запуска конфигурации | Обычное приложение | Управляемое приложение |
| Модальные окна | Разрешены | Запрещены, используются оповещения |
Эта таблица помогает быстро определить, с каким типом формы вы имеете дело, и какие ограничения действуют. Например, если форма открывается в браузере — это гарантированно управляемая форма, потому что обычные формы в веб-клиенте не работают в принципе.
Как отличается код: директивы и работа с данными
В обычной форме можно написать ДокументОбъект.Записать() прямо в обработчике кнопки — и это сработает. В управляемой форме объектные типы (ДокументОбъект, СправочникОбъект и другие) недоступны на клиенте: попытка обратиться к ним вызовет ошибку компиляции или выполнения. Запись объекта выполняется только в серверной процедуре.
Типичный паттерн управляемой формы выглядит так: клиентская процедура собирает параметры и вызывает серверную, серверная работает с данными и возвращает результат, клиентская обновляет интерфейс. Каждый такой вызов — сетевой обмен, поэтому вызовы сервера в цикле — главный источник проблем производительности.
&НаКлиенте
Процедура ЗаписатьДокумент(Команда)
ЗаписатьДокументНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаписатьДокументНаСервере()
ДокОбъект = РеквизитФормыВЗначение("Объект");
ДокОбъект.Записать();
ЗначениеВРеквизитФормы(ДокОбъект, "Объект");
КонецПроцедурыОбратите внимание на пару методов РеквизитФормыВЗначение() и ЗначениеВРеквизитФормы() — они преобразуют данные формы в прикладной объект и обратно. Это стандартный приём, которого в обычных формах просто не существовало.
Совместимость и режимы запуска конфигурации
Конфигурация может работать в режиме обычного приложения, управляемого приложения или в режиме совместимости. Режим задаётся в свойствах конфигурации параметром «Режим использования модальности» и «Основной режим запуска». В управляемом приложении обычные формы не открываются — если у объекта нет управляемой формы, платформа попытается сгенерировать её автоматически, но не всегда успешно.
Обратная ситуация тоже возможна: управляемые формы могут открываться в толстом клиенте, запущенном в режиме обычного приложения, но это нестандартный сценарий. Типовые современные конфигурации (например, на базе БСП) рассчитаны только на управляемое приложение и тонкий/веб-клиент.
Когда какие формы выбирать
Для любой новой разработки выбор однозначен — управляемые формы. Обычные формы оправданы только в одном случае: поддержка старой конфигурации, которая целиком работает в режиме обычного приложения, и переводить её пока никто не планирует. Смешивать подходы в новом коде не стоит.
Сравнение вариантов
Подходят только для сопровождения старых конфигураций на толстом клиенте. Ограничение: нет поддержки тонкого и веб-клиента, технология не развивается.
Стандарт для всей новой разработки: работают в тонком и веб-клиенте, поддерживаются платформой. Ограничение: требуют продуманного разделения кода и аккуратности с серверными вызовами.
Подходят для простых справочников и документов без специфики интерфейса. Ограничение: минимальные возможности настройки, при росте требований форму придётся создавать явно.
При сомнениях ориентируйтесь на режим запуска прикладного решения: если пользователи работают через браузер или тонкий клиент — только управляемые формы, без альтернатив.
Как перевести обычную форму на управляемую
Автоматического конвертера, который перенесёт форму со всей логикой, не существует — миграция делается вручную. Объём работ зависит от сложности формы: простой справочник переносится за минуты, форма документа с десятками обработчиков может занять несколько дней.
- 1Создайте у объекта новую форму и укажите для неё тип «Управляемая форма»
- 2Перенесите реквизиты и элементы, ориентируясь на дерево элементов, а не на координаты
- 3Разнесите код модуля по директивам: интерфейсная логика — &НаКлиенте, работа с данными — &НаСервере
- 4Замените модальные вызовы (Вопрос, ОткрытьЗначение) на неблокирующие аналоги с оповещениями
- 5Замените прямую работу с объектами на серверные процедуры с РеквизитФормыВЗначение
- 6Протестируйте форму в тонком и веб-клиенте, проверьте количество серверных вызовов
Отдельного внимания заслуживает модальность. Методы Вопрос(), Предупреждение(), ОткрытьЗначение() в управляемых формах блокируют интерфейс и в веб-клиенте работают некорректно или запрещены. Их заменяют асинхронные аналоги: ПоказатьВопрос(), ПоказатьПредупреждение() с передачей описания оповещения.
Производительность и типичные проблемы
Главный фактор скорости управляемой формы — количество серверных вызовов. Каждый вызов несёт накладные расходы на сериализацию данных формы, передачу по сети и десериализацию. Если при открытии формы выполняется несколько десятков вызовов, пользователь почувствует задержку даже на быстром сервере.
Проверить ситуацию можно через технологический журнал или замер времени в конфигураторе. Практическое правило: собирайте все нужные данные одним серверным вызовом, передавайте на сервер только необходимые параметры, а не всю форму, и выносите тяжёлые операции в фоновые задания.
Как проверить результат
Открывается без ошибок, все элементы на месте
Ошибки компиляции модуля или пустые элементы — код не разнесён по директивам
Нет модальных окон и блокировок, интерфейс отзывчив
Появляются ошибки о модальности или форма зависает
Форма открывается за время, комфортное для пользователя, серверных вызовов немного
Заметная пауза, в замере десятки серверных вызовов
Запись выполняется в серверной процедуре, данные на форме обновляются
Ошибка доступности объектных типов на клиенте
Часто задаваемые вопросы
Можно ли открыть обычную форму в управляемом приложении?
Нет, напрямую нельзя. Если у объекта есть только обычная форма, а конфигурация запущена в управляемом приложении, платформа создаст управляемую форму автоматически. Для полноценной работы нужно разработать управляемую форму явно.
Почему в управляемой форме недоступен ДокументОбъект на клиенте?
Объектные типы требуют доступа к базе данных и существуют только на сервере. Клиент работает с данными формы — специальными сериализуемыми структурами. Для работы с объектом используют серверную процедуру и методы РеквизитФормыВЗначение и ЗначениеВРеквизитФормы.
Что делать, если старая конфигурация целиком на обычных формах?
Она продолжит работать в режиме обычного приложения на толстом клиенте. Переводить на управляемые формы стоит, если нужны тонкий или веб-клиент, либо планируется переход на современную типовую конфигурацию. Миграцию выполняют поэтапно, начиная с самых используемых форм.
Как заменить модальный вызов Вопрос() в управляемой форме?
Используйте метод ПоказатьВопрос с передачей описания оповещения — процедуры, которая получит результат после ответа пользователя. Логика продолжения переносится в эту процедуру-обработчик, а не пишется после вызова, как в модальном варианте.
Какие формы быстрее — обычные или управляемые?
Однозначного ответа нет. Обычная форма на толстом клиенте с локальной базой может открываться быстрее, так как не делает сетевых вызовов. Но грамотно написанная управляемая форма с минимальным числом серверных вызовов работает сопоставимо и при этом доступна через браузер. Плохо написанная управляемая форма с вызовами сервера в цикле будет медленнее любой обычной.
Нужно ли изучать обычные формы новому разработчику?
Глубоко — нет. Достаточно понимать их устройство на уровне чтения кода, чтобы сопровождать старые решения и выполнять миграцию. Основной фокус в обучении стоит делать на управляемые формы, так как вся современная разработка ведётся на них.
Что важно запомнить
Обычные формы работают только на толстом клиенте и исполняют весь код на клиенте; управляемые — декларативны, делят код на клиент и сервер и поддерживают тонкий и веб-клиент. Для новой разработки используются только управляемые формы, а миграция старых форм выполняется вручную с переработкой кода и заменой модальных вызовов.