![]() |
![]() |
![]() |
|
Как почистить регистр сведений. | ☑ | ||
---|---|---|---|---|
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) Стандартная обработка умирает с ошибкой "Недостаточно памяти". А так она все чистит, да.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |