Понадобилась консоль запросов под ОФ, одной из самых простых оказалась консоль Чистова. По старой традиции решил обновить консоль, добавив пару необходимых фич, чтобы было ещё удобнее пользоваться - как в ИР.
Использование попыток в коде (копипаста с одного форума)
Ответ1: Попытка - это транзакция, использование ее в других транзакция может привести к не всегда очевидным последствиям отмены транзакции-родителя. Использование оператора Попытка оправдано лишь в случае когда нет другого способа проверки корректности исполняемого кода. К примеру удаление файла с диска, есть файл или нет мы гарантировать системе не можем. (Для особо дотошных: после проверки на то что файл физически существует и до строки с удалением этого файла он может быть удален другим процессом).
Ответ2: Меня с детства учили, что и попытка, и метка - одного уровня зло
Ответ3: Использую только в тех случаях, когда проверить корректность исполняемого кода невозможно стандартными методами, и еще когда трудоемкость локализации всех возможных ошибок значительно превышает разумные пределы (при сложных обменах с загрузками/выгрузками часто бывает).
Ответ4: Чем их меньше, тем лучше. Рассматривайте попытку и переход по исключению в блок исключение как неявный GoTo. Если можно обойтись без попытки, нужно обойтись без попытки. Например при преобразовании строки в число можно написать
Попытка Возврат Число(стрЧисло); Исключение КонецПопытки; и ловить исключение каждый раз при возведенном флажке "Останавливаться на ошибке" или можно написать сложнее:
Возврат ТолькоЦифрыВСтроке() или Еще есть такой вариант ОписаниеТипа = Новый ОписаниеТипов(“Число”); Текчисло = ОписаниеТипа.ПривестиЗначение(ТекстовоеПоле);
но код не будет генерить ненужных исключений
Ответ5: любая ошибка бд внутри транзакции рвет эту транзакцию, поэтому внутри транзакции можно не пытаться ловить ошибки, если не предусмотрен полный выход из транзакции
Если есть подозрения, что код может работать некорректно, то нужно сделать все, чтобы устранить эту неопределенность, а не совать его в попытку, чтоб разбирались другие программисты. За код типа
Попытка СделатьЧтото(); Исключение КонецПопытки;
будут отстреливаться лишние органы. В блоке исключение ВСЕГДА должен быть код по отработке, иначе потом нереально найти что рвет транзакцию
Ответ6: Использовать попытку нужно
- для проверки входных параметров в код, которые мы не можем проверить еще выше. Это актуально для методов-баррикад (Совершенный код, 198 страница)
- для вызова методов, предугадать результат которых мы не можем, например вызов кода внешней обработки, которая будет независимо обновляться (те же баррикады)
-для вызова методов, которые сами генерят исключения, например подключение компоненты
От себя: не пытайтесь построить логику кода на условных переходах вида Попытка Если НЕ <проверка> Тогда ВызватьИсключение ... - это излишне запутывает и усложняет чтение кода другими программистами.
Вместо этого лучше провести предварительный рефакторинг, используя приёмы:
- Replace Nested Conditional with Guard Clauses, известный так же как ранний возврат из функции - расположив финальную операцию в самом конце
- Remove Logic for Controlling the Iteration, или "Вынос контролирующей логики из цикла" - отфильтровывая ненужные элементы коллекции (в запросе или в функции) _перед_ циклом заранее
- Extract into a function, так же известный как "Извлечение метода" - извлекая условный код в методы с говорящими именами
А почему заявление
Цитата
«Попытка - Исключение» не оказывает хоть сколь-нибудь заметного влияния на скорость выполнения
не соответствует действительности - уже ответили в (3)
(80) попробуйте МегаКонсоль запросов 8.3 @AlexxSys | //infostart.ru/public/331421/
работает в веб-клиенте в режиме совместимости 8.2
а вообще для 8.2 УФ лучше использовать режим запуска /RunModeOrdinaryApplication, ибо поддержка старых платформ в вебе никому не интересна
https://helpf.pro/faq/view/1735.html