Имя: Пароль:
1C
 
Как почистить регистр сведений.
0 Zombi
 
21.01.16
09:11
Удаляю из базы организацию, данных очень много, а сервер слабенький. В базе много записей в регистре "Версии объектов". Как оптимальнее удалить из этого регистра записи с документами по моей организации?
1 ДенисЧ
 
21.01.16
09:12
Перебрать всё, получать каждый объект, проверять организацию. При необходимости удалять
2 asady
 
21.01.16
09:16
(1)+ делать это в транзакции по 100-1000 записей.
3 Prince-Sentido
 
21.01.16
09:40
несколько потоков
4 mikecool
 
21.01.16
09:41
(2) транзакции еще актуальны?
5 mikecool
 
21.01.16
09:42
набор записей + отбор по организации, Записать()
6 ДенисЧ
 
21.01.16
09:43
(5) Откуда в версиях организации?
7 mikecool
 
21.01.16
09:44
(6) я стратег, остальное не мое )))
8 Zombi
 
21.01.16
09:46
Делаю так:

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ВерсииОбъектов.Объект
                   |ИЗ
                   |    РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов";
                  
    Выборка = Запрос.Выполнить().Выбрать();
    
    Организация = Справочники.Организации.НайтиПоКоду("000000010");
    НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей();
    
    Пока Выборка.Следующий() Цикл
        
        УдаляемыйОбъект = Выборка.Объект;
        
        Если (Не Справочники.ТипВсеСсылки().СодержитТип(ТипЗНЧ(УдаляемыйОбъект)))
            И УдаляемыйОбъект.Метаданные().Реквизиты.Найти("Организация") <> Неопределено
            И УдаляемыйОбъект.Организация = Организация Тогда
            
            НаборЗаписей.Отбор.Объект.Установить(УдаляемыйОбъект);
            НаборЗаписей.Записать();
            
            Сообщить("Обработал " + УдаляемыйОбъект);
            
        КонецЕсли;

    КонецЦикла; //Пока    


А можно как то отбор задавать и удалять не по одной строке а по 100, например?
9 User_Agronom
 
21.01.16
09:53
(6) Там объект есть. А у объекта иногда бывает поле "Организация"
С распаковкой очень долго получится.
10 Zombi
 
21.01.16
09:59
(9) Расскажи, как не сильно нагружая сервер отобрать записи регистра с нужной организацией?
11 User_Agronom
 
21.01.16
10:03
Запросом, не?
12 ДенисЧ
 
21.01.16
10:08
(11) Научи нас, сущеглупых, как запросом из хранилища значения данные получать...
13 User_Agronom
 
21.01.16
10:10
(12) Ты серьёзно или это жалкая попытка потролить?
14 ДенисЧ
 
21.01.16
10:10
(13) Абсолютно серьёзно
15 vicof
 
21.01.16
10:11
(13) Не такая уж и жалкая, раз не можешь определить)
16 xxTANATORxx
 
21.01.16
10:14
(8)вот это вот в запрос можно перенести

Если (Не Справочники.ТипВсеСсылки().СодержитТип(ТипЗНЧ(УдаляемыйОбъект)))
            И УдаляемыйОбъект.Метаданные().Реквизиты.Найти("Организация") <> Неопределено

            И УдаляемыйОбъект.Организация = Организация Тогда
17 User_Agronom
 
21.01.16
10:15
Измерения у РС Версии объектов: Объект, версия, дата, автор, номер.

Выбрать Объект Поместить НаборРеализаций из РС.ВерсииОбъектов где Объект ссылка Документ.РеализацияТоваровУслуг;

Выбрать Объект из НаборРеализаций где Объект.Организация = &Организация
18 User_Agronom
 
21.01.16
10:16
(17) +демонически по метаданным пробежаться и собрать в запрос все документы, у которых есть реквизит Организация.
19 ДенисЧ
 
21.01.16
10:16
(17) Гениально!
Сам попробовал?
20 xxTANATORxx
 
21.01.16
10:16
(0)ТС, озвучь количество записей
от этого зависит подход
21 User_Agronom
 
21.01.16
10:17
(19) Как я тебе с планшета попробую? ;)

Пиши что не будет работать: поверю на слово.
22 Dmitrii
 
гуру
21.01.16
10:19
(18) >> по метаданным пробежаться и собрать в запрос все документы, у которых есть реквизит Организация.

+1
Я бы плясал не от регистра Версии, а от документов.
Единым запросом выбрал бы все документы с реквизитом Организация, имеющие версии. Можно порциями по 1000.
И потом пошел удалять выбранные записи.
23 ДенисЧ
 
21.01.16
10:21
(21) Вот это  где Объект.Организация = &Организация
24 User_Agronom
 
21.01.16
10:21
(23) У реализации нет реквизита Организация?
25 ДенисЧ
 
21.01.16
10:22
(24) А у тебя ещё нет реализации. У тебя только хранилище значения есть.
26 Dmitrii
 
гуру
21.01.16
10:24
(25) Ты о каком хранилище говоришь?
Объект - тип.ЛюбаяСсылка
27 User_Agronom
 
21.01.16
10:25
(25) В хранилище не объект, а версия объекта.
Объект - это измерение. см (26)
28 Zombi
 
21.01.16
10:25
(16) ВЫБРАТЬ
    ВерсииОбъектов.Объект
ИЗ
    РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов
ГДЕ
    ВерсииОбъектов.Объект.Организация = &Организация

уже выбъет 1с с ошибкой "Недостаточно памяти". У объекта посмотри сколько типов значений, поэтому там соединений дофига получается.
29 Zombi
 
21.01.16
10:26
(20) Записей чуть больше 700к. Но сервак ваще не очень.
30 User_Agronom
 
21.01.16
10:26
Это чтобы мне посмотреть версии документа №1 нужно всё хранилище перелопатить, все распаковать, чтобы выбрать нужные?
31 hhhh
 
21.01.16
10:26
(28) ну там типов меньше 10. Можно 10 раз запустить, дпя каждого типа документа.
32 Dmitrii
 
гуру
21.01.16
10:27
(28) А не надо так делать!
Надо сначала отобрать конкретные документы с реквизитом Организация нужного значения. А потом сделать внутренне соединение с регистром Версии.
33 User_Agronom
 
21.01.16
10:28
(28) Там пакетный запрос, если на (17) намёк.
Поставь в первом выбрать первые 100.
34 НЕА123
 
21.01.16
10:28
(28)
у меня мало типов.
ну через выразить+объединить.
в общем (20)+1.
35 Быдло замкадное
 
21.01.16
10:32
Зачем вобще очищать регистр сведений? Типовая обработка удалит справочник и с ним!
36 Zombi
 
21.01.16
10:34
(35) Стандартная обработка умирает с ошибкой "Недостаточно памяти". А так она все чистит, да.