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