Имя: Пароль:
1C
1С v8
Попытка, для чего нужна
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.