|
Управляемые блокировки, как сделать элементарщину? | ☑ | ||
---|---|---|---|---|
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) почему уже лучше стало, веселее ... :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |