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

23.05.12

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

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

Файлы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

См. также

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

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

14.05.2025    3356    DeerCven    8    

45

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

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

21.05.2024    40645    dimanich70    83    

157

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

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

1 стартмани

18.03.2024    5999    6    John_d    11    

57

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

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

12.02.2024    48613    atdonya    30    

65

Универсальные функции Программист 1С v8.3 Бесплатно (free)

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

30.11.2023    7763    ke.92@mail.ru    17    

66

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

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

28.08.2023    20915    YA_418728146    8    

174

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    6118    92    progmaster    17    

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

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

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

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

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

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

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

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

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

где ФормаОсновныеСредства одна из форм внешней обработки заполнение ОС.
adhocprog; +1 Ответить
10. matashin 16.01.15 11:40 Сейчас в теме
(9) Это если обработка в конфе.
11. kirlog 137 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.
	ПередаваемыеПараметры.Вставить("ИмяОбработки", ИмяОбработки );
	ПередаваемыеПараметры.Вставить("АдресВХранилище", АдресВХранилище);
	
	Возврат ПередаваемыеПараметры;

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

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