Имя: Пароль:
1C
1С v8
Попытка в транзакции или транзакция в попытке?
0 Shved_72
 
09.01.16
14:35
Обработка обрабатывает данные.
При включении транзакции в каком то месте вылетает ошибка "В данной транзакции уже происходили ошибки" и завершить работу.
Как заставить перепрыгнуть через такие ошибки и идти дальше.
При отключении транзакции всё гуд - т.е. то место проскакивает и робит дальше.

Щас схема такая:
НачатьТранзакцию()
попытка
   попытка
     попытка
       ..... и так мноного много вложеннгных попыток
     конецппопытке
   конецппопытке
  конецппопытке
ЗафиксироватьТр
Исключение
ОтменитьТр
конецСамойВерхнейпопытке


подозреваю что срабатывая на любом уровне вложенности попытки, исключение вырубает все верхнестоящие попытки и транзакцию целиком
1 Shved_72
 
09.01.16
14:37
Пробовал запуск и отмену через проверку актвиности

Если (НЕ ТранзакцияАктивна()) и (ЧерезТранзакцию) Тогда
            НачатьТранзакцию();
        КонецЕсли;

но пока никак
2 Heckfy
 
09.01.16
15:01
А если сначала через попытки сформировать ТЗ, например, с необходимой иформацией, а потом в транзакции эту ТЗ обработать....
3 Записьдампа
 
09.01.16
15:08
(1) Программирование методом тыка?

При возникновении исключения, связанного с обращением к базе, транзакция считается поломанной и первое же обращение к базе после развала приводит к сообщению об ошибке. Единственное, что можно сделать после такого сключения - отменить транзакцию.
Так что переписывай копрокод из вложенных попыток на проверку условия, типа если успешно тогда следующий шаг иначе отменить транзакцию возврат
4 Heckfy
 
09.01.16
15:11
И да, по вопросу сабжа, вообще то транзакция должна быть в попытке. :)
5 Записьдампа
 
09.01.16
15:14
(4) Почему?
6 Злопчинский
 
09.01.16
15:28
(4)  если исходить из того что предыдущий код написан корректно то сама инициализация транзакции не приводит ни к каким блокировкам и поэтому какой смысл  нициализацию транзакции обертывать в попытку?
7 Shved_72
 
09.01.16
15:55
(3) перескочить через исключение нельзя?
если в одной транзакции записывается 100 объектов и на 90ой ошибка, нельзя ли побрить только одну 90ую, а 99 успешно записать?
8 Shved_72
 
09.01.16
15:58
т.е. транзакция не рекомендует попытки ваще, ибо если чото не так то тока "Завершение работы".
а нельзя Исключение переобределить и просто молча поругаться и дальше идти?
ПС гдето в детстве читал про яву и исключения
9 Злопчинский
 
09.01.16
16:00
(7) в чем смысл транзакци подумай
Обертывай в транзакцию каждый объект
10 Shved_72
 
09.01.16
16:00
и почему в этом случае не спасает метод ТранзакцияАктивна() ведь я не отменяю и не пытаюсь фиксировать транзакцию если ТранзакцияАктивна()=Ложь, т.е. по идее должен дальше идти
11 Shved_72
 
09.01.16
16:01
(9) в моем случае в скорости. 100 за раз пишет быстрей чем 100 по 1
12 Shved_72
 
09.01.16
16:04
обёртывается кусок какой то бизнес-логики, который по частям не имеет смысла и существовать не может.
хотя наверно да. изза этого смысла смысл Завершения работы понятен. несмог кусок записать - иди домой
13 Drac0
 
09.01.16
16:13
(7) Транзакция в первую очередь должна гарантировать целостность данных, потом все остальное. Поэтому ошибка в одной записи из ста в транзакции должна откатить всю транзакцию.
14 Shved_72
 
09.01.16
16:17
ок. уговорили. буду ускорять другими методами
15 Shved_72
 
09.01.16
16:17
как из оперативной памяти сделать диск залить туда базу
16 Злопчинский
 
09.01.16
16:20
(15)  хз я сколько ни пробовал на клюшках закинуть базу в рамдрайв - пользы это практически не принесло

Имеет смысл сначала темпы переназначить на рамдрайв
17 Shved_72
 
09.01.16
16:36
(16) темпы скуля? или от агента 1с? а кстати можно ли только их переназначить файлы создаваемые rmngr.exe? они вторые по потреблению диска
18 Shved_72
 
09.01.16
16:38
хотя это лгбд. пусть пишет
19 Shved_72
 
09.01.16
16:41
а писиай ссд ктонить юзал? вроде эта шина быстрей
http://technopoint.ru/catalog/i1016980/ssd-nakopitel-plextor-m6e-black-edition
PCI-E, чтение - 770 Мбайт/с, запись - 580 Мбайт/с