Имя: Пароль:
1C
1С v8
Переход на управляемые блокировки
0 kisskiss
 
27.02.13
13:58
У всей конфигурации стоит режим управления блокировками - Управляемый. Конфигурация на основе Бухгалтерии, на 50% дописанная.
Самописный документ пишет проводки в самописный регистр(Управленческий), аналогичный Хозрасчетному. Каждым документом пишется от 10 до 30 тыс проводок.
Используется новый подход к проведению документа - запись движений - записывать выбранные, удалять движения при отмене проведения, привилегированный режим при проведении и отмене и т.д. В регистре Управленческий стоит галка "Разрешить разделение итогов".
В ОбработкеПроведения документа никаких проверок не выполняется, просто делается запись в регистр. Объект БлокировкаДанных в Обработке проведения нигде не создается намеренно, ведь согласно описанию Управляемого режима блокировок, если разработчик не указал явно какие данные блокировать, то платформа ничего не заблокирует, а значит блокировок не возникнет.
Означает ли это, что мой документ не вызывает никаких блокировок? То есть при проведении 10 документов разными пользователями по одной организации блокировок не возникнет?
1 krbIso
 
27.02.13
14:07
при модификации данных блокировки ставятся менеджером блокировок 1с самостоятельно, так что блокировки будут.
Документы будут нормально проводится если нет контроля остатков.
2 kisskiss
 
27.02.13
14:16
(1) ты имеешь в виду, что нет контроля остатков в ОбработкеПроведения ?

>>при модификации данных блокировки ставятся менеджером блокировок 1с самостоятельно, так что блокировки будут

а как узнать, что действительно нет никаких блокировок? Например как нить в SQLе ?  

А при распроведении тоже блокировок не возникнет?
3 andreymongol82
 
27.02.13
14:21
Запускаешь 2 1С-нины одну в режиме отладки, ставишь точку останова проводишь/распроводишь, в другой тоже проводишь/распроводишь.
Распроведение - тоже блокирует - это ведь тоже изменение данных
4 kisskiss
 
27.02.13
14:22
(3) ну так по идее у меня реализован новый механизм проведения, который не вызывает блокировок.
Как определить какие записи в действительности будут заблокированы при отмене проведения?
5 alkov
 
27.02.13
14:26
Новый механизм проведения, который не вызывает блокировок? Уверены?
6 Necessitudo
 
27.02.13
14:26
Блокировки накладываются не только объектом "БлокировкаДанных". Есть способ работы с управляемыми блокировками гораздо более простой.
7 Necessitudo
 
27.02.13
14:28
Набор = Движения.Продажи.СоздатьНаборЗаписей();
Набор.БлокироватьДляИзменения = Истина;
8 Necessitudo
 
27.02.13
14:29
Этот способ хорош для нового механизма контроля остатков, когда ты сначала данные в регистр пишешь, а потом контроллируешь отрицательные остатки)
9 andreymongol82
 
27.02.13
14:30
(4) Нет такого механизма. Блокировка в любом случае будет возникать, если не на уровне 1С, то на уровне SQL
10 kisskiss
 
27.02.13
14:30
(5) Так написано в 1С-овской методичке по курсу "Работа с данными". Курс ведет Гончаров. Стр 18 "В Управляемом режиме любое обращение к данным из транзакций не приводит к наложению блокировок. Состав ресурсов, подлежащих блокированию, вид блокировок определяется разработчиком прикладного решения в явном виде" . Я в явном виде ничего не определяла - значит по идее блокировок быть не должно ?
11 krbIso
 
27.02.13
14:31
(2)
Да.
Блокировки при модификации данных есть всегда.
Как узнать что нет избыточных блокировок см в(3) проводишь из 2 сессий документы с непересекающимеся данными.
12 kisskiss
 
27.02.13
14:33
(11) Тогда получается даже в управляемом режиме без явного определения блокируемых данных - блокировки все равно будут возникать? :( печалька
13 andreymongol82
 
27.02.13
14:33
(10) Угу.
Вот это еще надо почитать
http://1cexpo.ru/informacziya/27-blokirovki-dannyx-v-1spredpriyatii-8.html
14 kisskiss
 
27.02.13
14:43
(13) Читала..
Мне не совсем ясно следующее...у меня нет конкурентного ресурса, без блокировки у меня не исказятся никакие данные, я не делаю никаких проверок, просто идет запись - поэтому мне не нужна блокировка. Поэтому я не делаю явной блокировки данных регистра. А блокировки все равно возникнут? В Данном случае если платформа не делает блокировок, то кто тогда их делает? СУБД ? Как тогда определить, какие данные СУБД решила заблокировать?
15 andreymongol82
 
27.02.13
14:54
(14) Черный ящик. Например, у меня при записи пустого набора записей регистра с отбором по регистратору (аналог распроведения) блокировалась вся табличка в SQL, режимы стояли управляемый. (Хотя мысли есть почему, но проверить или опровергнуть было некогда)
Вообще стоит внимательней прочитать про явные и неявные транзакции. Особенно про неявные.
16 andreymongol82
 
27.02.13
15:06
А вот про SQL, кстати
http://infostart.ru/public/91880/
17 kisskiss
 
27.02.13
15:09
(7)(8)(9) да, я знаю про этот метод, но мне не нужно блокировать данные явно или неявно, так как у меня мой регистр не является конкурентным ресурсом - без блокировки у меня не исказятся никакие данные
18 kisskiss
 
27.02.13
15:15
(16) отличная статья, полностью согласна
19 krbIso
 
27.02.13
15:19
(17) вам может и не нужно, но такова жизнь. Модификация данных=транзакция=блокировка.
Если ваш регистр не является конкурентным ресурсом то в чем собственно проблема?
20 andreymongol82
 
27.02.13
15:19
В общем совет - много экспериментируйте, пробуйте, дерзайте :)
21 kisskiss
 
27.02.13
15:20
(19) проблема была в том, что явных блокировок нигде не ставилось, а конфликт блокировок все равно возникал
22 kisskiss
 
27.02.13
15:21
(20) аха, чем собственно и занимаюсь :)
23 krbIso
 
27.02.13
15:33
(21) Явно вы не ставите, но при модификации данных неявно ставятся блокировка всегда.
Ожидание на блокировке возникает при соблюдении всех 3 условий:
-блокировки установлены разными сессиями
-блокируются один и тот же ресурс
-блокировка имеет несовместимый тип.
24 JLeys
 
27.02.13
15:45
также возможна эскалация блокировок