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