Транзакции

Тема в разделе "1C и всё что с ней связано", создана пользователем Hryv, 28 апр 2010.

  1. Hryv

    Hryv Гость

    Вчерашняя тема пропала, а проблема у меня осталась

    В процедуре, которая вызывается по кнопке, делаю НачатьТранзакцию()
    Если ЗафиксироватьТранзакцию() (или ОтменитьТранзакцию()) выполнить до завершения этой процедуры, то все работает нормально

    А если процедура завершается без закрытия транзакции, то при попытке выполнить ЗафиксироватьТранзакцию() (или ОтменитьТранзакцию()) выдается ошибка типа "нет транзакции"

    Получается, что при завершении процедуры транзакция фиксируется неявно?

    Можно ли как-то это обойти?

    Мне хотелось бы начать транзакцию, дать поработать юзеру, а затем завершить транзакцию
     
  2. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Я правильно понял: зашел в процедуру, начал транзакцию (Трз), вышел из процедуры. Потом покурил минут 10, в смысле постучал по клавишам. Зашел в другую процедуру (другую кнопку нажал) - в ней закрыл Трз.

    Код ( (Unknown Language)):
    Проц НажалКнопкуА()
    НачатьТранзакцию()
    Конец

    Проц НажалКнопкуБ()
    ЗафиксироватьТранзакцию()
    Конец
    Вычурно это, брат. Получается, хочешь открыть Трз на длительное время. И на все это время БД ей заблокирована, включая то, что "работающий" юзер не может записать и провести документ. Ведь проведение - это неявный вызов Трз. Произойдет двойное вложение.
    Что касается
    , то я полагаю, что Да - фиксируется, только не рамками процедуры, а передачей управления пользователю. Если не лень, проверь экспериментом:

    Код ( (Unknown Language)):
    Проц А()
    НачатьТранзакцию()
    Конец

    Проц Б()
    ЗафиксироватьТранзакцию()
    Конец

    Проц НажалКнопку()
    А();
    Б();
    Конец
    Так должно работать. Т.к. код выполняется как цельная реакция одного клика.
    P.S. Да простят меня за неверные предположения, ибо глаголю руководствуясь не опытом, а токмо силой разума и знания жития.
     
  3. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Нет. Транзакция не завершается, а прерывается. И поэтому нельзя начать транзакцию в одной процедуре, а зафиксировать/отменить в другой. Попробуйте открыть цикл в одной процедуре, а завершить его в другой, какой будет результат?
     
  4. Hryv

    Hryv Гость

    Дайнеко, именно так все и происходит, я это выяснил еще раньше
    Но думал, что может что-то я упустил

    Жаль, что нет возможности сделать как я хочу
    Понятно, что с такой возможностью надо аккуратно обращаться
    Можно было, например, сделать ограничение на такое использование транзакций - работает только в монопольном режиме
    Придется обходить проблему иначе

    Я все же сказал бы что завершается, так как все изменения внутри транзакции сохраняются
    А пример с циклом считаю совершенно некорректным сравнением
     
  5. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Вижу, что идея маниакально овладела Вашим сознанием. А смысл не понятен...
     
Загрузка...
Похожие Темы - Транзакции
  1. Истребитель
    Ответов:
    4
    Просмотров:
    5.204

Поделиться этой страницей