ПланОбменаОбъект.<Имя плана обмена>.Разблокировать

Методы · Unlock

Выполняет разблокировку узла, если он заблокирован данным объектом.

Синтаксис

Разблокировать()
Полное описание, параметры и ограничения

ПланОбменаОбъект.<Имя плана обмена>.Разблокировать (ExchangePlanObject.<Exchange plan name>.Unlock)

ПланОбменаОбъект.<Имя плана обмена> (ExchangePlanObject.<Exchange plan name>)

Разблокировать (Unlock)

Доступен, начиная с версии 8.0.

Синтаксис:
Разблокировать()
Описание:

Выполняет разблокировку узла, если он заблокирован данным объектом.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Заблокировать свой узел и явно снять блокировку

Блокируем только собственный UUID, записанный в отменяемой транзакции. Блокировка объекта не отправляет сообщение и не является режимом монопольной работы базы.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.

  2. Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.

  3. Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.

  4. Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.

  5. Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.

  6. В отдельной пустой конфигурации Учебная85 создайте Планы обмена → УчебныйОбмен: длина кода 9, тип Строка, наименование длиной 100. Распределённая информационная база выключена; состав плана пустой.

  7. Добавьте реквизит АдресУчебногоУзла: Строка длиной 100, Проверка заполнения = Показывать ошибку. Модуль объекта и подписки должны быть пустыми; не добавляйте отправку сообщений или внешние действия.

  8. Добавьте макет УчебнаяПамятка типа Текстовый документ, одна строка: Этот узел используется только для учебных примеров. История данных для плана не включена. Обновите конфигурацию базы данных.

  9. Каждый фрагмент запускайте отдельно на сервере в ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи. УчебныйОбмен не является существующим рабочим обменом КА2 или УТ.

  10. Узел каждый раз новый и периферийный. Существующие узлы и текущий узел базы не меняются. Запись, блокировка и удаление далее выполняются только над своим новым UUID в собственной отменяемой транзакции.

Если Метаданные.ПланыОбмена.Найти("УчебныйОбмен") = Неопределено Тогда
    ВызватьИсключение "Сначала создайте собственный учебный план обмена";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
    ВызватьИсключение "Не запускайте урок внутри чужой транзакции";
КонецЕсли;
СвояСсылка = ПланыОбмена.УчебныйОбмен.ПолучитьСсылку(Новый УникальныйИдентификатор);
Если СвояСсылка.ПолучитьОбъект() <> Неопределено Тогда
    ВызватьИсключение "Свой UUID уже используется, нужно новое значение";
КонецЕсли;
НачатьТранзакцию();
Попытка
    Узел = ПланыОбмена.УчебныйОбмен.СоздатьУзел();
    Если Узел.ЭтотУзел Тогда
        ВызватьИсключение "Нельзя использовать текущий узел базы";
    КонецЕсли;
    Узел.УстановитьСсылкуНового(СвояСсылка);
    Узел.УстановитьНовыйКод("У");
    Узел.Наименование = "Свой временный учебный узел";
    Узел.АдресУчебногоУзла = "example.invalid";
    Узел.Записать();
    Если Узел.ЭтотУзел Или Узел.Ссылка <> СвояСсылка Тогда
        ВызватьИсключение "Нельзя блокировать текущий или чужой узел";
    КонецЕсли;
    Попытка
        Узел.Заблокировать();
        Сообщить(Узел.Заблокирован());
    Исключение
        Узел.Разблокировать();
        ВызватьИсключение;
    КонецПопытки;
    Узел.Разблокировать();
    Сообщить(Не Узел.Заблокирован());
    ОтменитьТранзакцию();
Исключение
    Если ТранзакцияАктивна() Тогда
        ОтменитьТранзакцию();
    КонецЕсли;
    ВызватьИсключение;
КонецПопытки;
Сообщить(Не ТранзакцияАктивна());
Сообщить(СвояСсылка.ПолучитьОбъект() = Неопределено);

Разбор по шагам

  1. Узел создан только этим фрагментом и записан лишь внутри своей транзакции.

  2. Проверяем свою ссылку и периферийность перед блокировкой.

  3. Заблокировать и Заблокирован относятся к этому объекту. Не меняем глобальные настройки доступа или монопольный режим.

  4. Разблокировать вызывается и на успешном, и на ошибочном пути до отмены транзакции.

  5. После отмены свой узел исчезает. Никакая проверка конкурентного сеанса в этом уроке не объявляется выполненной.

Как проверить результат

  1. Четыре сообщения Истина, включая отсутствие активной транзакции и своего узла после отмены.

  2. Объектная блокировка снимается явно; межсеансовая конкурентная проверка выполняется отдельно в учебной базе.

Ожидаемый результат

Показан жизненный цикл блокировки только собственного учебного объекта.

На что обратить внимание

  1. Заблокирован не подтверждает сетевую доступность узла.

  2. Не блокируйте текущий узел или существующий рабочий узел ради упражнения.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.