Имя: Пароль:
1C
 
Конфликт блокировок при записи в РегистрСведений
0 lulyk
 
13.03.08
13:02
Документ1 делает записи в РегистрСведений1(независимый; 2 измерения: измерение1,измерение2, 1 ресурс: Ресурс1) через объект РегистрСведенийНаборЗаписей
с установленными отборами по Измерение1,измерение2(перезапись):

НаборЗаписей = РегистрыСведений.РегистрСведений1.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.измерение1.Установить(измерение1Знач);
НаборЗаписей.Отбор.измерение2Знач.Установить(измерение2Знач);
НаборЗаписей.Прочитать();

При одновременной работе многих пользователей иногда возникает конфликт блокировок. Пользователей более 100.

Вопрос: изменится ли ситуация, если использовать РегистрСведенийМенеджерЗаписи, где
измерение1 = измерение1Знач,измерение2=измерение2Знач.
       
МенеджерЗаписи=РегистрыСведений.РегистрСведений1.СоздатьМенеджерЗаписи();
МенеджерЗаписи.измерение1   = измерение1Знач;
МенеджерЗаписи.измерение2   = измерение2Знач;
МенеджерЗаписи.Прочитать();


Прочитав справку о нем, имхо думаю, что это сводится к тому же.
1 lulyk
 
13.03.08
13:03
РегистрСведенийМенеджерЗаписи.<Имя регистра сведений> (InformationRegisterRecordManager.<Имя регистра сведений>)
Свойства:
<Имя измерения>
<Имя реквизита>
<Имя ресурса>
Период (Period)

Методы:
Выбран (Selected)
Записать (Write)
Модифицированность (Modified)
ПолучитьФорму (GetForm)
Прочитать (Read)
Удалить (Delete)

Описание:
Позволяет читать, записывать и удалять отдельную запись регистра сведений. Используется только для регистров сведений, неизменяемых регистраторами, т.е. для которых в конфигураторе установлен режим записи "Независимый".
Предназначен для интерактивной работы с записью регистра сведений.
Доступ (чтение и запись) к записям регистра сведений производится объектом РегистрСведенийНаборЗаписей.<Имя регистра сведений> на системном уровне. При этом, в общем случае, используются два набора записей: один предназначен для удаления "старой" записи, другой - для записи данных, определенных менеджером записи. Это проявляется, например, в том, что при выполнении записи могут дважды вызываться события ПередЗаписью и ПриЗаписи объекта РегистрСведенийНаборЗаписей.<Имя регистра сведений>, сначала для пустого набора записей удаляющего "старую" запись, а затем для набора записей с новыми данными.
2 Dziden2
 
13.03.08
13:54
а запросом?
3 lulyk
 
13.03.08
14:02
как запросом?

ВЫБРАТЬ
| ЧТО?
|Из РегистрСведений.РегистрСведений1 КАК РегистрСведений1
|ГДЕ
|   РегистрСведений1.Измерение1 = &измерение1Знач И
|   РегистрСведений1.Измерение2 = &измерение2Знач
4 iSeRG
 
13.03.08
15:42
(0) проблема в том, что метод Прочитать() накладывает S блокировку на прочитанные записи (и на соседние), если до Записть другой сеанс попытается прочитать то он будет ожидать и в момент записи первого сеанса возникнет deadlock.
Поэтому, для чтения используй запрос с инструкцией ДЛЯ ИЗМЕНЕНИЯ
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший