|
Управляемые блокировки | ☑ | ||
---|---|---|---|---|
0
Мэс33
17.10.13
✎
16:09
|
Вопрос назрел, други.
Правильно ли будет устанавливать управляемую блокировку на Регистр бухгалтерии таким образом? ОбъектБлокировки_БУ = Блокировка.Добавить("РегистрБухгалтерии.Типовой. ОбъектБлокировки_БУ.Режим = РежимБлокировкиДанных.Исключительный; ОбъектБлокировки_БУ.УстановитьЗначение("Регистратор", СтруктураШапкиДокумента.Ссылка); Документ должен просто записать данные в регистр, остатки и прочее - не важны. Используется Oracle в качестве БД. |
|||
1
Мэс33
17.10.13
✎
16:09
|
Сорри, скопировал неверно:
ОбъектБлокировки_БУ = Блокировка.Добавить("РегистрБухгалтерии.Типовой.НаборЗаписей"); ОбъектБлокировки_БУ.Режим = РежимБлокировкиДанных.Исключительный; ОбъектБлокировки_БУ.УстановитьЗначение("Регистратор", СтруктураШапкиДокумента.Ссылка); |
|||
2
Господин ПЖ
17.10.13
✎
16:10
|
если его там еще нет - не заблокируется вся таблица?
|
|||
3
Господин ПЖ
17.10.13
✎
16:12
|
и вообще смысл глобальный блокировать руками если надо "просто записать"
|
|||
4
Мэс33
17.10.13
✎
16:12
|
Тоже отличный вопрос?
|
|||
5
Мебиус
17.10.13
✎
16:12
|
Вопрос
Если нет чтения данных зачем вообще в этом случае устанавливать исключительную блокировку? |
|||
6
Мэс33
17.10.13
✎
16:13
|
Руками как понимает имеет смысл - так как этот один документ вводится массово. А оракл блокирует всю таблицу.
|
|||
7
Мебиус
17.10.13
✎
16:14
|
блокировка всей таблицы происходит если в таблице нет или очень мало записей
|
|||
8
krbIso
17.10.13
✎
16:14
|
при записи блокировки автоматом ставятся.
|
|||
9
Мэс33
17.10.13
✎
16:14
|
Что-то с моим "русским языком" не то.. под вечер с ошибками пишу. Заранее извиняюсь.
|
|||
10
Мебиус
17.10.13
✎
16:15
|
(6)
в транзакции блокируются только те записи, что читаются или изменяются |
|||
11
Мэс33
17.10.13
✎
16:15
|
А при перепроведении?
|
|||
12
Мэс33
17.10.13
✎
16:16
|
(10) То есть при записи - необходимости в блокировке нет точно?
|
|||
13
Мебиус
17.10.13
✎
16:17
|
да нет
|
|||
14
Мебиус
17.10.13
✎
16:17
|
только при проведении или перепроведении
|
|||
15
Мебиус
17.10.13
✎
16:18
|
и необходимости в управляемой блокировке вообще в данном случае нет
|
|||
16
Мэс33
17.10.13
✎
16:18
|
Но он - не мешает? По крайней мере?
|
|||
17
Мэс33
17.10.13
✎
16:20
|
(14) То есть, при создании движений, пока еще в регистре бухгалтерии нет записей по данному документу, блокировка в принципе не нужна? И блокировок не будет?
А если в этот момент создается другой документ? Или документ другого вида? Массово? |
|||
18
Мебиус
17.10.13
✎
16:22
|
(16)
Мешает, потому что ты блокируешь записи преждевременно в этот момент другой документ мог бы туда что нибудь записать то есть ты снижаешь производительность |
|||
19
Infsams654
17.10.13
✎
16:22
|
(0) из-за чего такой вопрос? Есть обработка, которая долго чего пишет ? Если такй нет, то и нечего блокировку ставить
|
|||
20
Мэс33
17.10.13
✎
16:23
|
(18) Какие записи блокируются преждевременно, если их нет на момент создания проводок?
|
|||
21
Мебиус
17.10.13
✎
16:24
|
(17)
управляемые блокировки имеют смысл только в том случае если ты что прочитал в транзакции (например таблицу партии для списания) а затем хочешь изменить |
|||
22
Новиков
17.10.13
✎
16:25
|
(20) откуда инфа? Космос? :)
|
|||
23
Новиков
17.10.13
✎
16:26
|
(20) посвечу в ваш космос своим дартаньяновским лучиком: а как же таблица итогов регистра? Она не изменяется, не - когда вы проводки то пишите? :)
|
|||
24
Мэс33
17.10.13
✎
16:26
|
(19) Есть УПП, в нем есть несколько документов с использованием управляемых блокировок. Остальные - с автоматическими блокировками.
Вопрос возникает, а если все важные документы перевести на управляемые? Но многие документы не проверяют остатки, а просто пишут проводки. Стоит ли тогда переводить на управляемые? |
|||
25
Мэс33
17.10.13
✎
16:26
|
(22) А вот я и не знаю. Вопрошать пришел сюда потому.
|
|||
26
Мэс33
17.10.13
✎
16:27
|
(23) Тут наверху сказали - зачем блокировать, если записи только создаются?
|
|||
27
Новиков
17.10.13
✎
16:28
|
(26) правильно сказали. Руками смысл блокировки только при записи никакой нет.
|
|||
28
Мэс33
17.10.13
✎
16:29
|
Хм... пошел думать. Домой.
Завтра продолжу эту ветку. Есть интересные вопросы. |
|||
29
Новиков
17.10.13
✎
16:33
|
>> Вопрос возникает, а если все важные документы перевести на управляемые?
Нужно смотреть не документы, а регистры. Выявлять те регистры, на которых проявляются блокировки. И уже по ним делать управляемые блокировки. >> Но многие документы не проверяют остатки, а просто пишут проводки. Ну и отлично. В РБ у тебя стоит скорее всего "разрешить разделение итогов". Это обеспечит отсутствие блокировок в момент записи. Всё гут. Зачем ты вообще задался этим вопросом? :) Пользователя начали жаловаться? Проявляются какие-то артефакты в прикладной логике решения? Или делать нефик просто? Если делать нефик - учи СКД, БСП, КД. Просто с дурки, как ты, можно сделать гораздо хуже, чем уже есть :) |
|||
30
Infsams654
17.10.13
✎
16:34
|
(28) "Есть УПП, в нем есть несколько документов с использованием управляемых блокировок" - это сродни тому, что "Есть обработка, которая долго чего пишет ". Т.е. при проведении этих документов не должно что-то такое нахлыбустнуть от кого-то постороннего.
Но это уж явно крайне редкий случай |
|||
31
Мебиус
17.10.13
✎
16:38
|
(30)
то за бред? ТС пытался установить приправляемую блокировку там где она в принципе не нужна, ему объяснили что это неправильно а ты о чем? |
|||
32
Мебиус
17.10.13
✎
16:38
|
(30)
"Т.е. при проведении этих документов не должно что-то такое нахлыбустнуть от кого-то постороннего" это явно клинический случай)) |
|||
33
Новиков
17.10.13
✎
16:40
|
(32) задайся вопросом, ТС помнит наизусть табличку, в которой показано какая блокировка будет установлена в транзакции, в зависимости от типа управления блокировкой на документе и регистре.
Ну кароче. Совет автору - не лазить пока туда. 100% решение верное, в данном случае :) |
|||
34
exwill
17.10.13
✎
16:45
|
(0) Блокировки имеет смысл устанавливать на другие поля, но не на регистратор. Подумай сам, какой смысл в блокировке на регистратор?
|
|||
35
Новиков
17.10.13
✎
16:49
|
(34) Если ТС пишет запрос, в котором принимает решение об отказе по анализу регистратора, то вот тебе и смысл. Его тупо никто не должен даже прочитать. В чем проблема?
|
|||
36
exwill
17.10.13
✎
16:56
|
(35) Блокируется регистр.
|
|||
37
Мебиус
17.10.13
✎
16:59
|
(35)
кого прочитать? регистратор? (34)смысл может быть но не в данном случае |
|||
38
Новиков
17.10.13
✎
17:01
|
(37) регистратор. Если так алгоритм построен, что отказ принимается по прочитке какого-то потрошонка из регистратора
(36) с чего вдруг? |
|||
39
Новиков
17.10.13
✎
17:04
|
(37) хотя в этом случае, в упр.блокировках нужно разделяемую блокировку накладывать, а не исключительную. Исключительную, если мы вдруг соберемся потрошонка менять. Вот так я полагаю как-то. Есть смысл, когда стоит лочить сам регистратор.
Я пока такого в практике не видел, но скорее всего, такое бывает :) |
|||
40
McNamara
17.10.13
✎
17:09
|
(0)Давайте рассуждать логически, есть 4 уровня изоляции:
1)запись-запись 2)запись-чтение 3)чтение-запись 4)чтение-запись новой Управляемая блокировка в 1с понижает уровень изоляции до 2. То есть при записи будет все просходить все равно автоматически, а при чтении уже можно что-то изолировать в коде. Следовательно вывод, если транзакция пишет данные и ничего не читает, то система и так отработает сама, никакие блокировки устанавливать не нужно. |
|||
41
McNamara
17.10.13
✎
17:14
|
(0) то есть если ты пишешь в регистр, то это транзакция записи. И она будет защищена от других транзакций по 2 уровню изоляции. То есть система сама при таком уровне изоляции не даст другим читающим и пишушим транзакциям ничего одновременн записать. Делать в этом случае блокировку в коде- ни на что не повлияет то есть бессмысленно...вроде так.
|
|||
42
Мэс33
18.10.13
✎
06:52
|
Доброе утро.
Итак... я на работе. Пришел снова с теми вопросами. Насчет моего кода во втором комментарии - он уже стоит в документе, его написали до меня. Как понимаю, есть два вывода: 1) чтобы при перепроведении не было взаимоблокировок, лучше ставить управляемую блокировку (напомню, БД - Оракл, на регистре бухгалтерии и в документе стоит - управляемые блокировки); 2) применить лучше разделяемые блокировки, так как в принципе в этом документе не важны, какие были остатки на счетах, блокировать нечего для чтения другими документами. Верно? (41) Это я уже понял, что при записи будет блокировка в любом случае. Но при перепроведении - лучше ставить? Или я не прав. ЖКХ - читал, но видимо мне этого недостаточно. Есть примеры в инете, но все авторы там рассуждают о списании остатков товаров, где важно иметь точные данные об остатках. |
|||
43
floody
18.10.13
✎
06:58
|
вроде уже выяснили, что блокировки накладывать в данном случае не нужно?
|
|||
44
Мэс33
18.10.13
✎
07:07
|
А теперь - внимание.
Код другого документа. Там есть движения по регистру накопления, остатки которого на момент проведения документа - важны. Имеется код, уже написанный, кто прокомментирует? Блокировка = Новый БлокировкаДанных; ОбъектБлокировки_БУ = Блокировка.Добавить("РегистрБухгалтерии.Типовой.НаборЗаписей"); ОбъектБлокировки_БУ.Режим = РежимБлокировкиДанных.Исключительный; ОбъектБлокировки_БУ.УстановитьЗначение("Регистратор", СтруктураШапкиДокумента.Ссылка); // Для каждого СтрокаНовыйДоговор из ТаблицаПоГрафику Цикл Если не ПустаяСтрока(СтрокаНовыйДоговор.НомерНовогоДоговора) Тогда ОбъектБлокировки_НовыйДоговор_БУ = Блокировка.Добавить("РегистрНакопления.НекийРегистр"); ОбъектБлокировки_НовыйДоговор_БУ.Режим = РежимБлокировкиДанных.Исключительный; ОбъектБлокировки_НовыйДоговор_БУ.УстановитьЗначение("НомерДоговора", СтрокаНовыйДоговор.НомерНовогоДоговора); КонецЕсли; КонецЦикла; // ОбъектБлокировки_НовыйДоговор = Блокировка.Добавить("Документ.НекийДокумент"); ОбъектБлокировки_НовыйДоговор.Режим = РежимБлокировкиДанных.Разделяемый; ОбъектБлокировки_НовыйДоговор.УстановитьЗначение("Ссылка", СтруктураШапкиДокумента.Ссылка); // ОбъектБлокировки_НовыйДоговор_БУ = Блокировка.Добавить("РегистрНакопления.НекийРегистр"); ОбъектБлокировки_НовыйДоговор_БУ.Режим = РежимБлокировкиДанных.Разделяемый; ОбъектБлокировки_НовыйДоговор_БУ.УстановитьЗначение("НомерДоговора", СтруктураШапкиДокумента.Номер); // ОбъектБлокировки_НовыйДоговор_БУ = Блокировка.Добавить("РегистрБухгалтерии.Типовой"); ОбъектБлокировки_НовыйДоговор_БУ.Режим = РежимБлокировкиДанных.Разделяемый; ОбъектБлокировки_НовыйДоговор_БУ.УстановитьЗначение("Счет", ПланыСчетов.Типовой.НекийСчет); ОбъектБлокировки_НовыйДоговор_БУ.УстановитьЗначение("Субконто2", СтруктураШапкиДокумента.Ссылка); //в субконто ссылка на сам документ Блокировка.Заблокировать(); //{тут собственно проводки формируются с расчетом остатков по РН.НекийРегистр //тут собственно проводки формируются} ПроводкиБУ.Записать(Ложь); ДвиженияПереносимыхПремий.Записать(Ложь); |
|||
45
Мэс33
18.10.13
✎
08:33
|
UP
|
|||
46
mikeA
18.10.13
✎
09:16
|
(45) что ап, спалился ты )))
ДвиженияПереносимыхПремий.Записать(Ложь); |
|||
47
Мэс33
18.10.13
✎
09:27
|
(46) Вот блин :-)) а вроде старался тариться :-)
|
|||
48
Infsams654
18.10.13
✎
09:39
|
(31) еще на мотоцикле. Это не Defender ?
|
|||
49
Новиков
18.10.13
✎
10:22
|
(44) пояснения к твоему коду:
Набор записей РБ документа будет где-то дальше изменяться, т.к. он лочится исключительно. Дальше идет глупейший цикл, но смысл тот же: в РегистрНакопления.НекийРегистр будет что-то писаться. Из РегистрНакопления.НекийРегистр будет что-то читаться ниже. Из РБ также будет что-то читаться с отбором по счету и субконто2. Кроме цикла, претензий у меня нет. Все гут. |
|||
50
Мэс33
18.10.13
✎
10:31
|
Ну слава Аллаху.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |