Добрый день! Пытаюсь освоить тему разделения данных в применении к своему случаю и не получается. Мне нужно исключительно блокировать один регистр на чтение и запись, но хочется, чтобы он блокировался не весь а по разделителю (КодТеста).
По Синтакс-помощнику вижу, что УстановитьЗначение ЭлементаБлокировкиДанных для регистра сведений поддерживает
По Синтакс-помощнику вижу, что УстановитьЗначение ЭлементаБлокировкиДанных для регистра сведений поддерживает
<имя разделителя>
, но при попытке использовать это получаю ошибку У пространства блокировок РегистрСведений.МойРегистр поле КодТеста недоступно для установки из прикладного кода конфигурации
Если же просто устанавливаю параметр сеанса в коде перед блокировкой, то не могу блокировать регистр одновременно, скажем с кодом теста 2532 и 6322 - возникает конфликт блокировок. Что я делаю не так?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Разделение данных не имеет никакого явного отношения к блокировкам.
Оно просто проверяет (через параметры сеанса, там можно играться с тем какой разделитель для кого используется) к какому разделителю относятся данные и тек. пользователь.
И не дает лезть, в т.ч. и писать,читать,блокировать чужие данные.
(Ну и там экономит пространство при параллельном учете и т.п.)
Ежели вам надо блокировать по тому или иному измерению, вот и используйте его, а не разделение данных.
Просто вспомните, что впервые это появилось во фреше, а там основная задача, чтобы никто ничего не трогал в условно параллельной базе.
P.S.
(1)
Главное "не так" - в том что вы не описали подробно и понятно, что вы делаете.
Я, например, не смог понять, что вы за параметр установили, что за параметр был, как именно вы умудрились таки заблокировать по нескольким разделителям (или не умудрились, а просто непонятно написали),
без ошибки в ходе установки блокировки, но с конфликтом блокировок.
Оно просто проверяет (через параметры сеанса, там можно играться с тем какой разделитель для кого используется) к какому разделителю относятся данные и тек. пользователь.
И не дает лезть, в т.ч. и писать,читать,блокировать чужие данные.
(Ну и там экономит пространство при параллельном учете и т.п.)
Ежели вам надо блокировать по тому или иному измерению, вот и используйте его, а не разделение данных.
Просто вспомните, что впервые это появилось во фреше, а там основная задача, чтобы никто ничего не трогал в условно параллельной базе.
P.S.
(1)
Если же просто устанавливаю параметр сеанса в коде перед блокировкой, то не могу блокировать регистр одновременно, скажем с кодом теста 2532 и 6322 - возникает конфликт блокировок. Что я делаю не так?
Главное "не так" - в том что вы не описали подробно и понятно, что вы делаете.
Я, например, не смог понять, что вы за параметр установили, что за параметр был, как именно вы умудрились таки заблокировать по нескольким разделителям (или не умудрились, а просто непонятно написали),
без ошибки в ходе установки блокировки, но с конфликтом блокировок.
(2)
Вот это странно, если честно. Вот вы говорите, что появилось во Фреше. А что там блокировки только по измерениям, которые не пересекаются у разных пользователей? Там наверное куча ошибок блокировки?
Делаю я, например, так: Вызываю этот код в двух сеансах и получаю на втором конфликт блокировок (НаборЗаписей.Прочитать();), несмотря на то, что разделяемый параметр установлен в разные значения
Разделение данных не имеет никакого явного отношения к блокировкам.
Вот это странно, если честно. Вот вы говорите, что появилось во Фреше. А что там блокировки только по измерениям, которые не пересекаются у разных пользователей? Там наверное куча ошибок блокировки?
Делаю я, например, так:
СвободныйТест = "3432";
ВвестиСтроку(СвободныйТест, "Введите код теста:");
ПараметрыСеанса.КодТестаЗначение = СвободныйТест;
НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);
НаборЗаписей = РегистрыСведений.МойРегистр.СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();
БлокировкаВывода = Новый БлокировкаДанных;
Блокировка = БлокировкаВывода.Добавить("РегистрСведений.МойРегистр");
Блокировка.Режим = РежимБлокировкиДанных.Исключительный;
БлокировкаВывода.Заблокировать();
ДополнительныеМеханизмы.Пауза(180); // 180 секунд
ЗафиксироватьТранзакцию();
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот