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

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

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

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

..как?
1 Aleksey
 
25.02.20
04:46
goto ?
2 Aleksey
 
25.02.20
04:50
Перейти ~Метка!;  

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

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

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

Параметры:

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

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

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

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

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

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

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

Ну возникла у тебя какая-то ситуация, выведи табло, пусть втыкают. А для тех, кто любит запустить формирование длительного отчета и свалить с рабочего места, установи таймаут. Параллельно никто не запрещает в журнал регистрации добавлять произвольные записи, а не "банальное деление на 0".
15 8 bit
 
25.02.20
13:51
+(14) еще в объект текст можно было помещать важные уведомления. Висит окошко, наполняется текстом, читай сколько угодно. Непрочитанный текст можно было выводить при старте системы, пусть пользователь почитает, да повнимательнее.
16 Simod
 
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
20 Djelf
 
гуру
25.02.20
18:40
(19) Не... это то же самое что и 1/0, предлагаю (по приколу /* никогда так не делайте*/, еще более угрожающее сообщение)

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