Рубрика: Вопросы на собеседовании #вопросынасобесах №117

На позицию: Программист 1С

Вопрос: Что произойдёт при выполнении этого кода, если Объект.Записать() упадёт с исключением? Процедура ЗаписатьЭлемент(СсылкаНаЭлемент) НачатьТранзакцию(); Попытка Объект = СсылкаНаЭлемент.ПолучитьОбъект(); Объект.Наименование = "Новое"; Объект.Записать(); ЗафиксироватьТранзакцию(); Исключение Сообщить("Ошибка записи: " + ОписаниеОшибки()); КонецПопытки;

Запрос = Новый Запрос("ВЫБРАТЬ 1"); Запрос.Выполнить(); КонецПроцедуры

Ответ:

Код упадёт с ошибкой «В данной транзакции уже происходили ошибки» на строке Запрос.Выполнить().

Исключение внутри транзакции не откатывает её автоматически. Платформа лишь взводит служебный флаг «запрет успешного завершения» (rollback only). Формально ТранзакцияАктивна() вернёт Истина, но любое обращение к БД в её рамках уже невозможно в том числе неявное, например, получение представления ссылки.

Самое коварное: текст ошибки укажет на Запрос.Выполнить(), хотя первопричина в упавшем Объект.Записать() выше. ❗️ Есть что добавить, пиши в комментариях.

Подпишись на канал | Подпишись в max


В этом посте были ссылки, но мы их удалили по правилам Сетки

❓Рубрика: Вопросы на собеседовании #вопросынасобесах №117
На позицию: Программист 1С
Вопрос: Что произойдёт при выполнении этого кода, если Объект | Сетка — социальная сеть от hh.ru