0. 12.11.11 10:17 Сейчас в теме

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

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

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
3. wialex 11.04.12 23:42 Сейчас в теме
Полезная обработка. Очень пригодилась.
4. ivdic 31 14.04.12 14:40 Сейчас в теме
пробовал на документообороте ПРОФ выдает ошибку
{Форма.ОсновнаяФормаУ.Форма(766)}: Ошибка при вызове метода контекста (ЗагрузитьЗначения)
сзУдаляемые.ЗагрузитьЗначения(Удаляемые);
по причине:
Несоответствие типов (параметр номер '1')
5. 15.04.12 01:15 Сейчас в теме
Спасибо. Действительно, не протестировал режим полного удаления в УФ при апгрейде. Подправил.
6. Поручик 4160 28.04.12 12:44 Сейчас в теме
(5) Дарю. Вставьте этот фрагмент в модуль обработки. Он нужен для регистрации в справочнике дополнительные отчеты и обработки для конфигураций на БСП.

//////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ РЕГИСТРАЦИИ ОБРАБОТКИ
//

// Сервисная экспортная функция. Вызывается в основной программе при регистрации обработки в информационной базе
// Возвращает структуру с параметрами регистрации
//
// Возвращаемое значение:
//		Структура с полями:
//			Вид - строка, вид обработки, один из возможных: "ДополнительнаяОбработка", "ДополнительныйОтчет", 
//					"ЗаполнениеОбъекта", "Отчет", "ПечатнаяФорма", "СозданиеСвязанныхОбъектов"
//			Назначение - Массив строк имен объектов метаданных в формате: 
//					<ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>]. 
//					Например, "Документ.СчетЗаказ" или "Справочник.*". Параметр имеет смысл только для назначаемых обработок, для глобальных может не задаваться.
//			Наименование - строка - Наименование обработки, которым будет заполнено наименование элемента справочника по умолчанию.
//			Информация  - строка - Краткая информация или описание по обработке.
//			Версия - строка - Версия обработки в формате “<старший номер>.<младший номер>” используется при загрузке обработок в информационную базу.
//			БезопасныйРежим - булево - Принимает значение Истина или Ложь, в зависимости от того, требуется ли устанавливать или отключать безопасный режим 
//							исполнения обработок. Если истина, обработка будет запущена в безопасном режиме. 
//
//
Функция СведенияОВнешнейОбработке() Экспорт
	
	//Инициализируем структуру с параметрами регистрации
	
	ПараметрыРегистрации = ПолучитьПараметрыРегистрации();
	ПараметрыРегистрации.Вид = "ДополнительнаяОбработка";
	ПараметрыРегистрации.Версия = "1.0.4";

	//Определяем команды для вывода формы
	
	ТаблицаКоманд = ПолучитьТаблицуКоманд();

	ДобавитьКоманду(ТаблицаКоманд,
		ПараметрыРегистрации.Наименование, // Представление команды в пользовательском интерфейсе
		"УдалениеПомеченныхОбъектов",		// Уникальный идентификатор команды
		"ОткрытиеФормы"
	);

	ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
	Возврат ПараметрыРегистрации;

КонецФункции

//
// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ РЕГИСТРАЦИИ ОБРАБОТКИ
//

// Формирует структуру с параметрами регистрации регистрации обработки в информационной базе
//
// Параметры:
//	ОбъектыНазначенияФормы - Массив - Массив строк имен объектов метаданных в формате: 
//					<ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>]. 
//					или строка с именем объекта метаданных 
//	НаименованиеОбработки - строка - Наименование обработки, которым будет заполнено наименование элемента справочника по умолчанию.
//							Необязательно, по умолчанию синоним или представление объекта
//	Информация  - строка - Краткая информация или описание обработки.
//							Необязательно, по умолчанию комментарий объекта
//	Версия - строка - Версия обработки в формате “<старший номер>.<младший номер>” используется при загрузке обработок в информационную базу.
//
//
// Возвращаемое значение:
//		Структура
//
Функция ПолучитьПараметрыРегистрации(ОбъектыНазначенияФормы = Неопределено, НаименованиеОбработки = "", Информация = "", Версия = "1.0")

	Если ТипЗнч(ОбъектыНазначенияФормы) = Тип("Строка") Тогда
		ОбъектНазначенияФормы = ОбъектыНазначенияФормы;
		ОбъектыНазначенияФормы = Новый Массив;
		ОбъектыНазначенияФормы.Добавить(ОбъектНазначенияФормы);
	КонецЕсли; 
	
	ПараметрыРегистрации = Новый Структура;
	ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
	ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
	ПараметрыРегистрации.Вставить("Назначение", ОбъектыНазначенияФормы);
	
	Если Не ЗначениеЗаполнено(НаименованиеОбработки) Тогда
		НаименованиеОбработки = ЭтотОбъект.Метаданные().Представление();
	КонецЕсли; 
	ПараметрыРегистрации.Вставить("Наименование", НаименованиеОбработки);
	
	Если Не ЗначениеЗаполнено(Информация) Тогда
		Информация = ЭтотОбъект.Метаданные().Комментарий;
	КонецЕсли; 
	ПараметрыРегистрации.Вставить("Информация", Информация);
	
	ПараметрыРегистрации.Вставить("Версия", Версия);

	Возврат ПараметрыРегистрации;

КонецФункции

// Формирует таблицу значений с командами печати
//	
// Возвращаемое значение:
//		ТаблицаЗначений
//
Функция ПолучитьТаблицуКоманд()

	Команды = Новый ТаблицаЗначений;
	
	//Представление команды в пользовательском интерфейсе
	Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
	
	//Уникальный идентификатор команды или имя макета печати
	Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
	
	//Способ вызова команды: "ОткрытиеФормы", "ВызовКлиентскогоМетода", "ВызовСерверногоМетода"
	// "ОткрытиеФормы" - применяется только для отчетов и дополнительных отчетов
	// "ВызовКлиентскогоМетода" - вызов процедуры Печать(), определённой в модуле формы обработки
	// "ВызовСерверногоМетода" - вызов процедуры Печать(), определённой в модуле объекта обработки
	Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
	
	//Показывать оповещение.
	//Если Истина, требуется показать оповещение при начале и при завершении работы обработки. 
	//Имеет смысл только при запуске обработки без открытия формы
	Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
	
	//Дополнительный модификатор команды. 
	//Используется для дополнительных обработок печатных форм на основе табличных макетов.
	//Для таких команд должен содержать строку ПечатьMXL
	Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));

	Возврат Команды;

КонецФункции

// Вспомогательная процедура.
//
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование = "ВызовСерверногоМетода", ПоказыватьОповещение = Ложь, Модификатор = "ПечатьMXL")

	НоваяКоманда = ТаблицаКоманд.Добавить();
	НоваяКоманда.Представление = Представление;
	НоваяКоманда.Идентификатор = Идентификатор;
	НоваяКоманда.Использование = Использование;
	НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
	НоваяКоманда.Модификатор = Модификатор;

КонецПроцедуры
Показать
9. Поручик 4160 30.08.12 13:33 Сейчас в теме
(7) Если будете обновлять, не забудьте по ПланыОбмена.
Планы обмена не включаются в дерево метаданных при выборочном удалении - ошибка копи-пасты, перенесенная из 1с-Документооборот. Конечно, документообороту обмены глубоко параллельны, но мне вот понадобились.
10. 04.09.12 12:07 Сейчас в теме
(9) Поручик,
Добавил. Гран мерси за конструктивные предложения.
Правда, планы обмена не совсем побоку для 1с-Документооборот, а вот планов счетов или планов видов расчетов там, действительно нет. Ведь по сути Документооборот- это АРМ секретаря (делопроизводителя). И даже объекты метаданных типа документ, в отличие от большинства конфигураций, носят вспомогательный характер. Основные объекты - справочники и бизнес-процессы.
А по планам расчетов там, действительно, была ошибка. И до сих пор есть (смотрел в релизе 1.2.5.3 от 30.08.12). Выглядит так:
КоллекцииОбъектовМетаданных_НоваяСтрока("ПланыВидовРасчета",            "Планы видов характеристик",      БиблиотекаКартинок.ПланВидовХарактеристик, БиблиотекаКартинок.ПланВидовХарактеристикОбъект, Ложь, КоллекцииОбъектовМетаданных);

Правда, эта общая форма там, по-моему, не используется, держат на всякий случай.
11. ilya2184 59 18.02.13 11:41 Сейчас в теме
Все хорошо и так работает, но я в коде изменил кое-что:
Модуль объекта строка примерно 284 (чтобы не при каждой итерации медленный поиск в метаданных был)
ИзмеренияРегистра = Метаданные.НайтиПоПолномуИмени(лИмяМетаданных).Измерения;
Для каждого лИзмерение Из ИзмеренияРегистра Цикл


В модуле формы "ОсновнаяФормаУ" чобы влоделца не в попытке получал:
МД_Справочники = Метаданные.Справочники; //перед циклом
Для Каждого МассивПомеченныхЭлемент Из МассивПомеченных Цикл
	...
	ТекущееМД = МассивПомеченныхЭлемент.Метаданные(); //внутри цикла: платим памятью за быстродействие
	...
	Если МД_Справочники.Найти(ТекущееМД.Имя)<>Неопределено И ТекущееМД.Владельцы.Количество()>0 Тогда
		лВладелецЭлемента = МассивПомеченныхЭлемент.Владелец;
	КонецЕсли;
	...
КонецЦикла;
Показать
12. Stradivari 141 07.05.13 16:04 Сейчас в теме
выручила обработочка, спсб)
13. Confucius 80 07.08.13 10:08 Сейчас в теме
Подскажите обработка не проверяет ссылочную целостность? Запустил автоматическое и все удалила..хотя куча ссылок было и не удаляемых объектов дофига. Начал по коду смотреть и увидел УдалитьОбъекты(УдаляемыеОбъекты, Ложь);
А в справке пишите что проверяется ссылочная целостность... Как быть щас?
14. Signal 26.08.13 13:42 Сейчас в теме
Здравствуйте, при удалении помеченных ошибка:
{ВнешняяОбработка.УдалениеПомеченныхОбъектов.МодульОбъекта(561)}: Ошибка при вызове метода контекста (УдалитьОбъекты)
УдалитьОбъекты(лМассив, Ложь);
по причине:
Нарушение прав доступа!

Управление торговлей, редакция 11.1 (11.1.2.10)
1С:Предприятие 8.2 (8.2.18.109)
15. Signal 26.08.13 13:44 Сейчас в теме
При установке режима удаления Частичное вываливается ошибка "Неизвестное имя формы. Имя "Обработка.УдалениеПомеченныхОбъектов.Форма.ВыборОбъектовМетаданныхУ"
16. Поручик 4160 19.03.14 09:24 Сейчас в теме
(0) Обработка не открывается при вызове из дополнительных обработок в конфигурациях на БСП.
В форме ОсновнаяФормаУ режим открытия окна РежимОткрытияОкна поменять на Независимый. Сейчас там установлено Блокировать окно владельца. Именно это мешает открытию обработки.
insurgut; sinitsin86; Йожкин Кот; +3 Ответить
17. nastrou1c 23 23.04.14 12:51 Сейчас в теме
Скачал. Удобная обработка, активно использую. Рекомендую другим.
18. kredko 16 15.05.14 17:28 Сейчас в теме
Я пока так и не понял - как работает данная обработка. Базу вешает наглухо. Ошибок при этом никаких. Буду пробовать ещё раз на Документообороте.
19. 16.05.14 07:49 Сейчас в теме
В какой базе вешается?
К сожалению, будучи вытесненным из стройных рядов оденснегов, перешел на подножный корм (эмбеддед программирование) :).
По возвращении постараюсь устранить замеченные ошибки.
20. kredko 16 19.05.14 05:11 Сейчас в теме
Разобрался. Работает вроде как. Но с большим объёмом информации эта обработка выполняется пол дня и кажется, что база зависла.
21. kredko 16 27.05.14 07:58 Сейчас в теме
Проверил. Работает. Но только сразу поставил Автоматическое удаление.
23. Поручик 4160 22.08.14 11:22 Сейчас в теме
(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
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ОбъектМетаданных'


Где там на форме ОбъектыМетаданных, ума не приложу. Процедура ПриСозданииНаСервере не отрабатывается, видимо ошибка получается при построении формы.
24. Поручик 4160 22.08.14 11:39 Сейчас в теме
() В 8.3.5.1098. Сейчас скачиваю более свежую версию, попробую на другой конфе.
25. Гуррыч 7 02.10.14 23:05 Сейчас в теме
26. SemenovaMarinaV 15.10.14 17:14 Сейчас в теме
Говорят что в последних версиях 3.0 удаление и так немонопольное. У меня пока требует монопольного режима.
27. Kamikadze 45 28.11.14 09:48 Сейчас в теме
Да, для БСП обработка не работает. в ERP 2.0 не открывается.
28. Поручик 4160 28.11.14 10:20 Сейчас в теме
(27) По крайней мере в 8.3.5.1186 обработка работает даже в режиме такси. Сейчас сам проверил.

БСП это всего лишь библиотека прцедур, которая никаким боком к данной обработке. Вот у меня конфа на БСП и что?
29. mchammer4 44 10.12.14 18:50 Сейчас в теме
УТ 11.1.4
при открытии - не открывается, пишет -
Ошибка отображения типов:
Отсутствует отображение для типа "ОбъектМетаданных"
30. Поручик 4160 12.12.14 09:03 Сейчас в теме
(29) Поставьте платформу посвежей.
31. AlexO 125 22.02.15 17:59 Сейчас в теме
(0)
Есть аналогичные публикации, например, http://forum.infostart.ru/forum24/topic43769/.
Например, там нет УФ.
32. AlexO 125 22.02.15 18:00 Сейчас в теме
А так - во всех без исключения ПоискИУдалениеПомеченных используется "НайтиПомеченныеНаУдаление" и "НайтиПоСсылкам".
А это самый главный косяк и недостаток всех обработок, т.к. не позволяет в принципе обрабатывать огромные базы с сотнями тысяч помеченных на удаление объектов.
34. AlexO 125 26.02.15 22:58 Сейчас в теме
(32) Нашел наконец-то ограничение (или косяк, называйте, как кому нравится) платформы, связанное со встроенными функциями "НайтиПомеченныеНаУдаление" и "НайтиПоСсылкам":
При удалении где-то в интервале от 150 тыс до 200 тыс документов (именно документов - они в силу особенности хранения в нескольких таблицах одного "объекта" оказались наиболее "тяжелые" для поиска и удаления) не доходит даже до "НайтиПомеченныеНаУдаление" - виснет на "НайтиПоСсылкам" (т.е. на этапе поиска помеченных на удаление).
На другой базе, где большая часть из 150 тыс удаляемых объектов - записи РС, все проходит достаточно быстро (как в 8.2 в режиме ОФ, так и в режиме УФ).
А вот на другой базе, где более 300 тыс разнообразных объектов (в основном - документы), виснет полностью.
33. AlexO 125 23.02.15 18:33 Сейчас в теме
(0)
Изнаначально взято из конфигурации 1с Документооборот.
Не знаю, из какого Документооборота обработка взята - но не из 1С-Документооборот 1.3.
Там совсем другая. И, кстати, проверил: ваша обработка виснет в Документообороте, - т.е. не открывается вовсе.
35. Ekater 27.02.15 13:09 Сейчас в теме
Скажите, на платформе 8.3, конфиг 2.0 будет работать?
36. AlexO 125 27.02.15 13:20 Сейчас в теме
(35) Ekater,
на платформе 8.3, конфиг 2.0 будет работать?
да, все будет работать.
37. Ekater 27.02.15 13:51 Сейчас в теме
Скачал. Действительно работает.
38. Ekater 02.03.15 07:48 Сейчас в теме
Удаляет даже то, что стандартной обработкой в монопольном удалить нельзя из-за ссылок в других объектах! Осторожно!

Вопрос - это как-то повлияет на работу 1С? А то что-то я заволновался - было около 2000 объектов, которые не удалялись из-за ссылок в других документах. А здесь взяли и удалились в автоматическом режиме.
39. Sintson 351 22.07.15 13:02 Сейчас в теме
Добрый день!
Обработка вылетела на 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
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ОбъектМетаданных'

41. Поручик 4160 25.03.16 08:59 Сейчас в теме
40. Spacer 283 23.03.16 11:57 Сейчас в теме
Ошибочка!

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'v':
форма: Элемент
имя: {http://v8.1c.ru/8.2/uobjects}v
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'value':
форма: Элемент
имя: {http://v8.1c.ru/8.1/data/core}value
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ОбъектМетаданных'
42. fixin 3761 30.04.16 11:49 Сейчас в теме
блин, не стал рисковать, т.к. тут пишут, что не контролируется ссылочная целостность, а код анализировать лень.
43. HolodZar 19.09.16 05:11 Сейчас в теме
Не открывается


{Форма.Форма.Форма(153,28)}: Тип не определен (КомпоновщикМакетаКомпоновкиДанных)
КомпоновщикМакета = Новый <<?>>КомпоновщикМакетаКомпоновкиДанных;
{Форма.Форма.Форма(154,28)}: Тип не определен (ДанныеРасшифровкиКомпоновкиДанных)
ДанныеРасшифровки = Новый <<?>>ДанныеРасшифровкиКомпоновкиДанных;
{Форма.Форма.Форма(162,36)}: Тип не определен (ПроцессорКомпоновкиДанных)
ПроцессорКомпоновкиДанных = Новый <<?>>ПроцессорКомпоновкиДанных;
{Форма.Форма.Форма(167,26)}: Тип не определен (ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений)
ПроцессорВывода = Новый <<?>>ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначени­й;
44. isn@nk-nw.ru 11.07.17 14:10 Сейчас в теме
Плюсую. у себя добавил удалять порциями и размер порции в форму, а то помеченных более 5 000 000 + и как то не очень быстро удаляется, а удалять надо. Добавляю выполнение в фоновом задании с указанием видов объектов объектов для удаления и размера порции.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Консультант-аналитик 1С (ЗУП)
Санкт-Петербург
Полный день

Руководитель группы сервисов ЭДО, ЭЦП и криптографии
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы интеграций (1С)
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы сервисов FRM на 1С
Москва
зарплата от 150 000 руб.
Полный день