Найти элементы справочника, на которые нет ссылок

  1. 9 г. назад

    Я вижу только один вариант - перебор всех элементов и поиск ссылок НайтиПоСсылкам(...). ООООчень медленно. Есть другие варианты?

  2. а что за справочник?

  3. Номенклатура, база нетленка.

    Ответы: (6)
  4. Перебор то зачем?
    НайтиПоСсылкам(<СписокСсылок>, <ОбластьПоиска>, <ВключитьОбъекты>, <ИсключитьОбъекты>)
    !!!СписокСсылок!!!

    Ответы: (4)
  5. (3) и я найду всю номенклатуру, у которой есть ссылки. Мне надо наоборот

    Ответы: (5)
  6. (4) ну и вычтите одно множество из другого

    Ответы: (7)
  7. (2) ну, тогда кол-во реквизитов, где можно встретить значения данного типа, наверняка конечно.
    перебираешь все доки и справочники, составляешь список используемых значений, а дальше тривиально

  8. Возвращаемое значение:
    Тип: ТаблицаЗначений.
    Возвращает ссылки на найденные объекты в виде ТаблицаЗначений.
    Загоняешь потом в запрос и делаешь (5)

    Ответы: (9)
  9. запрос ?

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

    ему вернёт список объектов, где встречаются заданные ссылки. но ему не это надо

    Ответы: (11)
  11. так, стоп. я слепошарый, думал, речь про 7-ку, а тут 8-ка

  12. (9) Ну и - есть массив элементов с ссылками - Выбрать Ссылка Из Справочник Где Ссылка Не В &Список

  13. там неправильно делалась загрузка, каждый раз создавались новые элементы. Я их уже исправил, теперь на каждую правильную номенклатуру приходится по 300 неправильных, без ссылок. В общей сложности сейчас несколько сот тысяч номенклатуры. Если их все подсунуть в НайтиПоСсылкам(), то можно на несколько дней пойти чай пить, я думаю

    Ответы: (14)
  14. Манагеры сделали просто - пометили всю номенклатуру на удаление, а потом сделали удаление. :)

    Ответы: (15) (16)
  15. (12) Да ну - если база SQL - минут на 5 покурить ...

  16. (13) Я тоже так иногда делаю )

  17. (13) ну, вот тоже вариант. попробовать чтоли

    Ответы: (17) (20)
  18. (16) что там пробовать, вариант рабочий.

  19. 943 802 номенклатуры

    Ответы: (22)
  20. + только потом прогнать Поиск и удаление задвоенных элементов.
    Можно с ИТС, можно и поискать,
    link text

  21. (16)самый простой вариант )
    если тебе реально нужны ссылки, то делаешь копию, удаляешь, сравниваешь

    Ответы: (39)
  22. твой справочник полное соединение с тем, где должен быть реквизит
    с условием is null

    Ответы: (23)
  23. (18) Группами номенклатуры удаляй последовательно, иначе может мозгов на сервере не хватить.

  24. zak555 полное соединение с тем, где должен быть реквизит

    видов доков может быть очень много

    Ответы: (28)
  25. не удаляй штатной обработкой, будешь неделю удалять

    Ответы: (25)
  26. (24) есть нештатная с контролем ссылочной целостности?

    Ответы: (26)
  27. (25) есть.

  28. +
    http://its.1c.ru/db/metod8dev/content/1648/hdoc/_top/удаление объектов
    Универсальная обработка "Удаление помеченных объектов" предназначена для удаления помеченных объектов информационной базы без установки монопольного режима работы с инфомационной базой.

    Обработка УдалениеПомеченныхОбъектов.epf находится в каталоге \1CITS\EXE\ExtReps\Unireps81\DeleteMarkedObjects\

    ВЫ МОЖЕТЕ ПРЯМО СЕЙЧАС СКОПИРОВАТЬ ОБРАБОТКУ
    НА ЖЕСТКИЙ ДИСК ВАШЕГО КОМПЬЮТЕРА

    Ответы: (41)
  29. (23) ты про количество ?

    Ответы: (31)
  30. ++ реальная обработка. там, где раньше штатная удаляла целый день данные и сваливалась с дампом, эта - удаляет за 20 минут.
    с контролем ссылочной целостности, разумеется

  31. я только помечать их час буду

    Ответы: (33)
  32. (28) про виды

    Ответы: (32)
  33. (31) это когда в одном реквизите больше одного значения ?

  34. (30)а что там помечать, вручную чтоле будешь?

    вот код, который удаляет ВСЕ организации и связанные с ними объекты, кроме одной организации на форме обработки:

    Процедура КнопкаВыполнитьНажатие(Кнопка)
    	// Вставить содержимое обработчика.
    	
    	Запрос = Новый Запрос;
    	Запрос.Текст = "ВЫБРАТЬ
    	|	Организации.Ссылка
    	|ИЗ
    	|	Справочник.Организации КАК Организации
    	|ГДЕ
    	|	Организации.ссылка <> &орг
    	|
    	|УПОРЯДОЧИТЬ ПО
    	|	Организации.Наименование";
    	Запрос.УстановитьПараметр("орг",орг);
    	
    	Выборка = Запрос.Выполнить().Выбрать();
    	Всего = Выборка.Количество();
    	
    	счетчик = 1;
    	Пока Выборка.Следующий() цикл
    		
    		Состояние(Строка(Счетчик)+"/"+Строка(Всего)+" - "+Строка(выборка.ссылка));
    		ОбработкаПрерыванияПользователя();
    		массив = Новый Массив;
    		Массив.Добавить(Выборка.Ссылка);
    		//
    		ТЗССылок = НайтиПоСсылкам(Массив);
    		Сообщить("Начало"+Строка(текущаяДата()));
    		ПомеченоДокументов = 0;
    		ПомеченоСправочников = 0;
    		Для каждого СтрокаСсылки ИЗ ТЗСсылок цикл
    			
    			Попытка
    				//справочник
    				Наим = СТрокаСсылки.Данные.Наименование;
    				Если НЕ СТрокаСсылки.Данные.пометкаУдаления Тогда
    					Объект = СТрокаСсылки.Данные.ПолучитьОбъект();
    					Объект.ПометкаУдаления = Истина;
    					Объект.ОбменДанными.Загрузка = ИСТИНА;
    					Объект.Записать();
    					ПомеченоСправочников = ПомеченоСправочников + 1;
    				КонецЕсли;
    				Продолжить;
    			Исключение
    			КонецПопытки;
    			
    			Попытка
    				//документ
    				Наим = СТрокаСсылки.Данные.Дата;
    				Если НЕ СТрокаСсылки.Данные.пометкаУдаления Тогда
    					Объект = СТрокаСсылки.Данные.ПолучитьОбъект();
    					Объект.ПометкаУдаления = Истина;
    					Если СТрокаСсылки.Метаданные.Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить  Тогда //например, для доков Регл отчет движения запрещены
    						Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
    					Иначе
    						Объект.записать();
    					КОнецЕсли;
    					
    					ПомеченоДокументов = ПомеченоДокументов + 1;
    				КонецЕсли;
    				Продолжить;
    			Исключение
    			КонецПопытки;
    			
    			
    		КонецЦикла;
    		
    		Сообщить(Строка(выборка.ссылка)+ " найденных объектов:"+Строка(ТЗСсылок.Количество())+" из них помечено справочников: "+Строка(ПОмеченоСправочников)+" помечено документов: "+Строка(ПомеченоДокументов));
    		Сообщить("Окончание"+Строка(текущаяДата()));
    		
    		счетчик = счетчик + 1;
    		
    		обр=Справочники.ВнешниеОбработки.НайтиПоНаименованию("Удаление помеченных объектов");
    		ИмяФайла = ПолучитьИмяВременногоФайла();
    		ДвоичныеДанные = обр.ХранилищеВнешнейОбработки.Получить();
    		ДвоичныеДанные.Записать(ИмяФайла);
    		Обработка =  внешниеобработки.Создать(ИмяФайла,ЛОЖЬ);
    		Форма = Обработка.ПолучитьФорму();
    		Форма.Открыть();
    		Форма.закрыть();
    		Сообщить("Удаление завершено");
    		
    		
    		
    	КонецЦикла;
    КонецПроцедуры
    
    Ответы: (34) (36)
  35. (33) А что делать с неподчинеными РС? Ну типа настройки пользователя

    Ответы: (35)
  36. (34) их немного, их можно удалить руками

  37. (33) Долго-долго фигачит:

    НачатьТранзакцию();
    
    НомерЗаписи = 0;
    Выборка = Справочники.Номенклатура.Выбрать();
    Пока Выборка.Следующий()  Цикл
    	Если Не Выборка.ПометкаУдаления Тогда
    		СправочникОбъект = Выборка.ПолучитьОбъект();
    		СправочникОбъект.ПометкаУдаления = Истина;
    		СправочникОбъект.Записать();
    		НомерЗаписи = НомерЗаписи + 1;
    		Если НомерЗаписи % ЗаписейВтранзакции = 0 Тогда
    			Состояние("""" + НомерЗаписи);
    			ЗафиксироватьТранзакцию();
    			НачатьТранзакцию();
    		КонецЕсли
    	КонецЕсли;
    КонецЦикла;
    
    ЗафиксироватьТранзакцию();
    
    Ответы: (39) (43)
  38. А зачем в транзакции? Если вылетит, запустишь еще раз

    Ответы: (38)
  39. (37) чтобы быстрее

  40. (36) правильный ответ в (20), моментом выдаст. Обычный select с условием на null, не мудри.

    Ответы: (40)
  41. (39) дык, я так и делаю же

  42. (27) у меня штатная быстрее фигачит

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

  44. (36)Типовая?
    ОбменДанными.Загрузка = Истина нужно было поставить

    Ответы: (44)
  45. (43) нетленка. нет смысла в этом

  46. пол дня удаляю элементы. удалил 300 000, осталось 700 000

или зарегистрируйтесь чтобы ответить!