1с установить пометку на удаление программно

Обновлено: 07.07.2024

Особенности использования поля "ПометкаУдаления" объектов базы данных

В структуре объектов базы данных 1С:Предприятия 8 имеется поле ПометкаУдаления. Оно предназначено для работы механизма удаления с контролем ссылочной целостности. Данный механизм позволяет исключить удаление пользователем объекта, если на него имеются ссылки в других данных хранящихся в базе данных.

С точки зрения системы, удаление без контроля ссылочной целостности (непосредственное удаление) допускается, и наличие в базе данных ссылок на отсутствующие объекты не является ошибкой. Область использования механизма удаления с контролем ссылочной целостности определяется разработчиком конфигурации и администратором. Разработчик конфигурации может регулировать возможность вызова непосредственного удаления пользователями для конкретных типов объектов с помощью права "Интерактивное удаление". Например, возможность непосредственного удаления может быть запрещена для всех пользователей или может быть оставлена только ответственным пользователям. Данное право влияет только на интерактивные действия, вызываемые стандартными командами системы. Если удаление выполняется средствами встроенного языка, то данное право может проверяться в модуле. Разумеется, в некоторых случаях непосредственное удаление должно выполняться, если это предусмотрено логикой решаемой задачи. Например, если выполняется массированное удаление данных регламентной обработкой. Тогда проверка права может не выполняться.

Механизм удаления с контролем ссылочной целостности предоставляет определенный сервис, но при этом не нарушает работу остальных механизмов. Пометка на удаление является только признаком того, что пользователь намеревается удалить объект. Поле ПометкаУдаления в 1С:Предприятии 8 по своему поведению, в основном, не отличается от других системных полей объекта. Оно может быть установлено присваиванием значения свойства объекта, и после выполнения записи объект будет фактически помечен на удаление.

Кроме возможности установки пометки удаления путем непосредственного присваивания свойства и записи объекта, существует метод УстановитьПометкуУдаления() . Этот метод выполняет установку свойства в указанное в параметре значение, запись объекта, а также дополнительные действия, содержание которых зависит от типа объекта. Например, для проведенного документа выполняется отмена проведения, а для справочника выполняется пометка на удаление всех подчиненных элементов в этом справочнике и в подчиненных справочниках. При выполнении пометки на удаление стандартными командами пользовательского интерфейса выполняются действия, соответствующие этому методу. Однако следует учитывать, что эти действия являются только рекомендованным типовым способом выполнения пометки на удаление. Они не являются обязательными. При установке пометки удаления путем присвоения значения свойства и записи объекта дополнительных действий не производится. Таким образом, разработчик может при необходимости выполнить пометку удаления без дополнительных действий.

Пометка на удаление является полем, значение которого используется системой в механизме удаления с контролем ссылочной целостности, однако сам процесс пометки на удаление и снятие пометки на удаление не является, с точки зрения объекта, каким-то выделенным процессом. Поэтому специального обработчика, сопровождающего пометку и снятие пометки, не существует. Так же как и для любого другого поля объекта, значение поля ПометкаУдаления может анализироваться в обработчиках ПередЗаписью() и ПриЗаписи() для выполнения каких-либо проверок или других действий. Если необходимо анализировать только записываемое значение, то достаточно проверять собственно значение поля. Если необходимо определить факт записи измененного значения, то в обработчике ПередЗаписью() необходимо организовать считывание значения данного поля из базы данных и сравнивать полученное значение с текущим значением.

Следует заметить, что в расширениях табличного поля существуют события ПередУстановкойПометкиУдаления . Однако эти события сопровождают только вызов пометки удаления с помощью стандартной команды. Поэтому эти события могут использоваться только для анализа интерактивного вызова пользователем пометки удаления в конкретной форме, а для решения общих задач контроля значения данного поля или выполнения связанных действий необходимо использовать события самого объекта.

Если документ помечен на удаление, то не допускается выполнение проведения этого документа. Однако допускается наличие движений у документа, помеченного на удаление, так как в 1С:Предприятии 8 понятие проведенности документа не связано жестко с наличием движений. Например, это используется для документов, предназначенных для ручного редактирования движений. В них при пометке на удаление не должно выполняться удаление движений, так как пользователь может снять пометку на удаление, и движения при этом не должны потеряться. В конфигурации средствами встроенного языка может быть реализовано снятие активности с записей регистров при установке пометки удаления такого документа. Однако это будет являться методологическим приемом, совмещающим пометку на удаление и отключение активности движений.

Из этой статьи вы узнаете, как в удалить в 1С объект при помощи программного кода, а также как поставить пометку на удаление.

В предыдущей статье, я рассказывал, как интерактивно удалить в 1С объект, и что для этого нужно настроить в правах конфигурации:

Программное удаление справочника в 1С

Для того чтобы программно удалить экземпляр справочника в 1С, необходимо воспользоваться методом Удалить объекта справочника. Для демонстрации разберу пример: разместим на форме обработки реквизит с ссылкой на справочник Контрагенты.

Реквизит управляемой формы 1С

И при выполнении команды формы обработки, будем удалять этот экземпляр справочника.

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

Замечу, что программное удаление произошло при таких правах на объект.

Права на справочник 1С

Право «Интерактивное удаление» снято, то есть мы не можем непосредственно удалять экземпляр этого объекта, но мы можем удалить его программно (благодаря установленному праву Удалить).

Замечу, что при программном удалении объекта контроль ссылочной целостности не происходит! Поэтом не следует злоупотреблять этой возможностью!

Программное удаление документа в 1С

Документ программным способом удаляется также, как и справочник: нужно воспользоваться методом Удалить() экземпляра объекта документа. Например, на форме этой обработки я размещу реквизит с ссылкой на документ.

Реквизит управляемой формы 1С

А при выполнении команды документ будет удаляться.

Как и в случае справочника, программное удаление документа стало возможным благодаря установленному праву «Удалить».

Права на документ 1С

Пометка на удаление программно в 1С

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

Для документов он имеет следующий синтаксис: УстановитьПометкуУдаления(<ПометкаУдаления>), где параметр ПометкаУдаления имеет тип булево.

Переделаем предыдущий пример: на форме разместим две команды.

Команды на управляемой форме

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

В этом коде, в процедуре УстановитьНаСервере() мы устанавливаем пометку на удаление, передав в метод УстановитьПометкуУдаления параметр Истина, а в процедуре СнятьНаСервере() снимаем пометку, передав Ложь.

Для объектов справочников метод УстановитьПометкуУдаления имеет следующий синтаксис:

Параметр ВключаяПодчиненные имеет тип Булево, и если установлено Истина, то будут помечены на удаление подчиненные элементы (если справочник иерархический), а также все объекты подчиненного справочника (если есть).

Продемонстрируем работу второго параметра: на форму поместим реквизит с типом булево, реквизит с типом ссылка на справочник Контрагенты , и сделаем две команды: установить и снять.

Реквизиты и команды на управляемой форме 1С

В обработчиках команд будем устанавливать и снимать пометку на удаление.

У справочника Контрагенты включим иерархию.

Иерархия справочника в 1С

И также сделаем подчиненный справочник.

Если мы установим пометку для группы с флажком подчиненные.

Пометка на удаление в 1С

То будет помечена группа и все входящие в неё объекты.

Пометка на удаление в 1С

А без установленного флага Подчиненные будет помечена только группа.

Пометка на удаление в 1С

Тоже самое с объектами из подчиненного справочника. При установленном флаге Подчиненные.

Пометка на удаление в 1С

Будет помечен на удаление и сам элемент справочника, и объекты подчиненного ему справочника.

Пометка на удаление в 1С

А иначе, будет помечен только сам элемент.

Пометка на удаление в 1С

Программировать в 1С за 11 шагов

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

Основы разработки в 1С такси

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму
.

можно оплатить вручную:

В этой статье узнаем как осуществляется удаление в 1С, научимся удалять объекты в 1С 8.3 напрямую, помечать их на удаление, и удалять помеченные на удаление объекты 1С.

Прямое удаление в 1С

В платформе 1С 8.3 имеется возможность удалить любой объект так, что он сразу исчезнет из базы 1С. Чтобы такая возможность предоставлялась, необходимо для нужного объекта у роли установить право «Интерактивное удаление».

Интерактивное удаление 1С

Если такое право у объекта установлено, то в меню «Ещё» формы списка объекта появится команда «Удалить».

Команда удалить в меню Ещё 1С

После применения этой команды, объект будет полностью удален из базы. Перед его удалением появится вопрос о том, согласны мы удалить этот объект или нет.

Вопрос перед удалением объекта 1С

Не рекомендуется в реальной базе оставлять возможность интерактивного удаления объектов.

Сейчас я продемонстрирую почему.

Допустим, у нас ссылка на элемент справочника Контрагент, который мы собираемся удалить, указана в каком-то реквизите документа.

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

Объект не найден в 1С

Таким образом, интерактивное удаление проходит без контроля ссылочной целостности: удаляя какой-то объект, платформа не проверяет, указана ли ссылка этот объект где-то ещё, тем самым мы ставя под угрозу ссылочную целостность данных базы.

Пометка удаления 1С

Для того, чтобы случайно не удалить объект, ссылка на который возможно указана в каких-то других данных базы 1С, необходимо сначала пометить этот объект на удаление, а потом удалить его при помощи специальной утилиты, которая в процессе удаления будет осуществлять контроль ссылочной целостности.

Чтобы пользователь имел возможность пометить на удаление какой-то объект, необходимо, у роли для этого объекта было установлено право «Интерактивная пометка на удаление».

Интерактивная пометка на удаление 1C

На рисунке выше я также снял право «Интерактивное удаление», с целью запретить удалять экземпляры объекта без контроля ссылочной целостности.

Сейчас пользователь не может сразу удалить какой-то элемент объекта, для этого ему необходимо сначала пометить этот объекта на удаление. Делается это так: нужно выделить объект в форме списка, вызвать контекстное меню и выполнить команду «Пометить на удаление/снять пометку» (или просто нажать клавишу Del).

Пометить на удаление/снять пометку 1C

Также, можно пометить сразу несколько элементов, выделив нужные.

Пометить на удаление/снять пометку 1C

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

Объекты помеченные на удаление 1C

Нам осталось удалить помеченные объекты из базы.

Удаление помеченных в 1С

Если нам нужно дать пользователю возможность удалять из базы помеченные на удаление элементы какого-нибудь объекта, то необходимо, чтобы у роли было для этого объекта установлено право «Интерактивное удаление помеченных».

Право интерактивное удаление помеченных в 1C

Для удаления помеченных на удаление объектов следует воспользоваться утилитой «Удаление помеченных объектов». Начиная с платформы 1С 8.3.15, путь к ней следующий: необходимо в меню «Сервис и настройка» выполнить команду «Функции для технического специалиста».

Функции для технического специалиста 1С

В открывшемся окне следует в ветке «Стандартные» найти и выполнить команду «Удаление помеченных объектов».

Удаление помеченных объектов 1С

В платформе редакции 8.3.14 и ниже, путь к окну с командой «Удаление помеченных объектов» будет следующий:

Меню все функции 1С

В открывшейся утилите «Удаление помеченных объектов», сначала будет предложено выбрать вариант удаления: полное удаление или выборочное.

Удаление помеченных объектов 1С

Если выбрать выборочное удаление, то в следующем окне будет предложено выбрать те объекты, которые следует удалить.

Удаление помеченных объектов 1С

Удаление помеченных объектов 1С

В этой же утилите можно посмотреть, где в базе присутствует ссылка на объект, который пытались удалить.

Удаление помеченных объектов 1С

Таким образом, установка пометки на удаление и последующее применение утилиты «Удаление помеченных объектов» позволяет производить более щадящее для ссылочной целостности базы данных удаление объектов.

Программировать в 1С за 11 шагов

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

Основы разработки в 1С такси

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму
.

можно оплатить вручную:

Внимание. Непосредственное удаление справочника ведет к нарушению целостности данных. Например если удалить Контрагента по которому были сделаны документы, то в этих документах будет пустая ссылка.
Поэтому - лучше на удаляемые объекты ставить пометку на удаление, а непосредственное удаление делать встроенной функцией:
в 1С 7.7 или 8.1 - Меню-Операции - Удаление помеченных объектов.
в 1С 8.2 - Меню - Все функции. - Стандартные - Удаление помеченных объектов.
Код 1C v 8.2 УП

Код 1C v 8.х

Разместил: E_Migachev  Версии: | 7.x | 8.x | 8.2 УП |  Дата: 23.08.2009   Прочитано: 65549

Распечатать

Похожие FAQ

Еще в этой же категории

Создание и запись нового элемента справочника  12
НаКлиенте Процедура ПоКнопкеНовыйКонтрагент(Команда) // Вставить содержимое обработчика. Перем НовыйКонтрагент; НовыйКонтрагент = Новый Структура(" Наименование, ПолноеНаименование, ИНН" ); НовыйКонтрагент.Наименование = " РиК ООО" ; НовыйКон Как для Выбора Элемента Справочника Открыть Форму Выбора с нужной Открытой Группой?  8
Порядок действий такой: 1. В поле ввода " Номенклатура" добавь событие ПриНачалеВыбора. 2. Установи в них СтандартнаяОбработка = Ложь; 3. Получи форму выбора нужного справочника 4. Установи отбор по родителю 5. Открой форму для выбора Теп Перебрать, выбрать элементы справочника  7
Выборка = Справочники.Сотрудники.Выбрать(); //или Выборка = Справочники.Сотрудники.ВыбратьИерархически(); Пока выборка.Следующий() = 1 Цикл . //действия с очередным элементом . Сообщить(" Сотрудник " + выборка.Наименование); КонецЦикла; / Перебрать, выбрать элементы подчиненного справочника  7
Перебор элементов справочника принадлежащих элементу другого справочника, т.е когда один справочник подчинен другому справочнику. // Получить выборку по указанному контрагенту. Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент); Пока Вы Как программно открыть и выбрать элемент справочника, выбор элемента справочника?  7
Просто открыть: // Получить форму выбора справочника как подчиненную форме документа ФормаСписка = Справочники.Номенклатура.ПолучитьФормуСписка( , ЭтаФорма); // Открыть полученную форму ФормаСписка.Открыть(); Открыть для выбора элемента: Ф Посмотреть все в категории Справочники

Читайте также: