Получить серверный контекст любой открытой формы из внешней обработки
Есть конфа на основе БСП. Есть внешняя обработка, если нужно, то подключенная. Есть общий клиентский модуль с возможностью выполнять произвольный код (позволяет обращяться к неэкспортным серверным процедурам произвольной формы). И есть управляемая форма, серверный контекст которой я хочу получить. В этой форме есть стандартные процедуры из подстстемы подключаемых команд. Вопрос: как из внешней обработки получить серверный контекст этой формы?
Хочу сделать что-то вроде исследователя формы - подсвечивать выбранные из списка элементы управления, получать их пути к данным, события, имена.
Хочу сделать что-то вроде исследователя формы - подсвечивать выбранные из списка элементы управления, получать их пути к данным, события, имена.
По теме из базы знаний
- Дополнительные отчеты и обработки для конфигураций, основанных на БСП. Часть 2. Печатные формы (MXL).
- Менеджер открытых форм [update 29.12.22]
- Полное копирование одной формы в другую
- Внешняя компонента на C# для парсинга страниц через Phantom JS на сервере 1С х32,х64
- Запуск фонового задания с прогрессом во внешней обработке независимо от места вызова на Библиотеке стандартных подсистем
Найденные решения
Намудрил я - общий клиентский модуль вообще не нужен, неэкспортная процедура формы спокойно вызывается из клиента обработки.
Осталось придумать, как обойти создание элемента справочника ДополнительныеОтчетыИОбработки.
Осталось придумать, как обойти создание элемента справочника ДополнительныеОтчетыИОбработки.
Прикрепленные файлы:
ИсследованиеФормы.epf
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(4)См (5). У меня уже получилось вызвать из клиента внешней обработки серверную процедуру "Подключаемый Выполнить Команду НаСервере", что есть почти в каждой БСПшной форме объекта. Пока затык в том, как дальше передать управление на серверную часть своей обработки с передачей контекста Формы объекта.
(7)
Любой обработчик события формы, если пометить экспортным, можно вызвать из вне, только это уже будет не обработчик события формы, а просто обычный метод.
Так и тут.
Максимум что можно сделать, это получить на клиенте форму объекта и через эту форму вызвать подключаемую команду на сервере этой формы. В ней как раз подхватывается серверная форма и передается дальше. Но никак с сервера из вне. Только с клиента и через саму форму объекта.
У меня уже получилось вызвать из клиента внешней обработки серверную процедуру "Подключаемый Выполнить Команду НаСервере", что есть почти в каждой БСПшной форме объекта.
Любой обработчик события формы, если пометить экспортным, можно вызвать из вне, только это уже будет не обработчик события формы, а просто обычный метод.
Так и тут.
Максимум что можно сделать, это получить на клиенте форму объекта и через эту форму вызвать подключаемую команду на сервере этой формы. В ней как раз подхватывается серверная форма и передается дальше. Но никак с сервера из вне. Только с клиента и через саму форму объекта.
(1) Разве что в вызываемой форме создать реквизит формы с типом неопределено и ПриСозданииНаСервере заполнить Структуру.
Типа
Типа
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(Новый РеквизитФормы("КонтекстФормы",Новый ОписаниеТипов("Неопределено")));
ИзменитьРеквизиты(МассивРеквизитов);
ЭтаФорма.КонтекстФормы = Новый Структура;
МассивДействий = Новый Массив;
МассивДействий.Добавить("ПриИзменении");
МассивДействий.Добавить("ПередНачаломДобавления");
//Итд
Для Каждого элемент из Элементы Цикл
//Серверные значения элемента, осальные доступны на клиенте
ЭтаФорма.КонтекстФормы.Вставить(Элемент.Имя, Новый Структура("Имя,ПутьКДанным,События",,,Новый Соответствие));
ЗаполнитьЗначенияСвойств(ЭтаФорма.КонтекстФормы[элемент.Имя],элемент);
Если ТипЗнч(элемент) = Тип("ПолеФормы") или ТипЗнч(элемент) = Тип("ТаблицаФормы") Тогда
Для Каждого Эл из МассивДействий Цикл
Действие = Элемент.ПолучитьДействие(эл);
Если не ПустаяСтрока(Действие) Тогда
ЭтаФорма.КонтекстФормы[Элемент.Имя].События.Вставить(Эл,Действие);
КонецЕсли;
КонецЦикла;
ИначеЕсли ТипЗнч(элемент) = Тип("КнопкаФормы") и Не ПустаяСтрока(Элемент.ИмяКоманды) Тогда
Команда = Команды.Найти(Элемент.ИмяКоманды);
ЭтаФорма.КонтекстФормы[Элемент.Имя].События.Вставить(Команда.Имя,Команда.Действие);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
Вот что получилось.
Текст функции МойОбщийМодульКлиент.ВыполнитьКод():
Текст функции МойОбщийМодульКлиент.ВыполнитьКод():
Функция ВыполнитьКод(ТекстФункции, Контекст = Неопределено) Экспорт
Результат = Неопределено;
Попытка
Выполнить(ТекстФункции);
Исключение
Результат = ОписаниеОшибки();
КонецПопытки;
Возврат Результат
КонецФункции
ПоказатьПрикрепленные файлы:
ИсследованиеФормы.epf
Намудрил я - общий клиентский модуль вообще не нужен, неэкспортная процедура формы спокойно вызывается из клиента обработки.
Осталось придумать, как обойти создание элемента справочника ДополнительныеОтчетыИОбработки.
Осталось придумать, как обойти создание элемента справочника ДополнительныеОтчетыИОбработки.
Прикрепленные файлы:
ИсследованиеФормы.epf
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот