Имя: Пароль:
1C
1С v8
Корректировка записей в регистре накопления
0 doublenick
 
22.02.18
10:23
Подскажите, плиз.

Есть заполненный регистр накопления, туда добавлено НовоеПоле (измерение). Как без повторного проведения документов обновить записи регистра, чтобы заполнить это новое поле?

НаборЗаписей = РегистрыНакопления.ВнутренниеЗаказы.СоздатьНаборЗаписей();

А дальше?
1 Любопытная
 
22.02.18
10:29
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаРегистратор);
НаборЗаписей.Прочитать();
ТЗ = НаборЗаписей.Выгрузить();
ТЗ.ЗаполнитьЗначения(Значение, ИмяПоля);
НаборЗаписей.Загрузить(ТЗ);

НаборЗаписей.Записать();

Примерно так
2 Mort
 
22.02.18
10:30
Отбор.Регистратор.Установить()/Прочитать()/..../Записать()
3 Serg_1960
 
22.02.18
10:35
:)
Отбор/Выгрузить/(изменить)/Загрузить/Записать - читать необязательно, а вот Удалить исходное, как мне кажется, - надо.
4 Serg_1960
 
22.02.18
10:48
Имхо, если автора понимать буквально, то работу срегистром надо начинать с запроса. Типа вот так:

    Запрос = Новый Запрос();
    Запрос.Текст =
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ВашРегистр.Регистратор КАК Регистратор
    |ИЗ
    |    РегистрНакопления.ВашРегистр КАК ВашРегистр";
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    НаборЗаписей = РегистрыНакопления.ВашРегистр.СоздатьНаборЗаписей();
    
    Пока Выборка.Следующий() Цикл
        
        НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
        
        ВсеЗаписи = НаборЗаписей.Выгрузить();
        ... в цикле или как-то по другому изменить записи ...
        НаборЗаписей.Загрузить(ВсеЗаписи);
        НаборЗаписей.Записать();
        
    КонецЦикла;
5 doublenick
 
22.02.18
11:18
В общем, сделал так. Всем спасибо.

    ВыборкаДокументов = Документы.ВнутреннийЗаказ.Выбрать();
    
    Пока ВыборкаДокументов.Следующий() Цикл
        
        НаборЗаписей = РегистрыНакопления.ВнутренниеЗаказы.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(ВыборкаДокументов.Ссылка);
        НаборЗаписей.Прочитать();
        
        Для Каждого Запись Из НаборЗаписей Цикл
               Запись.клПодразделениеПотребитель = Запись.ВнутреннийЗаказ.ПодразделениеИсполнитель;
        КонецЦикла;    
        
        НаборЗаписей.Записать();
        
    КонецЦикла;
6 Mankubus
 
22.02.18
11:40
(5) в (4) лучше код, у вас выбираются даже не проведенные документы
7 doublenick
 
22.02.18
11:54
(6) Согласен - но у меня они все проведены)
8 Serg_1960
 
22.02.18
12:31
(7) Методически правильнее алгоритм "от регистратора", а не от документа. Вы не озвучили конфигурацию, поэтому рекомендую убедиться что ВнутреннийЗаказ - это единственный документ-регистратор у этого регистра. Что скорее всего не так, - у меня, например, 14 типов документов являются регистраторами для ВнутренниеЗаказы.
9 doublenick
 
22.02.18
15:04
(8) Я сначала тоже об этом подумал, но, не вдаваясь в тонкости конфигурации, результат однозначно правильный - что через регистратор, что через измерение ВЗ.