Как открыть форму внешней обработки из другой формы внешней обработки. 8.2. Управляемый режим.

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

Иногда надо сделать внешнюю обработку с несколькими формами. Но как открыть одну форму внешней обработки из другой, не вставляя эту обработку в конфигурацию? Ведь в команде «ПолучитьФорму» мы должны прописать полный путь к форме обработки. А для нашей внешней обработки этот путь система не знает.

Предлагаю такой путь решения:

1. При открытии основной формы внешней обработки определяем путь к ее файлу. Это штатными средствами не сделать. Поэтому, используем WScript.Shell.

2. Помещаем файл внешней обработки во временное хранилище. Получаем адрес во временном хранилище.

3. По этому адресу регистрируем обработку в системе с помощью команды  ВнешниеОбработки.Подключить . Эта команда возвращает нам имя, под которым обработка зарегистрировалась в системе.

4. Все. Теперь мы знаем, что передавать в команду ПолучитьФорму в качестве пути к форме:

   «ВнешняяОбработка.»+ИмяПодКоторымЗарегистрированаОбработка+».Форма.»+ИмяФормыДляОткрытия

Такой механизм должен работать в управляемом режиме для тонкого, толстого и web клиентов.

Пример обработки с двумя формами присоединен к публикации

 

12 Comments

  1. maddy

    На ИТС есть статья «Как программно открыть внешнюю обработку?». Там даже подробнее все описано.

    Reply
  2. kirlog

    Статью читал. Там написано как программно открыть внешнюю обработку. Но не написано, как из самой внешней обработки открыть вторую форму этой же внешней обработки.

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

    В нашей ситуации мы его не знаем. Пользователь может положить внешнюю обработку в любой каталог.

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

    Я демонстрирую, как это можно сделать с помощью WScript.Shell

    Reply
  3. Danil.Potapov

    ВнешняяОбработкаОбъект.ИспользуемоеИмяФайла

    Reply
  4. Поручик

    (3) Ответ неверный. Это для обычной формы.

    Reply
  5. Danil.Potapov

    (4) Поручик,

    ответ верный, используй &НаСервере и РеквизитФормыВЗначение()

    Reply
  6. kirlog

    Точно!

    &НаСервере

    ….

    РеквизитФормыВЗначение(«Объект»).ИспользуемоеИмяФайла

    ….

    Можно и без WScript обойтись.

    Меня смутило, что синтакс-помощнике написано:

    ВнешняяОбработка (ExternalDataProcessor)

    ИспользуемоеИмяФайла (UsedFileName)

    Использование:Только чтение.

    Описание: Тип: Строка. Содержит полное имя файла внешней обработки.

    Доступность: Толстый клиент.

    Т.е., что на толстом клиенте доступно только.

    Reply
  7. Danil.Potapov

    (6) в справке к 8.2.15.310 указано, что сервер и толстый клиент

    Reply
  8. kirlog

    Да. Вижу. У меня подревнее платформа.

    Спасибо.

    Reply
  9. Slon1c

    Не знаю… вот такая строка срабатывает без таких извращений.

    ОткрытьФорму(«ВнешняяОбработка.ЗаполнениеОС.Форма.ФормаОсновныеСредства», Новый Структура(«ЗначенияЗаполнения», ЗначенияЗаполнения), ВладелецФормы, КлючИзПараметров);

    где ФормаОсновныеСредства одна из форм внешней обработки заполнение ОС.

    Reply
  10. matashin

    (9) Это если обработка в конфе.

    Reply
  11. kirlog

    (9) Slon1c, для этого сначала обработка должна быть подключена к конфигурации через ВнешниеОбработки.Подключить

    Это и демонстрируется в моем примере

    Reply
  12. UMM

    По-моему, всё гораздо проще:

    &НаСервере

    Функция ПолучитьИмяФормы()

    Стр = СокрЛП(РеквизитФормыВЗначение(«Объект»)); //»ВнешняяОбработкаОбъект.Имя» или «ОбработкаОбъект.Имя»

    ПутьКОбработке = СтрЗаменить(Стр,»Объект.», «.»);

    Возврат ПутьКОбработке+».Форма.ВыборДокументов»);

    КонецФункции

    И неважно, внешняя обработка или встроенная

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *