Как из процедуры модуля объекта вызвать процедуру формы?

1. crog 31.10.23 08:27 Сейчас в теме
(18)
Собственно, есть процедура в модуле объекта.
У этого объекта есть форма.
Необходимо из модуля объекта вызывать процедуру формы этого объекта.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. lefthander 31.10.23 09:00 Сейчас в теме
(1)
Необходимо из модуля объекта вызывать процедуру формы этого объекта.
Как Вы попадаете в модуль объекта?
4. nomad_irk 81 31.10.23 09:16 Сейчас в теме
(1)никак. пересмотрите логику алгоритма.
3. user1880116 31.10.23 09:12 Сейчас в теме
(1)
из модуля объекта вызывать процедуру формы
Эта музыка будет вечной.
5. Onwardv 68 31.10.23 10:07 Сейчас в теме
Общие правила: Для того, чтобы обратиться к модулю формы из модуля объекта необходимо пробросить ссылку на форму в этот модуль объекта.
И Процедура/Функция в модуле формы обязательно должна быть экспортной.

Что-то типа:
Процедура РаботаСФормойИзОбъекта(СтруктураДанных, СсылкаНаФорму)
      НовыйЗаголовок = СтруктураДанных.НовыйЗаголовок;
      СсылкаНаФорму.Заголовок = НовыйЗаголовок;
      
       ВидимостьНужногоЭлемента = ОпределитьВидимостьНужногоЭлементаПоДанным(СтруктураДанных);
       СсылкаНаФорму.Элемент.Видимость = ВидимостьНужногоЭлемента;
       
       СсылкаНаФорму.ЭкспортнаяПроцедураМодуляФормы();    // Пример вызова процедуры формы
       ВычисленноеВыражение =  СсылкаНаФорму.ЭкспортнаяФункцияМодуляФормы(); // Пример вызова функции формы

КонецПроцедуры
Показать


Здесь нужно четко понимать в каком контексте Вы работаете. Если у Вас форма обычная, неуправляемая, то это одно, если же управляемое приложение - тогда совершенно другое.
В управляемом приложении из модуля объекта будет доступно только серверная часть формы. Можно посмотреть в помощнике, какие свойства формы доступны в серверном контексте или в отладчике.
Для доступа к клиентской части формы и, соответственно, к клиентским модулям формы, можно воспользоваться общим модулем, у которого выставлена галочка "Клиент (управляемое приложение)".

Как-то так.
6. Onwardv 68 31.10.23 10:25 Сейчас в теме
Также есть возможность найти нужную форму. Типа поискать среди открытых окон или обратиться к текущему активному окну. Таким образом вы найдете ОкноКлиентскогоПриложения. Почитайте про команды глобального контекста ПолучитьОкна() , АктивноеОкно(). У объекта ОкноКлиентскогоПриложения есть свойство "Содержимое" - это массив как раз форм окна.
Этот способ какой-то не очень. Потом в коде очень трудно разобраться, почему алгоритм работает именно так и где надо внести изменения. Разок несколько лет назад заморочился и всё, больше не использовал.

Гораздо лучше передавать ссылку на нужную форму в вызываемые модули, как описал в предыдущем комментарии
7. Onwardv 68 31.10.23 10:59 Сейчас в теме
Вообще, очень рекомендую сделать наоборот.
Перенесите функционал из модуля формы в (чем выше, тем лучше, т.е. 1-е лучше 2-го и гораздо лучше 3-го)
1) в общий модуль
2) модуль менеджера объекта
3) модуль объекта.

В модуле формы оставьте только вызов.
И уже в вашем модуле объекта тоже сделайте вызов перенесенного из модуля формы функционала.
Оставьте свое сообщение

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