Имя: Пароль:
1C
 
ОписаниеОшибки()
0 andrey02
 
11.09.08
09:40
Нужно отловить некоторые ошибки типа записи (программной) нового документа с неуникальным номером и вывести сообщение. Но для такого случая ОписаниеОшибки() возвращает пустую строку. Как быть?
1 MishaSan
 
11.09.08
09:43
Погоди ты пишешь
Попытка
Док.Записать(режимзаписиДокумента.Запись);
Исключение
Сообщить(описаниеОшибки())
КонецПопытки;
И эта конструкция ничего не выводит, если номер не уникален?
2 hulio_ekb
 
11.09.08
09:48
Это ты в отладчике что ли смотришь, что возвращает описание ошибки? Можешь не пытаться, просто делай как сказано в (1)
3 andrey02
 
11.09.08
09:48
Да, именно так
4 Krom
 
11.09.08
09:50
если ошибка возникает, то (1) ее однозначно выловит!
5 andrey02
 
11.09.08
09:53
Виноват, попробовал как в (1) - все как надо. Видимо у меня в обработке что то еще навернуто
6 hulio_ekb
 
11.09.08
10:03
Да ничо не навернуто, просто в отладчике ты не увидишь результата функции "описаниеОшибки()"
7 andrey02
 
11.09.08
10:23
Щас поэкспериментировал... Вот код:

Функция ПредставлениеОбъекта(Объект)
   МетаТип = Метаданные.НайтиПоТипу(ТипЗнч(Объект));
   Возврат МетаТип.ПолноеИмя()+" № "+Объект.Номер+" от "+Объект.Дата;
КонецФункции

Процедура КнопкаВыполнитьНажатие(Кнопка)
   Попытка
       Док = Документы.РасходнаяНакладная.СоздатьДокумент();
       Док.Номер = "БВ-0000001";
       Док.Дата = ТекущаяДата();
       Док.Записать(РежимЗаписиДокумента.Запись);
   Исключение
       //Сообщить(ПредставлениеОбъекта(Док)+": "+ОписаниеОшибки()); // не работает
       Сообщить(Строка(Док)+": "+ОписаниеОшибки()); // работает
   КонецПопытки;
КонецПроцедуры

Только вторая Сообщить() выводит описание ошибки, первая - только документ (если первая раскомментирована, то вторая тоже не выводит описание)
8 andrey02
 
11.09.08
10:28
... и даже если функцию ПредставлениеОбъекта() написать так:

Функция ПредставлениеОбъекта(Объект)
   Возврат Строка(Объект);
КонецФункции

то тоже первая Сообщить() тоже не выводит описание. Получается, что ОписаниеОшибки() можно использовать только до вызова какой-нибудь своей функции?
9 Krom
 
11.09.08
10:33
а если вот так?
Ошибка = Строка(ОписаниеОшибки());
Сообщить(ПредставлениеОбъекта(Док)+": "+Ошибка);
10 andrey02
 
11.09.08
10:40
Ну да, так работает. Свою то функцию вызываем после ОписаниеОшибки(). Но вот что это за особенность такая, в справке про нее ничего не сказано...
(зато там сказано, что она возвращает описание ошибки без имени модуля и строки, а на самом деле они возвращаются)
11 Krom
 
11.09.08
10:45
походу, если вызывать ОписаниеОшибки после своей функции, то ОписаниеОшибки относится уже к ней!
12 Krom
 
11.09.08
10:45
и соответственно возвращает пустое значение