|
Странная штука - транзакция
| ☑ |
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) просто в той процедуре, которая СтрокиДокументаПеремещениеСохранитьИПровести идет обращение в закрытый модуль и хз что там делается. Судя по названию я думал, что статус "Проведен" должен меняться, видимо, это не так. Слава богу, вера в транзакции не пошатнулась ))) мы же в модуле формы объекта, и если он проведен, то мы и в транзакции это сразу увидим...
|
|