Имя: Пароль:
1C
1С v8
непонятное поведение отладчика в попытке
,
0 Stim
 
24.10.12
15:21
вот такой код:

док = Объект.списокДокументов[0].документ;  
Номер = док.номер;

докОб = Док.ПолучитьОбъект();
   
НомерДляПроверки = "";
ВвестиСтроку(НомерДляПроверки,"введите номер документа");
       
Попытка
докОб.Номер = НомерДляПроверки;    
докОб.записать();
Исключение
докОб.номер = Номер;
докОб.записать();
КонецПопытки;


код тестовый, не пинать.

включена остановка по ошибке.
внимание вопрос: почему отладчик останавливается по ошибке на строке докОб.записать(); в попытке и в строке докОб.записать(); в исключении??

в исключении не должно быть никакой ошибки
1 Нуф-Нуф
 
24.10.12
15:23
Попытка
докОб.Номер = НомерДляПроверки;    
докОб.записать();
Исключение
Попытка
докОб.номер = Номер;
докОб.записать();
Исключение
Сообщить("и вторая попытка не удалась");
КонецПопытки;
КонецПопытки;
2 Живой Ископаемый
 
24.10.12
15:23
гы... с чего ты взял? что не долженбыть никакой ошибки? А вдруг там дата запрета редактирования стоит и документ старый...

Впихни в исключение еще с десяток каскадных попыток.. вдруг с 11-го раза запишетт?
3 DomovoiVShoke
 
24.10.12
15:27
4 Stim
 
24.10.12
15:33
(2) ничего такого нет.
5 Stim
 
24.10.12
15:34
+ маленькое уточнение:
происходит все в транзакции
6 Stim
 
24.10.12
15:34
т.е.

начатьТранзакцию();
Попытка
докОб.Номер = НомерДляПроверки;    
докОб.записать();
Исключение
докОб.номер = Номер;
докОб.записать();
КонецПопытки;

ЗафиксироватьТранзакцию()
7 Stim
 
24.10.12
15:35
и код поросенка

   Попытка
докОб.Номер = НомерДляПроверки;    
докОб.записать();
Исключение
Попытка
докОб.номер = Номер;
докОб.записать();
Исключение
Сообщить(ОписаниеОшибки());
Ошибки = ИСТИНА;
КонецПопытки;
КонецПопытки;


выдает ошибку
Ошибка при вызове метода контекста (Записать): В данной транзакции уже происходили ошибки!
8 Stim
 
24.10.12
15:35
т.е.

   Попытка
докОб.Номер = НомерДляПроверки;    
докОб.записать();
Исключение
Попытка
докОб.номер = Номер;
докОб.записать();
Исключение
Сообщить(ОписаниеОшибки());
Ошибки = ИСТИНА;
КонецПопытки;
КонецПопытки;
   
   если НЕ Ошибки тогда
       ЗафиксироватьТранзакцию();
   Иначе
       ОтменитьТранзакцию();
   КонецЕсли;
9 Stim
 
24.10.12
15:35
как это обойти?
10 Starhan
 
24.10.12
15:36
первый раз вставь Сообщить(ОписаниеОшибки());
и озвучь ошибку пжл
11 Stim
 
24.10.12
15:37
(10) неуникальное значение номера, первая ошибка
12 Stim
 
24.10.12
15:37
вторая - "В данной транзакции уже происходили ошибки!"
13 palpetrovich
 
24.10.12
15:39
(12)а без транзакции код из (1) ?
14 Starhan
 
24.10.12
15:39
а без начать транзакцию такой код работает?

Попытка
докОб.Номер = НомерДляПроверки;    
докОб.записать();
Исключение
докОб.номер = Номер;
докОб.записать();
КонецПопытки;

дело втом что любая запись это опять же транзакция :0
15 Stim
 
24.10.12
15:40
(14) без транзакции

докОб.номер = Номер;
докОб.записать();

прекрасно работает
16 bodri
 
24.10.12
15:43
Попытка
докОб.Номер = НомерДляПроверки;    
докОб.записать();
КонецПопытки;

ненадо тот же номер заного присваивать, при исключении можно добавить Сообщить(<<ЗДЕСЬ РУГАТЕЛЬСТВА>>)
17 Stim
 
24.10.12
15:46
(16) Александр, я спрашиваю ПОЧЕМУ ТАК ПРОИСХОДИТ и не КАК ЭТО СДЕЛАТЬ
если вы не знаете по сабже - просто ничего не пишите
18 Stim
 
24.10.12
15:47
тьфу. и = а

вобщем, код тестовый и в попытке все должно быть так, как есть
19 lubja
 
24.10.12
15:47
а ОбменДанными.Загрузка = Истина поможет?
20 Stim
 
24.10.12
15:47
вопрос можно ли обойти ошибку в транзакции
21 Stim
 
24.10.12
15:48
(19) блиин, ну причем тут это?
зы. ответь в ацку
22 lubja
 
24.10.12
15:48
(21) где куда чего ответить? )
23 Starhan
 
24.10.12
15:49
у тебя получается
НачатьТранзакцию()
Попытка
Исключение
опять НачатьТранзакцию() //при записи документа начимнается транзакция
КонецПопытки;

А если начать транзакцию в транзакции с ошибкой то вываливается ошибка. :)
ИМХО сам не тестил. но  можешь проверить.
24 Stim
 
24.10.12
15:49
(22) куда-нибудь
25 Stim
 
24.10.12
15:50
+ не могу пробиться через твой спам-фильтр) наверное, не случайно
26 Stim
 
24.10.12
15:57
(23) и как это обойти? мне нужно записать док в исключении, но с расчетом, что потом можно откатить транзакцию, если что
27 bodri
 
24.10.12
15:58
попробуй режим записи поставить в
докОб.записать();
28 Stim
 
24.10.12
15:58
(27) режим записи по умолчанию в записать, причем здесь это?
29 Stim
 
24.10.12
15:59
+ док прекрасно записывается, на него не действуют никакие проверки, кроме уникальности номера
30 Stim
 
24.10.12
16:04
неужели никак не побороть?
31 Живой Ископаемый
 
24.10.12
16:07
побороть.. не использовать попытку. искать самому.
32 Stim
 
24.10.12
16:08
(31) ага, так и придется скорее всего..
Закон Брукера: Даже маленькая практика стоит большой теории.