Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Вылетает 1С:Предприятие при СоздатьОбъект("ИмяМоегоКласса") (число прочтений - 10290 )
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Вылетает 1С:Предприятие при СоздатьОбъект("ИмяМоегоКласса")
27. Августа 2009 :: 11:31
Печать  
Добрый день!

До сегодняшнего дня я писал свои классы, отлаживал, проверял, просто запускал и все работало отлично.
С сегоняшнего дня при любом обращении к любому классу 1С:Предприятие вылетает с ошибками как на скриншотах.

Версия 1С 7.70.027 sql
ОС: WinXP Pro SP3 в домене.

Уже нашел другую инсталяшку и переустановил 1С.
Опробовал свои классы даже на пустой базе - результат тот же.
Удалил все что успел вчера напрограммить - не помогает.
В Windows ничего не устанавливал и не удалял.

Помоготи, пожалуйста. Может я что-то не так делаю?

Заранее спасибо!
  

1cppError.JPG ( 34 KB | Загрузки )
1cppError.JPG
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Вылетает 1С:Предприятие при СоздатьОбъект("ИмяМоегоКласса")
Ответ #1 - 27. Августа 2009 :: 11:31
Печать  
Прилагаю чистую базу со всеми своими классами и ВК.
  

NullBase.rar ( 925 KB | Загрузки )
Наверх
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Вылетает 1С:Предприятие при СоздатьОбъект("ИмяМоегоКласса")
Ответ #2 - 27. Августа 2009 :: 12:13
Печать  
simply писал(а) 27. Августа 2009 :: 11:31:
Прилагаю чистую базу со всеми своими классами и ВК.

Не знаю что там у тебя не так - у меня все работает .... ну если и не все то вот это точно работает
Код
Выбрать все
Процедура Сформировать()
	Ф = СоздатьОБъект("FileSys");
	Сообщить(Ф.Get_ИмяКласса());
КонецПроцедуры
 


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


И даже так
Код
Выбрать все
Сообщить(Ф);
 


пока не определишь в классе метод _ПолучитьКод ()
Кстати на другом железе пробовал?
  
Наверх
ICQ  
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Вылетает 1С:Предприятие при СоздатьОбъект("ИмяМоегоКласса")
Ответ #3 - 27. Августа 2009 :: 12:38
Печать  
Сорри, не указал, что две тестовые обработки лежат в каталоге Classes.

По поводу Get_ИмяКласса() - прошу учесть, что это самый первый мой опыт в ООП и классах. Думаю, что удалю.

Простые функции типа Тест(Стр) в классе Archiving у меня тоже выполняются, но через раз а то и три...
В отладчике успел заметить что вылетает чаще всего на СоздатьОбъект("ИмяМоегоКласса") или на обращении к любому методу после этого.

А можно тебя попросить что-либо заархивировать, желательно winrar?

avgreen писал(а) 27. Августа 2009 :: 12:13:
Кстати на другом железе пробовал?

Отнес свой ноут домой и пока не на чем попробовать. Может у кого из пользователей отберу на время.
  
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Вылетает 1С:Предприятие при СоздатьОбъект("ИмяМоегоКласса")
Ответ #4 - 27. Августа 2009 :: 13:03
Печать  
Попробовал на другом железе обработку ТестКласс_Арх
Код
Выбрать все
Арх.УпаковатьWinRAR("d:\t1.txt d:\t2.txt","archt.rar","d:\111\"); 

В первый раз отработала нормально и архив создала. Переоткрыл обработку и попробовал еще раз - вылет повторился и на другом железе ...

Ничего не понимаю. Вчера я раз 20 запускал этот метод и экспериментировал разные варианты. Все было хорошо. Озадачен

Что-то в коде не так ... Ведь на разных ПК и в разных базах ошибка одна и та же.
  
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Вылетает 1С:Предприятие при СоздатьОбъект("ИмяМоегоКласса")
Ответ #5 - 27. Августа 2009 :: 13:39
Печать  
Еще одна особенность.
Только что откатил вчерашние файлы обработок класса Archiving, с которыми работал сегодня - на 5-ти попытках ни одного вылета.

Вчерашние файлы прилагаю.

Буду очень признателен, если "ткнете" меня в такую серьезную проблему, что даже 1С вылетает.
Предположу, что не мне одному это будет полезно.
  

archiving_001.rar ( 10 KB | Загрузки )
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Вылетает 1С:Предприятие при СоздатьОбъект("ИмяМоегоКласса")
Ответ #6 - 27. Августа 2009 :: 14:23
Печать  
Нашел в каком месте вылет!

Обратите внимание на предпоследний параметр описания метода УпаковатьWinRAR в файле archiving.prm:
Код
Выбрать все
	Строка УпаковатьWinRAR(Знач Неопределенный СписокФайлов,
						Строка ИмяАрхива=глНомерМагазина,
						Строка КаталогАрхива=СокрЛП(Константа.ПапкаДляВыдачиДанных),
						Строка ДопПараметры, ...);
 


Как только я присвоил ему значение по умолчанию (прозевал вчера):
Код
Выбрать все
						Строка ДопПараметры=" ", ...);
 


Сразу же начались вылеты.

Хотя в файле internet.prm я поступаю также:
Код
Выбрать все
// Класс отправки е-майлов через ВК ROM-Mail
Класс ROM = .\Classes\internet\mail\clsROM.ert: Mail
	{
	Число ОтправитьЕМаил(Строка Параметры=" ", ...);
	}; 



Как только я перенес ДопПараметры в начало параметров метода:
Код
Выбрать все
	Строка УпаковатьWinRAR(Знач Неопределенный СписокФайлов,
						Строка ДопПараметры=" ",
						Строка ИмяАрхива=глНомерМагазина,
						Строка КаталогАрхива=СокрЛП(Константа.ПапкаДляВыдачиДанных),
						 ...);
 


все стало работать и вылеты прекратились.

Подозреваю что это из-за неявных параметров. Что это, баг?
  
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Вылетает 1С:Предприятие при СоздатьОбъект("ИмяМоегоКласса")
Ответ #7 - 27. Августа 2009 :: 14:25
Печать  
И обязательно - огромное спасибо всем, кто попытался мне помочь!
Сам факт того, что я попробовал сформулировать свою проблему другим, натолкнул на мысль - где искать Улыбка
  
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вылетает 1С:Предприятие при СоздатьОбъект("ИмяМоегоКласса")
Ответ #8 - 28. Августа 2009 :: 04:46
Печать  
1. Режим "проверка типов" случайно не включен на твоей машине для данной базы?
2. Лично я мало тестировал и почти не использую методы с неопределенным числом параметров и значениями параметров по умолчанию.
Поэтому не исключаю возможности бага Печаль
Если хочешь разобраться, попробуй потестить свой метод, упрощая его реализацию до минимума, не меняя определение в прм-файле, и отслеживая, в какой момент вылеты закончатся.
  

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



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Вылетает 1С:Предприятие при СоздатьОбъект("ИмяМоегоКласса")
Ответ #9 - 28. Августа 2009 :: 06:23
Печать  
Значит так - падения подтверждаю после 1-3 запусков отбработки
artbear писал(а) 28. Августа 2009 :: 04:46:
1. Режим "проверка типов" случайно не включен на твоей машине для данной базы?
Это здесь скорее всего не причем , т.к. у меня отключена и все равно падает
Цитата:
2. Лично я мало тестировал и почти не использую методы с неопределенным числом параметров и значениями параметров по умолчанию.
Поэтому не исключаю возможности бага Печаль
Однозначно здесь, но вот баг это или фича ..... это спорный вопрос Улыбка  
Вобщем достаточно последний параметр задать явно, т.е. вот так
Код
Выбрать все
	Арх.УпаковатьWinRAR("c:\t1.txt c:\t2.txt","archt.rar","c:\111\", 0);
 


и падения прекращаются. Т.е. 1С++ просто не может понять что это в конце, уже неявные параметры или еще явный параметр со значением по умолчанию Улыбка
Цитата:
Если хочешь разобраться, попробуй потестить свой метод, упрощая его реализацию до минимума, не меняя определение в прм-файле, и отслеживая, в какой момент вылеты закончатся.

А там практически нечего тестить - оно на вызове падает. При "СоздатьОбъект" у меня ни разу не падало, да и чему там падать, там конструктор из одной строки Улыбка
Хотя если предать хотя-бы один неявный параметр там еще найдется на чем упасть Улыбка Вот на этом  к примеру
Код
Выбрать все
		спПарам=Вирт().ПолучитьСписокПараметров("ДопПараметры"); // : СписокЗначений
 


IMHO в качестве параметру нужно передавать ИмяМетода как написано в доке а не имя последнего параметра. Т.е. вот так наверное будет правильнее
Код
Выбрать все
		спПарам=Вирт().ПолучитьСписокПараметров("УпаковатьWinRAR"); // : СписокЗначений
 


Остальное не смотрел ибо некогда - нужно кассовый аппарат прикручивать......
  
Наверх
ICQ  
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Вылетает 1С:Предприятие при СоздатьОбъект("ИмяМоегоКласса")
Ответ #10 - 28. Августа 2009 :: 07:08
Печать  
artbear писал(а) 28. Августа 2009 :: 04:46:
1. Режим "проверка типов" случайно не включен на твоей машине для данной базы?
2. Лично я мало тестировал и почти не использую методы с неопределенным числом параметров и значениями параметров по умолчанию.
Поэтому не исключаю возможности бага Печаль
Если хочешь разобраться, попробуй потестить свой метод, упрощая его реализацию до минимума, не меняя определение в прм-файле, и отслеживая, в какой момент вылеты закончатся.

Режим "Проверка типов" отключен согласно вашим рекомендациям Улыбка

Спасибо за совет. Перепробовал различные варианты.
Вот результаты:

1. Упрощение кода ничего не дало. Даже весь код закомментировал. Вылетает чаще всего, если переоткрыть тестовую обработку.
Вылет происходит либо при обращении к методу с неявными параметрами, либо при СоздатьОбъект("ИмяМоегоКласса")

2. Если ДопПараметрам присвоить любое другое значение, например, константу, как у параметра "КаталогАрхива", то вылетает все равно.

3. Если "ДопПараметры" переместить в начало параметров метода, то вылеты прекращаются.

4. Если оставить только один явный параметр, присвоить ему любое значение по умолчанию, и один неявный параметр - вылеты прекращаются.

Грустно, что не ругается на ошибку, а сразу вылетает. Если база большая, то очень долго переиндексировать.
  
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Вылетает 1С:Предприятие при СоздатьОбъект("ИмяМоегоКласса")
Ответ #11 - 28. Августа 2009 :: 07:20
Печать  
Большое спасибо, avgreen!
avgreen писал(а) 28. Августа 2009 :: 06:23:
Хотя если предать хотя-бы один неявный параметр там еще найдется на чем упасть Улыбка Вот на этом  к примеру
Код
Выбрать все
		спПарам=Вирт().ПолучитьСписокПараметров("ДопПараметры"); // : СписокЗначений
 


IMHO в качестве параметру нужно передавать ИмяМетода как написано в доке а не имя последнего параметра. Т.е. вот так наверное будет правильнее
Код
Выбрать все
		спПарам=Вирт().ПолучитьСписокПараметров("УпаковатьWinRAR"); // : СписокЗначений
 


согласен. Виновен! Так расстроился от падений, что до этого момента не добирался.  Улыбка
  
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вылетает 1С:Предприятие при СоздатьОбъект("ИмяМоегоКласса")
Ответ #12 - 28. Августа 2009 :: 08:19
Печать  
simply писал(а) 28. Августа 2009 :: 07:20:
Большое спасибо, avgreen!
avgreen писал(а) 28. Августа 2009 :: 06:23:
Хотя если предать хотя-бы один неявный параметр там еще найдется на чем упасть Улыбка Вот на этом  к примеру
Код
Выбрать все
		спПарам=Вирт().ПолучитьСписокПараметров("ДопПараметры"); // : СписокЗначений
 


IMHO в качестве параметру нужно передавать ИмяМетода как написано в доке а не имя последнего параметра. Т.е. вот так наверное будет правильнее
Код
Выбрать все
		спПарам=Вирт().ПолучитьСписокПараметров("УпаковатьWinRAR"); // : СписокЗначений
 


согласен. Виновен! Так расстроился от падений, что до этого момента не добирался.  Улыбка

Я как раз и говорил о том, что нужно проверять реализацию метода с неопределенным числом параметров Улыбка
  

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


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Вылетает 1С:Предприятие при СоздатьОбъект("ИмяМоегоКласса")
Ответ #13 - 28. Августа 2009 :: 08:38
Печать  
artbear писал(а) 28. Августа 2009 :: 08:19:
Я как раз и говорил о том, что нужно проверять реализацию метода с неопределенным числом параметров Улыбка

После первых трех вылетов я сразу же закомментировал этот метод и оставшееся время тестил без него:
Код
Выбрать все
Если ПустаяСтрока(ДопПараметры)=0 Тогда
	//спПарам=Вирт().ПолучитьСписокПараметров("ДопПараметры"); // : СписокЗначений
	//Если спПарам.РазмерСписка()>0 Тогда
	//	тРежимАрхивирования		= спПарам.Получить("РежимАрхивирования");			Если ПустоеЗначение(тРежимАрхивирования)=0 Тогда РежимАрхивирования=тРежимАрхивирования; КонецЕсли;
	//	тФорматАрхива			= спПарам.Получить("ФорматАрхива");					Если ПустоеЗначение(тФорматАрхива)=0 Тогда ФорматАрхива=тФорматАрхива; КонецЕсли;
	//	тДобавитьДатуИВремя		= спПарам.Получить("ДобавитьДатуИВремя");			Если ПустоеЗначение(тДобавитьДатуИВремя)=0 Тогда ДобавитьДатуИВремя=тДобавитьДатуИВремя; КонецЕсли;
	//	тИсключитьПутиИзИмен		= спПарам.Получить("ИсключитьПутиИзИмен");			Если ПустоеЗначение(тИсключитьПутиИзИмен)=0 Тогда ИсключитьПутиИзИмен=тИсключитьПутиИзИмен; КонецЕсли;
	//	тФоновыйРежимЗапуска		= спПарам.Получить("ФоновыйРежимЗапуска");			Если ПустоеЗначение(тФоновыйРежимЗапуска)=0 Тогда ФоновыйРежимЗапуска=тФоновыйРежимЗапуска; КонецЕсли;
	//	тВыводитьСообщенияОбОшибках	= спПарам.Получить("ВыводитьСообщенияОбОшибках");	Если ПустоеЗначение(тВыводитьСообщенияОбОшибках)=0 Тогда ВыводитьСообщенияОбОшибках=тВыводитьСообщенияОбОшибках; КонецЕсли;
	//	тРежимПерезаписиФайлов		= спПарам.Получить("РежимПерезаписиФайлов");		Если ПустоеЗначение(тРежимПерезаписиФайлов)=0 Тогда РежимПерезаписиФайлов=тРежимПерезаписиФайлов; КонецЕсли;
	//	тПарольАрхива			= спПарам.Получить("ПарольАрхива");					Если ПустоеЗначение(тПарольАрхива)=0 Тогда ПарольАрхива=тПарольАрхива; КонецЕсли;
	//	тПоказыватьОкноКонсоли		= спПарам.Получить("ПоказыватьОкноКонсоли");		Если ПустоеЗначение(тПоказыватьОкноКонсоли)=0 Тогда ПоказыватьОкноКонсоли=тПоказыватьОкноКонсоли; КонецЕсли;
	//	тОжидатьОкончаниеВыполнения	= спПарам.Получить("ОжидатьОкончаниеВыполнения");	Если ПустоеЗначение(тОжидатьОкончаниеВыполнения)=0 Тогда ОжидатьОкончаниеВыполнения=тОжидатьОкончаниеВыполнения; КонецЕсли;
	//КонецЕсли;
КонецЕсли; 


А для вас раскомментировал все, для полноты картины, так сказать Улыбка
  
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Вылетает 1С:Предприятие при СоздатьОбъект("ИмяМоегоКласса")
Ответ #14 - 01. Сентября 2009 :: 09:51
Печать  
avgreen писал(а) 28. Августа 2009 :: 06:23:
Однозначно здесь, но вот баг это или фича ..... это спорный вопрос Улыбка  
Вобщем достаточно последний параметр задать явно, т.е. вот так
Код
Выбрать все
	Арх.УпаковатьWinRAR("c:\t1.txt c:\t2.txt","archt.rar","c:\111\", 0);
 


и падения прекращаются. Т.е. 1С++ просто не может понять что это в конце, уже неявные параметры или еще явный параметр со значением по умолчанию Улыбка

Переписал все полностью.
Оставил только
Код
Выбрать все
// Класс по работе с WinRAR
Класс WinRAR = .\Classes\archiving\clsWinRAR.ert : Archiving
	{
	Строка Упаковать(Строка Параметры=" ", ...);
	Строка Распаковать(Строка Параметры=" ", ...);
	} 


Все равно вылетает. Не с первого раза, и не со втрого, но вылетает.
Пока явно значение не присвоил
Код
Выбрать все
Арх.Упаковать(0); 

- вылеты прекратились.
Очевидно прав avgreen, не умеет 1С++ работать с неявными параметрами и установленными по умолчанию значениями Печаль
А жаль. ИМХО с ними удобней, чем формировать свой список с параметрами и передавать его в метод.
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать