|   |   | 
| 
 | Как найти элементы справочника без связей с другими объектами? | ☑ | ||
|---|---|---|---|---|
| 0
    
        AVI_stealth 14.03.13✎ 12:23 | 
        Добрый день!
  8.2.16, конфигурация моя. Дано: справочник с огромным количеством элементов. В основном элементы связаны с другими объектами данных, но есть элементы "пустышки", т.е. не имеют никаких связей, которые туда попали по ошибке и теперь мешаются. Задача: как их найти и удалить? Мысли: нужно как-то реализовать выборку по отсутствию связи с элементами, как обычно 1С проверяет помеченные на удаление объекты перед тем как удалить. Но как это описать программным кодом не знаю((( | |||
| 1
    
        ДенисЧ 14.03.13✎ 12:24 | 
        НайтиПоСсылкам ?     | |||
| 2
    
        pessok 14.03.13✎ 12:24 | 
        НайтиПоСсылкам     | |||
| 3
    
        Aleksey 14.03.13✎ 12:24 | 
        А группа - это пустышка
  А так ничего не понял | |||
| 4
    
        Лефмихалыч 14.03.13✎ 12:24 | 
        пометить все на удаление и запустить удаление помеченных. Дальше аносамо автоматически. Все, что останется после удаления, разпометить     | |||
| 5
    
        pessok 14.03.13✎ 12:25 | 
        (4) мсье знает толк в извращениях :)     | |||
| 6
    
        Ork 14.03.13✎ 12:30 | 
        (4) Кстати самый (наверное) быстрый вариант.     | |||
| 7
    
        AVI_stealth 14.03.13✎ 12:30 | 
        (4) их очень много несколько десятков тысяч. в общем база виснет при пометке на удаление. 
  (3) группы отсутствуют (1) (2) угу, щас попробую... | |||
| 8
    
        pessok 14.03.13✎ 12:32 | 
        (6) чем он быстрее 
  Спр = Справочники.Чтото.Выбрать(); Пока Спр.Следующий() Цикл М = Новый Массив(); М.Добавить(Спр.Ссылка); Если НайтиПоСсылкам(Массив).Количество() = 0 Тогда Спр.ПолучитьОбъект.Удалить(); КонецЕсли; КонецЦикла | |||
| 9
    
        Ork 14.03.13✎ 12:37 | 
        (8) Ну хотя бы тем, что НайтиПоСсылкам будет выполнять один раз в отличии от ...     | |||
| 10
    
        Рэйв 14.03.13✎ 12:37 | 
        (8)Несколько десятков тысяч оно месяц будет колбасить     | |||
| 11
    
        hhhh 14.03.13✎ 12:38 | 
        (10) надо не все помечать, а разбить на порции по 2-3 тысячи. За час можно всё поудалять.     | |||
| 12
    
        pessok 14.03.13✎ 12:39 | 
        (9) ну не знаю, право слово... может быть, конечно, но попахивает как-то странно :)     | |||
| 13
    
        pessok 14.03.13✎ 12:39 | 
        да и в (7) написано, что не помечается, что странно, кстати     | |||
| 14
    
        AVI_stealth 14.03.13✎ 12:41 | 
        (12) уважаемый, вот эту строку 1С не может скушать
  НайтиПоСсылкам(Массив).Количество() = 0 и я тоже что не могу понять))) | |||
| 15
    
        ptiz 14.03.13✎ 12:42 | 
        1) Удалить принудительно все элементы.
  2) Запустить ТиИ с проверкой ссылочной целостности. Ссылки восстановятся. 3) Потом обработкой затянуть данные из копии (по УИД) :) | |||
| 16
    
        AVI_stealth 14.03.13✎ 12:43 | 
        (12) может так:
  НайтиПоСсылкам(М).Количество() = 0 ??? | |||
| 17
    
        pessok 14.03.13✎ 12:44 | 
        (16) да, есессна, я ж на коленке писал. и при удаление там ПолучитьОбъект(), со скобками     | |||
| 18
    
        AVI_stealth 14.03.13✎ 12:44 | 
        Делаю по методу (8)... пока висит)) думает чо то))     | |||
| 19
    
        pessok 14.03.13✎ 12:45 | 
        (18) бекап есть? :)     | |||
| 20
    
        hhhh 14.03.13✎ 12:47 | 
        (18) лучше по (4), но помечай не все: например, начинающиеся на букву А, потом удалишь - переходишь к букве Б и т.д.     | |||
| 21
    
        AVI_stealth 14.03.13✎ 12:47 | 
        (19) конечно)) но я все равно пока удаление закомментил и счетчик поставил "оценить масштаб трагедии" пустых объектов)))     | |||
| 22
    
        AVI_stealth 14.03.13✎ 14:43 | 
        В общем конечный вариант, с пометкой на удаление получился такой:
  Спр = Справочники.ФизическиеЛица.Выбрать(); Пока Спр.Следующий() Цикл М = Новый Массив(); М.Добавить(Спр.Ссылка); Если НайтиПоСсылкам(М).Количество() = 0 Тогда ППНайденоПустышек = ППНайденоПустышек + 1; Спр.ПолучитьОбъект().УстановитьПометкуУдаления(Истина); КонецЕсли; КонецЦикла; pessok, спасибо ОГРОМНОЕ!))) | |||
| 23
    
        pessok 14.03.13✎ 15:02 | 
        (22) в таком ключе уже можно сразу удалять, без пометки :)
  про пометку вообще предлагался другой подход, без кодинга :) | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |