РЕГИСТРЫ СВЕДЕНИЙ. Продолжение

ЛАБОРАТОРНАЯ РАБОТА 12.2

 

3. Регистр сведений «Цены поступления»

В предыдущем примере мы рассмотрели основы работы с регистром сведений, у которого был «Независимый» режим записи. Теперь рассмотрим пример, когда запись ведется регистратором.

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

Создайте регистр сведений «ЦеныПоступления». При этом первоначально установите режим записи «Подчинение регистратору». Обратите внимание на то, что только в этом режиме появляется дополнительный вариант периодичности «По позиции регистратора».

Если говорить о «ключевых» полях записи такого регистра, то к ним относятся: «Регистратор», «Период» + все определенные измерения.

На странице «Данные» определим два измерения:

· Поставщик - тип «СправочникСсылка.Контрагенты»

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

Ресурсы:

· Цена – тип «Число» длина 15, точность 2

Обратите внимание на то, что на странице «Формы» диалог выбора режима записи недоступен (считается, что запись будет осуществляться из обработки проведения документа).

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

Установка в свойстве «Проведение» значения «Разрешить» приводит к тому, что при записи самого документа может одновременно производиться запись в «отмеченные» регистры.

Установка в свойстве «Оперативное проведение» значения «Разрешить» приводит к тому, что:

· Документ нельзя провести будущей датой и временем.

· При проведении текущей датой, если время документа «устарело» будет задан вопрос «Провести документ оперативно?» если пользователь ответит «Да», время документа и изменится на текущее.

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

Для того, чтобы разрешить документу выступать в качестве регистратора для какого-либо регистра необходимо в перечне доступных регистров (в нашем случае он один) нужные из них отметить флажком. Если для какого-либо регистра флажок (для данного вида документа) не установлен, то попытка использовать его как регистратор приведет к ошибке исполнения.

Мало определить документ как регистратор, необходимо еще в модуле объекта описать процедуру – обработчик события «ОбработкаПроведения()». Сделать это можно «Вручную», а можно с помощью конструктора. Вызов конструктора можно осуществить непосредственно со страницы «Движения» кнопка Конструктор движений.

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

 

Затем нажмите на кнопку Ок.

 

В результате работы конструктора в модуле объекта будет определена следующая процедура:

Процедура ОбработкаПроведения(Отказ, Режим) //1

Для Каждого ТекСтрокаТовары Из Товары Цикл //2

Движение = Движения.ЦеныПоступления.Добавить(); //3

Движение.Период = Дата; //4

Движение.Поставщик = Контрагент; //5

Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; //6

Движение.Цена = ТекСтрокаТовары.Цена; //7

КонецЦикла;

Движения.ЦеныПоступления.Записать(); //8

КонецПроцедуры

Рассмотрим порядок работы данной процедуры. Начнем с рассмотрения параметров:

· Параметр «Отказ». Если в него записать значение «Истина» это приведет к отмене проведения.

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

2. Строки табличной части в самой табличной части являются коллекцией. Поэтому их можно обойти с помощью цикла:

«Для Каждого » строка «Из» имя коллекции.

1. В набор записей («Движение») добавляется очередная запись

2. Устанавливается «Период» (т.к. регистр сведений периодический, это поле присутствует). Следует отметить, что в данное поле не обязательно записывать дату документа, можно записывать совершенно произвольную дату.

8. Записывается весь (сформированный в цикле) набор записей.

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

Активность записей

При просмотре «движений» (записей в регистр, сделанных документом) может использоваться поле «Актуальность». В данном поле могут содержаться значение имеющее тип «Булево». Актуальность может устанавливаться для всего набора записей. Если у набора записей актуальность «сброшена» (значение «Ложь»), то эти записи не влияют на результат выполнения методов «ПолучитьПервое(), ПолучитьПоследнее(), СрезПервых(), СрезПоследних», хотя сами записи в регистре присутствуют.

Добавьте в документ «ПоступлениеТоваров» реквизит «Активность» (тип «Булево»). Разместите его в диалоге формы. В процедуре «ОбработкаПроведения» перед записью набора записей вставьте следующую строку:

Движения.ЦеныПоступления.УстановитьАктивность(Активность);

 

Проведите документы «ПоступлениеТоваров» с отмеченным и неотмеченным флагом «Активность», просмотрите «движения» документа.

Для просмотра «влияния» активности на «методы» периодических регистров сведений создайте обработку «Срез». В диалоге разместите элемент управления «ТабличноеПоле», определите у него следующие свойства:

 

 

Установите в свойство «Выбирать срез» значение «Последние» (в пользовательском режиме в данном элементе управления будет содержаться «как бы результат» выполнения метода «СрезПоследних()»).

Проводите документы с разными значениями флага «Активность» (для того, чтобы явно увидеть результат необходимо перепровести документ со сброшенным флагом актуальности, данные из которого изначально попадали в срез последних).

 

5.Для реализации в документе «ПоступлениеТоваров» механизма автоподстановки цены закупки в том случае если данный товар уже поступал от выбранного поставщика, введите следующий код:

Проверьте работу процедуры.