Имя: Пароль:
1C
 
Транзакции. Не отменяет все действия
0 Wefast
 
27.05.24
15:51
Пишу:
НачатьТранзакцию();

Попытка

Элементы.МойРеквизит.Видимость = истина;

а = 1/0;

ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
КонецПопытки

Все равно мой реквизит становится видимым. Разве не все что происходит в транзакции откатывается в случае ошибки внутри нее?

Сейчас пишу так:

Успех = истина;

НачатьТранзакцию();

Попытка

а = 1/0;

ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
Успех = Ложь;
КонецПопытки

Если Успех Тогда
Элементы.МойРеквизит.Видимость = истина;
КонецЕсли;
1 Волшебник
 
27.05.24
15:37
Откатывается только запись в базу. Все остальные действия не являются частью транзакции.
2 Волшебник
 
27.05.24
15:38
И соблюдайте лесенку программного кода (отступы). Тут вам не fast...
3 Timon1405
 
27.05.24
15:42
https://its.1c.ru/db/v8std#content:783:hdoc
RTFM обработка исключений на совести разработчика
Процедура ЗаписатьДанныеВИБ()
    НачатьТранзакцию();
    Попытка
        ... // чтение или запись данных
        ДокументОбъект.Записать()
        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
        ... // дополнительные действия по обработке исключения
    КонецПопытки;
КонецПроцедуры
4 Wefast
 
27.05.24
15:46
(2) каким образом тут делаются отступы? tab их не делает, не пробелами же их делать.

(1) (3) Понял, спасибо.
(3) Для меня это выделенное предложение было не так понято. Там я думал как раз место для сообщения об ошибке, записи в журнал может чего то и т.п.
5 Ненавижу 1С
 
27.05.24
15:47
(3) ради холливара, почему все-таки НачатьТранзакцию до попытки, а не внутри?
6 Волшебник
 
27.05.24
15:48
(4) Используйте тег <PRE> из панели оформления справа
7 Wefast
 
27.05.24
16:20
(5) 1с так советует
https://its.1c.ru/db/v8std/content/783/hdoc
8 Волшебник
 
27.05.24
15:52
(7) в начале ссылок добавляйте https://
https://its.1c.ru/db/v8std/content/783/hdoc
9 Timon1405
 
27.05.24
15:55
(5) можно не надо?) для холиваров есть старая статья на хабре https://habr.com/ru/articles/419715/
10 Волшебник
 
27.05.24
15:57
(5) Потому что внутри блока Исключение есть ОтменитьТранзакцию.
Кстати, надо бы её оформить в блок
Если ТранзакцияАктивна() Тогда
11 Ненавижу 1С
 
27.05.24
16:03
(10) к сожалению, я не понял доводов
12 Ненавижу 1С
 
27.05.24
16:05
(10) + (11) нашел https://habr.com/ru/articles/419715/#comment_20146648
спасибо
13 Волшебник
 
27.05.24
16:15
(12) это какой язык? Похож на 1С, но не он