Группа: Основатель
Сообщений: 13982
Из: Киев
Спасибо сказали: 4549 раз
Рейтинг: 3678.1
Позвонил мне только что друг один и задал вопрос: Есть куча помеченных на удаление объектов, но удалить их нельзя, т.к. на них есть куча ссылок. Можно ли как-то удалить все эти объекты вместе с внешними ссылками в автоматическом режиме (т.е. чтоб не заходить и не удалять руками все внешние ссылки, потому что их очень много)?
Может это есть в платформе либо какие-то готовые внешние обработки?
Ну как? Есть такая фишка, как НайтиПоСсылкам, кажется. так вот я когда-то пробовал. На найденные объекты - тоже потом есть ссылки и т.д. В общем у меня снеслось процентов 90 базы!!!
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник. ЗиУП
НайтиПомеченныеНаУдаление(<?>); Синтаксис: НайтиПомеченныеНаУдаление(<Объекты>) Назначение: Находит все помеченные на удаление объекты. Параметры: <Объекты> - идентификатор объекта типа ''СписокЗначений'', в который данная процедура помещает найденные объекты.
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник. ЗиУП
Группа: Основатель
Сообщений: 13982
Из: Киев
Спасибо сказали: 4549 раз
Рейтинг: 3678.1
Цитата(sava1 @ 13.09.12, 15:57)
потом в тестировани/исправление прибить левые ссылки
Все такие ссылки одним кликом можно убить?
Цитата(alex040269 @ 13.09.12, 15:58)
НайтиПомеченныеНаУдаление
Это все хорошо, но найдет система все помеченные на удаление объекты. Но оно их и так находит при "Удаление помеченных объектов". Проблема в том, что на них много не помеченных на удаление ссылок и вручную их все чистить сильно долго.
Это все хорошо, но найдет система все помеченные на удаление объекты. Но оно их и так находит при "Удаление помеченных объектов". Проблема в том, что на них много не помеченных на удаление ссылок и вручную их все чистить сильно долго.
НайтиСсылки(<?>,); Синтаксис: НайтиСсылки(<Объекты>,<Ссылки>) Назначение: Находит ссылки на объекты, переданные в списке значений. Параметры: <Объекты> - конкретное значение искомого объекта или значение типа ''СписокЗначений'', в котором данной процедуре передаются объекты, по которым надо найти ссылки. <Ссылки> - идентификатор объекта типа ''ТаблицаЗначений'', в который данная процедура помещает найденные ссылки на объекты. Таблица значений состоит из 3 колонок: 1. объект на который ссылаются; 2. объект, который содержит ссылку; 3. комментарий к ссылке.
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник. ЗиУП
Никогда такое не делал. Поигрался. Но это как воду в решете носить Плюс возможно цифры поплывут если, например, что то "помеченое" выбрано в проведеном документе. В принципе можно проверять если проведенный документ то пропускать. И наверное проверку на удаленность объектов еще добавить.
//примерный код, тренеруемся на копии Перем СпЗн, ТабЗн; НачатьТранзакцию(); Сообщить("Выполняется поиск..."); НайтиПомеченныеНаУдаление(СпЗн); НайтиСсылки(СпЗн,ТабЗн); ТабЗн.Свернуть("Объект",""); ТабЗн.ВыбратьСтроки(); Пока ТабЗн.ПолучитьСтроку()=1 Цикл ВидОб = ТабЗн.Объект.Вид(); Если ТипЗначения(ТабЗн.Объект)=11 Тогда Об=СоздатьОбъект("Справочник."+ВидОб); Если Об.НайтиЭлемент(ТабЗн.Объект)=1 Тогда Об.Удалить(0); Сообщить("Установлена пометка: "+Об); КонецЕсли; ИначеЕсли ТипЗначения(ТабЗн.Объект)=12 Тогда Об=СоздатьОбъект("Документ."+ВидОб); Если Об.НайтиДокумент(ТабЗн.Объект)=1 Тогда Об.Удалить(0); Сообщить("Установлена пометка: "+Об); // стремный справочник партии... Парт=СоздатьОбъект("Справочник.Партии"); Если Парт.НайтиПоРеквизиту("Док",ТабЗн.Объект,1)=1 Тогда Парт.Удалить(0); Сообщить("Установлена пометка: "+Парт); КонецЕсли; КонецЕсли; Иначе Сообщить("Тип объекта "+ ТипЗначения(ТабЗн.Объект)); //хз КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию();
ЗЫ Мне кажется может стоит подумать об обрезке базы. Или о переносе данных. (хотя это наверное не меньший гемор)
Группа: Основатель
Сообщений: 13982
Из: Киев
Спасибо сказали: 4549 раз
Рейтинг: 3678.1
Та там база самописная, насколько я знаю, и там не ведется не бух учет не оперативный учет, заточена она под одну тему. Собственно сам кент вменяемый и последствия такой чистки понимает.
Тупа поудалять ссылки нельзя, если база самописаная, нет движений по счетам и по регистрам, то я так понимаю все движения в документах. Соответственно возможно у документа или справочника помеченного могут быть ссылки на другие документы/справочники, а их то удалять может нельзя. Делал когдато такое, тоесть чистил, корректировал ссылки. Находил ссылки на помеченные и менял значения этих ссылок по возможности. Но понятно что это все индивидуально. Нужно знать структуру базы. После этого большинство объектов удалил.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!