Имя: Пароль:
1C
1C 7.7
v7: Получить Контекст документа из процедуры глобального модуля
0 IgorA100
 
07.09.21
17:10
Открываем документ, меняем реквизит "Склад", в момент выбора нового склада попадаем в глобальную процедуру.
Как из глобальной процедуры, безгючно и стабильно, получить контекст документа ? :)

К = глВзятьКонтекст(Контекст) - не работает.
глСервис.АктивныйКонтекст(Конт) - я получаю контекст Склада, а мне нужно того объекта из которого я вызвал изменение склада.
глСервис.ПолучитьСтекВызова() - я могу найти там "ИДМодуля". Но не более того, как на основе этого ИД достучаться до его контекста не понимаю.

Есть мысли?

ЗЫ: Передать контекст самого документа в глобальную процедуру не предлагать  :)
1 ДенисЧ
 
07.09.21
17:13
Передавай контекст документа, а потом слушай "Валенки"
2 IgorA100
 
07.09.21
17:17
(1) Я же написал выше: ЗЫ: Передать контекст самого документа в глобальную процедуру не предлагать
Так-же не предлагать передавать контекст через глобальную переменную.
Ну т.е. передавать контекст в момент вызова глобальной процедуры - не вариант.
3 Ёпрст
 
07.09.21
18:05
4 IgorA100
 
07.09.21
18:05
Еще, как вариант, можно сделать так:
глСервис.СписокВсехОткрытыхОкон()
Но как найти то самое окно, из которого кликнули для выбора реквизита?
5 Ёпрст
 
07.09.21
18:06
Ну или проще. Использовать класс.Перехватчик и там уже, что угодно и как угодно
6 IgorA100
 
07.09.21
18:10
(3) Пойду осмысливать, ибо при тупом вызове в отладчике "Шаблон("[РеквизитФормы]")" - рухнул и отладчик и сама конфа :)
(5) Ни разу его не пользовал, пойду почитаю...
Спасибо, Ёпрст!
7 IgorA100
 
07.09.21
18:16
(3) Что-то не прокатывает. Рушится с ошибкой на "BLang.dll" :(
8 Ёпрст
 
07.09.21
18:39
(6)Ну вот, как пример использования
https://infostart.ru/public/20038/
9 Злопчинский
 
07.09.21
20:03
(6) я вроде пробовал эту фичу, вроде работало.
сейчас проверю еще раз.
10 Злопчинский
 
07.09.21
20:08
(6) проверил фичу, работает как описано норм.
при тупом вызове в отладчике "Шаблон("[РеквизитФормы]")"
- тут непонятно в каком месте на какjй точке вызывается это
11 IgorA100
 
07.09.21
20:28
(10) В глобальной процедуре вызываемой из формы документа по клику на изменение реквизита формы "склад".
По поводу перехватчика - я вспомнил, что ранее уже внедрялась в систему "Фабрика событий" https://infostart.ru/public/71084/ Там есть перехват и ГК и ГМ. Я с ней глобально не разбирался, работает и фиг с ней. Читал, думал.. Наверное конечно интересно, но пока у меня пасьянс в голове не сложился, как с перехватом ничего старого не сломать и новое сделать. Как-то там все довольно сложно...
12 IgorA100
 
07.09.21
20:42
(9) В классическом режиме как описано по ссылке - работает без проблем.
Кстати, вот написано:
сообщить(Шаблон("[РеквизитФормы]"));           // получаем переменную модуля формы
А по факту, мы получаем НЕ переменную формы, как объект, а просто его наименование. Пользы от этого маловато....

Кстати, сейчас почему-то перестало "падать" и при вызове Шаблон("[РеквизитФормы]") из глобальной процедуры. Может глюк какой был....
13 Злопчинский
 
07.09.21
23:39
(12) "А по факту, мы получаем НЕ переменную формы, как объект, а просто его наименование. Пользы от этого маловато...."
тю...
попробуй
Результат = Шаблон("[ЗначениеВСтрокуВнутр(РеквизитФормы)]";
Результат = ЗначениеИзСтрокиВнутр(Результат);
14 Злопчинский
 
07.09.21
23:46
Процедура глТест() Экспорт
     сообщить(Шаблон("[ПеременнаяМодуля]"));      // получаем переменную модуля
     сообщить(Шаблон("[РеквизитФормы]"));         // получаем переменную модуля формы
     Результат = Шаблон("[ЗначениеВСтрокуВнутр(РеквизитФормы)]");
     Результат = ЗначениеИзСтрокиВнутр(Результат);
     Сообщить("Объект = "+Результат+", "+ТипЗначенияСтр(Результат)+"."+Результат.Вид());
     сообщить(Шаблон("[ФункцияМодуля()]"));       // вызываем функцию модуля формы
КонецПроцедуры // глТест()
.
Это значение ПеременнойМодуля
Журнал "Русский дом" №1
Объект = Журнал "Русский дом" №1, Справочник.Номенклатура
Сработала функция модуля
15 Злопчинский
 
07.09.21
23:53
Гораздо интереснее почему вообще эта фича без передачи контекста с Шаблон работает..
16 Злопчинский
 
08.09.21
00:04
(12) Опять же, что мешает передавать контекст в ГМ через глоб.переменную?
что мешает вместо вызова
глМояГлобПроц();
написать
глРасшифровка = глВзятьКонтекст(Контекст);
глМояГлобПроц();