Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Удаление помеченных объектов и внешних ссылок на них
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Пользователю 1С 7.7 > Платформа 7.7
Vofka
Позвонил мне только что друг один и задал вопрос:
Есть куча помеченных на удаление объектов, но удалить их нельзя, т.к. на них есть куча ссылок. Можно ли как-то удалить все эти объекты вместе с внешними ссылками в автоматическом режиме (т.е. чтоб не заходить и не удалять руками все внешние ссылки, потому что их очень много)?

Может это есть в платформе либо какие-то готовые внешние обработки?
alex040269
Ну как? Есть такая фишка, как НайтиПоСсылкам, кажется.
так вот я когда-то пробовал. На найденные объекты - тоже потом есть ссылки и т.д.
В общем у меня снеслось процентов 90 базы!!!
Vofka
Цитата(alex040269 @ 13.09.12, 15:31) необходимо зарегистрироваться для просмотра ссылки
Есть такая фишка, как НайтиПоСсылкам

Ссылки находит, но их же руками каждую нужно пометить на удаление, не?
sava1
Удалить(1), потом в тестировани/исправление прибить левые ссылки
хотя полностью корректно не выйдет (да и по времени хз)
alex040269
Соврал smile.gif

НайтиПомеченныеНаУдаление(<?>);
Синтаксис:
НайтиПомеченныеНаУдаление(<Объекты>)
Назначение:
Находит все помеченные на удаление объекты.
Параметры:
<Объекты> - идентификатор объекта типа ''СписокЗначений'', в который данная процедура помещает найденные объекты.
Vofka
Цитата(sava1 @ 13.09.12, 15:57) необходимо зарегистрироваться для просмотра ссылки
потом в тестировани/исправление прибить левые ссылки

Все такие ссылки одним кликом можно убить?

Цитата(alex040269 @ 13.09.12, 15:58) необходимо зарегистрироваться для просмотра ссылки
НайтиПомеченныеНаУдаление

Это все хорошо, но найдет система все помеченные на удаление объекты. Но оно их и так находит при "Удаление помеченных объектов". Проблема в том, что на них много не помеченных на удаление ссылок и вручную их все чистить сильно долго.
sava1
Цитата(Vofka @ 13.09.12, 16:08) необходимо зарегистрироваться для просмотра ссылки
Все такие ссылки одним кликом можно убить?

Точно не помню - спрашивает типа Восстановить? Создать? (в-общем надо пробовать)
alex040269
Цитата(Vofka @ 13.09.12, 16:08) необходимо зарегистрироваться для просмотра ссылки
Это все хорошо, но найдет система все помеченные на удаление объекты. Но оно их и так находит при "Удаление помеченных объектов". Проблема в том, что на них много не помеченных на удаление ссылок и вручную их все чистить сильно долго.


НайтиСсылки(<?>,);
Синтаксис:
НайтиСсылки(<Объекты>,<Ссылки>)
Назначение:
Находит ссылки на объекты, переданные в списке значений.
Параметры:
<Объекты> - конкретное значение искомого объекта или значение типа ''СписокЗначений'', в котором данной процедуре передаются объекты, по которым надо найти ссылки.
<Ссылки> - идентификатор объекта типа ''ТаблицаЗначений'', в который данная процедура помещает найденные ссылки на объекты. Таблица значений состоит из 3 колонок: 1. объект на который ссылаются; 2. объект, который содержит ссылку; 3. комментарий к ссылке.
Vofka
Всем спасибо, попробую поиграться с этим всем.

ЗЫ. забыл 7.7 уже faceoff.gif
mister-x
Цитата(alex040269 @ 13.09.12, 15:31) необходимо зарегистрироваться для просмотра ссылки
В общем у меня снеслось процентов 90 базы!!!

тобто, разом із не потрібним знеслось і потрібне?
alex040269
ну да. правда копия была smile.gif
mister-x
мда, не надійна річ
MATEVI
Цитата(Vofka @ 13.09.12, 21:22) необходимо зарегистрироваться для просмотра ссылки
Всем спасибо, попробую поиграться с этим всем.

Никогда такое не делал. Поигрался. Но это как воду в решете носить smile.gif
Плюс возможно цифры поплывут если, например, что то "помеченое" выбрано в проведеном документе.
В принципе можно проверять если проведенный документ то пропускать. И наверное проверку на удаленность объектов еще добавить.

//примерный код, тренеруемся на копии
Перем СпЗн, ТабЗн;
НачатьТранзакцию();
Сообщить("Выполняется поиск...");
НайтиПомеченныеНаУдаление(СпЗн);
НайтиСсылки(СпЗн,ТабЗн);
ТабЗн.Свернуть("Объект","");
ТабЗн.ВыбратьСтроки();
Пока ТабЗн.ПолучитьСтроку()=1 Цикл
    ВидОб = ТабЗн.Объект.Вид();
    Если ТипЗначения(ТабЗн.Объект)=11 Тогда
        Об=СоздатьОбъект("Справочник."+ВидОб);
        Если Об.НайтиЭлемент(ТабЗн.Объект)=1 Тогда
            Об.Удалить(0);
            Сообщить("Установлена пометка: "+Об);
        КонецЕсли;    
    ИначеЕсли ТипЗначения(ТабЗн.Объект)=12 Тогда
        Об=СоздатьОбъект("Документ."+ВидОб);
        Если Об.НайтиДокумент(ТабЗн.Объект)=1 Тогда
            Об.Удалить(0);
            Сообщить("Установлена пометка: "+Об);
            // стремный справочник партии...
            Парт=СоздатьОбъект("Справочник.Партии");
            Если Парт.НайтиПоРеквизиту("Док",ТабЗн.Объект,1)=1 Тогда
                Парт.Удалить(0);
                Сообщить("Установлена пометка: "+Парт);    
            КонецЕсли;
        КонецЕсли;        
    Иначе
        Сообщить("Тип объекта "+ ТипЗначения(ТабЗн.Объект));  //хз
    КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();


ЗЫ Мне кажется может стоит подумать об обрезке базы. Или о переносе данных. (хотя это наверное не меньший гемор)
Vofka
Та там база самописная, насколько я знаю, и там не ведется не бух учет не оперативный учет, заточена она под одну тему. Собственно сам кент вменяемый и последствия такой чистки понимает.
igmig65
Тупа поудалять ссылки нельзя, если база самописаная, нет движений по счетам и по регистрам, то я так понимаю все движения в документах. Соответственно возможно у документа или справочника помеченного могут быть ссылки на другие документы/справочники, а их то удалять может нельзя. Делал когдато такое, тоесть чистил, корректировал ссылки. Находил ссылки на помеченные и менял значения этих ссылок по возможности. Но понятно что это все индивидуально. Нужно знать структуру базы. После этого большинство объектов удалил.
Vofka
MATEVI, ещё раз вам спасибо за код! Только что почистил базу, пусть смотрят что получилось smile.gif . Только вы немножко опечатались: вместо
ТабЗн.Свернуть("Объект","");

надо
ТабЗн.Свернуть("Ссылка","");

Ну и ниже по тексту, соответственно smile.gif .
icon_beer17.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.