Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Как в 7.7 красиво вызывать исключение..?

v7: Как в 7.7 красиво вызывать исключение..?
Я
   Злопчинский
 
25.02.20 - 03:04
Есть конструкция, типа:
Попытка
  //здесь много кода
Исключение
  Сообщить(ОписаниеОшибки());
КонецПопытки;

хочется внутри //здесь много кода
породить исключительную ситуацию искусственно, например, по условию
но чтобы при этом в табло не вываливалось "кривых" сообщений в ОписаниеОшибки().
исключительную ситуацию можно вызывать типа x=1/0, но в табло по описанию ошибки выпадет "ненужное" "Деление на 0".

а хочется типа так

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

..как?
   Aleksey
 
1 - 25.02.20 - 04:46
goto ?
   Aleksey
 
2 - 25.02.20 - 04:50
Перейти ~Метка!;  
 
 ~ Метка!: Сообщить("Осуществлен переход по метке.");
   Bigbro
 
3 - 25.02.20 - 04:56
а конец попытки?
или мы так и останемся в попытке и будем накапливать стек погружаясь при повторных вызовах пока не опнемся где нибудь в переполнение?
   Aleksey
 
4 - 25.02.20 - 05:09
(3) он все равно из процедуры выдкт, тогда и почистит
   ADirks
 
5 - 25.02.20 - 07:00
(0) если 1С++ подключается, то можно

ВыполняемыйМодуль :: ВыброситьИскл / Throw 

Синтаксис: ВыброситьИскл(ОбъектИскл, [ТекстИскл])

Параметры:

ОбъектИскл - тип: Любой. Параметр, который потом можно получить при обработке исключения методом ПолучитьИсключение.
ТекстИскл - тип: Строка. Сообщение об ошибке. По умолчанию "".
Описание: Формирует исключение с объектом, который можно получить при перехвате/обработке исключения с помощью метода ПолучитьИсключение.

При обработке исключения текст сообщения об ошибке можно получить с помощью глобальной функции ОписаниеОшибки(). Если исключение не обработано, этот текст будет выведен в окно сообщений.
   ololoraise
 
6 - 25.02.20 - 07:24
Можно закрыть 1с не штатном, только как уже не помню, господин Ёпрст знает)
   Злопчинский
 
7 - 25.02.20 - 12:32
(5) вот это слово "ВыполняемыйМодуль ::" для меня пока загадка.
по описанию то что надо, но как это запилить в код?
   pechkin
 
8 - 25.02.20 - 12:39
(0) делай
сообщить(ТекстОшибки);
x=1/0;

   ADirks
 
9 - 25.02.20 - 12:46
(7) типа того:

    ВМ = СоздатьОбъект("ВыполняемыйМодуль");
    ВМ.ВыброситьИскл(, "дадададад");
   pechkin
 
10 - 25.02.20 - 12:47
(7) для начала нужно 1с++ подключить
   fisher
 
11 - 25.02.20 - 12:48
ВызватьИсключение не предлагать?
   fisher
 
12 - 25.02.20 - 12:49
А, черт! В 7.7 оно не умеет другую ошибку возвращать...
   dk
 
13 - 25.02.20 - 13:27
тоже недавно искал
//*******************************************

Процедура Сформировать()

    Модуль=СоздатьОбъект("ВыполняемыйМодуль");
    
    Попытка
        Сообщить("Все хорошо1 ");
        Модуль.СформироватьОшибку("СлучилосьСтрашное");
        Сообщить("Все хорошо2 ");
    Исключение
        Сообщить("Плохо = " + ОписаниеОшибки());
    КонецПопытки;
    
КонецПроцедуры

Процедура Сформировать2()

    Модуль=СоздатьОбъект("ВыполняемыйМодуль");
    
    Попытка
        Сообщить("Все хорошо1 ");
        Модуль.ВыброситьИскл(Константа.БазоваяВалюта, "Вот тут какое то сообщение");
        Сообщить("Все хорошо2 ");
    Исключение
        Сообщить("Плохо = " + ОписаниеОшибки());
        Сообщить("Плохо2 = " + Модуль.ПолучитьИсключение());
    КонецПопытки;
    
КонецПроцедуры

   8 bit
 
14 - 25.02.20 - 13:48
(0) а почему именно "исключение" требуется?
Что мешает выводить предупреждение(текстпредупреждения, тамаут)?

Ну возникла у тебя какая-то ситуация, выведи табло, пусть втыкают. А для тех, кто любит запустить формирование длительного отчета и свалить с рабочего места, установи таймаут. Параллельно никто не запрещает в журнал регистрации добавлять произвольные записи, а не "банальное деление на 0".
   8 bit
 
15 - 25.02.20 - 13:51
+(14) еще в объект текст можно было помещать важные уведомления. Висит окошко, наполняется текстом, читай сколько угодно. Непрочитанный текст можно было выводить при старте системы, пусть пользователь почитает, да повнимательнее.
   Simod
 
16 - 25.02.20 - 14:16
ТекстОшибки = "";

Попытка
    ...
    Если <Условие> Тогда
        ТекстОшибки = "Мое сообщение";
        Результат = 1 / 0;
    КонецЕсли;
    ...

Исключение
    Если ТекстОшибки <> "" Тогда
        Сообщить(ТекстОшибки);
    Иначе
        Сообщить(ОписаниеОшибки());
    КонецЕсли;

КонецПопытки;
   Злопчинский
 
17 - 25.02.20 - 17:18
(9) понял, спсб
   Злопчинский
 
18 - 25.02.20 - 17:18
(11) вызвать исключение работает внутри ветки исключение для передачи управления на более внешний обработчик.
   Ёпрст
 
19 - 25.02.20 - 17:28
(0)
0/0
   Djelf
 
20 - 25.02.20 - 18:40
(19) Не... это то же самое что и 1/0, предлагаю (по приколу /* никогда так не делайте*/, еще более угрожающее сообщение)

Сообщить("В обработке произошла полная  "-" >>>   (_!_)  <<<, сколько нужно вычесть у программиста пока не знаем, из-за этого ему выдаем ошибку:");
   Злопчинский
 
21 - 25.02.20 - 23:46
(20) погромист - хитрый, он поделит на 0 так, что никакого исключения не будет:
ПолнаяХерня = ПолнаяХерня/0; - исключения не будет...


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.