Удаление помеченных объектов (немонопольное) для управляемых (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 не будет опубликован. Обязательные поля помечены *