Имя: Пароль:
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 записей, может хватит.

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