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

23.05.12

Разработка - Универсальные функции

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Файл примера обработки с двумя формами
.epf 7,67Kb
83 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

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

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

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

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

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

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

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

 

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3354    Abysswalker    8    

44

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    6236    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    48445    dimanich70    83    

169

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7272    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    60522    atdonya    31    

69

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    9049    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. maddy 20 23.05.12 17:12 Сейчас в теме
На ИТС есть статья "Как программно открыть внешнюю обработку?". Там даже подробнее все описано.
2. kirlog 139 23.05.12 17:42 Сейчас в теме
Статью читал. Там написано как программно открыть внешнюю обработку. Но не написано, как из самой внешней обработки открыть вторую форму этой же внешней обработки.

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

Многих ставит в тупик тот факт, что не существует штатных средств узнать полное имя файла обработки из нее самой.
Я демонстрирую, как это можно сделать с помощью WScript.Shell
jobkostya1c_ERP; truba; SirYozha; +3 Ответить
3. Danil.Potapov 524 23.05.12 17:55 Сейчас в теме
ВнешняяОбработкаОбъект.ИспользуемоеИмяФайла
4. Поручик 4599 23.05.12 18:05 Сейчас в теме
(3) Ответ неверный. Это для обычной формы.
5. Danil.Potapov 524 23.05.12 18:11 Сейчас в теме
(4) Поручик,
ответ верный, используй &НаСервере и РеквизитФормыВЗначение()
truba; SirYozha; +2 Ответить
6. kirlog 139 23.05.12 18:27 Сейчас в теме
Точно!

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

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

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

ВнешняяОбработка (ExternalDataProcessor)
ИспользуемоеИмяФайла (UsedFileName)
Использование:Только чтение.
Описание: Тип: Строка. Содержит полное имя файла внешней обработки.
Доступность: Толстый клиент.

Т.е., что на толстом клиенте доступно только.
7. Danil.Potapov 524 23.05.12 18:49 Сейчас в теме
(6) в справке к 8.2.15.310 указано, что сервер и толстый клиент
8. kirlog 139 23.05.12 19:02 Сейчас в теме
Да. Вижу. У меня подревнее платформа.
Спасибо.
9. Slon1c 06.12.12 17:23 Сейчас в теме
Не знаю... вот такая строка срабатывает без таких извращений.

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

где ФормаОсновныеСредства одна из форм внешней обработки заполнение ОС.
adhocprog; +1 Ответить
10. matashin 16.01.15 11:40 Сейчас в теме
(9) Это если обработка в конфе.
11. kirlog 139 16.01.15 13:21 Сейчас в теме
(9) Slon1c, для этого сначала обработка должна быть подключена к конфигурации через ВнешниеОбработки.Подключить
Это и демонстрируется в моем примере
12. UMM 61 15.03.19 02:47 Сейчас в теме
По-моему, всё гораздо проще:

&НаСервере
Функция ПолучитьИмяФормы()
Стр = СокрЛП(РеквизитФормыВЗначение("Объект")); //"ВнешняяОбработкаОбъект.Имя" или "ОбработкаОбъект.Имя"
ПутьКОбработке = СтрЗаменить(Стр,"Объект.", ".");
Возврат ПутьКОбработке+".Форма.ВыборДокументов");
КонецФункции

И неважно, внешняя обработка или встроенная
vladir; kpdozer; serg_gres; +3 Ответить
13. o4evidec 28.08.25 11:32 Сейчас в теме
наверняка пригодится начинающим ибо чаще есть только куски из мозайки.

Протестировано в ЕРП 2.5. (8.3.24)

Задача:
Из внешней обработки по кнопке открыть другую внешнюю обработку (обе добавлены в 1с как внешние )
Решение:
в обработке №1 на форме добавляем кнопку для открытия обработки №2
далее код в обработке №1 из 2 процедур и 1 функции

&НаКлиенте
Процедура ОткрытьОбработку2(Команда)
	
	//логика
	//1. формируем структуру через которые можно передать например имя обработки
	//2. получаем в ответ имя и адреса подключенной обработки
	//3. открываем форму обработки по имени
	//4.  чистим данные во временном хранилище
	
		//1.
	ПередаваемыеПараметры = Новый Структура;
		//2.
	СтруктураОтвета = ОткрытьВнешнююобработку(ПередаваемыеПараметры);
		//3.
	ОткрытьФорму("ВнешняяОбработка."+ СтруктураОтвета.ИмяОбработки +".Форма");
		//4.
	УдалитьИзВременногоХранилищаСервер(ПередаваемыеПараметры.АдресВХранилище);
	
КонецПроцедуры

&НаСервере
Функция ОткрытьВнешнююОбработку(ПередаваемыеПараметры)
	
	//1. получаем ссылку на обработку
	//2. получаем двоичные данные обработки 
	//3. помещаем и получаем адрес обработки во временном хранилище
	//4. подключаем внешнюю обработку и получаем ее имя
	//5. пишем в параметры для возврата на клиент
	
		//1.	
	СсылкаНаОбработку = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("ИмяОбработкиВ_1с");
		//2.
	ДвоичныеДанные = СсылкаНаОбработку.ХранилищеОбработки.Получить();
		//3. 
	АдресВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
		//4
	ИмяОбработки = ВнешниеОбработки.Подключить(АдресВХранилище);
	
		//5.
	ПередаваемыеПараметры.Вставить("ИмяОбработки", ИмяОбработки );
	ПередаваемыеПараметры.Вставить("АдресВХранилище", АдресВХранилище);
	
	Возврат ПередаваемыеПараметры;

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

&НаСервере
Процедура УдалитьИзВременногоХранилищаСервер(перАдресВХранилище)
	УдалитьИзВременногоХранилища(перАдресВХранилище)
КонецПроцедуры
Показать
Для отправки сообщения требуется регистрация/авторизация