Имя: Пароль:
1C
1С v8
Получится так удалить организацию из базы?
0 SweetaAngel
 
01.04.17
10:33
Надо удалить несколько организаций из базы.

Допустим будет код

МассивСсылк = Новый массив;
    
МассивСсылк.Добавить(Справочники.Организации.НайтиПоКоду("000000001"));
МассивСсылк.Добавить(Справочники.Организации.НайтиПоКоду("000000001"));

УдалитьОбъекты(МассивСсылк,Ложь);

А дальше тестирование с галочками очищать ссылки, удалть объекты.

Получтся?

Или может еще какой варинат?
1 RomanYS
 
01.04.17
10:36
Что-то определенно получится. Каша в журналах получится. А формально организации будут удалены.
2 SweetaAngel
 
01.04.17
10:37
(1) А документы в которых будет ошибочный объект?
3 RomanYS
 
01.04.17
10:42
(2) в них ТИИ заменит битую ссылку на пустую. Документы останутся, вместе с проводками.
4 SweetaAngel
 
01.04.17
10:47
(3) А что насчет движений в регистрах. Они то проавдут?
5 RomanYS
 
01.04.17
10:50
Держи
https://cloud.mail.ru/public/L87s/GYV7KEpUu

только рассматривай это как пример кода, а не как рабочий инструмент. Писалось для КА1.1, но в целом там универсально.

(4) Движения регистров я и называю проводками.
6 SweetaAngel
 
01.04.17
17:59
(5)

Так и я умею:
Процедура КнопкаСформироватьНажатие(Кнопка)
    // Вставить содержимое обработчика.
    
    МассивСсылк = Новый массив;
    спОрганизаций = Новый СписокЗначений;
    спОрганизаций.Добавить(Справочники.Организации.НайтиПоКоду("000000002"));
    спОрганизаций.Добавить(Справочники.Организации.НайтиПоКоду("000000004"));
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("спОрганизаций",спОрганизаций);
    ЗапросТекст = "ВЫБРАТЬ
    |    АвансовыйОтчет.Ссылка
    |ИЗ
    |    Документ.АвансовыйОтчет КАК АвансовыйОтчет
    |ГДЕ
    |    АвансовыйОтчет.Организация В(&спОрганизаций)";
    
    НПП = 0;
    КолВо = Метаданные.Документы.Количество();
    Для Каждого ТекДок из Метаданные.Документы Цикл
        НПП = НПП + 1;
        
        
        Сообщить("Обработано: "+НПП + " из " +КолВо +" "+СокрЛП(Строка(ТЕкДок.Имя)));
        
        ХХХ =  ТЕкДок.РЕквизиты.Найти("организация");
        Если  ХХХ <> Неопределено  ТОгда
            Запрос.Текст = СтрЗаменить(ЗапросТекст,"Документ.АвансовыйОтчет КАК АвансовыйОтчет","Документ."+СокрЛП(Строка(ТЕкДок.Имя))+" КАК АвансовыйОтчет");
            МассивСсылк.Очистить();
            тз = Запрос.Выполнить().Выгрузить();
            Для каждого стрТз из тз Цикл
                МассивСсылк.Добавить( стрТз.Ссылка);
            КонецЦикла;
            Сообщить("Колво ссылок:"+МассивСсылк.Количество());
            УдалитьОбъекты(МассивСсылк,Ложь)
            КонецЕсли;
    КонецЦИкла;
    
Но есть документы в которых 26 000 записей и при удалении выходит ошибка: "не хватате памяти".
7 Фрэнки
 
01.04.17
18:01
(6) лучше бы там писалось "не хватает мозгов"
8 Serg_1960
 
01.04.17
18:03
Ветка Первого апреля? Зачёт.
9 RomanYS
 
01.04.17
18:25
(6) ну попробуй удалить 25999 записей, может хватит.

Для ускорения надо ещё выключать итоги, очистка движений может идти на порядок быстрее.