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