Иногда возникает необходимость удалить из базы DIRECTUM какую-либо запись справочника. Но удалить ее не удастся в случае, если существуют записи в других справочниках, документы или константы, в реквизитах которых используется удаляемая запись. Эти записи в свою очередь могут использоваться в др. объектах и т.д. Т.е. для удаления исходной записи необходимо удалить все “дерево” – под этим и подразумевается каскадное удаление записи справочника.
Для реализации каскадного удаления был разработан сценарий, предназначенный для администраторов и разработчиков. Для успешного использования сценария у пользователя должны быть права на удаление самой записи и всех объектов, каскадно использующих данную запись.
Как работает сценарий.


Рис. 1. Отчет.
Особенности работы сценария:
в
таких случаях выполнение сценария прерывается и выводится сообщение с указанием справочника и наименования записи, которую не удалось удалить. Следует вручную очистить значение соответствующего реквизита и запустить сценарий заново. Однако, для случая
очистка
реквизита “Руководитель” выполнятся автоматически. Сценарий также может быть запущен из командной строки или другой компоненты . Дополнительные параметры для запуска сценария: “RefType” – имя типа справочника, “ID” – ИД записи, “UseType” – тип использования “Удаление/Отчет”:
SBLauncher.exe S=SQLSERVER D=DIRECTUM -CT=Script -F="CascadeDeleting"
-R="RefType=ОРГ|ID=101702|UseType=Отчет"
Работает в DIRECTUM 4.9.
******************01.02.2013******************
Добавлено:
1) после успешного завершения сценария выводится список удаленных или очищенных объектов;
2) в документах предлагается очистить необязательный реквизит.
CascadeDeleting.zip (19,28 Кб)
Константы очищать нельзя: там может содержаться значение, только внешне похожее на эту запись справочника. В реальности это может быть код записи совсем другого справочника или произвольное число.
Отличная разработка.
Пожелание: После успешного удаления выводить список удаленных объектов. Не знаю насколько полезно, но интуитивно хочется знать полный результат работы сценария.
Вещь действительно полезная, но хотелось бы чтобы можно было выбрать несколько записей из справочника и после выполнения удаления выдавался запрос "Хотите удалить записи из других справочников? Да/Нет" и если да, то снова появлялось окно выбора справочника
Очень необходимая возможность! Жаль, что только для 4.9(
'Константа', '', '', con.OurFirm, '', con.Const
from
MBAnalit a, MBConst con
where
con.OurFirm = a.Analit
and a.Analit = "&Analit&"
order by
con.Const"
Спасибо. Очень полезный сценарий. Есть еще одна хотелка))) Возможно добавить в сценарий функционал восстановления удаленных записей? Например, после удаления записи формируется SQL – запрос, после выполнения которого, удаленные записи восстанавливаются.
А в целом сценарий очень полезен. Спасибо!
В DIRECTUM 5.0 сценарий валится на попытке обработать несохраняемый реквизит - в ошибке пишет, что не удается обратится к полю NamaNS. Решил проблему добавлением в двух функциях, используемых сценарием, условие, чтобы обрабатывались только сохраняемые реквизиты.
Авторизуйтесь, чтобы написать комментарий