К статье
Практический материал

Разработка и Конфигурация · 15 мин

Обычное и управляемое приложение в 1С: в чём разница

Чем обычное приложение 1С отличается от управляемого: интерфейс, код, формы, совместимость. Как определить режим и что учесть при доработке конфигурации.

Обычное и управляемое приложение — это два режима работы клиентской части платформы 1С:Предприятие 8. Обычное приложение — исторически первый интерфейс, появившийся в платформе 8.0 и 8.1: формы рисуются на клиенте, код на встроенном языке исполняется преимущественно на стороне клиента и имеет прямой доступ к данным. Управляемое приложение появилось в платформе 8.2 и построено иначе: клиент получает от сервера описание формы, а вся логика разделена между клиентом и сервером с явными директивами компиляции.

Разница между режимами — не косметическая, а архитектурная. В обычном приложении разработчик работает с формой как с набором элементов управления, доступных напрямую из кода. В управляемом приложении форма декларативна: платформа сама решает, как её отрисовать на тонком клиенте, веб-клиенте или мобильном клиенте, поэтому прямое обращение к элементам формы ограничено, а серверный вызов становится отдельной операцией, которую нужно планировать.

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

Что такое обычное приложение и где оно ещё встречается

Обычное приложение — режим, в котором интерфейс строится классическим способом: форма хранится в конфигурации вместе с описанием всех элементов, а встроенный язык имеет прямой доступ к этим элементам и к объектам данных. Запрос к базе можно выполнить прямо из модуля формы на клиенте, без разделения контекста. Работает такой режим только в толстом клиенте.

Встретить обычное приложение можно в конфигурациях, созданных на платформе 8.0–8.1 и не переведённых на новый интерфейс: старые редакции «Управления торговлей 10.3», «Управления производственным предприятием 1.3», самописные решения. Некоторые организации сознательно остаются на обычном приложении, потому что переписывание форм и кода требует значительных трудозатрат.

Признак того, что перед вами обычное приложение: интерфейс с классическими панелями инструментов и меню, формы выглядят «по-старому», а в конфигураторе у формы есть режим «обычная форма». Если в свойствах конфигурации режим использования установлен в «Обычное приложение», управляемые формы в ней могут отсутствовать полностью.

Как устроено управляемое приложение

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

Ключевое изменение — разделение контекстов исполнения. Код в модуле формы помечается директивами: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста, &НаКлиентеНаСервереБезКонтекста. Клиентский код не имеет прямого доступа к базе данных: любой запрос, выборка или запись объекта выполняются только на сервере, а данные передаются на клиент в сериализованном виде.

Это меняет подход к разработке. В обычном приложении можно было в обработчике нажатия кнопки сразу выполнить запрос и заполнить таблицу. В управляемом — клиентский обработчик вызывает серверную процедуру, та выполняет запрос и возвращает результат. Каждый такой вызов — сетевое обращение, поэтому количество серверных вызовов напрямую влияет на отзывчивость формы.

Сравнение режимов по ключевым параметрам

Ниже — сопоставление характеристик, которые реально влияют на выбор режима и на трудоёмкость доработок.

ПараметрОбычное приложениеУправляемое приложение
КлиентыТолько толстый клиентТонкий, веб-, мобильный клиент
Доступ к данным из формыПрямой, с клиентаТолько через серверные процедуры
Тип формыОбычная, элементы адресуются напрямуюУправляемая, декларативная структура
ИнтерфейсМеню и панели инструментовИнтерфейс «Такси», разделы, панель навигации
Модальные окнаИспользуются свободноЗапрещены или ограничены, применяются обработчики ожидания и оповещения
Поддержка платформойСохраняется для совместимостиОсновное направление развития

Из таблицы следует практический вывод: если требуется доступ к базе через браузер или с планшета, обычное приложение не подходит в принципе — веб-клиент его не поддерживает. Если же решение работает только в локальной сети на толстых клиентах и не планирует развиваться, обычное приложение остаётся работоспособным вариантом.

Сравнение вариантов

Оставить обычное приложение

Подходит для стабильных старых конфигураций без потребности в веб-доступе. Ограничение: нет тонкого и веб-клиента, сложнее найти разработчиков под устаревшую модель.

Перейти на управляемое приложение

Подходит при потребности в веб-доступе, мобильной работе и развитии решения. Ограничение: требуется переработка форм и кода, затраты на тестирование.

Как определить режим запущенной конфигурации

Быстрее всего — посмотреть на интерфейс. Управляемое приложение в режиме «Такси» показывает панель разделов, панель навигации и панель действий; обычное — классическое главное меню и панели инструментов в стиле ранних версий Windows. Если сомнения остаются, откройте конфигуратор: в свойствах корня конфигурации есть параметр «Основной режим запуска», где указано «Обычное приложение», «Управляемое приложение» или «Выбирать автоматически».

Второй способ — посмотреть на формы. У обычной формы в конфигураторе есть визуальный редактор с точным расположением элементов и вкладка «Модуль» без директив компиляции. У управляемой формы — дерево элементов, список реквизитов, командная панель и обязательные директивы &НаКлиенте / &НаСервере в модуле.

Контрольные точки

Как проверить результат

Свойство конфигурации «Основной режим запуска»
Норма

Указан режим, который вы ожидаете увидеть

Тревожный признак

Режим не совпадает с тем, как выглядит интерфейс у пользователей

Модуль формы в конфигураторе
Норма

Управляемая форма содержит директивы &НаКлиенте / &НаСервере

Тревожный признак

Директив нет, хотя форма должна быть управляемой — вероятно, это обычная форма

Запуск через веб-клиент
Норма

Конфигурация открывается в браузере

Тревожный признак

Веб-клиент не запускается — конфигурация работает только в обычном приложении

Что меняется в коде при переходе на управляемое приложение

Первая группа изменений — запрет прямого доступа к данным на клиенте. Конструкции вида Запрос.Выполнить() или Справочники.Номенклатура.НайтиПоКоду() в клиентском контексте не скомпилируются. Их переносят в серверные процедуры, а на клиент возвращают готовые структуры, массивы или примитивные типы.

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

Третья группа — работа с элементами формы. В обычной форме доступен прямой синтаксис вида ЭлементыФормы.ТабличноеПоле1.Значение. В управляемой форме элементы — это только отображение; данные хранятся в реквизитах формы, и логика строится вокруг реквизитов, а не элементов. Попытка перенести старую логику «один к одному» — самая частая причина нерабочих форм после миграции.

bsl
&НаКлиенте
Процедура КнопкаВыполнить(Команда)
    Результат = ПолучитьДанныеНаСервере(ПараметрОтбора);
    Для Каждого Строка Из Результат Цикл
        Сообщить(Строка);
    КонецЦикла;
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьДанныеНаСервере(ПараметрОтбора)
    Запрос = Новый Запрос("ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура");
    Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Наименование");
КонецФункции

Как выбрать режим и спланировать переход

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

Для существующей конфигурации решение зависит от трёх факторов: объёма самописного кода, потребности в веб- и мобильном доступе и планов по обновлению на типовые релизы. Если конфигурация сильно доработана и доступ нужен только локально, переход можно откладывать. Если планируется переход на свежую типовую редакцию, она почти наверняка уже управляемая, и старые доработки придётся переносить в новую модель.

Маршрут решения

Как выбрать действие

Конфигурация типовая, обновления нужны регулярноПереходите на управляемую редакцию вендора, переносите доработки через расширения
Самописная конфигурация, нужен доступ из браузера или с мобильных устройствПланируйте миграцию на управляемое приложение — иначе веб-клиент недоступен
Самописная конфигурация, только локальная сеть, изменений не планируетсяМожно остаться на обычном приложении, но зафиксируйте версию платформы и не обновляйте её без тестирования
Начинается новая разработкаТолько управляемое приложение и интерфейс «Такси»

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

Порядок действий при миграции
  1. 1
    Сделайте полную копию информационной базы и проверьте её восстановление
  2. 2
    В свойствах конфигурации установите режим использования «Управляемое приложение и обычное приложение»
  3. 3
    Определите список объектов без управляемых форм и расставьте приоритеты по частоте использования
  4. 4
    Создайте управляемые формы для приоритетных объектов, перенесите логику с разделением на клиент и сервер
  5. 5
    Замените модальные вызовы на асинхронные аналоги с оповещениями
  6. 6
    Протестируйте в тонком клиенте и веб-клиенте, проверьте быстродействие серверных вызовов
  7. 7
    Переведите пользователей и переведите конфигурацию в режим «Управляемое приложение»

Типичные ошибки при работе с двумя режимами

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

Вторая ошибка — использование &НаСервере вместо &НаСервереБезКонтекста там, где данные формы не нужны. Процедура с контекстом тянет на сервер всю форму со всеми реквизитами, что увеличивает объём передаваемых данных. Если процедуре нужны только параметры, а не реквизиты формы, используйте вариант без контекста.

Третья ошибка — проверка только на толстом клиенте. Форма может корректно работать в толстом клиенте и падать в веб-клиенте из-за неподдерживаемых возможностей: модальных окон, COM-объектов, прямой работы с файловой системой клиента. Тестировать управляемое приложение нужно на всех типах клиентов, которые будут использоваться.

Типичные ошибки
01
Перенос кода из обычной формы без переработки — форма компилируется, но работает медленно из-за частых серверных вызовов
02
Использование &НаСервере вместо &НаСервереБезКонтекста — на сервер передаётся вся форма, растёт нагрузка
03
Модальные окна в управляемом приложении — в веб-клиенте они не работают, код останавливается
04
Тестирование только на толстом клиенте — ошибки веб-клиента обнаруживаются уже у пользователей
05
Прямая работа с файлами клиента без НачатьПомещениеФайла — в веб-клиенте такой код не выполняется

Ограничения и риски, о которых нужно знать

В управляемом приложении недоступны некоторые привычные механизмы: внешние компоненты и COM-соединение работают только на клиенте Windows и не работают в веб-клиенте; прямой доступ к файловой системе клиента заменён асинхронными методами с явным согласием пользователя. Если конфигурация завязана на такие механизмы (например, обмен через COM с другой базой), при миграции эти участки потребуют отдельного решения — обычно переноса на сервер.

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

Частые вопросы

Можно ли открыть обычную форму в управляемом приложении?

Да, платформа позволяет запускать обычные формы при работе в управляемом приложении, если это предусмотрено настройками и кодом. Это используют как временную меру при постепенной миграции. Долгосрочно такой гибрид не рекомендуется: он усложняет поддержку и не работает в веб-клиенте.

Почему в управляемой форме не работает запрос в обработчике кнопки?

Потому что обработчик выполняется на клиенте, а клиент не имеет доступа к базе данных. Вынесите запрос в серверную процедуру с директивой &НаСервере или &НаСервереБезКонтекста и вызовите её из клиентского обработчика, передав параметры и получив готовый результат.

Работает ли обычное приложение в веб-клиенте?

Нет. Веб-клиент поддерживает только управляемые формы. Если требуется доступ к базе через браузер, конфигурация должна работать в режиме управляемого приложения, иначе придётся использовать RDP или публикацию толстого клиента другими средствами.

Что быстрее работает — обычное или управляемое приложение?

Однозначного ответа нет, всё зависит от качества кода. Обычное приложение в локальной сети может отзываться быстрее, так как не делает лишних серверных вызовов. Грамотно написанное управляемое приложение с минимальным числом вызовов и пакетной передачей данных работает сопоставимо, а при удалённом доступе через интернет — заметно лучше за счёт тонкого клиента.

Нужно ли переписывать отчёты при переходе на управляемое приложение?

Отчёты на СКД, как правило, требуют минимальных изменений — достаточно создать управляемую форму отчёта или использовать стандартную. Отчёты с ручным программным формированием табличного документа и сложными обычными формами настроек придётся перерабатывать: форму делать управляемой, а формирование переносить на сервер.

Можно ли в одной конфигурации иметь и обычные, и управляемые формы?

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

Итог

Что важно запомнить

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