|
Удаление организации | ☑ | ||
---|---|---|---|---|
0
Gromov
14.08.13
✎
09:50
|
УТ 11.1 редакции 11.1.1.13. Удаляю организацию, написал обработку, ниже код:
&НаСервере Процедура ПереборСервер() МассивМой = Новый Массив; МассивМой.Добавить(Объект.СкладИОрганиз); ТЗ = НайтиПоСсылкам(МассивМой); Для Каждого Стр Из ТЗ Цикл Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Стр.Данные)) или Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Стр.Данные)) Тогда МетаданныеОбъекта = Стр.Данные.Метаданные(); Если ТипЗнч(Объект.СкладИОрганиз) = Тип("СправочникСсылка.Организации") и МетаданныеОбъекта.Реквизиты.Найти("Организация")<> Неопределено Тогда Если Стр.Данные.Организация = Объект.СкладИОрганиз Тогда Если Стр.Данные.ПометкаУдаления = Ложь Тогда ПометкаНауДаление(Стр.Данные); КонецЕсли; КонецЕсли; Иначе Если Стр.Данные.ПометкаУдаления = Ложь Тогда ПометкаНауДаление(Стр.Данные); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; //Для Каждого Стр Из Метаданные.Документы Цикл // // Сообщить(Стр); //КонецЦикла; КонецПроцедуры // ПереборСервер() Процедура ПометкаНауДаление (ПолСсылку) Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПолСсылку)) Тогда ПолОбъект = ПолСсылку.ПолучитьОбъект(); ПолОбъект.УстановитьПометкуУдаления(Истина,Истина); ПолОбъект.Записать(); ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(ПолСсылку)) Тогда ПолОбъект = ПолСсылку.ПолучитьОбъект(); МассивМой1 = Новый Массив; МассивМой1.Добавить(ПолСсылку); ТЗ1 = НайтиПоСсылкам(МассивМой1); Для Каждого Стр1 Из ТЗ1 Цикл Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Стр1.Данные)) Тогда Если Стр1.Данные.ПометкаУдаления = Ложь Тогда ПолОбъект1 = Стр1.Данные.ПолучитьОбъект(); ПолОбъект1.УстановитьПометкуУдаления(Истина); ПолОбъект1.Записать(); КонецЕсли; КонецЕсли; КонецЦикла; Если ТЗ1.Количество() = 0 Тогда ПолОбъект.УстановитьПометкуУдаления(Истина); ПолОбъект.Записать(); КонецЕсли; КонецЕсли; КонецПроцедуры Проблема в том что есть документы на которые тоже есть ссылки, к примеру "ПеремещениеТоваров" на него ссылается документ "ПриходныйОрдерНаТовары" у которого нет реквизита организация, и для пометки этих документов на удаление я использую "НайтиПоСсылкам" в цикле, что довольно тормозит обработку. Прошу помочь оптимизировать код, или дать какие-нибудь идеи как это сделать, а то на помечение 40 тысяч объектов уходит часов 9-10 |
|||
1
shuhard
14.08.13
✎
09:52
|
(0) а ёще пришлите мне денег
|
|||
2
craxx
14.08.13
✎
09:54
|
(0) Оптимизаторы оптимизировали, оптимизировали, да не выоптимизировали.
|
|||
3
DIvanmgn
15.08.13
✎
11:49
|
(0) сначала собери все ссылки которые нужно пометить на удаление, а потом удаляй
|
|||
4
DIvanmgn
15.08.13
✎
11:49
|
(3) удаляй = помечай на удаление
|
|||
5
Kurbash
15.08.13
✎
12:33
|
это гемор страшный-в прошлом году удалял из базы организацию.
Есть два варианта-хороший и плохой, 1.- тупо удалить обработкой в конфигураторе органиизацию и прогнать тестирование и исправление БД, где если ссылок на объект не найдено-удалять объект. Второй-как в (3)и (4), для облегчения пользуйся обработкой удаления опмеченных объектов с отбором по метаданным, сначала документы, потом справочники. |
|||
6
Gromov
15.08.13
✎
14:33
|
Спасибо за помощь всем кто откликнулся, буду пробовать!!!
|
|||
7
Kreont
15.08.13
✎
14:43
|
(0) а зачем вообще удалять?
Скрой через РЛС (или как получится :) ) и пусть себе будут данные по ней. |
|||
8
skunk
15.08.13
✎
14:53
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |