Получить серверный контекст любой открытой формы из внешней обработки

1. SlavaKron 05.04.19 20:54 Сейчас в теме
Есть конфа на основе БСП. Есть внешняя обработка, если нужно, то подключенная. Есть общий клиентский модуль с возможностью выполнять произвольный код (позволяет обращяться к неэкспортным серверным процедурам произвольной формы). И есть управляемая форма, серверный контекст которой я хочу получить. В этой форме есть стандартные процедуры из подстстемы подключаемых команд. Вопрос: как из внешней обработки получить серверный контекст этой формы?
Хочу сделать что-то вроде исследователя формы - подсвечивать выбранные из списка элементы управления, получать их пути к данным, события, имена.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
17. SlavaKron 25.04.19 08:55 Сейчас в теме +3.14 $m
Намудрил я - общий клиентский модуль вообще не нужен, неэкспортная процедура формы спокойно вызывается из клиента обработки.
Осталось придумать, как обойти создание элемента справочника ДополнительныеОтчетыИОбработки.
Прикрепленные файлы:
ИсследованиеФормы.epf
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. spacecraft 05.04.19 23:09 Сейчас в теме
(1) по приведенной схеме никак.
Получить серверный контекст управляемой формы можно только передачей этой формы из модуля этой же формы с директивой НаСервере. Больше нигде он недоступен.
5. SlavaKron 06.04.19 00:17 Сейчас в теме
(3) Подключенная команда заполнения формы получает форму заполняемого объекта на сервере. Хотя бы это можно как-то использовать.
8. spacecraft 06.04.19 00:58 Сейчас в теме
(5) если устраивает, что из самой формы будет вызван серверный контекст и уже из него будет вызван внешний метод с передачей самой формы, тогда да.
Но это не означает, что в нужный момент из вне можно получить серверный контекст формы.
4. Xershi 1483 05.04.19 23:20 Сейчас в теме
(1)контекст формы появляется только после ее открытия на клиенте, поэтому вывод никак. Потому что форму открыть на сервере нельзя, только получить, но не открыть это принципиальные вещи.
7. SlavaKron 06.04.19 00:29 Сейчас в теме
(4)См (5). У меня уже получилось вызвать из клиента внешней обработки серверную процедуру "Подключаемый Выполнить Команду НаСервере", что есть почти в каждой БСПшной форме объекта. Пока затык в том, как дальше передать управление на серверную часть своей обработки с передачей контекста Формы объекта.
9. spacecraft 06.04.19 01:16 Сейчас в теме
(7)
У меня уже получилось вызвать из клиента внешней обработки серверную процедуру "Подключаемый Выполнить Команду НаСервере", что есть почти в каждой БСПшной форме объекта.

Любой обработчик события формы, если пометить экспортным, можно вызвать из вне, только это уже будет не обработчик события формы, а просто обычный метод.
Так и тут.
Максимум что можно сделать, это получить на клиенте форму объекта и через эту форму вызвать подключаемую команду на сервере этой формы. В ней как раз подхватывается серверная форма и передается дальше. Но никак с сервера из вне. Только с клиента и через саму форму объекта.
10. Xershi 1483 06.04.19 07:54 Сейчас в теме
(7) вы уже определились. Хотите использовать экспортные процедуры. То это конечно работает. Не экспортное не ввзовешь.
12. SlavaKron 06.04.19 11:23 Сейчас в теме
(10)
(9) Это не экспортная прлцедура. Про экспортные процедуры вообще речи нет. Для меня самого стало открытием, что можно вызывать неэкпортные процедуры формы из общего клиентского модуля. Потому создал тему - может я ещё чего-то не знаю.
13. spacecraft 06.04.19 11:31 Сейчас в теме
(12) это не вызов не экспортной процедуры формы из клиентского общего модуля. Это вызов метода модуля формы используя саму форму.
15. Xershi 1483 06.04.19 12:11 Сейчас в теме
(12) похоже плохо справку читали)
Покажите что вы там нашли))
14. tusv 211 06.04.19 11:48 Сейчас в теме
(1) Разве что в вызываемой форме создать реквизит формы с типом неопределено и ПриСозданииНаСервере заполнить Структуру.
Типа
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	МассивРеквизитов = Новый Массив;
	МассивРеквизитов.Добавить(Новый РеквизитФормы("КонтекстФормы",Новый ОписаниеТипов("Неопределено")));
	ИзменитьРеквизиты(МассивРеквизитов);
	ЭтаФорма.КонтекстФормы = Новый Структура;
	
	МассивДействий = Новый Массив;
	МассивДействий.Добавить("ПриИзменении");
	МассивДействий.Добавить("ПередНачаломДобавления");
	//Итд
	Для Каждого элемент из Элементы Цикл
		//Серверные значения элемента, осальные доступны на клиенте
		ЭтаФорма.КонтекстФормы.Вставить(Элемент.Имя, Новый Структура("Имя,ПутьКДанным,События",,,Новый Соответствие));
		ЗаполнитьЗначенияСвойств(ЭтаФорма.КонтекстФормы[элемент.Имя],элемент);
		Если ТипЗнч(элемент) = Тип("ПолеФормы") или ТипЗнч(элемент) = Тип("ТаблицаФормы") Тогда
			Для Каждого Эл из МассивДействий Цикл
				Действие = Элемент.ПолучитьДействие(эл);
				Если не ПустаяСтрока(Действие) Тогда
					ЭтаФорма.КонтекстФормы[Элемент.Имя].События.Вставить(Эл,Действие);
				КонецЕсли;
			КонецЦикла;
		ИначеЕсли ТипЗнч(элемент) = Тип("КнопкаФормы") и Не ПустаяСтрока(Элемент.ИмяКоманды)  Тогда
			Команда = Команды.Найти(Элемент.ИмяКоманды);
			ЭтаФорма.КонтекстФормы[Элемент.Имя].События.Вставить(Команда.Имя,Команда.Действие);
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Показать
2. user-z99999 67 05.04.19 22:08 Сейчас в теме
А форма к которой хотите подключиться где, во внешней обработке?
6. SlavaKron 06.04.19 00:23 Сейчас в теме
(2) Нет, форма, к которой хочу подключиться - встроенная форма объекта со всей БСП-обвязкой.
11. Dmitry77 83 06.04.19 11:04 Сейчас в теме
добавить обработку в расширение. В этом же расширении для нужной формы добавить вызов обработчика после и из него вызывать уже обработку.
16. SlavaKron 24.04.19 18:54 Сейчас в теме
Вот что получилось.
Текст функции МойОбщийМодульКлиент.ВыполнитьКод():
Функция ВыполнитьКод(ТекстФункции, Контекст = Неопределено) Экспорт
	Результат = Неопределено;
	
	Попытка
		Выполнить(ТекстФункции);
	Исключение	
		Результат = ОписаниеОшибки();
	КонецПопытки;
	
	Возврат Результат
КонецФункции
Показать
Прикрепленные файлы:
ИсследованиеФормы.epf
17. SlavaKron 25.04.19 08:55 Сейчас в теме +3.14 $m
Намудрил я - общий клиентский модуль вообще не нужен, неэкспортная процедура формы спокойно вызывается из клиента обработки.
Осталось придумать, как обойти создание элемента справочника ДополнительныеОтчетыИОбработки.
Прикрепленные файлы:
ИсследованиеФормы.epf
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот