v7: Удалить много элементов справочника быстро в 7.7 #643812


#0 by Хуан_Перейро
Здравствуйте! Подскажите какие есть идеи, как можно за короткое время удалить много элементов одного справочника в 1С 7.7. Стандартно - перебором каждого элемента, занимает много времени. Справочник включен в конфигурацию, поэтому доступ к нему через объект XBase и использование метода ОчиститьФайл - не приносит результатов. Заранее спасибо за ответ.
#1 by Скользящий
дбфку справочника грохнуть, потом заполнить нужное.
#2 by Godofsin
файловая?
#3 by Хуан_Перейро
Да, файловая версия. Сейчас это так и реализовано, но это все таки варварский метод.
#4 by Mikeware
Ну удаляй в транзакции...
#5 by Хуан_Перейро
Использование транзакции тоже не дает производительности при удалении.
#6 by Voronve
Кусками по 200-300 элементов удаляй в транзакции
#7 by Mikeware
"мальчик жестом объяснил, что его зовут Хуан"© просто не умеешь...
#8 by Хуан_Перейро
Пробовал. Такой метод используется в обработке загрузки на диске итс. Результат незначительный. Все равно ждешь до 15 минут.
#9 by Хуан_Перейро
Я только рад это научиться))
#10 by Voronve
Удаляешь сразу или только метишь на удаление ?
#11 by Хуан_Перейро
Я только рад этому научиться, но может помимо транзакции существуют какие-нибудь альтернативные методы работы?
#12 by Voronve
Альтернативный - грохать дбф'ку. Пересоздавать и заполнять по новой
#13 by Хуан_Перейро
Это то, что используется сейчас. Жду 15-20 минут. Процедура  ОчиститьВ_штрих1
#14 by Хуан_Перейро
Удаляю.
#15 by Voronve
Попытка зачем ?
#16 by Хуан_Перейро
Сейчас этот метод используется, точнее аналогичный, я просто копирую с заменой чистую дбф с индексом в каталог базы. Но такие пляски приводят либо к вылету 1С либо к бесполезности такого копирования, файл остается заполненным. Т.е. после выполнения такой процедуры туда нужно еще лезть и смотреть что справочник действительно пустой.
#17 by Dolly_EV
#18 by Хуан_Перейро
В случае если что-то не получилось, откатить всю транзакцию.
#19 by Voronve
Как в 17 - пробовал ?
#20 by Базис
Тебе же сказали - по 100-500 штук делай, конкретный размер подбирается опытным путём, замеряя интервал между транзакциями. (Внезапно подумал, что это может зависеть от структуры dbf).
#21 by palpetrovich
прикольное имя справочника "в_Штрих1" :) уверен что на удаляемые элементы нигде ссылок нет?
#22 by Voronve
Он на прямую удаляет
#23 by palpetrovich
ну дык, я и пытаюсь намекнуть, может не надо это делать? тем более что "акие пляски приводят либо к вылету 1С " (цы)
#24 by Песец
По несколько раз в день что ли удаляешь? Сколько элементов  удаляется? К чему такая спешка? Ночью удалить не спеша никак?
#25 by bushd
Так из за тарнзакции долго.
#26 by bushd
Оно ее ухудшает в большинстве случаев.
#27 by bushd
+ По крайне мере в файловой версии.
#28 by Voronve
Походу 17 скосила ТС, больше не появиться
#29 by Песец
(24+) ... а если ни на один элемент справочника нет ссылок, зачем он вообще в конфигурации? Может, не трубы, а всю систему грохнуть?
#30 by Хуан_Перейро
На текущем кол-ве элементов в справочнике, 8163 шт: - метод 17 дает результат 7,1 секунды. - метод без разбивания транзакции 8,4 секунды. Сейчас загоню в справочник больше элементов, отпишусь о результатах. )))
#31 by Voronve
Эммм ... милионами записей в дбф ворочаешь ?
#32 by varelchik
А ты с ссылками как?
#33 by varelchik
самый простой вариант используй OLEDB и простым запросом truncate table sc...
#34 by BlackSeaCat
По-моему, уже пора требовать от автора описания ВСЕЙ задачи, а не только "как быстро удалить туеву хучу элементов?" Потому что лично мне непонятно - что за справочник такой, который надо регулярно (насколько я понял) и быстро очищать полностью? Дело может осложниться еще и тем, что не вся информация из справочника может храниться в единственной DBFке, например, периодические реквизиты - совсем в другой файле, грохать который нельзя. Может оказаться, что лучше держать эту инфу, например, не в справочнике, а во внешнем DBF, а для работы считывать его в список значений. Тогда быстрое удаление будет делаться в две строки кода: очистил СЗ, очистил DBF.
#35 by Ёпрст
там нет трункейте
#36 by Касандер72
про 1Cpp упоминали? ))) (там DELETE есть в прямом)
#37 by Ёпрст
если надо удалить все (и наплевать на ссылочную целостность) - грохни табличку справочника, если по условию - delete + where
#38 by Туц
используй внешнюю sql базу.
#39 by varelchik
это если выборочно. мгновенно все данные.
#40 by varelchik
звиняйте, привык к SQL и решил что у ОЛИ тоже есть. ну тогда только delete
#41 by Ёпрст
ну нету трункейт в оледб, ну нету.
#42 by Ёпрст
там всё проще, дел sc* ручонками
#43 by Хуан_Перейро
Выборочно не нужно, справочник грохается полностью.
#44 by Ёпрст
откой словарик, найди имя таблички твоего справоника, удали соотв. дбф-ку от него и сдикс.. всё, наслаждайся
#45 by Хуан_Перейро
Не пробывал такой метод, где взять информацию по нему?
#46 by varelchik
Кажуть грохи и создай заново. че непоняткого то?
#47 by varelchik
1cv7.dd в корне базы
#48 by varelchik
1cpp.ru
#49 by Хуан_Перейро
Всем спасибо за идеи, буду пробывать 1с++. О результатах отпишусь.
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С