Имя: Пароль:
1C
1C 7.7
v7: Чего нельзя делать внутри транзакции?
0 ado
 
12.08.11
12:55
Господа, напомните сабж, плиз.
Валится опработка с ошибкой "Ошибка при выполнении процедуры ЗафиксироватьТранзакцию", никак не могу найти, в чем косяк.
1 Kreont
 
12.08.11
12:56
(0) Снять НачалоТранзакции и ошибка покажется там где реально что-то не так
2 Попытка1С
 
12.08.11
12:57
Попытку?
3 Попытка1С
 
12.08.11
12:58
Хотя не..
4 Sserj
 
12.08.11
12:58
Так надо искать что не так сделалось, типа проводился документ и не провелся.
5 Sserj
 
12.08.11
13:00
Тобишь обычно лучше делать так:

ТранзакцияУспешна = 1;
НачатьТранзакцию();

...
Попытка
  ЧтонибутьПровести
  ИлиЧтонибутьЗаписать
Исключение
ТранзакцияУспешна = 0;
КонецПопытки

Если ТранзакцияУспешна = 1 Тогда
ЗафиксироватьТранзакцию();
Иначе
ОтменитьТранзакцию();
КонецЕсли;
6 ildary
 
12.08.11
13:09
(5) еще лучше после строки Исключение вставить

Предупреждение( "Ошибка при записи/проведении:" + ОписаниеОшибки(), 120 );
7 ЧеловекДуши
 
12.08.11
13:09
Лучше так

ТранзакцияУспешна = 1;
Попытка
  НачатьТранзакцию();
Исключение
 // Обломись, не могу заблокировать таблицы БД
 Возврат
КонецПопытки

...
Попытка
  ЧтонибутьПровести
  ИлиЧтонибутьЗаписать
Исключение
ТранзакцияУспешна = 0;
КонецПопытки

Если ТранзакцияУспешна = 1 Тогда
ЗафиксироватьТранзакцию();
Иначе
Попытка
  ОтменитьТранзакцию();
Исключение
 //Что - то не так :)
КонецПопытки
КонецЕсли;
8 Кириллка
 
12.08.11
13:09
(0)можно делать все, но некоторые действия будут влиять на успешность завершения транзакции.
9 ado
 
12.08.11
13:47
(5) Хмммм ...
10 Кириллка
 
12.08.11
13:51
(5)после

ЧтонибутьПровести
ИлиЧтонибутьЗаписать

уже транзакция откатилась и нет смысла ее отменять.
11 andrewks
 
12.08.11
15:35
(0) СтатусВозврата(0);
12 Torquader
 
12.08.11
23:19
У меня такое было, когда BeginTransaction() написал один раз, а CommitTransaction() - два раза.
И долго-долго чесал репу, пока не посчитал.
13 Aleksey
 
12.08.11
23:53
На ноль делить нельзя внутри транзакции
14 Torquader
 
13.08.11
00:03
(13) Ошибки времени исполнения от транзакции не зависят и выводятся сразу, а транзакция при этом автоматически откатывается - причём в сообщении об ошибке о транзакции ни слова не будет.
15 ado
 
15.08.11
09:00
(12) Та не, посчитал, всё верно, вроде ...
16 ado
 
15.08.11
18:20
Аааа, вот она, скотина. Во глубине процедур, вызываемых внутри транзакции был такой код:

Попытка
    Докум.Записать();
Исключение
    Докум.УстановитьНовыйНомер("А");
    Докум.Записать();
КонецПопытки;

И вот когда срабатывало исключение ...

Щас найду коллегу, который это написал, и скажу ему разные нехорошие слова.
17 andrewks
 
15.08.11
18:21
(16) зачётно )
18 andrewks
 
15.08.11
18:21
+(17) напомнило:
"по колёсам стучал? ну, тогда не знаю..."
19 ado
 
15.08.11
18:25
В который раз убеждаюсь, что исключения -- зло.
20 andrewks
 
15.08.11
18:27
(19) та не, просто надо уметь их готовить.
тут дело-то не в исключении, а в гКоде
21 ado
 
15.08.11
18:34
(20) Точнее зло -- затыкать исключениями то, что можно обычной проверкой проверить.

Впрочем, такая проверка, как в (16) говорит о несколько бОльших проблемах в консерватории, но это уже другая тема.