Как создать внешнюю обработку с двумя формами (обычной и управляемой) в 1С:Предприятии?

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

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

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

Шаг 1. Настройка параметров Конфигуратора

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

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

  1. Откроем Конфигуратор той базы, в которой мы ведем разработку.
  2. В главном меню перейдем по пути: Сервис — Параметры.
  3. В открывшемся окне выберем вкладку Общие.
  4. Найдем группу параметров Редактирование конфигурации для режимов запуска.
  5. Установим флаг напротив варианта Управляемое приложение и обычное приложение.
  6. Нажмем кнопку Применить (или ОК) для сохранения изменений.

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

Шаг 2. Создание форм в обработке

В нашей внешней обработке необходимо создать две формы:

  1. ФормаУправляемая — форма, которая будет использоваться для загрузки данных в базе с управляемым интерфейсом. При ее создании обязательно выбираем тип «Управляемая форма».
  2. ФормаОбычная — форма для выгрузки данных из базы с обычным интерфейсом. При создании выбираем тип «Обычная форма».

Шаг 3. Правильное назначение основных форм в свойствах

Чтобы платформа автоматически понимала, в каком окружении запущена обработка, и открывала релевантный интерфейс при интерактивном открытии файла (через меню «Файл — Открыть»), нам нужно сопоставить формы следующим образом:

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

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

Шаг 4. Обход ограничений платформы для внешних обработок

Рассмотрим очень важный технический нюанс, который часто упускают из виду начинающие разработчики. Существует жесткое ограничение платформы «1С:Предприятие 8»:

Управляемую форму внешней обработки (в формате .epf) физически невозможно запустить в режиме обычного приложения.

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

Если вам жизненно необходимо протестировать или использовать именно управляемую форму в обычном приложении, у вас есть два пути решения:

Также помните о клиент-серверной архитектуре и типах клиентов: обычные формы могут физически открываться и функционировать только в Толстом клиенте. Если пользователь запустит базу-источник (где происходит выгрузка на обычных формах) через Тонкий или Веб-клиент, обычная форма не откроется вообще.

Шаг 5. Разделение программного кода (Директивы препроцессора)

Так как логика обычных и управляемых форм кардинально отличается (в ОФ весь код выполняется на клиенте с прямым доступом к СУБД, а в УФ действует жесткое разделение на клиентский и серверный контексты), совместить их алгоритмы в модуле объекта обработки может быть непросто. Без разделения кода вы неизбежно столкнетесь с ошибками компиляции.

Проанализируем ситуацию и применим инструкции препроцессора для разделения кода в модуле объекта внешней обработки:


#Если Клиент Тогда
    // Данный блок кода компилируется только на клиенте (как в обычном, так и в управляемом приложении)
    
    #Если ТолстыйКлиентОбычноеПриложение Тогда
        // Этот код увидят только пользователи старого интерфейса при выгрузке данных
        Процедура ВыполнитьВыгрузкуВСтаромФормате() Экспорт
            // Специфический алгоритм работы с файлами и табличными частями обычных форм
        КонецПроцедуры
    #КонецЕсли

#КонецЕсли

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
    // Этот блок доступен на сервере 1С или в толстом клиенте обычного приложения,
    // где разрешено прямое обращение к базе данных и метаданным без ограничений тонкого клиента
    
    Функция ПолучитьДанныеДляЗагрузки(ПараметрыЗагрузки) Экспорт
        // Серверный код, используемый управляемой формой при импорте данных
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура";
        Возврат Запрос.Выполнить().Выгрузить();
    КонецФункции
#КонецЕсли

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

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

← На главную