Такс нужно ап! Очень нужно ап! Две недели тупо читаю про долбанные блокировки по началу не понимал ничего, сейчас напишу то что осталось в голове , пожалуйста прокомментируйте.
Первый случай когда надо использовать Движения.ОстаткиТоваров.БлокироватьДляИзменения=Истина;
Старая методика проведения:
Движения.ОстаткиТоваров.БлокироватьДляИзменения=Истина; Движения.ОстаткиТоваров.Записать();
Блокировка=Новый БлокировкаДанных;
Блок=Блокировка.Добавить("РегистрНакопления.ОстаткиТоваров");
Блок.Режим=РежимБлокировкиДанных.Исключительный;
Блок.ИсточникДанных=СписокНоменклатуры;
Блок.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура");
Блокировка.Заблокировать();
Перепроводим существующий документ.
Такс устанавливаем блокировку... Блокируем Что? Регистр. По какому набору записей??? ФИГ знает толи по пустому толи по старому, а истина где то там--------------->...... НО в народе говорят что лучше написать, баллы на экзамене не лишние)). Например: регистр остатки товаров пустой и есть расходная (номенклатура:стол, количество: 1). Заходит пользователь и меняет стол на стул жмет Окей и ждет пока закончится транзакция , в этот момент второй юзер тем же документом расходная видит ага появился стол, щас спишу и списывает. Обидно но транзакция не увенчалась успехом и мы ее отменили. В итоге столы полетели в минуса , вместе с баллами на экзамене. Чтоб такого не случилось пишем Движения.ОстаткиТоваров.БлокироватьДляИзменения=Истина;, тем самым блокируем регистр по старому набору записей.(<-------------здесь я вообще не уверен блин!!! ХЭЛП!). В итоге второй юзер вместе со своей расходной попадает в очередь, а потом получает отказ. Счастлив экзаменатор, сдающий, целы баллы).
Второй случай когда надо использовать Движения.ОстаткиТоваров.БлокироватьДляИзменения=Истина;
Новая методика проведения , у регистра накопления стоит свойство (в значение истина), разделять итоги. В таблицу итогов попадает разделитель который позволяет писать данные нескольким документам у которых одинаковый набор записей (например приходная накладная не должна стоять в очереди), НО гадкий разделитель попадает в блокировку при внесении записей списания. Например проводим одновременно: расходная 1 (блокируем Номенклатура: стол, склад:основной, разделитель1), расходная 2(блокируем Номенклатура: стол, склад:основной, разделитель2). Потом начинаем читать и тут
. Расходная 1 заблокировала данные позиции и расходная 2 тоже, только по разным разделителям, а читаем остатки мы по всем позициям в целом, в итоге ловим deallock.
Чтоб такого не получилось пишем злополучное Движения.ОстаткиТоваров.БлокироватьДляИзменения=Истина; отключаем разделитель и вторая расходная попадает в очередь, таким образом первая спокойно все читает и мы радуемся.