gifts2017

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


 

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

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

См. также

Contragent+ 5.0 от 2 500
Подписаться Добавить вознаграждение

Комментарии

1. anry mc (AnryMc) 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) 03.02.10 12:28
товарищ AnryMc еще "зеленый" прогер :D
7. Chin (ChinChin) 03.02.10 14:54
(5) Конечно не "скорость", а "время"!!! :D
8. anry mc (AnryMc) 03.02.10 22:16
(All) Извините выложил версию с ошибкой. Исправлено.
+ тоже самое по документам НО НА СВОЙ СТРАХ И РИСК!

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

Чуть доделал - (3)
11. anry mc (AnryMc) 04.02.10 22:16
12. Андрей Григорьев (Borisych) 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) 05.02.10 07:47
(14) + (13) Спасибо. В ближайшее время добавлю
16. anry mc (AnryMc) 06.02.10 08:39
Добавлены выраженные пожелания
17. Тимофей Бугаевский (boogie) 01.06.10 18:12
В статусе быстро-быстро мелькает "На удаленте",
Хорошо бы добавить прогресс - я тут кууучу мусора удалял и не знал когда уже наконец
а так +!
Легко удалил неиспользуемые договоры контрагентов.

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

Для справочников добавил колонку "Исключение" можно исключить из проверок ссылки определенного справочника, например:
"Контрагенты" - "Договора контрагентов",
"Номенклатура" - "Единицы измерения", ...
31. Андрей Гуляев (agulaev) 17.10.12 21:31
"Зеленый", спасибо! Плюс!
32. Юрий Осипов (yuraos) 29.01.13 14:16
что-то скромненькая обработочка...
есть и покруче функционально:
- под 8.х (автор, правда, решил деньги брать, изначально было бесплатно)
- под 7.7 (бесплатно)
33. anry mc (AnryMc) 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) 29.01.13 17:37
(33) AnryMc, мда ...
много воды утекло с тех времен
;)
мго чего наделадось.
35. anry mc (AnryMc) 06.05.13 18:10
36. Alonzomozley (alonzomozley) 03.01.14 07:57
37. anry mc (AnryMc) 14.01.14 18:19
(36) alonzomozley,

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

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

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

ЗЫ Извините, если если "задел" своим постом.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа