Как быстро удалить неиспользуемые элементы справочников (в управляемом и обычном приложении)?


Огромная база, учет в которой велся несколько лет. Раздутые справочники.  Пользователи теряются при выборе. Некоторые элементы использовались еще до переноса  в новую программу. Представили? А теперь расслабьтесь!

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

Все программы содержат нормативно — справочную информацию. В одних базах ее много, в других — много до неприличия. Зачастую справочники информационной базы содержат избыточное количество элементов, некоторые из которых вообще не используются.

Когда же возникают эти «мусорные» элементы?

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

  2. На этапе внедрения. Когда пользователи еще не привыкли работать в программе, они неизбежно станут делать ошибки. В том числе, вводить ненужные элементы в справочники системы.

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

Все, что Вам нужно сделать — запустить штатную процедуру удаления помеченных объектов.

 

 

51 Comments

  1. СергейКа

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

    Reply
  2. gutentag

    (1) можете попробовать(но быстродействие я не замерял) через «Сервис — Служебные — Групповая обработка документов и справочников» -> пометить справочник на удаление.

    После удаляются неиспользуемые объекты. И снимается пометка удаления с оставшихся объектов.

    Reply
  3. gutentag

    (0) ИМХО очень неудобно выбирать нужный справочник прокручивая список мышкой.

    Разве нельзя было сделать возможность поиска по через «Ctrl+F» ?

    Reply
  4. tomvlad

    Игорь, если не нравится, разве нельзя нарисовать форму для себя?

    Reply
  5. СергейКа

    (2) Точно знаю что быстрее не будет.

    Reply
  6. gutentag

    (4) я высказал только пожелания/критику. И не более. 🙂

    А рисовать умею только на бумаге, увы :-/

    Reply
  7. gutentag

    (4) скачал обновленную обработку — Спасибо! 🙂

    Reply
  8. maloi_a

    Замечания:

    1. Список справочников лучше отсортировать

    ЭлементыФормы.СписокСправочников.Значение.СортироватьПоПредставлению();

    2. Для неиерархических справочников помеченные на удаление элементы тоже не надо проверять.

    3. Конструкция

    Выборка = Результат.Выбрать();

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

    МассивСсылок.Добавить(Выборка.Ссылка);

    КонецЦикла;

    эквивалентна одному оператору:

    МассивСсылок=Результат.Выгрузить().ВыгрузитьКолонку(«Ссылка»);

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

    5. Для эффективности поиска лучше

    ТаблицаНеиспользуемых.Свернуть(«Ссылка»);

    6. А также повторить запрос вне транзакции с добавленным условием

    И » + ИмяСправочника + «.Ссылка НЕ В (&ТаблицаНеиспользуемых)

    вместо поиска в цикле внутри транзакции.

    Reply
  9. tomvlad

    (8) Александр, честно говоря эта обработка была написана на скорую руку за 15 минут. Более я ее использовать не планирую. Если есть желание, можно переписывать и оптимизировать, я не против.

    Reply
  10. Chif13

    Tom спасибо за обработку, немного подправила под свои нужды. Учла замечания maloi_a.

    http://www.rapidshare.ru/938716

    Reply
  11. maloi_a

    (10) Не хватает оптимизации в транзакции.

    (9)Сделал под себя

    http://www.rapidshare.ru/944458

    Reply
  12. grig

    подчиненные справочники из массива ссылок надо бы исключать, т.к. обычно пр пометке удаления владельца они тоже помечаются на удаление.

    Reply
  13. Requiem

    (12)Как раз не нужно. Если к примеру удаляем номенклатуру, то единицы измерения тоже надо удалять

    Reply
  14. ValeraEm

    Хорошая обработка, спасибо

    Reply
  15. NickProv

    Столкнулся с проблеммой — элемент справочника ВложенияЭлектронныхПисем не может не только удалить, но и пометить не дает, кричит «Недостаточно памяти», и поэтому не дает и выгрузку в УРИБе сделать, как удалить?

    Reply
  16. romanovkv

    А можно еще выложить ссылки на «доработанный» вариант скрипта?

    Reply
  17. romanovkv

    Ну дайте доработанный вариант скриптика!!!

    Reply
  18. wondermaker

    Как всегда оказалось, что что-то общее и универсальное не подошло 🙁

    У нас база перекочевала с 7.7 в 8.0, потом в 8.1, затем была смена юр. лиц. В итоге, за полгода работы из 28 тыс элементов номенклатуры явно половина не востребована.

    Но, если задавать обработке поиск, но натыкаемся на два момента

    1) спр-к единицы измерений, с которым связана ном-ра

    2) регистр сведений «Ном-ра органихзаций», данные в котором «перекочевали» от предыдущего юр. лица 🙂

    3) не используемые нигде спецификации, которые тоже надо «зачистить»

    Ничего, зато сам прощупал (в очередной раз…) нашу базу. Написал коряво, но быстро и работающе. Жаль времени много уходит — приходится системе анализировать тип ссылок, в которых исп-ся тот или иной элемент…

    Reply
  19. demiris

    Без ручного удаления штрих-кода номенклатура не удаляется. Как быть?

    Reply
  20. balabani111

    Проста Клёва

    Reply
  21. Senator_I

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

    Reply
  22. WildFire

    Люди, посоветуйте плз, стоит ли это скачивать? Нужно подчистить именно номенклатуру и только ее. Тут куча обработок, фиг поймешь, что нужно скачивать, т.к. если скачаешь не подходящую тебе обработку, потом придется флудить часами, восстанавливая потерянные очки 🙁

    Reply
  23. utia38

    отличная обработка «Удаление неиспользуемых элементов справочников» очень помогла на стадии внедрения ББУ8, упустил момент воспользоваться подбной обработкой в ББУ 77 осуществил весь перенос со всей номенклатурой которой уже и в помине нет договорами контрагентами и т.п бухгалтера начали жужжать что мол много вего ненужного во и пришлось использовать старую добрую оработочку но уже в восмере КОРОЧЕ СПАСИБО!!!

    Reply
  24. tomvlad

    (23) Вообще-то она никакого отношения к семерочной не имеет.

    Reply
  25. AlekseiLeit

    норм обработка

    Reply
  26. post279

    Работает, все нормуль

    Reply
  27. Raminus

    Держи плюсик

    Reply
  28. Energen

    Помогла в чистке «загаженной» некорректными конвертациями бд ут 10.3, спасибо

    Reply
  29. tmaker

    Отличная обработка. Спасибо.

    Reply
  30. kkk

    классаная штука +

    Reply
  31. Sean1s

    Отличная обработка.

    Как раз поставлена задача по чистке справочника.

    Reply
  32. andru_dv

    Хорошая обработка.

    Бухгалтерия поставила задачу удалить задвоенных сотрудников.

    Пригодится в работе.

    Reply
  33. BagА

    Скажите а на 8.2 работает нормально?

    Reply
  34. Lerusena

    не помогло:( справочник контрагентов почистить не удалось, несмотря на наличие галки не учитывать наличие ссылки в подчиненных объектах:( увы

    Reply
  35. Velliar

    Если по позиции было движение. Но потом документы эти были помеченны на удаление. Удалит обработка эти позиции?

    Reply
  36. tomvlad

    (36) Velliar, если на помеченный на удаление объект нет ссылок в информационной базе — то да.

    Reply
  37. vladir

    (37) При попытке скачать обработку выдается сообщение Указанный файл не найден в базе. ?????

    Reply
  38. tomvlad

    (38) Действительно, по неизвестной мне причине файл исчез. Заменил на новый, заодно обновил для использования в 8.3 без модальных вызовов.

    Reply
  39. vladir

    (39) Спасибо! На сей раз скачать удалось. Правда сняли См и за неудачную попытку… Как там в этих случаях говорят: Сдох Максим да и фиг с ним! 🙂 Ещё раз спасибо!

    Reply
  40. spectre1978

    Скачал, сейчас тестирую… Уже заметил следующее. В УПП и в ЗУП есть такой механизм, как личные счета сотрудников. Они хранятся в РС. В нем же есть ссылка на банк типа СправочникСсылка.Контрагенты. За счет этого в организациях, где много иногородних сотрудников, в контрагентах появляется большое число записей, ссылка на которые есть только из РС расчетных счетов сотрудников.

    Обработка, понятное дело, все это добро мне радостно пометила на удаление. А не надо бы.

    Может, какой-то механизм исключений придумать, чтоб каждый раз не снимать пометку с таких записей?

    Reply
  41. gull22

    Спасибо за обработку. Было бы замечательно иметь возможность устанавливать фильтры.

    Reply
  42. KliMich

    Спасибо! Обработка очень пригодилась при переносе данных в другую конфигурацию.

    Reply
  43. NtS

    при поиске в справочнике Контрагенты, не находит неиспользуемых, в используемых при этом находятся контрагенты, в которых показана ссылка на самого себя, с чем это может быть связано?

    Reply
  44. gull22

    Отлично отработало на 1с:Хеликс

    Reply
  45. MaxxiMiliSan

    Поиск ссылок на объекты

    и проверять все ссылки

    Глобальный контекст (Global context)

    НайтиПоСсылкам (FindByRef)

    Синтаксис:

    НайтиПоСсылкам(<СписокСсылок>)

    Параметры:

    <СписокСсылок> (обязательный)

    Тип: Массив.

    Массив со списком ссылок на объекты, ссылки на которые нужно найти.

    Возвращаемое значение:

    Тип: ТаблицаЗначений.

    Возвращает ссылки на найденные объекты в виде ТаблицаЗначений.

    Первая колонка — исходная ссылка.

    Вторая колонка — ссылка на объект, если найденная ссылка соответствует объектной таблице или значение, олицетворяющее запись необъектной таблицы.

    Третья колонка — объект метаданных, которому соответствуют данные в которых найдена ссылка.

    Описание:

    Осуществляет поиск ссылок на объекты, переданные в параметре <СписокСсылок>.

    Доступность:

    Сервер, толстый клиент, внешнее соединение.

    Примечание:

    Поиск осуществляется только в тех данных, которые доступны в рамках текущего сеанса с учетом разделения (условное разделение учитывается).

    Пример:

    Ссылки = НайтиПомеченныеНаУдаление();

    ТабСсылок = НайтиПоСсылкам(Ссылки);

    Для Каждого Ссылка из ТабСсылок Цикл

    Сообщить («» + СокрЛП(Ссылка[0]) + » » + СокрЛП(Ссылка[1]));

    КонецЦикла;

    Reply
  46. echo77

    Сделано качественно, скачал новую версию — добавил в нее открытие формы списка справочника по клику

    Reply
  47. dunaev

    Добрый день, при попытке удалить или пометить на удаление выдается сообщение «Метод объекта не обнаружен (ПолучитьОбъект)

    Reply
  48. tomvlad

    (48) dunaev, приведите пожалуйста полный текст сообщения об ошибке.

    Reply
  49. Aprobator

    (46) С учетом того, что этот метод ищет все ссылки, а в нашем случае нужна хотя бы одна, будет работать довольно долго.

    Reply
  50. Manonegro

    В процедуре ВыполнитьПроверкуСправочника() ошибка — падает на иерархических справочниках без групп. Нужно так:

    Если Метаданные.Справочники[ИмяСправочника].Иерархический

    И Метаданные.Справочники[ИмяСправочника].ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда

    Запрос.Текст = Запрос.Текст + »

    | И (НЕ » + ИмяСправочника + «.ЭтоГруппа)»;

    КонецЕсли;

    Reply
  51. TABEZI1234

    скиньте кому не жалко dubrovo111@mail.ru , спасибо

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *