Ситуация, когда при попытке запустить внешнюю обработку (файл с расширением .epf) в программе 1С:Управление торговлей 10.3 (УТ 10.3) ровным счетом ничего не происходит, является классической технической дилеммой. Система не выдает ошибок, не закрывается аварийно — она просто игнорирует действие пользователя. Разберем детально, почему так происходит, и проанализируем возможные пути решения этой задачи.
Для начала проанализируем программную среду. Конфигурация УТ 10.3 разработана на базе так называемого «Обычного приложения». Это классический интерфейс 1С:Предприятия 8, который доминировал до появления платформы 8.2. В то же время современные обработки чаще всего пишутся для «Управляемого приложения» (которое используется в УТ 11, ERP или Бухгалтерии 3.0).
Когда мы пытаемся открыть файл в обычном приложении, платформа ищет в составе обработки объект типа «Обычная форма». Если разработчик создал только «Управляемую форму», платформа просто «не видит», что ей нужно отобразить на экране. Отсюда и возникает эффект «пустого клика»: команда на открытие подана, но подходящего визуального объекта для текущего режима запуска нет.
Рассмотрим, как убедиться в наших предположениях. Для этого нам потребуется режим Конфигуратор. Выполним следующие действия:
Файл — Открыть и выберем проблемный файл .epf.Если в списке присутствуют только формы с синими иконками, мы нашли корень проблемы: обработка предназначена для управляемого интерфейса и не может быть запущена в стандартном режиме УТ 10.3 без дополнительных манипуляций.
Разберем самый быстрый способ заставить систему «увидеть» форму. Платформа 1С 8.2 и 8.3 позволяет запускать управляемые формы внутри обычного приложения, но эта возможность должна быть явно включена в свойствах самой конфигурации. При использовании современных релизов может потребоваться форма подбора с установкой фокуса для УТ 10.3 на платформе 1С 8.3.25.
Внимание: этот метод требует изменения метаданных конфигурации, что снимет ее с полной поддержки (если она не была снята ранее).
Конфигурация — Открыть конфигурацию).Свойства.F7). Также для этих целей можно использовать исправление ошибок через расширения, чтобы не менять основную конфигурацию.После этой настройки платформа попытается открыть управляемую форму во встроенном контейнере. Однако помните, что если код внутри обработки использует специфические функции, доступные только в УТ 11 (например, обращения к процедурам общих модулей, которых нет в 10.3), обработка все равно выдаст ошибку при выполнении.
Если вы не хотите глобально менять свойства конфигурации, можно применить более тонкий подход — создать пустую обычную форму, которая будет служить «мостом».
ПриОткрытии, пропишем программный вызов управляемой формы. В некоторых сценариях полезно реализовать запрет одновременного открытия отдельного экземпляра обработки.Пример кода для реализации такого перехода:
Процедура ПриОткрытии()
// Укажем имя управляемой формы, которую нужно открыть
ИмяФормы = "ВнешняяОбработка.ИмяВашейОбработки.Форма.ИмяУправляемойФормы";
ОткрытьФорму(ИмяФормы);
// Закрываем текущую пустую обычную форму, так как она больше не нужна
ЭтаФорма.Закрыть();
КонецПроцедуры
Этот метод сработает только в том случае, если версия платформы 8.3 позволяет совмещать режимы, а сама логика обработки не привязана жестко к объектам метаданных современных конфигураций.
Проанализируем самый надежный, но и самый трудозатратный способ — переписывание обработки под обычные формы. Это необходимо, если обработка должна работать стабильно и не зависеть от специфических настроек платформы.
Основные отличия, которые придется учитывать:
&НаКлиенте, &НаСервере, &НаСервереБезКонтекста. В обычных формах их нет — весь код модуля формы выполняется на клиенте, а серверные вызовы происходят неявно при обращении к серверным объектам.ЭтаФорма.Объект или непосредственно обращаясь к реквизитам. В управляемых формах используется посредник — ДанныеФормыСтруктура, который нужно преобразовывать в прикладной объект методом ДанныеФормыВЗначение().ПоказатьВопрос() или ПоказатьВыборИзСписка() (асинхронные методы), в обычных формах заменяются на модальные аналоги: Вопрос() и ВыбратьИзСписка().Рассмотрим пример типичной конвертации логики. Если в управляемой форме код выглядел так:
&НаСервере
Процедура ВыполнитьДействиеНаСервере()
ОбъектОбработки = РеквизитФормыВЗначение("Объект");
ОбъектОбработки.СоздатьДокументы();
КонецПроцедуры
То в обычной форме УТ 10.3 код будет значительно проще и короче, так как контекст объекта доступен напрямую:
Процедура ВыполнитьДействие()
// В обычной форме 'ЭтотОбъект' доступен сразу
ЭтотОбъект.СоздатьДокументы();
КонецПроцедуры
Существует экзотический способ запустить такую обработку — принудительно запустить УТ 10.3 в режиме управляемого приложения. Для этого в настройках запуска базы (в окне выбора баз) в поле «Дополнительные параметры запуска» нужно прописать:
/RunModeManagedApplication
Проанализируем последствия: программа запустится, и ваша обработка откроется корректно. Однако основное меню (панель функций, интерфейс «Полный» и т.д.) исчезнет, так как в УТ 10.3 не нарисованы управляемые интерфейсы. Этот способ подходит только для разовой технологической операции, но не для постоянной работы пользователей.
Если вы столкнулись с тем, что внешняя обработка не открывается в УТ 10.3:
Помните, что УТ 10.4, упомянутая в некоторых обсуждениях, не существует как официальный продукт. Современным продолжением линейки является УТ 11, где все формы по умолчанию управляемые. Если ваша компания планирует использовать современное ПО и внешние сервисы, стоит задуматься о переходе на новую версию конфигурации.