Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Тестируем: Добавление контекстов (число прочтений - 8239 )
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Тестируем: Добавление контекстов
25. Августа 2008 :: 20:23
Печать  
Итак, по следам полосатого слона:

http://www.1cpp.ru/forum/YaBB.pl?num=1219216486/18#18
http://www.1cpp.ru/forum/YaBB.pl?num=1219421843/1#1

Если будет желание, можно потестировать немного другой подход - вариант с объединением контекстов.

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

Я бы сказал, что это, скорее, реализация концепции примесей или стратегий.

Что мне интересно:
1. Нужно ли это кому-либо?
2. Если нужно, то для чего?
3. Насколько текущая реализация стабильна. Падает? Нет? При каких условиях?
4. Отрицательные стороны такого механизма. В чем они? Хотелось бы помоделировать и порассуждать.

P.S.
Описание:
Ко всем групповым контекстам добавлен метод __ДобавитьКонтекст(__конт); доступ осуществляется через "Сам()", т.е. через контекст.
1cpp.dll нужно положить в каталог бд, а обработку можно посмотреть.
вот, вроде бы, и все. Улыбка
  

addcontext.rar ( 554 KB | Загрузки )

De quelle planète es-tu?
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #1 - 25. Августа 2008 :: 21:34
Печать  
Тест скомпилирован на базе последних исходников icpp?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #2 - 26. Августа 2008 :: 03:10
Печать  
И почему же этот вариант не в спец. ветке в репозитарии ? Печаль
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Тестируем: Добавление контекстов
Ответ #3 - 26. Августа 2008 :: 05:49
Печать  
Arta писал(а) 25. Августа 2008 :: 21:34:
Тест скомпилирован на базе последних исходников icpp?

Есессно.
Если не использовать добавленный метод контекстов - это обычный trunk icpp.

artbear писал(а) 26. Августа 2008 :: 03:10:
И почему же этот вариант не в спец. ветке в репозитарии ? Печаль

А почему он должен быть там? Никто пока не просил ветку добавить Улыбка

P.S.
Там очень простая реализация.
Нам сейчас надо оценить безопасность модели.
  

gcboost.h ( 11 KB | Загрузки )

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #4 - 26. Августа 2008 :: 06:15
Печать  
Да, посмотрел, вроде нормально, но нужно потестить на юнит-тестах.
Ты проверял добавление контекста, затем прямое редактирование в ТП - остаются ли добавленные контексты?

Пока что я предлагаю
1. Добавляем Контекст::__ДобавитьСвойство(Имя)
оно у меня уже протестировано.
2. Добавляем Контекст::__ДобавитьКонтекст(Конт)
Думаю, что два этих метода вполне могут существовать вместе/независимо как 2 разных подхода работы.

3. Выпускаем релиз 3.0.1.16
тем более, что у меня еще одна нужная фича для Перехватчика реализовалась - http://www.1cpp.ru/bugs/show_bug.cgi?id=4097

4. Тестируем сборку, готовим доку, закрываем старые баги.
5. Через пару недель выпускаем уже окончательный релиз 3.1

Мне лично не хочется ждать пару недель до выпуска релиза 3.1 и только потом начинать юзать методы из пп.1 и 2. Не настолько уж они критичны Улыбка

Что скажешь?
  

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: Тестируем: Добавление контекстов
Ответ #5 - 26. Августа 2008 :: 06:30
Печать  
artbear писал(а) 26. Августа 2008 :: 06:15:
Да, посмотрел, вроде нормально, но нужно потестить на юнит-тестах.
Ты проверял добавление контекста, затем прямое редактирование в ТП - остаются ли добавленные контексты?

Т.е. у тебя в прямом редактировании ТП будет вызвано CGroupContext::Accept, ТурбоБЛ обновит данные контекста, а твои добавленные контексты пропадут Печаль
Т.е. ИМХО код из вызова метода
Код
Выбрать все
std::vector<CBLPtr<CBLContext> > vc;
std::swap(vc, m_AddedCtx);
pGroupCont->Accept();
std::swap(vc, m_AddedCtx); 


нужно встраивать непосредственно в перехваченный в ТурбоБЛ CGroupContext::Accept !
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Тестируем: Добавление контекстов
Ответ #6 - 26. Августа 2008 :: 09:01
Печать  
artbear писал(а) 26. Августа 2008 :: 06:30:
нужно встраивать непосредственно в перехваченный в ТурбоБЛ CGroupContext::Accept !

Я знаю.
И еще кое-что по-мелочи.

Здесь мне больше интересно пообсуждать идею, а не реализацию.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #7 - 26. Августа 2008 :: 09:10
Печать  
ИМХО при добавлении контекста было бы удобно передавать некий флаг, регулирующий проверку совпадающих свойств и методов у исходного контекста и добавляемого.
Типа если Флаг = 1 (разработка), то происходит анализ совпадения и выдаются ошибки в окно сообщений
Если Флаг = 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 записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #8 - 26. Августа 2008 :: 09:14
Печать  
И что за проблема с АссоциативнымВектором ?
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Тестируем: Добавление контекстов
Ответ #9 - 26. Августа 2008 :: 09:23
Печать  
artbear писал(а) 26. Августа 2008 :: 06:15:
...
3. Выпускаем релиз 3.0.1.16
тем более, что у меня еще одна нужная фича для Перехватчика реализовалась - http://www.1cpp.ru/bugs/show_bug.cgi?id=4097
...
Что скажешь?

http://www.1cpp.ru/forum/YaBB.pl?num=1219421843/19#19

Артур, надо учиться выпускать релизы.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #10 - 26. Августа 2008 :: 11:10
Печать  
artbear писал(а) 26. Августа 2008 :: 09:14:
И что за проблема с АссоциативнымВектором ?

ДА, тут интересный прикол - эта коллекция добавляется, в списке свойств вроде как добавленные элементы появляются, хотя вроде как не должны Улыбка
правда, обращение к ним через контекст роняет 1С Печаль
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Тестируем: Добавление контекстов
Ответ #11 - 26. Августа 2008 :: 20:42
Печать  
artbear писал(а) 26. Августа 2008 :: 11:10:
artbear писал(а) 26. Августа 2008 :: 09:14:
И что за проблема с АссоциативнымВектором ?

ДА, тут интересный прикол - эта коллекция добавляется, в списке свойств вроде как добавленные элементы появляются, хотя вроде как не должны Улыбка
правда, обращение к ним через контекст роняет 1С Печаль

Потом расскажу.
...
Лана, щас расскажу. Улыбка

Ну, вкратце - я могу сделать точно такую же безопасную коллекцию, но из-за реализации контекстов в 1С доступ по имени свойства будет иметь сложность O(N).
Потому что в итоге приходится находить по имени не просто пару "ключ, значение", а ее номер в коллекции, а это - O(N).
Поэтому использован некий хак, который позволяет решить эту задачу со сложностью const.
Но чем-то приходится жертвовать - и в данном случае - это жестко регламентированный протокол использования методов контекста.

Для ассоциативного вектора нельзя кешировать номера свойств.
Можно только искать свойства через FindProp, а после получать значения через возвращенный дескриптор (а не номер) свойства.
Это прекрасно работает в родном окружении 1С.
Но вот добавить такой контекст через TurboBL увы, не получится.

Да и не велика потеря.
Я только сейчас заметил, что и добавление структуры у меня в Тест2() работает неверно (ну или "весьма своеобразно").
Свойства-то структуры к контексту добавляются, но только те, которые были добавлены к контексту до добавления контекста структуры.
Но вот дальнейшая вставка свойств уже в контексте не отображается.
Например, нельзя получить свойство структуры "Десять" через контекст.
По крайней мере, до тех пор, пока не будет вызван очередной Accept().

Т.е. добавление полиморфных контекстов к ГК не имеет смысла.
Все равно TurboBL не заточена под поддержку таких контекстов в соединении с ГК.

А вот добавлять что-то статическое, типа первого теста - это должно работать.
Можно даже придумать, когда это действительно будет нужно. Улыбка

P.S.
Я так и знал, что добавление контекстов - это очередной ящик Пандоры... Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #12 - 27. Августа 2008 :: 03:47
Печать  
Михаил, а ты на тестах 1С++, похоже, что не проверял Печаль
Падают тесты ТурбоБЛ - например, вызов методов контекста с параметрами по умолчанию.
  

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: Тестируем: Добавление контекстов
Ответ #13 - 27. Августа 2008 :: 03:50
Печать  
artbear писал(а) 27. Августа 2008 :: 03:47:
Михаил, а ты на тестах 1С++, похоже, что не проверял Печаль
Падают тесты ТурбоБЛ - например, вызов методов контекста с параметрами по умолчанию.

Исправил.
  

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: Тестируем: Добавление контекстов
Ответ #14 - 27. Августа 2008 :: 05:59
Печать  
Обновил доку + примеры использования
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Тестируем: Добавление контекстов
Ответ #15 - 27. Августа 2008 :: 07:18
Печать  
artbear писал(а) 27. Августа 2008 :: 03:50:
artbear писал(а) 27. Августа 2008 :: 03:47:
Михаил, а ты на тестах 1С++, похоже, что не проверял Печаль
Падают тесты ТурбоБЛ - например, вызов методов контекста с параметрами по умолчанию.

Исправил.

Опс, совсем забыл про них. Печаль
Хорошо, что ты вспомнил.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #16 - 28. Августа 2008 :: 04:38
Печать  
kms писал(а) 26. Августа 2008 :: 20:42:
Я только сейчас заметил, что и добавление структуры у меня в Тест2() работает неверно (ну или "весьма своеобразно").
Свойства-то структуры к контексту добавляются, но только те, которые были добавлены к контексту до добавления контекста структуры.
Но вот дальнейшая вставка свойств уже в контексте не отображается.
Например, нельзя получить свойство структуры "Десять" через контекст.
По крайней мере, до тех пор, пока не будет вызван очередной Accept().

Т.е. добавление полиморфных контекстов к ГК не имеет смысла.
Все равно TurboBL не заточена под поддержку таких контекстов в соединении с ГК.

P.S.
Я так и знал, что добавление контекстов - это очередной ящик Пандоры... Улыбка

Для обновления данных ГК уже после изменения исходного контекста можно юзать Система::ОбновитьДанныеГК(Конт) - я исправил его реализацию на вызов Accept
В тестах 1С++ все работает - они уже залиты в репозитарий.

В связи с этим может быть добавим в контексты еще один метод - __Обновить() - который будет вызывать простой Accept для контекста ?
А Система::ОбновитьДанныеГК(Конт) соответственно удалим.
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Тестируем: Добавление контекстов
Ответ #17 - 28. Августа 2008 :: 18:26
Печать  
artbear писал(а) 28. Августа 2008 :: 04:38:
Для обновления данных ГК уже после изменения исходного контекста можно юзать Система::ОбновитьДанныеГК(Конт) - я исправил его реализацию на вызов Accept
В тестах 1С++ все работает - они уже залиты в репозитарий.

В связи с этим может быть добавим в контексты еще один метод - __Обновить() - который будет вызывать простой Accept для контекста ?
А Система::ОбновитьДанныеГК(Конт) соответственно удалим.

А я что-то сомневаюсь.
Есть ли смысл выносить этот метод из Системы в контекст?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #18 - 29. Августа 2008 :: 03:34
Печать  
Ну в принципе, этот метод относится непосредственно к контексту, поэтому есть смысл к нему и добавить!
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Тестируем: Добавление контекстов
Ответ #19 - 29. Августа 2008 :: 06:33
Печать  
artbear писал(а) 29. Августа 2008 :: 03:34:
Ну в принципе, этот метод относится непосредственно к контексту, поэтому есть смысл к нему и добавить!

Кстати, а зачем он, вообще, нужен?
Это же такой внутренний метод, зачем он нужен пользователям?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #20 - 29. Августа 2008 :: 06: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 записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Тестируем: Добавление контекстов
Ответ #21 - 29. Августа 2008 :: 06:42
Печать  
artbear писал(а) 29. Августа 2008 :: 06:39:
Сейчас он пригодится при изменении исходного контекста и желании пользователя обновить контекст, к которому мы добавляли исходный.

Мне не хотелось бы давать такую возможность.
Ибо перестроение контекста - операция небыстрая, небезопасная.
Я бы скорее сейчас считал дизайн, где такой метод необходим, неправильным (я про принудительный Accept).
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #22 - 29. Августа 2008 :: 06:51
Печать  
Лады, я не сильно настаиваю, текущий вариант меня устраивает.
Тогда __Обновить отбрасываем.
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Тестируем: Добавление контекстов
Ответ #23 - 29. Августа 2008 :: 06:58
Печать  
artbear писал(а) 29. Августа 2008 :: 06:51:
Лады, я не сильно настаиваю, текущий вариант меня устраивает.
Тогда __Обновить отбрасываем.

Понимаешь, я не то, чтобы именно по поводу обновления сомневаюсь.
Я вообще сомневаюсь по всему этому творчеству по добавлению контекстов.

Там есть подводные камни.
Например: ТП кеширует номера методов формы (для событий).
При добавлении контекстов, номера методов будут смещаться.

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

Ладно, не обращай внимания Улыбка это рабочие сомнения такие...
  

De quelle planète es-tu?
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #24 - 29. Августа 2008 :: 08:08
Печать  
Это миниответ на мою стародавню хотелку?:
http://www.1cpp.ru/forum/YaBB.pl?num=1163938068/0
  
Наверх
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Тестируем: Добавление контекстов
Ответ #25 - 29. Августа 2008 :: 10:16
Печать  
trdm писал(а) 29. Августа 2008 :: 08:08:
Это миниответ на мою стародавню хотелку?:
http://www.1cpp.ru/forum/YaBB.pl?num=1163938068/0

Не, Дим, это работает только для ГК (групповых контекстов).
И у добавленного контекста нет доступа к оригинальному контексту.

Т.е. это скорее добавка к Артурову Перехватчику.
  

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


I Love YaBB 2!

Сообщений: 135
Зарегистрирован: 18. Октября 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #26 - 03. Сентября 2008 :: 20:08
Печать  
Код
Выбрать все
Процедура Сформировать()
КонтФормы="";
КонтФормы=ВернутьКонтекст(контекст);

	Структура = СоздатьОбъект("Структура");
	Структура.Вставить("ДопСвойство", "ПростоСтрока");

	КонтФормы.__ДобавитьКонтекст(Структура);

	Сообщить("Новое свойство = "+КонтФормы.ДопСвойство);
КонецПроцедуры 



10 раз нажал сформировать появилось 10 ДопСвойство в отладчике)) Оно разве так надо
  
Наверх
 
IP записан
 
Sergey
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 135
Зарегистрирован: 18. Октября 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #27 - 03. Сентября 2008 :: 20:33
Печать  
Код
Выбрать все
Перем ДопСвойство;

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


//*******************************************
Процедура Сформировать()

КонтФормы=ВернутьКонтекст(контекст);
ДопСвойство=1;//Это работает.

Структура = СоздатьОбъект("Структура");
Структура.Вставить("ДопСвойство", "ПростоСтрока");

КонтФормы.__ДобавитьКонтекст(Структура);

Сообщить("Новое свойство = "+КонтФормы.ДопСвойство);

ДопСвойство=1;//А ЭТО УЖЕ НЕ РАБОТАЕТ!!!!!!!
КонтФормы.ДопСвойство=1;// теперь только так работает!!
КонецПроцедуры 

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


I Love YaBB 2!

Сообщений: 135
Зарегистрирован: 18. Октября 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #28 - 03. Сентября 2008 :: 20:58
Печать  
Вот так переменные не размножаются))


Код
Выбрать все
Процедура Сформировать()

КонтФормы=ВернутьКонтекст(контекст);

Структура = СоздатьОбъект("Структура");
//Структура.Вставить("ДопСвойство", "ПростоСтрока");
КонтФормы.__ДобавитьКонтекст(Структура);
//Сообщить("Новое свойство = "+КонтФормы.ДопСвойство);
КонтФормы.Вставить("ДопСвойство1", "ПростоСтрока1");
КонтФормы.Вставить("ДопСвойство2", "ПростоСтрока2");
Структура = СоздатьОбъект("Структура");//для обновления
КонтФормы.__ДобавитьКонтекст(Структура);// для обновления

КонецПроцедуры 

  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Тестируем: Добавление контекстов
Ответ #29 - 04. Сентября 2008 :: 05:13
Печать  
Sergey

Цитата:
10 раз нажал сформировать появилось 10 ДопСвойство в отладчике)) Оно разве так надо

Так надо - ты же добавил 10 контекстов.
Другое дело, что сможешь пользоваться только одним - остальные 9 будут недоступны.

Цитата:
ДопСвойство=1;//А ЭТО УЖЕ НЕ РАБОТАЕТ!!!!!!!

Верно, не работает.
Чтобы такое работало, необходимо перекомпилировать модуль.
Здесь об этом и речи не идет - поэтому доступ возможен только через групповой контекст (у тебя - КонтФормы).

Цитата:
КонтФормы.__ДобавитьКонтекст(Структура);
КонтФормы.__ДобавитьКонтекст(Структура);// для обновления

Я бы не советовал использовать эту возможность таким образом.

Во-первых, здесь добавляются два контекста вместо одного.
А, как известно, даже незаряженные ружья иногда начинают стрелять.

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

Это просто возможность добавить несколько фиксированных свойств и методов к контексту - и пока все.
Для перехватчика, в основном, это нужно.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #30 - 04. Сентября 2008 :: 05:38
Печать  
В-третьих, хорошо бы доку на это событие почитать, там описаны ограничения метода.
  

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] 
ОтправитьПечать