[РЕШЕНО] Транзакция при проведении

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем rosveta, 29 июн 2015.

  1. TopicStarter Overlay
    rosveta
    Offline

    rosveta Опытный в 1С

    Регистрация:
    22 май 2015
    Сообщения:
    152
    Симпатии:
    7
    Баллы:
    29
    Добрый день. Столкнулась с такой проблемой. БП 3. Мне необходимо при проведении отчета о розничных продажах, записывать документ Операция. Но если документ Отчет о розничных продажах не проводится, то все что было в транзакции откатывается. Как-либо можно все равно принудительно записать документ операция из этой транзакции?
  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    хм....как вариант: разделить проведение документа и формирование документа Операция.
  3. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Как вариант сделать это в событии вне транзакции. Но по-моему, это логически не совсем корректно.
  4. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Вне транзакции не получится, т.к. транзакция записи - неявная, хотя, если транзакция открывается явным образом, то быть может и получится что-то изменить...
  5. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    nomad_irk в смысле? Явная или нет - не при чем.
    см. событие ПередЗаписью().
  6. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Оно откатываться может и в "ОбработкаПроведения" ибо транзакция верхнего уровня - не зафиксирована в этот момент.
  7. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.635
    Симпатии:
    946
    Баллы:
    204
    Cобытии ПередЗаписью() выполняется как раз в неявной транзакции.
    Есть явные, которые фиксируются НачатьТРанзакцию и неявные которые фиксируются и завершаютс самой платформой.
    Транзакции причем как явные и неявные могут быть вложенными и потом будет откат по всей цепочке
    rosveta нравится это.
  8. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    nomad_irk какая транзакция? События ПередЗаписью(), ПослеЗаписи() формы документа вызываются вне транзакции проведения.
  9. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.635
    Симпатии:
    946
    Баллы:
    204
    События формы - да они не содержать неявных транзакций
    Т.е собыие объекта ПередЗаписью() содержит неявную тразакцию, а Формы - нет, хотя у обоих может быть реквизит ОТКАЗ
  10. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Upd
    В стартовом посте БП3 написано, тогда для создания документа события ПередЗаписьюНаСервере(), ПослеЗаписиНаСервере(). Кроме того можно также попробовать посмотреть в сторону событий ОбработкаПроверкиЗаполнения(), ОбработкаПроверкиЗаполненияНаСервере().
  11. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    ээээ.....дык проблемы-то явно не в обработчике события формы случаются.....
    Если писать код на создание документа ОперацияБух в модуле формы, то как быть при программном формировании документа "Отчет о розничных продажах"? Хорошо, если ты знаешь о том, что необходимо формировать еще какой-то документ....
  12. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Хм. Ну если ты знаешь что при программном формировании одного документа, тебе надо еще и второй какой-то сделать - то в чем вообще проблема - формируй его отдельно, зачем первый документ изнутри при этом курочить?

    Насколько понимаю подобного рода задачи - они и берутся из того чтобы пользователи не забывали после того как сделают один документ, к нему второй сделать.

    А конкретно по данному случаю я написал - постановка задачи мне кажется не совсем корректной, поскольку изначальный документ может быть и не проведен. Но здесь ТС виднее.
  13. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Дык я о том и баю, что невозможно определить необходимость формирования другого документа в обработчике события "ПередЗаписью" ибо транзакция записи документа еще может быть отменена, и в этот момент нет даже ссылки на объект записи.

    Я предлагаю сделать это в подписке на событие для события "ОбработкаПроведения" - курочить документ не придется.
    подписка на событие "ОбработкаПроведения" максимально преближена к моменту фиксирования "финальной" транзакции записи документа в БД.
  14. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.635
    Симпатии:
    946
    Баллы:
    204
    Ну тут вопрос просто при подписки на событие
    я же не помню она вызывается когда

    ОбработкаПроведение Начало

    1.//Тут подписка на событие
    ОбработкаПроведение конец

    2.///или тут

    Просто мне кажется что вариант1 т.к если в подписке на событие ОбработкаПроведения() Отказ поставить Истина то и проведния документа не будет т.е срабатывает неявная вложеная транзакция
  15. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Подписка на событие отрабатывает после окончания "ОбработкаПроведения" в модуле объекта при условии, что Отказ = Ложь.
  16. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.635
    Симпатии:
    946
    Баллы:
    204
    ну смотри я если в подписке на это событие (ОбработкаПроведения) поставлю Отказ=Истина

    То документ то не проведется. так ? логично что у самой процедуры ОбработкаПроведения сработает Отказ, значит логично предположить что подписка на событие вызывается перед самым концом ОбработкиПроведения.
  17. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    неее :)
    оно вызывается строго после, только все это завернуто в общую транзакцию записи документа в БД, которая пораждает запись его движений и, собственно, запись самого объекта с флагом "Проведен" = Истина, т.е. если в процессе записи данных в регистры(уже после завершения "ОбработкаПроведения" и отработки подписки на событие) так же произойдет прерывание процесса, то откатится все, и запись самого документа в БД в том числе.
  18. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.635
    Симпатии:
    946
    Баллы:
    204
    НУ соответвенно тогда все ранво Подписка на событие при Проведнии то же не подойдет получается что он запишет только когда проведение.
    если при записи то при каждой записи может создаваться еще один документ операции
  19. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Так это решается проверкой на существование документа в БД, при необходимости перезаписываем его и его движения.
  20. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.635
    Симпатии:
    946
    Баллы:
    204
    просто проверка нетривиальная должна быть. в комментари что то писать - документ операция - это же по сути напрямую в регистры запись

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