|
Как найти элементы справочника без связей с другими объектами? | ☑ | ||
---|---|---|---|---|
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) в таком ключе уже можно сразу удалять, без пометки :)
про пометку вообще предлагался другой подход, без кодинга :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |