Вход | Регистрация
 

Если я провожу 10 документов в транзакции и один из них не провелся, транзакция отменится?

Если я провожу 10 документов в транзакции и один из них не провелся, транзакция отменится?
Я
   Гений 1С
 
13.02.21 - 10:36
ну т.е. я в Попытка Исключение пишу записать докумнет в режиме провдения.
Если не проведется, я смогу остальные провести или транзакция откатится?
 
 Партнерская программа EFSOL Oblako
   ptiz
 
1 - 13.02.21 - 10:37
Слишком сложный вопрос даже для гения.
   ДенисЧ
 
2 - 13.02.21 - 10:40
Геня, тебе этого не понять, не старайся...
   novichok79
 
3 - 13.02.21 - 10:48
при попытке зафиксировать такую транзакцию, емнип, выпадет сообщение о том, что "в данной транзакции уже происходили ошибки".
   Dmitry1c
 
4 - 13.02.21 - 10:48
(0) что мешает написать 40 строк кода и узнать?
   DrShad
 
5 - 13.02.21 - 11:00
пошел за попкорном, ибо ветка элитного
   Фрэнки
 
6 - 13.02.21 - 11:00
Поведение может отличаться в зависимости от использованных при сборке платформы библиотек. Т.е. фиксацию транзакции нужно сравнивать и убеждаться в том, что на разных СУБД она фиксируется с одинаковыми условиями.

В общем случае, если внутри транзакции было "исключение" или exception и программный код это не сбрасывает умышленно, то транзакция не зафиксируется. Не взирая на то, сколько там внутри самого внешнего блока транзакции было вложенных более мелких, в которых где-то возник exception

И да, нужно отличать появление простого "Отказ = Истина" и появление exception при исполнении кода.
   Ненавижу 1С
 
7 - 13.02.21 - 11:02
(0) попытка/исключение это не относится к транзакции
   Serg_1960
 
8 - 13.02.21 - 11:14
Правильно:

    НачатьТранзакцию();
    Попытка
        ...
        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
    КонецПопытки;
   Serg_1960
 
9 - 13.02.21 - 11:16
НЕ Правильно:

    Попытка
        НачатьТранзакцию();
        ...
        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
    КонецПопытки;
   TormozIT
 
10 - 13.02.21 - 11:16
Тут все разжевано http://catalog.mista.ru/1c/articles/1026771/
   TormozIT
 
11 - 13.02.21 - 11:17
(10) + Читать нужно только раздел "Сломанные транзакции". Остальное по желанию =)
   Ненавижу 1С
 
12 - 13.02.21 - 11:18
(8) плюсую, еще бы протолкнул исключение после отмены через ВызватьИсключение;
   Serg_1960
 
13 - 13.02.21 - 11:19
+(9) "метод НачатьТранзакцию должен быть за пределами блока Попытка-Исключение непосредственно перед оператором Попытка;"

Источник: ИТС https://its.1c.ru/db/v8std/content/783/hdoc
   rozer76
 
14 - 13.02.21 - 11:21
Нет, будет сломана транзакция даже если перехватишь исключение. Только откатывать все.

https://its.1c.ru/db/metod8dev/content/2313/hdoc

Если при выполнении оператора Данные.Записать() произойдет восстановимая ошибка базы данных (например, по причине того, что элемент данных был заблокирован другим пользователем), то вызванное этой ошибкой исключение будет перехвачено, но повторное выполнение этого же оператора в цикле уже безусловно приведет к ошибке, так как при выполнении данной транзакции уже имела место ошибка базы данных.
   Фрэнки
 
15 - 13.02.21 - 11:51
Только по топику был задан вопрос немного не о том, что мы тут обсуждаем.

Есть " Отказ = Истина " и тогда получается своя проблема. Такое внутри Транзакции далеко не всегда создаст  ОтменитьТранзакцию(); автоматичеки 

А есть действительный кусочек 

Попытка
Исключение
КонецПопытки;

или просто возникновение ошибки, именно исполнение кода или процедуры будет обработано появлением ошибки (не установку Параметра вызова, а именно возникновение Исключения)

Вот тогда и будет Отмена всей внешней транзакции при проведении множества документов.
Или надо умышленно ловить появление где-то внутри обработки условия для отмены всей транзакции.

Смотреть надо по цели, которая ставится в каждом конкретном случае использования транзакций.
   Конструктор1С
 
16 - 13.02.21 - 12:10
(0) не разбивай мне сердце, элитный программист
   Вафель
 
17 - 13.02.21 - 12:24
на то она и транзакция - либо все либо ничего
   TormozIT
 
18 - 13.02.21 - 12:31
(15) Это когда же Отказ=Истина на выходе обработчике записи "не создаст ОтменитьТранзакцию автоматически"?
   Serg_1960
 
19 - 13.02.21 - 12:56
(18) Читаем опять же тот-же самый ИТС :)
...при использовании вложенных транзакций (см. п. 1.4) в конце блока Исключение рекомендуется добавить оператор ВызватьИсключение.  В противном случае исключение не будет передано выше по стеку вызовов, там не сработает обработка исключения, внешняя транзакция не будет явным образом отменена и платформа вызовет исключение «В данной транзакции происходила ошибка»
   Serg_1960
 
20 - 13.02.21 - 12:58
Имхо: когда пользователь видит надпись «В данной транзакции происходила ошибка» - пользователь видит косяк программиста.
   TormozIT
 
21 - 13.02.21 - 13:13
(19) Теперь понял тебя. Про вложенные транзакции согласен.
   Ненавижу 1С
 
22 - 13.02.21 - 13:18
элитарные вопросы они такие
   Гений 1С
 
23 - 17.02.21 - 18:44
https://its.1c.ru/db/metod8dev/content/2334/hdoc
В общем пытался что сделать: отменить все документы за день с проведения.
Потом провести их по очереди.
Так вот, если какой-то не проводится, транзакция отменяется...
Без транзакции сыкотно, т.к. вдруг документ так и останется не проведенным...
В общем, пока оставил так, в будущем можно по идее, если какой док не проводится, заново начинать проведение пачки, но уже без него. долго, муторно, но что делать.
более сложный вариант - запоминать, что распроводили в регистре, но не надежен
   Cyberhawk
 
24 - 17.02.21 - 18:53
(6) Отказ в транзакции записи / проведения аналогичен возникновению исключения: если это происходит в попытке, то код уходит в исключение.
Итоговую транзакцию зафиксировать в любом случае уже не получится.
   Вафель
 
25 - 17.02.21 - 21:58
но зачем по 10? делай по 1
   ssh2006
 
26 - 17.02.21 - 23:38
(0)  откатится. На итс это описано.
   H A D G E H O G s
 
27 - 18.02.21 - 01:43
10 транзакций и былинный отказ Гения 1С.
   Cthulhu
 
28 - 18.02.21 - 03:57
(23): а ты уверен, что в процессе транзакции не перенесенные в базу движения будут учтены надлежащим образом?.. и, ну например, ты уверен, что при этом не возникнет, ну например, следующий косяк: два расходных документа в одной транзакции запрашивают остатки по партиям, например, для списания с одного и того же склада (по фифо) - и списывая при этом, например, по 3/4 остатка (на момент начала выполнения транзакции) первой партии - не спишут в результате эту партию до состояния непотребного отрицательного остатка?.. или ты как-то в рамках транзакции можешь получать запросом остатки с учетом движений, совершенных документами в этой же транзакции?
(просто спросил))
   Гений 1С
 
29 - 18.02.21 - 07:20
(25) я не по 10, я все документы за 10. В УНФ криво как-то закрытие месяца работает, если есть другие проведенные документы закрытия. Курсы дикие рисует в переоценках. А если распровести и последовательно провести - норм.
   Гений 1С
 
30 - 18.02.21 - 07:20
(28) да, уверен.
 
 
   Шоколадный глаз
 
31 - 18.02.21 - 07:51
(3) Даже если это первая ошибка? Какая считается предыдущей?
   Адинэснег
 
32 - 18.02.21 - 07:53
г1с, 2021 на дворе
   Шоколадный глаз
 
33 - 18.02.21 - 07:56
(32) А что не г? И это форум 1с вообще-то.


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.