Neo писал(а) 20. Июня 2011 :: 08:12: Цитата:И на какие именно rows в твоих процедурах будут установлены блокировки этим rowlock?
Видимо, на те, к которым будет обращение в рамках транзакции проведения например...
Стандартная схема работы 7.7 с блокировками следующая:
перед проведением выполняются ХП, которые блокируют необходимые таблицы (целиком).
Потом работают алгоритмы модуля проведения и делаются записи в таблицы движений, итогов, etc
если в ХП банально заменить таблок на роулок, то получим что-то в духе
from _1SJOURN(rowlock) where 0=1
- т.е. нифига блокировок наложено не будет.
Если выкинуть условие - то будет наложена блокировка, опять же, на ВСЮ таблицу.
Чтобы передавать параметр в эту хранимку - это надо пилить и пилить 1Ску, да так, что у 1С++ глаз задергается в нервном тике.
Более того - работа с rowlock-ом очень и очень задроченная - ради интереса, можешь найти ТойСКЛ с его гнутыми блокировками и покурить, сколько действий приходится делать в каждом модуле проведения. В этом плане в снеговике - весьма и весьма юзер френдли сделано.
Ну и камень в огород Тоя - реализация блокировок очень и очень своеобразная (через блокировки виртуальных объектов), что в крупных базах может сжирать непозволительно много оперативки, особенно, если действовать бездумно и в "тяжелых" документах продолжать использовать блокировки по ключам, вместо блокировки "таблиц" целиком.
В свете вышенаписанного, самое разумное решение - это писать нехилый класс по работе с построчными блокировками, в котором будут методы, позволяющие достаточно просто блокировать таблицу регистра целиком/по набору измерений + в нетривиальных случаях в самом модуле проведения делать сбор данных запросами с нужными хинтами.
И при всем при этом, главное - продумать механизм, не допускающий дэдлоков.