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

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

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

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

Пометка ДОКУМЕНТОВ - на РИСК И УСМОТРЕНИЕ ПОЛЬЗОВАТЕЛЯ. Читайте "Справку"

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

02/10/2012 Добавлена возможность для справочников делать исключения,

"разрешить циклические ссылки" в конфигурации, например:

* Контрагент - Основной договор --- Договор - Владелец

2015/03/18 Версия 4

По желанию пользователей добавлено сохранение и чтение настроек через файл.

Кнопки "Сохранить в файл..." и "Восстановить из файла..." работают следующим образом:

В файл сохраняются наименования и тип помеченного на исполнение - КАК ТЕКСТ!.

При восстановлении - снимаются все отметки на исполнение! а затем ищется соответствие типа и наименования из файла (КАК ТЕКСТ!). Если соответствие найдено - то элемент помечается на выполнение.


2015/03/19 Версия 5

Добавлены кнопки "пометить все" и "снять пометки у всех"


 

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

Наименование Файл Версия Размер
ПометкаНеспользуемыхЭлементовСправочников 5.epf сохранение и чтение настроек через файл
.epf 20,31Kb
19.03.15
38
.epf 20,31Kb 38 Скачать
ПометкаНеспользуемыхЭлементовСправочников 3.epf с ИСКЛЮЧЕНИЯМИ
.epf 18,11Kb
18.03.15
167
.epf 18,11Kb 167 Скачать
ПометкаНеспользуемыхЭлементовСправочников (2).epf
.epf 15,61Kb
18.03.15
451
.epf 15,61Kb 451 Скачать

См. также

Добавить вознаграждение
Комментарии
1. anry mc (AnryMc) 708 02.02.10 20:58 Сейчас в теме
2. Chin (ChinChin) 03.02.10 10:26 Сейчас в теме
{Форма.Форма(30)}: Поле объекта не обнаружено (Адресные сокращения)
Выборка=Справочники[ТЭ.НаименованиеСправочника].Выбрать();
3. Chin (ChinChin) 03.02.10 10:27 Сейчас в теме
И можно было бы кнопки управления флажками разметить - муторно по всем строкам галки ставить :(
4. Chin (ChinChin) 03.02.10 10:31 Сейчас в теме

Добавь "ОбработкаПрерыванияПользователя" в циклах.
И на Банковских счетах тоже вспоткнулся (2)
5. Chin (ChinChin) 03.02.10 10:39 Сейчас в теме
Жесть в отладчике:
Выборка=Справочники[ТЭ.НаименованиеСправочника].Выбрать()

Отгадай что подставляешь в квадратных скобках для поиска метаданных?
"АдресныеСокращения" или "Адресные сокращения"??? Поэтому ошибок нет только в справочниках из одного слова!!!

И нафига спрашивается в цикле по каждому элементу запускать "НайтиПоСсылкам"? Для чего, по твоему, на вход предусмотрена подача массива ссылок на объекты - что бы туда одну ссылку загружать? Необоснованно увеличил скорость выполнения обработки раз в 100 (если не больше)!
6. Андрей Григорьев (Borisych) 501 03.02.10 12:28 Сейчас в теме
товарищ AnryMc еще "зеленый" прогер :D
7. Chin (ChinChin) 03.02.10 14:54 Сейчас в теме
(5) Конечно не "скорость", а "время"!!! :D
8. anry mc (AnryMc) 708 03.02.10 22:16 Сейчас в теме
(All) Извините выложил версию с ошибкой. Исправлено.
+ тоже самое по документам НО НА СВОЙ СТРАХ И РИСК!

(7) А скорость меня и не волновала ;)
9. anry mc (AnryMc) 708 03.02.10 22:19 Сейчас в теме
(3) Не делал пециально - чтобы было время "одуматься" :D
10. anry mc (AnryMc) 708 04.02.10 22:13 Сейчас в теме
(6) А почему слово ЗЕЛЕНЫЙ в кавычках?

Чуть доделал - (3)
11. anry mc (AnryMc) 708 04.02.10 22:16 Сейчас в теме
12. Андрей Григорьев (Borisych) 501 05.02.10 00:36 Сейчас в теме
(10) ну дык в переносном же смысле :D
13. Chin (ChinChin) 05.02.10 02:51 Сейчас в теме
Оптимизированный код для справочников (под документы переделать не проблема), у меня с этим кодом обработка по всем справочникам базы за три минуты пробежалась, нашла 1229 неиспользуемых элементов:

Если фСправочники Тогда

ТЗ_Ссылок = Новый ТаблицаЗначений;

Для Каждого ТЭ Из ОбластьПоиска Цикл

Если ТЭ.ТипОбласти <> "Справочник" Тогда
Продолжить;
КонецЕсли;

Если ТЭ.Обрабатывать = Ложь Тогда
Продолжить;
КонецЕсли;

Состояние("Обрабатываем справочник: " + ТЭ.НаименованиеОбласти);

МассивСсылок = Новый Массив;

ТЗ_Ссылок.Очистить();

Выборка = Справочники[ТЭ.ИмяОбласти].Выбрать();

Пока Выборка.Следующий() Цикл

Если Выборка.Предопределенный Тогда
Продолжить;
КонецЕсли;

Если Выборка.ПометкаУдаления Тогда
Продолжить;
Конецесли;

Если Выборка.ЭтоГруппа тогда
Продолжить;
Конецесли;

МассивСсылок.Добавить(Выборка.Ссылка);
ОбработкаПрерыванияПользователя();

КонецЦикла;

Если МассивСсылок.Количество() = 0 тогда
Продолжить;
КонецЕсли;

ТЗ_Ссылок = НайтиПоСсылкам(МассивСсылок);
ТЗ_Ссылок.Свернуть("Ссылка");

МассивСсылокНайденых = ТЗ_Ссылок.ВыгрузитьКолонку("Ссылка");

ЗапросПоСправочникам = Новый Запрос;
ЗапросПоСправочникам.Текст =

"ВЫБРАТЬ
| ЭлементыСправочников.Ссылка КАК Элемент
|ПОМЕСТИТЬ ВТ_СсылкиДляПроверки
|ИЗ
| Справочник." + ТЭ.ИмяОбласти + " КАК ЭлементыСправочников
|ГДЕ ЭлементыСправочников.Ссылка В (&МассивЭлементов)
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| ТаблицаСсылок.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ВТ_Ссылки
|ИЗ
| Справочник." + ТЭ.ИмяОбласти + " КАК ТаблицаСсылок
|ГДЕ ТаблицаСсылок.Ссылка В (&МассивСсылок)
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| ЭлементыСправочников.Элемент КАК Элемент,
| СсылкиПослеПроверки.Ссылка
|ИЗ
| ВТ_СсылкиДляПроверки КАК ЭлементыСправочников
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ТаблицаСсылок.Ссылка КАК Ссылка
| ИЗ
| ВТ_Ссылки КАК ТаблицаСсылок) КАК СсылкиПослеПроверки
| ПО ЭлементыСправочников.Элемент = СсылкиПослеПроверки.Ссылка
|ГДЕ
| СсылкиПослеПроверки.Ссылка ЕСТЬ NULL ";

ЗапросПоСправочникам.УстановитьПараметр("МассивЭлементов",МассивСсылок);
ЗапросПоСправочникам.УстановитьПараметр("МассивСсылок",МассивСсылокНайденых);

РезультатЗапроса = ЗапросПоСправочникам.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл

//Ссылок нет можно удалять
НУ = РезультатПоиска.Добавить();
НУ.ТипОбъекта = "Спр.: " + Выборка.Элемент.ПолучитьОбъект().Метаданные().Синоним;
НУ.ОбъектСсылка = Выборка.Элемент;

ОбработкаПрерыванияПользователя();

КонецЦикла;

КонецЦикла;


КонецЕсли;
AnryMc; BoneD; +2 Ответить 1
14. Chin (ChinChin) 05.02.10 03:00 Сейчас в теме
При установке пометки по Номенклатуре выскакивает такая бяка:
"Перед записью необходимо определить единицу измерения!"

Думаю надо использовать режим обмена данными перед записью.
"ТУО.ОбменДанными.Загрузка = Истина;"
15. anry mc (AnryMc) 708 05.02.10 07:47 Сейчас в теме
(14) + (13) Спасибо. В ближайшее время добавлю
16. anry mc (AnryMc) 708 06.02.10 08:39 Сейчас в теме
Добавлены выраженные пожелания
17. Тимофей Бугаевский (boogie) 454 01.06.10 18:12 Сейчас в теме
В статусе быстро-быстро мелькает "На удаленте",
Хорошо бы добавить прогресс - я тут кууучу мусора удалял и не знал когда уже наконец
а так +!
Легко удалил неиспользуемые договоры контрагентов.

И ещё: при отметке галочками нескольких видов элементов, хотелось бы, чтобы если есть ссылки только между собой у объектов, они бы тоже считались неиспользуемыми, например у объекта договор контрагента есть ссылка на владельца, а у контрагента - ссылка на основной договор, в итоге циклическая ссылка и они не отмечаются, а выявить очень сложно. Конечно, это бага проектирования базы жесточайшая, но так делает 1С.
18. Артем Старков (average) 5 07.11.10 10:13 Сейчас в теме
Обработка ничего не дает при работе со справочниками Номенклатура и Контрагенты
По следующей причине:
В элементах этих справочников есть реквизит основная единица измерения и основной договор.
Справочники ссылаются друг на друга и удалить их этой обработкой не возможно
19. Ольга (Ольга_tmp) 37 16.05.11 18:50 Сейчас в теме
да, с номенклатурой грустно
20. Виктор Писаренко (Vitko_freedomcars) 31 07.06.11 11:47 Сейчас в теме
Автор, доделай обработку. Интерес к ней есть, а вот номенклатуру - не почистишь!
21. anry mc (AnryMc) 708 24.09.12 17:15 Сейчас в теме
(17) boogie, (18) average, (19) Ольга_tmp, (20) Vitko_freedomcars,
Это задача из серии: «что первично – курица или яйцо?»
Не вижу необходимости добавлять исключение (номенклатура – единица измерения) в более менее общий алгоритм поиска. Данная ситуация должна разрешаться стандартной обработкой «Групповая обработка справочников и документов» (например, делается отбор элементов справочника «Номенклатура» по нужной позиции значения реквизита «Базовая единица измерения» и для отобранных элементов выполняется обработка установки реквизита в другую единицу или «пустую»).

Иначе нужно делать перекрестный анализ типов всех реквизитов всех метаданных, что долго и непродуктивно (и не всегда очевидно) или давать возможность пользователю выбирать реквизиты отбора (что тоже тяжело и обязывает его знать структуру метаданных).
22. Firuz Mavlonov (firuzji) 24.09.12 22:30 Сейчас в теме
Хорошая идея!
Если у кого есть для 7.7- ки, выложите плиз.
За идею "+".
23. anry mc (AnryMc) 708 24.09.12 23:08 Сейчас в теме
(22) firuzji,
К сожалению для 7.7 не делал...
24. Алексей Ермилов (Alex_E) 1457 24.09.12 23:46 Сейчас в теме
(22) firuzji, На ИТС -
Для 7.7 ObjDel.ert
firuzji; AnryMc; +2 Ответить 3
25. anry mc (AnryMc) 708 25.09.12 08:00 Сейчас в теме
(24) Alex_E,
Может я отстал, но раньше эта обработка не искала ссылок на объекты, а просто отбирала их.
26. Алексей Ермилов (Alex_E) 1457 25.09.12 09:39 Сейчас в теме
(25) AnryMc, Не совсем понял, что значит не отбирала а искала - но смысл в том, что с её помощью можно пометить на удаление объекты, на которые нет ссылок.
27. anry mc (AnryMc) 708 25.09.12 10:04 Сейчас в теме
(26) Alex_E,
ПАРДОН. Давно это было - забыл.
28. Алексей Ермилов (Alex_E) 1457 25.09.12 10:26 Сейчас в теме
(27) AnryMc, Давно, я просто пользовался, и однажды круто налетел (в доработанной конфе удалил служебные справочники, на кот. реально не было ссылок, а они использовались при создании документов) - поэтому и запомнилось - особенно как я потом с помощью FoxPro восстанавливал dbf :-)
29. Firuz Mavlonov (firuzji) 25.09.12 13:10 Сейчас в теме
30. anry mc (AnryMc) 708 02.10.12 11:56 Сейчас в теме
(17) boogie, (18) average, (19) Ольга_tmp, (20) Vitko_freedomcars,

Для справочников добавил колонку "Исключение" можно исключить из проверок ссылки определенного справочника, например:
"Контрагенты" - "Договора контрагентов",
"Номенклатура" - "Единицы измерения", ...
31. Андрей Гуляев (agulaev) 33 17.10.12 21:31 Сейчас в теме
"Зеленый", спасибо! Плюс!
32. Юрий Осипов (yuraos) 843 29.01.13 14:16 Сейчас в теме
что-то скромненькая обработочка...
есть и покруче функционально:
- под 8.х (автор, правда, решил деньги брать, изначально было бесплатно)
- под 7.7 (бесплатно)
33. anry mc (AnryMc) 708 29.01.13 14:28 Сейчас в теме
(32) yuraos,
1) Для 7.7 см. пост (24)
2) Моя появилась 02.02.2010 20:57, а та для 8.х - 09.02.2012 22:06 Разница в 2 года
34. Юрий Осипов (yuraos) 843 29.01.13 17:37 Сейчас в теме
(33) AnryMc, мда ...
много воды утекло с тех времен
;)
мго чего наделадось.
35. anry mc (AnryMc) 708 06.05.13 18:10 Сейчас в теме
36. Alonzomozley (alonzomozley) 19 03.01.14 07:57 Сейчас в теме
37. anry mc (AnryMc) 708 14.01.14 18:19 Сейчас в теме
(36) alonzomozley,

Можно ещё "плюсик" поставить
38. Alonzomozley (alonzomozley) 19 15.01.14 06:05 Сейчас в теме
39. anry mc (AnryMc) 708 15.01.14 08:42 Сейчас в теме
40. Евгений Сорокин (SEvAn) 3 17.03.15 09:20 Сейчас в теме
Не хватает "Сохранить настройки" и чтобы их можно было восстановить на другой базе!
41. Сергей Ожерельев (Поручик) 3471 17.03.15 09:46 Сейчас в теме
В УТ 11.1 есть обработка Удаление неиспользуемых элементов справочников.
42. anry mc (AnryMc) 708 17.03.15 10:09 Сейчас в теме
(41) Поручик,
Эта публикация от 02.02.2010 20:57
Когда она (обработка) появилась в УТ 11.1?

ЗЫ Может "предьяву" 1С сделать - за плагиат? ;-)))
43. anry mc (AnryMc) 708 17.03.15 10:12 Сейчас в теме
(40) SEvAn,
Область отбора для поиска строиться каждый раз заново - "обходим метаданных".
Нет уверенности, что в другой конфигурации будут те же метаданные... Конечно можно поизвращаться сравнением имен... но не вижу смысла...
44. Евгений Сорокин (SEvAn) 3 18.03.15 14:50 Сейчас в теме
(43) AnryMc, в "совсем" другой да, но часто сливаем несколько в одну и тогда не помешало бы)
Сделайте, хотя бы, чтобы можно было отметить все справочники, т.к. снимать отметку мне лично надо на нескольких всего.
Жду)
45. anry mc (AnryMc) 708 18.03.15 16:17 Сейчас в теме
(44) SEvAn,
Сделал сохранение и чтение настройки через файл - поиск "соответствия" по имени и типу (как текст).
Смотрите 4 версию.
46. Евгений Сорокин (SEvAn) 3 19.03.15 15:40 Сейчас в теме
(45) AnryMc, кнопки называются почему-то одинаково и еще бы крыж "пометить/разметить все"
47. anry mc (AnryMc) 708 19.03.15 16:42 Сейчас в теме
(46) SEvAn,
кнопки называются почему-то одинаково
Упс - это всё лень матушка. исправлю...
48. anry mc (AnryMc) 708 19.03.15 17:34 Сейчас в теме
(46) SEvAn,
2015/03/19 Версия 5
Добавлены кнопки "пометить все" и "снять пометки у всех"
49. Василий Коровин (vasyak319) 122 19.03.15 18:04 Сейчас в теме
Какой-то неоправданно скромный выбор объектов. А где бизнес-процесс, планы счетов, обмена, видов характеристик и расчёта?
50. anry mc (AnryMc) 708 19.03.15 18:12 Сейчас в теме
(49) vasyak319,

А ещё можно сделать чтобы 1С-ка сама работала - без оператора....
51. Василий Коровин (vasyak319) 122 20.03.15 00:33 Сейчас в теме
(50) AnryMc, не надо юродствовать. То, что написал я, сделать проще простого и странно, что вы этого не сделали.
52. anry mc (AnryMc) 708 20.03.15 05:09 Сейчас в теме
(51) vasyak319, Сделать проще простого. Надо просто потратить немного времени, но пока я не могу себе этого позволить...
Можно написать много разного... Просто делал то что нужно было самому - потом выложил...
В моем случае - такой функционал был мне достаточен.
Навряд ли Вы найдете базы с сотнями введенных видов расчетов которые ни где не используются... А вот, например, справочник Номенклатура или Контрагенты - эти почти всегда с мусором...

ЗЫ Извините, если если "задел" своим постом.