Работа с регистрами накопления Регистры накопления позволяют хранить и быстро получать числовую информацию в разрезе некоторых измерений, например, остаток на дату конкретного вида товара на складе или суммарную стоимость покупок, который делал за период конкретный клиент. Регистры накопления бывают двух видов – регистры остатков (получают остаток на дату, т.е. работают по принципу «приход-расход») и регистры оборотов (получают суммарный оборот средств за период, т.е. работают только по принципу «прихода»). При создании регистра накопления нужно спроектировать его структуру, т.е. измерения (в разрезе чего производится учет) и ресурсы (что конкретно учитывается). Например, при анализе наличия материалов на складе нам нужно учитывать количество, что является ресурсом. Учет количества производится в разрезе двух измерений – материала, остаток которого считается, и склада, где этот материал хранится. Запись в регистры осуществляют документы, которых называют регистраторами. Запись в регистр какого-либо вида называется движением. В документе связь с регистрами прописывается на вкладке «Движения»: Для генерации движений можно использовать конструктор движений, который генерирует код процедуры ОбработкаПроведения модуля объекта документа. В результате будет сгенерирована следующая процедура, которая для каждой строки табличной части Материалы генерирует собственное движение по принципу «Создание пустой строки – заполнение ее атрибутов». Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором. // При повторном использовании конструктора, // внесенные вручную изменения будут утеряны!!! Для Каждого ТекСтрокаМатериалы Из Материалы Цикл // Регистр ОстаткиМатериалов Приход Движение = Движения.ОстаткиМатериалов.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Материал = ТекСтрокаМатериалы.Материал; Движение.Склад = Склад; Движение.Количество = ТекСтрокаМатериалы.Количество; КонецЦикла; // }}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры Посмотреть на движения документа можно будут с помощью кнопки «Перейти» на панели инструментов в журнале документов. Обращение с запросом к регистру накопления делается следующим образом. Пусть нам требуется узнать, сколько осталось материала вида, хранящегося с переменной ВыбранныйМатериал, на складе, ссылка на которого хранится в переменное ВыбранныйСклад, на текущую дату. Тогда в нужную процедуруобработчик (например, на нажатие командной кнопки «Показать остатки») требуется вставить следующий программный код: // требуется определить отбор по материалу и складу. Для этого часто используют объект // типа Структура, в который заносятся пары «Поле-Значение». Отбор = Новый Структура; Отбор.Вставить(«Материал», ВыбранныйМатериал); Отбор.Вставить(«Склад», ВыбранныйСклад); // получение остатков будет производиться специальной функцией Остатки для регистра // накопления – возвращается таблица значений, Отбор передается вторым параметром Таб = РегистрыНакопления.ОстаткиМатериалов.Остатки(ТекущаяДата(), Отбор); // В таблице будут строки, которые соответствуют отбору. // Столбцы таблицы – измерения и ресурсы регистра накопления. // Поскольку отбор учитывал только один материал и склад, можно получить количество // этого материала как итог по столбцу «Коилчество» Сообщить(«Количество - »+Таб.Итог(«Количество»)+ « штук»); Для получения данных из регистра оборотов используется функция Обороты, причем первые два параметра задают даты начала и конца периода, за который требуется получить оборот.