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

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

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

Критическое ограничение платформы: почему нельзя просто запустить УФ в обычном режиме

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

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

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

Шаг 1. Настройка Конфигуратора для работы с двумя типами форм

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

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

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

Шаг 2. Перенос интерфейса и элементов формы

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

  1. В обычном интерфейсе позиционирование элементов является абсолютным (в пикселях), в отличие от автоматического резинового размещения в управляемых формах. Тщательно выравнивайте кнопки, поля ввода и табличные части.
  2. Связывание элементов с данными происходит через свойство Данные. Вместо привычного реквизита Объект.ИмяРеквизита в обычной форме вы будете напрямую связывать элементы с реквизитами обработки (например, просто ИмяРеквизита).

Шаг 3. Перенос и адаптация программного кода

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

Исключение директив компиляции

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

Что нужно сделать: полностью удалите из модуля обычной формы все директивы, такие как &НаКлиенте, &НаСервере, &НаСервереБезКонтекста.

Обращение к элементам управления

В управляемых формах работа с элементами интерфейса происходит через коллекцию Элементы. В обычных формах эта коллекция называется иначе.

Рассмотрим пример изменения доступности кнопки на форме:

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


&НаКлиенте
Процедура ЗаблокироватьИнтерфейс()
    Элементы.КнопкаВыполнить.Доступность = Ложь;
КонецПроцедуры

Адаптированный код для обычной формы:


Процедура ЗаблокироватьИнтерфейс()
    ЭлементыФормы.КнопкаВыполнить.Доступность = Ложь;
КонецПроцедуры

Обратите внимание на замену Элементы на ЭлементыФормы.

Работа с контекстом объекта обработки

В управляемой форме вы оперируете типом данных ДанныеФормыСтруктура (реквизит Объект). Чтобы вызвать экспортный метод из модуля объекта обработки, вам приходилось выполнять контекстный переход на сервер и конвертировать данные формы в прикладной объект:


&НаСервере
Процедура ВыполнитьДействиеНаСервере()
    ОбъектОбработки = РеквизитВЗначение("Объект");
    ОбъектОбработки.ВыполнитьПолезноеДействие();
    ЗначениеВРеквизит(ОбъектОбработки, "Объект");
КонецПроцедуры

В обычной форме вся работа происходит напрямую с контекстом самого объекта. Никаких преобразований делать не нужно. Доступ к методам модуля объекта осуществляется через ключевое слово ЭтотОбъект:


Процедура ВыполнитьДействиеНаКлиенте()
    ЭтотОбъект.ВыполнитьПолезноеДействие();
КонецПроцедуры

Это значительно упрощает код и избавляет от необходимости постоянного сериализации и десериализации данных между клиентом и сервером.

Сохранение состояния переменных модуля

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

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

Альтернативные обходные пути

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

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

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

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

Вариант Б. Принудительный запуск базы в управляемом режиме

Если пользователю требуется запустить обработку на УФ лишь изредка, можно временно переключить режим работы самого клиента 1С:

  1. Закройте программу 1С:Предприятие.
  2. В стартере 1С выберите нужную базу и нажмите кнопку Изменить.
  3. Перейдите на последнюю страницу настроек, где находится поле Дополнительные параметры запуска.
  4. Пропишите туда ключ запуска: /RunModeManagedApplication.
  5. Запустите базу. Она откроется в интерфейсе управляемого приложения, и вы сможете без проблем открыть вашу внешнюю обработку на УФ через стандартное меню «Файл — Открыть».
  6. Для возврата в обычный режим просто очистите это поле или замените ключ на /RunModeOrdinaryApplication.

Таким образом, мы детально разобрали все возможные варианты решения проблемы запуска обработок. Выбирайте наиболее подходящий под ваши задачи метод — от полной переработки кода до системных обходных путей платформы.

← На главную