Блокировка и разделение данных

1. n_mezentsev 58 17.03.25 11:27 Сейчас в теме
Добрый день! Пытаюсь освоить тему разделения данных в применении к своему случаю и не получается. Мне нужно исключительно блокировать один регистр на чтение и запись, но хочется, чтобы он блокировался не весь а по разделителю (КодТеста).
По Синтакс-помощнику вижу, что УстановитьЗначение ЭлементаБлокировкиДанных для регистра сведений поддерживает
<имя разделителя>
, но при попытке использовать это получаю ошибку
У пространства блокировок РегистрСведений.МойРегистр поле КодТеста недоступно для установки из прикладного кода конфигурации
Если же просто устанавливаю параметр сеанса в коде перед блокировкой, то не могу блокировать регистр одновременно, скажем с кодом теста 2532 и 6322 - возникает конфликт блокировок. Что я делаю не так?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. booksfill 17.03.25 14:31 Сейчас в теме
Разделение данных не имеет никакого явного отношения к блокировкам.

Оно просто проверяет (через параметры сеанса, там можно играться с тем какой разделитель для кого используется) к какому разделителю относятся данные и тек. пользователь.
И не дает лезть, в т.ч. и писать,читать,блокировать чужие данные.
(Ну и там экономит пространство при параллельном учете и т.п.)

Ежели вам надо блокировать по тому или иному измерению, вот и используйте его, а не разделение данных.

Просто вспомните, что впервые это появилось во фреше, а там основная задача, чтобы никто ничего не трогал в условно параллельной базе.


P.S.
(1)
Если же просто устанавливаю параметр сеанса в коде перед блокировкой, то не могу блокировать регистр одновременно, скажем с кодом теста 2532 и 6322 - возникает конфликт блокировок. Что я делаю не так?

Главное "не так" - в том что вы не описали подробно и понятно, что вы делаете.
Я, например, не смог понять, что вы за параметр установили, что за параметр был, как именно вы умудрились таки заблокировать по нескольким разделителям (или не умудрились, а просто непонятно написали),
без ошибки в ходе установки блокировки, но с конфликтом блокировок.
3. n_mezentsev 58 17.03.25 14:42 Сейчас в теме
(2)
Разделение данных не имеет никакого явного отношения к блокировкам.

Вот это странно, если честно. Вот вы говорите, что появилось во Фреше. А что там блокировки только по измерениям, которые не пересекаются у разных пользователей? Там наверное куча ошибок блокировки?
Делаю я, например, так:
СвободныйТест = "3432";
	ВвестиСтроку(СвободныйТест, "Введите код теста:");
	
	ПараметрыСеанса.КодТестаЗначение = СвободныйТест;	
	
	НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);
		НаборЗаписей = РегистрыСведений.МойРегистр.СоздатьНаборЗаписей();
		НаборЗаписей.Прочитать();
		БлокировкаВывода = Новый БлокировкаДанных;
		Блокировка = БлокировкаВывода.Добавить("РегистрСведений.МойРегистр");
		Блокировка.Режим = РежимБлокировкиДанных.Исключительный;
		БлокировкаВывода.Заблокировать();
		ДополнительныеМеханизмы.Пауза(180); // 180 секунд
	ЗафиксироватьТранзакцию();
Показать
Вызываю этот код в двух сеансах и получаю на втором конфликт блокировок (НаборЗаписей.Прочитать();), несмотря на то, что разделяемый параметр установлен в разные значения
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот