Устанавливает значение для поля пространства блокировки. Блокировка будет наложена на записи, содержащие устанавливаемое значение в данном поле.
Синтаксис
УстановитьЗначение(<ПолеПространстваБлокировок>, <БлокируемоеЗначение>)Полное описание, параметры и ограничения
ЭлементБлокировкиДанных.УстановитьЗначение (DataLockItem.SetValue)
ЭлементБлокировкиДанных (DataLockItem)
УстановитьЗначение (SetValue)
Доступен, начиная с версии 8.1.
Синтаксис:
УстановитьЗначение(<ПолеПространстваБлокировок>, <БлокируемоеЗначение>)
Параметры:
<ПолеПространстваБлокировок> (обязательный)
Тип: Строка, ПланВидовХарактеристикСсылка.<Имя плана видов характеристик>.
Имя поля пространства блокировки. Поддерживаются следующие имена полей:
Для пространства РегистрСведений.<имя>.НаборЗаписей - Регистратор (только для регистра, подчиненного регистратору);
Для пространства РегистрСведений.<имя> - Период (если есть), <имя измерения>, <имя разделителя>;
Для пространства РегистрНакопления.<имя>.НаборЗаписей - Регистратор;
Для пространства РегистрНакопления.<имя> - Период, <имя измерения>, <имя разделителя>;
Для пространства РегистрБухгалтерии.<имя>.НаборЗаписей - Регистратор;
Для пространства РегистрБухгалтерии.<имя> - Период, <имя измерения>, <вид движения> (значение системного перечисления ВидДвиженияБухгалтерии), Счет, Субконто<N>, <вид субконто>, <имя разделителя>;
Для пространства РегистрРасчета.<имя>.НаборЗаписей - Регистратор;
Для пространства РегистрРасчета.<имя> - ПериодРегистрации, ПериодДействия, <имя измерения>, <имя разделителя>;
Для пространства Перерасчет.<имя>.НаборЗаписей - ОбъектПерерасчета;
Для пространства Последовательность.<имя>.НаборЗаписей - Регистратор;
Для пространства Последовательность.<имя>.Записи - Регистратор, Период, <Измерение>;
Для пространства Последовательность.<имя> - <имя измерения>, <имя разделителя>;
Для пространства Константа.<имя> имена полей не поддерживаются;
Для пространства ВнешнийИсточникДанных.<имя источника>.Таблица.<имя таблицы> - <имя поля>.
Тип ПланВидовХарактеристикСсылка.<Имя плана видов характеристик> - блокировка устанавливается на пространство РегистрБухгалтерии.<имя>.
Для пространств, указанных ниже поддерживается поле Ссылка, а также все поля, указанные в свойстве "Поля блокировки данных" данного объекта метаданных:
Справочник.<имя>;
Документ.<имя>
ПланОбмена.<имя>;
ПланСчетов.<имя>;
БизнесПроцесс.<имя>;
Задача.<имя>;
ПланВидовРасчета.<имя>;
ПланВидовХарактеристик.<имя>;
ВнешнийИсточникДанных.<имя источника>.Таблица.<имя таблицы>.
<БлокируемоеЗначение> (обязательный)
Тип: Произвольный, Диапазон.
Значение (диапазон значений) для поля пространства блокировки.
Описание:
Устанавливает значение для поля пространства блокировки. Блокировка будет наложена на записи, содержащие устанавливаемое значение в данном поле.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Примечание:
Следует иметь в виду, что одну и ту же запись регистра можно заблокировать дважды, первый раз блокируя саму запись, а второй раз блокируя набор, в который эта запись входит.
Не допускается задаватьть одно и то же поле пространства блокировок с помощью методов УстановитьЗначение и ИспользоватьИзИсточникаДанных.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Ограничить описание блокировки ключом и периодом
Для одного собственного ключа добавляем диапазон дат 15 сентября 2026. Не объявляем это доказательством бизнес-защиты или блокировки ровно N строк.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Только собственная пустая УчебнаяКонфигурацияСинтаксиса. Создайте независимый регистр сведений УчебныеРезервы, периодичность В пределах секунды, измерение КлючРезерва типа Строка длиной 50 и ресурс Количество типа Число. Записи регистра для уроков не нужны.
В собственной учебной конфигурации задайте Режим управления блокировкой данных=Управляемый. Создайте серверный общий модуль УчебныеЗадачи и процедуру ВыполнитьПример() Экспорт; каждый код вставляйте в её тело отдельно.
Вызывайте из собственной учебной обработки вне уже открытой транзакции. Не проводите рабочие документы, не запускайте в КА2/УНФ/УТ и не меняйте их режим блокировок ради опыта.
Первый урок только создаёт описание. Остальные реально устанавливают краткую управляемую блокировку в собственной транзакции и затем отменяют её. Данные не записываются и не удаляются.
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Запускайте отдельно, вне чужой транзакции";
КонецЕсли;
Схема = Метаданные.РегистрыСведений.Найти("УчебныеРезервы");
Если Схема = Неопределено Тогда
ВызватьИсключение "Создайте собственный учебный регистр УчебныеРезервы";
КонецЕсли;
Если Схема.Измерения.Найти("КлючРезерва") = Неопределено Тогда
ВызватьИсключение "Нет измерения КлючРезерва";
КонецЕсли;
НачалоДня = Дата(2026, 9, 15, 0, 0, 0);
КонецДня = Дата(2026, 9, 15, 23, 59, 59);
Интервал = Новый Диапазон(НачалоДня, КонецДня);
Сообщить(Интервал.Начало = НачалоДня);
Сообщить(Интервал.Конец = КонецДня);
Блокировка = Новый БлокировкаДанных;
Элемент = Блокировка.Добавить("РегистрСведений.УчебныеРезервы");
Элемент.Режим = РежимБлокировкиДанных.Исключительный;
Элемент.УстановитьЗначение("КлючРезерва", "guide-book");
Элемент.УстановитьЗначение("Период", Интервал);
Для Каждого Поле Из Элемент.Поля Цикл
Если ТипЗнч(Поле.Значение) = Тип("Диапазон") Тогда
Сообщить("Диапазон поля: " + Строка(Поле.Поле));
Сообщить(Поле.Значение.Начало = НачалоДня);
Сообщить(Поле.Значение.Конец = КонецДня);
КонецЕсли;
КонецЦикла;
НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);
Попытка
Блокировка.Заблокировать();
Сообщить("Собственная управляемая блокировка установлена; данные не записывались");
ОтменитьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Сообщить(Не ТранзакцияАктивна());Разбор по шагам
Собственный регистр периодический В пределах секунды, поэтому поле Период существует. В непериодическом регистре нельзя автоматически использовать такой контракт.
Диапазон создаётся с однотипными датами и верхней границей не меньше нижней. Границы только для чтения; для другого интервала создаётся другой объект.
УстановитьЗначение задаёт два поля: КлючРезерва и Период. Нельзя считать, что одно поле автоматически ограничивает другое.
Читаем тип Значение прежде, чем обращаться к Начало/Конец. Строковый ключ не является Диапазон.
Проверки относятся к описанию условий. Из них нельзя получить число существующих записей, физические блокировки СУБД или доказательство правильности рабочего алгоритма.
Установка проходит в своей транзакции, после чего она отменяется. Конкурентное поведение границ требует отдельного теста на учебной копии.
Как проверить результат
Границы собственного диапазона совпадают с указанным днём; в паспорте присутствует диапазон Период и отдельный ключ guide-book.
После завершения нет активной транзакции и нет новых/изменённых записей регистра.
Ожидаемый результат
Подготовлена ограниченная учебная блокировка по ключу и диапазону дат с проверкой типов.
На что обратить внимание
Не распространяйте пример Период на непериодический регистр или на другой тип пространства.
Успешный вызов без второго сеанса не является доказанным тестом взаимного исключения.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Подготовить точную блокировку собственного ключа, пока не устанавливая её
Создаём описание пространства учебного регистра, задаём ключ guide-book и читаем поля блокировки. Количество элементов описания не равно числу заблокированных строк.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Только собственная пустая УчебнаяКонфигурацияСинтаксиса. Создайте независимый регистр сведений УчебныеРезервы, периодичность В пределах секунды, измерение КлючРезерва типа Строка длиной 50 и ресурс Количество типа Число. Записи регистра для уроков не нужны.
В собственной учебной конфигурации задайте Режим управления блокировкой данных=Управляемый. Создайте серверный общий модуль УчебныеЗадачи и процедуру ВыполнитьПример() Экспорт; каждый код вставляйте в её тело отдельно.
Вызывайте из собственной учебной обработки вне уже открытой транзакции. Не проводите рабочие документы, не запускайте в КА2/УНФ/УТ и не меняйте их режим блокировок ради опыта.
Первый урок только создаёт описание. Остальные реально устанавливают краткую управляемую блокировку в собственной транзакции и затем отменяют её. Данные не записываются и не удаляются.
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Запускайте отдельно, вне чужой транзакции";
КонецЕсли;
Схема = Метаданные.РегистрыСведений.Найти("УчебныеРезервы");
Если Схема = Неопределено Тогда
ВызватьИсключение "Создайте собственный учебный регистр УчебныеРезервы";
КонецЕсли;
Если Схема.Измерения.Найти("КлючРезерва") = Неопределено Тогда
ВызватьИсключение "Нет измерения КлючРезерва";
КонецЕсли;
Блокировка = Новый БлокировкаДанных;
Элемент = Блокировка.Добавить("РегистрСведений.УчебныеРезервы");
Элемент.Режим = РежимБлокировкиДанных.Исключительный;
Элемент.УстановитьЗначение("КлючРезерва", "guide-book");
Сообщить(Блокировка.Количество() = 1);
Сообщить(Блокировка.Получить(0).Режим = РежимБлокировкиДанных.Исключительный);
Сообщить("Область элемента: " + Элемент.Область);
Сообщить("Полей описания: " + Строка(Элемент.Поля.Количество()));
Для Индекс = 0 По Элемент.Поля.Количество() - 1 Цикл
Поле = Элемент.Поля.Получить(Индекс);
Сообщить("Поле пространства: " + Строка(Поле.Поле));
Сообщить("Значение: " + Строка(Поле.Значение));
Сообщить("Колонка источника задана: " + Строка(Поле.КолонкаИсточникаДанных <> Неопределено));
КонецЦикла;
Сообщить("Заблокировать не вызывался; описание ещё не является установленной блокировкой");Разбор по шагам
БлокировкаДанных — коллекция элементов разных пространств. Добавить возвращает элемент; здесь пространство задано полным именем собственного регистра.
Режим Исключительный задаётся явно. УстановитьЗначение получает имя измерения и собственный строковый ключ, не имя ресурса Количество.
Получить(0) безопасен для созданного здесь единственного элемента. Поля.Получить используется в пределах фактического количества, не с безусловным индексом 0.
Поля и три свойства ПолеЭлементаБлокировкиДанных только для чтения. Условие задаётся через УстановитьЗначение, не присваиванием Поле.Значение.
Область выводится как фактическое значение платформы: справка этого свойства неоднозначно описывает имя пространства и имена полей. Не выдаём текст этого свойства за проверенную физическую таблицу СУБД.
Как проверить результат
Две логические проверки дают Истина; среди фактических полей найдите КлючРезерва с guide-book.
Активная транзакция не создана и Заблокировать не вызывался. В регистре не появились записи.
Ожидаемый результат
Подготовлено ограниченное описание блокировки с читаемым паспортом полей.
На что обратить внимание
Новый БлокировкаДанных не блокирует данные сам по себе.
Если не ограничить нужные поля пространства, можно получить более широкую блокировку, чем ожидает автор. Не переносите описание без анализа в рабочую базу.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.