Получение стека вызовов в 1С

07.04.25

Разработка - Универсальные функции

Метод для получения стека вызовов путем искусственной генерации исключений и перехвата его. Сам стек получается из платформенной функции ПодробноеПредставлениеОшибки(). Стек можно получать как текстом, так и массивом строк.

Периодически требуется к сообщению о той или иной ошибке, не вызванной исключением, а скорее логикой приложения, прикрепить стек вызовов, для того, чтобы можно было понять откуда был вызов той или иной функции (например, можно логировать стек при записи объекта, когда происходит что-то непонятное и нужно отловить, какой процесс это делает)

В самой платформе нет прямого способа получить это (или я не нашел). Я думал, что можно через Причину полученную из ИнформацияОбОшибке() раскрутить стек, но у меня там возвращает неопределено. Если кто-то знает способ все-таки вытащить информацию оттуда (ведь как-то это делает ПодробноеПредставлениеОшибки, то буду рад узнать

Благодаря статье //infostart.ru/1c/articles/1879817/, которая решает немного другую задачу, я написал для себя функцию получения стека - более универсальную.

Функция ПолучитьСтекВызовов() Экспорт 
	
	Стек = "Стек вызовов :" + Символы.ПС; 
	Попытка
		а = 1 / 0;	
	Исключение
		ПодробноеПредставление	= СтрЗаменить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), "Деление на 0", "");
		СтекМассив = СтрРазделить(ПодробноеПредставление, Символы.ПС);
		Для Сч = 3 По СтекМассив.Количество() - 1 Цикл 
			Стек = Стек + СтекМассив[Сч] + Символы.ПС;
		КонецЦикла;
	КонецПопытки;
	
	Возврат Стек;
КонецФункции

Данный вариант получает стек вызовов строкой, удаляя ненужные строки, которые обусловлены самой функцией генерации исключения.

 

Можно также получить и вернуть массив строк стека, не преобразуя его к единой строке, чтобы анализировать построчно. Также можно "выдернуть" из каждой строки отдельные составляющие - имя модуля, номер строки, исходную строку. Это все несложно сделать при желании. У меня пока такой потребности не было. 

Буду надеяться, этот пример будет кому-то полезен.

Платформа Стек вызовов Обработка ошибок Логирование Системные функции

См. также

Универсальные функции Программист Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    30666    dimanich70    83    

152

Универсальные функции Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    4987    6    John_d    11    

57

Универсальные функции Программист Стажер Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    34405    atdonya    28    

62

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    6583    ke.92@mail.ru    17    

66

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    18141    YA_418728146    8    

172

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    4840    79    progmaster    11    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 1C:Бухгалтерия 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    19864    190    sapervodichka    113    

137
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. solinik 08.04.25 07:24 Сейчас в теме
Небольшой рефакторинг:

СтрокаСтека = "";
Попытка
	ВызватьИсключение "ФормированиеСтекаВызовов";
Исключение
	МассивСтека = СтрРазделить(ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Символы.ПС);
	Для Сч = 2 По МассивСтека.ВГраница() Цикл 
		СтрокаСтека = СтрокаСтека + МассивСтека[Сч] + Символы.ПС;
	КонецЦикла;
КонецПопытки;
Показать
2. ivrent 08.04.25 07:26 Сейчас в теме
Нельзя искусственно создавать исключительные ситуации. У сервера есть механизм перезапуска rphostов при большом % исключение от общего числа вызовов
Aleskey_K; +1 Ответить
3. YokoYolo 4 08.04.25 17:26 Сейчас в теме
(2) Интересно. А можно где-то об этом почитать?
4. ivrent 08.04.25 18:27 Сейчас в теме
(3) раньше была настройка в кластере "Допустимое отклонение количества ошибок сервера", сейчас оно не настраивается, или жёстко зашито, или рассчитывается. Точно не помню. Думаю, в руководстве по администрированию сервера написано
7. YokoYolo 4 09.04.25 09:10 Сейчас в теме
5. Jungle Murzik 09.04.25 01:15 Сейчас в теме
Зачем стек вызова выводить пользователю?
А если эта информация нужна только для разработчиков, используйте другие инструменты, например, технологический журнал в копии базы при воспроизведении ошибки
6. aleksey2 89 09.04.25 07:06 Сейчас в теме
Оставьте свое сообщение