Имя: Пароль:
1C
1С v8
Изменить измерение регистра сведений
0 Momus
 
13.12.19
10:33
Есть независимый периодический регистр сведений. Нужно массово изменить измерение регистра за определенный период. Делал через запрос с изменением по одной записи в цикле через набор записей. Поскольку записей достаточно много, изменение идет очень медленно. Есть ли какой-то другой способ изменить ИЗМЕРЕНИЕ регистра с отбором по ПЕРИОДУ?
Делал вот так:
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл

        Набор = РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей();

        Для каждого Стр Из Набор.Отбор Цикл
            Стр.Установить(Выборка[Стр.Имя]);
        КонецЦикла;
        
        Набор.Прочитать();
                
        ВТ = Набор.Выгрузить();
        ВТ.ЗаполнитьЗначения(Выборка.НовыйПользователь, "Пользователь");
                        
        НовыйНабор = РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей();
        НовыйНабор.Отбор.Пользователь.Установить(Выборка.НовыйПользователь);  
        НовыйНабор.Загрузить(ВТ);
        
        Набор.Очистить();
        НовыйНабор.Записать();
        Набор.Записать();
    КонецЦикла;
1 hhhh
 
13.12.19
10:38
(0) сделай в транзакции, по 1000 наборов
2 Александр Б
 
13.12.19
10:49
(0) Вообще, для работы с отдельными записями в 100 раз удобнее использовать менеджер записи, вместо набора. Это на будущее.
3 lodger
 
13.12.19
10:58
это надо делать в запросе.
@Набор.Прочитать();
@ВТ = Набор.Выгрузить();

в цикле по выборке только СоздатьНаборЗаписей() Установить() Загрузить(добавить() в цикле по подвыборке) Записать()
4 Momus
 
13.12.19
11:42
Пока переделывал с учетом всех рекомендация нашел очень грубую ошибку:
при установлении отбора в НовомОтборе я установил его лишь по одному измерению.
Вот что значит лепить набор записей там, где не следует). Изначально я планировал изменить записи в три строчки с использованием набора записей, но для регистра сведений отбор по периоду возможен только на "равно".