Как открыть управляемую форму внешней обработки в толстом клиенте 1С: способы и нюансы

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

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

Обязательное условие: Настройка свойств конфигурации

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

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

Способ 1: Программное открытие через создание объекта обработки

Многие разработчики совершают ошибку, пытаясь использовать стандартный метод ОткрытьФорму() для внешней обработки в обычном приложении. Выясним причину, по которой это часто не срабатывает. В обычном режиме контекст выполнения ограничен, и прямой вызов управляемой формы внешней обработки через строку пути может быть недоступен. Рассмотрим более надежный метод через связку Создать и ПолучитьФорму.

Для реализации этого метода нам потребуется следующий алгоритм действий:

  1. Программно создать экземпляр внешней обработки.
  2. Явно запросить управляемую форму у созданного объекта.
  3. Вызвать метод открытия формы.

Посмотрим на пример кода, который реализует эту логику:


// Определяем путь к файлу обработки на диске
ПутьКФайлу = "C:\ExternalTools\MyManagedProcessing.epf";

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

// Получаем управляемую форму. 
// Если имя формы не указано, будет получена основная форма.
ИмяФормы = "Форма"; // или "УправляемаяФорма"
Форма = ОбработкаОбъект.ПолучитьФорму(ИмяФормы);

// Открываем форму для пользователя
Если Форма <> Неопределено Тогда
    Форма.Открыть();
КонецЕсли;

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

Способ 2: Использование Библиотеки стандартных подсистем (БСП)

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

Разберем по шагам, как это работает. В БСП реализованы специальные «прокладки» (врапперы). Когда вы регистрируете внешнюю обработку в справочнике, система сохраняет её в информационной базе. При запуске такой обработки механизмы БСП сами определяют тип формы и используют внутренние процедуры (например, ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКоманду()) для корректного отображения интерфейса. Это позволяет обойти ограничения интерактивного открытия через меню «Файл — Открыть», которое в толстом клиенте часто ориентировано только на обычные формы.

Способ 3: Метод «Оболочки» (Wrapper) внутри обработки

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

Рассмотрим подробнее реализацию этого метода:

  1. В составе внешней обработки создаем обычную (не управляемую) форму.
  2. В модуле этой формы в обработчике события ПриОткрытии пишем код для программного вызова нашей основной управляемой формы.
  3. Сразу после вызова управляемой формы мы закрываем текущую обычную форму (параметр Отказ = Истина).

Пример кода в модуле обычной формы:


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

Таким образом, для платформы в толстом клиенте входной точкой является привычная ей обычная форма, которая затем инициирует запуск управляемого интерфейса.

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

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

Проанализируем преимущества этого подхода:

Способ 5: Запуск отдельного процесса (Тонкий клиент)

В самых сложных случаях, когда управляемая форма использует специфические функции, доступные только в тонком клиенте (например, глубокая интеграция с веб-сервисами или сложные элементы оформления), мы можем прибегнуть к запуску отдельного процесса. Рассмотрим, как это сделать программно из толстого клиента с помощью функции ЗапуститьСистему().

Мы можем сформировать командную строку, которая запустит тонкий клиент той же информационной базы и сразу откроет нужную внешнюю обработку:


СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
// Формируем параметры запуска
// /Execute указывает на путь к внешней обработке
ПараметрыЗапуска = "ENTERPRISE /S " + СтрокаСоединения + " /Execute ""C:\MyWork.erf""";

// Запускаем тонкий клиент
ЗапуститьСистему(ПараметрыЗапуска);

Этот метод создаст второе окно программы, но зато обработка будет работать в своей «родной» среде тонкого клиента, что исключит любые проблемы с отображением или поведением интерфейса.

Ограничения и важные нюансы

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

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

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

← На главную