Переключение на Главную Страницу Страницы: 1 2 [3] 4  ОтправитьПечать
Очень популярная тема (более 25 ответов) Новые предопределенные методы КОП (число прочтений - 23232 )
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Новые предопределенные методы КОП
Ответ #30 - 04. Июня 2008 :: 05:39
Печать  
Блин, а я уж как только не смотрел, и pModLocale в т.ч. изучал Улыбка
Спасибо большое!
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Новые предопределенные методы КОП
Ответ #31 - 04. Июня 2008 :: 06:53
Печать  
Ага, все отлично получилось Улыбка - тестовая конфа сработала на ура.

Да, при компиляции модуля с назначенным контекстом прикольно все происходит : любые неизвестные функции (глобальные Сообщить(), Вирт(), КаталогИБ() ) сначала ищутся в модуле класса.
Очень полезная инфа, не знал Улыбка

Саше Орефкову очередное УРА !!
  

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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Новые предопределенные методы КОП
Ответ #32 - 04. Июня 2008 :: 07:04
Печать  
Именно на этом механизме я и предлагал сделать прямое обращение к методам базовых классов, без "ПолучитьБазовыйКласс".
Ведь когда мы компилируем модуль класса-наследника, и 1С ищет методы, которых нет в самом модуле, то в этот момент модуль базового класса УЖЕ СКОМПИЛИРОВАН, и можно поискать их там.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Новые предопределенные методы КОП
Ответ #33 - 04. Июня 2008 :: 09:29
Печать  
Да, теперь подобное вполне возможно.
Подумаю и постараюсь сделать.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Новые предопределенные методы КОП
Ответ #34 - 04. Июня 2008 :: 11:35
Печать  
orefkov писал(а) 04. Июня 2008 :: 07:04:
Именно на этом механизме я и предлагал сделать прямое обращение к методам базовых классов, без "ПолучитьБазовыйКласс".
Ведь когда мы компилируем модуль класса-наследника, и 1С ищет методы, которых нет в самом модуле, то в этот момент модуль базового класса УЖЕ СКОМПИЛИРОВАН, и можно поискать их там.

Добавлю: и к методам, и к свойствам базовых классов.

Т.е. например, можно добавить какое-нибудь предопределенное свойство для всех классов Улыбка

Например, мне давно очень хочется добавить свойство _ФабрикаКОП_ типа ФабрикаОбъектов для удобного и быстрого создания любых объектов на базе Фабрики Улыбка
Это свойство будет только для чтения и будет существовать в единственном экземпляре внутри 1С++, т.к. этот объект не имеет состояния.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Новые предопределенные методы КОП
Ответ #35 - 04. Июня 2008 :: 11:36
Печать  
Кстати, скажите, плиз, какие предопределенные функции и свойства удобно иметь в каждом классе КОП ?
Очень интересная тема.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Новые предопределенные методы КОП
Ответ #36 - 04. Июня 2008 :: 13:32
Печать  
Саш, а получается, что из класса нельзя возвращать значение я() , иначе какая-то хрень выдается, верно?
Возвращать из класса можно значения только вирт().
Например, я в твоем примере в классе Базовый пишу
Код
Выбрать все
Функция ВернутьВирт() Экспорт
	Возврат вирт();
КонецФункции

Функция ВернутьСебя() Экспорт
	Возврат я();
КонецФункции 


А в тесте пишу
Код
Выбрать все
Тест=СоздатьОбъект("Базовый");
лОбъект = Тест.ВернутьВирт();
Сообщить("лОбъект = <"+лОбъект+">");

лОбъект = Тест.ВернутьСебя();
Сообщить("лОбъект = <"+лОбъект+">"); 


Получаю результат
Цитата:
лОбъект = <Базовый>
лОбъект = <>


Это поведение будем считать нормальным?
  

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


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Новые предопределенные методы КОП
Ответ #37 - 04. Июня 2008 :: 13:54
Печать  
artbear писал(а) 08. Апреля 2008 :: 13:38:
Цитата:
Создал ветку в репозитарии, test_virt
Там на скорую руку сделаны две предопределенные функции, которые можно использовать
в любом модуле КОПов
вирт() - вместо Сам(Контекст)
и
я() - типа Сам(Контекст).ТекущийОбъект()



А что такое ТекущийОбъект() для произвольного класса?
  
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Новые предопределенные методы КОП
Ответ #38 - 04. Июня 2008 :: 13:57
Печать  
Это вспомогательный объект, который позволяет обратиться к виртуальным методам и экспортным атрибутам данного класса без виртуальности Улыбка

Т.е. для иерархии Базовый-Наследник и виртуального метода Показать(), определенного в обоих классах, употребление в коде класса Базовый вызова я().Показать() выполнит именно Базовый::Показать(), а не как обычно Наследник::Показать()
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Новые предопределенные методы КОП
Ответ #39 - 04. Июня 2008 :: 14:30
Печать  
Перенес пост в соответствующую ветку
http://www.1cpp.ru/forum/YaBB.pl?num=1212645215/0#0
« Последняя редакция: 05. Июня 2008 :: 05:59 - artbear »  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Новые предопределенные методы КОП
Ответ #40 - 05. Июня 2008 :: 05:19
Печать  
Выложена очередная сборка icpp
Цитата:
[+] http://www.1cpp.ru/bugs/show_bug.cgi?id=3889
Реализация предопределенных функций для любых КОП - вирт() и я() - без необходимости определения их в модуле класса


Прошу качать и тестить.

Обсуждение фичи на http://www.1cpp.ru/forum/YaBB.pl?num=1207661901/0 или в багзилле.

Выкладываю тестовую конфигурацию для проверки - http://www.1cpp.ru/forumfiles/Attachments/1cpp_test_virt_2.rar

Важно: две функции ( вирт() и я() ) в глобальнике нужны только для синтакс-контроля в режиме Конфигуратора,
в режиме Предприятия классы прекрасно создаются и без этих функций.

ЗЫ как обычно, все проверено на автоматических юнит-тестах Улыбка
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Новые предопределенные методы КОП
Ответ #41 - 05. Июня 2008 :: 05:21
Печать  
artbear писал(а) 04. Июня 2008 :: 13:32:
Саш, а получается, что из класса нельзя возвращать значение я() , иначе какая-то хрень выдается, верно?
Возвращать из класса можно значения только вирт().

...

Это поведение будем считать нормальным?

Этот баг был поборен решением из http://www.1cpp.ru/forum/YaBB.pl?num=1207661901/39#39
Сейчас все нормально, можно возвращать как вирт(), так и я ().
  

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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Новые предопределенные методы КОП
Ответ #42 - 05. Июня 2008 :: 05:26
Печать  
Насчет Reset это точно.
С trad'ом как-то разбирались с подобной фигней.
Выяснили, что при вызове функций движок 1С использует для retVal статический объект CValue. И это приводит к разным траблам. Например, если мы в своем методе присвоили retVal ссылку на контекст, а потом сгенерили RuntimeError, то так как retVal статическая, а не на стеке, для нее не вызывается деструктор, и на тот контекст (который записывали в retVal), ссылка сохраняется, до того момента, пока 1С не вызовет какой-либо другой метод, в котором retVal присвоится другое значение. А в случаях, когда в коде 1С пишут Возврат ВызовНекойФункции(); , ссылки на объекты могут вообще считаться криво.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Новые предопределенные методы КОП
Ответ #43 - 05. Июня 2008 :: 05:27
Печать  
Т.е. теперь можно в классах делать так:
1. Просто в коде писать вирт().НужныйМетод или вирт().НужныАтрибут вместо необходимости определять функции типа Этот(Конт) и вызова Этот(Контекст).НужныйМетод

2. 100% совместимость осталась, но можно для небольшого ускорения работы классов вместо
Код
Выбрать все
Функция Этот(Конт) Возврат Конт; КонецФункции
Функция Сам() Возврат Этот(Контекст); КонецФункции 


писать
Код
Выбрать все
Функция Этот(Конт) Возврат вирт(); КонецФункции
Функция Сам() Возврат вирт(); КонецФункции 


  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Новые предопределенные методы КОП
Ответ #44 - 05. Июня 2008 :: 05:42
Печать  
Перенес пост в соответствующую ветку
http://www.1cpp.ru/forum/YaBB.pl?num=1212645215/0#0
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 
ОтправитьПечать