1С Программирование. Периодические регистры сведений

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

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

этой работе Вы познакомитесь с объектом Регистр сведений, точнее с одним из его видов – периодическим регистром сведений. Вы создадите один периодический регистр сведений и покажете каким образом можно использовать его данные средствами встроенного языка.

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

Поэтому для хранения стоимости услуг мы используем новый для нас объект – Регистр сведений. Он предназначен для описания структуры хранения данных в разрезе нескольких измерений.

Принципиальное отличие Регистра сведений от Регистра накопления в

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

регистр накопления.

Еще одна важная особенность регистра сведений – способность хранить данные с привязкой ко времени. Благодаря этому регистр сведений может хранить историю изменения данных. Такой регистр называют

периодическим регистром сведений.

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

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

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

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

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

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

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

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

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

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

Регистр сведений, не использующий подчинение регистратору, называют

независимым регистром сведений.

Добавление периодического регистра сведений

Добавьте новый объект конфигурации Регистр сведений с именем Цены.

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



























Перейдите на вкладку Подсистемы, отметьте УчетМатериалов,

ОказаниеУслуг и Бухгалтерия. Перейдите на вкладку Данные.

Создайте измерение Номенклатура с типом

СправочникСсылка.Номенклатура.

Укажите, что измерение будет ведущим. Оно означает, что при удалении объекта, все записи регистра сведений по этому объекту будут автоматически удалены. Также благодаря этому свойству, в панели навигации появится ссылка для перехода к записям этого регистра.




















Создайте также ресурс Цена, тип Число, длина 15, точность 2, неотрицательное.



















Запустите 1С: Предприятие. Вы увидите, что в разделах Бухгалтерия, Оказание услуг и Учет материалов появилась команда для открытия списка регистра Цены на номенклатуру. Эта команда доступна по умолчанию, т.к. в отличие от регистров накопления предполагается изменение данных регистра пользователем.

























Создание записей в регистре сведений

Откройте регистр Цены на номенклатуру и нажмите кнопку Создать.

Заполните регистр ценами всех услуг и материалов, задавая период задним числом, чтобы оно было раньше даты создания документа об оказании услуг (в моем случае дата создания документа – 24.08.2010, поэтому я устанавливаю 01.08.2010).



























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

Автоматическая подстановка цены в документ при выборе номенклатуры

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

В конфигураторе, ветка Общие – Общие модули добавьте новый модуль с именем РаботаСоСправочниками.

Как видите, у модуля по умолчанию установлен флажок Сервер. Это означает, что модуль будет компилироваться на сервере.

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

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

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

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

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

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

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

Отбор);

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

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

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

Найдите в конфигураторе документ ОказаниеУслуги и откройте его форму ФормаДокумента. Дважды щелкните на элементе формы

ПереченьНоменклатурыНоменклатура, найдите событие

ПриИзменении, которое возникает при изменении значения поля.

Нажмите на значок лупы. Система создаст шаблон процедуры обработчика этого события в модуле нашей формы и откроет закладку Модуль редактора формы. Внесите в него следующий текст:

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

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

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

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

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

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

Должно получиться следующее:

















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

























Для транзистора Philips добавим другим числом новую цену:
























































Теперь откройте документ Оказание услуги №1, где мы израсходовали один такой транзистор. Оставим дату документа без изменения и повторим выбор транзистора в колонке Номенклатура табличной части документа. Автоматически установится значение цены транзистора от 01.08.2010. Это последнее значение цены на дату документа.


























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


























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

Контрольные вопросы
Для чего предназначен объект Регистр сведений

Какими особенностями обладает Регистр сведений

В чем главнее отличия регистра сведений от регистра накопления

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

Как создать периодический регистр сведений

Что такое ведущее измерение регистра



Приложенные файлы

  • doc Registry
    Размер файла: 713 kB Загрузок: 2