Обычные и управляемые формы 1С: чем отличаются и что выбрать
Содержание
Главное отличие: в обычном приложении вся логика формы работает на компьютере пользователя, а в управляемом форма делится на клиентскую и серверную части. Поэтому обычные формы открываются только в толстом клиенте, а управляемые — ещё и в тонком клиенте и в браузере.
Дальше — что это значит для архитектуры, скорости, разработки и переезда. Если вы выбираете платформу для новой конфигурации или решаете, стоит ли трогать старую доработку, начните с таблицы ниже.
Сравнительная таблица: обычное и управляемое приложение
| Параметр | Обычный интерфейс | Управляемый интерфейс |
|---|---|---|
| Где выполняется код формы | Целиком на клиенте | Клиент и сервер, раздельно |
| Толстый клиент | Да | Да |
| Тонкий клиент | Нет | Да |
| Веб-клиент (браузер) | Нет | Да |
| Мобильная платформа | Нет | Да |
| Расположение элементов | Вручную, по координатам | Автоматическое, по иерархии групп |
| Доступ к данным объекта | Прямой, из формы | Через реквизиты формы, с вызовом сервера |
| Меню и навигация | Главное меню, панели инструментов | Панель разделов, командный интерфейс |
| Списки | Табличное поле | Динамический список |
| Современные конфигурации | Устаревшие версии | Все актуальные типовые решения |
Таблица — ориентир. Ниже каждая строка разобрана подробнее.
Как устроены обычные и управляемые формы: архитектура
В обычной форме всё происходит в одном месте. Клиентское приложение запрашивает объект у сервера, получает его целиком и дальше работает с ним локально: читает реквизиты, проверяет заполнение, считает, пишет обратно. Модуль формы — это обычный код, который видит все данные объекта.
В управляемой форме так нельзя. Форма разделена на две половины, и между ними есть граница.
Клиент и сервер в управляемой форме
Код пишется в процедурах с директивами компиляции:
&НаКлиенте— выполняется у пользователя: реакция на нажатие, открытие другой формы, вывод сообщения;&НаСервере— выполняется на сервере: чтение и запись данных, запросы, проведение документа;&НаСервереБезКонтекста— серверный вызов без передачи реквизитов формы, самый лёгкий по трафику.
Данные формы живут в реквизитах. Это не сам объект, а его «слепок», который передаётся между клиентом и сервером при каждом серверном вызове.
Правило практика: клиентских процедур должно быть много, а серверных вызовов — мало. Один вызов на действие лучше, чем пять мелких подряд.
Что происходит в обычной форме
Толстый клиент держит в памяти весь объект и сам решает, когда обращаться к базе. Нет явного разделения вызовов, поэтому код проще писать, но он плохо переносится на другой тип клиента. Любое обращение к данным из модуля формы — потенциальная проблема при переезде.
С какими клиентами работают: совместимость и платформы
Тип клиента определяет, какие формы вы вообще можете открыть.
| Клиент | Обычные формы | Управляемые формы |
|---|---|---|
| Толстый клиент | ✅ | ✅ |
| Тонкий клиент | ❌ | ✅ |
| Веб-клиент | ❌ | ✅ |
| Мобильное приложение | ❌ | ✅ |
Если в конфигурации остались обычные формы, пользователь в браузере или в тонком клиенте их не откроет. Платформа либо выдаст ошибку, либо форма не появится вовсе.
Где обычные формы ещё встречаются
- старые типовые конфигурации, снятые с поддержки;
- самописные обработки и внешние отчёты, сделанные много лет назад;
- служебные формы платформы, которые вызываются в толстом клиенте (например, часть сервисных инструментов администратора).
Работать с ними можно, но придётся запускать базу в толстом клиенте. Это неудобно для терминального сервера и невозможно для удалённого доступа через интернет без полноценного клиента.
Как запускается приложение
Режим запуска задаётся в свойствах конфигурации (основной режим запуска) и в настройках информационной базы в окне запуска. Для управляемого приложения конфигурация должна быть настроена на «Управляемое приложение». Если выбран обычный режим, платформа покажет интерфейс главного меню, а не панель разделов.
Переключение режима запуска само по себе формы не конвертирует. Обычные формы в управляемом приложении по-прежнему не работают в тонком клиенте и браузере.
Скорость работы и обмен данными с сервером
Здесь легко ошибиться: управляемые формы не всегда быстрее. Всё зависит от канала и от того, как написан код.
Когда выигрывает управляемый интерфейс
При работе через интернет, VPN, терминальный сервер или веб-клиент. Тонкий клиент передаёт на сервер минимум данных. Пользователю уходит только то, что нужно для отображения, а не целый объект с табличными частями.
Динамические списки читают данные порциями. Открыв справочник на 500 000 элементов, вы получаете первые строки, а не всю выборку.
Когда разницы не заметно
В локальной сети с файловой базой на небольшой организации толстый клиент с обычной формой работает так же быстро, а иногда отзывчивее. Нет накладных расходов на передачу контекста между клиентом и сервером.
Где управляемые формы работают медленнее
Если код написан неаккуратно. Типичные причины:
- Серверный вызов внутри цикла по строкам табличной части. На 300 строках получаете 300 обращений к серверу.
- Передача на сервер огромных реквизитов формы, когда достаточно одного идентификатора.
- Обработчик изменения поля, который при каждом нажатии клавиши зовёт сервер.
Такой же код в обычной форме просто выполнился бы локально и не вызвал бы задержек. Поэтому «управляемое» не значит «автоматически быстрое».
Как разрабатываются и настраиваются формы
Разница в подходе заметна уже в конфигураторе.
Обычная форма: рисуем по координатам
Элементы размещаются на листе, как в старых редакторах форм: каждому задаётся положение и размер, пользователь видит ровно то, что нарисовал разработчик. При изменении разрешения экрана форма не перестраивается.
Плюс — полный контроль над внешним видом. Минус — каждое изменение вручную: добавили поле, подвинули остальные.
Управляемая форма: описываем структуру
Разработчик собирает форму из групп, полей и команд. Положение элементов платформа определяет сама. Вы указываете, что есть группа с двумя колонками и в ней такие-то поля, а как они лягут на экран — решает клиент.
Что это даёт:
- форма адаптируется к размеру окна и типу клиента;
- один и тот же макет работает в браузере и в тонком клиенте;
- пользователь может сам настроить форму: скрыть поле, поменять порядок, не трогая конфигурацию.
Последнее — важное отличие для сопровождения. В обычной форме пользовательская настройка внешнего вида практически недоступна.
Командный интерфейс и разделы
В управляемом приложении навигация строится вокруг разделов. Слева или сверху находится панель разделов, внутри каждого раздела — панель навигации и панель действий. Состав команд задаётся подсистемами конфигурации, а пользователь может выбрать, какие команды видеть.
В обычном приложении вместо этого главное меню с пунктами вроде «Справочники», «Документы», «Отчёты», а также панели инструментов.
В управляемом приложении доступно несколько вариантов оформления главного окна. Они меняют расположение панелей, но не саму архитектуру.
Что выбрать для новой разработки и старых доработок
Для новой разработки вопроса нет: пишите управляемые формы. Все актуальные типовые конфигурации (Бухгалтерия, ЗУП, Управление торговлей, ERP) работают только в управляемом режиме, и обновления выпускаются именно под него.
Для старых доработок решение зависит от сценария.
| Ситуация | Рекомендация |
|---|---|
| Старая конфигурация, база файловая, работаете в локальной сети | Можно оставить как есть, если нет планов на доступ через веб |
| Нужен доступ из браузера или удалённо | Переходить на управляемые формы |
| Конфигурация на поддержке, обновляете типовую | Дорабатывать только управляемыми формами |
| Одна внешняя обработка с обычной формой | Переписать, если обработкой пользуются в тонком клиенте |
| Конфигурация идёт на обновление платформы | Проверить, какие обычные формы остались, и составить список |
Если в базе остаётся много обычных форм, начинайте с тех, которыми пользуются чаще всего. Редкие отчёты можно переносить позже.
Переход на управляемые формы и ограничения
Платформа умеет преобразовывать обычные формы в управляемые, но результат — черновик, а не готовая замена. Автоматика переносит элементы и реквизиты, а логику модуля приходится разбирать вручную.
Порядок работ
- Создайте копию базы и работайте на ней. Не конвертируйте формы в рабочей базе без резервной копии.
- Составьте список обычных форм: открывайте объекты в конфигураторе и смотрите, какие формы не помечены как управляемые.
- Преобразуйте форму и проверьте, что она открывается в тонком клиенте.
- Пройдите по модулю формы и расставьте директивы
&НаКлиентеи&НаСервере. - Замените прямые обращения к объекту (
Объект.Реквизитв старом стиле) на работу с реквизитами формы там, где этого требует управляемая модель. - Переведите табличные поля на динамические списки.
- Проверьте в браузере и в тонком клиенте: открытие, запись, проведение, печать.
Где обычно ломается
- Код, который напрямую читает данные из элементов формы по имени, после переноса перестаёт находить их.
- Обращения к серверным функциям из клиентского кода без явной передачи данных.
- Расчёты в табличной части, завязанные на события обычного табличного поля.
- Обработки печати, которые вызывали формы толстого клиента.
- Внешние компоненты, которые работают только в толстом клиенте.
Что нельзя перенести один в один
Некоторые приёмы обычного интерфейса просто не имеют аналога. Нельзя положить на форму элемент в произвольное место с точностью до пикселя. Нельзя использовать некоторые компоненты, рассчитанные на оконный интерфейс. Это нормально: форму нужно перепроектировать, а не копировать.
Ограничения управляемого режима
- Не все старые внешние компоненты работают в браузере.
- Некоторые операции с локальными файлами требуют расширения для браузера или иного подхода.
- Для веб-клиента нужен веб-сервер и настроенная публикация базы.
- Обмен данными между клиентом и сервером ограничен типами, которые можно передать по границе вызова.
Типичные ошибки при работе с интерфейсами
- Считать, что режим «Управляемое приложение» автоматически делает все формы управляемыми.
- Оставлять обычные формы в конфигурации и удивляться, что веб-клиент не открывает документ.
- Писать в клиентской процедуре код, который читает базу: платформа выдаст ошибку или потребует серверный вызов.
- Заниматься «оптимизацией» обычных форм вместо переноса, когда цель — доступ из браузера.