Имя: Пароль:
1C
 
Отмена проведения в цикле кодом VS интерактивно в форме списка
0 Dmitry1c
 
01.06.20
10:56
Отмена проведения в цикле кодом VS интерактивно в форме списка

Почему-то установка в цикле по выборке УстановитьПометкуУдаления(Истина) стабильно отваливается с ошибкой конфлитка блокировок
При этом если интерактивно в форме списка делать, то ошибки конфликта блокировок нет

В базе работают пользователи, неск. десятков
Почему так?
1 Галахад
 
гуру
01.06.20
11:00
"интерактивно в форме списка", аесли кнопку быстрее нажимать? ;-)
2 Dmitry1c
 
01.06.20
11:01
(1) с выделением пачки доков разом, есессна
3 lodger
 
01.06.20
11:05
(0) потому что надо писать запрос с "заблокировать для изменения"
4 Dmitry1c
 
01.06.20
11:06
(3) данные документы, которые являются результатом выборки из запроса, рядовыми пользователями не используются.
5 mzelensky
 
01.06.20
11:06
(2) Как вариант делать в привилегированном режиме с пометкой "ОбменДанными.Загрузка = Истина"
6 Dmitry1c
 
01.06.20
11:07
(5) при "обмен данными. загрузка = истина" будет выполнена отмена проведения? в смысле очистки движений по регистрам.

прошу прощения за такой вопрос, сам должен знать.
7 mzelensky
 
01.06.20
11:08
(0) А если групповой обработкой, то будет отваливаться?
8 mzelensky
 
01.06.20
11:09
(6) Зависит от кода. Проверь. Если нет - грохни сам движения. Обычно это быстрее, т.к. ты просто очищаешь забор и записываешь. Без 100500 проверок.
9 Dmitry1c
 
01.06.20
11:09
(7) а фиг его знает, пока не могу проверить.

суть вопроса сводится к тому, есть ли разница между отменой проведения программно и интерактивно в форме списка.
10 lodger
 
01.06.20
11:10
(4) ты сам себе на пятки наступаешь.
пока а) идёт проведение и отработка всех событий первого вызова...
б) вызов номер N+1 успевает упереться в заблокированную в а) таблицу.
т.к. механически это разные транзакции.
а методология из (3) заставляет тебя делать единую транзакцию.
11 Cyberhawk
 
01.06.20
11:10
Ошибку-то покажи
12 Dmitry1c
 
01.06.20
11:12
(11) конфликт блокировки при выполнении транзакции
13 mzelensky
 
01.06.20
11:13
(10) Чет ты путаешь. Или описываешь не так.

Он получил выборку запросом. Обходит ее и делает "УстановитьПометкуУдаления(Истина)". В это самое "УстановитьПометкуУдаления(Истина)" уже заложены "идёт проведение и отработка всех событий первого вызова" и никакого "вызов номер N+1" не будет, пока транзакция установки пометки на удаление не закончится.
14 Dmitry1c
 
01.06.20
11:13
(13) именно
15 mzelensky
 
01.06.20
11:14
(14) Попробуй групповой обработкой с настройкой "без контроля записи". Так, чисто ради интереса.
16 vova1122
 
01.06.20
11:17
(0) Систематически валится ошибка или рандомно? Может попробовать это сделать на копии или без Юзверей.
17 vova1122
 
01.06.20
11:20
+(16) еще попробовать установить в цикле паузу. Вдруг код уже отработал, а винчестер еще пилит табличку
18 Dmitry1c
 
01.06.20
11:21
(17) вот такая мысль тоже была.

пауза средствами платформенная все еще не существует?
19 lodger
 
01.06.20
11:23
(13) это было бы 100% верно для файловой базы.
а теперь добавь сюда лаг от работы с СУБД.
20 mzelensky
 
01.06.20
11:25
(19) О каком лаге СУБД речь? Описанная транзакция будет именно на уровне СУБД.
21 lodger
 
01.06.20
11:26
(20) ага, только вот (0) происходит и имеет место быть.
22 mzelensky
 
01.06.20
11:32
(21) И что? То, что это происходит совершенно не означает, что твоя теория верна! Могут быть и другие причины.

Я могу предположить, что когда я "пукаю", то происходит цунами в Индийском Океане. И Даже если вдруг эти события действительно совпали, то это совершенно не подтверждает их прямую или даже косвенную взаимосвязь.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший