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

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

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

Проанализируем типичные ошибки разработчика

Чаще всего при попытке открыть общую управляемую форму программисты используют устаревшие методы контекста и получают один из двух вариантов некорректного поведения:

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

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

Фирма 1С настоятельно не рекомендует использовать связку получения формы с последующим вызовом ее открытия (то есть комбинацию Форма = ПолучитьФорму(...) и Форма.Открыть()). Для открытия любых форм, включая управляемые в контексте обычного приложения, следует использовать метод глобального контекста ОткрытьФорму.

Посмотрим на пример правильного вызова:


// Правильный способ открытия общей управляемой формы
ИмяОткрываемойФормы = "ОбщаяФорма.лкСтруктураПодчиненности";
ОткрытьФорму(ИмяОткрываемойФормы);

Если нам необходимо передать параметры в эту форму при открытии, мы можем использовать структуру, передав ее вторым аргументом:


ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ДокументСсылка", ТекДокумент);

ОткрытьФорму("ОбщаяФорма.лкСтруктураПодчиненности", ПараметрыФормы);

Проверим настройки контекста (Толстый клиент)

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

  1. Глобальные настройки конфигурации. Убедимся, что в свойствах самой конфигурации (в корне дерева метаданных) установлена галочка Использовать управляемые формы в обычном приложении. Если настройка отключена, платформа физически не сможет отрисовать управляемый интерфейс поверх обычного.
  2. Свойства модуля общей формы. Зайдем в палитру свойств модуля разрабатываемой формы (лкСтруктураПодчиненности). Нам необходимо убедиться, что установлены правильные флажки вызова. Обязательно должен быть разрешен вызов в толстом клиенте.
  3. Директивы компиляции в коде. Внимательно посмотрим на код модуля формы. Часто разработчики используют директивы препроцессора, такие как #Если ТолстыйКлиентОбычноеПриложение Тогда. Если внутри таких инструкций скрыта логика, которая ломает инициализацию, или, наоборот, нужный код закрыт директивой #Если ТонкийКлиент, форма может закрыться с отказом.

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

← На главную