![]() |
|
Добавить данные в независимый регистр сведений | ☑ | ||
---|---|---|---|---|
0
Мультук
гуру
06.06.22
✎
13:50
|
Есть независимый регистр сведений.
Например: ДополнительныеСведения - Объект / измерение - Свойство / измерение - Значение / ресурс В нем (например) 10 млн записей (много). Мы запросом получаем (ахалай-махалай) таблицу значений тз с аналогичной структурой (например 100 тыс строк). Задача простая. Новые записи добавить, старые обновить, записи которых нет в таблице - в регистре не трогать. Вместо тривиального кода, нужно что-то пошустрее: Для каждого Об из ТЗ Цикл Менеджер = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи(); Менеджер.Объект = об.Объект; Менеджер.Свойство = об.Свойство; Менеджер.Значение = Об.Значение ; Менеджер.Записать(Истина); КонецЦикла; |
|||
1
Ryzeman
06.06.22
✎
13:53
|
Через СоздатьНаборЗаписей(), но это не сильно ускорит.
Прямым запросом сделать UPDATE - быстрее всего. |
|||
2
timurhv
06.06.22
✎
13:53
|
Свойство - везде одно и тоже?
|
|||
3
timurhv
06.06.22
✎
13:54
|
Можно по нему отбирать, прочитать, выгрузить, в ТЗ поправить - загрузить, записать.
|
|||
4
Мультук
гуру
06.06.22
✎
13:55
|
(2) Так нельзя - будет нехорошо.
|
|||
5
palsergeich
06.06.22
✎
13:59
|
(0) 10 млн это разве много?
Фигани в потоков 10-15 и не занимайся ерундой. было бы 100-150 лямов - можно было бы подумать и о непосредственно загрузке в скуль |
|||
6
1Сергей
06.06.22
✎
14:01
|
Транзакции ещё не предлогали?
|
|||
7
timurhv
06.06.22
✎
14:03
|
(4) Почему? Вроде можно наложить блокировку по свойству, запросом готовую таблицу собрать, загрузить таблицу в набор записей (именно загрузить, а не добавлять записи, так быстрее).
|
|||
8
timurhv
06.06.22
✎
14:12
|
Протестировал, 90тыс записей обновилось за 9 сек в файловом режиме (отбор по свойству).
|
|||
9
Мультук
гуру
06.06.22
✎
14:26
|
(7) (8)
Регистр сведений {еще всякое} Об1 Св1 Об2 Св1 Об3 Св1 Табл значений Об4 Св1 Можно увидеть код который оставит записи об1, об2, об3 и добавить запись из табл. значений ? |
|||
10
timurhv
06.06.22
✎
14:48
|
(9) Код - нет, вот алгоритм:
- блокировка на регистр по СВ1 (чтобы не записали свойство, пока мы обновляем все записи по СВ1); - запросом получаете все записи регистра с отбором по свойству + полное соединение записей регистра с ТЗ (с конструкцией "ЕСТЬNULL(ТЗ.Объект, РС.Объект) КАК Объект, ЕСТЬNULL(ТЗ.Свойство, РС.Свойство) КАК Свойство, ЕСТЬNULL(ТЗ.Значение, РС.Значение) КАК Свойство", соединение по объекту и свойству); - выгружаете в новую таблицу значений; - создаете набор записей, отбор по СВ1; - набор записей не считываете, просто делаете загрузить таблицу из запроса; - записываете набор записей; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |