Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Перехват ТипЗначенияСтр / ОткрытьФорму и других... (число прочтений - 3628 )
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Перехват ТипЗначенияСтр / ОткрытьФорму и других...
30. Июля 2013 :: 08:37
Печать  
Тема Подмена объектов метаданных (Документ,Справочник)
(http://www.1cpp.ru/forum/YaBB.pl?num=1175586636/32)
очень нужная, правильная и востребованная
и это позволит решить ОЧЕНЬ много вопросов в рамках 7.7....

Но в ней остается БОЛЬШАЯ загвоздка с перехватом вызовов глобальных процедур/функций......
Например таких как
ТипЗначенияСтр
ОткрытьФорму
ОткрытьФормуМодально
другие....
где в качестве параметров есть агрегатные объекты...


Предложенное на сегодняшний день решение (http://www.1cpp.ru/forum/YaBB.pl?num=1175586636/1#1)
не слишком универсальное (http://www.1cpp.ru/forum/YaBB.pl?num=1175586636/8#8)
и тяжело реализуемое (http://www.1cpp.ru/forum/YaBB.pl?num=1175586636/10#10)

ПРЕДЛАГАЮ АЛЬТЕРНАТИВНОЕ РЕШЕНИЕ:

(по аналогии с известным подходом при замене вызовов SQL для 2005+ скуля, когда есть прокси для BkEnd.DLL:
- BkEnd.dll       = прокси-перехватчик
- BkEnd0.dll     = переименованный оригинальный файл 1С
- BkEndUtls.dll  = аналог ГлобальныйМодуль)

а именно:
в папке BIN вместо 1crcrus.dll должно быть 3 файла:
Код
Выбрать все
1crcrusOrig.dll - переименованный оригинальный файл
1crcrus.dll - файл "прокси" для замены "на ходу"
1crcrus.ini - файл настроек прокси 



Внутри файла 1crcrus.ini должны быть строки типа
Код
Выбрать все
ТипЗначенияСтр = глТипЗначенияСтр
ValueTypeStr = глТипЗначенияСтр
ОткрытьФорму = глОткрытьФорму
ОткрытьФормуМодально = глОткрытьФормуМодально
и т.д.....
 



Поведение прокси должно быть следующим:

при вызове нативной глобальной процедуры/функции 1С
прокси перехватывает этот вызов
и если есть переопределение вызова в файле INI
вызывает соотвествующую процедуру/функцию глобального модуля
иначе вызывает процедуру/функцию из библиотеки 1crcrusOrig.dll

ПЫ.СЫ:   в принципе, механизм "прокси" можно поручить самой 1CPP.DLL,
а в файл OXY.INI добавить секцию [GLOBAL_SYNONIMS] или как-то так....
Тогда и переименовывать оригинальный файл не нужно.....

Как Вам такая идея?
Я не программист С++, но понимаю что всё это реализуемо....

МНОГОУВАЖАЕМЫЕ АВТОРЫ, ПОЖАЛУСТА, НЕ ПРОХОДИТЕ МИМО.
Сделайте такой финт.....

ПОЖАЛУЙСТА.

  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Перехват ТипЗначенияСтр / ОткрытьФорму и других...
Ответ #1 - 30. Июля 2013 :: 09:35
Печать  
Да, еще один момент:

В настройках 1С++ нужно добавить параметр, а в "Перехватчик" метод

Код
Выбрать все
по аналогии с "ПерехватитьСобытияГК"
УправлениеНастройками.Включить/Выключить("ПерехватГлобальныхПроцедурФункций")

по аналогии с "ВызватьОригинальноеСобытиеГК/ГМ"
Перехватчик.ВызватьОригинальноеСобытиеСистемы(ОригПарам1,ОригПарам2,.....)
 



тогда можно будет использовать ОткрытьФорму
следующим образом

Код
Выбрать все
Процедура ПриНачалеРаботыСистемы()
       ......
       УправлениеНастройками.Включить("ПерехватГлобальныхПроцедурФункций");
       ......
КонецПроцедуры

Процедура глОткрытьФорму(......) Экспорт
       //сейчас перехват включен и отрабатывают наши переопределенные процедуры/функии
       ..............
       Если ТипЗначения(ОткрываемОбъект)=100 Тогда
              //сейчас это всё-равно что "глТипЗначенияСтр(...)" .....
              Если ТипЗначенияСтр(ОткрываемОбъект)="Справочник"  Тогда
                     глОткрытьФорму(ОткрываемОбъект.ТекущийЭлемент()......);
                     Возврат;
              КонецЕсли;
       КонецЕсли;
       .............. ....
       ам2,Парам3,.....);
       ......
КонецПроцедуры 

  
Наверх
 
IP записан
 
vladimirmir2012
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 426
Зарегистрирован: 18. Мая 2011
Re: Перехват ТипЗначенияСтр / ОткрытьФорму и других...
Ответ #2 - 30. Июля 2013 :: 10:30
Печать  
.
« Последняя редакция: 12. Сентября 2018 :: 11:39 - vladimirmir2012 »  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать