Работа с регистрами накопления
Регистр накопления предназначены для хранения числовых показателей в разрезе нескольких измерений и, при необходимости, в разрезе времени.
Добавление записей в регистр накопления
Для добавления движения в регистр накопления необходимо создать набор записей, установить отбор по регистратору, добавить запись и заполнить значениями. Если требуется добавить несколько записей – добавление производится в цикле.
// ДокументСсылка - в этом примере это ссылка на документ Требование-накладная // Требование-накладная выполняет движение с видом "Приход" ТабличнаяЧасть = ДокументСсылка.Материалы; НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка); Для Каждого Строка Из ТабличнаяЧасть Цикл Запись = НаборЗаписей.ДобавитьПриход(); // Наименования измерений, ресурсов и реквизитов совпадают с // наименованиями колонок табличной части, поэтому воспользуемся // функцией ЗаполнитьЗначенияСвойств() ЗаполнитьЗначенияСвойств(Запись, Строка); Запись.Период = ДокументСсылка.Дата; // период записи равен дате документа КонецЦикла; НаборЗаписей.Записать();
Удаление записей из регистра накопления
Удаление всех записей по регистратору
Для удаления всех записей из регистра накоплений по регистратору необходимо создать пустой набор записей, установить отбор по регистратору и записать его.
// ДокументСсылка - ссылка на регистратор НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка); НаборЗаписей.Записать();
Удаление части записей по регистратору
Очень часто нужно удалить не все записи по регистратору, а только часть из них. Для этого необходимо создать пустой набор записей, установить отбор по регистратору и считать отобранные записи из базы. После чего нужно обойти отобранные записи и удалить из набора .
НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка); НаборЗаписей.Прочитать(); // удалим запись, где наименование измерения Склад равно "Основной" Для Каждого Запись Из НаборЗаписей Цикл Склад = Запись.Склад; Если Склад.Наименование = "Основной" Тогда НаборЗаписей.Удалить(Запись); КонецЕсли; КонецЦикла; НаборЗаписей.Записать();
Изменение записи в регистре накопления
Изменение записи по регистратору аналогично удалению части записей, только запись не удаляется, а изменяется.
НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка); НаборЗаписей.Прочитать(); // Изменим запись, где наименование измерения Склад равно "Основной" Для Каждого Запись Из НаборЗаписей Цикл Склад = Запись.Склад; Если Склад.Наименование = "Основной" Тогда Запись.Количество = 10; // изменим количество на 10 КонецЕсли; КонецЦикла; НаборЗаписей.Записать();