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