Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Подмена процедуры модуля формы (число прочтений - 6702 )
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Подмена процедуры модуля формы
17. Декабря 2010 :: 08:24
Печать  
Продолжение темы из ветки http://www.1cpp.ru/forum/YaBB.pl?num=1291513086/46#46

Кстати да, вариант Артура вполне реальный, только там весь текст подменяется, а я говорил об одной функции/процедуре.

Наверное требуется все таки пояснение, зачем мне это нужно.

Есть конфигурация, над ней работает 3 человека, в том числе я.
К сожалению, на данный момент процесс совместной работы организован не совсем так, как мне хотелось бы, точнее вообще не организован Улыбка

Поэтому если действовать по способу Артура, то получится следующее: я подменю весь модуль формы, но другие по прежнему будут пытаться править его в конфе, а так как пока внедрение 1cpp и иже с ними идет только с моей стороны, а они пока еще не созрели к использованию все прелестей доп. библиотек (1cpp, formex, 1sqlite и т.д.), то я особенно их не трогаю, просто использую их в тех участках, над которыми работаю.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подмена процедуры модуля формы
Ответ #1 - 17. Декабря 2010 :: 09:05
Печать  
ИМХО, своими действиями ты их сильно подставляешь.

если у вас идет коллективная разработка, сделайте связку gcomp+SVN
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Подмена процедуры модуля формы
Ответ #2 - 17. Декабря 2010 :: 09:12
Печать  
JohnyDeath писал(а) 17. Декабря 2010 :: 09:05:
ИМХО, своими действиями ты их сильно подставляешь.
Естественно, что я предусмотрю, что бы никто не обиделся Улыбка

JohnyDeath писал(а) 17. Декабря 2010 :: 09:05:
если у вас идет коллективная разработка, сделайте связку gcomp+SVN
Ох, об этом я пока даже и не мечтаю..
А как уже привык так работать..

Их бы к 1cpp приобщить, и то победа..
А работа с конфигурацией пока вообще носит хаотичный характер..
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Подмена процедуры модуля формы
Ответ #3 - 17. Декабря 2010 :: 09:51
Печать  
Мы данную проблему решили классами. Код конфы уже очень редко модифицируется, только если требуется изменить набор реквизитов объекта или добавить новый.
Ну и ответственность каждого разработчика при обновлении классов - внимательно смотреть на дату, твое ли изменение было последним, если нет - сравнить и сделать выводы - может быть надо пообщаться, а может ручнами перенести добавленный/измененный функционал, поставив в известность остальных.
Но самое главное - у каждого есть свои границы ответственности, конфигурации, их части и т.д.
К сожалению, использование SVN при работе с 1С - слишком муторное занятие, потому идея не прижилась.
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Подмена процедуры модуля формы
Ответ #4 - 17. Декабря 2010 :: 10:06
Печать  
Dmitry The Wing писал(а) 17. Декабря 2010 :: 09:51:
Мы данную проблему решили классами.
Я тоже давно так работаю, но с переходом на новую работу - новая конфа, непаханное поле..

Dmitry The Wing писал(а) 17. Декабря 2010 :: 09:51:
К сожалению, использование SVN при работе с 1С - слишком муторное занятие, потому идея не прижилась.
А вот это мне кажется зря - связка GComp + CVS и меня успешно работала уже года 3 как наверное, если не больше..
Правда тогда я был единственным программистом Улыбка
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Подмена процедуры модуля формы
Ответ #5 - 17. Декабря 2010 :: 12:46
Печать  
Так все-таки dwx нужен?  Круглые глаза

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



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Подмена процедуры модуля формы
Ответ #6 - 18. Декабря 2010 :: 14:54
Печать  
В общем, если вдруг не окажется, что это очередной велосипед, то можно сделать так - при компиляции будет вызываться глбальная процедура "ПриКомпиляцииМодуля", например:

Код
Выбрать все
Процедура ПриКомпиляцииМодуля(Конт, ТекстМодуля) Экспорт
	РасшФорма  = СоздатьОбъект("РасширениеФормы");
	РасшФорма.УстановитьФорму(Конт.Форма);
	Message(РасшФорма.ПолныйТипОбъекта());
	Message(ТекстМодуля);
КонецПроцедуры
 

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


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Подмена процедуры модуля формы
Ответ #7 - 20. Декабря 2010 :: 07:20
Печать  
Супер!
Как сделать? Улыбка
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Подмена процедуры модуля формы
Ответ #8 - 20. Декабря 2010 :: 08:26
Печать  
CaBaT писал(а) 20. Декабря 2010 :: 07:20:
Супер!
Как сделать? Улыбка


Вот класс, который перехватывает компиляцию модулей и вызывает функцию из глобальника "ПриКомпиляцииМодуля (Контекст, ТекстМодуля)". Делаешь в ней что угодно с текстом модуля и возвращаешь "исправленный" вариант, он и уезжает на компиляцию.

В скрипте, я определяю тип приезжающего контекста и если это "CGroupContext", проверяю есть ли у него свойство "Форма", если есть то вызываю глобальную функцию.
Нафига эта проверка - чтобы избежать перехват компиляции классов (вдруг ты решишь в глобальной функии создать объект пользовательского класса - произойдет зацикливание  - вот чтобы этого не происходило). Свойство "Форма" проверяю, чтобы обрабатывались только контексты Формы. Обработка проведения и так отлавливается через стандартный Перехватчик.
Чтобы перехват заработал - создай глобальную переменную с объектом данного класса. (здесь все упирается в количество вызовов RegisterCallBack (буду работать над тем, чтоб снять это ограничение)) Пока она существует, перехват должен работать, в деструкторе я все возвращаю на свои места.
Отпишись тогда, что-как... Улыбка
  

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


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Подмена процедуры модуля формы
Ответ #9 - 20. Декабря 2010 :: 08:37
Печать  
А dynwrapex надо правленный тобой использовать или стандартный?
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Подмена процедуры модуля формы
Ответ #10 - 20. Декабря 2010 :: 08:54
Печать  
CaBaT писал(а) 20. Декабря 2010 :: 08:37:
А dynwrapex надо правленный тобой использовать или стандартный?

Правленный.
Я же вроде класс выкладывал, которые его правит на лету, т.е. в оперативке.Этот класс нужно один раз создать и все.
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Подмена процедуры модуля формы
Ответ #11 - 20. Декабря 2010 :: 08:57
Печать  
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Подмена процедуры модуля формы
Ответ #12 - 20. Декабря 2010 :: 09:04
Печать  
CaBaT писал(а) 20. Декабря 2010 :: 08:57:

тогда верно
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Подмена процедуры модуля формы
Ответ #13 - 20. Декабря 2010 :: 09:09
Печать  
Проверил - похоже работает! Улыбка
Пока просто проверил факт перехвата, теперь попробую проверить подмену текста модуля.

Для универсальности мне кажется лучше бы сделать так, что бы
DWX.Перехватчик давал возможность подписаться на событие компиляции, и тогда не надо делать обработчик в ГМ, а просто из нужного места подписаться на событие и в зависимости от того, что за контекст - делать подмену.
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Подмена процедуры модуля формы
Ответ #14 - 20. Декабря 2010 :: 09:17
Печать  
CaBaT писал(а) 20. Декабря 2010 :: 09:09:
Проверил - похоже работает! Улыбка
Для универсальности мне кажется лучше бы сделать так, что бы
DWX.Перехватчик давал возможность подписаться на событие компиляции, и тогда не надо делать обработчик в ГМ, а просто из нужного места подписаться на событие и в зависимости от того, что за контекст - делать подмену.


Не факт, что это получится реализовать...но подумать можно
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать