|
Попытка, для чего нужна | ☑ | ||
---|---|---|---|---|
0
igoza
14.07.13
✎
23:50
|
За три месяца первый раз наткунлся на "Попытка"(у) что это такое для чего нужно, часто пользуетесь и в каких случаях?
|
|||
1
Волшебник
14.07.13
✎
23:53
|
Это грязный стиль программирования
|
|||
2
Aleksey
14.07.13
✎
23:53
|
постоянно использую, для чего - будь мужиком , прочти наконец СП
|
|||
3
HeroShima
14.07.13
✎
23:53
|
||||
4
Aleksey
14.07.13
✎
23:54
|
(1) Вообще то как раз без попытки - я бы назвал бы это быдло кодингом
|
|||
5
igoza
14.07.13
✎
23:54
|
(2) прочитал, и не понел нужен он или можно забыть
|
|||
6
Волшебник
14.07.13
✎
23:55
|
(4) Вообще-то пишется через дефис, а чистый код пишется через условия, а не дурацкие попытки
|
|||
7
Aleksey
14.07.13
✎
23:55
|
(6) тф переход с попыткой не путаешь?
|
|||
8
Волшебник
14.07.13
✎
23:55
|
(5) Забудь, конечно. Не думай об аварийных ситуациях вообще. Считай, что их не бывает
|
|||
9
Aleksey
14.07.13
✎
23:58
|
Типовая БП 3.0. Поиск "Попытка". Найдено 3663
Ох уж эти писатели типовых, вечно быдлокодят используя грязный стиль программирования |
|||
10
Aleksey
14.07.13
✎
23:59
|
(5) например тебе нужно записать несколько документов и справочников, и в случае ошибки записи на каком либо объекте откатить обратно все изменения
|
|||
11
Нуф-Нуф
15.07.13
✎
00:01
|
попытка необходима при чтении тех же файлов эксель. а по сути да. меньше попыток - красивее код. и вроде по каким-то данным - быстрее. вроде как попытка много времени жрет
|
|||
12
Aleksey
15.07.13
✎
00:02
|
(11) не только при чтении, а вообще при работе с файлами, например при удалении
|
|||
13
Живой Ископаемый
15.07.13
✎
00:03
|
2(1) это оценочное суждение.
|
|||
14
Aleksey
15.07.13
✎
00:05
|
В 1с нет обработчика ошибок, приходится писать свой. и для этого как раз и используют попытку
|
|||
15
Asmody
15.07.13
✎
00:06
|
(6) попытка нужна там, где исключение может свалиться помимо твоего желания (например, при обращении к внешним данным).
|
|||
16
Asmody
15.07.13
✎
00:06
|
(14) как это "нет обработчика ошибок"?
|
|||
17
Живой Ископаемый
15.07.13
✎
00:06
|
2(4) это тоже оценочное суждение.
|
|||
18
Жека Воробьев
15.07.13
✎
00:07
|
(10) шо? Причем тут попытка и транзакция?
|
|||
19
Aleksey
15.07.13
✎
00:07
|
(15) Оно и при записи "внутренних" данных тоже используется
|
|||
20
Asmody
15.07.13
✎
00:09
|
(19) при работе с внутренними данными про использование попытки можно подискутировать
|
|||
21
Aleksey
15.07.13
✎
00:10
|
(16) приведи пример обработчика, например я пытаюсь удалить файл на диске. в случае если файл заблокирован 1С скажет не могу удалить и остановит выполнения моей обработки, т.е. нет обработчика в котором бы я мог проанализировать ошибку и продолжить работу, или откатить изменения. Как раз для этого я и использую попытку, чтобы в случае нештатной ситуации (невозможности удалить файл) обработать эту ситуацию и продолжить выполнения обработки
|
|||
22
Жека Воробьев
15.07.13
✎
00:12
|
(21) пипец тебя рубит. А в какой среде такой обработчик есть?
|
|||
23
Aleksey
15.07.13
✎
00:13
|
(17) Имеется ввиду ситуация которая приводит к прерыванию выполнения обработки, но при этом эту ситуацию можно обойти при использовании попытки.
Например пользователь формируем для клиента супер мега прайс со сложным расчетом. Долго формируем и пытаемся его сохранить, но по какой то причине обламывается. В нормалльной системе в случае интерактивного запуска обработка должна предложить или вывести результат на экран или повторить попытку сохранения (например под другим именем). В случае когда обработка просто отваливается с ошибкой и приходится заново формировать - вот этот случай я и имею ввиду называя быдлокодерством |
|||
24
Aleksey
15.07.13
✎
00:13
|
(22) А вот Asmody утверждает что в 1С он есть
|
|||
25
Жека Воробьев
15.07.13
✎
00:15
|
(24) ты это с больной головы не вали на здоровую.
|
|||
26
Aleksey
15.07.13
✎
00:20
|
(25) Например в досе ERRORLEVEL
|
|||
27
Жека Воробьев
15.07.13
✎
00:20
|
так уж и быть приведу пример православного использования попытки.
Попытка ШК = Новый COMОбъект("V8.Barcod.1"); Исключение Предупрежедение("Компонента печать штрих кодов на этом компьютере не установлена); КонецПопытки |
|||
28
Жека Воробьев
15.07.13
✎
00:24
|
(26) А ОписаниеОшибки - не подойдет?
|
|||
29
Aleksey
15.07.13
✎
00:25
|
(26) читай СП
Примечание: Применять данную функцию имеет смысл только внутри операторных скобок Исключение - КонецПопытки, так как в ином случае она вернет пустую строку. Помогает в выдаче диагностики при возникновении Не рекомендуется использовать для отображения пользователю. |
|||
30
Aleksey
15.07.13
✎
00:26
|
Т.е. без попытки она НЕ работает (она вернет пустую строку.)
|
|||
31
Жека Воробьев
15.07.13
✎
00:29
|
(30) Без попытки тебе сообщение вывалится которое типа тоже ОписаниеОшибки выдаст, но уже с обомом выполнения программы.
|
|||
32
Жека Воробьев
15.07.13
✎
00:30
|
и там рамочка такая выскакивает, где предложение перейти в пофигуратор и там починить. В общем Алексий ты в очередной раз какой то херни нагородил.
|
|||
33
Жека Воробьев
15.07.13
✎
00:32
|
"Т.е. без попытки она НЕ работает (она вернет пустую строку.)" А какой смысл в функции ОписаниеОшибки(), когда ошибки не было. Естественно оно пустую строку вернет.
|
|||
34
Asmody
15.07.13
✎
00:35
|
(21) в школу учить матчасть
|
|||
35
IamAlexy
15.07.13
✎
00:41
|
не была бы попытка нужна - ее бы не было в языке...
вот например, ООП не нужно и его нет.. а попытка нужна и она есть. это же логично и очевидно |
|||
36
HeroShima
15.07.13
✎
00:42
|
(35) тише, тише - у меня комп икает)
|
|||
37
igoza
15.07.13
✎
00:44
|
Спасибо всем)
|
|||
38
Aleksey
15.07.13
✎
00:55
|
(33) ты для чего вспомнил об этой функции?
|
|||
39
Aleksey
15.07.13
✎
00:57
|
Был вопрос, приведи пример обработчика ошибок в другом языке
Я тебе привел, что в досе при невозможности удалить файл он вернет описание ошибки в ERRORLEVEL и дальше продолжить работы. и ты уже можешь проанализировать и дописать обработку этой ситуации В 1С нет такого обработчика, т.е. она тупо вываливается по ошибки, чтобы обойти это нужна попытка, на что ты говоришь " А ОписаниеОшибки - не подойдет?" |
|||
40
Aleksey
15.07.13
✎
00:58
|
и дальше уже тебя куда то в сторону понесло
(34) Ты не умничай, ты пальцем покажи |
|||
41
Vovik
15.07.13
✎
01:22
|
(0)При использовании объектов 1с может и не нужно. А при внешних объектах, х.з. че там вылезет.
|
|||
42
Sserj
15.07.13
✎
04:22
|
(21)(22)
Ну к примеру в java такое есть try{ ...удаляем файл... }catch (НетФайла) {}catch(ОшбикаПрав) {}catch(ФайлЗаблокирован) ..... И можно описать неограниченное количество вариантов ошибок и их обработчиков |
|||
43
1Cv8_accepted
15.07.13
✎
05:05
|
(0) Использую, в основном, при операциях ввода-вывода, обмена данными и OLE-автоматизации с внешними приложениями.
|
|||
44
yra77
15.07.13
✎
07:17
|
Рарус вообще в Альфах своих на Попытках лупенит. Так что Рарус- быдокодеры.
|
|||
45
Fragster
гуру
15.07.13
✎
07:31
|
Попытка и вызватьИсключение рулят!
|
|||
46
dmpl
15.07.13
✎
08:08
|
Она нужна когда ты чуешь, что тут что-то может пойти не так, но чтобы пользователь не пугался - ставишь попытку, а при обработке исключения выводишь прайс на доработку.
|
|||
47
MatrosoV AleXXXand_R
15.07.13
✎
08:13
|
(0) Автор, открой для себя еще транзакции и блокировки
|
|||
48
Славен
15.07.13
✎
08:25
|
(44)это не секрет ни для кого
|
|||
49
Klesk
15.07.13
✎
08:27
|
это мой стиль праграмирования
|
|||
50
Klesk
15.07.13
✎
08:28
|
типа обращаешься к реквизиту, нету такого - и пох =)
|
|||
51
FullMoon
15.07.13
✎
08:31
|
Мана небесная для быдлокодера низшего звена=)
|
|||
52
hhhh
15.07.13
✎
09:24
|
(44) ЗУП открой. Там вообще если тебе нужно отловить ошибку и ты в отладчике делаешь "останавливаться по ошибке", то она у тебя сначала несколько раз незнамо где остановится, и только потом, на 5-й раз, ты наконец на свою ошибку выйдешь.
|
|||
53
pessok
15.07.13
✎
09:33
|
(52) +100500, ЗУП вообще писали рептилоиды с планеты Нибиру... А если по сабжу - конечно, надо стараться избегать использование попыток, но есть случаи, когда без них никак, и эти случаи тут уже описАли. Внешние данные, запись объектов в БД, ЗУП...
|
|||
54
Поросенок Петр
15.07.13
✎
09:43
|
Три стадии 1сника по отношению к любому функционалу:
1. Использует где попало / не использует за незнанием. 2. Догматично не использует / догматично использует. 3. Использует там, где это нужно. |
|||
55
Maxus43
15.07.13
✎
09:44
|
я не поняо, Попытка уже плохо всё таки?
|
|||
56
HeroShima
15.07.13
✎
09:48
|
Попытки - плохо, но есть исключения.
|
|||
57
Поросенок Петр
15.07.13
✎
09:50
|
Не бывает плохих конструкций языка, бывают плохие программисты.
|
|||
58
Лефмихалыч
15.07.13
✎
09:59
|
(0) попытка нужна для автоматической обработки исключений. Но обычно ее используют для того, чтобы расписаться в своей неспособности писать код без ошибок
|
|||
59
Zerg80
15.07.13
✎
10:01
|
(44) Это даа, там с попытками явный перебор. Причем вся конфа такая.
|
|||
60
jsmith82
15.07.13
✎
10:03
|
Резюмируя, заключаю, что попытку используют в двух случаях
1. Когда не хотят париться с условиями - неправильный способ 2. Когда невозможно написать условие Word = Новый COMОбъект("Word.Application"); |
|||
61
Лефмихалыч
15.07.13
✎
10:04
|
главный минус "попытки" в 1С в том, что в обработчике исключения достоверно не известно, почему оно сгенерировано
|
|||
62
Рэйв
15.07.13
✎
10:04
|
(0)
Обычно можно обойтись правильным написанием кода,хоть и не всегда. Но для отладки и отлова ошибок -удобно и не ресурсоёмко. |
|||
63
jsmith82
15.07.13
✎
10:04
|
Если ворда нет на компе, будет исключение. Попытка ловит её. А можно ли в данном случае условие написать?
|
|||
64
jsmith82
15.07.13
✎
10:04
|
(61) Да, меня это всегда смущало
|
|||
65
Maxus43
15.07.13
✎
10:04
|
вобще то обычное проведение документов автоматическое (фоновым заданием например) - совершенно нормально обрамлять попыткой. Проблемы могут быть совершенно разные, например блокировки и т.д., которые программист не может предугадать
|
|||
66
Рэйв
15.07.13
✎
10:05
|
(61)ОписаниеОшибки() иногда помогает..правда редко:-)
|
|||
67
Godofsin
15.07.13
✎
10:05
|
(62) +1
|
|||
68
Лефмихалыч
15.07.13
✎
10:05
|
(63) в экзотических случаях может еще прав не быть или памяти не хватить и вот эту тонкую разницу ты в 1С в обработчике исключения не узнаешь ни когда
|
|||
69
DGorgoN
15.07.13
✎
10:05
|
(8) А они бывают и очень часто.
|
|||
70
DGorgoN
15.07.13
✎
10:05
|
(61) +1. Нет вменяемого обработчика исключений.
|
|||
71
badboychik
15.07.13
✎
10:07
|
(42) В яве каждый вид исключения это наследник класса Exception, а т.к. в 1С нет ООП и нет объекта "Исключение" то и разные типы отловить нельзя.
Ваш К.О. P.S. Сравнили опу с пальцем, панимаишь |
|||
72
Romyr
15.07.13
✎
10:28
|
Я не великий спец, поэтому может мне кто-нибуть объяснит на примере как можно сделать следующее:
На входе массив различных объектов (документов, справочников, регистров) на выходе нужно проведение у документов отменить а остальное не трогать |
|||
73
Romyr
15.07.13
✎
10:29
|
Я когда делал, использовал Попытку. Может можно сделать проще и без нее? Кто знает?
|
|||
74
pessok
15.07.13
✎
10:32
|
(73) ТипЗнч()
|
|||
75
Лефмихалыч
15.07.13
✎
10:40
|
Для Каждого Ссылка из МассивЗначений Цикл
Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)) Тогда Объект = Ссылка.ПолучитьОбъект(); Объект.Удалить(); КонецЕсли; КонецЦикла; |
|||
76
Рэйв
15.07.13
✎
10:46
|
(75)жестокий ты:-)
|
|||
77
Aleksey
15.07.13
✎
10:46
|
(68) за то в случае попвтки я например могу сразу отправить СМС, или сделать запись в ЖР
|
|||
78
Рэйв
15.07.13
✎
10:46
|
он же щас не посмотрев запустит:-)
|
|||
79
Aleksey
15.07.13
✎
10:48
|
(72) код из типовой
// Функция возвращает имя вида объектов метаданных по типу объекта. // // Не обрабатываются точки маршрутов бизнес-процессов. // // Параметры: // Тип - Тип прикладного объекта, определенный в конфигурации // // Возвращаемое значение: // Строка - имя вида объектов метаданных, например, "Справочник", "Документ" ... // Функция ВидОбъектаПоТипу(Тип) Экспорт Если Справочники.ТипВсеСсылки().СодержитТип(Тип) Тогда Возврат "Справочник"; ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(Тип) Тогда Возврат "Документ"; ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(Тип) Тогда Возврат "БизнесПроцесс"; ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(Тип) Тогда Возврат "ПланВидовХарактеристик"; ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(Тип) Тогда Возврат "ПланСчетов"; ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(Тип) Тогда Возврат "ПланВидовРасчета"; ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(Тип) Тогда Возврат "Задача"; ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(Тип) Тогда Возврат "ПланОбмена"; ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(Тип) Тогда Возврат "Перечисление"; Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Неверный тип значения параметра (%1)'"), Строка(Тип)); КонецЕсли; КонецФункции |
|||
80
Лефмихалыч
15.07.13
✎
10:50
|
(77) да, только я говорил о том, что объективно ты в этом СМС сможешь написать только "при создании объекта Word.Application что-то пошло не так". Потому ,что большей информации у тебя нет - ты не знаешь, что именно не так.
|
|||
81
Лефмихалыч
15.07.13
✎
10:51
|
(76) был бы жестокий, написал бы
РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей().Записать(); |
|||
82
Aleksey
15.07.13
✎
10:52
|
(80) почему? что именно не так быдет в описанииОшибки
|
|||
83
Лефмихалыч
15.07.13
✎
10:55
|
(82) можно, конечно, парсить текст сообщения об ошибке, но парсинг этот будет беспомощен всякий раз, когда будет генериться новый тип ошибки, не предусмотренный тобой изначально. Идея парсить какой-то текст для определния типа ошибки уныла и некорректна
|
|||
84
Sserj
15.07.13
✎
10:55
|
(71) Ты что думаешь что то что сделано объектами нельзя сделать ничем другим?
Окстись, пусть это будут не объекты а хоть просто числа, типа коды выхода суть от этого не меняется. |
|||
85
Лефмихалыч
15.07.13
✎
10:59
|
+(83) потому, автоматическая обработка исключений - это когда код поймал исключение, чо-то с ним сделал и ПРОДОЛЖИЛ РАБОТУ. А 1С позволяет только поймать исключение, обложить всё в три слоя матом и ждать команд извне. Исключения не типизированы, автоматически ты не можешь принять корректных решений по исправлению ситуации.
|
|||
86
Aleksey
15.07.13
✎
11:02
|
(83) Зачем парсить? Типа если это ошибка доступа то посылаем админу, если ошибка неустановлен ворд, посылаем начальнику, если ....?
цель парсинга какая? |
|||
87
Aleksey
15.07.13
✎
11:03
|
(85) Ну уж что есть, то есть. И на том спасибо
|
|||
88
Sserj
15.07.13
✎
11:03
|
(86) Ну к примеру если это ошибка доступа предложить выбрать другой файл, если неустановлен ворд то прекратить обработку и т.д. и т.п.
|
|||
89
Aleksey
15.07.13
✎
11:05
|
(88) а ты не пробовал писать попытку не в начале модуля, а там где нужно? Т.е. 1 попытка на доступ к вёрду и вторая попытка на запись файла?
|
|||
90
Aleksey
15.07.13
✎
11:05
|
и тогда в первом случае ты прекращаешь обработку, а во втором "предложить выбрать другой файл"
|
|||
91
Sserj
15.07.13
✎
11:08
|
(89) Я много чего пробовал :)
Суть не в том что "невозможно" суть в том что лучше. Или у тебя будет 100 тыщ Попытка/Исключение или у тебя будет в одном месте Попытка и блок обработки ошибок. |
|||
92
Aleksey
15.07.13
✎
11:11
|
(91) Что возвращает к тому, о чём я писал выше в (14), на что некоторые начали мне что-то доказывать (один доказывал, что в 1С есть обработчик, другой - что обработчика нет ни водном другом языке программирования)
|
|||
93
Sserj
15.07.13
✎
11:13
|
(92) Обработчик есть, но он один общий для всего :)
|
|||
94
Aleksey
15.07.13
✎
11:16
|
(93) Как раз обработчик и должен парсить ошибки и выдавать уже готовый результат для использования о причине ошибки. А тут приходится самому писать этот обработчик
|
|||
95
Asmody
15.07.13
✎
11:17
|
(92) обработчик есть в том понимании, что при ошибке платформа не вываливается в дамп, а продолжает работать. ну покажет она тебе окно с сообщением "бла-бла-бла в таком-то модуле в такой строке".
|
|||
96
GANR
15.07.13
✎
11:19
|
(0) Думаю, нужно в тех и только тех случаях, когда невозможно предугадать поведение того или иного операнда, а в остальных случаях, по-моему, (1) прав. Сам вычищал программный код от бесчисленного множества попыток.
|
|||
97
Aleksey
15.07.13
✎
11:19
|
(95) Это ты как-то глубоко капнул
|
|||
98
Asmody
15.07.13
✎
11:22
|
это вообще вечный холивар когда использовать Попытка_Исключение, когда бросать исключения, а когда этого не делать.
я для стараюсь придерживаться принципа: если невозможно локализовать и исключить ошибку до выполнения операции, заворачиваем в попытку. обычно это как раз ситуации взаимодействия с внешней средой. Для бросания исключений всё несколько сложнее. Чаще всего это будет код, который будет использоваться из-вне. |
|||
99
Asmody
15.07.13
✎
11:25
|
(97) а чего глубокого? если, например, в .Net приложении ты не словил исключение, оно чаще всего вывалится в ОС. В нашем случае всё немного проще
|
|||
100
Aleksey
15.07.13
✎
11:29
|
(100) А вот и сотня
|
|||
101
IamAlexy
16.07.13
✎
10:55
|
вот кстати пример: только что столкнулся..
почта по имапу грузится порциями по 500 заголовков за раз. соответственно когда среди писем попадается письмо в кодировки x-windows-949 то интернетпочтовыйклиент вываливается с ошибкой. вот как раз тут попытка и спасает - в исключении фигачим перебор каждого заголовка по отдельности и пропускаем корявое письмо из обработки. без попытки - фиг что сделать. |
|||
102
GANR
17.07.13
✎
11:00
|
(101) +1, отличный пример к (96)
|
|||
103
Drac0
17.07.13
✎
11:21
|
(0) Групповая обработка объектов с проверками при записи или проведении, например. Без попытки никак.
|
|||
104
Fragster
гуру
17.07.13
✎
11:38
|
использую ВызватьИсключение чтобы вывалиться из стека вызовов, и, соответственно, попытку - чтобы остановиться нужном уровне.
|
|||
105
GANR
17.07.13
✎
11:44
|
(104) +1, лучше пусть транзакция вообще не выполняется, чем выполняется заведомо неправильно!
|
|||
106
fisher
17.07.13
✎
12:26
|
(0) Реально она нужна в тех нечастых случаях, когда ошибка исполнения не является нештатной ситуацией.
Новичками часто используется как быдлоспособ багофиксинга. Иногда особенности обработки исключений (особенно в других языках, где обработка исключений гораздо более продвинута), используются чисто в алгоритмических целях (без возникновения реальных ошибок исполнения). Копий на тему "красиво" или нет так делать - поломано не меньше, чем на go to. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |