Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Возможно ли перехватить СоздатьОбъект? (число прочтений - 1838 )
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Возможно ли перехватить СоздатьОбъект?
27. Июля 2009 :: 14:23
Печать  
Перехватчик не может отследить программное изменение объектов. С другой стороны, программно мы можем изменить лишь те объекты, которые были созданы через "СоздатьОбъект". Если перехватить СоздатьОбъект, то можно подменить объект на экземпляр класса-наследника, который и будет отслеживать все изменения. То есть необходим метод вроде:

Код
Выбрать все
Функция Событие_СоздатьОбъект(ИмяОбъекта)
   Если Лев(ИмяОбъекта,8)="Документ" Тогда
      Объект=СоздатьОбъект("КлассДокументНаследник");
      Если Сред(ИмяОбъекта,9,1)="." Тогда
         Объект.Вид=Сред(ИмяОбъекта,10);
      КонецЕсли;
   Иначе
      Объект=СоздатьОбъект(ИмяОбъекта);
   КонецЕсли
   Возврат Объект;
КонецФункции 



Возможно сделать такое?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможно ли перехватить СоздатьОбъект?
Ответ #1 - 28. Июля 2009 :: 04:13
Печать  
Реализация вполне возможна, но нужно помнить, что перехват подобного метода может очень сильно затормозить всю систему, т.к. при создании КАЖДОГО объекта будет выполняться очень медленный код на языке 1С.

Возможно, проще и правильнее будет сделать спец.метод для подмены создания различных объектов.
Например, добавить в 1С++ спец.метод Система::ПодменитьСоздаваемыеОбъекты(СписокИлиСтруктураПодменяемыхОбъектов),
где указанный параметр - это список или структура, в которых ключ - это имя класса, который хотим подменить, а значение - имя класса, который будет подставлен вместо подменяемого.

В общем, нужно подумать Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможно ли перехватить СоздатьОбъект?
Ответ #2 - 28. Июля 2009 :: 06:10
Печать  
Да, подменить класс было бы отлично.
В текущей реализации можно пойти другим путем (по наводке Александра ака Chieftain).
Для документа: Создать класс "Документ", унаследовавшись от базового "Document" и переопределив методы, которые хотим "перехватывать". Аналогично для справочника. Ес-но, если в конфе используется англ. названия при создании базовых объектов, то такой подход не прокатит.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможно ли перехватить СоздатьОбъект?
Ответ #3 - 28. Июля 2009 :: 09:27
Печать  
Данный путь возможен, но чреват разными косяками.
Тема уже обсуждалась.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Возможно ли перехватить СоздатьОбъект?
Ответ #4 - 28. Июля 2009 :: 18:19
Печать  
[quote author=artbear link=1248704582/0#1 ыхОбъектов),
где указанный параметр - это список или структура, в которых ключ - это имя класса, который хотим подменить, а значение - имя класса, который будет подставлен вместо подменяемого.
[/quote]
Да это ж идеальный вариант будет!! Как подумал, что можно делать с такими возможностями - так чуть слюной не захлебнулся!
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать