Запись в регистр сведений при исключении

1. user1970279 16.07.24 14:14 Сейчас в теме
Доброго времени суток, в ходе выполнения задачи, возникли вопросы, ответы на которые я не смог найти. В общем виде, задача в следующем - при попытке записать документ, нужно отлавливать ошибки и информацию о них. Далее на основе этих данных делать запись в регистр сведений. По заданию, делать это нужно в Модуле объекта документа, который пытаются записать, в процедуре ПередЗаписью.
Структура следующая:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Попытка
        // Код, который может вызвать ошибку
    Исключение

    МенеджерЗаписи=РегистрыСведений.РегистрОшибок.СоздатьМенеджерЗаписи(); 

	МенеджерЗаписи.НазваниеДокумента = Метаданные().Имя;  
    МенеджерЗаписи.Форма = ЭтотОбъект.Метаданные().ОсновнаяФормаОбъекта.Имя; 
	МенеджерЗаписи.Пользователь = ПолноеИмяПользователя();
	МенеджерЗаписи.Комментарий = ОписаниеОшибки();
	МенеджерЗаписи.ДатаОшибки = ТекущаяДата();
	МенеджерЗаписи.Период = ТекущаяДата(); 
	МенеджерЗаписи.Записать(); 

    КонецПопытки;
КонецПроцедуры
Показать

В коде намеренно вызывается исключение, что бы проверить идет ли запись в регистр. Данные подтягиваются правильно. Запись происходит, но после проверки, регистр всегда пустой. Блок с созданием записи в регистр точно рабочий, и при этом если его вызывать до создания исключения (любой ошибки), то запись будет. Объясните, почему при возникновении ошибки, запись затирается и как решить эту проблему?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user2033930 16.07.24 14:43 Сейчас в теме
Любое исключение отменяет транзакцию.
3. user1970279 16.07.24 14:53 Сейчас в теме
(2) Есть ли способ тогда отлавливать ошибки что бы куда то их записывать?
4. anton13m 3 16.07.24 14:58 Сейчас в теме
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	ОшибкаОбработки = Ложь;	
	Попытка
		X = 1/0;
	Исключение
		ОшибкаОбработки = Истина;
	КонецПопытки;

	Если ОшибкаОбработки Тогда
		ЗаписьВРегистр();
	КонецЕсли;

КонецПроцедуры

Процедура ЗаписьВРегистр()

	МенеджерЗаписи=РегистрыСведений.РегистрОшибок.СоздатьМенеджерЗаписи(); 

    МенеджерЗаписи.НазваниеДокумента = Метаданные().Имя;  
    МенеджерЗаписи.Форма = ЭтотОбъект.Метаданные().ОсновнаяФормаОбъекта.Имя; 
    МенеджерЗаписи.Пользователь = ПолноеИмяПользователя();
    МенеджерЗаписи.Комментарий = ОписаниеОшибки();
    МенеджерЗаписи.ДатаОшибки = ТекущаяДата();
    МенеджерЗаписи.Период = ТекущаяДата(); 
    МенеджерЗаписи.Записать();  
	
КонецПроцедуры

Показать
5. user1970279 16.07.24 15:07 Сейчас в теме
(4) Вынос записи в регистр в отдельную процедуру, не помогает. Если у нас случается ошибка (исключение), то куда бы не уходили в процедуры или вообще в другой модуль через экспортную процедуру, не будут сохранены записи в регистр
6. Sashares 35 16.07.24 15:23 Сейчас в теме
(5)Пишите в журнал регистрации.
user1880116; +1 Ответить
7. anton13m 3 16.07.24 15:25 Сейчас в теме
(5)
не помогает

У меня все работает. А если вы еще и Отказ=Истина выполняете, то посмотрите вариант через фоновые задания
8. gybson 16.07.24 21:39 Сейчас в теме
(18) Если прям очень надо именно вот так, то можно через свой же собственный веб-сервис писать в регистр. Публикуете в своей базе http-сервис и вызываете его, а он пишет в регистр. А если баз много, то можно и отдельную базу для такого завести, вы ведь ссылки на данные не используете.
9. user1880116 16.07.24 22:39 Сейчас в теме
(8)
Публикуете в своей базе http-сервис и вызываете его
В транзакции. Мимими.
10. gybson 17.07.24 08:20 Сейчас в теме
(9) Даже если у вас переписана платформа так, что ПередЗаписью в транзакции, то какие проблемы?
11. user1880116 17.07.24 08:29 Сейчас в теме
(10)
какие проблемы?
Таймаут веб сервера.
если у вас переписана платформа так, что ПередЗаписью в транзакции
А раскрой свою мысль поподробней, пожалуйста.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот