Неявные транзакции в 1с 8.2 вообще и в коде БСП в частности - как работает? #600251


#0 by Humandra
Господа, а кто мне скажет, как работают неявные транзакции в 1с 8.2 вообще и в Библиотеке стандартных подсистемь в частности? Согласно документации, вложенных транзакций 1С не поддерживает. Но как тогда можно объяснить такое: 1) Создаем элемент справочника (штатный "Пользователь" БСП) 2) В событии ПередЗаписьюНаСервере там одновременно создается ПользовательИБ (штатно, согласно коду БСП) 3) В событии ПриЗаписиНаСервере добавляю код записи некоей связанной с пользователем информации в свой регистр. 4) В коде записи в регистр на ПриЗаписи при определенных условиях присваиваю Отказ = Истина, т.е. вызывается исключение, и записи в регистр не происходит. Ожидаю, что также откатится запись пользователя и  - внимание - запись пользователя ИБ. Что имеем в форме справочника? Ошибка записи в регистр, форма Пользователя не закрывается - и это правильно. Но после этого мы исправляем причину ошибки, и снова жмем Записать. И - получаем ошибку снова, только уже из-за того, что в базе уже есть пользователь ИБ. В результате пользователя в справочник мы записать уже не сможем. Но пользователь ИБ - уже есть! Как так? Я что-то в недоумении - а где же неявная транзакция тогда начинается и заканчивается?
#1 by Armando
Читаем СП: Синтаксис: ПередЗаписьюНаСервере(<Отказ>, <ТекущийОбъект>, <ПараметрыЗаписи>) Описание: Вызывается перед записью объекта на сервере. Можно отменить запись. ВЫПОЛНЯЕТСЯ ВНЕ ТРАНЗАКЦИИ.
#2 by Feanor
эх, не вышло интриги ((
#3 by Humandra
Сейчас будет интрига :))) Тут накладывается моя 5-летняя привычка работы с Oracle. Мое понимание транзакции пришло оттуда, и может быть не совсем соответствует 1С-кому, и в этом моя проблема? Вот мое понимание: 1) транзакция - это понятие работы с данными, и базами данных 2) она есть всегда, но может в частном случае быть равна одному единственному действию с базой данных. Т.е. - "update одну запись" = одна транзакция, "update другую запись" - другая транзакция. Или же - транзакцию начинают явно, указывая какие операторы входят в транзакцию. Что же тогда есть - выполняется вне транзакции, при условии, что: 1) вложенных транзакций в 1с не бывает 2) &НаКлиенте написано - Процедура-обработчик вызывается после начала транзакции записи, но до начала записи элемента справочника. Т.е. на момент клиентской ПередЗаписью - транзакция стартует! 3) ПередЗаписьюНаСервере идет после клиентского события (не ошибаюсь? по логике вроде так, но доки под рукой нет) 4) В ПередЗаписьюНаСервере уже нет транзакции (точнее, получается, что каждое действие - отдельная транзация) Получается, что ли, что транзакция в ПередЗаписью начинаяется, и сразу же заканчивается? Бред какой-то...
#4 by Humandra
Или подождите, может и не бред. Но так ли это? ПриЗаписи - отдельная транзация, заканчивается при окончании события?
#5 by Humandra
читать как "ПЕРЕДЗаписью" - отдельная транзация...
#6 by Humandra
Я почему-то думала, что ВСЯ цепочка событий записи = одна транзация... Кажется доходит, что это не так... В задумчивости.
#7 by Feanor
"написано - Процедура-обработчик вызывается после начала транзакции записи" не знаю, где это написано, но у меня написано другое: "Описание: Возникает на клиенте перед выполнением записи объекта из формы. Процедура-обработчик данного события вызывается перед вызовом процедуры-обработчика события ПередЗаписью объекта. "
#8 by Humandra
А! Все верно, вы правы. У меня СП подменили :)))) А если серьезно - не туда посмотрела, спутала с событием объекта. Все, тогда срастается.
#9 by Feanor
"о сколько нам открытий чудных готовит просвещенья дух" ))))
#10 by Humandra
Ну, конечно серверных событий только. Это я сгоряча туда клиентские события записала :)
#11 by Humandra
Все, разобралась, спасибо.
#12 by Feanor
+1 караоке, не иначе ))
#13 by Armando
Запись - это одна транзакция. И все серверные транзакционные события возникают в рамках этой одной транзакции.
#14 by Humandra
Ага, поняла. Просто получается, что первое серверное событие - еще не транзакционное, вот тут и собака порылась с проблемой из . Я теперь только одного не понимаю. Какого черта разработчики БСП создают пользователя ИБ вне транзакции? Это как-то объяснимо, или просто косяк?
#15 by Armando
Трудно сказать чем они руководствовались
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С