
Тема 1.6 Регистры накопления. Простой отчет
Регистры накопления – механизм учета накопления данных. В 1С:Предприятие есть несколько объектов конфигурации, которые позволяют создавать в базе данных структуры, предназначенные для накопления информации в удобном для последующего анализа виде. Использование таких «хранилищ» данных позволяет нам во-первых, накапливать в них данные, поставляемые различными документами (или другими объектами БД) во-вторых, легко создавать нужные нам отчеты или использовать эти данные в алгоритмах работы конфигурации (Алгоритм работы конфигурации)
Документ
РЕГИСТР ![]()
Отчет
Обработка «Другие пользователи»
Источники данных «пользователи данных» |
Регистр накопления предназначен для описания структуры накопления данных. На основе объекта конфигурации Регистр накопления платформа создает в БД таблицы, в которых будут накапливать данные, «поставляемые» различными объектами БД. В таблице они будут храниться в виде отдельных записей, каждая из которых имеет одинаковую, заданную в конфигураторе структуру.
Отличительной особенностью регистра накопления является то, что он не предназначен для интерактивного редактирования пользователем.
Разработчик может при необходимости предоставить пользователю возможность редактировать регистр накопления, но его предназначение заключается в том, чтобы его модификация производилась на основе алгоритмов работы других объектов БД, а не в результате непосредственных действий пользователя.
Основным назначением Регистра накопления является накопление числовой информации в разрезе нескольких изменений, которые описываются разработчиком в соответствующем объекте конфигурации Регистр накопления и являются подчиненными объектами конфигурации. Виды числовой информации называются РЕСУРСАМИ, также подчиненными объектами и описываются в конфигураторе.
Например, регистр накопления может накапливать информацию о количестве и сумме товаров на складах. В этом случае он будет иметь изменения ТОВАР и СКЛАД и ресурсы Количество и Сумма.
Изменения состояния регистра накопления происходит, как правило, при проведении документа и заключается в том, что регистра добавляет некоторое количество записей.
Каждая запись содержит значения изменений, значения приращений ресурсов, ссылку на документ, который вызвал эти изменения (регистратор), и «направление» приращения (приход или расход). Этот вид записей называется Движением регистра накопления. Каждому движению должен соответствовать документ, который произвел эти движения.
Добавление регистра накопления.
Ответственное лицо на предприятии всегда должно знать о всей информации по движению товара по предприятии. Будь то, склад по приему товара или по его выдачи, а также остальных материалов. Для этого разработчик в режиме Конфигуратор выделяет ветвь Регистры накопления и нажимает кнопку Добавить в командной панели окна конфигурации В открывшемся окне редактирования объекта конфигурации на закладке Основные задает имя регистра, допустим ОстаткиМатериалов. Так же задает и Расширенное представление списка как Движения по регистру Остатки материалов. Этот заголовок будет отображен в окне списка записей регистратора.
Нажмет Далее и перейдет на закладку Подсистемы и подключает к тем системам где должен быть доступен данный регистр накопления. Отмечает галочками необходимое и переходит к закладке Данные, где задается структура регистра. Создает изменения Регистра, для этого выдирается ветвь Изменения и кнопкой Добавить в командной строке
Затем создается ресурс Количество с длиной и точностью (например, длина 15 и точность 3) для этого выделяется ветвь Ресурсы и нажимается кнопка Добавить в командной строке панели окна
В результате всех этих действий появится новый регистр накопления. Теперь обязательно нужно сформировать движение регистра накопления в процессе проведения заданных документов, например, ПриходнаяНакладная и ОказаниеУслуг.
Движение документа – это записи в регистрах, которые создаются в процессе проведения документа и отражают изменения, производимые документом.
Например, откроем окно редактирования объекта конфигурации Документ ПриходнаяНакладная. Перейдем на закладку Движения, раскроем список Регистры накопления и отметим регистр ОстаткиМатериалов. Сразу после этого становится доступна кнопка Конструктор движений. Нажмем ее и воспользуемся конструктором.
Конструктор устроен просто. В списке Регистры перечислены те регистры, в которых документ может создавать движения.
В списке Реквизиты документа должны быть исходные данные для создания движения – реквизиты документа.
В таблице Поле – Выражение должны быть заданы формулы, по которым будут вычисляться значения изменений и ресурсов регистра при записи движения
Обратите внимание, что по умолчанию конструктор предлагает нам создавать движения прихода (Тип движения регистра – Приход, символ + радом с названием регистра) по регистру. Это нас может вполне устроить.
В поле выбора Табличная часть выберем ту табличную часть Вашего документа, которую необходимо настроить. Список реквизитов документа, который уже заполнен реквизитами шапки документа, автоматически дополнится реквизитами новой табличной части.
Нажмите кнопку Заполнить выражения.
В следующем окне сформируется соответствие полей (изменений и ресурсов) регистра и выражений для их расчета
Конструктор движений установил соответствия следующим образом: в качестве материала в регистр будет записан материал на табличной части документа, в качестве склада – склад, указанный в шапке документа, а в качестве количества – воличество из табличной части документа.
Если нажать кнопку «ОК» по появится текст (листинг) который сформировал конструктор
Рис. Процедура «ОбработкиПроведения()»
Основное назначение обработчика данного события – генерация движений по предмету. Выполнение различных операций с данными в процедуре обработчика влияет на состояние учета. Таким образом, именно в эту процедуру разработчик должен поместить собственные алгоритмы преобразования данных, выполняемые в момент проведения документа.
Пояснение текста процедуры
Объект строенного языка ДокументОбъект имеет свойство Движения. Оно возвращает объект КоллекцияДвижений, содержащих коллекцию наборов записей регистров, по которым этот документ может формировать движения.
К конкретному набору записей этой коллекции можно обратится указав через точку имя регистра, которому принадлежит этот набор записей. Например, Движения.ОстаткиМатериалов. Затем через точку можно использовать различные методы набора записей регистра, например, Движения.ОстаткиМатериалов.Добавить(). МетодДобавить() добавляет новую запись и набор записей.
В первой троке процедуры мы устанавливаем свойство Записывать набора записей регистра в значение Истина. То есть, в явном виде указываем, что после завершения обработки проведения платформа должна будет записать этот набор записей в БД.
В нутрии обработчика расположен цикл Для Каждого … Из … Цикл. Он предназначен для перебора всех строк табличной части нашего документа.
В цикле обращение к табличной части документа происходит по имени (Материалы). Переменная ТекСтрокаМатериалы содержит объект с данными текущей строки табличной части документа. Эта переменная создается в начале цикла и меняется по мере его продвижения.
В первой строке тела цикла, используя метод Добавить(), мы добавляем к набору записей, который создает наш документ в регистре, новую запись. Тем самым мы создаем объект РегитрНакопленияЗапись и созраняем его в переменной Движение.
Используя этот объект мы можем обратиться к полям этой записи, указав имя поля через точку от этой переменной (например, Движение.Количество).
Причем Двидение.Материал, Движение.Склад – это изменения регистра, Движение.Количество – это ресурс регистра, а Движение.ВидДвижения и Движение.Период – стандартные реквизиты регистра, которые создаются автоматически.
Чтобы присвоить полям новой записи регистра соответствующие значения полей документа, мы обращаемся к полям табличной части, указав имя поля через точку от переменной ТекСтрокаМатериалы (например, ТекСтрокаМатериалы.Материал).
В цикле меняются только значения полей табличной части документа – ТекСтрокаМатериалы.Материал и ТекСтрокаМатериалы.Количество. Остальные поля не меняются, т.к. относятся к документу в целом и не зависят от текущей строки табличной части документа.
ВидДвижения Накопления.Приход – это значение системного перечисления, которое определяет вид движения регистра перечисления как Приход.
Таким образом, мы присваиваем нужные значения всем полям новой записи. После завершения цикла в этом наборе будет содержатся столько записей, сколько строк в табличной части проводимого документа.
Теперь для отображения ссылки просмотра записей регистра накоплений в подсистемах необходимо в режиме конфигуратора в дереве объектов выделить ветвь Подсистемы, вызвать его контекстное меню и выбрать пункт Все подсистемы.
В открывшемся окне Командный интерфейс отразятся все команды выбранной подсистемы. В группе Панель навигации.Обычное включим видимость у команды «Остатки материалов» и мышью перетащим ее в группу Панель навигации. См.также.
Аналогично все проделать с другими подсистемами.
Движение документа
В режиме конфигуратора необходимо открыть окно редактирования конфигурации Документ ОказаниеУслуги.
Перейти на закладку Движения и в списке регистров конфигурации отметим регистр накопления ОстаткиМатериалов.
Выбрать кнопку Конструктор движений.
В новом окне конструктора вменить тип движения регистра на Расход, т.к. документ ОказаниеУслуги должен расходовать материалы. Пиктограмма слева от названия регистра изменится на знак «—».
В поле выбора Табличная часть выберем табличную часть нашего документа – ПереченьНоменклатуры.
Список реквизитов документа, который уже заполнен реквизитами шапки документа, автоматически дополнится реквизитами нашей табличной части.
Теперь нажмем кнопку Заполнить выражения.
В нижнем поле сформируется соответствие полей (изменений и ресурсов) регистра и выражений для их расчета. Однако при автоматическом заполнении поле Материал не заполняется.
Так происходит потому, что имя поля табличной части – Номенклатура не совпадет с именем измерения регистра – Материал. Если оставить это как есть, то в регистре накопления в строках с типом Движение регистра – расход номенклатура фиксироваться не будет.
Что бы этого избежать нужно выделить поле регистра Материал и в окне Реквизиты документа дважды щелкнуть по строке ТекСтрокаПереченьНоменклатуры.Номенклатура.
Нажать кнопку «ОК».
Конструктор создал обработчик событий ОбработкаПроведения объекта конфигурации Документ ОказаниеУслуги и поместил его в модуль объекта. Просмотрите листинг.
Простой отчет
Объект конфигурации Отчет предназначен для описания алгоритмов, при помощи которых пользователь сможет получать необходимые данные. Алгоритм формирования выходных данных описывается при помощи визуальных средств или с использованием встроенного языка. В реальной жизни объектами конфигурации Отчет соответствует всевозможные таблицы выходных данных, сводных данных, диаграммы и пр.
Добавление отчета
Все предыдущие манипуляции подготовили основу для создания отчетов.
Открыть систему в режиме конфигуратора и добавить новый объект конфигурации Отчет.
Для этого выделить в дереве объектов ветвь Отчеты и нажмем кнопку Добавить в командной панели окна конфигурации.
В следующем окне объекта конфигурации на закладке Основные задавим имя отчета (например, Материалы).
В строке синоним выбрать автоматически созданное имя.
Создать схему компоновки данных как основу любого отчета, для этого выбрать кнопку Открыть схему компоновки данных или кнопку открытия со знаком лупы.
Так как у отчета еще нет схемы компоновки данных, платформа предложит создать новую схему, которая с точки зрения конфигуратора является макетов, поэтому будет открыт конструктор макета, предлагающий выбрать единственный тип макета - Схема компоновки данных.
Платформа создаст новый макет содержащий схему компоновки данных и сразу же откроет конструктор схемы компоновки данных.
Конструктор обладает большим количеством возможностей для визуального проектирования отчетов. Например, добавим новый набор данных – запрос. Для этого выбрать кнопку Добавить или вызовем контекстное меню ветки Наборы данных.
Для создания текста запроса запустите конструктор запроса – нажатием кнопки Конструктор запроса.
Конструктор запроса – инструмент созданный для помощи разработчику, позволяющий визуально конструировать запрос. Для пользователя так же возможно создать синтаксически правильный запрос.
В списке БД представлены таблицы для создания запроса. На их основе имеется возможность построение отчета.
Если раскрыть ветку РегистрыНакопления, то можно увидеть, что кроме таблицы регистра ОстаткиМатериалов в этой ветке присутствует еще несколько виртуальных таблиц, которые формирует система.
Эти таблицы в основном и используются для построения отчетов.
Контрольные вопросы:
Что такое Регистры накопления?
Основные особенности Регистра накопления?
Что такое Движение документа?
Простой отчет, что это?