Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

лекциях по работе в системе 1С-Предприятие 8

Работа добавлена на сайт samzan.net:


Лабораторное занятие № 7

 РЕГИСТР СВЕДЕНИЙ

Цель занятия:

  1.  Приобрести умения по созданию регистра сведений в системе «1С:Предприятие 8.2».  
  2.  Исследовать главный инструмент разработчика - Конфигуратор.
  3.  Углубить и закрепить знания, полученные на лекциях,  по работе

в системе «1С:Предприятие 8.2».  

Время на выполнение работы: 4 часа

Учебные вопросы:

  1.  Назначение регистра сведений.
  2.  Добавление периодического регистра сведений.

Подготовка к выполнению работы:

  1.  Изучить рекомендованную литературу.
  2.  Изучить материал настоящего руководства.

1 Назначение регистра сведений

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

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

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

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

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

  •  в пределах секунды,
  •  в пределах дня,
  •  в пределах месяца,
  •  в пределах квартала,
  •  в пределах года,

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

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

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

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

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

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

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

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

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

В режиме Конфигуратор

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

В открывшемся окне редактирования объекта конфигурации на закладке Основные зададим имя регистра - Цены.

Установим свойство Периодичность этого регистра - В пределах секунды.

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

Здесь же определим представление объекта в интерфейсе приложения.

Зададим свойства Представление записи как Цена, а Представление списка как Цены на номенклатуру (рисунок 1).

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

Рисунок 1 - Основные свойства регистра сведений «Цены»

Далее перейдем на закладку Подсистемы.

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

Отметим в списке подсистем эти подсистемы (рисунок 2).

Рисунок 2 - Определение списка подсистем, в которых будет отражаться регистр

Измерения и ресурсы

Перейдем на закладку Данные и создадим измерение Номенклатура с типом СправочникСсылка.Номенклатура.

Для этого выделим ветвь Измерения и нажмем кнопку Добавить в командной панели окна.

Укажем, что это измерение будет ведущим (рисунок 3).

Рисунок 3 - Создание ведущего измерения регистра сведений

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

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

Затем создадим ресурс Цена, тип Число, длина 15, точность 2, неотрицательное.

Для этого выделим ветвь Ресурсы и нажмем кнопку Добавить в командной панели окна (рисунок 4).

Рисунок 4 - Создание ресурса регистра сведений

В режиме 1С:Предприятие

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

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

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

Рисунок 5 - Команда для открытия периодического регистра сведений «Цены»

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

Чтобы добавить новую запись в регистр сведений, нажмем кнопку Создать.

Зададим стоимость услуг ООО «На все руки мастер» следующим образом (рисунок 6).

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

Рисунок 6 – Цены на услуги в регистре сведений «Цены»

После этого зададим розничные цены на материалы (рисунок 7).

Рисунок 7 – Цены на материалы в регистре сведений «Цены»

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

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

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

Для этого нам нужно сделать две вещи:

  1.  Сначала написать некую функцию, которая будет возвращать актуальную цену номенклатуры.
  2.  Затем вызвать эту функцию в тот момент, когда в документ добавляется номенклатура, и подставить в документ цену номенклатуры, которую вернет эта функция.

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

В режиме Конфигуратор

Функция, возвращающая цену номенклатуры

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

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

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

Рисунок 8 – Свойства общего модуля

Поместим в него следующий текст (листинг 1).

Листинг 1. Функция «РозничнаяЦена()»

//----------------------------------------------------------------------

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

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

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

 

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

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

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

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

//----------------------------------------------------------------------

Поясним эту функцию.

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

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

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

В теле функции сначала создаем вспомогательный объект Отбор.

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

Имя ключа структуры ("Номенклатура") должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры (ЭлементНоменклатуры) задает отбираемое по данному измерению значение.

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

Метод ПолучитьПоследнее возвращает структуру, содержащую значения ресурсов, которая сохраняется в переменной ЗначенияРесурсов. 

У регистра может быть несколько ресурсов. В нашем регистре ресурс один, но все равно будет возвращена структура, содержащая единственный элемент.

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

Теперь эту функцию нужно вызвать в некоторый момент работы документа.

Вызов функции при выборе номенклатуры и заполнение цены в документе

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

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

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

  1.  Внесем в него следующий текст (листинг 2).

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

//-----------------------------------------------------------------------------------------------

&НаКлиенте

Процедура ПереченьНоменклатурыНоменклатураПриИзменении(Элемент)

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

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

 

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

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

 

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

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

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

//-----------------------------------------------------------------------------------------------

Первая строка обработчика уже знакома по процедурам Пе- реченьНоменклатурыКоличествоПриИзменении и ПереченьНоменкла- турыЦенаПриИзменении. Сначала получаем текущую строку табличной части документа, так как она понадобится в дальнейшем, и сохраняем ее в переменной СтрокаТабличнойЧасти.

Затем вызываем нашу функцию РозничнаяЦена() из общего модуля РаботаСоСправочниками.

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

Вторым параметром передаем ссылку на элемент справочника Номенклатура, который содержится в текущей строке табличной части документа (СтрокаТабличнойЧасти.Номенклатура).

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

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

Cама процедура ПереченьНоменклатурыНоменклату- раПриИзменении() начинает работать в модуле формы на стороне клиента, так как это обработчик интерактивного события формы. Создавая заготовку этой процедуры, платформа автоматически разместила перед описанием процедуры директиву компиляции &НаКлиенте.

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

Почему в данном случае использована такая «хитрость»? Зачем было передавать исполнение кода на сервер?

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

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

Толстый клиент и внешнее соединение - это клиентские приложения прежней версии платформы, которые существуют для совместимости с прежними прикладными решениями.

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

В режиме 1С:Предприятие

Проверим, как работает документ:

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

Рисунок 9 – Регистр сведений «Цены»

  1.  Откроем документ Оказание услуги № 1. Вспомним, что этим документом мы как раз «израсходовали» один такой транзистор.
  2.  Оставим дату документа без изменения и повторим выбор транзистора в колонке Номенклатура табличной части документа. Автоматически установится значение цены транзистора от 01.07.2009. Это последнее значение цены на дату документа (рисунок  10).

Рисунок 10 – Заполнение документа «Оказание услуги»

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

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

Рисунок 11 - Заполнение документа «Оказание услуги»

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

  1.  Для чего предназначен объект конфигурации Регистр сведений.
  2.  Какими особенностями обладает объект конфигурации Регистр сведений.
  3.  В чем главные отличия Регистра сведений от Регистра накопления.
  4.  Какие поля определяют ключ уникальности Регистра накопления.
  5.  Что такое периодический Регистр сведений и что такое независимый Регистр сведений.
  6.  Как создать периодический Регистр сведений.
  7.  Как получить значения ресурсов наиболее поздних записей регистра средствами встроенного языка.

PAGE   \* MERGEFORMAT13




1. Тема- Вивчення інтегрованого середовища розробки ICP Delphi Виконав- ст
2. Дослідження перспектив туристичного розвитку регіону
3. МОЛОТОК в 2014 году В соответствии с постановлением Губернатора области от 28
4. простой прибор б прибор среднего класса в прибор высокого класса
5. Аналіз основних фондів в умовах шахти ім ОО Скочинського
6. то в глубине души прозвонил хрустальный колокольчик
7. темам функций в L2[b]
8. Смотри и действуй СанктПетербург 2013 1
9. практикум а также Библиографический список составлены с учетом последовательного и глубокого изучения
10. Чернобыль - авария (причины, развитие, ликвидация последствий)
11. Методика атипического удаления корней зубов на верхней челюсти обезболивание инструмент возможные ослож
12. ИСТОРИЧЕСКИЙ АНАЛИЗ АЛЬТЕРНАТИВЫ И ПЕРСПЕКТИВЫ КЛАССНОУРОЧНОЙ СИСТЕМЫ ПРЕПОДАВАНИЯ В МАССОВЫХ ШКОЛ
13. . Житейская и научная психология о человеке Феноменология внутреннего мира человека Внутренний мир че
14. Основные проблемы современного образования
15. Правовые системы современности
16. Очертания его береговой линии типичны для материков Южной гондванской группы- он не имеет крупных выступ
17. Издательство ПРИОР МОСКВА 1997 Коллектив авторов- канд
18. Технология листовой штамповки
19. квалификационный уровень младший специалист Специальность 5
20. 1Размах вариации это разность между максимальным и минимальным значениями признака Он показывает пред