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

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

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

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

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

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

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

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

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

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

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

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

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