prosdo.ru
добавить свой файл
1
Практическая работа


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

I. План занятия:

1. Объект конфигурации Периодический регистр накопления

2. Создание периодического регистра сведений Цены

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

4. Автоматическое заполнение цены в документе Оказание услуги

II. Цель проведения занятия:

1. Изучение объекта конфигурации Периодический регистр сведений

2. Освоить процедуру создания и методы использования данных регистра сведений средствами встроенного языка
Зачем нужен периодический регистр сведений?
В ООО «Респект Продакшн» существует пере­чень услуг, который определяет стоимость каждой услуги. Стоимость услуги является неотъемлемым свойством самой ус­луги, и поэтому ее следует добавить в качестве реквизита справоч­ника Номенклатура.

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

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

Для хранения стоимости услуг используется новый Регистр сведений.

8.1. Объект конфигурации Регистр сведений

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


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

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

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

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

• в пределах дня;

• в пределах месяца;

• в пределах квартала;

• в пределах года;

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

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

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

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


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


8.2. Создание периодического регистра сведений Цены
Приступим к созданию периодического регистра сведений, ко­торый будет хранить развернутые во времени розничные цены ма­териалов и стоимости услуг, оказываемых нашим ООО «Респект Продакшн».

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


Рис. 8.1. Создание ОК Регистр сведений
Перейдем на закладку Данные и создадим измерение регист­ра Номенклатура с типом СправочникСсылка.Номенклатура. Укажем, что это измерение будет ведущим. (рис. 8.2.)


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

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


Рис. 8.3. Создание ресурса
Теперь запустим 1С:Предприятие в режиме отладки и посмот­рим, как работает периодический регистр сведений Цены.

Зададим стоимость услуг ООО «Респект Продакшн» и зададим розничные цены на материалы следую­щим образом (рис. 8.4.):


Рис. 8.4. Закрепление цен за стоимостью услуг

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

Посмотрим, как можно использовать заданные нами цены в документе ОказаниеУслуги.

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

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


Рис. 8.5. Создание общего модуля РаботаСоСправочниками
Поместим в нем следующий текст (листинг 1).
Листинг 1. Функция РозничнаяЦена()

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

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

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

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

ЗначенияРесурсов =

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


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

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

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

АктуальнаяДата - параметр типа Дата определяет точку на оси времени, в которой нас интересует значение розничной цены

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

В теле процедуры мы сначала создаем вспомогательный объект Отбор. С его помощью определяем, что нас будут интересовать за­писи регистра, в которых измерение Номенклатура равно передан­ной в процедуру ссылке на элемент справочника.

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

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

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

Найдем в конфигураторе документ ОказаниеУслуги и откроем его форму ФормаДокумента. Откроем свойства поля ввода, распо­ложенного в колонке Номенклатура, и внизу списка найдем событие ПриИзменении. Нажмем на кнопку с лупой и в открывшейся заго­товке обработчика события напишем следующий текст (листинг 2).

Листинг 2. Процедура ПереченьНоменклатурыНоменклатураПриИзменении()

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

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

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

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

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

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

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

Проверим, как теперь работает наш документ. Запустим 1С:Предприятие в режиме отладки и откроем регистр сведений Цены. Для тран­зистора Philips добавим следующим числом новую цену (рис. 8.6.):


Рис. 8.6. Закрепление новой цены за номенклатурой
Теперь откроем документ Оказание услуги № 1. Этим документом мы как раз «израсходовали» один такой транзистор.

Установим дату документа равной той дате, когда было задано первое значение цены транзистора, и повто­рим выбор транзистора в колонке Номенкла­тура табличной части документа. Автома­тически установится первое значение цены. (рис. 8.7.)


Рис. 8.7. Автоматические подстановка неактуальной цены при выборе номенклатуры
Теперь изменим дату документа на следующий день и снова повторим выбор транзистора. Будет установ­лено новое значение цены. (рис. 8.8.)


Рис. 8.8. Автоматические подстановка актуальной цены при выборе номенклатуры

Таким образом, в документе появляется актуальная на момент создания документа цена услуги.