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