|
v7: 1С++ Перехватчик. | ☑ | ||
---|---|---|---|---|
0
varelchik
07.06.13
✎
14:50
|
Народ подскажите кто сталкивался?
Есть пользовательский класс ПерехватГМ Перем _Перехватчик; Процедура ВключитьПерехватСобытий() Экспорт лУправлениеНастройками = СоздатьОбъект("УправлениеНастройками"); лУправлениеНастройками.Включить("ПерехватитьСобытияГК"); _Перехватчик = СоздатьОбъект("Перехватчик"); _Перехватчик.ПерехватитьСобытияГлобальногоМодуля(Контекст); _Перехватчик.ПодключитьСобытие_ЗаписьПользовательскогоСобытияЖурналаРегистрации(); _Перехватчик.ПодключитьСобытие_ЗаписьСобытияЖурналаРегистрации(); КонецПроцедуры // ВключитьПерехватСобытий Функция СобытиеГМ_ВводНаОсновании(Конт,Основание) Экспорт рФорма=СоздатьОбъект("РасширениеФормы"); рФорма.УстановитьФорму(Конт.Форма); Тип=рФорма.ТипОбъекта(); Вид=Конт.Вид(); Если Тип="Документ" Тогда Если Метаданные.ОбщийРеквизитДокумента("IDD").Выбран()=1 Тогда Конт.IDD=""; КонецЕсли; Если Основание.Вид()="Перемещение" Тогда Если Основание.ВнешнПерем=1 Тогда Предупреждение("Запрещено вводить на основании внешних перемещений! | Используйте копирование.",50); Возврат 0; КонецЕсли; КонецЕсли; ИначеЕсли Тип="Справочник" Тогда Если Метаданные.Справочник(Вид).Реквизит("IDD").Выбран()=1 Тогда Конт.IDD=""; КонецЕсли; КонецЕсли; стат=_Перехватчик.ВыполнитьОригинальноеСобытиеГК(Конт,"ВводНаОсновании",Основание); Сообщить(стат); Возврат стат; КонецФункции // СобытиеГМ_ВводНаОсновании |
|||
1
varelchik
07.06.13
✎
14:55
|
Так вот суть в следующем.
Если сделать Какой либо документ вводом на основании, то в случае когда Это условие Если Основание.ВнешнПерем=1 Тогда Предупреждение("Запрещено вводить на основании внешних перемещений! | Используйте копирование.",50); Возврат 0; КонецЕсли; не отрабатывается, ввод работает нормально. Но если попадаем в это условие, тогда дальнейший вводнаосновании отключается для все документов. что у меня нетак? |
|||
2
Mikeware
07.06.13
✎
14:57
|
не понял.
|
|||
3
varelchik
07.06.13
✎
14:57
|
_Перехватчик.ВыполнитьОригинальноеСобытиеГК(Конт,"ВводНаОсновании",Основание);
нормально заходит в форму документа,т.е. оригинальное событие срабатывает. НО после таких движений всегда стат = 0. |
|||
4
varelchik
07.06.13
✎
14:57
|
что непонял?
|
|||
5
varelchik
07.06.13
✎
14:58
|
после первого предупреждения перестает работать ВводНаОсновании
|
|||
6
varelchik
07.06.13
✎
14:59
|
пока из базы не выйдешь и не зайдешь назад нехочет работать хто ты тресни.
|
|||
7
Mikeware
07.06.13
✎
15:02
|
(6) а переххват - входит?
|
|||
8
varelchik
07.06.13
✎
15:03
|
(7)в том то и дело.
|
|||
9
varelchik
07.06.13
✎
15:04
|
специально в форме у перехвата сделал сообщить("форма").
Выводиться в слюбом случае. |
|||
10
varelchik
07.06.13
✎
15:14
|
И вот что интересно.
Если отрабатывется правильно то последовательность действий какая-то странная. Повесил сообщить в 3 местах. 1.В начеле События СобытиеГМ_ВводНаОсновании 2.В модуле формы в оригинальном событии. 3.после _Перехватчик.ВыполнитьОригинальноеСобытиеГК(Конт,"ВводНаОсновании",Основание); а именно В нормальном режиме конгда стат=1 Сообщает что 1. защел в перехват. 2. зашел в модуль формы. 3. о том что стат=1 4.опять о том что запущена процедура ВводНаОсновании() в форме. |
|||
11
varelchik
07.06.13
✎
15:25
|
Начал эксперементы дальше.
Так вот после блокировки, если открыть любой документ. То ввод ввостанавливатеся. Если же после предупреждения попытаться снова сделать ввод на основании то ничего не происходит. |
|||
12
varelchik
07.06.13
✎
16:35
|
Короче забил.
Перевел из ранга функции в процедуру. Если кому понадобиться вот: Процедура СобытиеГМ_ВводНаОсновании(Конт,Основание) Экспорт рФорма=СоздатьОбъект("РасширениеФормы"); рФорма.УстановитьФорму(Конт.Форма); Тип=рФорма.ТипОбъекта(); Вид=Конт.Вид(); ОчиститьОснование=0; Если Тип="Документ" Тогда Если Метаданные.ОбщийРеквизитДокумента("IDD").Выбран()=1 Тогда Конт.IDD=""; КонецЕсли; Если Основание.Вид()="Перемещение" Тогда Если Основание.ВнешнПерем=1 Тогда Предупреждение("Запрещено вводить на основании внешнего перемещения!",50); ОчиститьОснование=1; КонецЕсли; КонецЕсли; ИначеЕсли Тип="Справочник" Тогда Если Метаданные.Справочник(Вид).Реквизит("IDD").Выбран()=1 Тогда Конт.IDD=""; КонецЕсли; КонецЕсли; Если ОчиститьОснование=1 Тогда Основание=ПолучитьПустоеЗначение("Документ."+Основание.Вид()); Конт.Форма.Закрыть(0); КонецЕсли; КонецПроцедуры //СобытиеГМ_ВводНаОсновании |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |