Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Проблема с Делегатом (число прочтений - 4939 )
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Проблема с Делегатом
24. Июня 2006 :: 18:03
Печать  
Есть класс 1, создающий другой (2).

В классе 2 код:
Код
Выбрать все
Конт = Этот(Контекст).ПолучитьКонтекстОкружения();
Делегат = СоздатьОбъект("Делегат");
Делегат.ОпределитьТип(1, 0);
Делегат.Добавить(Конт, "Печать_отчета");
Делегат.Вызвать(Параметр); 



Сия конструкция вызвала ошибку:
"В классе 'Заказ_наряд' метод 'Печать_отчета' должен принимать 0 параметров!"

Метод Печать_отчета класса 1 определен в defcls.prm как имеющий параметр, и в теле самого класса параметр есть.

Эээ... где я наступил грабли?
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Проблема с Делегатом
Ответ #1 - 24. Июня 2006 :: 18:16
Печать  
Да вроде все правильно.
Обламывает на Добавить()?

Вот здесь
Цитата:
Делегат.ОпределитьТип(1, 0);

Точно стоит "1, 0" ?

Версия 1cpp какая?
  

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



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с Делегатом
Ответ #2 - 24. Июня 2006 :: 18:18
Печать  
kms писал(а) 24. Июня 2006 :: 18:16:
Точно стоит "1, 0" ?

Версия 1cpp какая?


Код скопировал, точно 1,0

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Проблема с Делегатом
Ответ #3 - 24. Июня 2006 :: 18:21
Печать  
Странно.
Если не разберешься, набросай какой-нидь тест, плз.

Можно отдельно, можно в конфе тестирования 1cpp.
В свое время при рефактринге делегата написано было дохрена тестов, но они все проходят.

Без теста, боюсь, не доберусь я до этого дела Печаль
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Проблема с Делегатом
Ответ #4 - 24. Июня 2006 :: 18:26
Печать  
Еще добавлю, что-то непохоже, что дело в методах или в контекстах, сообщение другое было бы.
Т.е. такое чувство, что ОпределитьТип() почему-то отрабатывает неверно.

Странно это, там предельно простая реализация...
  

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



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с Делегатом
Ответ #5 - 24. Июня 2006 :: 18:30
Печать  
Так.... Либо пора на пляже сидеть по субботам, либо больше пива пить  Печаль

После перегрузки 1С - зафунициклировало.

Блин, два часа не мог разобраться.


Kms, спасибо за участие Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Проблема с Делегатом
Ответ #6 - 24. Июня 2006 :: 18:31
Печать  
Я думаю, у тебя просто сначала было неправильно написано определение типа.
И оно бралось из кеша.

Перезапустил, кеш сбросил - заработало "1, 0".

Заходите ищщо Улыбка


Цитата:
Так.... Либо пора на пляже сидеть по субботам, либо больше пива пить  Улыбка

Ой как надо, и заметь, одно другому не мешает Улыбка
  

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



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с Делегатом
Ответ #7 - 24. Июня 2006 :: 18:44
Печать  
kms писал(а) 24. Июня 2006 :: 18:31:
Я думаю, у тебя просто сначала было неправильно написано определение типа.
И оно бралось из кеша.

Перезапустил, кеш сбросил - заработало "1, 0".


Дык в том то и дело, что перепроверено было все что можно Печаль


Возник еще вопрос.
Делегат Выполняет процедуру в рамках переданного контекста...
Т.е. такая конструкция работать не должна?
Код
Выбрать все
Конт = Этот(Контекст).ПолучитьКонтекстОкружения();
Делегат.Добавить(Конт, "Док.Изображения.DblClick");
 


Где:
Док - атрибут класса 1
Изображения - активикс
DblClick - метод активикса
Подмигивание

Если вызвать просто Конт.Док.Изображения.DblClick() - то работает
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Проблема с Делегатом
Ответ #8 - 24. Июня 2006 :: 18:51
Печать  
Ты прав, так запустить не получится.

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

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



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с Делегатом
Ответ #9 - 24. Июня 2006 :: 19:33
Печать  
Ясно.



Делегата особо не развиваете, так что пожелания наверное утонут  Подмигивание

Существующими способами нельзя передать неявное кол-во параметров.

Было бы удобно получить СЗ с параметрами и:
Код
Выбрать все
Делегат.ОпределитьТип(СЗ.РазмерСписка(), 0);
Делегат.Выполнить(СЗ);
 


Или что-то в этом роде.


А в целом - полгода смотрел на тебя и дивился, на кой он сдался этот делегат   Смех
  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Проблема с Делегатом
Ответ #10 - 26. Июня 2006 :: 07:11
Печать  
Конечно, было бы лучше через делегата. Но Артур реализовал это дело через ВыполняемыйМодуль. Там пишель строку какую хочешь. Она компилируется и исполняется.

Единственный недостаток - компиляция строки. Она выполняется сравнительно долго. Но, наверное, можно накомпилировать нужные строки, а потом их исполнять. Получатся как хранимые процедуры.  Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать