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