Периодически требуется к сообщению о той или иной ошибке, не вызванной исключением, а скорее логикой приложения, прикрепить стек вызовов, для того, чтобы можно было понять откуда был вызов той или иной функции (например, можно логировать стек при записи объекта, когда происходит что-то непонятное и нужно отловить, какой процесс это делает)
В самой платформе нет прямого способа получить это (или я не нашел). Я думал, что можно через Причину полученную из ИнформацияОбОшибке() раскрутить стек, но у меня там возвращает неопределено. Если кто-то знает способ все-таки вытащить информацию оттуда (ведь как-то это делает ПодробноеПредставлениеОшибки, то буду рад узнать
Благодаря статье //infostart.ru/1c/articles/1879817/, которая решает немного другую задачу, я написал для себя функцию получения стека - более универсальную.
Функция ПолучитьСтекВызовов() Экспорт
Стек = "Стек вызовов :" + Символы.ПС;
Попытка
а = 1 / 0;
Исключение
ПодробноеПредставление = СтрЗаменить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), "Деление на 0", "");
СтекМассив = СтрРазделить(ПодробноеПредставление, Символы.ПС);
Для Сч = 3 По СтекМассив.Количество() - 1 Цикл
Стек = Стек + СтекМассив[Сч] + Символы.ПС;
КонецЦикла;
КонецПопытки;
Возврат Стек;
КонецФункции
Данный вариант получает стек вызовов строкой, удаляя ненужные строки, которые обусловлены самой функцией генерации исключения.
Можно также получить и вернуть массив строк стека, не преобразуя его к единой строке, чтобы анализировать построчно. Также можно "выдернуть" из каждой строки отдельные составляющие - имя модуля, номер строки, исходную строку. Это все несложно сделать при желании. У меня пока такой потребности не было.
Буду надеяться, этот пример будет кому-то полезен.