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

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При переходе со старых конфигураций на новые или при необходимости адаптировать современную разработку под устаревшие системы (например, перенос функционала из БП 3.0 в БП 2.0 или УПП 1.3), программисты сталкиваются с дилеммой: переписывать ли внешнюю обработку полностью или можно заставить управляемые формы (УФ) работать в обычном приложении (ОФ). Рассмотрим подробнее, как решить эту задачу и какие механизмы платформы 1С нам в этом помогут.

Способ 1. Встраивание обработки в конфигурацию

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

Для того чтобы этот метод сработал, выполним следующие шаги в конфигураторе:

  1. Перейдем в свойства корневого объекта конфигурации.
  2. Найдем флаг «Использовать управляемые формы в толстом клиенте в обычном режиме» и убедимся, что он включен.
  3. Добавим нашу обработку в ветку «Обработки» метаданных.
  4. Убедимся, что у обработки назначена основная управляемая форма.

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

Способ 2. Использование расширений конфигурации

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

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

Способ 3. Создание «гибридной» внешней обработки

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

Разберем алгоритм действий по шагам:

  1. В нашей внешней обработке (где уже есть УФ) создадим одну новую форму — Обычную.
  2. Назначим эту обычную форму Основной в свойствах обработки.
  3. В модуле этой обычной формы, в обработчике события ПриОткрытии, пропишем программный вызов управляемой формы.

Пример кода для программного открытия управляемой формы из обычной:


Процедура ПриОткрытии()
    // Укажем путь к управляемой форме текущей внешней обработки
    ИмяФормы = "ВнешняяОбработка.ИмяВашейОбработки.Форма.ИмяУправляемойФормы";
    ОткрытьФорму(ИмяФормы);
    
    // Закрываем текущую пустую обычную форму, так как она нам больше не нужна
    Отказ = Истина;
    СтандартнаяОбработка = Ложь;
КонецПроцедуры

Важно помнить, что для работы этого метода в параметрах запуска (Сервис — Параметры — Запуск 1С) должен быть выбран Толстый клиент, так как обычный интерфейс не живет в тонком клиенте.

Способ 4. Полная конвертация (переписывание) формы

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

1. Разделение контекста

В управляемых формах мы привыкли к жестким директивам &НаКлиенте и &НаСервере. В обычной форме весь код модуля выполняется на клиенте (в контексте толстого клиента). Посмотрим, что нужно изменить:

2. Типы данных формы

В УФ основным объектом данных является ДанныеФормыСтруктура (или ДанныеФормыКоллекция для таблиц). В ОФ мы работаем напрямую с объектом ЭтотОбъект. Проанализируем пример трансформации обращения к реквизитам:

В управляемой форме:

Объект.Реквизит1 = "Значение";

В обычной форме:

ЭтотОбъект.Реквизит1 = "Значение"; 3. Элементы управления и иерархия

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

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

Выясним, какие ограничения накладываются на управляемую форму, когда она запущена «внутри» обычного приложения:

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

← На главную