Имя: Пароль:
1C
1С v8
ЗиК (бюджетники) - ошибка блокировки данных при начислениях
0 timurhv
 
26.08.14
20:29
Здравствуйте,

Ситуация следующая: в одной базе ведутся данные по 12 организациям.
При расчете заработной платы у других сотрудников, которые производят расчет по другому учреждению выходят ошибки блокировки данных регистра расчета "ОсновныеНачисленияРаботниковОрганизаций".

Пример (общий модуль ЗаполнениеДокументовДополнительный.ВыполнитьАвтозаполнение):

НачатьТранзакцию();
НаборЗаписейДляПроверки.ОбменДанными.Загрузка = Истина;
НаборЗаписейДляПроверки.Записать(Истина, Ложь, Истина, Ложь);
....
НаборЗаписейДляПроверки.Очистить();
НаборЗаписейДляПроверки.Записать(Истина, Ложь, Истина, Ложь);
ЗафиксироватьТранзакцию();

После того как производится "НаборЗаписейДляПроверки.Записать", то по другим учреждениям уже не могут производить перерасчет, пока у первого не зафиксируется транзакция.

Таких мест в общих модулях и документах (начало транзакции, создание движений и последующая их очистка) - достаточно много.

Режим блокировки у конфигурации - управляемый, у документа и регистров - автоматический.

Конфигурация типовая, стоит MSSQL 2008, RLS включен - под полными правами аналогичная ситуация, платформа 8.3.5.1098, версия конфигурации 1.0.73.2.

Смотрел в сторону ЗУП и "Зарплата и кадры государственного учреждения 8" - там аналогичная ситуация с блокировками.

Пробовал установить блокировку на регистр расчета по учреждению - не срабатывает:
УчБлокировка = Новый БлокировкаДанных;
тзбБлокировка = УчБлокировка.Добавить("РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций");
тзбБлокировка.УстановитьЗначение("Организация", ДокументОбъект.Организация);
тзбБлокировка.Режим = РежимБлокировкиДанных.Исключительный;
НачатьТранзакцию();
УчБлокировка.Заблокировать();
...

Если убрать транзакции - все работает на ура.
Как можно решить ситуацию, кроме разделения базы по учреждениям и не убирая транзакции?
P.S: с блокировками сталкиваюсь впервые.
1 timurhv
 
26.08.14
22:42
+ (0) протестировал на PostgreSQL 9.1.2 - ошибка не воспроизводится на другом учреждении, только если делать начисление по тому же учреждению.
2 timurhv
 
27.08.14
19:30
Выставил у базы MSSQL:
ALLOW_SNAPSHOT_ISOLATION ON
READ_COMMITTED_SNAPSHOT ON

Помогло.
http://infostart.ru/public/91879/