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



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #30 - 25. Апреля 2008 :: 10:58
Печать  
kms писал(а) 25. Апреля 2008 :: 07:26:
ОК, такой тест проверь, плз.
Нажать кнопку "Сформировать" и походить мышкой по ячейкам.

Докладаю.
Твой тест валит 1с сразу после нажатия "Сформировать"
Изменяю его так (т.е. привожу его практически до моего теста)
Цитата:
Процедура ПриОткрытии()
     _фрм =СоздатьОбъект("Форма");
     _фрм.УстановитьФорму(Форма);
КонецПроцедуры

Процедура ФормаПриСоздании(_фрм)
//Процедура Сформировать()
//      _фрм =СоздатьОбъект("Форма");
//      _фрм.УстановитьФорму(Форма);

     _тп =_фрм.СоздатьЭлементУправления("ТП.Наследник", "ТП");
     
     _тп.Колонки.Добавить("Новая").Данные ="Новая";
     
     _тз =СоздатьОбъект("ТаблицаЗначений");
     _тз.НоваяКолонка("Новая");
     _тз.КоличествоСтрок(100);
     
     _пост =СоздатьОбъект("ПоставщикДанныхТЗ");
     _пост.УстТаблицуЗначений(_тз);
     _тп.ПоставщикДанных =_пост;
КонецПроцедуры

Процедура ТППриВыводеСтроки() Экспорт
     Сообщить("ТППриВыводеСтроки " +_GetPerformanceCounter());
КонецПроцедуры

при открытии появляется
Цитата:
ПриВыводеСтроки 171484535
_тп.ПоставщикДанных =_пост;
{C:\BASES\TP_DEMOAV\CLASS\ERT\ТП.НАСЛЕДНИК.ТЕСТ.ERT(20)}: Деление на 0

===========================================================================
ТП.Наследник::ПриВыводеСтроки()
а = 1 /0;
{C:\Bases\TP_DEMOAV\CLASS\ТП.Наследник.ert(7) }
===========================================================================
но не падает
НО! стоит провести мышой поверх ТП - валится.
И мой тест тоже валиться! только я раньше почему то не пыталься лезть к ТП после ошибки.
Так что проблема и у меня есть тоже. Подмигивание
  

1&&2&&3
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #31 - 25. Апреля 2008 :: 11:15
Печать  
Лично я считаю, что штатные исключения должны в любом случае показываться пользователю/разработчику, независимо от места их возникновения.
А вышеуказанные варианты я дал как возможные примеры решения проблемы с исключениями в обработчиках ТП - типа если решим таким образом, то это должно быть очень четко отражено в доке.
  

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



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #32 - 25. Апреля 2008 :: 11:21
Печать  
artbear писал(а) 25. Апреля 2008 :: 11:15:
Лично я считаю, что штатные исключения должны в любом случае показываться пользователю/разработчику, независимо от места их возникновения.
+1
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: КОП родителя ТП сворачивает 1С
Ответ #33 - 25. Апреля 2008 :: 18:55
Печать  
trad писал(а) 25. Апреля 2008 :: 10:58:
Так что проблема и у меня есть тоже. Подмигивание

Уфх. Ты все-таки наш человек. Подмигивание

trad писал(а) 25. Апреля 2008 :: 11:21:
artbear писал(а) 25. Апреля 2008 :: 11:15:
Лично я считаю, что штатные исключения должны в любом случае показываться пользователю/разработчику, независимо от места их возникновения.
+1

Однако когда это происходит в виде вылета в космос - тоже не фонтан.

Насчет решений:
Можно посмотреть на результат попытки отлова исключений типа CBLRuntimeException в ТП/ПриВыводеСтроки.
Для этого нужно совместить мой тест и последний icpp, "Сформировать" и пожмякать мышой туда-сюда.

Забавный результат, не правда ли? Подмигивание
Вот поэтому я и не хочу ловить CBLRuntimeException, я полагаю, что в ряде случаев его просто не нужно бросать.

При этом только что мне пришло в голову очень простое решение:
<-- CComponentClass должен анализировать свое положение в иерархии.
--> Только не в иерархии, а в стеке вызовов.
В случае, если текущий уровень последний перед контекстом типа ТП (т.е. не только ТП, а вообще любой внутренний контекст без модуля, АктивИкс тот же и т.п) - исключение бросать не нужно.

Ну ладно, автора лучшего рабочего решения будет бессрочно ждать доска почета. Улыбка
« Последняя редакция: 27. Апреля 2008 :: 09:13 - kms »  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: КОП родителя ТП сворачивает 1С
Ответ #34 - 27. Апреля 2008 :: 08:58
Печать  
ОК.

[+] обработка событий ТП сделена безопасной относительно исключений в КОП
[bug 3766]

Исправлено методом перехвата С++ исключения CBLRuntimeError в менеджере событий.
Разбираться в дебрях реализации ООП - выше моих сил; да и потом уговор дороже денег - это у нас редакторская колонка Артура. Улыбка
Тем не менее, очевидно, что там есть, над чем работать.

trad
Дима, ты, как носитель традиций, можешь мне раскрыть смысл зависимости возможности вызова события ТП для формы от результата вызова события ТП для объекта?

Вот об этом речь:
Код
Выбрать все
	if (bSuccess && event.nFormEvent != -1)
		m_pModule->CallAsProc(event.nFormEvent, ctrlEvent.nParamCount + 1, ppValuesParams);
 


Не суть какой важный момент (учитывая следующий абзац), но логики пока не вижу (а хотелось бы).

all

По прежнему считаю, что вызов события ТП в классе НЕ ДОЛЖЕН заканчиваться исключением.
Поэтому добавлено дополнительное предупреждение при возникновении исключения в событии ТП.
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: КОП родителя ТП сворачивает 1С
Ответ #35 - 27. Апреля 2008 :: 09:04
Печать  
JohnyDeath писал(а) 24. Апреля 2008 :: 14:02:
И ещё одна хотелка: можно ли для ПоставщикаДанныхТЗ иметь метод "ПолучитьТаблицуЗначений", чтоб не хранить эту ТЗ глобально в модуле?


[+] свойство ТаблицаЗначений поставщика ТЗ
[bug 3774]

По записи это некий дубль метода УстТаблицуЗначений, думаю, это не страшно.
Общая документация опять же будет чуть позже - здесь отмечаю предварительно; персонально для JohnyDeath как автора заявки. Улыбка
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #36 - 28. Апреля 2008 :: 04:39
Печать  
kms писал(а) 27. Апреля 2008 :: 09:04:
JohnyDeath писал(а) 24. Апреля 2008 :: 14:02:
И ещё одна хотелка: можно ли для ПоставщикаДанныхТЗ иметь метод "ПолучитьТаблицуЗначений", чтоб не хранить эту ТЗ глобально в модуле?


[+] свойство ТаблицаЗначений поставщика ТЗ
[bug 3774]

По записи это некий дубль метода УстТаблицуЗначений, думаю, это не страшно.

Может быть, на самом деле проще использовать методы "ПолучитьТаблицуЗначений" и "УстТаблицуЗначений" для различия чтения/установки источника?
ИМХО в этом случае легче контролировать изменения источника, чем в варианте со свойством Улыбка
+
Можно красиво сделать наследника от поставщика с доп. обработкой при смене провайдера, например. В варианте со свойством так просто не сделаешь Улыбка
  

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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #37 - 28. Апреля 2008 :: 06:04
Печать  
kms писал(а) 27. Апреля 2008 :: 09:04:
JohnyDeath писал(а) 24. Апреля 2008 :: 14:02:
И ещё одна хотелка: можно ли для ПоставщикаДанныхТЗ иметь метод "ПолучитьТаблицуЗначений", чтоб не хранить эту ТЗ глобально в модуле?


[+] свойство ТаблицаЗначений поставщика ТЗ
[bug 3774]

По записи это некий дубль метода УстТаблицуЗначений, думаю, это не страшно.
Общая документация опять же будет чуть позже - здесь отмечаю предварительно; персонально для JohnyDeath как автора заявки. Улыбка

Пасиб!  Очень довольный
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: КОП родителя ТП сворачивает 1С
Ответ #38 - 28. Апреля 2008 :: 06:36
Печать  
artbear писал(а) 28. Апреля 2008 :: 04:39:
Можно красиво сделать наследника от поставщика с доп. обработкой при смене провайдера, например. В варианте со свойством так просто не сделаешь Улыбка

Обернуть в наследника и сейчас можно несколькими способами, лишь бы была польза от этого.
А, кстати, ты же и для свойств делал "ПриПолучении_ИмяАтрибута", "ПриЗаписи_ИмяАтрибута" - разве сейчас это нельзя использовать для контроля за свойствами базового класса?

...
Концептуальная проблема получения ТЗ для поставщика (и через свойство в том числе) вообще в другом.
В том, что ТЗ как таковая имеет право вообще не существовать в природе после выполнения установки - она может перейти в другое агрегатное состояние и раствориться в воздухе.
Примерно как выполнив метод УстановитьКружкуВодкиВОрганизм() невозможно обеспечить выполнение метода ПолучитьКружкуВодкиИзОрганизма(). Улыбка

Но тем не менее, пока реализация позволяет это сделать; и я не думаю, что такое решение свяжет руки в дальнейшем, раз на протяжении последних лет они оставались свободными.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #39 - 28. Апреля 2008 :: 06:42
Печать  
kms писал(а) 28. Апреля 2008 :: 06:36:
artbear писал(а) 28. Апреля 2008 :: 04:39:
Можно красиво сделать наследника от поставщика с доп. обработкой при смене провайдера, например. В варианте со свойством так просто не сделаешь Улыбка

А, кстати, ты же и для свойств делал "ПриПолучении_ИмяАтрибута", "ПриЗаписи_ИмяАтрибута" - разве сейчас это нельзя использовать для контроля за свойствами базового класса?

Да, можно.

kms писал(а) 28. Апреля 2008 :: 06:36:
В том, что ТЗ как таковая имеет право вообще не существовать в природе после выполнения установки - она может перейти в другое агрегатное состояние и раствориться в воздухе.

Имеет право, конечно.
Но ИМХО удобнее, чтобы была возможность получить исходную ТЗ из поставщика.
  

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