|
|
|
Удаление ненужных элементов номенклатуры | ☑ | ||
|---|---|---|---|---|
|
0
eazarkin
19.11.12
✎
11:41
|
Доброе время суток
Возникла необхождимость почистить справочник номенклатуры от элементов на которые нет ссылок ни в одном документе. Написал несложный код. <code> МассивСсылок = Новый Массив; Отбор = Новый Структура("ЭтоГруппа"); Отбор.ЭтоГруппа = Ложь; Выборка = Справочники.Номенклатура.Выбрать(,,Отбор,); Пока Выборка.Следующий() Цикл ЕстьДокументы = Ложь; МассивСсылок.Добавить (Выборка.Ссылка); ТабСсылок = НайтиПоСсылкам(МассивСсылок); Для каждого СтрокаТабСсылок Из ТабСсылок Цикл Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(СтрокаТабСсылок.Данные)) Тогда ЕстьДокументы = Истина; Прервать; КонецЕсли; КонецЦикла; Если НЕ ЕстьДокументы Тогда ЭлементСправочника = Выборка.Ссылка.ПолучитьОбъект() ; ЭлементСправочника.УстановитьПометкуУдаления(Истина,Истина); Сообщить (Выборка.Ссылка); КонецЕсли; МассивСсылок.Очистить(); КонецЦикла; </code> Проблема: уж очень медленно работает. Хотелось бы решить задачу в соответствии с рекомендациями 1с , а именно убрать запрос в цикле. Есть идеи ? |
|||
|
1
vmv
19.11.12
✎
11:43
|
ТабСсылок = НайтиПоСсылкам(МассивСсылок);
это в цикле и очень тяжелое Погугли типовое обработки и не лепи самокат, хотя гарантии, что там быстрее нет |
|||
|
2
Нуф-Нуф
19.11.12
✎
11:44
|
запросом получи массив номенклатуры и сунь один раз в НайтиПоСсылкам
|
|||
|
3
Нуф-Нуф
19.11.12
✎
11:44
|
а потом уже перебирай ТабСсылок и удаляй необходимое
|
|||
|
4
floody
19.11.12
✎
11:50
|
пометить все, удалить помеченные, разметить все.. ну.. вы поняли
|
|||
|
5
НЕА123
19.11.12
✎
11:57
|
> МассивСсылок.Добавить (Выборка.Ссылка);
> ТабСсылок = НайтиПоСсылкам(МассивСсылок); это в цикле!? или я брежу? |
|||
|
6
НЕА123
19.11.12
✎
11:58
|
(5)+ а, есть оказывается
>МассивСсылок.Очистить(); |
|||
|
7
НЕА123
19.11.12
✎
12:02
|
присоединяюсь к (4).
|
|||
|
8
Balabass
19.11.12
✎
12:02
|
Шаг первый - пометить всю номенклатуру на удаление.
шаг второй - сделать удаление всех помеченных объектов шаг третий - снять пометку удаления с номенклатуры шаг четвертый - профит |
|||
|
9
Balabass
19.11.12
✎
12:02
|
млять..на увидел (4) (((
|
|||
|
10
sidalexsandr
19.11.12
✎
12:25
|
УдалитьОбъекты (DeleteObjects)
Синтаксис: УдалитьОбъекты(<Список ссылок>, <Найденные данные>, <Проверять>) Параметры: <Список ссылок> обязательный Тип: Массив. Список ссылок на объекты, которые нужно удалить. <Найденные данные> необязательный Тип: ТаблицаЗначений. Таблица значений, в которую помещаются найденные ссылки на объект, содержит колонки с индексами: 0 - искомая ссылка; 1 - ссылка на объект, который содержит искомую ссылку; 2 - объект метаданных, которому соответствуют данные, в которых найдена ссылка. <Проверять> необязательный Тип: Булево. Параметр определяет, выполнять ли контроль ссылочной целостности при выполнении процедуры. Истина - перед удалением проверяется, нет ли ссылок на удаляемый объект. Если есть, то объект не удаляется, а ссылки помещаются в таблицу значений <Найденные данные>. Ложь - проверка не выполняется. Значение по умолчанию: Ложь. Описание: Удаляет объекты. // удаление помеченных объектов с контролем ссылочной целостности Помеченные = НайтиПомеченныеНаУдаление(); Найденные = 0; УдалитьОбъекты(Помеченные,Найденные, Истина); Для Каждого Ссылка Из Найденные Цикл СтрНеУдален = "Объект не удален:" + Сокр(Ссылка(0)); СтрСсылка = ", используется в " + Сокр(Ссылка(1)); Сообщить (СтрНеУдален + СтрСсылка); КонецЦикла ; |
|||
|
11
Klesk
19.11.12
✎
12:28
|
(4) еще запомнить те, которые были помечены, и после удаления еще раз пометить их
|
|||
|
12
floody
19.11.12
✎
12:31
|
(11) не надо их запоминать, а просто инвертировать пометку, потом обратно
|
|||
|
13
Нуф-Нуф
19.11.12
✎
12:31
|
(12) а что делать с помеченными ранее?
|
|||
|
14
floody
19.11.12
✎
12:32
|
ну хотя да, прав
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |