Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Определить имя процедуры, вызвавшей функцию

Определить имя процедуры, вызвавшей функцию
Я
   Базис
 
30.03.21 - 10:55
Понятно, что можно (и правильно) передать параметр. Но теоретически это можно сделать?

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

Исключение
  // логирую или нет

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

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

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

Ну тогда надо всю процедуру оборачивать в попытку. Прямо с начала до самого конца. Мало ли чего там может быть...
   mikecool
 
28 - 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
   fisher
 
30 - 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.
   fisher
 
32 - 30.03.21 - 13:19
Мне, кстати, очень нравится в java концепция checked exception
Не понимаю, почему ее все ругают. Ну да - если издалека ее пробрасывать - то нужно указывать в сигнатурах функций по всей цепочке. Зато какая самодокументированность!
   fisher
 
33 - 30.03.21 - 13:23
(32) + В определениях функций. В сигнатуру строго говоря это не входит.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.