| 
    
        
     
     | 
    
  | 
Добавить данные в независимый регистр сведений | ☑ | ||
|---|---|---|---|---|
| 
    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; - набор записей не считываете, просто делаете загрузить таблицу из запроса; - записываете набор записей;  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |