gifts2017

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

Опубликовал Sergey (defender) в раздел Администрирование - Чистка базы

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

Обработка для поиска и удаления неиспользуемых элементов справочников. Позволяет интерактивно искать и помечать на удаление неиспользуемые элементы справочников. Для локализации поиска можно выбирать определенную группу справочника.

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

Внимание! При очистке большого справочника со множеством ссылок (например Номенклатура и Контрагенты) возможна нехватка памяти и свертка приложения 1С. Такие справочники лучше чистить медленно и с удовольствием - выбирая по одной группе.

Скачать файлы

Наименование Файл Версия Размер
ПоискНеиспользуемых82.epf 653
.epf 17,26Kb
30.03.12
653
.epf 17,26Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. sbv2005 (sbv2005) 25.10.10 11:49
2. Гоги Габиташвилли (grGogy) 27.10.10 16:25
Про подчинённые справочники автор слукавил.
Ссылка из подчинённого справочника определяет элемент в Используемые.
3. Елена (Lyekka) 27.10.10 16:43
4. Sergey (defender) 28.10.10 09:26
(2) Нужно снять галочку "неиспользуемые без ссылок"
5. Гоги Габиташвилли (grGogy) 28.10.10 11:01
(4) Именно со снятой галочкой.
6. Андрей Тарлыков (Tarlich) 28.10.10 11:55
Однозначно + (Только надо еще проверить в действии)
7. Андрей Тарлыков (Tarlich) 28.10.10 12:06
Что ставлю , что не ставлю "Неиспользуемые без ссылок" - номенклатуру у которой есть ссылка только на ед.изм всеравно ставит как используемые -((
8. Sergey (defender) 28.10.10 15:44
(5) (7) Сорри, была ошибка, исправил, перезалил.
Спасибо
9. rasswet (rasswet) 03.11.10 14:27
если в регистре сведений есть измерение справочник1, заполнено элементом этого справочника. и более нигде этот элемент не встречается в базе. эта обработка покажет его как неиспользуемый?
10. Sergey (defender) 03.11.10 15:17
(9) Покажет если это ведущее измерение
11. Аркадий Кучер (Abadonna) 03.11.10 16:02
Берешь справочник, помечаешь ВСЕ элементы на удаление.
Делаешь стандартную "Удаление помеченных объектов"
С оставшихся в живых пометки снимаешь.
Вот и вся обработка, зато гарантия 100%, что ничего случайно не грохнешь
Sartr; Altair777; Alraune; +3 3 Ответить 2
12. Sergey (defender) 03.11.10 16:42
(11) 1. Этой обработкой тоже 100% ничего случайно не грохнешь.
2. Элементы которые были помечены на удаление, после отмены пометки таковыми быть перестанут.
13. Аркадий Кучер (Abadonna) 03.11.10 16:54
Элементы которые были помечены на удаление, после отмены пометки таковыми быть перестанут.

А и не фиг им быть помеченными, раз ссылки есть ;)
14. Sergey (defender) 03.11.10 17:00
(13) Юзеры иногда помечают для каких-то там своих хитрых целей (как-то видел как девушка рабочие документы хранила в "корзине"). И не нужно трогать то, что не нами помечалось.
15. Аркадий Кучер (Abadonna) 03.11.10 17:34
Разбаловал ты своих юзверей ;)
А у меня шаг влево - шаг вправо: уже на экзекуцию нарвался
16. johnrex 02.01.11 11:51
Прекрасная разработка. Сам хотел уже писать, а тут уже всё оказывается написано до нас!

Есть один серьезный изъян, но его исправить можно одной строчкой кода.
Для подчиненных справочников это работать не будет:
строкаТипа = Строка(ТипЗнч(Стр.Данные));
Потому что для ссылки справочника строкаТипа станет, например "ЕдиницаИзмерения", а дальше по коду:
ИначеЕсли Найти(строкаТипа, "Справочник") > 0
Разумеется ничего найдено не будет и подчиненный справочник будет пропущен. Соответственно переменная должна принять значение вроде "СправочникСсылка.ЕдиницыИзменения"
Можно сделать вот так:
строкаТипа = Стр.Метаданные.ПолноеИмя();
17. Андрей Хрипунов (xavi) 21.01.11 15:05
(16) Если применить это исправление, тогда в строке

ИначеЕсли Найти(строкаТипа, "Регистр сведений") > 0 Тогда

нужно убрать пробел:

ИначеЕсли Найти(строкаТипа, "РегистрСведений") > 0 Тогда
18. Sergei (kauksi) 01.07.11 08:52
РАБОТАЕТ! в отличие от многих других обработок!
19. Николай (provnick) 29.09.11 21:27
Интересно, в бухгалтерии заработало, а в УТ, по контрагентам работает, а по номенклатуре сработало только после изменений замеченных в (16) и (17), и не удаляет найденное, а только помечает, и так же в 8.2, соответственно после конвертации так же работает. И если возможно, желательно, не только наименование, но код, чтобы отображался.Плюс.
20. Sergey (defender) 30.09.11 17:04
(16)(17)(19) Доработал поиск, сконвертировал под 8.2. Спасибо
21. kozai05 14.10.11 17:07
Отлично, а а то у соседнего аналога почему-то не было в списке справочника "Контрагенты".
22. kozai05 14.10.11 17:30
Проверил, выбрал справочник контрагентов. Убрал галочку "Неиспользуемые без ссылок". Обработка вывела мне все в используемые. Что-то не пойму, может это не то что мне нужно? У меня стоит цель очистить справочник от контрагентов, которые не участвую ни в каких остатках или оборотах. Но ведь у них хоть как будет ссылка с договора или регистра контактной информации, это в обработке предусмотрено? По какому принципу работает этот крыжик?
23. Sergey (defender) 14.10.11 17:40
Если крыжик установлен - в неиспользуемые выбираются те у которых нет вообще никаких ссылок.
Крыжик снят - признаком "используемости" считается только участие в документах и пр. кроме подчиненных справочников и регистров движений
задумывалось именно так.
24. kozai05 14.10.11 17:53
Понятно, значит выходит что с контрагентами поработать правильно не получится? У всех ведь есть, хоть даже пустые, но записи в регистре сведений контактной информации.
Выходит примерно такая картина:
http://s017.radikal.ru/i409/1110/b0/2a5b6914daad.jpg
25. Вася Васькин (yushmakovmv) 25.10.11 10:24
26. Ярослава Ядрова (Najly) 14.11.11 11:51
Ваша обработка очень помогла, спасибо большое. Но пришлось поправить три строчки:
1) На условие Найти(строкаТипа, "РегистрСведений") > 0 РегистрыСведений не отлавливались, предполагаю, что там опечатка в какой-то из букв р,е,с,т,н. Переписала заново в русской раскладке, все заработало.
2) Когда вы ищете по наименованию метаданных, тип на которой ссылается объект, рекомендую поставить в поисковой строке ".". То есть, например, Найти(строкаТипа, "Документ.") > 0, иначе под это условие подходит регистр сведений ОбъектыДоступаДокументов.
3) Не используемых контрагентов найти не получилось, т.к. они ссылаются сами на себя. Добавила в ваш блок небольшое условие и все заработало.
ИначеЕсли Найти(строкаТипа, "Справочник.") > 0 Тогда
Если Стр.Данные <> мО И НЕ Стр.Данные.ПометкаУдаления Тогда
Istur; NtS; lootinn; +3 Ответить 3
27. Андрей (Genneral) 04.01.12 23:03
Спасибо, Номенклатуру в УТ 10.3 после свертки почистила на ура.
28. Yalo (yalo) 23.01.12 11:49
В справочнике Контрагентов был полный караууу. Спасибо все почистила, очень пригодилась!!!!!
29. i z (izz) 20.02.12 16:14
Спасибо! Пользуюсь этой обработкой
30. lootinn 14.03.12 08:58
Полезная обработка, после внесения изменений из (26) с контрагентами работает как надо.
31. NtS (NtS) 29.03.12 00:13
а у меня контрагентов все равно не чистит(((как будьто ссылка на самого контрагента
32. NtS (NtS) 29.03.12 00:27
(31) заработало!!! комментарии как следует нужно читать )) огромное спасибо (26)
33. Sergey (defender) 30.03.12 15:14
(32) По многочисленным просьбам трудящихся :) сделал доработки из (26)
34. Olga Gabuza (OLga_gab) 30.03.12 23:13
Спасибо!!! Классно работает!
35. lees lees (lees) 16.05.12 11:12
Мне интересна была реализация, пригодится потом. Спасибо!
36. Алексей Загороднев (infotrade) 16.05.12 11:41
Обработка полезна, после внесения некторых изменений все работает... Спасибо автору...
37. Олег Шалимов (CaSH_2004) 23.05.12 03:54
(11)
Берешь справочник, помечаешь ВСЕ элементы на удаление.
Делаешь стандартную "Удаление помеченных объектов"
С оставшихся в живых пометки снимаешь.
Вот и вся обработка, зато гарантия 100%, что ничего случайно не грохнешь

Категорически не согласен - пробовал много раз, кажеться что все просто однако, мне очень странно слышать такое от уважаемого гуру 1С, т.к. есть множество подводных камней, например:
1. Предположим что в базе ОЧЕНЬ много элементов, пометка на удаление это получение объекта со всеми вытекающими, т.е. запись, а это соответственно ОЧЕНЬ долго, уверен что дольше чем просто сравнить какие ссылки и на что
2. Далее даже если 1 не верно, то после пометки нужно делать тот же самый поиск ссылок и контроль уникальности - а это таже куча времени которое мы вроде должны съэкономить, потом удаление, а потом только опять снятие пометки удаления со ВСЕХ элементов. т.е. если у нас 100 тыс. из них скажем 10 тыс. неиспользуемых, то мы гоняем запись просто так 90 тыс элементов (с подчиненными!!!) аж 2 раза!!! только ради удаления 10% - за это просто уволить нужно человека
3. Особый нюанс с подчиненными - они тоже удаляются и это арифметиеская прогрессия количества объектов
4. А что делать если базу нельзя монопольно взять? Или будем удалять, а пользователи пусть работают как могут? Вот только они не смогут.
5. Что интересно делать если в базе версионизация настроена? Куча дополнительных пустых записей что мы гоняли 90 тыс. объектов в состояния?
6. Что делать если настроено хитрое реагирование на пометку удаления объекта, а мы не в курсе т.к. база не наша или просто забыли? А действия необротимые или сложно-обратимые
7. Что делать если база РБД? Все объекты помеченные пойдут в обмен даже если их снять с пометки файл распухнет и все это будет грузиться, т.е. надо и это учитывать а если не учли? а филиалов несколько?

Это основные проблемы РЕАЛЬНО с которыми я столкнулся, и на такой вариант проблемы я бы пошел только четко зная сколько примерный % неиспользуемых, как работает база, и что: нет РБД, версионизирования, она типовая
Конечно это во многом решается ОбменДанными.Загрузка = Истина, однако запись то все равно идет, и не везде этот отсев отработает, только там где он проверяется.
Вобщем я за ювелирный подход, не надо "отрезать палец по самое горло" :) а то пациента это не обрадует
ketr; izofen; Istur; pahmutov; SuperSpade; defender; +6 Ответить 1
38. Олег Шалимов (CaSH_2004) 23.05.12 04:09
(13)
А и не фиг им быть помеченными, раз ссылки есть

Чтобы разобраться зачем и где используется этот объект, и возможно заменить его на другой или просто убить в ссылке, а просто так снимать пометку я бы не советовал где не попадя без разбору
39. Sergey (defender) 23.05.12 10:14
(37) CaSH_2004,
мощно задвинул, зачот :)
40. Олег Шалимов (CaSH_2004) 24.05.12 04:43
Интересно как это у всех работает, а у меня нет? Скачал последнее - все описанные выше поправки имеются - ни фига не работает!
У меня Контрагент + Банк. счет + Договор, ссылок на подчиненные нет, провериил лично
В коде нигде не нашел чтобы подчиненные проверялись на наличие на них ссылок! Однако прочитав внимательно описание:
Неиспользуемыми считаются элементы на которые есть ссылки в регистрах сведений в ведущем измерении, в подчиненных справочниках и документах помеченных на удаление.

понял что принял желаемое за действитеьное.
Итак что же делать уважаемый defender? Как это может оказаться что есть помеченные на удаление подчиненные элементы, а сам Владелец нет? Это однако нонсенс если не говорить о выборочной пометки вручную.
Все обычно как раз наоборот - все непомечены на удаление, и надо найти и пометить их.
Итак предлагаю это исправить на первый раз так, находим:
ИначеЕсли Найти(строкаТипа, "Справочник.") > 0 Тогда
    Если Стр.Данные <> мО И НЕ Стр.Данные.ПометкаУдаления Тогда

меняем на
ИначеЕсли Найти(строкаТипа, "Справочник.") > 0 Тогда
    Если Стр.Данные.Владелец <> мО И Стр.Данные <> мО И НЕ Стр.Данные.ПометкаУдаления Тогда


Это конечно половинное решение, т.к. даже если Владелец не присутствует например в документах, то например банк.счет может, но если исходить из следующих моментов:
1. В типовых конфах всегда используется одновременно и Владелец и Подчиенный, заодно рекомендую и другим разработчикам придерживаться этого правила
2. Удалять все равно желательно через монопольно или спец. обработкой с ИТС и проблем не будет т.к. я доверяю только таким методам
3. Банально нет времени все сделать правильно, однако если автор не против можно чуток доработать и выложить, вообще стоит наверно когда выкладываете свои доработки сразу оговаривать возможность доработки другими разработчиками, а то устаеш всех спрашивать "можно?", а без спроса как-то неудобно
Прикрепленные файлы:
poiskneispolzuemykh82 (red.CaSH).epf
41. Владимир (clab) 20.06.12 08:20
На больших объемах виснет и вылетает.
42. Sergey (defender) 20.06.12 10:35
Падает платформа из-за нехватки памяти. Из-за этого и сделана возможность проверять определенную папку, а не только справочник целиком.
44. anry mc (AnryMc) 19.02.13 16:33
Попроще, но раньше...
http://infostart.ru/public/65132/

Пока не висла ни не вылетала
45. Алексей Куликов (leks88) 09.06.13 21:12
Работает великолепно! Очень быстро, в отличии от других аналогичных, на БП 2.0.48.7 Автору плюс и большое спасибо
46. Klavdiya (kvp) 30.09.13 15:16
47. Сергей Сергеев (Рамзес) 27.02.14 15:25
Спасибо, хорошая обработка! Но не хватает отборов!
48. Sergey (defender) 27.02.14 15:48
(47) Рамзес,
не могли бы мысль несколько развернуть? Что отбирать, как и зачем?
49. Сергей Сергеев (Рамзес) 19.03.14 16:29
50. Олег Шалимов (CaSH_2004) 10.06.14 15:56
(49)Уважаю за доработку и публикацию, побольше бы таких адекватных
51. Олег Шалимов (CaSH_2004) 10.06.14 15:58
(48)Забавно слышать от 1С-ника что такое отбор и для чего он. Представьте справочник в 1 млн. записей и в базе порядка сотни пользователей работают - как будете чистить справочник?
52. Станислав Турчинский (Istur) 04.07.14 10:43
В строке 224 ошибочный код. Есть:
строкаТипа = Строка(ТипЗнч(Данные));
он не работает, надо:
строкаТипа = Строка(стрМета.ПолноеИмя());
53. Михаил Алексеевич (fokin) 16.10.14 08:38
скажите, а как решается вопрос в (24), у меня просто такая же проблема - ищу решение, зазря качать не хочется
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа