Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
27 ноя 2024, 11:25

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

Автор Varg ., 17 мар 2020, 10:08

0 Пользователей и 1 гость просматривают эту тему.

Varg .

LexaK, Согласен спутано объясняю. По пунктам
1) Есть отчёт в нём форма. На форме таблица Реестр так же на форме отчёта есть кнопка открывающая форму документа Главный.
2) Нажав кнопку открываем документ Главный, делаем действия нажимаем провести и закрыть.
3) После закрытия документа Главный срабатывает в его Модуле формы Процедура ПередЗакрытиемНаСервере() которая обращается к общему модулю ОбщийМодуль.ОбновитьРеестр();.
4) Процедура в общем модуле после обращения к ней выполняет запрос к РегСвед

Протцедура ОбновитьРеестр()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОбщиеСрезПоследних.Дата,
| ОбщиеСрезПоследних.Номер
|ИЗ
| РегистрСведений.Общие.СрезПоследних КАК ОбщиеСрезПоследних";

РезультатЗапроса = Запрос.Выполнить();

Возврат Выборка = РезультатЗапроса.Выбрать();
       
        Пока Выборка.Следующий() Цикл

НоваяСтрока = Реестр.Добавить();
НоваяСтрока.Дата = Выборка.Дата;
НоваяСтрока.Номер = Выборка.Номер;

         КонецЦикла

КонецПротцедуры



получает данные и мне не понятно каким образом, но должна предать их в таблицу отчёта Реестр ?:dfbbdrfb: 

LexaK

а-а-а, так вам просто после изменения документа надо обновить отчет, так?

тогда в форме документа, в процедуре ПередЗакрытием, вызываете Оповещение

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

в форме отчета, добавляете обработчик оповещения

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
//Вставить содержимое обработчика
Если ИмяСобытия = "ОбновитьКакойТоОтчет" Тогда
    КнопкаСформироватьНажатие(0);//имя функции связанной с кнопкой Сформировать
КонецЕсли;
КонецПроцедуры

если помогло нажмите: Спасибо!

antoneus

В форме отчета ловить оповещение об изменении документа главный и обновлять таблицу реестр. Документ открывается через ОткрытьФорму?

LexaK

antoneus, я бы еще проще сделал, просто кнопку Сформировать повесил бы на обработчик ожидания. Один раз в минуту ( или 10 мин) обновил отчет  и делов то.
если помогло нажмите: Спасибо!

Varg .

LexaK, Да всё верно нужно обновить, а точно что этого достаточно ?
Оповестить("ОбновитьКакойТоОтчет");
и не нужно указывать куда слать оповещение иначе не срабатывает оповещение ни в процедуре ПредЗакрытием ни в протцедуре ПриЗакрытие. После нажатия "Провести и закрыть".

В модуле формы отчёта я взываю процедуру с запросом к РегСвед

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
   
Если ИмяСобытия = "ОбновитьКакойТоОтчет" Тогда

    ЗапросРегСвед();

КонецЕсли;

КонецПроцедуры



LexaK

Цитировать... а точно что этого достаточно ?
А что вам мешает попробовать? (при условии что вы все правильно сделаете)
только учтите, этот механизм с Оповещением будет работать только в рамках одного сеанса... 

(если это не устроит, тогда пробуйте второй вариант, с обработчиком ожидания)
если помогло нажмите: Спасибо!

Varg .

LexaK, Пробовал от того и спросил Оповестить("Делал так Отчеты.Реестр.ФормаРеестр.ТаблицаРеестрНаформе"); Вот почему так я тут горбатого леплю общие модули выдумываю, а то что нужно есть под боком и не работает.

Один сеанс это как один пользователь ?

LexaK

ЦитироватьОдин сеанс это как один пользователь ?
Почти. Вообще у одного пользователя может быть несколько сеансов.
если помогло нажмите: Спасибо!

Varg .

LexaK, Нашёл косяк :zebzdr: всё заработало :zebzdr: нужно было Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) определить для формы :zebzdr: , а я её тупо скопировал <_<

LexaK

э-э-э, так это вроде как обработчик события! должен быть определен/назначен в свойствах формы!
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск