Правильно ли сделан код на Блокировку регистра Б24_ТаблицаИзменений?
☑
0
ИС-2
naïve
03.01.25
✎
15:52
Разбираюсь с проблемами блокировки.
Нашел в обмене с Битрексом такой код
БлокировкаДанных = Новый БлокировкаДанных;
ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрСведений.Б24_ТаблицаИзменений");
НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);
Попытка
БлокировкаДанных.Заблокировать();
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НастройкаСинхронизации" , НастройкаСинхронизации);
Запрос.УстановитьПараметр("ВремяЗаписиВМиллисекундах" , ВремяЗапускаВМиллисекундах);
Запрос.Текст = "ВЫБРАТЬ
| Б24_ТаблицаИзменений.НастройкаСинхронизации КАК НастройкаСинхронизации,
| Б24_ТаблицаИзменений.ТипДанных КАК ТипДанных,
| Б24_ТаблицаИзменений.Объект КАК Объект,
| Б24_ТаблицаИзменений.ПодчиненныйОбъект КАК ПодчиненныйОбъект,
| Б24_ТаблицаИзменений.ВремяЗаписиВМиллисекундах КАК ВремяЗаписиВМиллисекундах
|ИЗ
| РегистрСведений.Б24_ТаблицаИзменений КАК Б24_ТаблицаИзменений
|ГДЕ
| Б24_ТаблицаИзменений.НастройкаСинхронизации = &НастройкаСинхронизации
| И Б24_ТаблицаИзменений.ВремяЗаписиВМиллисекундах > &ВремяЗаписиВМиллисекундах";
ТзнИзменений = Запрос.Выполнить().Выгрузить();
НаборЗаписей = РегистрыСведений.Б24_ТаблицаИзменений.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.НастройкаСинхронизации.Установить(НастройкаСинхронизации);
НаборЗаписей.Загрузить(ТзнИзменений);
НаборЗаписей.Записать(Истина);
ЗафиксироватьТранзакцию();
Из него следует, что на время выполнения кода блокируется ВСЯ таблица Б24_ТаблицаИзменений.
Хотя можно блокировать только по измерения НастройкаСинхронизации.
По моим мыслям (может и не прав). Пока выполняет этот код к регистру нельзя обратиться. Верно рассуждаю ?
А с учетом того, что код выполняется в транзакции, то могут блокируются другие объекты для записи. Или тут не прав ?
1
Конструктор1С
03.01.25
✎
16:10
Тут ужасно всё. Какая-то наркоманская логика
2
Конструктор1С
03.01.25
✎
16:13
Другие сеансы не смогут писать в этот регистр
Нет, другие объекты не заблокируются. Хотя могут быть нюансы
3
ИС-2
naïve
03.01.25
✎
16:57
А вот в WMS часть блокировок почистили внедренцы...
Получается, что один и тот же код который должен был выполнятся 1 раз последовательнно выполняется у внедренцев несколько раз... И приводит к блокировкам.
// Убрал блокировки для параллельной работы
//БлокировкаДанных = Новый БлокировкаДанных;
//ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрСведений.axЗаписываемыеИдентификаторыОбъектов");
//ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
//ЭлементБлокировки.УстановитьЗначение("Идентификатор", Object.ID);
//БлокировкаДанных.Заблокировать();
4
ИС-2
naïve
03.01.25
✎
16:58
интересная статья про поиск блокировок
Как посмотреть, какие данные заблокированы в СУБД MS SQL Server
https://infostart.ru/1c/articles/707333/
5
breezee
04.01.25
✎
08:49
А с какой именно проблемой разбираетесь?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший