Имя: Пароль:
1C
1С v8
Методы блокировки объектов
0 Septera
 
23.04.12
15:43
Решил навести порядок в фоновой обработке некоторых документов, помня примерно как это делается приступил к тестированию на SQL базе двух вариантов:
1. Заблокировать()
2. "ВЫБРАТЬ ДЛЯ ИЗМЕНЕНИЯ"

По сабжу что лучше то?
1 Maxus43
 
23.04.12
15:45
1. хз, помоему он не работает как хочется
2. работает в рамках транзакции
2 rs_trade
 
23.04.12
15:47
(0) Заблокировать()    это ты чей метод имеешь ввиду? так на всякий случай.
3 Septera
 
23.04.12
15:51
(1) тестил сейчас Заблокировать() на объектах документа, все отлично работает, параллельно с других компов добавлял новые документы, а то что транзакция нужна для второго варианта это да, но впринципе не страшно, главное результат))
(2) объект документа
4 Septera
 
23.04.12
16:08
Методика тестирования:
- на первом ПК запускаем:

ДокОбъект = Документы.ЗаказПокупателя.НайтиПоНомеру("УТ000034632", ТекущаяДата()).ПолучитьОбъект();
ДокОбъект.Заблокировать();
Секунды = 15;
СтрокаЗапроса = "ping -n 1 -w "+Строка(Формат(1000*Секунды, "ЧГ=0"))+" 127.255.255.255";
Соединение = Новый COMОбъект("WScript.Shell");
Соединение.Run(СтрокаЗапроса, 0, -1);

- на втором ПК через 5 секунд запускаем:

ДокОбъект = Документы.ЗаказПокупателя.НайтиПоНомеру("УТ000034632", ТекущаяДата()).ПолучитьОбъект();
ДокОбъект.Заблокировать();
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);

Результат: на втором ПК исключение: "Не удалось заблокировать запись."
5 Фауст
 
23.04.12
16:10
Ты теплое с мягким сравниваешь. Эти методы разные задачи решают они не взаимозаменяемые. У тебя задача какая ?
6 Reset
 
23.04.12
16:11
Порадовал метод получения паузы в 15 сек
7 Septera
 
23.04.12
16:12
(5) блокировать объект на время его использования и корректно отслеживать это на остальных пк
8 Фауст
 
23.04.12
16:20
Это что обработка которая документы проводит ? Чего боишся ? блокировкой от чего защитится хочешь ?
9 Septera
 
23.04.12
16:28
(8) прямо допрос)
1. обработка создает документы
2. дедлоков
3. от дедлоков
10 Фауст
 
23.04.12
16:33
Просто мало инфы чтобы тебе ответить...
Если от дедлоков то про Заблокировть() забуть, это вообще из другой оперы. Тебе нужно использовать "ДЛЯ ИЗМЕНЕНИЯ" И не в самой обработке, а в модуле проведения, это если их там еще нет, обычно если не самописка они там уже есть.
11 Septera
 
23.04.12
16:38
(10) "ДЛЯ ИЗМЕНЕНИЯ" уже полгода использую на одном очень агрессивном узле и там этот метод блокировки показал хороший результат, но подумал может есть лучший вариант, к примеру программная (поверхностная) блокировка объектов
12 Фауст
 
23.04.12
16:47
Не, так не получится, у тебя он не будет ждать пока блокировка снимется, просто отвалится, если наткнется. Ты блокируешь только документы но не регистры- дедлоки все равно не вылечатся. А один и тот же документ все равно одновременно нельзя записать разным пользователям, так что смысла не имеет.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.