Как из процедуры модуля объекта вызвать процедуру формы?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Общие правила: Для того, чтобы обратиться к модулю формы из модуля объекта необходимо пробросить ссылку на форму в этот модуль объекта.
И Процедура/Функция в модуле формы обязательно должна быть экспортной.
Что-то типа:
Здесь нужно четко понимать в каком контексте Вы работаете. Если у Вас форма обычная, неуправляемая, то это одно, если же управляемое приложение - тогда совершенно другое.
В управляемом приложении из модуля объекта будет доступно только серверная часть формы. Можно посмотреть в помощнике, какие свойства формы доступны в серверном контексте или в отладчике.
Для доступа к клиентской части формы и, соответственно, к клиентским модулям формы, можно воспользоваться общим модулем, у которого выставлена галочка "Клиент (управляемое приложение)".
Как-то так.
И Процедура/Функция в модуле формы обязательно должна быть экспортной.
Что-то типа:
Процедура РаботаСФормойИзОбъекта(СтруктураДанных, СсылкаНаФорму)
НовыйЗаголовок = СтруктураДанных.НовыйЗаголовок;
СсылкаНаФорму.Заголовок = НовыйЗаголовок;
ВидимостьНужногоЭлемента = ОпределитьВидимостьНужногоЭлементаПоДанным(СтруктураДанных);
СсылкаНаФорму.Элемент.Видимость = ВидимостьНужногоЭлемента;
СсылкаНаФорму.ЭкспортнаяПроцедураМодуляФормы(); // Пример вызова процедуры формы
ВычисленноеВыражение = СсылкаНаФорму.ЭкспортнаяФункцияМодуляФормы(); // Пример вызова функции формы
КонецПроцедуры
ПоказатьЗдесь нужно четко понимать в каком контексте Вы работаете. Если у Вас форма обычная, неуправляемая, то это одно, если же управляемое приложение - тогда совершенно другое.
В управляемом приложении из модуля объекта будет доступно только серверная часть формы. Можно посмотреть в помощнике, какие свойства формы доступны в серверном контексте или в отладчике.
Для доступа к клиентской части формы и, соответственно, к клиентским модулям формы, можно воспользоваться общим модулем, у которого выставлена галочка "Клиент (управляемое приложение)".
Как-то так.
Также есть возможность найти нужную форму. Типа поискать среди открытых окон или обратиться к текущему активному окну. Таким образом вы найдете ОкноКлиентскогоПриложения. Почитайте про команды глобального контекста ПолучитьОкна() , АктивноеОкно(). У объекта ОкноКлиентскогоПриложения есть свойство "Содержимое" - это массив как раз форм окна.
Этот способ какой-то не очень. Потом в коде очень трудно разобраться, почему алгоритм работает именно так и где надо внести изменения. Разок несколько лет назад заморочился и всё, больше не использовал.
Гораздо лучше передавать ссылку на нужную форму в вызываемые модули, как описал в предыдущем комментарии
Этот способ какой-то не очень. Потом в коде очень трудно разобраться, почему алгоритм работает именно так и где надо внести изменения. Разок несколько лет назад заморочился и всё, больше не использовал.
Гораздо лучше передавать ссылку на нужную форму в вызываемые модули, как описал в предыдущем комментарии
Вообще, очень рекомендую сделать наоборот.
Перенесите функционал из модуля формы в (чем выше, тем лучше, т.е. 1-е лучше 2-го и гораздо лучше 3-го)
1) в общий модуль
2) модуль менеджера объекта
3) модуль объекта.
В модуле формы оставьте только вызов.
И уже в вашем модуле объекта тоже сделайте вызов перенесенного из модуля формы функционала.
Перенесите функционал из модуля формы в (чем выше, тем лучше, т.е. 1-е лучше 2-го и гораздо лучше 3-го)
1) в общий модуль
2) модуль менеджера объекта
3) модуль объекта.
В модуле формы оставьте только вызов.
И уже в вашем модуле объекта тоже сделайте вызов перенесенного из модуля формы функционала.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот