В базе УТ 10 обычные формы (естественно) файловая размером 5 ГБ накопилось очень много помеченных на удаление документов - порядка 200 000. Стандартное "Удаление помеченных объектов" виснет на контроле на сутки. Написал свою обработку. Функция НайтиПомеченныеНаУдаление работает очень хорошо. Все объекты она нашла за 40 секунд. А вот функции НайтиПоСсылкам или Удалить объекты работают крайне медленно. Я им подсовываю по одному документу, чтобы хоть как-то контролировать процесс. Других вариантов у 1С не нашел.
Господа форумчане! Прошу поделитесь пожалуйста своим опытом по работе с данными функциями или альтернативным решением.(Просьба решения с нарушением логической целостности не предлагать).
Неужели нет способа проверить есть ли ссылки на документ без получения этих дурацких таблиц ссылок?
---
Да за 5 секунд можно по всем метаданным пролазитьНу и лазь тогда, что ты нас спрашиваешь?
---
Пытался сделать быстрые альтернативы для НайтиПоСсылкам, но практика показала, что платформенный НайтиПоСсылкам будет быстрее и дотошнее.
---
Может есть варианты? Может подсовывать туда не по одному документу, а десяток или сотню? Может будет быстрее обрабатывать?
---
Думаю, будет быстрее. НайтиПоСсылкам же Массив требует.
Но допустим всё работает быстро, как вы будете разруливать конфликты удаления? Что делать с объектами или записями в регистрах при наличии ссылки на удаляемый объект?
Хотя тема не про НайтиПоСсылкам, всё-таки, а про УдалитьОбъекты. Она же выдаст ссылки, которые содержат удаляемый объект при включении контроля целостности.
---
С конфликтами можно будет потом разобраться. Главное убрать основную массу помеченных. Забыл написать, что документы все пустые - специально зачистил, чтобы не было ссылок между ними. Движений соответственно тоже нет. Все делается быстро, кроме удаления - 30 секунд на 1 документ - это мой массив документов будет удаляться месяц!!!
---
Хорошо, вызвали УдалитьОбъекты для одного документа с включенным параметром "Проверять". В итоге документ удалился?
---
Ну у меня это дело идет в цикле. Что-то удаляется, что-то нет. Мне бы понять может он и на 100 документов будет 30 секунд тратить? Я в НайтиПоСсылкам как-то организацию засунул (на не чищенной базе) - функция пахала сутки, а потом мне надоело. Так от чего ее время критично зависит?
От количества в массиве или количества ссылок?
---
Поиск ссылок на документ и Организацию – две большие разницы. Организация присутствует почти везде, поэтому поиск всех объектов, содержащих организацию, намного дольше, чем поиск ссылок на документ.
Но я вот чего не могу понять: какой смысл бороться с долгим поиском ссылок, если УдалитьОбъекты всё равно не даст удалить документ, на который кто-то ссылается. Я ведь поэтому и спросил про разруливание конфликтов. Какой смысл ждать несколько дней, чтобы просто получить ответ о невозможности удалить какие-либо объекты из-за контроля ссылочной целостности? Сразу необходимо решить, что делать с объектами, содержащими удаляемый документ.

Я бы на вашем месте удалил документы без контроля ссылочной целостности, а потом через ТиИ очистил был битые ссылки.
---
Метод не плох, но ТиИ потрет документы ввода остатков, если в них есть ссылки, а мне этого не надо. Задача простая - если есть ссылки на документ - пусть остается, если нет - удаляем.
---
если есть ссылки на документ - пусть остается, если нет - удаляем Тогда лучше, действительно сделать свой алгоритм, по типу того, как сказано в (19), так как поиск всех ссылок на удаляемый объект вам не нужен.
---
В базе УТ 10 обычные формы (естественно) файловая размером 5 ГБ накопилось очень много помеченных на удаление документов - порядка 200 000. Стандартное "Удаление помеченных объектов" виснет на контроле на сутки
Сделать тестовую, оставить удаление на неделю, проанализировать. Загрузить в постгрес и запустить там, проанализировать. 5 гб ни о чем, щас БП 3.0 постая под 2 гб весит, типовухой все решается, действие одноразовое, не благодарно под него писать.
Ну и плюс - оборудование видать херовое, 200 000 это ни о чем, если ссд, м2, памяти 16+ и хотя-бы i-5 нечему тормозить
---
железо действительно старое, но очень надежное. Да и памяти 4 Гб. Но напрягов на железо нет. Проц жрется максимум на 50%, и памяти кушает всего 88Мб. Это я все на тестовой и пробую. И нет у меня недели. Как буду готов дадут базу на 2 суток. В пятницу возьму, а в понедельник все уже должны работать. Но с такими скоростями функции, я думаю - недели не хватит. Прикинул - оптимально.по 50 документов за раз - где-то 6 секунд на документ (при увеличении это соотношение не растет), а их 200000. 200000*6/60/60/24 получаем 13 с небольшим дней. При том, что на свертку и очистку всех этих документов ушло 10 часов на моем старом железе. Вот и скорость удаления документов.
Что реально нет никаких альтернатив этим функциям? Да за 5 секунд можно по всем метаданным пролазить.
---
Да за 5 секунд можно по всем метаданным пролазитьНу и лазь тогда, что ты нас спрашиваешь?
---
Ну я и спрашиваю - поделитесь пожалуйста опытом, может есть альтернатива этим тормозам.
Ведь просто удалить без учета ссылок думаю хватит пары часов. Вся заковырка в поиске ссылок.
---
Натолкнули меня на замечательную идею. Главное чтобы остались ссылки в документах ввода остатков, а остальные ссылки все равно удалять надо будет.
---
базу в sql, получить список для удаления через НайтиПомеченныеНаУдаление, поделить например на 10 частей (получится 20к в порции) и каждую через фоновое задание, или через отдельный процесс 1с
+ на время арендовать сервер например у клиентов, или игровой комп у клиентов,знакомых, родственников. Я обычно тяжеловесные процедуры запускаю по ночам у одного из своих клиентов (ryzen 3900x/64 озу/2x256 nvme)
---
Думаете дело в железе? Ну естественно с живой базой я буду работать на другом компе. Просто перед тем как сюда написать, я пол интернета пролазил - на многих форумах пишут, что работа этих функций просто жутко медленная.На многих даже поясняется, что 1с при работе делает огромные таблицы для этих функций сравнивает их и выдает результат в результат функций. Вот и ищу способ или как то их ускорить или вообще обойтись без без этих функций. Ведь для того, чтобы не удалять документ - нужно найти всего 1 ссылку, а не целую таблицу!
Проще говоря, я ищу решение, которое будет приемлемо работать на любом компьютере! Поделитесь опытом, кто решал подобные задачи.
---
нужно найти всего 1 ссылку Но для этого может потребоваться перелопатить сотню таблиц... И лучше сразу получить результат по всем таблицам, чтобы в цикле не лопатить их заново. Логика такая.
Можно было бы вариативно придумать настройку, чтобы искать поочередно в каждой таблице, и при первом нахождении останавливать поиск. Чтобы пользователь сам решал.
Кстати, интересная алгоритмическая задача...
---
Как идея, насчет того, чтобы отыскать все места по типу документа. А потом для каждого искать в этих местах? Может быстрее получиться? Или это будет повторение подхода 1с с большой таблицей?
---
Поэкспериментировал немного с УдалитьОбъекты. Средние показатели количество документов в секундах:
1 - 35 10 - 85 20 - 125 50 - 240 100 - 465
Последовательность несколько нелинейная. Подозреваю, что все-таки все зависит от количества ссылок, получаемых функцией.
Даже в БСП есть функция ЕстьСсылкиНаОбъект, где применяется НайтиПоСсылкам с ее тормозами.
---
постгресMSSQL.
Экспресс сейчас 10 гб переваривает.
---
Не думаю, что сильно работу ускорит. Если только у SQL есть другие функции по удалению.
---
Вот дела. Есть и другие ссылки
---
Это из ситаксис- помошника. И что замечательно - это пример. Никто не хочет свой компьютер на мощность проверить? Интересно сколько времени займет, к примеру, удаление 1 организации?
---
Я вроде умею и сам пользоваться СП, спасибо огромное.
---
Ну к примеру я там нигде не нашел, что требуется Монопольный режим, а он требуется!
Вот пример кода

```1c
    ТабСсылок = 0;
    сбСообщениеСвертки("Время начало:",Истина);
    ВремяНачала = ТекущаяДата();
    УстановитьМонопольныйРежим(Истина);
    УдалитьОбъекты(МассивУдаляемого,Истина,ТабСсылок);
    УстановитьМонопольныйРежим(Ложь);
    сбСообщениеСвертки("Время окончания:",Истина);
    Сообщить("Время выполнения "+(ТекущаяДата() - ВремяНачала));
```
---
я там нигде не нашел, что требуется Монопольный режим, а он требуется!А ты вообще сам-то читал, что в (21) сюда накопипастил?
---
Никто не хочет свой компьютер на мощность проверить? ИнтересноА что ты собираешься делать с полученными цифрами - расстраиваться еще сильнее, что у тебя всё медленно? Ну так для этого тебе чужие замеры, собственно, и не нужны.
---
Да нет. Это собственно мой сарказм по поводу синтаксис-помошника.
И если кого-то интересуют мои эксперименты с УдалитьОбъекты, то выводы следующие - в массив лучше выдавать порцию в 50 элементов - дальше скорость в пересчете на 1 элемент не растет.
---
Добавочно по экспериментам. Если в массив попадают элементы без ссылок, скорость возрастает. Значит все зависит от результирующей таблицы! Сейчас скорость возросла до 50 -175 секунд.
---
Добавочно. Функция УдалитьОбъекты тормозит даже когда запускается без проверки ссылочной целостности. Зачем вообще придумали такую нелепость?
О своей проблеме - сделал цикл с обходом по метаданным. Работает во много раз быстрее. Все 200 000 документов удалось удалить за 6 часов без нарушения ссылочной целостности.
---
Показали бы свой код, чтобы народ не пользовался нелепостью.
---
А самим додуматься сложно? Я же пояснил - Цикл по метаданным с условием по типу. (В моем случае - это регистры, документы, справочники). Если есть такой тип в метаданных (к примеру в измерениях регистра) делаем по ним запрос с условием по ссылке, если в запросе не пусто, значит есть ссылка - возвращаем истину, если после пробега ничего не нашли - возвращаем ложь. Если ложь - удаляем, если истина - пропускаем. Работает намного быстрее, чем УдалитьОбъекты.