Выборочное удаление помеченных объектов (управляемые формы 1С 8.2)

43 Comments

  1. Поручик

    (0) Для большей универсальности все остальные ссылочные объекты тоже добавить.

    Reply
  2. Pro-tone

    (1) угу, сделаю, просто делал под свои цели — мне только 3 объекта были нужны

    Reply
  3. apostal86

    Вы пишете в описании: «Это крайне полезно при большой нагрузке на сервер 1С с большим количеством пользователей при большом объеме удаляемых объектов. Дабы не «подвешивать» сервер на долгое время можно назначить кол-во удаляемых объектов в порции, а также время следущего вызова процедуры удаления» — подразумеваете удаление не в монопольном режиме?

    Reply
  4. Pro-tone

    (3) apostal86, все верно, не в монопольном режиме обработка удаления может очень сильно грузить сервер 1С особенно при большом кол-ве помеченных на удаление объектов, такое наблюдалось и не раз. Пакетное удаление решает эту проблему.

    Reply
  5. Samarin

    Спасибо за обработку — полезная!

    Что я изменил:

    1) Поменял местами кнопки «Контроль» и «Удаление», так интуитивней — юзеры быстрее разберутся.

    2) Флажки «Использование» в дереве — по умолчнию Истина, при открытии формы обработки. Чтобы сразу можно после запуска нажимать кнопку «Контроля», без лишних телодвижений.

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

    Reply
  6. Pro-tone

    (5) спасибо за комментарий.

    1) Возможно — надо будет прикинуть как лучше

    2) При большом кол-ве объектов поиск помеченных по всем видам объектов это далеко не очень хорошо, потому что это порой отнимает значительное серверное время на поиск всех объектов с пометками удаления. На то оно и выборочное удаление, чтобы пользователь сам мог проставить флажки на те объекты, что ему необходимы.

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

    Вы имеете виду поиск ссылок с рекурсией. Это сделано в моей публикации http://infostart.ru/public/148771/ Рекомендую ознакомиться. Там еще много нового и полезного, но она не бесплатная.

    Reply
  7. OleGazz

    спасибо за обработку, очень интересная вещь

    Reply
  8. Samarin

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

    Reply
  9. Pro-tone

    Samarin, это совершенно несложно, и без проблем могу сделать тогда в самое ближайшее время.

    Reply
  10. Pro-tone

    Samarin, сделал кнопки по вашей просьбе =)

    Reply
  11. flack

    При «Контроле удаления» в список выводятся только те объекты, которые нельзя удалить!

    Кнопка «Удалить» неактивна.

    Платформа: 8.2.15.310

    Конфигурация: ЗУП, редакция 2.5.

    Reply
  12. Pro-tone

    (11) все верно, так и должно быть. Если нельзя удалить, значит есть подчиненные объекты. Хотите их видеть и легко удалять тоже в виде дерева? Рекомендую купить http://infostart.ru/public/148771/

    Reply
  13. flack

    Дело в том, что есть объекты, которые ни с чем ни связаны.

    Стандартная обработка УдалениеПомеченныхОбъектов с контролем целостности спокойно удаляет несвязанные.

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

    Reply
  14. Pro-tone

    (13) моя обработка имеет проверку контроля еще и по подчиненным записям регистрам сведений, чего не имеет типовая. Поэтому вы и думаете, что Стандартная обработка УдалениеПомеченныхОбъектов с контролем целостности спокойно удаляет несвязанные. Потому что в ней нет проверки на подчиненные записи РС.

    Если вы напишите простой код для проверки наличия ссылок тех объектов, которые моя обработка не дает удалить, то увидите записи РС. При удалении объекта типовой обработкой, если он имеет свои ссылки в записях РС и записи не подчинены регистратору, а просто содержат поле со ссылкой на удаляемый объект, то скорее всего после удаления объекта останется запись, в поле которой будет такая вещь как «<Объект не найден>» (например, когда включено версионирование). Что не есть гуд. Данная моя обработка просто не даст такое допустить, а коммерческая в (12) дает возможность удалять любые подчиненные объекты, включая записи РС.

    Reply
  15. flack

    В конфигурации Документооборот (1С:Документооборот 8 КОРП, редакция 1.1 (1.1.4.1)) обработка УдалениеПомеченныхОбъектов работает с контролем целостности как с РС, так и с остальными объектами как положено.

    Reply
  16. Pro-tone

    (15) ОК, хорошая иллюстрация! Стало быть типовая автоматически чистит записи РС если нет других подчиненных объектов. Без проблем — могу это так сделать, чтоб записи тоже вычищались.

    Reply
  17. flack

    Неплохо было бы сделать функционал, позволяющий выбирать:

    1.Удаляем с контролем целостности (мягкий)

    2.Удаляем без контроля целостности (грубый)

    3.Удаляем объект и все связанные с ним объекты (очень грубый =))

    Reply
  18. Pro-tone

    (17)

    1. Уже есть

    2. Зачем это надо? Ошибки плодить в базе?

    3. Речь идет о рекурсии. К тому же не видя, что удаляем — это плохо. А чтобы сделать видимым полное дерево подчиненных ссылок — это надо писать рекурсию с заполнением дерева ссылок.

    В данной обработке ее делать не буду — слишком трудоемко.

    Хотя поддерживаю сделать удаление автоматически подч. записей РС.

    Reply
  19. bird21

    Для большего удобства было бы здорово добавить стандартный функционал, позволяющий добавлять обработку в базу на управляемых формах как дополнительную обработку.

    А-то возникает ошибка «Ошибка получения сведений о внешней обработке такой-то при ее загрузке: Метод объекта не обнаружен (СведенияОВнешнейОбработке)».

    Reply
  20. Pro-tone

    (19) Сделано. Обновил до 1.5. Там уже есть авторегистрация доп.обработки.

    Reply
  21. zhenya17

    Поставила плюсик.

    Из пожеланий: хочется, чтобы можно было открывать на просмотр те объекты, из-за которых невозможно удалить исходный. Сейчас ссылки отображаются, но чтобы понять, что в них, приходится дополнительно лезть в журналы документов, справочники и т.п.

    Reply
  22. Liah82

    На платформе 8.2.18.109 конфигурации Бух. предприятия 2.0.52.6 почему-то вообще не запускается

    Reply
  23. Pro-tone

    (21) принято

    (22) потому что это обработка для управляемого приложения. В обычном работать не будет.

    Reply
  24. Eskimos

    {Форма.Форма.Форма(76)}: Значение не является значением объектного типа (ПолноеИмя)

    СтрокаПодчиненныеНайденныеСсылки.ТипОбъектаСтр = Метаданные.НайтиПоТипу(ТипЗнч(ТекСтрока.Данные)).ПолноеИмя();

    Вот такая ошибка вылазит.

    1С 8.2.18.61 База 1С:Розница

    Reply
  25. Putin_VV

    не открывается обработка ни одной УТ ни БП

    Reply
  26. Pro-tone

    (25) Потому что ваши УТ и БП на обычном приложении, а эта обработка для управляемого.

    Reply
  27. Ibrogim

    1) Не плохо бы вставить ОписаниеОшибки() в попытку удаления объекта

    А то в случае фэйла просто краснеет текст «можно удалить» и непонятно, что произошло или не произошло.

    УТ11.1.2.27 не удаляет объекты, которые спокойно удаляет типовая обработка

    Ошибка:

    {Форма.Форма.Форма(197)}: Ошибка при вызове метода контекста (Удалить): Нарушение прав доступа!

    Обработка запущена под полными правами.

    2) Рядом с большой кнопкой «плюсануть разработку» можно сделать небольшую «минусануть».

    Reply
  28. Pro-tone

    (27) под полными правами запускайте

    Reply
  29. Ibrogim

    (28) Если вы внимательно прочитаете моё сообщение, то увидите :

    Обработка запущена под полными правами.
    Reply
  30. Pro-tone

    (29) Значит RLS наложен, в запросе к метаданным нужно довесить ВЫБРАТЬ РАЗРЕШЕННЫЕ

    Reply
  31. Ibrogim

    (30) На выбранный объект RLS не наложены. Связанных объектов или РС нет (уже всё удалил)

    + повторюсь, что типовая обработка объект удаляет без проблем.

    У вас есть под рукой УТ11? Попробуйте удалить реализацию вашей обработкой (предварительно почистив связанные объекты и РС)

    Reply
  32. Pro-tone

    (31) На работе нет под рукой УТ, дома гляну.

    Reply
  33. bird21

    Пользуюсь уже некоторое время версией 1.5.

    На БП 3.0 возникла проблема: обработка не удаляет объекты помеченные на удаление, но ссылающиеся друг на друга, при этом стандартное удаление помеченных объектов спокойно их удаляет.

    Reply
  34. zhenya17

    (33) bird21, +1

    Это не проблема в Бух 3.0, это проблема обработки 🙂

    Мне тоже приходится удалять такие объекты в монопольном режиме стандартной обработкой…

    Reply
  35. Naumov

    Из обработки невозможно открыть объекты, отображаемые в списке.

    Reply
  36. Klesk666

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

    Reply
  37. Klesk666

    (27)

    УстановитьПривилегированныйРежим(Истина);

    ТекОбъект.Удалить();

    УстановитьПривилегированныйРежим(Ложь);

    (37)

    Для Каждого ТекСтрока Из ТабСсылокНаОбъект Цикл

    //Klesk666

    Если ТекСтрока.Ссылка=Выборка.Ссылка и Выборка.Ссылка.ПолучитьОбъект().Метаданные()=ТекСтрока.Метаданные Тогда

    Продолжить;

    КонецЕсли;

    //Klesk666

    Reply
  38. Aphanas

    Я думаю, что так долго работает… А там «НайтиПоСсылкам» в цикле вызывается, каждый раз для одного элемента. о_О

    Reply
  39. Pro-tone

    (39) а вы как иерархию построите зависимых объектов если сразу в НайтиПоСсылкам() скормите все помеченные на удаление объекты вне цикла? Метод вам вернет просто плоскую таблицу значений. Как тут раз идея та, что видны все зависимые объекты в дереве значений, а не просто список всего что нашло.

    Reply
  40. Aphanas

    (40) Я бы искал ссылки при разворачивании узла дерева.

    Reply
  41. Pro-tone

    (41) НайтиПоСсылкам() найдет первые зависимые объекты, у него нет в функционале рекурсивного поиска, на этом принципе работает типовое удаление объектов. Как вы без рекурсии (в цикле) обойдете все зависимые от зависимых объекты? К тому же ряд зависимых объектов не найдет даже этот метод, если мы говорим о записях РС, например.

    Reply
  42. Aphanas

    (42) А, ну да

    Reply
  43. alexandr_astafiev

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

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *