Имя: Пароль:
1C
1С v8
Вызов управляемых блокировок там, где не нужно.
0 CAPITALIST
 
24.05.17
07:50
Режим блокировок для всех таблиц в конфигурации установлен "Автоматический". В корне конфигурации ставлю режим "Автоматический и управляемый".
Пробую записывать разные таблички. Обнаружил, что при записи последовательности РасчетыПоПриобретениюОрганизации (проведение Поступления ТМЗ) выполняется алгоритм установки управляемой блокировки и выходит ошибка:
Использование блокировки допустимо только внутри транзакции в режиме управляемых блокировок!
Но режим блокировки для таблички Последовательности.РасчетыПоПриобретениюОрганизации установлен Автоматический.
Код типовой, не думаю что правильно что-то менять.
Что я упустил?
1 sFAQer
 
24.05.17
08:14
(0) А у документа какой режим управления блокировкой?
2 CAPITALIST
 
24.05.17
08:25
(1) Тоже автоматический. На всех таблицах в конфигурации автоматический.
3 FIXXXL
 
24.05.17
08:30
https://its.1c.ru/db/metod8dev#content:5839:hdoc

Рассмотрим другой пример - интерактивное проведение документа, который выполняет движения по регистру накопления. В этом случае «первой» (неявной) транзакцией будет транзакция, открываемая системой при записи документа, а «второй» (также неявной) будет транзакция, открываемая системой при записи набора записей регистра накопления.

Далее все аналогично предыдущему примеру. Если для документа в метаданных установлен автоматический режим управления блокировками, то независимо от того, какой режим установлен в метаданных для регистра накопления, запись его набора записей всегда будет выполняться в автоматическом режиме.

Если же для документа установлен управляемый режим блокировок в транзакции, то для регистра накопления таже должен быть установлен управляемый режим, иначе при проведении документа будет вызвана исключительная ситуация.

Из этих примеров можно сделать следующий общий вывод. Если, например, стоит задача повысить параллельность работы при проведении отдельного документа, не переводя при этом всю конфигурацию в управляемый режим, то последовательность действий должна быть следующей:

свойство конфигурации Режим управления блокировкой данных необходимо установить в значение Автоматический и управляемый;

свойство Режим управления блокировкой данных объекта метаданных документ необходимо установить в значение Управляемый;

у всех регистров, по которым данный документ выполняет движения, следует установить свойство Режим управления блокировкой данных в значение Управляемый;

проанализировать процедуру проведения документа на предмет наличия:

явных вызовов транзакций

неявных вызовов транзакций, которые выполняются системой при модификации данных каких-либо объектов конфигурации

для найденных явных и неявных вызовов транзакций обеспечить их выполнение в управляемом режиме

для явных вызовов - параметр метода НачатьТранзакцию();

для неявных вызовов - свойство Режим управления блокировкой данных модифицируемого объекта конфигурации;

в теле процедуры проведения документа установить необходимые управляемые блокировки (об этом см. далее).

Установка управляемых блокировок
4 ptiz
 
24.05.17
08:55
(0) "режим "Автоматический и управляемый" - зло. Можно много граблей насобирать, что и случилось. Лучше сразу на управляемый переходить.
5 Ц_У
 
24.05.17
09:10
6 CAPITALIST
 
24.05.17
09:11
(3) Еще раз повторюсь, что на всех таблицах режим "Автоматический". Использовать "Управляемый" не требуется. Данная информация по использованию управляемых блокировок не востребована. Востребована информация по использованию АВТОМАТИЧЕСКИХ блокировок в типовой УПП.
7 ptiz
 
24.05.17
09:13
(6) "на всех таблицах режим "Автоматический"" - проверил все объекты? для гарантии обработкой пробегись по метаданным
8 CAPITALIST
 
24.05.17
09:31
(7) Именно так и сделал. Проблема тут скорее всего в типовой конфигурации. Принятие решения об использовании алгоритма управляемых блокировок делается этим условием:

Если глЗначениеПеременной("ИспользоватьБлокировкуДанных") Тогда

При этом режим блокировки самого объекта игнорируется. Если добавить в условие еще проверку свойства объекта метаданных, то решить проблему можно.
Такое условие много где по коду встречается. Меня смущает то, что это типовой код. Т.е. не был учтен режим "автоматический и управляемый", который задается в корне.
9 FIXXXL
 
24.05.17
09:56
(8) возможно логика в том, что сначала переводим конфу в упр.блокировки, а затем галку глобальную ставим?
10 CAPITALIST
 
24.05.17
11:40
(9) Тогда теряет смысл режим "автоматический и управляемый". Тогда должен быть или "Управляемый", или "Автоматический"
11 FIXXXL
 
25.05.17
08:45
(10) это про глобальный параметр? всё с ним норм, полконфы может жить в автомате, остально управляемо
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший