Позвонил мне только что друг один и задал вопрос:
Есть куча помеченных на удаление объектов, но удалить их нельзя, т.к. на них есть куча ссылок. Можно ли как-то удалить все эти объекты вместе с внешними ссылками в автоматическом режиме (т.е. чтоб не заходить и не удалять руками все внешние ссылки, потому что их очень много)?
Может это есть в платформе либо какие-то готовые внешние обработки?
Ну как? Есть такая фишка, как НайтиПоСсылкам, кажется.
так вот я когда-то пробовал. На найденные объекты - тоже потом есть ссылки и т.д.
В общем у меня снеслось процентов 90 базы!!!
Удалить(1), потом в тестировани/исправление прибить левые ссылки
хотя полностью корректно не выйдет (да и по времени хз)
Соврал
НайтиПомеченныеНаУдаление(<?>);
Синтаксис:
НайтиПомеченныеНаУдаление(<Объекты>)
Назначение:
Находит все помеченные на удаление объекты.
Параметры:
<Объекты> - идентификатор объекта типа ''СписокЗначений'', в который данная процедура помещает найденные объекты.
Всем спасибо, попробую поиграться с этим всем.
ЗЫ. забыл 7.7 уже
ну да. правда копия была
мда, не надійна річ
//примерный код, тренеруемся на копии
Перем СпЗн, ТабЗн;
НачатьТранзакцию();
Сообщить("Выполняется поиск...");
НайтиПомеченныеНаУдаление(СпЗн);
НайтиСсылки(СпЗн,ТабЗн);
ТабЗн.Свернуть("Объект","");
ТабЗн.ВыбратьСтроки();
Пока ТабЗн.ПолучитьСтроку()=1 Цикл
ВидОб = ТабЗн.Объект.Вид();
Если ТипЗначения(ТабЗн.Объект)=11 Тогда
Об=СоздатьОбъект("Справочник."+ВидОб);
Если Об.НайтиЭлемент(ТабЗн.Объект)=1 Тогда
Об.Удалить(0);
Сообщить("Установлена пометка: "+Об);
КонецЕсли;
ИначеЕсли ТипЗначения(ТабЗн.Объект)=12 Тогда
Об=СоздатьОбъект("Документ."+ВидОб);
Если Об.НайтиДокумент(ТабЗн.Объект)=1 Тогда
Об.Удалить(0);
Сообщить("Установлена пометка: "+Об);
// стремный справочник партии...
Парт=СоздатьОбъект("Справочник.Партии");
Если Парт.НайтиПоРеквизиту("Док",ТабЗн.Объект,1)=1 Тогда
Парт.Удалить(0);
Сообщить("Установлена пометка: "+Парт);
КонецЕсли;
КонецЕсли;
Иначе
Сообщить("Тип объекта "+ ТипЗначения(ТабЗн.Объект)); //хз
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
Та там база самописная, насколько я знаю, и там не ведется не бух учет не оперативный учет, заточена она под одну тему. Собственно сам кент вменяемый и последствия такой чистки понимает.
Тупа поудалять ссылки нельзя, если база самописаная, нет движений по счетам и по регистрам, то я так понимаю все движения в документах. Соответственно возможно у документа или справочника помеченного могут быть ссылки на другие документы/справочники, а их то удалять может нельзя. Делал когдато такое, тоесть чистил, корректировал ссылки. Находил ссылки на помеченные и менял значения этих ссылок по возможности. Но понятно что это все индивидуально. Нужно знать структуру базы. После этого большинство объектов удалил.
MATEVI, ещё раз вам спасибо за код! Только что почистил базу, пусть смотрят что получилось . Только вы немножко опечатались: вместо
ТабЗн.Свернуть("Объект","");
ТабЗн.Свернуть("Ссылка","");
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua