Удаление помеченных объектов (немонопольное) для управляемых (UPD: и обычных) форм

Добавлен немонопольный режим.
Добавлена возможность частичного удаления, предварительно сделав отбор по метаданным (ссылочные типы).
Добавлена возможность интерактивной корректировки списка исключаемых типов ссылок.

Изнаначально взято из конфигурации 1с Документооборот.

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

Используется форма ВыборОбъектовМетаданных, взятая из общих форм 1с Документооборот. Подошла без единого исправления, даже позаимствовал функцию ЗначениеПометкиЭлементов в основную форму обработки.

В встроенной в кофигурацию обработке процедуры расположены в модуле менеджера. Пришлось перенести их в модуль объекта. Возможно вставка в конфигурацию.

Есть аналогичные публикации, например, http://forum.infostart.ru/forum24/topic43769/.
Отличий не знаю, т.к. у меня нет прав на скачивание Cry.

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

UPD: Добавлена обычная форма. Некоторые изменения, в основном, косметического характера.

UPD2: Исправлена часть ошибок, добавленная при предыдущем обновлении :). Добавлены флажки «Сообщать об удаленных» и «Удалять в транзакции». Количество удаляемых в монопольном и немонопольном режимах, практически, сравнялось.

       

 //Удаляемые = осОбработкаОбъект.ПолучитьПомеченныеНаУдаление();
Удаляемые = осОбработкаОбъект.ПолучитьПомеченныеНаУдаление().Результат;
//ЗначениеВРеквизитФормы(осОбработкаОбъект, "Объект");

UPD3: Исправлены замеченные ошибки.

UPD4: Исправлена ошибка: планы видов расчета не включались в дерево метаданных — ошибка копи-пасты, перенесенная из 1с-Документооборот. Конечно, документообороту виды расчета глубоко параллельны, но мне вот понадобились :).

UPD5: Добавлены ПРОЦЕДУРЫ И ФУНКЦИИ РЕГИСТРАЦИИ обработки в информационной базе

UPD6: Исправлены замеченные ошибки отображения статуса возможности удаления. Замечено, что если установлена дата запрета редактирования и есть ссылки на записи периодическго регистра сведений с более ранним периодом, чем дата запрета редактирования, то статус зеленый (можно удалить), но удалить невозможно. Пока ничего не делал по этому поводу.

UPD7: Добавил планы обмена.

41 Comments

  1. wialex

    Полезная обработка. Очень пригодилась.

    Reply
  2. ivdic

    пробовал на документообороте ПРОФ выдает ошибку

    {Форма.ОсновнаяФормаУ.Форма(766)}: Ошибка при вызове метода контекста (ЗагрузитьЗначения)

    сзУдаляемые.ЗагрузитьЗначения(Удаляемые);

    по причине:

    Несоответствие типов (параметр номер ‘1’)

    Reply
  3. Спасибо. Действительно, не протестировал режим полного удаления в УФ при апгрейде. Подправил.

    Reply
  4. Поручик
    Reply
  5. Спасибо, добавил.

    Reply
  6. Поручик

    (7) Если будете обновлять, не забудьте по ПланыОбмена.

    Планы обмена не включаются в дерево метаданных при выборочном удалении — ошибка копи-пасты, перенесенная из 1с-Документооборот. Конечно, документообороту обмены глубоко параллельны, но мне вот понадобились.

    Reply
  7. (9) Поручик,

    Добавил. Гран мерси за конструктивные предложения.

    Правда, планы обмена не совсем побоку для 1с-Документооборот, а вот планов счетов или планов видов расчетов там, действительно нет. Ведь по сути Документооборот- это АРМ секретаря (делопроизводителя). И даже объекты метаданных типа документ, в отличие от большинства конфигураций, носят вспомогательный характер. Основные объекты — справочники и бизнес-процессы.

    А по планам расчетов там, действительно, была ошибка. И до сих пор есть (смотрел в релизе 1.2.5.3 от 30.08.12). Выглядит так:

    КоллекцииОбъектовМетаданных_НоваяСтрока(«ПланыВидовРасчета»,            «Планы видов характеристик»,      БиблиотекаКартинок.ПланВидовХарактеристик, БиблиотекаКартинок.ПланВидовХарактеристикОбъект, Ложь, КоллекцииОбъектовМетаданных);

    Правда, эта общая форма там, по-моему, не используется, держат на всякий случай.

    Reply
  8. ilya2184

    Все хорошо и так работает, но я в коде изменил кое-что:

    Модуль объекта строка примерно 284 (чтобы не при каждой итерации медленный поиск в метаданных был)

    ИзмеренияРегистра = Метаданные.НайтиПоПолномуИмени(лИмяМетаданных).Измерения;
    Для каждого лИзмерение Из ИзмеренияРегистра Цикл
    

    В модуле формы «ОсновнаяФормаУ» чобы влоделца не в попытке получал:

    МД_Справочники = Метаданные.Справочники; //перед циклом
    Для Каждого МассивПомеченныхЭлемент Из МассивПомеченных Цикл
    …
    ТекущееМД = МассивПомеченныхЭлемент.Метаданные(); //внутри цикла: платим памятью за быстродействие
    …
    Если МД_Справочники.Найти(ТекущееМД.Имя)<>Неопределено И ТекущееМД.Владельцы.Количество()>0 Тогда
    лВладелецЭлемента = МассивПомеченныхЭлемент.Владелец;
    КонецЕсли;
    …
    КонецЦикла;
    

    Показать

    Reply
  9. Stradivari

    выручила обработочка, спсб)

    Reply
  10. Confucius

    Подскажите обработка не проверяет ссылочную целостность? Запустил автоматическое и все удалила..хотя куча ссылок было и не удаляемых объектов дофига. Начал по коду смотреть и увидел УдалитьОбъекты(УдаляемыеОбъекты, Ложь);

    А в справке пишите что проверяется ссылочная целостность… Как быть щас?

    Reply
  11. Signal

    Здравствуйте, при удалении помеченных ошибка:

    {ВнешняяОбработка.УдалениеПомеченныхОбъектов.МодульОбъекта(561)}: Ошибка при вызове метода контекста (УдалитьОбъекты)

    УдалитьОбъекты(лМассив, Ложь);

    по причине:

    Нарушение прав доступа!

    Управление торговлей, редакция 11.1 (11.1.2.10)

    1С:Предприятие 8.2 (8.2.18.109)

    Reply
  12. Signal

    При установке режима удаления Частичное вываливается ошибка «Неизвестное имя формы. Имя «Обработка.УдалениеПомеченныхОбъектов.Форма.ВыборОбъектовМетаданныхУ»

    Reply
  13. Поручик

    (0) Обработка не открывается при вызове из дополнительных обработок в конфигурациях на БСП.

    В форме ОсновнаяФормаУ режим открытия окна РежимОткрытияОкна поменять на Независимый. Сейчас там установлено Блокировать окно владельца. Именно это мешает открытию обработки.

    Reply
  14. nastrou1c

    Скачал. Удобная обработка, активно использую. Рекомендую другим.

    Reply
  15. kredko

    Я пока так и не понял — как работает данная обработка. Базу вешает наглухо. Ошибок при этом никаких. Буду пробовать ещё раз на Документообороте.

    Reply
  16. В какой базе вешается?

    К сожалению, будучи вытесненным из стройных рядов оденснегов, перешел на подножный корм (эмбеддед программирование) :).

    По возвращении постараюсь устранить замеченные ошибки.

    Reply
  17. kredko

    Разобрался. Работает вроде как. Но с большим объёмом информации эта обработка выполняется пол дня и кажется, что база зависла.

    Reply
  18. kredko

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

    Reply
  19. Поручик

    (0) В 8.3.5 управляемая форма не работает. При открытии выдаётся окно с сообщением

    Ошибка отображения типов:

    Отсутствует отображение для типа ‘ОбъектМетаданных’

    Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.

    по причине:

    Ошибка преобразования данных XDTO:

    Запись значения свойства ‘v’:

    форма: Элемент

    имя: {http://v8.1c.ru/8.2/uobjects}v

    по причине:

    Ошибка преобразования данных XDTO:

    Запись значения свойства ‘value’:

    форма: Элемент

    имя: {http://v8.1c.ru/8.1/data/core}value

    по причине:

    Ошибка отображения типов:

    Отсутствует отображение для типа ‘ОбъектМетаданных’

    Где там на форме ОбъектыМетаданных, ума не приложу. Процедура ПриСозданииНаСервере не отрабатывается, видимо ошибка получается при построении формы.

    Reply
  20. Поручик

    () В 8.3.5.1098. Сейчас скачиваю более свежую версию, попробую на другой конфе.

    Reply
  21. Гуррыч

    обработка помогла, спасибо

    Reply
  22. SemenovaMarinaV

    Говорят что в последних версиях 3.0 удаление и так немонопольное. У меня пока требует монопольного режима.

    Reply
  23. Kamikadze

    Да, для БСП обработка не работает. в ERP 2.0 не открывается.

    Reply
  24. Поручик

    (27) По крайней мере в 8.3.5.1186 обработка работает даже в режиме такси. Сейчас сам проверил.

    БСП это всего лишь библиотека прцедур, которая никаким боком к данной обработке. Вот у меня конфа на БСП и что?

    Reply
  25. mchammer4

    УТ 11.1.4

    при открытии — не открывается, пишет —

    Ошибка отображения типов:

    Отсутствует отображение для типа «ОбъектМетаданных»

    Reply
  26. Поручик

    (29) Поставьте платформу посвежей.

    Reply
  27. AlexO

    (0)

    Есть аналогичные публикации, например, http://forum.infostart.ru/forum24/topic43769/.

    Например, там нет УФ.

    Reply
  28. AlexO

    А так — во всех без исключения ПоискИУдалениеПомеченных используется «НайтиПомеченныеНаУдаление» и «НайтиПоСсылкам».

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

    Reply
  29. AlexO

    (0)

    Изнаначально взято из конфигурации 1с Документооборот.

    Не знаю, из какого Документооборота обработка взята — но не из 1С-Документооборот 1.3.

    Там совсем другая. И, кстати, проверил: ваша обработка виснет в Документообороте, — т.е. не открывается вовсе.

    Reply
  30. AlexO

    (32) Нашел наконец-то ограничение (или косяк, называйте, как кому нравится) платформы, связанное со встроенными функциями «НайтиПомеченныеНаУдаление» и «НайтиПоСсылкам»:

    При удалении где-то в интервале от 150 тыс до 200 тыс документов (именно документов — они в силу особенности хранения в нескольких таблицах одного «объекта» оказались наиболее «тяжелые» для поиска и удаления) не доходит даже до «НайтиПомеченныеНаУдаление» — виснет на «НайтиПоСсылкам» (т.е. на этапе поиска помеченных на удаление).

    На другой базе, где большая часть из 150 тыс удаляемых объектов — записи РС, все проходит достаточно быстро (как в 8.2 в режиме ОФ, так и в режиме УФ).

    А вот на другой базе, где более 300 тыс разнообразных объектов (в основном — документы), виснет полностью.

    Reply
  31. Ekater

    Скажите, на платформе 8.3, конфиг 2.0 будет работать?

    Reply
  32. AlexO

    (35) Ekater,

    на платформе 8.3, конфиг 2.0 будет работать?

    да, все будет работать.

    Reply
  33. Ekater

    Скачал. Действительно работает.

    Reply
  34. Ekater

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

    Вопрос — это как-то повлияет на работу 1С? А то что-то я заволновался — было около 2000 объектов, которые не удалялись из-за ссылок в других документах. А здесь взяли и удалились в автоматическом режиме.

    Reply
  35. Sintson

    Добрый день!

    Обработка вылетела на 1C 8.3 (8.3.5.1443) 1С: УТ (11.1.9.56) с ошибкой:

    {ОбщийМодуль.ДополнительныеОтчетыИОбработкиКлиент.Модуль(400)}: Ошибка при вызове метода контекста (ОткрытьФорму)

    ОткрытьФорму(«ВнешняяОбработка.»+ ИмяОбработки +».Форма», ПараметрыОбработки, Форма);

    по причине:

    Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.

    по причине:

    Ошибка преобразования данных XDTO:

    Запись значения свойства ‘v’:

    форма: Элемент

    имя: {http://v8.1c.ru/8.2/uobjects}v

    по причине:

    Ошибка преобразования данных XDTO:

    Запись значения свойства ‘value’:

    форма: Элемент

    имя: {http://v8.1c.ru/8.1/data/core}value

    по причине:

    Ошибка отображения типов:

    Отсутствует отображение для типа ‘ОбъектМетаданных’

    Reply
  36. Spacer

    Ошибочка!

    Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.

    по причине:

    Ошибка преобразования данных XDTO:

    Запись значения свойства ‘v’:

    форма: Элемент

    имя: {http://v8.1c.ru/8.2/uobjects}v

    по причине:

    Ошибка преобразования данных XDTO:

    Запись значения свойства ‘value’:

    форма: Элемент

    имя: {http://v8.1c.ru/8.1/data/core}value

    по причине:

    Ошибка отображения типов:

    Отсутствует отображение для типа ‘ОбъектМетаданных’

    Reply
  37. Поручик

    (39) Меняй платформу. Вот же описано было два года назад, http://forum.infostart.ru/forum24/topic46071/message1198151/#message1198151

    Reply
  38. fixin

    блин, не стал рисковать, т.к. тут пишут, что не контролируется ссылочная целостность, а код анализировать лень.

    Reply
  39. HolodZar

    Не открывается

    {Форма.Форма.Форма(153,28)}: Тип не определен (КомпоновщикМакетаКомпоновкиДанных)

    КомпоновщикМакета = Новый <<?>>КомпоновщикМакетаКомпоновкиДанных;

    {Форма.Форма.Форма(154,28)}: Тип не определен (ДанныеРасшифровкиКомпоновкиДанных)

    ДанныеРасшифровки = Новый <<?>>ДанныеРасшифровкиКомпоновкиДанных;

    {Форма.Форма.Форма(162,36)}: Тип не определен (ПроцессорКомпоновкиДанных)

    ПроцессорКомпоновкиДанных = Новый <<?>>ПроцессорКомпоновкиДанных;

    {Форма.Форма.Форма(167,26)}: Тип не определен (ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений)

    ПроцессорВывода = Новый <<?>>ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначени­й;

    Reply
  40. isn@nk-nw.ru

    Плюсую. у себя добавил удалять порциями и размер порции в форму, а то помеченных более 5 000 000 + и как то не очень быстро удаляется, а удалять надо. Добавляю выполнение в фоновом задании с указанием видов объектов объектов для удаления и размера порции.

    Reply
  41. AlexKoso

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

    Подстава, автор подставил бы код с анализом записей РС по ведущим измерениям, как в обработке с ИТС для обычных форм.

    upd. хотя разобрался в том как здесь устроено. Что-ж. такой вариант мне даже кажется красивее (обращение к модулю конфигурации для получения списка. Тут уже вопрос к моей старой УТ (почему-то там не указан регистр версий).

    Reply

Leave a Comment

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