Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Глупый вопрос про Информатор.МетодСуществует() (число прочтений - 5815 )
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Глупый вопрос про Информатор.МетодСуществует()
08. Ноября 2011 :: 05:48
Печать  
оИнформатор = СоздатьОбъект("Информатор");
оИнформатор.МетодСуществует(КонтекстФормы, ИмяМетода)

Я так понимаю, этот метод крайне плохо сочетаяется с ТурбоМД?
Т.е. в контексте есть функция ИмяМетода, но она не присутствует в сохраненном МДшники, а появилась там посредством ТурбоМД.
И оИнформатор.МетодСуществует(КонтекстФормы, ИмяМетода) упороно возвращает 0.

Надо хоть в документации это описать, что ли...
А то сначала взрываешь себе моск, пытаясь понять - почему в одном месте работает, а в соседней форме - не хочет. Потом начинаешь строить "чистый" эксперимент, сохраняешь конфу - и все начинает работать. И лишь после этого вспоминаешь, что "ага! есть такой нюанс, кажися..."
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Глупый вопрос про Информатор.МетодСуществует()
Ответ #1 - 08. Ноября 2011 :: 06:16
Печать  
Не вкурил, при чем тут проверка метода класса и турбомд ?
Ты классы свои в мд хранишь ? и Еще и в выгруженных текстах для турбомд ?

ЗЫ: ну и нет там контекста формы в параметрах = там строка с именем класса:
http://www.1cpp.ru/docum/icpp/html/MetaInfoClasses.html#ismethexist


Чорт, у тебя же информатор..
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Глупый вопрос про Информатор.МетодСуществует()
Ответ #2 - 08. Ноября 2011 :: 07:52
Печать  
Satans Claws писал(а) 08. Ноября 2011 :: 05:48:
Т.е. в контексте есть функция ИмяМетода, но она не присутствует в сохраненном МДшники, а появилась там посредством ТурбоМД.
И оИнформатор.МетодСуществует(КонтекстФормы, ИмяМетода) упорно возвращает 0.

1. В какой момент вызываешь этот метод? в ПриОткрытии или позже, уже при физически открытой форме?
2. Версия ТурбоМД,  надеюсь, 1.0.0.1 (самая последняя - там у Саши образовалась путаница с версиями)? а не 1.1.1 или еще какая?
3. Порядок загрузки 1С++ и ТурбоМД? кто первый, кто второй? какие еще ВК юзаешь?
4. Юзаешь ли Перехватчик?

Фактически этот метод обращается к самому контексту для получения инфы о методах, а эту инфу подменяет ТурбоМД.
Для системы в целом метод, добавленный через ТурбоМД, выглядит как родной и должен показываться информатором.
Попробуй упростить задачу до простейшего кода (например, форма документа с пустым модулем формы и простейшим глобальником с загрузкой 2-х ВК - 1С++ и ТурбоМД) и потестируй связку ТурбоМД и Информатора.
  

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


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Глупый вопрос про Информатор.МетодСуществует()
Ответ #3 - 08. Ноября 2011 :: 09:31
Печать  
artbear писал(а) 08. Ноября 2011 :: 07:52:
1. В какой момент вызываешь этот метод? в ПриОткрытии или позже, уже при физически открытой форме?
Метод вызывается при тыцканьи юзером по кнопке в уже открытой форме (проверяется наличие коллбэк метода, чтоб передать туда управление).

Цитата:
2. Версия ТурбоМД,  надеюсь, 1.0.0.1 (самая последняя - там у Саши образовалась путаница с версиями)? а не 1.1.1 или еще какая?
1.0.1.2
ХЗ какая это - последня или нет.

Цитата:
3. Порядок загрузки 1С++ и ТурбоМД? кто первый, кто второй? какие еще ВК юзаешь?
Порядок загрузки библиотек:
1цпп -> формекс -> нетаменю -> Тейблдок -> турбомд

Цитата:
4. Юзаешь ли Перехватчик?
Да, класс использует перехват формы.
Конкретно тот метод, который проверяет наличие коллбэка - он  вызывается по тыцку юзера (а не внутри перехвата события).

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


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Глупый вопрос про Информатор.МетодСуществует()
Ответ #4 - 08. Ноября 2011 :: 09:58
Печать  
Цитата:
Попробуй упростить задачу до простейшего кода (например, форма документа с пустым модулем формы и простейшим глобальником с загрузкой 2-х ВК - 1С++ и ТурбоМД) и потестируй связку ТурбоМД и Информатора.


ок, постараюсь сегодня-завтра сделать
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Глупый вопрос про Информатор.МетодСуществует()
Ответ #5 - 08. Ноября 2011 :: 10:31
Печать  
Можно проверить наличие метода через ВЫполняемыйМодуль (просто обращением к методу), скомпилировав и выполнив его - если исключение - метода нема.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Глупый вопрос про Информатор.МетодСуществует()
Ответ #6 - 08. Ноября 2011 :: 12:02
Печать  
Satans Claws писал(а) 08. Ноября 2011 :: 09:31:
Цитата:
2. Версия ТурбоМД,  надеюсь, 1.0.0.1 (самая последняя - там у Саши образовалась путаница с версиями)? а не 1.1.1 или еще какая?
1.0.1.2

Ну вот и косяк, я же говорю, что это старая версия.
смотри ветку http://www.1cpp.ru/forum/YaBB.pl?num=1193164139
  

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


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Глупый вопрос про Информатор.МетодСуществует()
Ответ #7 - 11. Ноября 2011 :: 06:34
Печать  
Сегодня провел немного экспериментов.

На "неправильном" релизе: в модуле формы создаю проверяемый метод, прописываю в ТурбоМД.прм, закрываю-открываю форму - Информатор метода не видит.
Выхожу-захожу в 1С, открываю форму - все нормально.

На "правильном" релизе: в модуле формы создаю проверяемый метод, прописываю в ТурбоМД.прм, закрываю-открываю форму - Информатор метода НЕ видит.
Еще раз открываю-закрываю форму - все нормально.

Постараюсь сделать чистый тест.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Глупый вопрос про Информатор.МетодСуществует()
Ответ #8 - 11. Ноября 2011 :: 08:05
Печать  
В конфе единственный документ + единственный класс.
1С++ и ТурбоМД приложены (лежат в каталоге базы)

Открываем журнал, вводим новый документ, записываем.
Проверяем наличие метода "МетодСоСтраннымИменем" нажатием кнопки в форме документа.

Убираем метод в форме документа метод "МетодСоСтраннымИменем". Сохраняем, запускаем базу. Проверяем наличие в форме - его нет.

Восстанавливаем метод, с помощью ТурбоМД "на лету" вносим модуль формы документа в базу.

Закрываем-открываем форму документа. Проверяем. (Метод должен найтись. Но не находится)
Закрываем-открываем форму документа. Проверяем. (Метод находится).
  

___________________003.rar ( 590 KB | Загрузки )
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Глупый вопрос про Информатор.МетодСуществует()
Ответ #9 - 11. Ноября 2011 :: 08:42
Печать  
ага, работает строго со второго пинка Улыбка

и даже так попробовал
Код
Выбрать все
Процедура ПроверитьНаличиеМетода()
	Перем оОбъект;
	оОбъект = СоздатьОбъект("Объект");
	оОбъект.Инит(Контекст);
	Сообщить("Метод <МетодСоСтраннымИменем> существует = " + оОбъект.ЕстьКоллБэкМетод("МетодСоСтраннымИменем"));
КонецПроцедуры
 

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


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Глупый вопрос про Информатор.МетодСуществует()
Ответ #10 - 11. Ноября 2011 :: 09:20
Печать  
Код
Выбрать все
Функция ЕстьКоллБэкМетод(ИмяМетода) Экспорт
	оИнформатор = СоздатьОбъект("Информатор");
	Возврат оИнформатор.МетодСуществует(Контекст, ИмяМетода);
КонецФункции

Процедура ПроверитьНаличиеМетода()
	Сообщить("Метод <МетодСоСтраннымИменем> существует = " + ЕстьКоллБэкМетод("МетодСоСтраннымИменем"));
КонецПроцедуры // ПроверитьНаличиеМетода()
 



Даже так взлетает со второго раза (т.е. даже если прямо в этом контексте создаем Информатор и проверяем наличие метода).
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Глупый вопрос про Информатор.МетодСуществует()
Ответ #11 - 16. Ноября 2011 :: 08:35
Печать  
Люди! Ау!
Баг-то регистрировать, или как?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Глупый вопрос про Информатор.МетодСуществует()
Ответ #12 - 16. Ноября 2011 :: 10:48
Печать  
Да, заведи баг,
но я не уверен, что кто-то будет решать.
Информатор - мой объект, а я сейчас весь на 8-ке и 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 записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Глупый вопрос про Информатор.МетодСуществует()
Ответ #13 - 17. Ноября 2011 :: 07:46
Печать  
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Глупый вопрос про Информатор.МетодСуществует()
Ответ #14 - 06. Апреля 2012 :: 03:21
Печать  
Возвращаясь к своим баранам:

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