Решил разместить свое решение.
Иногда надо сделать внешнюю обработку с несколькими формами. Но как открыть одну форму внешней обработки из другой, не вставляя эту обработку в конфигурацию? Ведь в команде «ПолучитьФорму» мы должны прописать полный путь к форме обработки. А для нашей внешней обработки этот путь система не знает.
Предлагаю такой путь решения:
1. При открытии основной формы внешней обработки определяем путь к ее файлу. Это штатными средствами не сделать. Поэтому, используем WScript.Shell.
2. Помещаем файл внешней обработки во временное хранилище. Получаем адрес во временном хранилище.
3. По этому адресу регистрируем обработку в системе с помощью команды ВнешниеОбработки.Подключить . Эта команда возвращает нам имя, под которым обработка зарегистрировалась в системе.
4. Все. Теперь мы знаем, что передавать в команду ПолучитьФорму в качестве пути к форме:
«ВнешняяОбработка.»+ИмяПодКоторымЗарегистрированаОбработка+».Форма.»+ИмяФормыДляОткрытия
Такой механизм должен работать в управляемом режиме для тонкого, толстого и web клиентов.
Пример обработки с двумя формами присоединен к публикации
На ИТС есть статья «Как программно открыть внешнюю обработку?». Там даже подробнее все описано.
Статью читал. Там написано как программно открыть внешнюю обработку. Но не написано, как из самой внешней обработки открыть вторую форму этой же внешней обработки.
В статье сказано, что для того, чтобы программно открыть внешнюю обработку, нужно знать полное имя ее файла.
В нашей ситуации мы его не знаем. Пользователь может положить внешнюю обработку в любой каталог.
Многих ставит в тупик тот факт, что не существует штатных средств узнать полное имя файла обработки из нее самой.
Я демонстрирую, как это можно сделать с помощью WScript.Shell
ВнешняяОбработкаОбъект.ИспользуемоеИмяФайла
(3) Ответ неверный. Это для обычной формы.
(4) Поручик,
ответ верный, используй &НаСервере и РеквизитФормыВЗначение()
Точно!
&НаСервере
….
РеквизитФормыВЗначение(«Объект»).ИспользуемоеИмяФайла
….
Можно и без WScript обойтись.
Меня смутило, что синтакс-помощнике написано:
ВнешняяОбработка (ExternalDataProcessor)
ИспользуемоеИмяФайла (UsedFileName)
Использование:Только чтение.
Описание: Тип: Строка. Содержит полное имя файла внешней обработки.
Доступность: Толстый клиент.
Т.е., что на толстом клиенте доступно только.
(6) в справке к 8.2.15.310 указано, что сервер и толстый клиент
Да. Вижу. У меня подревнее платформа.
Спасибо.
Не знаю… вот такая строка срабатывает без таких извращений.
ОткрытьФорму(«ВнешняяОбработка.ЗаполнениеОС.Форма.ФормаОсновныеСредства», Новый Структура(«ЗначенияЗаполнения», ЗначенияЗаполнения), ВладелецФормы, КлючИзПараметров);
где ФормаОсновныеСредства одна из форм внешней обработки заполнение ОС.
(9) Это если обработка в конфе.
(9) Slon1c, для этого сначала обработка должна быть подключена к конфигурации через ВнешниеОбработки.Подключить
Это и демонстрируется в моем примере
По-моему, всё гораздо проще:
&НаСервере
Функция ПолучитьИмяФормы()
Стр = СокрЛП(РеквизитФормыВЗначение(«Объект»)); //»ВнешняяОбработкаОбъект.Имя» или «ОбработкаОбъект.Имя»
ПутьКОбработке = СтрЗаменить(Стр,»Объект.», «.»);
Возврат ПутьКОбработке+».Форма.ВыборДокументов»);
КонецФункции
И неважно, внешняя обработка или встроенная