наверх
Свободные IT публикации
логин:
пароль:

Простое программное решение проблем с блокировками SQL [1132]


[8] AdminITD - 2019-03-06 14:06:32



Содержание


О блокировках, причинах их возникновения и решениях этой проблемы информации очень много, поэтому просто опишу одно из  программных решений, которое реально помогло полностью исключить блокировки по номенклатуре при проведении документов в крупной информационной системе. Метод подходит только для клиент-серверных систем 1С. Протестировано на платформе 1С:Предприятие 8.2 (8.2.19.130), обычные формы.
Решение для случая блокировок по номенклатуре:
1. Добавить новый служебный регистр сведений "БлокировкаПроведенияДокументов". Он не будет содержать данных и необходим только как объект наложения управляемой блокировки. Добавить полные права на этот регистр в общедоступную роль.

2. В начало процедуры "ПриЗаписи" модуля проблемного документа добавить код:
Процедура ПриЗаписи(Отказ)
	Если Проведен Тогда
		Попытка
			Блокировка = Новый БлокировкаДанных;
			ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.БлокировкаПроведенияДокументов");
			ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
			ЭлементБлокировки.ИсточникДанных = ТабличнаяЧастьНоменклатура;
			ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
			Блокировка.Заблокировать();
		Исключение
			# Если Клиент Тогда
			Сообщить(СокрЛП(Ссылка) +":"+ Символы.ПС + "	Превышено время ожидания возможности проведения! Повторите попытку проведения.");
			# КонецЕсли
			Отказ = Истина;
			Возврат;
		КонецПопытки;
	КонецЕсли; 
	
	//Исходный текст
	//...
КонецПроцедуры

При возникновении блокировок по полям другого типа, необходимо в регистр "БлокировкаПроведенияДокументов" добавить новое измерение соответствующего типа и в процедуре "ПриЗаписи" указать соответствующий источник данных для элемента блокировки.

● Комментарии:

Для добавления комментария необходима авторизация.

Нет комментариев