В случае, если внутри транзакции происходит какое-либо исключение, которое с помощью конструкции «Попытка» будет обработано и выполнение продолжится, то транзакция будет помечена как испорченная. При попытке зафиксировать такую транзакцию, никаких ошибок пользователь не увидит, но при этом данные не будут сохранены, транзакция откатится.
Транзакция помечается испорченной на уровне СУБД, поэтому любое обращение к СУБД после этой отметки будет выдавать сообщение «В данной транзакции происходили ошибки». Эта ошибка тяжело диагностируется, потому что в сообщении пользователю будет указываться строка, в которой произошло обращение к СУБД, а не строка с ошибкой.
Для отлавливания именно ошибочной строки можно использовать технологический журнал со следующим содержанием:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="d:\tzh_sdbl" history="168">
<event>
<eq property="name" value="SDBL"/>
<eq property="p:ProcessName" value="your_base_name"/>
<eq property="Func" value="setRollbackOnly"/>
</event>
<property name="all"/>
</log>
</config>
Здесь необходимо поменять путь сохранения технологического журнала и имя базы. Данное содержимое сохраняется в файл logcfg.xml и помещается в папку «C:\Program Files\1cv8\conf»
В момент ошибки в технологический журнал записывается событие SDBL с Func = «setRollbackOnly». В этом событии так же есть и контекст ошибки, который поможет расследовать причину проблемы.