Имя: Пароль:
1C
1С v8
Управляемые блокировки, как сделать элементарщину?
,
0 Jokerman
 
08.05.13
15:00
Здрасте всем уважаемые, стал изучать эту возможность 1с, сделал как в статье. Перевел всю конфу в режим Автоматический и управляемый, у одного дока поставил режим - управляемый, и у регистра бухгалтерии, по которому он делает движения тоже. Прописал в модуле проведения:
       БлокировкаДанных = Новый БлокировкаДанных;
       ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрБухгалтерии.Хозрасчетный");
       ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
       ЭлементБлокировки.УстановитьЗначение("Организация", Организация);
       БлокировкаДанных.Заблокировать();

Хотел проверить чтобы хотя бы по одной организации только блокировал и фиг с два, результат тот же: Конфликт блокировок бла бла бла.
Что не так? Может в реализе проблема(8.2.14.540), или в скуле надо что-то покрутить не пойму.
1 Рэйв
 
08.05.13
15:01
Что точно пишет?
2 tushich
 
08.05.13
15:04
(0) а что делаешь вообще для возникновения конфликта блокировок?
3 ptiz
 
08.05.13
15:05
Должно работать.
База - серверная?
4 Jokerman
 
08.05.13
15:07
(1) Конфликт блокировок при выполнении транзакции ... Lock request time out period exceeded.
5 Jokerman
 
08.05.13
15:08
Движения.Хозрасчетный.БлокироватьДляИзменения = Ложь
В отладчике смотрел, в запросе первого дока который блокирует табличку нету ДЛЯ ИЗМЕНЕНИЯ (это так к информации)
6 ptiz
 
08.05.13
15:10
"Удаление движений" -  что стоит?
7 Jokerman
 
08.05.13
15:11
(2) Делаю так, в одном сеансе запускаю этот док(с одной организацией), в котором наладил эту фитчу. Пока он проводится (около 3 минут) во втором сеансе провожу другой док с другой организацией. Дает проводить несколько раз а потом, все наглухо пока транзация не завершится.
8 ИсчадиеADO
 
08.05.13
15:11
(5) оба документа одного вида? "Для изменения" - это для автоматич. блокировок
9 Jokerman
 
08.05.13
15:12
(6) Вроде как по всей конфе "Удалять автоматически" стоит
10 tushich
 
08.05.13
15:12
(7) Регистр не пустой?
11 Jokerman
 
08.05.13
15:12
(3) база серверная (8) доки разных видов
12 Jokerman
 
08.05.13
15:12
(10) нет, очень даже полный
13 ssh2012
 
08.05.13
15:13
(11) запусти профайлер и посмотри запрос, на котором отваливается
14 tushich
 
08.05.13
15:13
(12) Больше 1000 записей?
15 ИсчадиеADO
 
08.05.13
15:14
(11) дай угадаю, в одном доке автоматич. блокировка, а в другом управляемая?
16 Jokerman
 
08.05.13
15:14
(14) Да больше 1000
17 Jokerman
 
08.05.13
15:14
(15) Есть такое, надо теперь что во всех дока управляемую ставить?
18 ptiz
 
08.05.13
15:16
(17) Не надо. Убери удаление движений "автоматически" и смотри, как это сделано в типовых.
19 ИсчадиеADO
 
08.05.13
15:16
(17) ну не знаю. Управляемая - это когда блокировка идет на уровне сервера 1с, а автоматич.- на СУБД. Они друг о друге знают?
20 ptiz
 
08.05.13
15:17
(11) Стоп. Что значит "разных" видов?
Ты настраиваешь один вид документа. Т.е. два документа этого вида по разным организациям смогут проводиться параллельно.
Если будет проводиться этот документ + любой другой с "автоматическими" блокировкмми - будет блокировка.
21 ИсчадиеADO
 
08.05.13
15:18
когда у дока автоматическая блокировка вся транзакция в автоматич. идет
22 Jokerman
 
08.05.13
15:19
(20) типа второй док не обращается 1совскому менеджеру блокировок, а в СУБДшному?
23 ptiz
 
08.05.13
15:22
(22) Не в этом дело. Другим доком будет заблокирован тот же самый регистр.
24 Jokerman
 
08.05.13
15:23
Плз момент пробую, щас отпишусь...
25 Jokerman
 
08.05.13
15:26
Нет тоже самое, перевел второй док и его регистры в управляемый, пока не вижу эффекта ...
26 Jokerman
 
08.05.13
15:26
Попробую одинакового вида
27 ptiz
 
08.05.13
15:28
(26) Как проверяешь? Пробуй для начала параллельное проведение (без ПЕРЕпроведения), чтобы не влияло автоматическое удаление движений.
28 ИсчадиеADO
 
08.05.13
15:29
(25) а блокировку на 2ом как устанавливал?
29 Jokerman
 
08.05.13
15:31
(28) никак просто в свойствах поставил режим управляемый, а как правильно?
30 ИсчадиеADO
 
08.05.13
15:32
а код не писал чтоли? Ну и (27) дело грит
31 Jokerman
 
08.05.13
15:32
Указать чтобы блокирол тока свою организацию для начала?
32 ptiz
 
08.05.13
15:36
(31) И еще раз - как проверяешь?
Самый простой спосом - вставь Предупреждение() в разных местах:
перед блокировкой, после блокировки, в конце "ОбработкиПроведения" и запусти 2 сеанса, смотри в какой момент один сеанс начинает ждать другой.
33 Jokerman
 
08.05.13
15:38
Есть такое: одна маленькая победа: одинакого вида доки(ни разу не проведенные) провелись параллельно, идем дальше ...
34 Jokerman
 
08.05.13
15:50
Это все, хорошо работает, но только для вновь проводимых доков, чтобы проводились и те и другие автоматическое удаление движение надо поставить на любое другое, кроме "Удалять автоматически"???
35 ptiz
 
08.05.13
16:05
"Удалять автоматически" влияет на ПЕРЕпроведение и отмену проведения.
36 Jokerman
 
08.05.13
16:10
Спасибо огромное, помогли 2 совета. Не ожидал, что придется так много переделывать, это надо взять все доки, тогда в управляемый переводить, или по крайней мере самые "тяжелые", Спасибо (35) просвятил, сам бы не догадался, это факт.
37 Fragster
 
гуру
08.05.13
16:15
про итоги уже было?
38 Jokerman
 
08.05.13
16:18
Еще 2 маленьких вопроса, по сути, если я поменял режим в свойствах дока и регистров на управляемый, но ничего не дописал в модуле, то ничего блокироваться и проверяться не будет. Я к чему: если я всю конфу переводу в режим управляемых блокировок, какие последствия могут ожидать меня?
Второй: есть рекомендация: куда кусок по блокировке класть, в самом начале обработки проведения или еще где раньше?
39 Fragster
 
гуру
08.05.13
16:28
правильнее всего - сформировать все движения, вызвать Движения.Записать(), затем выполнить все проверки.
40 Fragster
 
гуру
08.05.13
16:28
ну и выставить режим "записыватьвыбранные"
41 Fragster
 
гуру
08.05.13
16:30
если же есть блокировки кроме движений - то тут есть шанс накосячить и получить дэдлок
42 Jokerman
 
08.05.13
16:31
(39) не понял, блокировку после Движения.Записать()?
43 Новиков
 
08.05.13
16:31
(38) взгляни лучше в типовую БП 2.0 - как там это универсально все сделано.
44 Fragster
 
гуру
08.05.13
16:32
(42) после движения.Записать() все блокировки уже будут автоматом наложены, в этом весь профит
45 ptiz
 
08.05.13
16:35
(38) "я поменял режим в свойствах дока и регистров на управляемый" - проще тогда просто в свойсте конфы указать "Управляемый".
Возможна только  1 бяка: если одновременно 2 юзера будут продавать один и тот же товар, система каждому из них даст списать полный остаток, можно уйти в минус.
46 Fragster
 
гуру
08.05.13
16:35
(44) остаются только блокировки, связанные с "другими" объектами, т.е. если для проверок используются не только записываемые регистры. в таком случае зависит от вероятности "отказа". если высокая - то блокировка и проверка в начале, если низкая - то блокировка и проверка - в конце.

Главное - не накосячить с порядком наложения блокировок и не использовать эскалацию блокировок - т.е. сначала накладывание раздеяемой блокировки, а затем исключительной. Сначала все исключительные, потом все разделяемые.
47 Fragster
 
гуру
08.05.13
16:36
(45) чтобы такого не было, надо использовать порядок из (39)
48 ptiz
 
08.05.13
16:36
(38) "куда кусок по блокировке класть" - перед запросом получения остатков.
49 Fragster
 
гуру
08.05.13
16:36
(48) если сначала записывать движения - то не надо куска с блокировкой, все будет заблокировано как надо.
50 ptiz
 
08.05.13
16:39
(49) Это только в случае, если ты сможешь угадать нужные движения, не получая остатки.
Если нужно вычислять себестоимость при списании, то - фиг вам :) Либо записывать 2 раза, что еще хуже.
51 Jokerman
 
08.05.13
16:41
(49) Простите как-то туманно, как не надо? как же это произойдет?
52 Fragster
 
гуру
08.05.13
16:42
(50) на самом деле такой подход (гасить сумму пропорционально остатку и списываемому количеству или там формировать фифо по партиям) - как раз и вызывает наибольшие тормоза по блокировкам.
53 Fragster
 
гуру
08.05.13
16:42
(51) это магия
54 Fragster
 
гуру
08.05.13
16:43
(52)+ тем более что Количество - контролируется, а сумма - нет (вычисляется)
55 Fragster
 
гуру
08.05.13
16:45
как вариант - план обмена и фоновое задание по исправлению суммы в случае необходимости или формированию движений по отдельному регистру с СС, если она по среднему, или там по партиям...
56 Fragster
 
гуру
08.05.13
16:48
даешь максимальную производительность!
57 alkov
 
08.05.13
16:49
(55) ТС вроде элементарщину просил, а ты умничаешь тут. Совсем запутаешь сейчас
58 Новиков
 
08.05.13
16:50
Jokerman верни все как было. Лучше все равно ты не сделаешь :)
59 Fragster
 
гуру
08.05.13
16:51
(57) ну СС при проведении - это фигатория же, в любом случае.
60 Fragster
 
гуру
08.05.13
16:52
(59)+ у меня сумма в регистре товарынаскладах - вообще реквизит, содержащий сумму документа
61 Fragster
 
гуру
08.05.13
16:52
(60)+ в смысле не ресурс
62 Jokerman
 
08.05.13
17:03
(58) почему уже лучше стало, веселее ... :)