Тип: Булево. Содержит признак пометки на удаление элемента справочника. Истина - пометка удаления установлена.
Полное описание, параметры и ограничения
СправочникОбъект.<Имя справочника>.ПометкаУдаления (CatalogObject.<Catalog name>.DeletionMark)
СправочникОбъект.<Имя справочника> (CatalogObject.<Catalog name>)
ПометкаУдаления (DeletionMark)
Доступен, начиная с версии 8.0.
Использование:
Чтение и запись.
Описание:
Тип: Булево.
Содержит признак пометки на удаление элемента справочника.
Истина - пометка удаления установлена.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Создать товар в памяти и убедиться, что записи ещё нет
Новый объект справочника можно заполнить до записи. Различаем объект, ссылку и дополнительную служебную структуру.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.
Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.
Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.
Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.
Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.
Если Метаданные.Справочники.Найти("УчебныеТовары") = Неопределено Тогда
ВызватьИсключение "Сначала создайте учебный справочник по подготовке";
КонецЕсли;
Товар = Справочники.УчебныеТовары.СоздатьЭлемент();
Товар.Наименование = "Учебная книга";
Товар.Артикул = "A-01";
Товар.Цена = 250;
Товар.ДополнительныеСвойства.Вставить("ИсточникУчебныхДанных", "Пример в памяти");
Сообщить(Товар.ЭтоНовый());
Сообщить(Товар.Ссылка.Пустая());
Сообщить(Не Товар.ЭтоГруппа);
Сообщить(Не Товар.ПометкаУдаления);
Сообщить(Товар.Метаданные().Имя = "УчебныеТовары");
Сообщить(Товар.Наименование);
Сообщить(Товар.ДополнительныеСвойства.ИсточникУчебныхДанных);
Сообщить(Товар.Модифицированность());
Сообщить("Записать не вызывался: товар существует только как объект в памяти");Разбор по шагам
СоздатьЭлемент создаёт объект, но не выполняет запись. Наименование, Артикул и Цена присваиваются его реквизитам в памяти.
До записи у этого нового объекта ссылка пустая. ЭтоНовый проверяет состояние объекта, Пустая — состояние ссылки.
ДополнительныеСвойства — служебная Структура, не новый реквизит справочника и не автоматическое сохранение в базе.
Модифицированность показывает изменения этого экземпляра, не проверяет параллельные действия других пользователей.
Как проверить результат
ЭтоНовый, Пустая ссылки, проверки группы/пометки и имени метаданных дают Истина.
В сообщениях Учебная книга и Пример в памяти; экземпляр заполнен.
Откройте список УчебныеТовары: новая строка не появилась, поскольку Записать отсутствует.
Ожидаемый результат
Заполнен один новый объект справочника без изменения данных базы.
На что обратить внимание
Создание экземпляра не выполняет бизнес-проверки записи и не гарантирует, что объект можно сохранить.
Нельзя вызывать Прочитать у нового объекта: в базе пока нет строки для чтения.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Сравнить пометку и прямое удаление на собственном временном товаре
Пометка сохраняет объект, прямое Удалить убирает запись без проверки ссылочной целостности. Оба действия показаны только на только что созданном учебном объекте в отменяемой транзакции.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.
Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.
Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.
Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.
Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.
Запускайте строго в новой пустой базе Учебная85, с пустыми модулями объектов и без подписок. Здесь временно записываются только созданные самим примером объекты.
Отмена транзакции выполняется и при успехе, и при ошибке. Не заменяйте её фиксацией и не запускайте внутри транзакции вызывающего кода.
Откат базы не отменяет письма, HTTP-запросы и другие внешние действия обработчиков. Поэтому копия рабочей конфигурации с неизвестными обработчиками не заменяет эту подготовку.
Если Метаданные.Справочники.Найти("УчебныеТовары") = Неопределено Тогда
ВызватьИсключение "Сначала создайте учебный справочник по подготовке";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Запустите учебную задачу вне чужой транзакции";
КонецЕсли;
Ссылка = Справочники.УчебныеТовары.ПолучитьСсылку(Новый УникальныйИдентификатор);
НачатьТранзакцию();
Попытка
Товар = Справочники.УчебныеТовары.СоздатьЭлемент();
Товар.УстановитьСсылкуНового(Ссылка);
Товар.Наименование = "Учебный товар для удаления";
Товар.Артикул = "DELETE-OWN-ONLY";
Товар.Цена = 250;
Товар.Записать();
Собственный = Ссылка.ПолучитьОбъект();
Если Собственный = Неопределено Тогда
ВызватьИсключение "Не найден только что созданный учебный объект";
КонецЕсли;
Если Собственный.Ссылка <> Ссылка Или Собственный.Наименование <> "Учебный товар для удаления" Тогда
ВызватьИсключение "Нельзя изменять чужой объект";
КонецЕсли;
Собственный.УстановитьПометкуУдаления(Истина, Ложь);
Собственный.Прочитать();
Сообщить(Собственный.ПометкаУдаления);
Сообщить(Ссылка.ПолучитьОбъект() <> Неопределено);
Собственный.УстановитьПометкуУдаления(Ложь, Ложь);
Собственный.Прочитать();
Сообщить(Не Собственный.ПометкаУдаления);
Если Собственный.Ссылка <> Ссылка Тогда
ВызватьИсключение "Перед прямым удалением изменилась ссылка";
КонецЕсли;
Собственный.Удалить();
Сообщить(Ссылка.ПолучитьОбъект() = Неопределено);
ОтменитьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Сообщить(Не ТранзакцияАктивна());
Сообщить(Ссылка.ПолучитьОбъект() = Неопределено);Разбор по шагам
Новый UUID назначен новому объекту самим кодом. Поиск по общему наименованию, первой строке списка или рабочей ссылке отсутствует.
Метод УстановитьПометкуУдаления сам сохраняет изменение и требует немодифицированный экземпляр. Поэтому работаем с заново прочитанным объектом.
Второй аргумент Ложь исключает массовую пометку подчинённых. Помеченная запись всё ещё существует.
Снимаем пометку, перечитываем и ещё раз проверяем собственную ссылку. Только затем вызываем прямое Удалить.
Весь опыт отменяется транзакцией. Поскольку создание тоже было внутри неё, после отката учебной строки нет.
Как проверить результат
Четыре проверки внутри транзакции Истина: пометка, существование, снятие пометки, отсутствие после прямого удаления.
После отката ещё два Истина: чужая транзакция не затронута, собственная строка отсутствует.
Ожидаемый результат
Практически разделены две операции удаления на изолированном собственном объекте.
На что обратить внимание
Прямое Удалить не проверяет ссылочную целостность и не заменяет штатное удаление помеченных объектов в рабочей базе.
Никогда не переносите вызов на существующий товар: восстановление после прямого удаления не гарантируется.
Транзакция не защищает от внешних побочных действий подписок; нужны именно пустые учебные модули.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.