Переключение на Главную Страницу Страницы: 1 2 [3] 4  ОтправитьПечать
Очень популярная тема (более 25 ответов) Использование последнего Formex и старой 1cp++ (2.0.1.2) (число прочтений - 13444 )
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Использование последнего Formex и старой 1cp++ (2.0.1.2)
Ответ #30 - 10. Декабря 2010 :: 07:30
Печать  
artbear писал(а) 09. Декабря 2010 :: 19:51:
Если идет локальный вызов процедуры из процедуры/функции этого же модуля

Да, вызов будет локальный, и я его хотел перенаправить на свой код..
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Использование последнего Formex и старой 1cp++ (2.0.1.2)
Ответ #31 - 10. Декабря 2010 :: 17:06
Печать  
CaBaT писал(а) 10. Декабря 2010 :: 07:30:
artbear писал(а) 09. Декабря 2010 :: 19:51:
Если идет локальный вызов процедуры из процедуры/функции этого же модуля

Да, вызов будет локальный, и я его хотел перенаправить на свой код..


А приведи конкретный пример, чтоб было проще копать
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Использование последнего Formex и старой 1cp++ (2.0.1.2)
Ответ #32 - 13. Декабря 2010 :: 07:10
Печать  
Простой пример:

Есть форма элемента справочника, в модуле формы есть процедура, которая вызывается в самом модуле.
Хотел не меняя код процедуры, подменить своей, что бы при вызове в модуле вызывалась моя.

Поразмыслив, пришел к выводу, что озорство все это.
Слишком много гемора ради того, что бы не трогать конфигурацию.

Просто подумалось, что это позволило бы дальше развить идею перехвата - вообще исключить необходимость трогать конфиг, если вдруг есть такая необходимость Улыбка
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Использование последнего Formex и старой 1cp++ (2.0.1.2)
Ответ #33 - 13. Декабря 2010 :: 08:36
Печать  
CaBaT писал(а) 13. Декабря 2010 :: 07:10:
Просто подумалось, что это позволило бы дальше развить идею перехвата - вообще исключить необходимость трогать конфиг, если вдруг есть такая необходимость Улыбка

Не выйдет. Уже потому, что в коде может не быть процедуры, которую хочется перехватить...

Я делаю проще - выношу весь код в класс, оставляя в документе только предопределенные процедуры по максимуму, перенаправляя вызов в класс. Таким образом, изменение конфы требуется только раз, а затем менется только класс ... до тех пор, пока не потребуется изменить набор реквизитов справочника или документа.
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Использование последнего Formex и старой 1cp++ (2.0.1.2)
Ответ #34 - 13. Декабря 2010 :: 09:11
Печать  
Dmitry The Wing писал(а) 13. Декабря 2010 :: 08:36:
Я делаю проще - выношу весь код в класс, оставляя в документе только предопределенные процедуры по максимуму, перенаправляя вызов в класс. Таким образом, изменение конфы требуется только раз, а затем менется только класс ... до тех пор, пока не потребуется изменить набор реквизитов справочника или документа.


Гениально! Улыбка
Тоже последнее время так делал, но к сожалению, в настоящий момент работаю с конфигурацией, в которой пока не все могу сделать так, как привык, приходится крутится Улыбка
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Использование последнего Formex и старой 1cp++ (2.0.1.2)
Ответ #35 - 13. Декабря 2010 :: 09:14
Печать  
CaBaT писал(а) 13. Декабря 2010 :: 07:10:
Просто подумалось, что это позволило бы дальше развить идею перехвата - вообще исключить необходимость трогать конфиг, если вдруг есть такая необходимость Улыбка


Как сказал Артур, при вызове локальной функции (а именно это и требуется перехватить) 1С напрямую обращается к уже откомпилированному P-коду и как с ним бороться, я на данный момент просто не знаю.
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Использование последнего Formex и старой 1cp++ (2.0.1.2)
Ответ #36 - 13. Декабря 2010 :: 09:24
Печать  
chessman писал(а) 13. Декабря 2010 :: 09:14:
Как сказал Артур, при вызове локальной функции (а именно это и требуется перехватить) 1С напрямую обращается к уже откомпилированному P-коду и как с ним бороться, я на данный момент просто не знаю.

Да, это понятно, поэтому и написал - проще забить, ибо затраты на реализацию превышают эффект - в конце концов проще код поменять в конфигурации..
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Использование последнего Formex и старой 1cp++ (2.0.1.2)
Ответ #37 - 13. Декабря 2010 :: 09:38
Печать  
Да, работать с байткодом сложно и вообще лениво, но для данной задачи это и не нужно.
Можно ограничиться заменой текста модуля перед компиляцией.
Другое дело, что отлаживать, да и просто осознавать эту механику может оказаться непростым делом.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Использование последнего Formex и старой 1cp++ (2.0.1.2)
Ответ #38 - 13. Декабря 2010 :: 10:18
Печать  
kms писал(а) 13. Декабря 2010 :: 09:38:
Можно ограничиться заменой текста модуля перед компиляцией.


А как это сделать, что перехватывать нужно?
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Использование последнего Formex и старой 1cp++ (2.0.1.2)
Ответ #39 - 13. Декабря 2010 :: 10:26
Печать  
Возможно, подойдет CBLModule::Compile
Можно глянуть, как оно обрабатывается в TurboBL
  

De quelle planète es-tu?
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Использование последнего Formex и старой 1cp++ (2.0.1.2)
Ответ #40 - 16. Декабря 2010 :: 12:04
Печать  
kms писал(а) 13. Декабря 2010 :: 10:26:
Возможно, подойдет CBLModule::Compile


kms, спасибо за подсказку.
Пример на dwx, как можно перехватить компиляцию и заменить текст модуля.
Меняем процедуру "Сформировать" в любом модуле.



  

dwx_hook_compile.ert ( 13 KB | Загрузки )
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Использование последнего Formex и старой 1cp++ (2.0.1.2)
Ответ #41 - 16. Декабря 2010 :: 13:41
Печать  
Круто! Освобожусь - потестирую!
А в перехвате "ПриОткрытии" можно будет подменить функции/процедуры.
И кстати, да, а функцию можно - что бы параметры возвращала?
Или это уже слишком? Улыбка
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Использование последнего Formex и старой 1cp++ (2.0.1.2)
Ответ #42 - 16. Декабря 2010 :: 14:06
Печать  
Там происходит контекстная замена текста всей процедуры.
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Использование последнего Formex и старой 1cp++ (2.0.1.2)
Ответ #43 - 16. Декабря 2010 :: 14:59
Печать  
Не совсем понял - это к п.1 (замена в "ПриОткрытии") или к п.2 (подмена функции)?
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Использование последнего Formex и старой 1cp++ (2.0.1.2)
Ответ #44 - 16. Декабря 2010 :: 20:10
Печать  
CaBaT писал(а) 16. Декабря 2010 :: 14:59:
Не совсем понял - это к п.1 (замена в "ПриОткрытии") или к п.2 (подмена функции)?


Я тебя тоже не совсем понял...
"Перехватывается" весь текст модуля контекста перед компиляцией. Ты с ним можешь сделать что угодно, в данном случае мы делаем контекстную замену процедуры "Сформировать" (если находим ее) и передаем исправленный код на компиляцию.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 
ОтправитьПечать