Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) _NOW_PREPARE_CLASS (число прочтений - 5069 )
EugenVitla
Junior Member
**
Отсутствует


школьнег

Сообщений: 82
Местоположение: Москва
Зарегистрирован: 21. Марта 2008
Пол: Мужской
_NOW_PREPARE_CLASS
14. Октября 2008 :: 23:22
Печать  
совсем голову поломал...
есть пустая конфа, есть единственный класс (обработка) Тест1, в ней написано
Код
Выбрать все
Процедура Тест() Экспорт
//#if _NOW_PREPARE_CLASS
//#warning Тест _NOW_PREPARE_CLASS set

//#else
//#warning Тест _NOW_PREPARE_CLASS UNset

//#endif // _NOW_PREPARE_CLASS
	Сообщить("Тест работает");
КонецПроцедуры // ПриОткрытии 


есть обработка, в которой написано
Код
Выбрать все
Процедура Сформировать()
	т = СоздатьОбъект("Тест1");
	т.Тест();
КонецПроцедуры 


так вот. как бы я ни танцевал с бубном... ну, с кнопкой "Отладчик" Подмигивание - оно ВСЕГДА выводит
Код
Выбрать все
Тест _NOW_PREPARE_CLASS set
Тест работает 

, то есть в секцию #else я не попадаю ни при каком раскладе.
это так и задумано?
icpp 3.0.1.19, Хотя на 1cpp 2.5.0.7 то же самое.
  
Наверх
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: _NOW_PREPARE_CLASS
Ответ #1 - 15. Октября 2008 :: 01:25
Печать  
А разве можно делить процедуры в нутри? По моему можно их делить только целиком!
  
Наверх
ICQ  
IP записан
 
EugenVitla
Junior Member
**
Отсутствует


школьнег

Сообщений: 82
Местоположение: Москва
Зарегистрирован: 21. Марта 2008
Пол: Мужской
Re: _NOW_PREPARE_CLASS
Ответ #2 - 15. Октября 2008 :: 01:46
Печать  
А какая препроцессору вообще разница? хоть бы и кусками, по идее.
хотя http://itland.ru/forum//index.php?showtopic=11000 (хоть и старье безбожное) отчетливо нарисовано деление внутри.
  
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: _NOW_PREPARE_CLASS
Ответ #3 - 15. Октября 2008 :: 03:28
Печать  
EugenVitla писал(а) 14. Октября 2008 :: 23:22:
есть пустая конфа, есть единственный класс (обработка) Тест1, в ней написано
Код
Выбрать все
Процедура Тест() Экспорт
//#if _NOW_PREPARE_CLASS
//#warning Тест _NOW_PREPARE_CLASS set

//#else
//#warning Тест _NOW_PREPARE_CLASS UNset

//#endif // _NOW_PREPARE_CLASS
	Сообщить("Тест работает");
КонецПроцедуры // ПриОткрытии 


есть обработка, в которой написано
Код
Выбрать все
Процедура Сформировать()
	т = СоздатьОбъект("Тест1");
	т.Тест();
КонецПроцедуры 


так вот. как бы я ни танцевал с бубном... ну, с кнопкой "Отладчик" Подмигивание - оно ВСЕГДА выводит
Код
Выбрать все
Тест _NOW_PREPARE_CLASS set
Тест работает 

, то есть в секцию #else я не попадаю ни при каком раскладе.

Все верно, так и должно быть.
Ты же работаешь только с модулем класса, вот else и не работает.
А вот код
Цитата:
Конт = 0;
ОткрытьФорму("Отчет", Конт, ПутьКОбработке);
Конт.Тест();

заставил бы сработать ветку else,
но к классам это уже не имеет отношения Улыбка

И кнопка Отладчик не имеет никакого отношения ко всему описанному.

ЗЫ для препроцессора не имеет значения, каким образом написаны его выражения. Он все равно работает до компиляции класса/модуля/формы - ПРЕпроцессор Улыбка

ЗЗЫ мы стараемся сохранять совместимость со старыми версиями 1С++ - поэтому и "старье безбожное" наверняка работает.
  

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


школьнег

Сообщений: 82
Местоположение: Москва
Зарегистрирован: 21. Марта 2008
Пол: Мужской
Re: _NOW_PREPARE_CLASS
Ответ #4 - 15. Октября 2008 :: 09:34
Печать  
хмм... ладно, из-за чего это все пришлось ковырять...
попробую рассказать попонятней.

Используется и 1С++ и FormEx (было б странно, если б было иначе  Подмигивание)
Был у меня класс ТДокумент, наследник от Документа. В нем была описана функция ПослеОткрытия(). Разумеется, она вызывалась из модуля документа, из ПослеОткрытия()  Улыбка
Все было хорошо, даже под отладчиком. До тех пор, пока мне не захотелось сделать более специфичный класс, и унаследовать его от ТДокумент. Причем переопределить в нем эту самую ПослеОткрытия().
Сделал. Унаследовал. Переопределил. При отжатой кнопке "Отладка" все заработало нормально. А вот когда мне приперло в отладчик сходить, прижал я кнопку "Отладка" в настройках 1С++... и началось  Ужас
В общем, я тут приложил тестовую конфу... попробуйте там создать новый элемент справочника (интерактивно) с отладкой, и без отладки.

Короче, что получается. ПослеОткрытия() - предопределенная функция FormEx. И при включенной отладке она таки вызывается при создании нового объекта  Очень довольный И начхать ей на наличие _NOW_PREPARE_CLASS... занятно, что без наследования этого не происходило...
так что мораль: НЕ ИСПОЛЬЗУЙТЕ ПРЕДОПРЕДЕЛЁННЫЕ ИМЕНА ФУНКЦИЙ  Смущённый
« Последняя редакция: 15. Октября 2008 :: 11:16 - EugenVitla »  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: _NOW_PREPARE_CLASS
Ответ #5 - 15. Октября 2008 :: 10:31
Печать  
EugenVitla писал(а) 15. Октября 2008 :: 09:34:
ПриОткрытии() - предопределенная функция FormEx.

Опечатался, читать как "ПослеОткрытия" ??
  

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


школьнег

Сообщений: 82
Местоположение: Москва
Зарегистрирован: 21. Марта 2008
Пол: Мужской
Re: _NOW_PREPARE_CLASS
Ответ #6 - 15. Октября 2008 :: 11:15
Печать  
истинно. ПослеОткрытия().
не выспался совсем-совсем, сорри =) два глюка за ночь, и оба связаны с наследованием и переопределением.
  
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: _NOW_PREPARE_CLASS
Ответ #7 - 17. Октября 2008 :: 06:14
Печать  
EugenVitla писал(а) 15. Октября 2008 :: 09:34:
1. Все было хорошо, даже под отладчиком. До тех пор, пока мне не захотелось сделать более специфичный класс, и унаследовать его от ТДокумент. Причем переопределить в нем эту самую ПослеОткрытия().
Сделал. Унаследовал. Переопределил. При отжатой кнопке "Отладка" все заработало нормально. А вот когда мне приперло в отладчик сходить, прижал я кнопку "Отладка" в настройках 1С++... и началось  Ужас
В общем, я тут приложил тестовую конфу... попробуйте там создать новый элемент справочника (интерактивно) с отладкой, и без отладки.

2. Короче, что получается. ПослеОткрытия() - предопределенная так что мораль: НЕ ИСПОЛЬЗУЙТЕ ПРЕДОПРЕДЕЛЁННЫЕ ИМЕНА ФУНКЦИЙ  Смущённый

По пунктам:
1. Баг подтверждаю Печаль

2. Проблема не в этом, а проблема в п.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: _NOW_PREPARE_CLASS
Ответ #8 - 17. Октября 2008 :: 06:39
Печать  
artbear писал(а) 17. Октября 2008 :: 06:14:
EugenVitla писал(а) 15. Октября 2008 :: 09:34:
1. Все было хорошо, даже под отладчиком. До тех пор, пока мне не захотелось сделать более специфичный класс, и унаследовать его от ТДокумент. Причем переопределить в нем эту самую ПослеОткрытия().
Сделал. Унаследовал. Переопределил. При отжатой кнопке "Отладка" все заработало нормально. А вот когда мне приперло в отладчик сходить, прижал я кнопку "Отладка" в настройках 1С++... и началось  Ужас
В общем, я тут приложил тестовую конфу... попробуйте там создать новый элемент справочника (интерактивно) с отладкой, и без отладки.

2. Короче, что получается. ПослеОткрытия() - предопределенная так что мораль: НЕ ИСПОЛЬЗУЙТЕ ПРЕДОПРЕДЕЛЁННЫЕ ИМЕНА ФУНКЦИЙ  Смущённый

По пунктам:
1. Баг подтверждаю Печаль

2. Проблема не в этом, а проблема в п.1 Улыбка

Разобрался с ситуацией.
Исходный баг http://1cpp.ru/bugs/show_bug.cgi?id=2505

Кстати, по п.2 ты был прав, проблема именно в этом.

На самом деле работа 1С++ верна, а ошибка у тебя именно в п.2 - при работе с отладкой лучше НЕ юзать предопределенные имена событий 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: _NOW_PREPARE_CLASS
Ответ #9 - 17. Октября 2008 :: 06:39
Печать  
Наверное, это тему можно закрывать Улыбка
  

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


школьнег

Сообщений: 82
Местоположение: Москва
Зарегистрирован: 21. Марта 2008
Пол: Мужской
Re: _NOW_PREPARE_CLASS
Ответ #10 - 17. Октября 2008 :: 07:14
Печать  
ы. надо было мне сразу в багзиллу сходить Печаль будет уроком.
кстати, она гуглем не индексируется, что жаль - так бы сразу наткнулся. по _NOW_PREPARE_CLASS ссылок раз-два и обчелся Подмигивание
  
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: _NOW_PREPARE_CLASS
Ответ #11 - 17. Октября 2008 :: 07:24
Печать  
EugenVitla писал(а) 17. Октября 2008 :: 07:14:
ы. надо было мне сразу в багзиллу сходить Печаль будет уроком.

Да, туда сходить всегда полезно.
Но тебе бы это не помогло Печаль - ты первый сообщил о таком проколе с отладкой и именами штатных событий как методов КОП Улыбка
  

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



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: _NOW_PREPARE_CLASS
Ответ #12 - 17. Октября 2008 :: 09:13
Печать  
Если я все правильно понял, то использовать можно вот такую конструкцию:
Код
Выбрать все
// метод в классе
Процедура ПослеОткрытия() Экспорт
    Если ТипЗначенияСтр(Сам())<>"ГрупповойКонтекст" Тогда
	  //Здесь то, что должно выполняться в методе класса
    Иначе
	  //Здесь то, что выполнится при открытии формы в режиме отладки
    КонецЕсли;
КонецПроцедуры 



_NOW_PREPARE_CLASS в данном случае не поможет
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: _NOW_PREPARE_CLASS
Ответ #13 - 17. Октября 2008 :: 10:49
Печать  
Да, нормальный вариант для подобного случая.
  

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