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

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

Как узнать, управляемые формы или обычные в 1С

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

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

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

Как отличить управляемые формы по внешнему виду интерфейса

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

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

Обычные формы выглядят как классические окна Windows: серая палитра, жёстко зафиксированное расположение элементов, кнопки «ОК», «Записать», «Закрыть» внизу формы, вкладки с классическим оформлением. Такие формы открываются только в толстом или тонком клиенте в режиме обычного приложения.

Командная панель сверху формыУправляемые формы

Кнопки действий расположены в панели над содержимым, а не внизу окна

Кнопки ОК/Записать/Закрыть внизуОбычные формы

Классическое расположение кнопок — признак обычного приложения

Работа в браузереУправляемые формы

Веб-клиент поддерживает только управляемые формы

Панель разделов слева или сверхуУправляемый интерфейс

Интерфейс «Такси» или 8.2 строится на управляемых формах

Как проверить тип приложения через пункт «О программе»

Если визуальные признаки не дают однозначного ответа, откройте сведения о программе. В меню «Файл» (или через кнопку главного меню в интерфейсе «Такси») выберите пункт «О программе». В открывшемся окне указаны версия платформы, режим запуска и разрядность клиента.

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

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

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

Самый точный способ — посмотреть настройки в конфигураторе. Откройте конфигурацию базы (меню «Конфигурация» → «Открыть конфигурацию»), выделите корневой узел дерева конфигурации и откройте палитру свойств (правый клик → «Свойства»).

Найдите свойство «Основной режим запуска». Возможные значения: «Управляемое приложение», «Обычное приложение» и «Выбирать автоматически». Именно этот параметр определяет, в каком режиме стартует клиент по умолчанию. Рядом находится свойство «Режим использования модальности», которое также характерно для управляемых решений.

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

Как узнать тип формы конкретного объекта

У каждого объекта метаданных — справочника, документа, отчёта, обработки — может быть несколько форм разных типов. Чтобы узнать, какая форма используется у конкретного объекта, раскройте его в дереве конфигурации и посмотрите ветку «Формы».

Двойной клик по форме открывает её в редакторе. Редактор управляемой формы выглядит как дерево элементов с настройками в правой части и вкладками «Форма» и «Модуль» внизу. Редактор обычной формы — это визуальный конструктор с размещением элементов прямо на макете окна. Различить их по виду редактора проще всего.

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

bsl
&НаКлиенте
Процедура Команда1(Команда)
	// код управляемой формы
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	// характерный обработчик управляемой формы
КонецПроцедуры

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

Как определить тип форм программно

Иногда тип форм нужно определить из кода — например, чтобы обработка корректно работала в обоих режимах. Для этого в платформе есть системное перечисление и функции проверки.

Текущий режим запуска клиента можно получить через выражение, проверяющее значение, возвращаемое при анализе параметров сеанса, но на практике чаще используют конструкцию с ТекущийРежимЗапуска() — она возвращает значение типа РежимЗапускаКлиентскогоПриложения: УправляемоеПриложение или ОбычноеПриложение. Если функция возвращает Неопределено, код выполняется на сервере, где понятия режима запуска нет.

bsl
Если ТекущийРежимЗапуска() = РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение Тогда
	Сообщить("Работают управляемые формы");
ИначеЕсли ТекущийРежимЗапуска() = РежимЗапускаКлиентскогоПриложения.ОбычноеПриложение Тогда
	Сообщить("Работают обычные формы");
КонецЕсли;

Для проверки типа конкретной открытой формы в коде используют свойство формы ИмяФормы и наличие характерных свойств: у управляемой формы есть свойство КоманднаяПанель и уникальный идентификатор УникальныйИдентификатор формы, у обычной — свойство Панель. Проверка через попытку обращения к свойству — рабочий, хотя и не самый элегантный приём для универсального кода.

Смешанный режим: когда в конфигурации оба типа форм

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

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

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

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

Как выбрать способ проверки

Нужен быстрый ответ без доступа к конфигураторуПосмотрите на интерфейс и откройте «О программе» — проверьте режим запуска
Программа работает в браузереФормы управляемые — веб-клиент не поддерживает обычные
Нужен точный ответ для разработкиОткройте конфигуратор и проверьте «Основной режим запуска» и формы конкретных объектов
Пишете универсальный код для обоих режимовИспользуйте ТекущийРежимЗапуска() с проверкой на Неопределено
Конфигурация частично переведена на новый интерфейсПроверяйте тип формы каждого нужного объекта отдельно в ветке «Формы»

Частые ошибки при определении типа форм

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

Вторая ошибка — путать интерфейс «Такси» с типом форм. «Такси» — это оформление управляемого интерфейса, но управляемые формы существовали и в интерфейсе версии 8.2. Обратное неверно всегда: если вы видите «Такси», формы точно управляемые.

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

Типичные ошибки
01
Судить о типе форм по версии платформы — платформа 8.3 поддерживает оба режима, решает настройка конфигурации
02
Путать интерфейс «Такси» с типом форм — «Такси» лишь оформление управляемого интерфейса
03
Считать, что объект без явной формы работает в обычном режиме — платформа автоматически генерирует форму под текущий режим
04
Проверять режим запуска на сервере — ТекущийРежимЗапуска() там возвращает Неопределено
05
Делать вывод по одному объекту в смешанной конфигурации — тип форм нужно проверять для каждого объекта отдельно

Что делать после определения типа форм

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

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

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

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

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

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

Можно ли запустить обычные формы в веб-клиенте 1С?

Нет. Веб-клиент платформы 1С поддерживает только управляемые формы. Если конфигурация содержит только обычные формы, работать с ней через браузер не получится — потребуется толстый или тонкий клиент в режиме обычного приложения либо перевод объектов на управляемые формы.

Что означает значение «Выбирать автоматически» в свойстве «Основной режим запуска»?

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

Как понять, какая форма откроется, если у объекта есть и обычная, и управляемая?

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

Почему в модуле формы нет директив &НаКлиенте и &НаСервере?

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

Влияет ли тип форм на скорость работы конфигурации?

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

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

Полноценного автоматического конвертера в платформе нет. Платформа умеет генерировать управляемую форму по метаданным объекта, но весь прикладной код модуля, обработчики и нестандартные элементы придётся переносить и переписывать вручную с учётом клиент-серверной модели.