Статья

Как изменить записи регистра накопления в 1С

Как в 1С программно изменить записи регистра накопления?

В 1С 8 все регистры, кроме регистров сведений, всегда связаны с регистраторами. Регистры сведений могут быть независимыми или также подчиненными регистратору. В этом разделе мы опишем работу с регистрами, подчиненными регистраторам.

Практически всегда записи регистров, подчиненных регистраторам, создаются при проведении документов. Это обычный способ создания записей. В процессе проведения документа формируется набор записей регистра, и происходит отражение в учете события, которое описывает документ.

Однако в 1С можно программно изменять записи регистров без помощи документа. Но следует учитывать, что каждая запись регистра всегда подчинена одному и только одному регистратору. Однако, записи могут изменяться без участия самого документа. Главное, чтобы в них имелась ссылка на него.

Для изменения записей, подчиненных регистраторам, используются специальные сущности - наборы записей. При этом всегда используется отбор по регистратору. Нельзя добавлять или удалять отдельные записи. Можно только считывать и записывать все записи по регистратору.

При изменении записей регистра можно использовать набор записей, входящий в коллекцию движений документа (свойство Движения объекта ДокументОбъект). Однако это не обязательно. Для изменения записей регистра можно использовать и набор записей созданный с помощью менеджера регистра.
Чтобы изменить записи регистра нужно выполнить следующие этапы:

  • создать набор записей;
  • установить отбор по конкретному регистратору;
  • прочитать этот набор;
  • изменить записи набора;
  • записать набор.
Например, чтобы изменить значение реквизита во всех записях регистра можно использовать следующий код:
    //Выберем всех регистраторов 
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
        | УчетНоменклатуры.Регистратор
        |ИЗ
        | РегистрНакопления.ОстаткиНаСкладах КАК ОстаткиНаСкладах";
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    //пройдем циклом по всем регистраторам
    Пока Выборка.Следующий() Цикл
        //для каждого регистратора выполним изменение набора записей
        НаборЗаписей = РегистрыНакопления.ОстаткиНаСкладах.СоздатьНаборЗаписей(); 
        НаборЗаписей.Отбор.Регистратор.Значение = Выборка.Регистратор;
        НаборЗаписей.Прочитать();
        Для каждого Запись Из НаборЗаписей Цикл
            Запись.Реквизит1 = "Новое значение";
        КонецЦикла;
        НаборЗаписей.Записать();
    КонецЦикла;