Периодический регистр сведений

Цель работы

1.1 Научиться создавать и работать с объектом «Регистр сведений», связывать его с документами.

 

Краткие теоретические сведения

Объект конфигурации «Регистр сведений» является прикладным и предназначен для описания структуры хранения данных в разрезе нескольких измерений. На основе объекта конфигурации «Регистр сведений» платформа создает в базе данных информационную структуру, в которой может храниться произвольная информация, «привязанная» к набору измерений.

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

Следующей важной особенностью регистра сведений является его способность (при необходимости) хранить данные с привязкой ко времени. Благодаря этому регистр сведений может хранить не только актуальные значения данных, но и историю их изменения во времени. Регистр сведений, использующий привязку ко времени, называют обычно периодическим регистром сведений.

Периодичность регистра сведений можно определить одним из следующих значений:

- В пределах секунды;

- В пределах дня;

- В пределах месяца;

- В пределах квартала;

- В пределах года;

- В пределах регистратора (если установлен режим записи – «Подчинение регистратору»).

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

Как и для других регистров, система контролирует уникальность записей для регистра сведений. Однако если для прочих регистров уникальным идентификатором записи является регистратор и номер строки, то для регистра сведений применяется другой принцип формирования ключевого значения.

Ключом записи, однозначно идентифицирующим запись, является в данном случае совокупность значений измерений регистра и периода (в случае, если регистр сведений периодический). Регистр сведений не может содержать несколько записей с одинаковыми ключами.

Если продолжать сравнение с регистром накопления, то можно сказать, что регистр сведений предоставляет больше свободы в редактировании хранимых данных. Наряду с возможностью использования в режиме подчинения регистратору (когда записи регистра сведений «привязаны» к документу-регистратору) регистр сведений может применяться и в независимом режиме, в котором пользователю предоставляется полная свобода интерактивной работы с данными регистра. Регистр сведений, не использующий подчинение регистратору, называют независимым регистром сведений.

 

Задание

3.1 Создать регистр сведений для хранения стоимости услуг.

3.2 Связать регистр с документом «ОказаниеУслуги».

 

Ход работы

Очевидно, что в «КомпМастер» существует перечень услуг, который определяет стоимость каждой услуги. Стоимость услуги является неотъемлемым свойством самой услуги, и поэтому ее следует добавить в качестве реквизита справочника «Номенклатура».

Однако стоимость услуг имеет особенность меняться со временем. И может сложиться такая ситуация, когда потребуется внести изменения или уточнения в один из ранее проведенных документов «ОказаниеУслуги». В этом случае нельзя будет получить правильную стоимость услуги, поскольку в реквизите справочника будет храниться последнее введенное значение.

4.1 Создание периодического регистра сведений «Цены»

Открыть конфигуратор и создать новый объект конфигурации «Регистр сведений» с именем «Цены». Установить периодичность этого регистра в пределах секунды.

Рисунок 1 – Создание регистра сведений «Цены» и установка периодичности

 

Перейти на закладку «Данные» и создать измерение регистра «Номенклатура» с типом «СправочникСсылка.Номенклатура». Указать, что это измерение будет ведущим.

Рисунок 2 – Создание измерения «Номенклатура»

 

Свойство «Ведущее» имеет смысл использовать лишь тогда, когда измерение имеет тип ссылки на объект базы данных. Установка свойства «Ведущее» будет говорить о том, что запись регистра сведений представляет интерес, пока существует этот объект. При удалении объекта все записи регистра сведений по этому объекту тоже будут автоматически удалены. Кроме того, в форме списка справочника появляется кнопка командной панели «Перейти». По ней возможен переход к записям регистра, отобранным по значению выбранного элемента справочника.

После этого создать новый ресурс «Цена», тип «Число», длина 15, точность 2, неотрицательное.

Рисунок3 – Создание ресурса «Цена»

 

Запустить 1С:Предприятие в режиме отладки и задать стоимость услуг и цены на материалы. Выбрать «Операции» - «Регистр сведений» - «Цены».

Задать стоимость услуг и материалов следующим образом:

Рисунок 4 – Список «Цены»

 

В качестве периода установить дату днем ранее.

 

4.2 Создание функции РозничнаяЦена()

Требуется создать функцию, которая будет возвращать актуальную розничную цену номенклатуры.

Открыть конфигуратор, в ветке «Общие» - «Общие модули» создать новый объект конфигурации «Модуль» и назвать его «РаботаСоСправочниками».

Поместить в нем следующий текст:

 

Функция РозничнаяЦена(АктуальнаяДата, ЭлементНоменклатуры) Экспорт

// Создать вспомогательный объект Отбор

Отбор = Новый Структура("Номенклатура",ЭлементНоменклатуры);

// Получить актуальные значения ресурсов регистра

ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);

Возврат ЗначенияРесурсов.Цена;

КонецФункции

 

Рисунок 5 – Общий модуль «РаботаСоСправочниками»

 

Для получения розничной цены требуется передавать в функцию два параметра:

«АктуальнаяДата» – параметр типа «Дата» определяет точку на оси времени, в которой находится нужное значение розничной цены.

«ЭлементНоменклатуры» – ссылка на элемент справочника «Номенклатура», для которого нужно получить розничную цену.

В теле процедуры сначала создаем вспомогательный объект «Отбор». Интересны записи регистра, в которых измерение «Номенклатура» равно переданной в процедуру ссылке на элемент справочника.

Во второй строке обращаемся к менеджеру регистра сведений «Цены» («РегистрыСведений.Цены») и выполняется метод «ПолучитьПоследнее()», который возвращает нам значения ресурсов наиболее поздней записи регистра, соответствующей передаваемой дате («АктуальнаяДата») и значениям измерений регистра («Отбор»).

Значения ресурсов возвращаются в объекте «Структура», поэтому в следующей строке получить искомую розничную цену, просто указав имя нужного ресурса регистра через точку («ЗначенияРесурсов.Цена»).

4.3 Автоматическое заполнение цены в документе «ОказаниеУслуги»

Задача заключается в следующем. При создании документа «ОказаниеУслуги» необходимо обеспечить автоматическое заполнение поля «Цена» после того, как пользователь выберет услугу. Причем цена услуги должна определяться исходя из даты создаваемого документа.

Найти в конфигураторе документ «ОказаниеУслуги» и открыть его форму «ФормаДокумента». Открыть свойства поля ввода, расположенного в колонке «Номенклатура», и внизу списка найти событие «При изменении». Нажать на кнопку с лупой.

В открывшейся заготовке обработчика события написать следующий текст:

 

// Получить текущую строку табличной части

СтрокаТабличнойЧасти = ЭлементыФормы.ПереченьНоменклатуры.ТекущиеДанные;

// Установить цену

СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(Дата,Элемент.Значение);

// Пересчитать сумму строки

РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);

 

Первая строка обработчика уже знакома: получат текущую строку табличной части документа, так как она понадобится в дальнейшем.

Во второй устанавливается полученная цена в документе, вызывая процедуру «РозничнаяЦена». Первым параметром передается дата документа, на которую необходимо получить цену. Вторым параметром передается ссылка, которую отображает элемент управления формой, вызвавший это событие («Элемент.Значение»), то есть ссылку на элемент справочника «Номенклатура».

В заключение вызывается процедура «РассчитатьСумму» из общего модуля «РаботаСДокументами», чтобы она пересчитала итоговую сумму в строке документа.

Рисунок 6 – Процедура ПереченьНоменклатурыНоменклатураПриИзменении

 

Запустить 1С:Предприятие в режиме отладки. Создать новый документ «ОказаниеУслуги», который будет расходовать один транзистор. Провести его текущим числом.

Рисунок 7 – Новый документ

 

Как можно было заметить, после выбора номенклатуры, цена транзистора была введена автоматически.

Далее, открыть регистр сведений «Цены» («Операции» - «Регистр сведений» - «Цены») и добавить запись с датой, на один день позже текущей даты («Действия» - «Добавить»). В поле «Номенклатура» выбрать транзистор и ввести его новую цену, например 40 рублей.

Рисунок 8 – Новая позиция регистра сведений «Цены»

 

Вернутся в документ «ОказаниеУслуги», созданный ранее. Изменить дату документа на два дня вперед текущей даты и заново выбрать транзистор в поле «Номенклатура». Как видно, цена в поле «Цена» автоматически изменилась на новую. Провести такой документ в данном случае нельзя, так как дата установленна позже текущей. Можно сохранить документ нажатием кнопки «Записать»

Рисунок 9 – Новая цена была автоматически выбрана

 

Контрольные вопросы

5.1 Что такое объект конфигурации «Регистр сведений»

5.2 Чем отличается «РегистрСведений» от «РегистраНакопления»?

5.3 Какими значениями можно определить переодичность регистра?

5.4 Что такое независимый регистр сведений?

5.5 Может ли «Регистр сведений» содержать несколько записей с одинаковыми ключами?

 

Содержание отчета

6.1 Название работы

6.2 Цель работы

6.3 Описание хода работы со снимками экрана

6.4 Ответы на контрольные вопросы

6.5 Выводы к работе

Список литературы

7.1 1С:Предприятие 8.1. Конфигурирование и администрирование. М: Фирма «1С», 2007. – 342 с.


Практическая работа №8

Перечисление

Цель работы

1.1 Изучить объект конфигурации «Перечисление»