Имя: Пароль:
1C
1С v8
Конфликт блокировок при записи документа
0 kupreeff
 
15.05.15
09:44
Имеется обработка, в которой создаются документы.
В момент работы обработки, в базе работают пользователи. Они работают с данным видом документа, но пересечений по объектам нет (т.е. пользователь не открывает те документы, которые участвуют в обработке).
Обработка спотыкается при записи документа и выдает сообщение: Конфликт блокировок при выполнении транзакции. Можно ли это как-то обойти, чтобы обработка при записи документа ожидала, пока освободится блокируемая таблица?
1 ИС-2
 
naïve
15.05.15
09:52
если sql, то можно увеличить время ожидания блокировки на сервере (к админам). Но где-то в самой 1c видел такую настройку
2 kupreeff
 
15.05.15
10:19
(1) не sql
3 Cyberhawk
 
15.05.15
10:20
(0) "обойти, чтобы обработка при записи документа ожидала" она и ожидает, 20 секунд по умолчанию
4 Cyberhawk
 
15.05.15
10:21
Метод объекта Заблокировать() в попытке даст тебе пищу для размышлений
5 H A D G E H O G s
 
15.05.15
10:22
(2) Никак. На файловой блокируется вся таблица документа - только проводить в цикле, в попытке "попасть" в промежуток, когда никто другой не проводит.
6 H A D G E H O G s
 
15.05.15
10:22
(4) Не даст.
7 H A D G E H O G s
 
15.05.15
10:23
(1) Администрирование->Параметры ИБ в конфигураторе
8 kupreeff
 
15.05.15
10:24
(4)Заблокировать() блокирует целиком таблицу?
9 ИС-2
 
naïve
15.05.15
10:25
(2) можно в наглую заблокировать всю таблицу, но тогда у пользователей будут блокировки
10 H A D G E H O G s
 
15.05.15
10:26
(8) нет.
(9) Это, если ему дадут это сделать.
11 kupreeff
 
15.05.15
10:29
(9) можно и в наглую. а как? прости за наглость :)
12 Serg_1960
 
15.05.15
10:29
(0) Если записать но не проводить - то Объект.ОбменДанными.Запись() - даже коврик из под ног юзвера выдергивает :)
13 H A D G E H O G s
 
15.05.15
10:30
(12) То есть?
14 kupreeff
 
15.05.15
10:31
(7) есть такое дело! что там лупануть, чтобы ни себя не людей не обидеть? Сейчас там 20 сек. Неужто этого мало? А может дело в том, что документы эти открыты в момент записи моего документа?
15 Serg_1960
 
15.05.15
10:31
Тьфу, не Запись - Загрузка = Истина. Оговорился. Тяпница :)
16 H A D G E H O G s
 
15.05.15
10:32
(15) И какой эффект это производит?
17 kupreeff
 
15.05.15
10:32
(12) я не провожу, я их записываю. А не поленишься еще раз другими словами написать? Спасибо.(В 8-ке туп я, как вы поняли)
18 H A D G E H O G s
 
15.05.15
10:33
(14) Нет. Тебе мешают только проводящиеся документы. Вообще, там у вас у всех должны быть конфликты блокировок.
19 kupreeff
 
15.05.15
10:36
(18) сказть им, чтоб пока я тут мудохаюсь, не проводили этот документ?
20 H A D G E H O G s
 
15.05.15
10:36
Даже если ты записываешь - могут блокироваться индексы документа, сомневаюсь что в файловой поддерживается блокировка части индекса, как в sql.

Переходи на sql.
21 H A D G E H O G s
 
15.05.15
10:37
Сколько пользователей в базе?
22 kupreeff
 
15.05.15
10:38
(21) да это обработка на один раз, переношу из другой программы данные.
23 Serg_1960
 
15.05.15
10:42
(17) Это старый баян. Отключаются проверки и запись будет выполнена даже если этот документ открыт у какого-либо юзвера - он получит ошибку типа "Операция не может быть выполнена из-за несоответствия версии..."

ОбъектДокумент.ОбменДанными.Загрузка = Истина;
ОбъектДокумент.Записать();
24 H A D G E H O G s
 
15.05.15
10:43
(23) Ясно.
25 Альбатрос
 
15.05.15
10:44
(23) куясе...
26 Serg_1960
 
15.05.15
10:45
(24) Это в ответ на "А может дело в том, что документы эти открыты в момент записи моего документа?"(14)
27 ИС-2
 
naïve
15.05.15
10:59
(11) хороший вопрос. Например, выбрать в запросе 1 документ с блокировкой таблиц (см. закладку Дополнительно, галка Блокировать таблицы для изменения). Не - как тогда самому писать.
Задаю вопрос.
Как можно заблокировать таблицу документов для всех пользователей, кроме себя?
28 H A D G E H O G s
 
15.05.15
11:09
(27) В файловой ИБ это делается так:

НачатьТранзакцию();

Запрос=Новый Запрос;
Запрос.текст=
"Выбрать Первые 1 Из Документ.ПКО";
Запрос.Выполнить();
........
29 Serg_1960
 
15.05.15
11:33
"Блокировка = Новый БлокировкаДанных;" спачет отца русской демократии? :)
Имхо, в файловой версии блокировки на уровне таблиц и любое блокирование любой записи = блокирование всей таблицы записей.
30 H A D G E H O G s
 
15.05.15
11:34
(29) нет.