Имя: Пароль:
1C
 
ЗаписьЖурналаРегистрации(). Транзакционная запись - фейк?
0 fisher
 
21.05.11
13:59
В подписке на событие "Перед записью" документа делаю ЗаписьЖурналаРегистрации(). Шестым параметром (РежимТранзакции) ставлю
РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная
Но при откате транзакции запись всё равно делается (да и при успешной транзакции колонки "Статус транзакции" и "Транзакция" в журнале остаются пустыми). Вразумите, если чего не догоняю...
1 forforumandspam
 
21.05.11
14:25
Журнал Регистрации не относится к базе. Почему запись должна откатываться?

Синтаксис:
ЗаписьЖурналаРегистрации
Описание:
Записывает событие в журнал регистрации.
Предназначен для записи ДОПОЛНИТЕЛЬНЫХ событий, которые не записываются системой.

Коли сам делаешь запись, сам откатываешь транзакцию, то и сам добавляй запись о неудачной транзакции.
2 iamnub
 
21.05.11
14:55
(1)
Злой ты какой-то.
3 МегаБум
 
21.05.11
15:49
(0) а если ты в транзакции на принтере напечатаешь, при откате транзакции бумага обратный путь проделать должна?
4 fisher
 
21.05.11
17:13
Ок. Если все такие умные, объясните для чего предназначен шестой параметр метода ЗаписьЖурналаРегистрации(), который называется "РежимТранзакции". И в каких случаях и для чего его нужно использовать.
5 fisher
 
21.05.11
17:26
И заодно объясните, если всё так намертво привязано к базе, почему 1С сама не пишет фейковые записи в ЖР при откате.
6 forforumandspam
 
21.05.11
18:58
(0) Специально проверил.

   НачатьТранзакцию();
   Спр = Справочники.<Имя>.СоздатьЭлемент();
   ЗаписьЖурналаРегистрации("Событие", УровеньЖурналаРегистрации.Информация, Спр.Метаданные(), "Данные", "Комментарий", РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная);
   Спр.Записать();
   ЗафиксироватьТранзакцию();

В модуле объекта справочника в процедуре ПередЗаписью идёт проверка на пустые реквизиты. Процедура изменяет Отказ=Истина и ЖР пишет "Статус транзакции" = Отменена. А теперь ты напиши, где накосячил.
7 fisher
 
23.05.11
10:50
(6) Всё тоже самое, только в подписке на событие перед записью документа

Процедура МойОбщийМодуль_ПередЗаписьюДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
       ЗаписьЖурналаРегистрации(
           ОписаниеСобытияДокумента(Источник, РежимЗаписи, РежимПроведения),
           УровеньЖурналаРегистрации.Предупреждение,
           Источник.Метаданные(),
           Источник,
           Строка(Источник),
           РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная
       );
КонецПроцедуры
8 forforumandspam
 
23.05.11
11:07
(7) А почему общий модуль? КАК "ЗаписьЖурналаРегистрации" узнает, прошла транзакция или нет?
9 fisher
 
23.05.11
11:11
(8) А где еще должен находиться обработчик подписки на событие? И какие могут быть отличия в механизме определения результата текущей транзакции? КАК "ЗаписьЖурналаТранзакции" в твоем случае узнала? Вот точно также.
10 Рыжий Лис
 
23.05.11
11:23
ПередЗаписью не транзакционное событие.
11 fisher
 
23.05.11
11:33
(10) В качестве ликбеза и апа: событие ПередЗаписью есть у объекта и у расширения формы объекта. Событие расширения формы - перед транзакцией записи. А событие объекта - уже в транзакции. На будущее. На глаз определить в транзакции событие или нет - очень легко. Если в параметрах события присутствует Отказ - значит оно транзакционное.
12 forforumandspam
 
23.05.11
11:38
(11) Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) - тоже транзакция?
13 fisher
 
23.05.11
11:43
(12) Уел. А по существу?
14 hhhh
 
23.05.11
11:43
(11) событие объекта - тоже НЕ  в транзакции!!
15 forforumandspam
 
23.05.11
11:46
(13) А чем тебя не устраивает стандартная запись в ЖР?
16 73
 
23.05.11
11:46
(14) В транзакции.

СП:
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>)
ПередЗаписью (BeforeWrite)
Синтаксис:
ПередЗаписью(<Отказ>, <Режим записи>, <Режим проведения>)
Параметры:
<Отказ>
Тип: Булево. Признак отказа от записи документа. Если в теле процедуры-обработчика установить данному параметру значение Истина, то запись документа выполнена не будет.
Значение по умолчанию: Ложь
<Режим записи>
Тип: РежимЗаписиДокумента. В параметр передается текущий режим записи документа. Позволяет определить в теле процедуры режим записи. Изменение значения параметра позволяет изменить режим записи.
<Режим проведения>
Тип: РежимПроведенияДокумента. В данный параметр передается текущий режим проведения.
Изменение значения параметра позволяет изменить режим проведения.
Описание:
Возникает перед выполнением записи объекта. Процедура-обработчик вызывается после начала транзакции записи, но до начала записи документа.


--------------------------------------------------------------------------------
17 hhhh
 
23.05.11
11:49
(11) в ПередЗаписью в форме тоже присутствует отказ.
18 fisher
 
23.05.11
11:54
(17) Хм... В самом деле... Значит, это не показатель.
19 fisher
 
23.05.11
11:58
Короче. По результатам изысканий для транзакций инициируемых неявно эта шняга не работает... Подписка или напрямую, перед записью или при записи - откат не определяется. Пытался явно оборачивать вложенной транзакцией - тоже до одного места.
Очень и очень жаль...
20 forforumandspam
 
23.05.11
12:02
(19) Так зачем тебе это всё?
21 fisher
 
23.05.11
12:05
(20) Какая разница?
22 forforumandspam
 
23.05.11
12:07
(21) Да и нам какая разница, получиться у тебя или нет?
23 fisher
 
23.05.11
12:10
(22) Суть проблемы с моими целями не связана абсолютно. Вам, Николаю II, может и никакой разницы. А кому-то возможно интересно будет.
24 fisher
 
23.05.11
12:27
(6) Фигня какая-то...
В обработке начинаю транзакцию, перезаписываю элемент справочника, пишу в ЖР и явно откатываю транзакцию. Никакого эффекта. Записалось как так и надо, без всяких там "Отменена".
Уверен, что со штатной записью ЖР не спутал? Какой релиз?
25 fisher
 
23.05.11
13:34
Ап.
26 fisher
 
24.05.11
10:43
Up.
Есть слабая надежда, что я всё-таки что-то делаю не так.
У меня этот шестой параметр не фунциклирует ни при каких условиях.
Закон Брукера: Даже маленькая практика стоит большой теории.