|
ЗУП 3 Подписка ПриЗаписи Сотрудника вызывает В данной транзакции произошли уже ошибки | ☑ | ||
---|---|---|---|---|
0
zippygrill
04.03.21
✎
13:34
|
Привет!
Надо мне приЗаписи сотрудника запомнить его в собственный регистр сведений. Создал подписку, обработчик - в нем написал создание записи РС через Менеджер записи. Если Отказ ИЛИ Загрузка Тогда Возврат; КонецЕСли; //Добавление записей в привилегированном режиме. //Пользователям может быть разрешен Просмотр, но не Изменение УстановитьПривилегированныйРежим(Истина); МЗ = РегистрыСведений.МойРегистр.СоздатьМенеджерЗаписи(); ЗаполнитьЗначенияСвойств(МЗ, СтруктураЗаписи); Попытка МЗ.Записать(); Исключение ТекстСообщения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации("МойРегистр.СоздатьЗапись",УровеньЖурналаРегистрации.Ошибка,,,ТекстСообщения); Сообщить(ИнформацияПользователю); КонецПопытки; УстановитьПривилегированныйРежим(Ложь); При сохранении сотрудника в Предприятии, если Попытка - удачная то, никаких ошибок нет, карточка сохраняется. Но как только мы в Исключение попадаем, выполнение кода продолжает выполнятся до Заблокировать(). Этот метод находится в типовом ОМ.СотрудникиФормыБазовый.ЗаписатьТекущиеДанные() БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("РегистрСведений.ТекущиеКадровыеДанныеСотрудников"); ЭлементБлокировкиДанных.УстановитьЗначение("Сотрудник", СотрудникОбъект.Ссылка); БлокировкаДанных.Заблокировать(); // падает с ошибкой "В данной транзакции уже произошли ошибки" По стеку вызовов прошел до Заблокировать() - нигде не встретилось НачатьТранзакцию(), но в Исключение метод ТранзакцияАктивна() = ИСТИНА ..ничего не понимаю |
|||
1
youalex
04.03.21
✎
13:47
|
(0) ТранзакцияАктивна() = Истина - это может быть неявная транзакция при записи объекта.
Но если в этот момент вызвать ОтменитьТранзакцию() - будет ошибка, емнип.. |
|||
2
zippygrill
04.03.21
✎
13:51
|
(1) Но если в этот момент вызвать ОтменитьТранзакцию() - будет ошибка, емнип.. -- какой то замкнутый круг.. прорбовал и Отменить и Зафксировать(чтобы счетчик транзакции уменьшился) --все равно ошибка
|
|||
3
zippygrill
04.03.21
✎
13:52
|
Пока решение одно: МЗ делать только в том случае если все измерения обязательные к заполнению - заполнены.
|
|||
4
zippygrill
04.03.21
✎
13:52
|
и без попытки
|
|||
5
rozer76
04.03.21
✎
14:00
|
первая неявная транзакция и ней ты свою пилишь, там исключение. Тут надо вызватьисключение и все. В поломанной транзакции нельзя обращаться с ИБ и первая транзакция не зафиксируется если уже у тебя была ошибка и не важно обрабатываешь ты в исключении или нет. https://its.1c.ru/db/metod8dev#content:2313:hdoc
|
|||
6
rozer76
04.03.21
✎
14:03
|
+(5)
Попытка МЗ.Записать(); Исключение ВызватьИсключение "Все печально" + ТекстСообщения; КонецПопытки; |
|||
7
zippygrill
04.03.21
✎
14:06
|
(6) ВызватьИсключение прерывает дальнейшее выполнение кода, а мне этого не надо
|
|||
8
rozer76
04.03.21
✎
14:08
|
(7) не получится по другому ты уже в неявной транзакции свою неявную делаешь - или все или ничего )
|
|||
9
zippygrill
04.03.21
✎
14:11
|
(8) тогда надо делать как в (3)
|
|||
10
rozer76
04.03.21
✎
14:14
|
(9) ну да, и не надо никаких попыток. И если например, ляжет на блокировке то все и откатится разом
|
|||
11
zippygrill
04.03.21
✎
14:19
|
неявная транзакция выбило меня..еще, признак в пользу наличия неявной транзакции было отсутствия записи в успешном попытке..а я игнорировал :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |