Имя: Пароль:
1C
1С v8
Использование Попыток в коде
, ,
0 Азат
 
30.12.11
03:33
1. Время от времени 45% (18)
2. Редко 33% (13)
3. Оч часто 13% (5)
4. Никогда 10% (4)
Всего мнений: 40

Как часто вы используете конструкции вида Попытка-Исключение-Конец попытки? К слову, попала в руки одна обработочка на пару-тройку тысяч строк, так в ней через каждые 20-30 строк очередная попытка...
7 Grusswelle
 
30.12.11
04:55
Плохо это... Но приходится.

Редко
8 Kraft
 
30.12.11
05:16
(7) +многа

Редко
13 forforumandspam
 
30.12.11
06:39
Редко, но иногда без них нельзя.

Редко
22 dk
 
30.12.11
08:29
в основном при потоковом создании / изменении / проведении документов / справочников / файлов

Редко
25 Ненавижу 1С
 
гуру
30.12.11
08:34
как можно реже

Редко
37 Stepa86
 
30.12.11
09:34
(24) попытка - это транзакция??? а чо она тогда не откатывается, когда в исключение упадет?

я у нас для других программистов вот такую заметку про попытку сделал:

1) Чем их меньше, тем лучше. Рассматривайте попытку и переход по исключению в блок исключение как неявный GoTo.
2) Если можно обойтись без попытки, нужно обойтись без попытки. Например при преобразовании строки в число можно написать


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


и ловить исключение каждый раз при возведенном флажке "Останавливаться на ошибке"

или можно написать сложнее:


стрЧисло = "";

Для цИндекс = 0 По СтрДлина( стрЗначение ) Цикл

цСимвол = Сред( стрЗначение , цИндекс , 1 );

Если ЭтоЦифра( цСимвол ) Тогда

стрЧисло = стрЧисло + цСимвол;

КонецЕсли;

КонецЦикла;

Возврат Число( стрЧисло );

Функция ЭтоЦифра( пСимвол )

Для ц=0 По 9 Цикл
Если пСимвол = Строка(ц) Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;

Возврат Ложь;

КонецФункции // ЭтоЦифра()



но код не будет генерить ненужных исключений

3) любая ошибка внутри транзакции рвет эту транзакцию, поэтому внутри транзакции можно не пытаться ловить ошибки, если не предусмотрен полный выход из транзакции
4) если есть подозрения, что код может работать некорректно, то нужно сделать все, чтобы устранить эту неопределенность, а не совать его в попытку, чтоб разбирались другие программисты
5) за код типа

Попытка
СделатьЧтото();
Исключение
КонецПопытки;

будут отстреливаться лишние органы. В блоке исключение ВСЕГДА (ВСЕГДА, блеать!!!) должен быть код по отработке, иначе потом нереально найти что рвет транзакцию
6) Использовать попытку нужно
-для проверки входных параметров в код, которые мы не можем проверить еще выше. Это актуально для методов-баррикад (Совершенный код, 198 страница)
-для вызова методов, предугадать результат которых мы не можем, например вызов кода внешней обработки, которая будет независимо обновляться (те же баррикады)
-для вызова методов, которые сами генерят исключения, например подключение компоненты

Редко
39 vmv
 
30.12.11
09:44
редко и если использую, то там либо один оператор либо вызов метода.

Все остальные потенциально "опасные" блоки кода стараюсь выносить в фкнкции которые возвращают булевый или значащий результат. Возврат и есть признак успеха, а не попытка.

За объемные блоки кода в попытках предлагаю растреливать тремя патронами - в пах, в живот и тольколько потом в голову

Редко
46 Reset
 
30.12.11
09:54
Только тогда, когда это нельзя без.

Редко
47 vladenoff
 
30.12.11
10:23
метод явно для самых ленивых. Напрягаемся, стараемся без исключений.

Редко
58 ThreeTONE
 
30.12.11
11:04
по мере надобности.

Редко
74 Aleksey_a_z
 
30.12.11
11:20
(73) + ошибся

Редко
76 Fish
 
30.12.11
11:21
(71) Я бы сказал так: когда невозможно или слишком сложно предусмотреть все варианты :)))
Ради интереса, поискал в типовой УПП "КонецПопытки" - найдено более 4000 :))))

Редко
77 fisher
 
30.12.11
11:22
Чаще всего при работе с внешними объектами. Т.е. по прямому назначению, так сказать.
Для упрощения кода - практически никогда. Даже если с проверками сложнее - такой код читабельнее, дает больше информации и не оставляет вопросов.
Когда встречаю использование в чужом коде использование попытки без явной на то причины - сразу понимаю, что нужно быть готовым и к другим "сюрпризам грамотного кодинга".

Редко