Описание ошибки 1с пустое

В режиме отладки не видно текст ОписаниеОшибки()

07 Oct

Пример:

Попытка
   
ДокЕГАИСОбъект.Записать();
Исключение
   
Сообщить(«Не удалось записать » + ДокЕГАИСОбъект + «: » + ОписаниеОшибки(), СтатусСообщения.БезСтатуса);
КонецПопытки;

Если в режиме отладки остановиться на строке Сообщить и посмотреть значение функции ОписаниеОшибки(), то описание будет пустое. Дело в том, что применять данную функцию имеет смысл только внутри операторных скобок Исключение — КонецПопытки, так как в ином случае она вернет пустую строку.

Чтобы увидеть текст ошибки в отладчике можно поступить следующим образом:

Попытка
   
ДокЕГАИСОбъект.Записать();
Исключение
   
ОпОшибки = ОписаниеОшибки(); // Чтобы можно было увидеть описание при отладке
   
Сообщить(«Не удалось записать » + ДокЕГАИСОбъект + «: » + ОпОшибки, СтатусСообщения.БезСтатуса);
КонецПопытки;

В этом случае в переменной ОпОшибки будет содержаться текст, который можно просмотреть при отладке.

ОписаниеОшибки(). что за бред?

Я

  

Carpenter

18.04.05 — 00:48

Попытка

….

ВызватьИсключение «БлаБлаБла»;

….

Исключение

   ОписаниеОшибки()

КонецЕсли;

ОписаниеОшибки()—возвращает пустую строку…..как с этим бороться?

  

Carpenter

1 — 18.04.05 — 22:22

up

  

Волшебник

2 — 18.04.05 — 23:49

Согласны, бред.

  

Carpenter

3 — 19.04.05 — 00:40

извиняюсь

КонецЕсли; заменить на КонецПопытки;

  

Carpenter

4 — 19.04.05 — 00:48

(2) бред это в адрес того что я написал?

я что-то не так делаю?

я попробовал просто поделить на ноль в операторных скобках Попытка…Исключение, но внутри Исключение…КонецПопытки; Функция ОписаниеОшибки() возвращает ту же пустую строку…при этом убираю Попытка…КонецПопытки; и мне сообщает 1с, в какой строке произошла ошибка и описание: «Деление На Ноль»…

может просвятите почему так происходит? буду очень благодарен!!!

вроде написано:

Встроенные функции языка

ОписаниеОшибки (ErrorDescription)

Синтаксис:

ОписаниеОшибки()

Описание:

Получает описание ошибки.

Примечание:

Применять данную функцию имеет смысл только внутри операторных скобок Исключение — КонецПопытки, так как в ином случае она вернет пустую строку. Помогает в выдаче диагностики при возникновении ошибок.

  

Carpenter

5 — 19.04.05 — 20:31

up

  

Волшебник

Модератор

6 — 19.04.05 — 20:37

(5) Но ты, конечно, понимаешь, что поднятие темы не гарантирует ответа, так?

  

Carpenter

7 — 19.04.05 — 20:42

понимаю……

не понимаю что я такого написал, что на это нельзя ответить…если сильно туплю, то скажите—значит действительно сильно туплю…

если не на вопрос то хоть почему нельзя на него отвечать ответьте…мне на будущее…

  

Волшебник

Модератор

8 — 19.04.05 — 20:43

(7) Лично мне лень разбираться.

  

Волшебник

Модератор

9 — 19.04.05 — 20:44

(8)+ Это же надо восьмерку запускать…

  

Carpenter

10 — 19.04.05 — 20:47

(8)такой ответ понятен=))

смутило (2)

  

Лох 80

11 — 19.04.05 — 20:49

А типа если Сообщить(ОписаниеОшибки())…

  

Carpenter

12 — 19.04.05 — 21:01

офигеть……..

вывело:

{Документ.ОтчетнаяФорма.Форма.ФормаДляЗаполнения(638)}: ДелениеНаНоль

при отладке всё равно пустая строка и на равенство этому значению не ведётся=))

надо было им написать что эта функция может употреблятся только в Сообщить()..

вообще это сильно на мой вкус………

  

Лох 80

13 — 19.04.05 — 21:05

Не знаю, как в 80, но в 7.х так всегда было… Вроде даже в Исключении отладчик вообще не работает, как бы выключается, смутно что-то такое помню, трассирни в нём а=100; и увидишь… Удачи.

  

Carpenter

14 — 19.04.05 — 21:39

вполне нормально работает…после первой строчки показывает, что а действительно 100, после второй 200=)…это слава богу есть….

есть ощущение, что ОписаниеОшибки() выдаёт пустую строку не по намерению разработчиков, хотя……фиг знает….

  

vasinok

15 — 20.04.05 — 10:10

Может я чего-то не понял, но:

Попытка

   а = 1/0;

Исключение

   ОпОшибки = ОписаниеОшибки();

   Если ОпОшибки = «{Справочник.Фирмы.Форма.ОсновнаяФормаСписка(70)}: Деление на 0» Тогда

       Сообщить(«Попытка деления на 0»);

   КонецЕсли;

КонецПопытки;

В окне служебных сообщений:

Попытка деления на 0

  

vasinok

16 — 20.04.05 — 10:11

(15)+ платформа 8.0.9.32

  

vasinok

17 — 20.04.05 — 10:14

>>и на равенство этому значению не ведётся=))

«{Справочник.Фирмы.Форма.ОсновнаяФормаСписка(70)}…

70 — номер строки модуля в которой просходит деление на 0.

  

igork1966

18 — 20.04.05 — 11:00

(12) ты сам то понял что сказал:

«..надо было им написать что эта функция может употреблятся только в Сообщить()..»

откуда такой вывод оригинальный?

Ты сам просто «выбросил» результат выданный функцией «ОписаниеОшибки()».

Или 1с должна за тебя додумать куда пихать эту строку?

Исключение

  ОписаниеОшибки();

КонецПопытки;

  

igork1966

19 — 20.04.05 — 11:09

(18)+ Если вчитатся в:

«Применять данную функцию имеет смысл только внутри операторных скобок Исключение — КонецПопытки, так как в ином случае она вернет пустую строку.»

то понятно почему в отладчике нельзя в табло посмотреть результат ОписаниеОшибки().

  

vi0

20 — 20.04.05 — 11:16

ВызватьИсключение(«БлаБлаБла»);

скобки поставь

  

vi0

21 — 20.04.05 — 11:25

хотя и без скобок работает

тебе наверное твой работодатель интересных задачь не ставит, и ты решил углибиться в анализ v8?

  

Carpenter

22 — 21.04.05 — 00:25

(15) у меня тогда не получилось..щас ещё раз попробую..может номер строчки перепутал

(17) спасибо=)) это я знаю…

  

Carpenter

23 — 21.04.05 — 00:32

(18) а ты сам понял что сказал? кто за кого должен что-то додумывать?

и где ты ещё можешь эту функцию употребить? может (15) и работает, но если добавить строчку в модуль, то надо будет все места где это использовано переделывать…удобно блин…вот и получается, что это только для отладки сделано, а если в режиме отладки этого не видать((19)—ну да ты прав), то видимо только в сообщить это и предпологается использовать?

(21) есть ощущение, что ставит поэтому и углубился..а форум вообще для чего этот как считаешь?…

P.S.хотя вообще из-за моего трудоустрйства можешь не напрягаться…

  

vi0

24 — 21.04.05 — 09:07

чувак, не горячись, в моём сообщении нет ни одного камня в твой огород, прочитай еще раз…

а для твоего случая можно на крайняк использовать временную переменную, и её уже смотреть в отладчике

Исключение

   a = ОписаниеОшибки();

  …

КонецПопытки;

  

Carpenter

25 — 21.04.05 — 22:28

(24) ок, чувак, не буду=))это я не по злобе=)) извини, если что не так..

короче сделал в итоге так:

ОпОшибки=ОписаниеОшибки();

ОпОшибки=Прав(ОпОшибки, СтрДлина(ОпОшибки)-Найти(ОпОшибки,»}»)-2);

Если ОпОшибки=»ДелениеНаНоль» Тогда

  Ячейка.Значение=0;

КонецЕсли;

Всем поучавствовавшим огромное спасибо!!!!  тема закрыта…

ОписаниеОшибки (ErrorDescription)

1C v 8.2

ОписаниеОшибки (ErrorDescription)
Синтаксис:
ОписаниеОшибки()
Возвращаемое значение:
Возвращает описание ошибки, такое же, какое было бы выдано в окне сообщений в случае отсутствия обработчика исключительной ситуации, за исключением описания модуля и строки, в которой ошибка возникла.


Описание:
Получает описание ошибки.

Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Примечание:
Применять данную функцию имеет смысл только внутри операторных скобок Исключение — КонецПопытки, так как в ином случае она вернет пустую строку. Помогает в выдаче диагностики при возникновении ошибок.


Пример:
Код 1C v 8.2 УП

 Попытка
НаборЗаписей.Записать(Истина);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
1C v 8.0 — 8.1

Синтаксис:
ОписаниеОшибки()
Возвращаемое значение:
Возвращает описание ошибки, такое же, какое было бы выдано в окне сообщений в случае отсутствия обработчика исключительной ситуации, за исключением описания модуля и строки, в которой ошибка возникла.


Описание:
Получает описание ошибки.
Примечание:
Применять данную функцию имеет смысл только внутри операторных скобок Исключение — КонецПопытки, так как в ином случае она вернет пустую строку. Помогает в выдаче диагностики при возникновении ошибок.


Пример:
Код 1C v 8.х

 Попытка
НаборЗаписей.Записать(Истина);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
1C v 7.x

Синтаксис:
ОписаниеОшибки()


Назначение:
Применять данную функцию имеет смысл только в конструкции <Попытка — Исключение — КонецПопытки>, так как в иных случаях она возвращает пустую строку.
См. также:Попытка Исключение; ВызватьИсключение.
Возвращает описание ошибки времени выполнения модуля, такое же, как то, которое выдается в окне сообщений.


Параметры: нет

Разместил: E_Migachev Дата: 30.11.2009 Прочитано: 9699

Конструкция Попытка-Исключение-КонецПопытки

Если в модуле на встроенном языке 1С будет ошибка времени выполнения, например деление на 0, то выполнение модуля будет прервано и на экран будет выведено сообщение об ошибке:

&НаКлиенте Процедура Исключение(Команда) а = 5/0; КонецПроцедуры

Ошибки времени выполнения (run time) — это ошибки во время выполнения модуля. Еще есть ошибки времени компиляции (compile time) — это ошибки во время компиляции модуля.

Для обработки ошибок времени выполнения можно использовать исключения:

&НаКлиенте Процедура Исключение(Команда) Попытка а = 5/0; Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры

Если в коде после ключевого слова Попытка будет ошибка времени выполнения, то выполнение программы перейдет на первую строку после ключевого слова Исключение. Если ошибок не будет, то код после ключевого слова Исключение даже не будет выполнен.

Конструкцию Попытка-Исключение-КонецПопытки нельзя использовать для обработки ошибок времени компиляции. Такой модуль все равно не будет скомпилирован:

&НаКлиенте Процедура Исключение(Команда) Попытка а = 5/0;+ //здесь ошибка Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры

Вызовы процедур и функций внутри попытки тоже будут обработаны:

&НаКлиенте Процедура Исключение(Команда) Попытка ПоделитьНаНоль(); Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры &НаКлиенте Процедура ПоделитьНаНоль() а = 5/0; КонецПроцедуры

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

Оператор ВызватьИсключение

Попытки могут быть вложенными:

&НаКлиенте Процедура Исключение(Команда) Попытка ПоделитьНаНоль(); Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры &НаКлиенте Процедура ПоделитьНаНоль() Попытка а = 5/0; Исключение Сообщить("Ошибка в процедуре"); КонецПопытки; КонецПроцедуры

Если выполнить данный код, то выйдет сообщение «Ошибка в процедуре», то есть код из первого исключения даже не будет выполнен. Чтобы выполнялся код из вышестоящего исключения нужно использовать оператор ВызватьИсключение:

&НаКлиенте Процедура Исключение(Команда) Попытка ПоделитьНаНоль(); Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры &НаКлиенте Процедура ПоделитьНаНоль() Попытка а = 5/0; Исключение ВызватьИсключение; КонецПопытки; КонецПроцедуры

В этом случае исключение будет проброшено вверх по стеку и обработано первым блоком Попытка-Исключение.

Можно вызывать исключение из кода оператором ВызватьИсключение. Выполнение кода будет прервано, на экране будет сообщение с текстом исключения:

&НаКлиенте Процедура Исключение(Команда) ВызватьИсключение "Исключение вызванное из кода"; КонецПроцедуры

Информация об ошибке

В 1С нельзя использовать несколько блоков Исключений для разных типов ошибки. Какая бы ошибка не произошла всегда будет вызываться код после оператора Исключение. Для получения описания ошибки можно использовать метод ОписаниеОшибки():

&НаКлиенте Процедура Исключение(Команда) Попытка а = 4/0; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры

Пример с другим типом ошибки:

&НаКлиенте Процедура Исключение(Команда) Попытка а = ПредопределенноеЗначение("Справочник.Склады.ОсновнойСклад"); //при этом такого предопределенного элемента нет Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры

Но правильней использовать метод ИнформацияОбОшибке(), который вернет объект типа ИнформацияОбОшибке:

&НаКлиенте Процедура Исключение(Команда) Попытка а = 4/0; Исключение Инф = ИнформацияОбОшибке(); //объект типа ИнформацияОбОшибке передаем //в метод КраткоеПредставлениеОшибки() //для вывода сообщения на экран Сообщить(КраткоеПредставлениеОшибки(Инф)); КонецПопытки; КонецПроцедуры

Метод КраткоеПредставлениеОшибки() выведет более понятное для обычного пользователя сообщение: «Деление на 0» вместо «{Обработка.Обработка1.Форма.Форма.Форма(5)}: Деление на 0».

Для более полного описания ошибки можно использовать метод ПодробноеПредставлениеОшибки():

&НаКлиенте Процедура Исключение(Команда) Попытка а = 4/0; Исключение Инф = ИнформацияОбОшибке(); //объект типа ИнформацияОбОшибке передаем //в метод ПодробноеПредставлениеОшибки() //для вывода подробного сообщения на экран Сообщить(ПодробноеПредставлениеОшибки(Инф)); КонецПопытки; КонецПроцедуры

Но правильней пользователю сообщать кратное представление, а в журнал регистрации записывать подробное представление ошибки:

&НаКлиенте Процедура Исключение(Команда) //ЗаписьЖурналаРегистрации доступно только на сервере Команда1НаСервере(); КонецПроцедуры &НаСервере Процедура Команда1НаСервере() Попытка а = 4/0; Исключение Инф = ИнформацияОбОшибке(); //сообщим пользователю Сообщить(КраткоеПредставлениеОшибки(Инф)); //и запишем в журнал регистрации ПодробнаяОшибка = ПодробноеПредставлениеОшибки(Инф); ЗаписьЖурналаРегистрации("Ошибка", УровеньЖурналаРегистрации.Ошибка,,, ПодробнаяОшибка); КонецПопытки; КонецПроцедуры

Приведение к нужному типу

При загрузке числовых данных из файла (например из текстового документа) в 1С часто применяется такой прием для получения числа из строки:

&НаКлиенте Процедура Исключение(Команда) //это строка с числом, допустим она была получена из файла ЧислоСтрокой = "123.45"; Попытка //пробуем перевести ее в число ЧислоЧислом = Число(ЧислоСтрокой); Исключение //если не получилось ЧислоЧислом = 0; КонецПопытки; //дальше работаем как с числом ЧислоЧислом = ЧислоЧислом + 1; Сообщить(ЧислоЧислом); КонецПроцедуры

С точки зрения производительности это не совсем корректно. Правильно использовать объект ОписаниеТипов:

&НаКлиенте Процедура Исключение(Команда) //это строка с числом, допустим она была получена из файла ЧислоСтрокой = "123.45"; //создаем объект типа ОписаниеТипов с типом Число ОписаниеТипа = Новый ОписаниеТипов("Число"); //приводим строку к числу, если не получится вернет значение по умолчанию //для числа это 0 ЧислоЧислом = ОписаниеТипа.ПривестиЗначение(ЧислоСтрокой); //дальше работаем как с числом ЧислоЧислом = ЧислоЧислом + 1; Сообщить(ЧислоЧислом); КонецПроцедуры

Смотрите также:
Электронный учебник по по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Программное решение для сдачи и подготовки к экзаменам
Программирование в 1С 8.3 с нуля — краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

В этой статье мы научимся работать с оператором Попытка Исключение в 1С 8.3

Оператор Попытка Исключение в 1С

В чем суть этого оператора? В ходе выполнения программы часто могут возникать ошибки, такие как деление на ноль, корень из отрицательного числа и прочие. Эти ошибки приводят к «крушению» программы – это значит, что программа прекратит свою работу и ни какие операторы после ошибки выполняться не будут. Чтобы обойти исключительную ситуацию и продолжить выполнение программы, в языке программирования 1С существует оператор Попытка…Исключение.

Рассмотрим его синтаксис.

Попытка

//операторы попытки

Исключение

//операторы исключения.

КонецПопытки

Разберем этот синтаксис.

Ключевое слово Попытка открывает список операторов, выполнение которых может привести к исключительной ситуации, все операторы между ключевыми словами Попытка и Исключение это Операторы попытки.

Ключевое слово Исключение открывает список операторов, которые будут выполняться в том случае, если вызвана исключительная ситуация операторами попытки. Т.е. если во время выполнения программы один из операторов попытки вызвал ошибку выполнения программы (исключительную ситуацию), то выполнение данного оператора прерывается и управление передается на первый Оператор исключения. Причем обращаю Ваше внимание, что управление будет передано и в том случае, если исключительную ситуацию вызвали функции и процедуры, разработанные программистом и применяемые в качестве операторов попытки. Естественно, что если ошибка произошла в процедуре или функции, то ее выполнение будет прервано.

Попытка
   КореньЧислаяА = Sqrt(А);
   Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаяА,5));
Исключение
   Сообщить("Попытка извлечь корень из отрицательного числа");
КонецПопытки;

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

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

Описание ошибки в 1С

В коде выше я использовал собственное выражение для описания ошибки, но можно использовать метод ОписаниеОшибки(), который возвращается описание ошибки с точки зрения разработчиков платформы 1С. Это функция, которая возвращает текст с описанием ошибки. Например, код выше можно переделать так:

А = -100;
Попытка
	КореньЧислаяА = Sqrt(А);
	Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаяА,5));
Исключение
	Сообщить(ОписаниеОшибки());
КонецПопытки;

Тогда, при выполнении выйдет «стандартизированное» описание ошибки.

Использование метода ОписаниеОшибки

Оператор ВызватьИсключение в 1С

Если мы всё сделаем правильно, то никакой ошибки не возникнет, просто выйдет сообщение о корне из отрицательного числа. А что если нам нужно, чтобы все-таки ошибка вышла? Для этого есть оператор ВызватьИсключение.

Попытка
   КореньЧислаяА = Sqrt(А);
   Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаяА,5));
Исключение
   Сообщить("Попытка извлечь корень из отрицательного числа");
   ВызватьИсключение;
КонецПопытки;

Если сейчас мы попробуем посчитать корень из отрицательного числа, то выйдет следующее сообщение:

Использование оператора ВызватьИсключение

Оператор ВызватьИсключение можно использовать отдельно для «эмуляции» вызова исключение. Например, при выполнении этой команды формы:

&НаКлиенте
Процедура Команда1(Команда)
	ВызватьИсключение "Мы вызвали какое-то исключение";
КонецПроцедуры

Будет вызвано исключение.

Использование оператора ВызватьИсключение

Причём, в открывавшемся окне можно посмотреть место в коде, где было вызвано исключение.

Использование оператора ВызватьИсключение

Попытка внутри попытки в 1С

В платформе 1С 8.3 можно один оператор попытки разместить в другом операторе. Например, на управляемой форме обработки разместим несколько реквизитов с типом Число.

Реквизиты управляемой формы 1С

И по команде с формы попытаемся вычислить корень из каждого реквизита, при этом сделаем это в двух вложенных операторах попытки.

Попытка
	Попытка 
		КореньЧислаА = Sqrt(А);
		Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаА,5));
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;	
	КореньЧислаяБ = Sqrt(Б);
	Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаяБ,5));
Исключение
	Сообщить(ОписаниеОшибки());
КонецПопытки;

И результат работы этой обработки:

Попытка внутри попытки в 1С

Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

Программировать в 1С за 11 шагов

Книга написана понятным и простым языком — для новичка.

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

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

Основы разработки в 1С такси

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


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

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

ОписаниеОшибки(). что за бред?

Я
   Carpenter

18.04.05 — 00:48

Попытка

….

ВызватьИсключение «БлаБлаБла»;

….

Исключение

   ОписаниеОшибки()

КонецЕсли;

ОписаниеОшибки()—возвращает пустую строку…..как с этим бороться?

   Carpenter

1 — 18.04.05 — 22:22

up

   Волшебник

2 — 18.04.05 — 23:49

Согласны, бред.

   Carpenter

3 — 19.04.05 — 00:40

извиняюсь

КонецЕсли; заменить на КонецПопытки;

   Carpenter

4 — 19.04.05 — 00:48

(2) бред это в адрес того что я написал?

я что-то не так делаю?

я попробовал просто поделить на ноль в операторных скобках Попытка…Исключение, но внутри Исключение…КонецПопытки; Функция ОписаниеОшибки() возвращает ту же пустую строку…при этом убираю Попытка…КонецПопытки; и мне сообщает 1с, в какой строке произошла ошибка и описание: «Деление На Ноль»…

может просвятите почему так происходит? буду очень благодарен!!!

вроде написано:

Встроенные функции языка

ОписаниеОшибки (ErrorDescription)

Синтаксис:

ОписаниеОшибки()

Описание:

Получает описание ошибки.

Примечание:

Применять данную функцию имеет смысл только внутри операторных скобок Исключение — КонецПопытки, так как в ином случае она вернет пустую строку. Помогает в выдаче диагностики при возникновении ошибок.

   Carpenter

5 — 19.04.05 — 20:31

up

   Волшебник

Модератор

6 — 19.04.05 — 20:37

(5) Но ты, конечно, понимаешь, что поднятие темы не гарантирует ответа, так?

   Carpenter

7 — 19.04.05 — 20:42

понимаю……

не понимаю что я такого написал, что на это нельзя ответить…если сильно туплю, то скажите—значит действительно сильно туплю…

если не на вопрос то хоть почему нельзя на него отвечать ответьте…мне на будущее…

   Волшебник

Модератор

8 — 19.04.05 — 20:43

(7) Лично мне лень разбираться.

   Волшебник

Модератор

9 — 19.04.05 — 20:44

(8)+ Это же надо восьмерку запускать…

   Carpenter

10 — 19.04.05 — 20:47

(8)такой ответ понятен=))

смутило (2)

   Лох 80

11 — 19.04.05 — 20:49

А типа если Сообщить(ОписаниеОшибки())…

   Carpenter

12 — 19.04.05 — 21:01

офигеть……..

вывело:

{Документ.ОтчетнаяФорма.Форма.ФормаДляЗаполнения(638)}: ДелениеНаНоль

при отладке всё равно пустая строка и на равенство этому значению не ведётся=))

надо было им написать что эта функция может употреблятся только в Сообщить()..

вообще это сильно на мой вкус………

   Лох 80

13 — 19.04.05 — 21:05

Не знаю, как в 80, но в 7.х так всегда было… Вроде даже в Исключении отладчик вообще не работает, как бы выключается, смутно что-то такое помню, трассирни в нём а=100; и увидишь… Удачи.

   Carpenter

14 — 19.04.05 — 21:39

не а=100;

  а=200;

вполне нормально работает…после первой строчки показывает, что а действительно 100, после второй 200=)…это слава богу есть….

есть ощущение, что ОписаниеОшибки() выдаёт пустую строку не по намерению разработчиков, хотя……фиг знает….

   vasinok

15 — 20.04.05 — 10:10

Может я чего-то не понял, но:

Попытка

   а = 1/0;

Исключение

   ОпОшибки = ОписаниеОшибки();

   Если ОпОшибки = «{Справочник.Фирмы.Форма.ОсновнаяФормаСписка(70)}: Деление на 0» Тогда

       Сообщить(«Попытка деления на 0»);

   КонецЕсли;

КонецПопытки;

В окне служебных сообщений:

Попытка деления на 0

   vasinok

16 — 20.04.05 — 10:11

(15)+ платформа 8.0.9.32

   vasinok

17 — 20.04.05 — 10:14

>>и на равенство этому значению не ведётся=))

«{Справочник.Фирмы.Форма.ОсновнаяФормаСписка(70)}…

70 — номер строки модуля в которой просходит деление на 0.

   igork1966

18 — 20.04.05 — 11:00

(12) ты сам то понял что сказал:

«..надо было им написать что эта функция может употреблятся только в Сообщить()..»

откуда такой вывод оригинальный?

Ты сам просто «выбросил» результат выданный функцией «ОписаниеОшибки()».

Или 1с должна за тебя додумать куда пихать эту строку?

Исключение

  ОписаниеОшибки();

КонецПопытки;

   igork1966

19 — 20.04.05 — 11:09

(18)+ Если вчитатся в:

«Применять данную функцию имеет смысл только внутри операторных скобок Исключение — КонецПопытки, так как в ином случае она вернет пустую строку.»

то понятно почему в отладчике нельзя в табло посмотреть результат ОписаниеОшибки().

   vi0

20 — 20.04.05 — 11:16

ВызватьИсключение(«БлаБлаБла»);

скобки поставь

   vi0

21 — 20.04.05 — 11:25

хотя и без скобок работает

тебе наверное твой работодатель интересных задачь не ставит, и ты решил углибиться в анализ v8?

   Carpenter

22 — 21.04.05 — 00:25

(15) у меня тогда не получилось..щас ещё раз попробую..может номер строчки перепутал

(17) спасибо=)) это я знаю…

   Carpenter

23 — 21.04.05 — 00:32

(18) а ты сам понял что сказал? кто за кого должен что-то додумывать?

и где ты ещё можешь эту функцию употребить? может (15) и работает, но если добавить строчку в модуль, то надо будет все места где это использовано переделывать…удобно блин…вот и получается, что это только для отладки сделано, а если в режиме отладки этого не видать((19)—ну да ты прав), то видимо только в сообщить это и предпологается использовать?

(21) есть ощущение, что ставит поэтому и углубился..а форум вообще для чего этот как считаешь?…

P.S.хотя вообще из-за моего трудоустрйства можешь не напрягаться…

   vi0

24 — 21.04.05 — 09:07

чувак, не горячись, в моём сообщении нет ни одного камня в твой огород, прочитай еще раз…

а для твоего случая можно на крайняк использовать временную переменную, и её уже смотреть в отладчике

Исключение

   a = ОписаниеОшибки();

  …

КонецПопытки;

  

Carpenter

25 — 21.04.05 — 22:28

(24) ок, чувак, не буду=))это я не по злобе=)) извини, если что не так..

короче сделал в итоге так:

ОпОшибки=ОписаниеОшибки();

ОпОшибки=Прав(ОпОшибки, СтрДлина(ОпОшибки)-Найти(ОпОшибки,»}»)-2);

Если ОпОшибки=»ДелениеНаНоль» Тогда

  Ячейка.Значение=0;

КонецЕсли;

Всем поучавствовавшим огромное спасибо!!!!  тема закрыта…

Функция возвращает описание ошибки

Синтаксис

Функция ОписаниеОшибки() имеет следующий синтаксис:

строка ОписаниеОшибки()

А также альтернативный англоязычный синтаксис:

string GetErrorDescription()

Возвращаемое значение

Строка

Описание

Функция ОписаниеОшибки() возвращает текстовое описание ошибки, которая привела к возникновению исключительной ситуации в процессе выполнения операторов встроенного языка в конструкции Попытка … Исключение.
Функцию имеет смысл использовать только внутри блока Исключение … КонецПопытки. В остальных случаях она возвращает пустую строку.

Пример использования

Пример кода с использованием функции ОписаниеОшибки()

//расчет минимальной цены по таблице значений
МинЦена = 999999999; 

ТекущаяСтрока = 0;

Для НомерСтроки = 1 По ТаблицаЗначений.КоличествоСтрок() Цикл
    ТекущаяСтрока = ТаблицаЗначений.ПолучитьСтрокуПоНомеру(НомерСтроки);
    Если ТекущаяСтрока.Сумма > 0 Тогда
        Попытка
            МинЦена = Мин(МинЦена, ТекущаяСтрока.Сумма / ТекущаяСтрока.Количество);
        Исключение
            Сообщить("Строка[" + НомерСтроки + "]: " + ОписаниеОшибки(), "!!!");
        КонецПопытки;
    КонецЕсли;
КонецЦикла;      
   
Если МинЦена = 999999999 Тогда                
    Предупреждение("Не удалось определить минимальную цену!", 5);
Иначе
    Предупреждение("Минимальная цена = " + МинЦена, 5);
КонецЕсли;

Читайте также:

  1. Обработка исключительных ситуаций в конструкции Попытка .. Исключение

Поделиться страницей в соц.сетях

В этой статье мы научимся работать с оператором Попытка Исключение в 1С 8.3

Оператор Попытка Исключение в 1С

В чем суть этого оператора? В ходе выполнения программы часто могут возникать ошибки, такие как деление на ноль, корень из отрицательного числа и прочие. Эти ошибки приводят к «крушению» программы – это значит, что программа прекратит свою работу и ни какие операторы после ошибки выполняться не будут. Чтобы обойти исключительную ситуацию и продолжить выполнение программы, в языке программирования 1С существует оператор Попытка…Исключение.

Рассмотрим его синтаксис.

Попытка

//операторы попытки

Исключение

//операторы исключения.

КонецПопытки

Разберем этот синтаксис.

Ключевое слово Попытка открывает список операторов, выполнение которых может привести к исключительной ситуации, все операторы между ключевыми словами Попытка и Исключение это Операторы попытки.

Ключевое слово Исключение открывает список операторов, которые будут выполняться в том случае, если вызвана исключительная ситуация операторами попытки. Т.е. если во время выполнения программы один из операторов попытки вызвал ошибку выполнения программы (исключительную ситуацию), то выполнение данного оператора прерывается и управление передается на первый Оператор исключения. Причем обращаю Ваше внимание, что управление будет передано и в том случае, если исключительную ситуацию вызвали функции и процедуры, разработанные программистом и применяемые в качестве операторов попытки. Естественно, что если ошибка произошла в процедуре или функции, то ее выполнение будет прервано.

Попытка
   КореньЧислаяА = Sqrt(А);
   Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаяА,5));
Исключение
   Сообщить("Попытка извлечь корень из отрицательного числа");
КонецПопытки;

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

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

Описание ошибки в 1С

В коде выше я использовал собственное выражение для описания ошибки, но можно использовать метод ОписаниеОшибки(), который возвращается описание ошибки с точки зрения разработчиков платформы 1С. Это функция, которая возвращает текст с описанием ошибки. Например, код выше можно переделать так:

А = -100;
Попытка
	КореньЧислаяА = Sqrt(А);
	Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаяА,5));
Исключение
	Сообщить(ОписаниеОшибки());
КонецПопытки;

Тогда, при выполнении выйдет «стандартизированное» описание ошибки.

Использование метода ОписаниеОшибки

Оператор ВызватьИсключение в 1С

Если мы всё сделаем правильно, то никакой ошибки не возникнет, просто выйдет сообщение о корне из отрицательного числа. А что если нам нужно, чтобы все-таки ошибка вышла? Для этого есть оператор ВызватьИсключение.

Попытка
   КореньЧислаяА = Sqrt(А);
   Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаяА,5));
Исключение
   Сообщить("Попытка извлечь корень из отрицательного числа");
   ВызватьИсключение;
КонецПопытки;

Если сейчас мы попробуем посчитать корень из отрицательного числа, то выйдет следующее сообщение:

Использование оператора ВызватьИсключение

Оператор ВызватьИсключение можно использовать отдельно для «эмуляции» вызова исключение. Например, при выполнении этой команды формы:

&НаКлиенте
Процедура Команда1(Команда)
	ВызватьИсключение "Мы вызвали какое-то исключение";
КонецПроцедуры

Будет вызвано исключение.

Использование оператора ВызватьИсключение

Причём, в открывавшемся окне можно посмотреть место в коде, где было вызвано исключение.

Использование оператора ВызватьИсключение

Попытка внутри попытки в 1С

В платформе 1С 8.3 можно один оператор попытки разместить в другом операторе. Например, на управляемой форме обработки разместим несколько реквизитов с типом Число.

Реквизиты управляемой формы 1С

И по команде с формы попытаемся вычислить корень из каждого реквизита, при этом сделаем это в двух вложенных операторах попытки.

Попытка
	Попытка 
		КореньЧислаА = Sqrt(А);
		Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаА,5));
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;	
	КореньЧислаяБ = Sqrt(Б);
	Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаяБ,5));
Исключение
	Сообщить(ОписаниеОшибки());
КонецПопытки;

И результат работы этой обработки:

Попытка внутри попытки в 1С

Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

Программировать в 1С за 11 шагов

Книга написана понятным и простым языком — для новичка.

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

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

Основы разработки в 1С такси
  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


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

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

  • Операция отменена ошибка фн 235 эвотор что делать
  • Операция отклонена ошибки 200 идентичный документ был отправлен ранее
  • Операция отклонена ошибка 988
  • Операция отклонена картой код ошибки 14
  • Операция не удалась 1007 внутренняя системная ошибка при вызове веб сервиса