Имя: Пароль:
1C
1С v8
Определить имя процедуры, вызвавшей функцию
0 Базис
 
naïve
30.03.21
10:55
Понятно, что можно (и правильно) передать параметр. Но теоретически это можно сделать?

8.1, ИТРП, ОФ.
1 Волшебник
 
30.03.21
10:59
Поставить точку останова и глянуть стек вызовов
2 polosov
 
30.03.21
11:03
(0) Программно получить стек вызовов можно ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), но нужно генерировать исключение.
3 Базис
 
naïve
30.03.21
11:03
Неточно сформулировал. Стек, ЖР, ТЖ не использовать, только программно.
4 Базис
 
naïve
30.03.21
11:04
(2) О, класс.
Хотя за это,наверное, надо бить по пальцам.
5 polosov
 
30.03.21
11:06
(4) От задачи зависит. Если прям очень надо, то почему нет.
6 VladZ
 
30.03.21
11:53
(0) К чему эти нелепые телодвижения?
7 mikecool
 
30.03.21
11:54
(4) кто мне объяснить - что такого в Попытка - Исключение в 1С, что конструкцию рекомендуют использовать реже?
емнип, дельфи, всякие Си - считается нормальным использовать try-catch
8 Kassern
 
30.03.21
11:58
(7) потому что такой конструкцией начинают пользоваться бездумно и там, где можно спокойно без нее обойтись.
9 acht
 
30.03.21
12:00
(7) Потому что большинство 1Сников - дебилы, которые перехватывают исключения наглухо а потом приходят на форум с вопросами, например "ой а почему в данной транзакции уже происходили ошибки"?
10 Kassern
 
30.03.21
12:01
(7) Вот почитай, можешь начиная с пункта 3.6
https://its.1c.ru/db/v8std/content/499/hdoc
11 mikecool
 
30.03.21
12:22
т.е. если я пользуюсь
Попытка
   // проверяю что мне надо
Исключение
   // логирую или нет
   ВызватьИсключение;
КонецПопытки

то я не выхожу за рамки парадигмы и временные затраты тут не при чем?
12 Kassern
 
30.03.21
12:32
(11) если есть возможность использовать без вызова попытки, то лучше без попытки. К примеру, хочешь ты у первой строки ТЗ что нить записать.
Ты можешь конечно через попытку исключение написать ТЗ[0].ТвоеПоле=НужноеЗначение (но за это надо линейкой по пальцам лупить), а можешь проверить количество строк в ТЗ и если количество строк больше 0, тогда уже присваивать значение.
13 mikecool
 
30.03.21
12:34
(12) это общие слова, у меня вопрос про идеологию
14 Галахад
 
гуру
30.03.21
12:34
(13) А как отладку делать? С остановкой по ошибке?
15 polosov
 
30.03.21
12:35
(11) Нет. Там речь о том, что в местах кода, выполняющихся в транзакции нельзя просто обработать исключение и не вызвать исключение, чтобы при выходе из транзакции не получить информацию об исключении внутри транзакции.

Просто так компенсировать свою неспособность правильно написать алгоритм оберткой в Попытку Исключение нельзя.
16 Kassern
 
30.03.21
12:35
(14) а точки останова для чего?
17 mikecool
 
30.03.21
12:36
(14) давно у нас отладчик в Исключение не заходит?
18 polosov
 
30.03.21
12:36
+(15) Ну и надо помнить, что Попытка Исключение это обработка ИСКЛЮЧИТЕЛЬНЫХ ситуаций.
19 Галахад
 
гуру
30.03.21
12:37
(16) (17) Ну, ожидаешь остановиться единожды, на нужной ошибке, а попадаешь у кучку исключений.
20 fisher
 
30.03.21
12:47
(13) Аргументов несколько:
- главный для меня - "некрасивенько". Код хуже читается и вызывает больше wtf.
- теряется удобство инструментария остановки по ошибке в отладчике
- в других языках считается дорогостоящей операцией
- повышается риск появления трудновыявляемых ошибок. Даже если свой try ты идеально локализировал, то при рефакторинге это может оказаться уже не так и внутри него "похоронится" что-то еще.
21 fisher
 
30.03.21
12:50
(15) ЕМНИП, это касается не всех исключений, а только связанных с СУБД.
22 fisher
 
30.03.21
12:51
То есть если в транзакции поделить на ноль и "загасить" этот эксепшн - то транзакцию зафиксировать даст.
23 mikecool
 
30.03.21
12:53
(20) - в других языках считается дорогостоящей операцией
вот тут сложно мне спорить, но создание классов всегда оборачивается в try-catch-finally, так что - хз
(22) дык я и упоминаю, что если я передаю исключение выше по цепочке, используя ВызватьИсключение, то кроме удобочитаемости вроде особо ничего и не страдает
24 fisher
 
30.03.21
12:56
(23) Обычно для ввода-вывода. А оттуда ведь в самом деле может прилететь исключение. Речь о том, что некошерно использовать исключение для рядовых ситуаций, которые сами по себе обработки исключений не требуют. Типичный пример - преобразование строки в число.
25 Волшебник
 
30.03.21
13:08
(23) Создание классов в попытку обычно не оборачивается. Это же просто выделение памяти.
26 fisher
 
30.03.21
13:10
(23) Затраты возникают, только когда возникает исключение. Поэтому до тех пор, пока это именно исключение (т.е. происходит очень редко) - с производительностью никаких проблем.
Если ты просто пробрасываешь возникшее исключение - тоже никаких проблем. Проблемы если их бездумно генерить в неисключительных ситуациях или бездумно "тушить".
(25) > Это же просто выделение памяти
В конструкторе чего угодно может быть.
27 Волшебник
 
30.03.21
13:11
(26) >> В конструкторе чего угодно может быть.

Ну тогда надо всю процедуру оборачивать в попытку. Прямо с начала до самого конца. Мало ли чего там может быть...
28 mikecool
 
30.03.21
13:11
(25) как я припоминаю - это делается для того, что бы в finally вызвать деструктор в любом исходе
29 Волшебник
 
30.03.21
13:12
(28) Это далеко не всякий класс. В Java есть специальная конструкция для таких классов.
Оператор try with resources
https://javarush.ru/quests/lectures/questsyntaxpro.level15.lecture00
30 fisher
 
30.03.21
13:14
(27) Я не к тому, что любой конструктор любого класса нужно заворачивать в попытку. А про то, что можно создать класс по работе с файлом например, который при создании может уже чего-то такое делать, что может вызвать исключение. И тогда естественно создание экземпляра объекта такого класса нужно делать в попытке.
31 Волшебник
 
30.03.21
13:15
Java 7 умеет так:

try(FileOutputStream output = new FileOutputStream(path))
{
   output.write(1);
}


Дальше система сама сконструирует вызов close() в блоке finally.
32 fisher
 
30.03.21
13:19
Мне, кстати, очень нравится в java концепция checked exception
Не понимаю, почему ее все ругают. Ну да - если издалека ее пробрасывать - то нужно указывать в сигнатурах функций по всей цепочке. Зато какая самодокументированность!
33 fisher
 
30.03.21
13:23
(32) + В определениях функций. В сигнатуру строго говоря это не входит.