Разработка и Конфигурация · 9 мин
Как открыть управляемую форму в обычном приложении 1С
Способы открыть управляемую форму в обычном приложении 1С 8.2/8.3: внешние обработки, общие формы, код ОткрытьФорму, ограничения и типичные ошибки.
Обычное приложение (толстый клиент с обычными формами) и управляемое приложение используют разные механизмы форм, но платформа 1С позволяет открывать управляемые формы и в обычном режиме. Это бывает нужно, когда конфигурация работает в смешанном режиме, когда внешняя обработка написана под управляемые формы, а запускать её требуется из старого интерфейса, или когда часть объектов конфигурации имеет только управляемые формы.
Ключевой момент: управляемая форма может открыться в обычном приложении только если запуск выполняется в режиме, где платформа способна отобразить управляемый интерфейс. На практике это означает, что толстый клиент умеет показывать управляемые формы, а тонкий и веб-клиент работают с ними штатно. Ниже разобраны рабочие способы, ограничения и типичные ошибки.
Когда вообще возникает такая задача
Ситуация типична для конфигураций, которые долго работали в режиме обычного приложения, но постепенно переводятся на управляемые формы. Пользователи продолжают запускать программу в обычном режиме, а разработчик уже создал новые формы как управляемые. Открывать их нужно прямо из старого интерфейса — из кнопок, меню, кода обработчиков.
Вторая частая ситуация — внешние обработки и отчёты. Многие готовые решения поставляются с управляемыми формами, и при попытке открыть их в обычном приложении возникают ошибки вида «Обнаружены ошибки компиляции» или форма просто не отображается. Причина обычно не в самой форме, а в способе открытия и в директивах компиляции модуля.
Третий сценарий — объекты конфигурации (справочники, документы), у которых основная форма объявлена управляемой. При двойном щелчке в обычном приложении платформа в ряде случаев открывает такую форму сама, но программный вызов требует правильного синтаксиса.
Способ 1. Программное открытие через ОткрытьФорму
Основной и самый надёжный способ — метод глобального контекста ОткрытьФорму(). Он доступен и в обычном приложении, если вызов выполняется на клиенте. Синтаксис идентичен управляемому приложению:
ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаЭлемента", ПараметрыФормы, ЭтаФорма);
Первый параметр — полное имя формы: вид объекта, имя объекта, слово «Форма» и имя конкретной формы. Если у объекта назначена основная форма, можно указать имя без конкретной формы, например "Справочник.Номенклатура.ФормаОбъекта", и платформа подставит основную. Второй параметр — структура с параметрами открытия (например, Новый Структура("Ключ", СсылкаНаЭлемент) для открытия существующего объекта).
Для модального открытия используется ОткрытьФормуМодально(). Учтите, что в конфигурациях со свойством «Режим использования модальности» в значении «Не использовать» модальные вызовы запрещены, и код придётся переписывать на описания оповещений — это актуально и для обычного приложения, если планируется миграция.
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", ВыбраннаяСсылка);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента", ПараметрыФормы);Способ 2. Открытие внешней обработки с управляемой формой
Внешняя обработка (.epf) может содержать управляемую форму, и толстый клиент способен её открыть. Проблема в том, что штатный пункт «Файл → Открыть» в обычном приложении иногда открывает обработку некорректно, если у неё несколько форм или основная форма не назначена.
Надёжный путь — открывать обработку программно через ВнешниеОбработки.ПолучитьФорму() либо через ОткрытьФорму() с указанием внешней обработки. Во втором случае имя формы строится по шаблону "ВнешняяОбработка.ИмяОбработки.Форма.ИмяФормы", но обработка должна быть предварительно подключена (например, через справочник дополнительных отчётов и обработок).
Если обработка открывается напрямую из файла, убедитесь, что в конфигураторе у её основной формы установлен тип «Управляемая форма» и она назначена основной. Иначе платформа попытается построить обычную форму по умолчанию и завершится ошибкой.
- 1Откройте обработку в конфигураторе и проверьте, что у основной формы тип «Управляемая форма»
- 2Убедитесь, что форма назначена основной для обработки
- 3В обычном приложении откройте обработку через Файл → Открыть или программно через ОткрытьФорму
- 4Проверьте, что форма отрисовалась и обработчики команд выполняются без ошибок компиляции
Настройка формы объекта в конфигураторе
Чтобы объект конфигурации открывался управляемой формой в обычном приложении, у объекта должна существовать управляемая форма и она должна быть назначена основной. Откройте свойства объекта (справочника, документа), перейдите на закладку «Формы» и проверьте поля «Форма объекта», «Форма списка» и «Форма выбора».
Если у объекта одновременно есть обычная и управляемая формы, поведение зависит от того, какая назначена основной. В обычном приложении при интерактивном открытии платформа ориентируется на основную форму; если основная — управляемая, толстый клиент откроет именно её. Программное открытие через ОткрытьФорму() с явным именем формы игнорирует назначение основной.
При создании новой формы в конструкторе выберите тип «Управляемая форма». Переключить тип существующей формы штатными средствами нельзя — обычную форму придётся пересоздавать как управляемую и переносить код с адаптацией: многие методы обычных форм (например, прямая работа с элементами формы) в управляемом контексте недоступны.
Директивы компиляции и контекст выполнения
Главный источник ошибок при открытии управляемых форм в обычном приложении — директивы компиляции в модуле формы. Управляемая форма компилируется в контекстах &НаКлиенте и &НаСервере, а обычный код часто пишется без директив и рассчитан на толстый клиент. Если в модуле управляемой формы встретится метод, недоступный на сервере или в тонком клиенте, форма не откроется.
Проверяйте, что серверные процедуры имеют директиву &НаСервере, клиентские — &НаКлиенте, а вызовы между контекстами идут через серверные процедуры без директивы «ВызовСервера»-конфликтов. Обращения к модальным методам, к объекту ЭлементыФормы (это API обычных форм; в управляемой форме используется Элементы) — типичные признаки неперенесённого кода.
Ограничения и проверка результата
Толстый клиент отображает управляемые формы, но часть возможностей управляемого интерфейса (панели навигации, такси-элементы, некоторые виды группировок) в обычном приложении ведёт себя иначе или игнорируется. Это не ошибка — форма остаётся работоспособной, просто интерфейс проще.
Есть и обратное ограничение: тонкий и веб-клиент обычные формы не открывают вовсе. Поэтому если конфигурация запускается в разных клиентах, управляемая форма — единственный универсальный вариант, а смешанный код нужно тестировать в каждом режиме запуска отдельно.
Как проверить результат
Форма отображается, элементы доступны, ошибок в окне сообщений нет
Ошибка компиляции модуля или пустое окно — проверяйте директивы и тип формы
При открытии по ключу показан нужный объект
Открывается новый пустой объект — параметр Ключ не передан или имя параметра неверно
Команды и кнопки выполняются без исключений
Исключение при нажатии — обработчик в недоступном контексте
Ответы на частые вопросы
Можно ли открыть обычную форму в управляемом приложении?
Нет, в управляемом приложении (тонкий, веб-клиент, толстый в режиме управляемого приложения) обычные формы недоступны. Обратная ситуация — открытие управляемой формы в обычном приложении — поддерживается толстым клиентом.
Почему ОткрытьФорму выдаёт ошибку «Метод не обнаружен»?
Чаще всего вызов выполняется в серверном контексте или в модуле обычной формы без клиентского контекста. Перенесите вызов в процедуру с директивой &НаКлиенте либо в клиентский обработчик обычной формы.
Как открыть управляемую форму списка с отбором?
Передайте в параметрах структуру с ключом «Отбор», значением которой будет другая структура: имя поля — значение отбора. Например: Новый Структура("Отбор", Новый Структура("Владелец", СсылкаНаКонтрагента)). Управляемая форма списка применит отбор автоматически.
Внешняя обработка открывается пустой или не открывается вовсе. Что проверить?
Проверьте, что у обработки есть форма с типом «Управляемая форма», она назначена основной, модуль формы компилируется без ошибок (меню Конфигурация → Проверка конфигурации в конфигураторе с открытой обработкой), а файл не заблокирован антивирусом или правами доступа.
Нужно ли менять режим запуска конфигурации, чтобы использовать управляемые формы?
Нет. Свойство конфигурации «Основной режим запуска» определяет интерфейс по умолчанию, но толстый клиент в режиме обычного приложения способен показывать управляемые формы при программном или интерактивном открытии. Для полноценной работы управляемого интерфейса режим всё же придётся переключить.
Что важно запомнить
Управляемая форма открывается в обычном приложении через ОткрытьФорму() на клиенте; толстый клиент её отображает. Для внешних обработок назначьте основную управляемую форму. Следите за директивами компиляции и не используйте API обычных форм в управляемом модуле — это главные причины ошибок.