Очистка справочника от неиспользуемых элементов #366077


#0 by Nic1
Народ, поделитесь опытом или идеями, как можно корректно почистить справочники от неиспользуемых элементов. Есть обработка с использованием поиска ссылок, но это очень долго. Была еще такая идея: пометить на удаление группу, потом запустить удаление помеченных на удаление встроенной обработкой 1С, и удалятся только те элементы, на которые нет ссылок в базе. Но тут натыкаемся на неприятную вещь: если есть починенные справочники, то при пометке на удаление родителя 1С автоматом метит на удаление и подчиненные элементы. А затем при удалении помеченных удаляются ВСЕ подчиненные элементы, даже по тем родителям, по которым есть ссылки в базе.
#1 by ДенисЧ
С гарантией - только системный поиск ссылок, или самопальная обработка с перебором метаданных.
#2 by Guk
>> А затем при удалении помеченных удаляются ВСЕ подчиненные элементы, даже по тем родителям, по которым есть ссылки в базе первый раз про такое слышу...
#3 by ДенисЧ
Слух пробовал проверять? :-)
#4 by Nic1
А если пойти по второму варианту - т.е., с пометкой на удаление группы... Можно как-то обойти эту проблему с починенным справочником, например, реализовать какую-нибудь замену подчиненного обычным с привязкой к основному... Или лучше и не маяться в этом направлении?
#5 by Guk
Единственное, что более менее функционирует в организме без сбоев, так это слух...
#6 by Nic1
> первый раз про такое слышу... - На практике пробовали, чуть не лоханулись, вовремя остановились...
#7 by ДенисЧ
Значит, не прислушивался :-) Подчинённые справочники без ссылок режутся только на ура.
#8 by romix
На ночь ту обработку заряди. Оно и должно быть очень долго, т.к. процесс поиска ссылок сам по себе не быстрый (в 1С есть встроенный метод для поиска ссылок на объект). Удаление не знаю почему удаляет лишнее, вроде не должно. И бэкап еще сделай.
#9 by Guk
Без ссылок, ессно режутся. Он же их на удаление пометил...
#10 by ДенисЧ
Так о том и речь в :-)
#11 by Guk
Аааа. Так что он хотел то? ;)...
#12 by Nic1
> Удаление не знаю почему удаляет лишнее, вроде не должно - Потому что ссылок на подчиненные элементы нет, вот 1С их и удаляет... В общем-то логично. > На ночь ту обработку заряди - Ночи не хватает даже близко... Только если частями, по группам, но все равно растянется на долго...
#13 by Nic1
Кстати, такое ощущение, что при запуске встроенной обработки по удалению помеченных объектов, поиск ссылок осуществляется гораздо быстрее, чем при ручном использовании метода "ПоискСсылок". Любопытно, почему...
#14 by Redka
Ночи не хватает даже близко? А сколько у тебя база весит? И сколько элементов помечено на удаление?
#15 by Nic1
50 000 элементов, при поиске ссылок можно пропускать те, где есть остатки, резервы и т.п., но все равно большая часть справочника останется. Если посчитать, сколько премени 1С тратит на поиск ссылок по 1 Товару, и умножить на количество, то выйдет в итоге ооочень много...
#16 by ДенисЧ
Неправильный расчёт :-)
#17 by Redka
+1 У меня 200000 помеченных на удаление объектов проанализировал за несколько часов.
#18 by MADDY
Действительно - может кто сказать как реализована встроеная обработка по удалению? Как ищет ссылки? У меня сделано так: Два, три раза в неделю происходит обновление номенклатуры и связанных с ней справочников, при этом засасывает много (около 15000) "лишних" элементов, всего в базе (без этих "лишних") около 65000. Сделал простенькую обработку, правда работает в два прохода: проверяю есть ли у элемента номенклатуры в подч спр элементы (группы номенклатуры НЕ обрабатываю), если нет метим на удаление, далее штатная обработка удаления "свободных" элементов, затем второй проход: снимаем с удаления все помеченые в спр номенк элементы с одновременной проверкой "если это группа и в ней ничего нет" - то "непосредственное удаление". На моей базе это занимает занимает 4 часа.
#19 by Nic1
> У меня 200000 помеченных на удаление объектов проанализировал за несколько часов - А пример кода не можешь привести, просто любопытно, у меня даже близко так не выходит...? > Сделал простенькую обработку, правда работает в два прохода: проверяю есть ли у элемента номенклатуры в подч спр элементы (группы номенклатуры НЕ обрабатываю), если нет метим на удаление - В нашей базе у всех товаров есть подчиненные элементы, а метить надо те, которые в доках не встречаются.
#20 by Nic1
Вот пример нашей обработки, правда писал не я, я бы кое что подправил, но по сути все равно не понятно, почему так долго работает: ===========================================================================
#21 by Nic1
- Вполне возможно, а правильно-то как?
#22 by ДенисЧ
зависимость нелинейная однозначно. А кривая достаточно сложная.
#23 by Ёпрст2
Круто..начинать транзакцию для поиска ссылок... еще круто, смотреть элемент на пустое значение ...
#24 by Redka
Стрелять-Колотить!!! Ты ей уже пользовался?
#25 by Redka
+ ещё круто на сотом элементе время вывести :)
#26 by Redka
+ Ссылки могут храниться не только в Справочниках и Документах. спСсылка=СоздатьОбъект("Справочник."+тзСсылки.Ссылка.Вид); спСсылка.НайтиЭлемент(тзСсылки.Ссылка); Вот это жесть. тзСсылки.Ссылка тоже может содержать в себе ссылки. Удаляешь сам не знаешь что. Не пользуйся ей. Используй Операции-Удаление помеченных объектов.
#27 by 1Сергей
одним проходом проверять есть ли ссылки на элементы справочника владельца. Вторым, проверять ссылки на подчиненные у тех, к которых нет ссылок. И уж если обе проверки пройдены, тогда только удалять владельца со всеми подчиненными. Более изящного варианта не вижу
#28 by Nic1
> Ты ей уже пользовался? - Я - нет, хочу написать свою, взяв за основу эту. Те, кто пользовались, говорят, что удаляет корректно, но ооочень долго... > Ссылки могут храниться не только в Справочниках и Документах - Обработка написана под нашу базу, маловероятно, что они еще где-то хранятся, а если и хранятся, то скорее всего это не критично, интересуют в основном ссылки на документы и справочники. > Вот это жесть. тзСсылки.Ссылка тоже может содержать в себе ссылки. Удаляешь сам не знаешь что - Может, но в нашей базе не содержит. > Круто..начинать транзакцию - Круто-то оно конечно круто, но вопрос, из-за чего так медленно. Неужели из-за проверки на пустое значение или вывода времени? Разумеется, эти бессмысленные вещи можно убрать, но не думаю, что скорость так сильно упала именно из-за этого. В любом случае попробую. По поводу корректности использования метода ПоискСсылок возражений нет ни у кого? P.S. Я бы еще цикл "Пока тзСсылки.ПолучитьСтроку=1" два раза полностью не прокручивал, и в случае нахождения ссылки продолжал дальше. В общем, если эти мелочи подчистить, должно быть все о.к.?
#29 by Nic1
REDKA>>> У меня 200000 помеченных на удаление объектов проанализировал за несколько часов. - Ну свой пример можешь привести?
#30 by Redka
Используй Операции-Удаление помеченных объектов.
#31 by Redka
А помечай выборочно. И будет тебе хороше.
#32 by Ёпрст2
Нет. НайтиССылки всегда медленно.
#33 by Nic1
> Используй Операции-Удаление помеченных объектов - Так и делаю, но вначале же их надо пометить. > А помечай выборочно. И будет тебе хороше - С этого я и начал тему, как корректно и быстро пометить ненужные элементы. Приведенная выше обработка работает очень долго. Попробую с учетом высказанных замечаний. P.S. И все же посмтреть было бы интересно на обработку, которая за несколько часов проверяет 200 000 элементов. Все мои проблемы были бы сняты...
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С