Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=8935)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Платформа 7.7 _ Удаление помеченных объектов и внешних ссылок на них

Автор: Vofka 13.09.12, 13:20

Позвонил мне только что друг один и задал вопрос:
Есть куча помеченных на удаление объектов, но удалить их нельзя, т.к. на них есть куча ссылок. Можно ли как-то удалить все эти объекты вместе с внешними ссылками в автоматическом режиме (т.е. чтоб не заходить и не удалять руками все внешние ссылки, потому что их очень много)?

Может это есть в платформе либо какие-то готовые внешние обработки?

Автор: alex040269 13.09.12, 14:31

Ну как? Есть такая фишка, как НайтиПоСсылкам, кажется.
так вот я когда-то пробовал. На найденные объекты - тоже потом есть ссылки и т.д.
В общем у меня снеслось процентов 90 базы!!!

Автор: Vofka 13.09.12, 14:54

Цитата(alex040269 @ 13.09.12, 15:31) *
Есть такая фишка, как НайтиПоСсылкам

Ссылки находит, но их же руками каждую нужно пометить на удаление, не?

Автор: sava1 13.09.12, 14:57

Удалить(1), потом в тестировани/исправление прибить левые ссылки
хотя полностью корректно не выйдет (да и по времени хз)

Автор: alex040269 13.09.12, 14:58

Соврал smile.gif

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

Автор: Vofka 13.09.12, 15:08

Цитата(sava1 @ 13.09.12, 15:57) http://pro1c.org.ua/index.php?act=findpost&pid=56275
НайтиПомеченныеНаУдаление

Это все хорошо, но найдет система все помеченные на удаление объекты. Но оно их и так находит при "Удаление помеченных объектов". Проблема в том, что на них много не помеченных на удаление ссылок и вручную их все чистить сильно долго.

Автор: sava1 13.09.12, 15:12

Цитата(Vofka @ 13.09.12, 16:08) *
Все такие ссылки одним кликом можно убить?

Точно не помню - спрашивает типа Восстановить? Создать? (в-общем надо пробовать)

Автор: alex040269 13.09.12, 15:25

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


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

Автор: Vofka 13.09.12, 20:22

Всем спасибо, попробую поиграться с этим всем.

ЗЫ. забыл 7.7 уже faceoff.gif

Автор: mister-x 13.09.12, 20:28

Цитата(alex040269 @ 13.09.12, 15:31) *
В общем у меня снеслось процентов 90 базы!!!

тобто, разом із не потрібним знеслось і потрібне?

Автор: alex040269 13.09.12, 20:57

ну да. правда копия была smile.gif

Автор: mister-x 13.09.12, 21:14

мда, не надійна річ

Автор: MATEVI 13.09.12, 21:50

Цитата(Vofka @ 13.09.12, 21:22) *
Всем спасибо, попробую поиграться с этим всем.

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

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


ЗЫ Мне кажется может стоит подумать об обрезке базы. Или о переносе данных. (хотя это наверное не меньший гемор)

Автор: Vofka 14.09.12, 8:19

Та там база самописная, насколько я знаю, и там не ведется не бух учет не оперативный учет, заточена она под одну тему. Собственно сам кент вменяемый и последствия такой чистки понимает.

Автор: igmig65 14.09.12, 11:03

Тупа поудалять ссылки нельзя, если база самописаная, нет движений по счетам и по регистрам, то я так понимаю все движения в документах. Соответственно возможно у документа или справочника помеченного могут быть ссылки на другие документы/справочники, а их то удалять может нельзя. Делал когдато такое, тоесть чистил, корректировал ссылки. Находил ссылки на помеченные и менял значения этих ссылок по возможности. Но понятно что это все индивидуально. Нужно знать структуру базы. После этого большинство объектов удалил.

Автор: Vofka 25.09.12, 15:44

MATEVI, ещё раз вам спасибо за код! Только что почистил базу, пусть смотрят что получилось smile.gif . Только вы немножко опечатались: вместо

ТабЗн.Свернуть("Объект","");

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

Ну и ниже по тексту, соответственно smile.gif .
icon_beer17.gif

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua