Так уж вышло, что 2 компании вели учет в одной базе более 5 лет. Недавно компании решили окончательно разделиться и стал вопрос о разделении баз 1С (бухгалтерская стандартная доработанная и самописная для страхового учета). Решили просто отдать копии баз второй компании, а в процессе поудалять из баз лишние объекты.
Вот тут начались поиски соответствующих обработок. Смотрели и ИТС и различные самописные и не очень обработки, но найти ничего не смогли: некоторые вываливались в ошибку, так как писались под конкретную конфу, некоторые отбирали не все данные, а та, которая запустилась и начала работать, за день работы выбрала только 1-й уровень объектов со ссылками, а вот дальше у меня просто не хватило терпения и обработку пришлось закрыть.
В результате сел и написал сам. В отличие от стандартной обработки, моя не ведет поиск через Метаданные......Найти. Перед запуском обработка анализирует конфигурацию, после этого ищет необходимые данные исключительно в тех полях объектов, которые могут содержать значение искомого типа. Основа обработки - это динамически составляемые запросы.
Обработка содержит 3 основных шага:
1) выборка данных. Рекомендую залезть в код и раскомментить типы данных, которые есть у вас в конфе и закомментить ненужное. Выборка не делает никаких изменений в базе. После выборки результат можно выгрузить в mdb, который затем можно быстренько импортнуть в MSSQL для анализа. MS Access в этом процессе не используется, все делается с помощью ADO. Если ссылок немного, то можно использовать и Access;
2) удаление независимых регистров. Понятно, что записи удаляются безвозвратно. Этот шаг рекомендую делать, если вы твердо уверены, что в выборку не попали лишние ссылки. Попасть они могут только в том случае, если в них содержатся ссылки на удаляемые объекты.
3) отмена проведения документов и пометка удаления. Здесь тоже рекомендую залезть в код и добавить обработку отмены проведения для необходимых документов. Например в моей конфе нельзя отменить проведение некоторых документов без изменения статуса документа. Закомментированный код оставил. Так же рекомендуется в коде назначить очередность типов документов. В моей базе есть документы, которые нельзя сделать непроведенными, пока они содержат ссылки на проведенные документы другого типа.
А теперь о производительности. Моя страховая база имеет в себе более 1 млн. объектов, принадлежащих одной из организаций. Выборка примерно 660 тыс. обектов одной из организаций заняла около 50 минут. Можете сами попробовать на своей базе сделать выборку по организации и посмотреть, за какое время обработка выберет все данные. Шаг 1 не делает никаких изменений в данных.
Есть у обработки и ограничения, которые касаются исключительно платформы. Если очень много ссылок, сама 1С может вылетать с сообщением "Недостаточно памяти". К сожалению, это ограничение для 32-битных приложений. Если у Вас 4 и больше гиг памяти и х64 операционная система, можете выполнить то, что описано здесь //infostart.ru/public/147631/ . Мне помогло, но пришлось еще сидеть и оптимизировать саму обработку.