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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
КОП родителя ТП сворачивает 1С
24. Апреля 2008 :: 07:22
Печать  
Наткнулся на такой неприятный момент:
В КОПе-наследнике от ТП объявляем обработчик события:
Код
Выбрать все
Процедура ПриВыводеСтроки(ОформлениеСтроки, ДанныеСтроки, ТипРегиона) Экспорт
	Сам().Колонки.Получить("Пом");
КонецПроцедуры	// ПриВыводеСтроки 


Колонки с именем "Пом" - не существует!
1С валится при первом же обращении, причём успевает сказать в конфигуратор правильную проблему:
Цитата:
Недопустимое значение параметра.

Если тоже самое сделать в обработке:
Код
Выбрать все
Процедура тпНаФормеПриВыводеСтроки(тп, ОформлениеСтроки, ДанныеСтроки, ТипРегиона)
	тп.Колонки.Получить("Пом");
КонецПроцедуры	// тпНаФормеПриВыводеСтроки
 


То, ес-но, имеем ту же ошибку, но 1С уже не валится.

Проверял на 3.0 и 2.5
Или я что-то опять не так делаю?


+мальнькое пожелание. Можно добавить в Колекцию "Колонки" ТП метод:
Код
Выбрать все
КолонкаСуществует(ИмяКолонки) 


который возвращал бы 1 или 0 в зависимости от того, существует ли колонка?
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #1 - 24. Апреля 2008 :: 07:59
Печать  
Код
Выбрать все
Функция НаличиеКолонки(Имя) Экспорт
	Попытка
		Колонка = Сам().Колонки.Получить(Имя);
		Возврат 1;
	Исключение
		Возврат 0;
	КонецПопытки;
КонецФункции
 

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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #2 - 24. Апреля 2008 :: 08:06
Печать  
Ну через попытку мы и сами сделали.  Подмигивание
А у тебя валится на приведенном в (0)-м посте коде?
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #3 - 24. Апреля 2008 :: 08:19
Печать  
1C нередко валится когда ТП упаковано в класс, и ошибка в классе. Я уже смирился Улыбка
В данном случае валится и уже давно, я решил проблему Попыткой.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: КОП родителя ТП сворачивает 1С
Ответ #4 - 24. Апреля 2008 :: 08:29
Печать  
Это не ТП валит 1С, а коллекция типа "КолонкиТабличногоПоля" валят ТП.

Здесь даже тема есть с описанием решения http://www.1cpp.ru/forum/YaBB.pl?num=1188924266/0
Только пример с падением не будет работать на свежих сборках - в самом ТП я уже исправил, сорри.

P.S.
Результаты голосования умиляют Улыбка
  

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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #5 - 24. Апреля 2008 :: 08:34
Печать  
kms писал(а) 24. Апреля 2008 :: 08:29:
Это не ТП валит 1С, а коллекция типа "КолонкиТабличногоПоля" валят ТП.

Здесь даже тема есть с описанием решения http://www.1cpp.ru/forum/YaBB.pl?num=1188924266/0
Только пример с падением не будет работать на свежих сборках - в самом ТП я уже исправил, сорри.

P.S.
Результаты голосования умиляют Улыбка

Это значит - оборачиваем в попытку и забываем (забиваем)?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #6 - 24. Апреля 2008 :: 08:46
Печать  
думаю что "пустяки, дело житейское"  Подмигивание
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: КОП родителя ТП сворачивает 1С
Ответ #7 - 24. Апреля 2008 :: 08:52
Печать  
JohnyDeath писал(а) 24. Апреля 2008 :: 08:34:
Это значит - оборачиваем в попытку и забываем (забиваем)?

Да нет, я попробую разобраться.
Баг зарегистрируешь?
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: КОП родителя ТП сворачивает 1С
Ответ #8 - 24. Апреля 2008 :: 09:18
Печать  
На самом деле, случай другой (не тот, на который я дал ссылку).

Беда в том, что действительно код ТП::ПриВыводеСтроки небезопасен относительно исключений внутри события.
Возможно, подобные проблемы существуют и в других событиях.

Надо стремиться к тому, чтобы события ТП (ActiveX и т.п.) не вызывали исключений.
И любой вылет стоит регистрировать в багтракере и исправлять, пока для этого есть возможности.
  

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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #9 - 24. Апреля 2008 :: 10:29
Печать  
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #10 - 24. Апреля 2008 :: 10:33
Печать  
Я вот если честно до сих пор не могу 100% теста сделать для той ошибки что периодически ловлю.
Даже ума не приложу в чем может быть причина. В общем история... дело было как то раз в очередном созданном КОПе (КОП: ТабличноПоле {}), инициализировав ТЗ и создав колонки (НоваяКолонка(Ид,ТипВид,Длина,Точность...)) я попробовал создать поставщика, установить в него тз и в запихнуть в качестве поставщика ТП. 1С упала. Что там она болтнула я уже не помню, но помню про строку которая превысила допустимые размеры. Крутил вертел все одон все едино. Подсунул другую ТЗ (другая структура данные и т.д.) все прошло нормально... был озадачен....
переименовал ТЗ (которое приводило к падению) не помогло, что ж.
Решено было создавать ТЗ по другому. Тут в чем дело то было, ТЗ я создавал перебирая метаданные получая тип, вид, длину точность и т.д., создавал колонки прописывая все параметры при создании. В итоге получал хорошо параметрезированные колонки, чтобы при выводе строки определенным образом все это дело обрабатывать. Но данные в значения видимо не всегда попадали соответствующего типа, и видимо на это ТП и ругалось. Уж чем вся эта история закончилась счас я уже и не вспомню, как то обошел.
И вот счас родилась мысль.... в 99 случаях я создаю новые колонки в ТЗ не указывая тип, длину, точность и т.д. а передавая только идентификатор, обработку осуществляя зная что в какой колонке, тут же я получил такую проблему. причем в другом КОПе этот же код работал, однако там принцип наследования был проще.

Короче к чему я это все... есть проблемы взаимоотношений КОП и ТП, и порой (как в этом случае) их сложно отловить. НО все равно большое спасибо разработчикам что они исправляют то что мы совместными усилиями находим.

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

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: КОП родителя ТП сворачивает 1С
Ответ #11 - 24. Апреля 2008 :: 11:04
Печать  
kms писал(а) 24. Апреля 2008 :: 09:18:
Беда в том, что действительно код ТП::ПриВыводеСтроки небезопасен относительно исключений внутри события.
Возможно, подобные проблемы существуют и в других событиях.

Надо стремиться к тому, чтобы события ТП (ActiveX и т.п.) не вызывали исключений.
И любой вылет стоит регистрировать в багтракере и исправлять, пока для этого есть возможности.

Поясни насчет исключений в событиях - все обработчики заворачивать в Попытка-КонецПопытки чтоли ? Или есть более красивые и удобные варианты?
  

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С
Ответ #12 - 24. Апреля 2008 :: 11:11
Печать  
В моей старенькой 1c++ RT-исключение в обработчике событий внутри КОПа не приводит к падению 1с.
Думается мне, что такое поведение 1с++ как то связано с внедрением CRuntimeExceptionClass.
но точной уверенности нет
  

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


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

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

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

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



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


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


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

И вообще можно ли сделать, чтобы шапка и подвал никак не зависили от коллекций колонок основной ТП, т.е. чтоб это были некие независимые ТП внутри основного ТП.  Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать