Я вижу только один вариант - перебор всех элементов и поиск ссылок НайтиПоСсылкам(...). ООООчень медленно. Есть другие варианты?
Я вижу только один вариант - перебор всех элементов и поиск ссылок НайтиПоСсылкам(...). ООООчень медленно. Есть другие варианты?
а что за справочник?
Перебор то зачем?
НайтиПоСсылкам(<СписокСсылок>, <ОбластьПоиска>, <ВключитьОбъекты>, <ИсключитьОбъекты>)
!!!СписокСсылок!!!
(2) ну, тогда кол-во реквизитов, где можно встретить значения данного типа, наверняка конечно.
перебираешь все доки и справочники, составляешь список используемых значений, а дальше тривиально
запрос ?
так, стоп. я слепошарый, думал, речь про 7-ку, а тут 8-ка
(9) Ну и - есть массив элементов с ссылками - Выбрать Ссылка Из Справочник Где Ссылка Не В &Список
там неправильно делалась загрузка, каждый раз создавались новые элементы. Я их уже исправил, теперь на каждую правильную номенклатуру приходится по 300 неправильных, без ссылок. В общей сложности сейчас несколько сот тысяч номенклатуры. Если их все подсунуть в НайтиПоСсылкам(), то можно на несколько дней пойти чай пить, я думаю
Манагеры сделали просто - пометили всю номенклатуру на удаление, а потом сделали удаление. :)
(12) Да ну - если база SQL - минут на 5 покурить ...
(13) Я тоже так иногда делаю )
(16) что там пробовать, вариант рабочий.
+ только потом прогнать Поиск и удаление задвоенных элементов.
Можно с ИТС, можно и поискать,
link text
твой справочник полное соединение с тем, где должен быть реквизит
с условием is null
(18) Группами номенклатуры удаляй последовательно, иначе может мозгов на сервере не хватить.
(25) есть.
+
http://its.1c.ru/db/metod8dev/content/1648/hdoc/_top/удаление объектов
Универсальная обработка "Удаление помеченных объектов" предназначена для удаления помеченных объектов информационной базы без установки монопольного режима работы с инфомационной базой.
Обработка УдалениеПомеченныхОбъектов.epf находится в каталоге \1CITS\EXE\ExtReps\Unireps81\DeleteMarkedObjects\
ВЫ МОЖЕТЕ ПРЯМО СЕЙЧАС СКОПИРОВАТЬ ОБРАБОТКУ
НА ЖЕСТКИЙ ДИСК ВАШЕГО КОМПЬЮТЕРА
++ реальная обработка. там, где раньше штатная удаляла целый день данные и сваливалась с дампом, эта - удаляет за 20 минут.
с контролем ссылочной целостности, разумеется
(31) это когда в одном реквизите больше одного значения ?
(30)а что там помечать, вручную чтоле будешь?
вот код, который удаляет ВСЕ организации и связанные с ними объекты, кроме одной организации на форме обработки:
Процедура КнопкаВыполнитьНажатие(Кнопка) // Вставить содержимое обработчика. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Организации.Ссылка |ИЗ | Справочник.Организации КАК Организации |ГДЕ | Организации.ссылка <> &орг | |УПОРЯДОЧИТЬ ПО | Организации.Наименование"; Запрос.УстановитьПараметр("орг",орг); Выборка = Запрос.Выполнить().Выбрать(); Всего = Выборка.Количество(); счетчик = 1; Пока Выборка.Следующий() цикл Состояние(Строка(Счетчик)+"/"+Строка(Всего)+" - "+Строка(выборка.ссылка)); ОбработкаПрерыванияПользователя(); массив = Новый Массив; Массив.Добавить(Выборка.Ссылка); // ТЗССылок = НайтиПоСсылкам(Массив); Сообщить("Начало"+Строка(текущаяДата())); ПомеченоДокументов = 0; ПомеченоСправочников = 0; Для каждого СтрокаСсылки ИЗ ТЗСсылок цикл Попытка //справочник Наим = СТрокаСсылки.Данные.Наименование; Если НЕ СТрокаСсылки.Данные.пометкаУдаления Тогда Объект = СТрокаСсылки.Данные.ПолучитьОбъект(); Объект.ПометкаУдаления = Истина; Объект.ОбменДанными.Загрузка = ИСТИНА; Объект.Записать(); ПомеченоСправочников = ПомеченоСправочников + 1; КонецЕсли; Продолжить; Исключение КонецПопытки; Попытка //документ Наим = СТрокаСсылки.Данные.Дата; Если НЕ СТрокаСсылки.Данные.пометкаУдаления Тогда Объект = СТрокаСсылки.Данные.ПолучитьОбъект(); Объект.ПометкаУдаления = Истина; Если СТрокаСсылки.Метаданные.Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить Тогда //например, для доков Регл отчет движения запрещены Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения); Иначе Объект.записать(); КОнецЕсли; ПомеченоДокументов = ПомеченоДокументов + 1; КонецЕсли; Продолжить; Исключение КонецПопытки; КонецЦикла; Сообщить(Строка(выборка.ссылка)+ " найденных объектов:"+Строка(ТЗСсылок.Количество())+" из них помечено справочников: "+Строка(ПОмеченоСправочников)+" помечено документов: "+Строка(ПомеченоДокументов)); Сообщить("Окончание"+Строка(текущаяДата())); счетчик = счетчик + 1; обр=Справочники.ВнешниеОбработки.НайтиПоНаименованию("Удаление помеченных объектов"); ИмяФайла = ПолучитьИмяВременногоФайла(); ДвоичныеДанные = обр.ХранилищеВнешнейОбработки.Получить(); ДвоичныеДанные.Записать(ИмяФайла); Обработка = внешниеобработки.Создать(ИмяФайла,ЛОЖЬ); Форма = Обработка.ПолучитьФорму(); Форма.Открыть(); Форма.закрыть(); Сообщить("Удаление завершено"); КонецЦикла; КонецПроцедуры
(34) их немного, их можно удалить руками
(33) Долго-долго фигачит:
НачатьТранзакцию(); НомерЗаписи = 0; Выборка = Справочники.Номенклатура.Выбрать(); Пока Выборка.Следующий() Цикл Если Не Выборка.ПометкаУдаления Тогда СправочникОбъект = Выборка.ПолучитьОбъект(); СправочникОбъект.ПометкаУдаления = Истина; СправочникОбъект.Записать(); НомерЗаписи = НомерЗаписи + 1; Если НомерЗаписи % ЗаписейВтранзакции = 0 Тогда Состояние("""" + НомерЗаписи); ЗафиксироватьТранзакцию(); НачатьТранзакцию(); КонецЕсли КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию();
(37) чтобы быстрее
(39) дык, я так и делаю же
(27) у меня штатная быстрее фигачит
Вероятно , все последующие созданные номенклатуры имеют бОльшие коды. т.е. задвоенные.
а минимальный код трушный.
вероятно можно на этом сыграть и грохнуть лишнее...
(43) нетленка. нет смысла в этом
пол дня удаляю элементы. удалил 300 000, осталось 700 000