Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Вопрос, поражающий новизной... Вложенность попыток

v7: Вопрос, поражающий новизной... Вложенность попыток
Я
   Злопчинский
 
16.05.18 - 04:24
(Просьба не обсуждать - кузяво или не кузяво использовать Попытку, это вопрос для отдельного обсуждения)

Рассуждение#1 ========================================================
Цикл#1

-------------------
Пока 1=1 Цикл
   Попытка А=2; Продолжить;
   Исключение КонецПопытки;
КонецЦикла;

Цикл#2

-------------------
Пока 1=1 Цикл
   Попытка А=2; 
   Исключение КонецПопытки;
КонецЦикла;

Очевидно (?), что Цикл#2 можно представить как последовательные независимые Попытки:


Попытка Исключение КонецПопытки;
Попытка Исключение КонецПопытки;
Попытка Исключение КонецПопытки;
Попытка Исключение КонецПопытки;
Попытка Исключение КонецПопытки;
...

Вопрос#1

Эквивалентен ли по исполнению Цикл#1 Циклу#2, т.е. можно ли Цикл#1 представить тоже как и Цикл #2:
(1.1)
Попытка Исключение КонецПопытки;
Попытка Исключение КонецПопытки;
Попытка Исключение КонецПопытки;
Попытка Исключение КонецПопытки;
Попытка Исключение КонецПопытки;
...

или как
(1.2)
Попытка Попытка Попытка.... Исключение КонецПопытки; Исключение КонецПопытки; Исключение КонецПопытки;

или как
(1.3)
Попытка Попытка Попытка.... Исключение Исключение КонецПопытки; КонецПопытки; КонецПопытки;

(1.4)
Есть ли разница какой вариант цикла использовать - Цикл#1 или Цикл#2 ...?

Рассуждение#2 ========================================================

Проистекает (?) из первого

Возврат#1
Попытка
  ...
  Возврат;
Исключение 
КонецПопытки;

Возврат#2

Попытка
  ....;
  ф=1;
Исключение 
  ф=0;
КонецПопытки;
Если Ф=1 Тогда Возврат; КонецЕсли;

Вопрос #2
(2.1)
Эквивалентны ли эти два возврата или в первом случае, операторы, на которые передастся исполнение после "Возврат" - будут они исполняться "внутри" попытки или "вне"..?
(2.2)
Есть ли разница какой вариант возврата использовать - Возврат#1 или Возврат#2 ...?
 
 
   ADirks
 
1 - 16.05.18 - 08:36
(0) Ничего плохого в использовании исключений не вижу.

#1 и #2  эквивалентны, и это именно последовательность блоков Попытка, как показано в 1.1

Варианты с возвратом функционально эквивалентны, только во втором чуть больше затрат.
   Сияющий в темноте
 
2 - 16.05.18 - 09:32
Вложенность попыток,это когда одна в другой и мы с помощью throw отправляем исключение верхней попытке
   uno-group
 
3 - 16.05.18 - 11:56
Из моей практики Если вложеная попытка попадает в исключение то и вышестоящая отправляется туда же.
   1Сергей
 
4 - 16.05.18 - 11:59
Процедура Рекурсия()
    Попытка
        Рекурсия();
    Исключение
    
    КонецПопытки;
КонецПроцедуры
   1Сергей
 
5 - 16.05.18 - 11:59
(3) +1
   Chieftain
 
6 - 16.05.18 - 12:11
(3) с чего это вдруг?
Попытка
    Попытка
        зн=1/0;
    Исключение
        Сообщить("Попытка вложенная:"+ОписаниеОшибки());
    КонецПопытки;
    Сообщить("Попытка основная после вложенной");
Исключение
    Сообщить("Попытка основная:"+ОписаниеОшибки());
КонецПопытки;


Выведет:
  Попытка вложенная:Деление на 0
  Попытка основная после вложенной

Т.е. вышестоящая вполне себе отдельно
   uno-group
 
7 - 16.05.18 - 13:09
(6) Возможно зависит от вида ошибок и конструкции. Я документы в попытке проводил и там СтатусВозврата(0) был.
   Chieftain
 
8 - 16.05.18 - 16:20
(7) Не принципиально. А со статусом возврата еще и возврат наверняка был.
   Злопчинский
 
9 - 16.05.18 - 16:41
(1) Спсб!

"Ничего плохого в использовании исключений не вижу."
- я - тоже.
тем более что на 77 эксклюзивные блокировки на чтение без Попыток (+еще бубнышаманы) - не сделаешь
   Злопчинский
 
10 - 16.05.18 - 16:44
(1) Значит в Рассуждении#2 использовать Возврат#1 - это нормально? - исполняемый код после возврата будет выполняться ВНЕ попытки..? - так?
 
 Рекламное место пустует
   Сияющий в темноте
 
11 - 16.05.18 - 17:32
(6) а где вызвать исключение?исключение из одной попытки в другую передается специальной командой
   Злопчинский
 
12 - 16.05.18 - 17:59
(11) не в другую, а в верхнюю.
и не хватает чтобы внутри попытки вызвать текущее исключение
   Злопчинский
 
13 - 16.05.18 - 17:59
и не хватает чтобы внутри попытки вызвать текущее исключение
- в смысле в языке возможности не хватает
   Chieftain
 
14 - 16.05.18 - 19:49
(13) Читай СП:
ВызватьИсключение;
Raise;
Синтаксис:
ВызватьИсключение;
Назначение:
Данный оператор применяется в языковой конструкции Попытка-Исключение-КонецПопытки. Обработки исключительной ситуации могут быть вложенными. При этом, при возникновении исключительной ситуации управлениие будет передано на самый ''внутренний'' обработчик, начинающийся с ключевого слова Исключение. Последовательность операторов обработки исключительной ситуации может содержать оператор ВызватьИсключение. Выполнение данного оператора прекращает выполнение последовательности обработки исключительной ситуации и производится поиск более ''внешнего'' обработчика. Если таковой есть, то управление передается на его первый оператор. Если нет, то выполнение модуля прекращается с выдачей сообщения о первоначально возникшей ошибке. Оператор ВызватьИсключение может встречаться только внутри операторных скобок Исключение ... КонецПопытки.
Параметры:
Нет.
   Duke1C
 
15 - 16.05.18 - 20:11
(13) "Всё уже украдено до вас" :) -> (14)
   Злопчинский
 
16 - 16.05.18 - 21:53
(14) "Последовательность операторов обработки исключительной ситуации может содержать оператор ВызватьИсключение. "
- учите матчасть ;-)
ВызватьИсключение - ВНУТРИ обработки исключительной ситуации,
т.е.

Попытка
//чтото

Исключение
  ВызватьИсключение;
КонецПопытки

а мну хочется 
Попытка
  //вот здесь как-то искуственно вызвать исключение

Исключение
  //чтобы попасть вот сюда

КонецПопытки
   Chieftain
 
17 - 16.05.18 - 22:39
(16) Достаточно просто:
Модуль=СоздатьОбъект("ВыполняемыйМодуль");
Модуль.СформироватьОшибку("СлучилосьСтрашное");
   ADirks
 
18 - 17.05.18 - 07:43
(10) да, всё так

(16) можно так
Попытка
   а = 1 / 0;//случилось страшное

Исключение
КонецПопытки
   catena
 
19 - 17.05.18 - 07:56
(16)А в 77 такое не работает? В 8 использую активно.

Попытка
    ВызватьИсключение("Идем в исключение");
Исключение
    Сообщить(ОписаниеОшибки());
КонецПопытки;
   catena
 
20 - 17.05.18 - 07:56
Да, прочитала

"Оператор ВызватьИсключение может встречаться только внутри операторных скобок Исключение ... КонецПопытки. "

Грустно.
   Chieftain
 
21 - 17.05.18 - 13:02
(20) Чтобы грустно не было в 77 умные дяди придумали 1С++, FormEx и прочие радости семерочника.
   Злопчинский
 
22 - 17.05.18 - 19:08
(18) какой умный, однако!
я тоже так знаю - но эта хрень в табло выкидывает сообщение, а оно нафиг не нужно, а морочиться с подавлением сообщений - муторно
   Злопчинский
 
23 - 17.05.18 - 19:08
(17) так вот оно как!!!
   Mr_Rm
 
24 - 17.05.18 - 20:31
(22) вроде бы нет никаких лишних сообщений:
 Попытка
   ч=1/0;
 Исключение
  // тут делаем что нужно

  // если табло закрыто, оно даже не появляется

 КонецПопытки;
   Злопчинский
 
25 - 17.05.18 - 20:53
(24) действительно.
значит я туплю.
   Сияющий в темноте
 
26 - 17.05.18 - 20:58
Деление на ноль-наше все!
   Chieftain
 
27 - 17.05.18 - 22:42
(26) Только в ОписаниеОшибки() будет "Деление на 0", а если как в (17) - можно что угодно написать.
Но это если анализ ошибки нужен
   MWWRuza
 
28 - 17.05.18 - 22:53
(17)Это в 7.7 - ???
Странно, а СП об этом ничего не знает... Недокументированная фича, что-ли, или это в какой-то ВК доступно?
   Злопчинский
 
29 - 17.05.18 - 22:58
(28) 1С++
   Chieftain
 
30 - 18.05.18 - 02:15
(28) а у меня особенный СП ;)
в него добавлено http://www.1cpp.ru/docum/1C++.als
   Mr_Rm
 
31 - 18.05.18 - 09:27
(27) можно передать в ОписаниеОшибки строку, например, так:

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

 КонецПопытки;
   Злопчинский
 
32 - 18.05.18 - 12:36
(31) оверлевел ;-)


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