Имя: Пароль:
1C
1С v8
Поможет ли транзакция избежать ошибок и дублей в регистре
0 Coldboy
 
05.09.12
11:13
Здравствуйте. Есть файл, беру данные из файла и записываю в регистр сведений, потом беру данные из регистра и их обрабатываю и записываю в другой. И вот хочется, если бы на этом этапе вылетит ошибка отлетел сервер или еще че-нить подобное свет обрубили, то процесс начнется заного, а все его этапы сгорят. Я сделал, так, не знаю поможет ли это и правильно ли, но вот
Попытка
НачатьТранзакцию();
ОбработкаDCCCAФайла(Таблица,ОткрытыйФайл.ПолноеИмя);            ЗаписьВDСCCAРегистр(Таблица,Строка(ОткрытыйФайл.Имя));
Обработки.Анализ.Создать().НачатьРаботу();
УдалитьФайлы(ОткрытыйФайл.ПолноеИмя);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
КонецПОпытки;
Не удалится ли файл, и откаться ли изменения при таком коде?
1 ОбычныйЧеловек
 
05.09.12
11:18
(0) Время на проверку (удалится файл или нет) у тебя заняло бы максимум 5 минут, но ты не поленился и написал вопрос на форум и сидишь ждешь ответа....
2 Coldboy
 
05.09.12
11:47
(1) вопрос в том случае, если сервер слетит) не сидеть же мне щас сервер рубить, когда все работают
3 Coldboy
 
05.09.12
11:47
(1) а еще мой вопрос касался, данных который я пытался запихнуть с файла зайдут или нет. Мне нужно либо зашли разом, либо не зашли и ждали новую попытку ...
4 Maxus43
 
05.09.12
11:48
ничего никуда не откатится за пределами БД
5 Coldboy
 
05.09.12
11:48
(4) в смысле не откатится?
6 Maxus43
 
05.09.12
11:49
работа с файлами - безусловное действие, если удалиш внутри транзакции а потом её отмениш - файлы не воскреснут
7 Heckfy
 
05.09.12
11:51
ИМХО, все действия запихнуть в одну процедуру, а там уже использовать транзакцию.
8 Reset
 
05.09.12
11:51
(6) Вот облом, я думал как раз с начальством строгий разговор провести, надеялся, если что, отменить транзакцию
9 Serg_1960
 
05.09.12
11:54
(0) Имхо: удалять надо только тогда, когда транзакция зафиксирована без ошибок - т.е после обработки и сохранения данных в базе.

(6) +1 транзакция - это только для "внутреннего употребления", только для данных самой БД.
10 pumbaEO
 
05.09.12
11:59
(2) для этого надо иметь тестовый сервер, даже на рабочей машинке на другом порту запустить.
11 MrStomak
 
05.09.12
12:05
загонять файл в хранилище значения, делать всё в транзакции, по окончании транзакции писать файл из хранилища на диск
12 Coldboy
 
05.09.12
12:06
Да извините.
Попытка
НачатьТранзакцию();
ОбработкаDCCCAФайла(Таблица,ОткрытыйФайл.ПолноеИмя);            ЗаписьВDСCCAРегистр(Таблица,Строка(ОткрытыйФайл.Имя));
Обработки.Анализ.Создать().НачатьРаботу();
ЗафиксироватьТранзакцию();
УдалитьФайлы(ОткрытыйФайл.ПолноеИмя);
Исключение
ОтменитьТранзакцию();
КонецПОпытки;

так будет корректнее.
13 Coldboy
 
05.09.12
12:09
щас файл удалится, после фиксации транзакции, тобишь он не нужен, в остальном случае уйдет все исплючение и отменит транзакцию, правильно рассуждаю?
14 MrStomak
 
05.09.12
12:12
(13) Да.
15 Coldboy
 
05.09.12
12:13
Всем спасибо за помощь!