0
deringpavel
01.05.20
✎
09:59
|
Всем привет.
Столкнулся с ситуацией, когда документ не должен проводиться (отказ = истина), но при этом должен программно записаться. Делаю это в процедуре ПередЗаписью. Но документ не записывается.
Что делаю не так?
<code>
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки = ОценкаПроизводительностиКлиент.ЗамерВремени();
ЕстьОшибки = ПроверкаЛимитаОтпусков();
Если ЕстьОшибки Тогда
Отказ = Истина;
ЗаписатьДокумент();
КонецЕсли;
КонецЕсли;
Если ПараметрыЗаписи.РежимЗаписи <> РежимЗаписиДокумента.ОтменаПроведения И Не ПараметрыЗаписи.Свойство("ПроверкаПередЗаписьюВыполнена") Тогда
Отказ = Истина;
ЗаписатьНаКлиенте(Ложь, ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаписатьДокумент()
ДокументОбъект = РеквизитФормыВЗначение("Объект");
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
КонецПроцедуры
</code>
|
|
3
Cyberhawk
01.05.20
✎
10:28
|
Не делай как (2).
Анализируй отказ в коде, инициирующем проведение, но уже после завершения транзакции.
Дополнительно нужно убедиться, что ты не находишься во вложенной транзакции. Если предполагается, что твой код будет выполняться внутри сторонней транзакции, то без персистентной очереди не обойтись. В этом случае пара ненадежных вариантов - пополнять ее через запуск ФЗ, либо писать в ЖР и шерстить его опосля.
|
|