|
Заблокировать данные для программного изменения
| ☑ |
0
Kaban
08.04.14
✎
13:13
|
Добрый день,
есть необходимость обработкой изменять большой объем заказов клиентов, от 300 до 500 штук за раз. Обработка может быть запущена несколькими пользователями, заказы могут пересекаться это раз, заказ может быть открыт у другого пользователя это два. Каким образом можно сперва проверить на блокировку, а при ее отсутствии заблокировать нужное число документов, в т.ч. для программного изменения?
Заранее спасибо.
|
|
1
Heckfy
08.04.14
✎
13:17
|
Не?
|
|
2
Heckfy
08.04.14
✎
13:17
|
Заблокировать (Lock)
Синтаксис:
Заблокировать()
Описание:
Выполняет блокировку объекта от изменения другими режимами или пользователями.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Пример:
Попытка
Объект.Заблокировать();
Исключение
Текст = "ru = ""Не удалось заблокировать объект"";"
+ " en = ""Can't lock the object""";
Предупреждение(НСтр(Текст) " """ + Объект + """!
|"+ ОписаниеОшибки());
КонецПопытки;
|
|
3
Maxus43
08.04.14
✎
13:18
|
я за запрос.
ДЛЯ ИЗМЕНЕНИЯ
|
|
4
Kaban
08.04.14
✎
13:19
|
если хоть один объект заблокирован, нужно выдавать ошибку
|
|
5
Maxus43
08.04.14
✎
13:23
|
тогда запрос. В транзакции явной
|
|
6
vi0
08.04.14
✎
13:55
|
(5) или в неявной
|
|
7
Maxus43
08.04.14
✎
14:00
|
(6) ну главное в транзакции, без неё не заблокируется
|
|
8
vi0
08.04.14
✎
14:04
|
(7) и только если режим блокировок автоматический)
|
|
9
vi0
08.04.14
✎
14:06
|
(0)
до кучи
такая методика некорректная:
> сперва проверить на блокировку, а при ее отсутствии заблокировать нужное число документов
т.к. между этими действиями состояние данных может измениться
т.е. нужно сразу выполнять попытку блокировки
|
|