ПланОбменаОбъект.<Имя плана обмена>.ПометкаУдаления

Свойства · DeletionMark

Тип: Булево. Содержит признак пометки на удаление узла. Истина - пометка удаления установлена.

Полное описание, параметры и ограничения

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

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

ПометкаУдаления (DeletionMark)

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

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

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

  2. УстановитьПометкуУдаления меняет пометку своей записи. После пометки ПолучитьОбъект всё ещё возвращает свой узел.

  3. Снятие пометки также проверяется повторным чтением только своей ссылки.

  4. Перед Удалить повторно проверяем, что объект периферийный и имеет именно собственный UUID.

  5. Удалить физически удаляет собственную временную запись внутри транзакции. Удалённый объект после этого не используется.

  6. В конце транзакция отменяется: ни создание, ни пометки, ни удаление не фиксируются.

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

  1. Пять сравнений Истина.

  2. Существующие узлы не затрагиваются; по своему UUID в конце нет записи и чужая транзакция не отменялась.

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

На новом изолированном объекте показана разница между пометкой и физическим удалением.

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

  1. Удалить не является массовой очисткой помеченных объектов и не предназначен для рабочего текущего узла.

  2. Модуль, подписки и состав учебного плана должны быть пустыми, как указано в подготовке.

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

Создать черновик узла без запуска обмена

Новый периферийный узел существует только в памяти. Ссылка и состояние отличаются от текущего узла базы; счётчики сообщений ещё не являются результатом передачи.

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

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

Подготовка

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

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

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

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

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

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

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

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

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

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

Если Метаданные.ПланыОбмена.Найти("УчебныйОбмен") = Неопределено Тогда
    ВызватьИсключение "Сначала создайте собственный учебный план обмена";
КонецЕсли;
Узел = ПланыОбмена.УчебныйОбмен.СоздатьУзел();
Если Узел.ЭтотУзел Тогда
    ВызватьИсключение "Нельзя изменять текущий узел информационной базы";
КонецЕсли;
Узел.Наименование = "Собственный черновик узла";
Узел.ДополнительныеСвойства.Вставить("Цель", "Изучить новый узел");
Если Не Узел.ДополнительныеСвойства.Свойство("Цель", СохраненнаяЦель) Тогда
    ВызватьИсключение "В собственном черновике отсутствует учебная цель";
КонецЕсли;
Сообщить(Узел.ЭтоНовый());
Сообщить(Узел.Ссылка.Пустая());
Сообщить(Узел.ПолучитьСсылкуНового().Пустая());
Сообщить(Не Узел.ЭтотУзел);
Сообщить(Не Узел.ПометкаУдаления);
Сообщить(Узел.НомерОтправленного = 0);
Сообщить(Узел.НомерПринятого = 0);
Сообщить(СохраненнаяЦель = "Изучить новый узел");
Сообщить("Версия черновика: " + Узел.ВерсияДанных);
Сообщить("Дата обмена: " + Строка(Узел.ДатаОбмена));

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

  1. СоздатьУзел возвращает новый объект, который ещё не записан. ЭтотУзел проверяется до изменения полей.

  2. Ссылка пуста, а ПолучитьСсылкуНового тоже пустая до явного резервирования UUID.

  3. НомерОтправленного и НомерПринятого относятся к разным направлениям сообщений. Они не равны количеству товаров или документов.

  4. ДополнительныеСвойства хранит временную цель упражнения. Это не добавление реквизита в метаданные.

  5. ДатаОбмена связана с обменом мобильного клиента с автономным режимом; чтение даты не запускает обмен и не задаёт время текущего урока.

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

  1. Восемь сравнений Истина в новом учебном узле.

  2. Версия и дата диагностические: ни одно сообщение не было сформировано или отправлено.

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

Создан собственный черновик периферийного узла без сетевых действий и записи.

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

  1. Не устанавливайте ЭтотУзел=Истина для имитации текущей базы.

  2. Нулевые счётчики не являются подтверждением успешного обмена.

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

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

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

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

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