Имя: Пароль:
1C
1С v8
Количество операций в транзакции
,
0 User_Agronom
 
10.04.14
17:21
Есть обработка, которая генерит много-много документов.
Но в процессе может быть создан некорректный элемент. Тогда получиться часть документов сгенерирована, а часть нет. Что недопустимо.

Есть идея использовать транзакцию. Т.е. перед началом генерации начать транзакцию, а если нашел ошибку транзакцию отменить.

Вопросы:
1. Будет ли работать этот вариант?
2. Какие неприятности могут встретиться?
3. Сколько документов (в штуках) может быть в транзакции?

PS Другие пути знаю, но эта обработка уже написана, поэтому этот самый наименее затратный путь.
1 fisher
 
10.04.14
17:25
1. Работать будет, если не (см. ниже)
2. Транзакции не рассчитаны на массовые операции - упор в ресурсы может случиться.
3. Зависит от сервака и объемов изменяемых данных.
2 Maxus43
 
10.04.14
17:27
поидее можно увидеть будет что каждая следующая "5-ти тыщная" операции будет медленнее и медленнее, опять же от объёма зависит.
3 fisher
 
10.04.14
17:29
Короче, с какого-то момента может начать жутко свопить и потом что фиксация транзакции, что её откат будут занимать прорву времени. Не говоря уже о том, что другим пользователям все это время нехорошо будет.
4 Maxus43
 
10.04.14
17:31
обмены напримерв транзакции идут, загрузка, у нас бывает и по 2 часа прёт, несколько мильёнов плохих данных... и ничо вроде, фиксится потом. Правда юзеры обычно курят бамбук в это время
5 Зойч
 
10.04.14
17:31
на эскалацию блокировок можно нарваться
6 Зойч
 
10.04.14
17:32
но если нужно либо все либо ничего то транзакция правильный вариант.
Но почему нужны все 5 тыщ документов одновременно непонятно
7 User_Agronom
 
10.04.14
17:37
(6) Там две базы и два буха. Один бух выгружает в файл, второй загружает из этого файла. Это уже написано. Но, в случае ошибки, повторная загрузка плодит дубли.
Говорится о 150-200 документах за раз. Базы файловые. Нужно решить задачу с минимальными потерями.
8 ДенисЧ
 
10.04.14
17:38
(7) переделать обработку, чтобы дубли не возникали - не предлагать?
9 Зойч
 
10.04.14
17:39
>>Но, в случае ошибки, повторная загрузка плодит дубли
Лучше пойти по исправлению этого момента
10 Gepard
 
10.04.14
17:39
(8) +1 по гуиду
11 Зойч
 
10.04.14
17:40
А то грузишь 9 999 документов 5 часов а на 10 000 ошибка.
И ты такой "бл.....я"
12 User_Agronom
 
10.04.14
17:41
(8) см (0) PS Другие пути знаю, но эта обработка уже написана, поэтому этот самый наименее затратный путь

Вставить три строки самый быстрый вариант.
13 _fvadim
 
10.04.14
17:43
(12) и самый неправильный
а если бух случайно предыдущий файл ещё раз загрузила?
14 Maxus43
 
10.04.14
17:50
по сабжу да, транзакция спасёт.
То что это всё кривоватенько организовано - уже сказано
15 User_Agronom
 
10.04.14
17:50
(9) Согласен. Думал об этом.
(13) Переписать:
1. Разобраться в назначении обработки.
2. Разобраться в структуре файла выгрузки.
3. Разобраться в коде загрузки.
4. Переделать код.
5. Тестировать код
6. Если тест не прошел переход к п.4

С транзакцией.
1. Найти цикл.
2. Перед началом цикла вставить команду начала транзакции
3. После конца цикла вставить команду конца транзакции
4. В теле цикла вставить проверку и, в случае непрохождения, команду отката транзакции и завершения процедуры.

Не в пример быстрее. Фактор времени актуален.
16 User_Agronom
 
10.04.14
17:51
(14) Организовано не мной. Нужно с минимальными потерями устранить эту недоработку.
17 Зойч
 
10.04.14
17:53
(15) а как борятся с ошибками? вот ошибка в файле и не грузится, как исправлять?
18 Maxus43
 
10.04.14
17:55
делай транзакцию, раз переделывать не будешь всё равно.
200 доков за раз - вобще ниочем
2 + 2 = 3.9999999999999999999999999999999...