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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #15 - 24. Апреля 2008 :: 12:49
Печать  
JohnyDeath писал(а) 24. Апреля 2008 :: 12:18:
Миш, ещё падения до кучи можешь подтвердить:
Если у ТП есть подвал, то там шаг влево, шаг вправо - расстрел!
Возьми, например, в свой пример по прямому редактированию ТП и добавь туда кнопочку с вызовом след. процедуры:
Код
Выбрать все
Процедура ДобавитьКолонку()
	ТП.Подвал.ПоставщикДанных="";
КонецПроцедуры	// ПоменятьПоставщика 


имеем вылет  Печаль (причём иногда не мнгновенный, а через несколько сек или после прокрутки. Уж не знаю от чего зависит)
или:
Код
Выбрать все
Процедура ДобавитьКолонку()
	ТП.Колонки.Добавить("Новая");
КонецПроцедуры	// ПоменятьПоставщика 


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

И вообще можно ли сделать, чтобы шапка и подвал никак не зависили от коллекций колонок основной ТП, т.е. чтоб это были некие независимые ТП внутри основного ТП.  Улыбка

Как обычно, пиши все пожелания в багзиллу, так Михаилу будет проще отслеживать и реагировать Улыбка
  

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: КОП родителя ТП сворачивает 1С
Ответ #16 - 24. Апреля 2008 :: 13:56
Печать  
  

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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #17 - 24. Апреля 2008 :: 13:59
Печать  
kms писал(а) 24. Апреля 2008 :: 13:56:

На эту тему ещё пару подобных примеров можно придумать, но, думаю, ноги там из одного и того же места растут.

А на это можешь ответить:
Цитата:
можно ли сделать, чтобы шапка и подвал никак не зависили от коллекций колонок основной ТП, т.е. чтоб это были некие независимые ТП внутри основного ТП.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #18 - 24. Апреля 2008 :: 14:02
Печать  
И ещё одна хотелка: можно ли для ПоставщикаДанныхТЗ иметь метод "ПолучитьТаблицуЗначений", чтоб не хранить эту ТЗ глобально в модуле?
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: КОП родителя ТП сворачивает 1С
Ответ #19 - 24. Апреля 2008 :: 14:30
Печать  
JohnyDeath писал(а) 24. Апреля 2008 :: 13:59:
На эту тему ещё пару подобных примеров можно придумать, но, думаю, ноги там из одного и того же места растут.

Да, если сейчас само (после исправления 3772/3773) не пройдет, говори где, будем пролечивать. Улыбка

Цитата:
А на это можешь ответить:
Цитата:
можно ли сделать, чтобы шапка и подвал никак не зависили от коллекций колонок основной ТП, т.е. чтоб это были некие независимые ТП внутри основного ТП.

Ответить могу: в дизайн не закладывал.
Шапки и подвалы сейчас - это именно фиксированные строки и ничего больше.
Так что пока об этом можно забыть.

Цитата:
И ещё одна хотелка: можно ли для ПоставщикаДанныхТЗ иметь метод "ПолучитьТаблицуЗначений", чтоб не хранить эту ТЗ глобально в модуле?

Это - без проблем, сделаю.
http://www.1cpp.ru/bugs/show_bug.cgi?id=3774
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: КОП родителя ТП сворачивает 1С
Ответ #20 - 24. Апреля 2008 :: 20:28
Печать  
JohnyDeath писал(а) 24. Апреля 2008 :: 13:59:
kms писал(а) 24. Апреля 2008 :: 13:56:

На эту тему ещё пару подобных примеров можно придумать, но, думаю, ноги там из одного и того же места растут.

3772, 3773 исправлено, можно дальше придумывать Улыбка

3766 (падение при исключении в модуле класса-наследника) - пока замаскировано.
Придется, видимо, углуб##ться в дебри рефакторинга CComponentClass.

artbear

Навскидку, не вcпомнишь, менялось ли поведение классов в плане передачи исключений вверх по цепочке?
Плохо, что при выполнении события ТП в классе возникает (и передается дальше) исключение - это бессмысленно.
Вопрос в том, всегда ли было такое поведение или это результат рефакторинга?
  

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #21 - 25. Апреля 2008 :: 05:07
Печать  
kms писал(а) 24. Апреля 2008 :: 12:01:
trad писал(а) 24. Апреля 2008 :: 11:11:
В моей старенькой 1c++ RT-исключение в обработчике событий внутри КОПа не приводит к падению 1с.

Дим, проверь, пожалуйста, не для "событий", а для конкретного события "ПриВыводеСтроки".

проверял для ПриВыводеСтроки и ПриАктивизацииСтроки
  

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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #22 - 25. Апреля 2008 :: 06:27
Печать  
kms писал(а) 24. Апреля 2008 :: 20:28:
JohnyDeath писал(а) 24. Апреля 2008 :: 13:59:
kms писал(а) 24. Апреля 2008 :: 13:56:

На эту тему ещё пару подобных примеров можно придумать, но, думаю, ноги там из одного и того же места растут.

3772, 3773 исправлено, можно дальше придумывать Улыбка

Теперь прикольно получается. Имеем ту же кнопку с той же формулой:
Код
Выбрать все
Процедура ДобавитьКолонку()
	Колонка=ТП.Колонки.Добавить("Новая");
	Сообщить(""+Колонка.Имя);
КонецПроцедуры	// ПоменятьПоставщика 


Жмакать на неё теперь можно бесконечно много раз. Это нормально, что создаются колонки с одним и тем же именем?
Хотя, если сделать:
Код
Выбрать все
Процедура УдалитьКолонку()
	ТП.Колонки.Удалить("Новая");
КонецПроцедуры	// УдалитьКолонку 


то удаляется только последняя(?), а потом ругается:
Цитата:
ТП.Колонки.Удалить("Новая");
{}: Недопустимый индекс.

Подумал, что может быть автоматом там ставятся какие-то другие имена, сделал обрабаотчик:
Код
Выбрать все
Процедура ТаблПолеПриАктивизацииКолонки(таблП)
	Сообщить(""+таблП.ТекущаяКолонка.Имя);
КонецПроцедуры	// ТаблПолеПриАктивацииКолонки 


который честно сообщает мне, что имена новых, добавленных мной, колонок = "Новая"

зарегестрировал здесь: http://www.1cpp.ru/bugs/show_bug.cgi?id=3777
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: КОП родителя ТП сворачивает 1С
Ответ #23 - 25. Апреля 2008 :: 07:26
Печать  
trad писал(а) 25. Апреля 2008 :: 05:07:
kms писал(а) 24. Апреля 2008 :: 12:01:
trad писал(а) 24. Апреля 2008 :: 11:11:
В моей старенькой 1c++ RT-исключение в обработчике событий внутри КОПа не приводит к падению 1с.

Дим, проверь, пожалуйста, не для "событий", а для конкретного события "ПриВыводеСтроки".

проверял для ПриВыводеСтроки и ПриАктивизацииСтроки


ОК, такой тест проверь, плз.
Нажать кнопку "Сформировать" и походить мышкой по ячейкам.

Падает на 2.0.3.7, 2.5.0.1
Если у тебя не падает, прошу поделиться твоим вариантом решения.
  

tp_demoav.rar ( 21 KB | Загрузки )

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: КОП родителя ТП сворачивает 1С
Ответ #24 - 25. Апреля 2008 :: 08:28
Печать  
JohnyDeath писал(а) 25. Апреля 2008 :: 06:27:
Теперь прикольно получается. Имеем ту же кнопку с той же формулой:

зарегестрировал здесь: http://www.1cpp.ru/bugs/show_bug.cgi?id=3777


(*) исправлена обработка добавления и вставки колонок с одинаковыми именами
[bug 3777]

Теперь так прикольно уже не получится.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #25 - 25. Апреля 2008 :: 09:01
Печать  
kms писал(а) 24. Апреля 2008 :: 20:28:
3766 (падение при исключении в модуле класса-наследника) - пока замаскировано.
Придется, видимо, углуб##ться в дебри рефакторинга CComponentClass.

artbear

Навскидку, не вcпомнишь, менялось ли поведение классов в плане передачи исключений вверх по цепочке?
Плохо, что при выполнении события ТП в классе возникает (и передается дальше) исключение - это бессмысленно.
Вопрос в том, всегда ли было такое поведение или это результат рефакторинга?

Навскидку, поведение для исключений я немного изменял, раньше не всегда работало исключение из методов класса Печаль что считаю неверным.
Могло и повлиять, конечно Печаль но что-то я сомневаюсь.
  

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: КОП родителя ТП сворачивает 1С
Ответ #26 - 25. Апреля 2008 :: 09:19
Печать  
artbear писал(а) 25. Апреля 2008 :: 09:01:
Навскидку, поведение для исключений я немного изменял, раньше не всегда работало исключение из методов класса Печаль что считаю неверным.

Беда в том, что как раз для ТП такое поведение неверное.
При вызове CComponentClass::CallAsMethod из менеджера событий, RaiseExtRuntimeError не должен вызываться, как для обычной иерархии классов.
CallAsMethod должен просто возвращать 0 - и дальнейшая обработка должна ложиться на менеджер событий.

Либо менеджер событий должен ловить исключение CBLRuntimeException - но этот путь представляется более опасным.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #27 - 25. Апреля 2008 :: 09:55
Печать  
kms писал(а) 25. Апреля 2008 :: 09:19:
artbear писал(а) 25. Апреля 2008 :: 09:01:
Навскидку, поведение для исключений я немного изменял, раньше не всегда работало исключение из методов класса Печаль что считаю неверным.

Беда в том, что как раз для ТП такое поведение неверное.
При вызове CComponentClass::CallAsMethod из менеджера событий, RaiseExtRuntimeError не должен вызываться, как для обычной иерархии классов.
CallAsMethod должен просто возвращать 0 - и дальнейшая обработка должна ложиться на менеджер событий.

Либо менеджер событий должен ловить исключение CBLRuntimeException - но этот путь представляется более опасным.

т.е. сейчас любое штатное CBLRuntimeException из обработчика событий для наследника-ТП валит 1С чтоли?
ИМХО есть варианты:
менеджер событий должен ловить это исключение и сам каким-то образом обрабатывать его, показать пользователю или что-то иное.
Либо мы указываем в доке, что никакие штатные исключения из обработчиков событий ТП не выходят наружу - т.е. или менеджер ловит исключение и не пропускает его дальше, или просто убираем обработку исключений, возвращаю 0.
ИМХО тут нужно четко раз и навсегда разрулить этот ключевой момент.
  

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: КОП родителя ТП сворачивает 1С
Ответ #28 - 25. Апреля 2008 :: 10:12
Печать  
Исправить новое поведение на старое (вернуть 0) достаточно легко
в CallAsMethod идет CRuntimeExceptionClass::SaveStatusOfTryingBlock() , затем выполнение самой функции со всякими проверками и т.д., а после выполнения      CRuntimeExceptionClass::IfNeedExceptionThenThrowException() - думаю, смысл этих методов понятен из названия Улыбка
Т.е. для менеджера событий можно добавить спец.метод типа CallAsMethodWithoutUserClassExceptions, в котором нет указанных вызовов Улыбка - или даже просто нет только последнего вызова Улыбка
т.е. простейший рефакторинг.
Но повторюсь - поведение без исключений в обработчиках должно быть четко описано в доке.
  

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



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #29 - 25. Апреля 2008 :: 10:55
Печать  
Эээ... с исключениями вы поосторожнее. А то будет как раньше - shit happenned, а предупреждений никаких не выводилось. Это касалось ВМ, и еще где то, уже не помню.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать