|
Блокировка данных | ☑ | ||
---|---|---|---|---|
0
MSOliver
03.11.11
✎
07:25
|
Если я опишу исключительную блокировку данных регистра накопления, зафиксирую её, заблокирует ли она таблицу итогов РН если у него включено свойство Разрешить разделение итогов. При этом запись набора с со свойством БлокироватьДляИзмения = Истина делать не буду.
|
|||
1
MSOliver
03.11.11
✎
07:25
|
Добавлю: а если опишу разделяемую блокировку?
|
|||
2
golden-pack
03.11.11
✎
07:43
|
ms sql 2008 ?
|
|||
3
MSOliver
03.11.11
✎
07:57
|
да
|
|||
4
gkvgkv
03.11.11
✎
08:00
|
(0) слущай, зачем такой вопрос задаешь да, завтра празник, выходной.
|
|||
5
MSOliver
03.11.11
✎
08:21
|
(4) я так понял вопрос не верно сформулирован? Так?
|
|||
6
DmitrO
03.11.11
✎
08:39
|
(0)Да, заблокирует. И при исключительной, и при разделяемой.
|
|||
7
apokrit
03.11.11
✎
08:40
|
(0)
> заблокирует ли она таблицу итогов РН если у него включено свойство Разрешить разделение итогов Нет. Блокировки между разными пространствами сами по себе не пересекаются. От режима блокировки это не зависит. В момент записи набора записей платформа итоги конечно заблокирует. Но без БлокироватьДляИзмения, блокировка будет с учетом разделителя. Т.е. блокировка будет совместима с другими такими же (полученными от записи набора), но несовместима с явно установленными из языка (или через БлокироватьДляИзмения) |
|||
8
apokrit
03.11.11
✎
08:42
|
(0) В дополнении к (7) для самостоятельной проверки нужно всего несколько минут потратить.
Советую так и поступить, а то вдруг я вру? Большинство пока считает, что так и есть. |
|||
9
apokrit
03.11.11
✎
08:44
|
Нда, тяжелое утро.
Подумал что (3) - это ответ на вопрос. Вопрос в (2) тупой задан. Менеджеру управляемых блокировок все равно какая СУБД используется, если только это не файловая ;) |
|||
10
MSOliver
03.11.11
✎
08:45
|
(8) да проверить то пока не получается, ибо я не знаю сколько у меня записей в таблице итогов с одинаковыми комбинациями измерений и разными разделителями. Как посмотреть? Может он одну и блокирует?!
|
|||
11
MSOliver
03.11.11
✎
08:48
|
(6) а Павел Белоусов на лекциях пишет так.
Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина; Движения.ОстаткиНоменклатуры.Записать(); Блокирока = Новый БлокировкаДанных; ЭлементБлокировки = Блокирока.Добавить("РегистрНакопления.ОстаткиНоменклатуры"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура"); Блокирока.Заблокировать(); |
|||
12
DmitrO
03.11.11
✎
08:53
|
(11)и что из этого следует?
|
|||
13
apokrit
03.11.11
✎
08:55
|
(10) А зачем знать-то?
Это внутренняя кухня платформы. Если явно блокируем или с БлокироватьДляИзменения - блокируются все значения разделителя итогов. Если просто набор записываем, только то значение которое при записи этого набора используется. Проверить очень просто: попробовать при установленной блокировке установить еще одну относительно пересечения которой с исходной есть вопросы. Для этого можно например выполнять первую транзакцию в толстом клиенте и в конце поставить Предупреждение. (11) Если СписокНоменклатуры это то что мы и писали собственно, то смысла в таком коде не видно ни какого. Вообще можно через событие TLock тех журнала явно смотреть что платформа блокирует. |
|||
14
MSOliver
03.11.11
✎
08:56
|
Так зачем он пишет...
Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина; //Если включено разделение итогов Движения.ОстаткиНоменклатуры.Записать(); Если вот это ВСЁ заблокирует Блокирока = Новый БлокировкаДанных; ЭлементБлокировки = Блокирока.Добавить("РегистрНакопления.ОстаткиНоменклатуры"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура"); Блокирока.Заблокировать(); |
|||
15
apokrit
03.11.11
✎
09:03
|
(14) Лишняя вторая часть кода, а не первая.
Движения все равно записывать. Правда предложенный способ не кошерный, записывать их нужно через Движения.Записать(), а не Движения.<ИмяРегистра>.Записать() Может от 8.1 код остался (там БлокироватьДляИзменения не было). Вообще некомпетентность авторов курсов - это совершнно нормальная ситуация. Довольно часто встречается. Ведь это обычный бизнес, такой же как франчовый например. |
|||
16
MSOliver
03.11.11
✎
09:04
|
Белоусов Павел, 1С
Свойство набора записей "БлокироватьДляИзменения" говорит платформе о том, надо ли при установке транзакционных блокировок игнорировать (Истина) или нет (Ложь) режим разделения итогов (про режим разделения см. на ИТС статью «Устройство и использование режима разделения итогов регистров»). Поэтому, использовать это свойство необходимо только тогда, когда данный режим включен в настройках регистра. Транзакционные блокировки устанавливаются: При вызове метода Записать() набора записей регистра или одноименного метода у всей коллекции движений документа - по данным, указанным в наборе; При вызове метода "Заблокировать()" у объекта БлокировкаДанных - по данным, которые Вы указали сами при работе с данным объектом При этом, в случае использования метода "Заблокировать()" режим разделения итогов всегда игнорируется. Выбор варианта установки блокировок зависит от того, может платформа сама узнать - какие записи блокировать или нет. Если может: например, по данным записываемого набора платформа может сама узнать, что надо блокировать, то явно блокировку ставить не надо. Если же платформа сама эту проблему решить не может, тогда мы ей подсказываем, используя объект БлокировкаДанных, с помощью которого явно описываем в какой таблице, какие записи надо блокировать. |
|||
17
DmitrO
03.11.11
✎
09:05
|
(14)понятия не имею, т.к. вырвано из контекста, не известна структура регистра, неизвестен функционал проведения документа (есть там контроль остатков, нет?, когда он происходит?)
Режим разделения итогов никак не влияет на блокирование записей при осуществлении блокирования объектом БлокировкаДанных (при управляемых блокировках), и при блокировании чтением (автоматических блокировках). Всегда будут заблокированы все записи по комбинациям измерений. |
|||
18
MSOliver
03.11.11
✎
09:08
|
Контекст: Начало модуля Расходной накладной при списании по партиям.
"При этом, в случае использования метода "Заблокировать()" режим разделения итогов всегда игнорируется." - это говорит о том что все записи таблицы итогов блокируется? |
|||
19
DmitrO
03.11.11
✎
09:12
|
(18) не все записи, а все записи по комбинациям измерений (без учета разделителя итогов).
|
|||
20
apokrit
03.11.11
✎
09:19
|
(16) Белоусов Павел это не сотрудник фирмы 1С. И даже если бы это было так, то какая собственно разница?
Там что какие-то особенные люди работают? Свойство БлокироватьДляИзменения говорит платформе о том что нужно заблокировать пространство итогов записываемого регистра по всем комбинациям значений измерений, вошедшим в набор, без учета разделителя. Вместо этого можно просто явно блокировку создать, дальше это собственно и написано: >При этом, в случае использования метода "Заблокировать()" режим разделения итогов всегда игнорируется. Правда конечно довольно непонятно написано. (18) Если бы всегда блокировались записи без учета разделителя, то это просто значило бы что разделение итогов не работает... |
|||
21
DmitrO
03.11.11
✎
09:28
|
(20)Разделение итогов работает, только при непосредственной записи наборов, и не работает при блокировании (как я и написал в (17)). То что разделение итогов не работает при блокировании соответствует логике работы системы (по пролетарски сказать: это правильно).
|
|||
22
5 Элемент
03.11.11
✎
09:29
|
(16) жесть
|
|||
23
DmitrO
03.11.11
✎
10:20
|
Суть режима разделения итогов.
Он полезен только тогда, когда в операции движения не нужно контролировать итоги (остатки или обороты). Примеры операций: - приход может быть безконтрольным, обычно так и есть; но может быть и контрольным: может быть задача, когда приходовать можно только до определенного предела. - расход может быть безконтрольным, когда не требуется проверять отрицательные остатки; но может быть и контрольным: контроль отрицательных остатков. Когда операция безконтрольная, режим разделения итогов полезен, он позволяет одновременно (параллельно) записывать наборы по одинаковым комбинациям измерений. Две приходные накладные, с одинаковым товаром проведутся параллельно; и две расходные накладные (без контроля остатков разумеется) тоже проведутся параллельно. Когда операция контрольная, мы делаем блокирование, разумеется нам надо прочитать итоги без учета разделителя, тогда режим разделения итогов нам никак не поможет. Когда у нас операции смешанные, например приход безконтрольный, а расход контрольный, мы, для увеличения параллельности приходов, всетаки врубаем разделение итогов по регистру. При операциях прихода все шеколадно параллелится; при операциях расхода, поскольку мы блокируем записи перед чтением чтобы нам проконтролировать остатки, параллельно по комбинации измерений проводиться не будет, поскольку это не возможно в принципе, по условию контроля. |
|||
24
apokrit
03.11.11
✎
10:54
|
(23) Так все и есть.
Только я так понял, что автор ветки про пространство записей в (0) спрашивает. Ну а если не так - то и правда, нужно лучше вопросы формулировать. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |