Имя: Пароль:
1C
1С v8
Странная штука - транзакция
0 vovus
 
12.04.12
22:03
Вот почему так происходит?
В модуле формы документа выполняется вот такой вот кусок кода:

текРезультат = ПроверитьВыполнениеДокумента(Ссылка, Статус) И ВыполнитьКонтрольДанных();
Если текРезультат тогда
 //НачатьТранзакцию();
 СтрокиДокументаПеремещениеСохранитьИПровести(ЭтаФорма, Ссылка);
   Если Проведен и не Поддон.Пустая() Тогда
   
После выполнения предпоследней строки свойство Проведен = Истина. Однако если таки начать транзакцию перед этим, Проведен будет ложь. При этом метод ТранзакцияАктивна() будет возвращать истину. Как? Почему? Я уже сплю или я что-то не знаю про транзакции?
1 hhhh
 
12.04.12
22:55
а зачем вторая транзакция? В 1С вложенных тразакций не бывает.
2 DUDE
 
12.04.12
22:55
Могу предположить, что в выполняемом методе при проведении происходит автоматически обновление свойств объекта (ты его провел, обновились данные ссылки и самого объекта).
Как только код оказался внутри транзакцию, то обновление свойств объекта (по данным ссылки) не может быть выполнено до тех пор, пока транзакция не будет завершена и не будет зафиксировано состояние ссылки в ИБ.

Уверен на 99,9% если написать так:
НачатьТранзакцию();
 СтрокиДокументаПеремещениеСохранитьИПровести(ЭтаФорма, Ссылка);
ЗафиксироватьТранзацию();
Сообщить(Проведен); // здесь вернется истина

А так вообще мутновато написано: что к чему.
3 vovus
 
12.04.12
23:33
То ли я правда спал, то ли что. В общем, убрал проверку на Проведен и решил, что совесть чиста и можно идти спать дальше.
4 vovus
 
12.04.12
23:36
(2) просто в той процедуре, которая СтрокиДокументаПеремещениеСохранитьИПровести идет обращение в закрытый модуль и хз что там делается. Судя по названию я думал, что статус "Проведен" должен меняться, видимо, это не так. Слава богу, вера в транзакции не пошатнулась ))) мы же в модуле формы объекта, и если он проведен, то мы и в транзакции это сразу увидим...