Цель работы
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 Контрольные вопросы
5.1 Что такое объект конфигурации «Регистр сведений»
5.2 Чем отличается «РегистрСведений» от «РегистраНакопления»?
5.3 Какими значениями можно определить переодичность регистра?
5.4 Что такое независимый регистр сведений?
5.5 Может ли «Регистр сведений» содержать несколько записей с одинаковыми ключами?
Содержание отчета
6.1 Название работы
6.3 Описание хода работы со снимками экрана
6.4 Ответы на контрольные вопросы
6.5 Выводы к работе
Список литературы
7.1 1С:Предприятие 8.1. Конфигурирование и администрирование. М: Фирма «1С», 2007. – 342 с.
Практическая работа №8
Перечисление
Цель работы
1.1 Изучить объект конфигурации «Перечисление»
На старт
Все мы используем в разработке такой объект как регистры сведений. Мы все о них знаем, все умеем. Среди регистров — это самый простой, понятный объект, в котором нет практически ничего лишнего. По крайней мере, так кажется до поры до времени.
Давным давно мной был создан блог DevelPlatform, в котором были статьи по разработке на платформе 1С, администрированию, онлайн-инструменты, а также немного о платформе .NET.
Больше года назад сайт был закрыт. Некоторые из его материалов будут реанимированы на Инфостарт.
В нескольких статьях будут представлены основные сведения о внутреннем устройстве регистров сведений, о SQL-запросах платформы при работе с ними и их изменение в зависимости от настроек регистра. Рассмотрим некоторые особенности с выходом платформы 8.3 и совсем немного об оптимизации работы с ними.
Материалы ниже не являются всеобъемлющей инструкцией или руководством. А на Инфостарт есть более полная статья с описанием множества нюансов этого типа объекта. Это публикация от Сергея Носкова — "Регистры сведений 1С. Как это устроено.". Здесь же Вы найдете самую общую информацию, а некоторые темы совсем не будут раскрыты. Однако, это может быть отличным началом к исследованию внутренних механизмов платформы.
Структура хранения
Поговорим о регистрах сведений. Но не о на настройках и их правильном использовании, а о скрытой от разработчиков стороне СУБД. Рассмотрим? как регистры сведений хранятся в базе данных.
Что там в базе
Структура таблиц, используемая для хранения данных и настроек регистра сведений, меняется в зависимости от настроек объекта метаданных в конфигураторе. Следующие настройки влияют на то, как будет платформ 1С:Предприятие 8.x хранить данные в базе:
Рассмотрим влияние этих настроек с простого примера. В тестовой базе у нас есть непериодический регистр сведений "Настройки":
Единственное измерение "СтаутсТовара" ссылается на перечисление, все ресурсы имеют примитивные типы. Структура хранения такого регистра ограничивается только одной таблицей в базе данных:
Как видно из рисунка, структура хранения такого регистра достаточно примитивна. Каждому полю регистра в дереве метаданных конфигурации соответствует поле таблицы на стороне СУБД.
Рассмотрим еще один простой пример.
Структура метаданных этого регистра также достаточно простая: измерение "Товар", ссылающееся на справочник "Товары", и ресурс "Статус", ссылающееся на перечисление "СтатусыТоваров". Отличие настроек этого регистра от предыдущего кроется в параметре "Периодичность", которая теперь установлена в значение "В пределах дня". Структура таблицы в базе для этого регистра будет следующей:
Кроме полей измерений и ресурсов в таблицу добавлено поле "Period", в котором хранится значение даты и времени записи. Вне зависимости от значения периодичности структура таблицы регистра не изменится. Если же обратно поменять периодичность в значение "Непериодический", то из структуры таблицы будет удалено поле "Period".
Если для регистра поставить настройку "Режим записи" в "Подчиненный регистратору", то в таблицу дополнительно добавится поле "RecorderRRef", в котором будет хранится ссылка на документ-регистратор, а также поле "LineNo" (Номер строки) и "Active" (Активность). Отдельно этот пример рассматривать не будем. Давайте лучше посмотрим на структуру периодического регистра сведений с включенной опцией хранения итогов среза последних:
Регистр с такими настройками использует две таблицы в базе данных. Первая — это основная таблица регистра:
Как раньше и было сказано, в таблице содержатся поля измерений и ресурсов регистра. Т.к. регистр подчинен регистратору, то в состав полей добавлено поле "RecorderRRef", в котором хранится ссылка на документ-регистратор. Периодичность у регистра установлена в "По позиции регистратора", но поле "Period" в таблице все равно осталось. При такой настройке в этом поле хранится дата и время документа.
Вторая таблица — это таблица итогов среза последних записей:
В ней хранятся последние записи регистра в разрезе периодов. В структуру таблицы входят измерения и ресурсы регистра, период, регистратор (если регистр подчинен регистратору) и реквизиты регистра (в нашем примере их нет).
Также бы выглядела и таблица итого среза первых, только хранила бы она срез первых записей в разрезе периодов. О плюсах использования таблиц итого регистров сведений мы поговорим позже.
Отдельно стоит упомянуть о таблице настроек хранения итогов регистра сведений. Для последнего примера эта таблица выглядит так (см. след. скриншот).
В таблице только одно поле, хранящее флаг включения итогов. Изменить эту настройку можно в режиме предприятия в управлении итогами:
Таблица настроек хранения итогов добавляется для регистра сведений, если значение периодичности регистра отличается от значения "Непериодический".
Рассмотрим пример формирования платформой таблиц итогов среза первых и среза последних.
Пример формирования таблиц итогов
Например, таблица движений регистра "Цены номенклатуры", который мы рассматривали в предыдущем примере, содержит следующие записи:
Тогда таблица итогов среза последних записей будет выглядеть так:
То есть в таблицу попали последние по периоду записи в разрезе измерений регистра. По такому же принципу формируется таблица итогов среза первых, только берутся самые первые записи в таблице движений:
Таким образом, таблицы итогов позволяют значительно ускорить выполнения запросов получения срезов последних / первых записей регистров. Подробнее об этом мы поговорим в следующей части статьи.
Пойдем дальше
Мы рассмотрели варианты хранения регистров сведений на стороне СУБД в зависимости от их настроек, а также познакомились со служебными таблицами регистра для хранения итогов и настроек хранения итогов. Стоит отметить, что возможность хранения итогов для регистров сведений появилась только в версии 8.3.
Далее мы отловим SQL Profiler’ом запросы, которые формирует платформа 1С:Предприятие к СУБД при работе с регистрами сведений.
Запросы платформы
Все запросы, которые формирует платформа для регистров сведений, можно разделить на два типа: для периодических регистров и непериодических. Начнем с простого примера запроса для непериодических регистров.
Непериодический регистр
В тестовой конфигурации у нас есть простой непериодический регистр "Настройки":
Если мы сделаем запрос к таблице регистра с отбором по полю "УчитыватьВДокументахПоступления", то получаем простейший SQL-запрос:
В запросе выбираются поля регистра, а в секции WHERE устанавливается отбор по полю. Рассмотрим примеры с периодическим регистром.
Периодический регистр
Тестовая база содержит периодический регистр:
Как было сказано ранее, такие регистры могут иметь на стороне СУБД несколько таблиц:
- Основная таблица регистра
- Таблицы итогов (одна или две, в зависимости от настроек итогов для регистра: итоги для среза первых и итоги для среза последних).
SQL-запрос к основной таблице итогов ничем не будет отличаться от запроса к таблице непериодического регистра. Другое дело запрос для получения среза последних/первых записей периодического регистра. Вот так, например, выглядит SQL-запрос для получения среза последних записей без установки параметра "Период":
Этот запрос используется платформой для получения среза последних записей. Принцип его работы прост: получаем макс. значение периода для записей в разрезе всех измерений, а дальше к этой таблице присоединяем записи из основной таблицы регистра. В результате мы получаем срез последних записей.
Аналогично выглядит запрос для получения среза первых, только в первом подзапросе получают не максимальное значение периода, а минимальное.
Из-за того, что в запросе присутствует несколько подзапросов и соединение с ними, оптимизатор СУБД не всегда может подобрать оптимальный план запроса, поэтому гарантировать стабильность выполнения этого запроса нельзя.
В версии 8.3 появились новые настройки, позволяющие избежать проблем с производительностью.
Особенности платформы 8.3
Версия 8.3 позволяет включить использование итогов среза первых и среза последних. Давайте рассмотрим какой запрос будет сформирован платформой для получения среза последних по итоговой таблице регистра сведений:
Как мы видим, для получения среза последних используется таблица итого. Вычисление макс./мин. значения периода для записей не выполняется. Такой запрос будет выполняться стабильней.
В примере, к подзапросу присоединяется левым соединением таблица справочника "Товары" для получения представления товара (Наименования).
Стоит заметить, что если срез последних получается в запросе без установки отбора по периоду (то есть текущий срез), то используется запрос выше. Если же поставить параметр "Период" для таблицы среза последних, то платформа будет использовать запрос аналогично запросы платформы 8.2. То есть таблица итогов не будет использоваться.
Далее будет рассмотрен пример написания собственного запроса получения среза последних / первых. Его можно использовать для ситуаций, когда нужно повысить стабильность выполнения запросов.
Свой запрос для среза последних
Написание собственного запроса для получения среза последних записей для 1С:Предприятия.
О чем идет речь
Ранее мы рассмотрели SQL-запросы, которые формирует платформа 1С:Предприятие при работе с регистрами сведений в зависимости от их настроек. Особый интерес вызывает запрос для получения среза первых / последних записей без использования таблицы итогов.
Как мы видим, в запросе используется соединение с подзапросом, что может стать причиной проблемы с производительностью из-за не оптимального плана запроса, который выберет оптимизатор СУБД. Это будет происходить не всегда, но 100% гарантии стабильности дать нельзя (подробнее о причинах неоптимальной работы с подзапросами будет идти речь в одной из следующих статей).
Поскольку мы не можем вмешиваться во внутренние механизмы платформы, то для решения этой проблемы самым простым ее вариантом будет написание собственного запроса на языке запросов платформы с использованием временных таблиц.
Пример запроса среза последних
Для получения среза последних записей напишем следующий запрос:
Во временную таблицу "ПоследниеЗаписи" мы получаем максимальные периоды с группировкой по необходимым измерениям (в нашем случае по изменению "Товар"). Во втором запросе, используя полученную таблицу максимальных периодов, мы находим записи в основной таблице движений по заданному измерению и периоду.
Если нужно поставить отбор, например, по товару, то запрос будет такой:
Отборы устанавливаются в той части запроса, где идет получение максимальных периодов по разрезам регистра сведений. Если мы посмотрим на SQL-запрос платформы в этом случае, то соединений с подзапросами мы не увидим:
1. Запрос получения макс. периодов
2. Получение значений ресурсов регистра для найденных периодов и измерений с использованием сформированной ранее временной таблицы
В результат мы получили запрос без использования подзапросов, вместо которых создается временная таблица. Конечно, на ее создание тратятся дополнительные ресурсы, но стабильность выполнения запроса гарантирована.
Срез первых записей
Отдельно рассматривать ситуацию с получением среза первых записей смысла нет, так как запрос будет практически один в один с предыдущим. Единственное отличие — получать нужно не максимальное значение периода в первом запросе, а минимальное значение.
Попробуйте самостоятельно написать такой запрос и поэкспериментировать с результатом.
Финиш
На этом небольшая заметка по внутреннему устройству регистров сведений подошла к концу. За бортом осталось множество вопросов:
- Устройство индексов регистра и их зависимость от настроек
- Как происходит запись в таблицы регистров
- Как работают управляемые блокировки для этого типа объектов
- Проблемы производительности при использовании итогов для среза первых / последних записей
- и другое.
Официальная документация, публикация от Сергея Носкова и Ваши собственные эксперименты всегда помогут ответить на все возникшие вопросы.
Многие программисты, знакомые с версией 7.7 и желающие освоить версию 8, спрашивают, куда делись периодические реквизиты справочников и периодические константы. А если их нет, то какой механизм их заменяет? В 1С:Предприятии 8 для хранения истории изменения значений предназначены периодические регистры сведений.
Вообще регистры сведений предназначены для хранения информации, развернутой по комбинации измерений. Главное отличие периодического регистра сведений от обычного заключается в том, что в нем присутствует дополнительное системное измерение "Период", имеющее тип "дата". Это позволяет получать не только текущие сведения об объекте, но также на любой момент времени.
Для периодического реквизита при создании указывается свойство "Периодичность" из следующих возможных значений:
- в пределах секунды,
- в пределах дня,
- в пределах месяца,
- в пределах квартала,
- в пределах года,
- по позиции регистратора (доступен, если режим записи у регистра — «Подчинение регистратору»).
Обратите внимание, что тип ресурса сведений может быть как примитивный (число, строка, дата, булево), так и ссылочный (СправочникСсылка, ДокументСсылка, ПеречислениеСсылка и т.д.). Более того, в регистре сведений можно хранить даже картинки и другие неструктурированные сведения, поскольку можно создать ресурс типа "ХранилищеЗначения".
Самый простой пример периодического регистра сведений — КурсыВалют. Этот регистр сведений хранит курсы всех валют на каждый день. Структура регистра представлена ниже:
Подробная информация о структуре регистра сведений КурсыВалют приведена в следующей таблице:
Измерения: | Валюты | тип "СправочникСсылка.Валюты", ведущее, запрет незаполненных значений |
Ресурсы: |
тип "число", длина 10, точность 0, неотрицательное
Данные в этот регистр сведений можно вводить вручную с помощью формы списка.
ВНИМАНИЕ. В регистр сведений с определенной периодичностью, не равной "По позиции регистратору", нельзя ввести две записи с одинаковым набором измерений и периодом, т.е. нельзя ввести два курса одной валюты в один день. Если периодичность записи регистра имеет значение "По позиции регистратора", то ключ уникальности записи также содержит и ссылку на документ-регистратор, т.е. в таком регистре не может существовать две записи с одинаковым набором измерений, периодом и регистратором. Это неотъемлемое свойство регистра сведений, отличающее его от остальных регистров. |
Добавление новых записей в регистр сведений, а также перебор имеющихся записей производится стандартным для всех регистров способом. В данном разделе мы рассмотрим только самое важное — получение информации из периодического регистра на определенный момент времени.
Обращение к периодическим сведениям с помощью методов
Объект РегистрСведенийМенеджер позволяет обращаться к «итогам» регистра. Под «итогами» периодического регистра сведений понимаются первые или последние значения ресурсов по указанным измерениям. При этом применяются следующие методы:
Метод | Описание |
---|---|
Возвращает в виде структуры значения ресурсов одной записи регистра, соответствующей указанным значениям всех (!) измерений регистра и периоду.
Этот метод возвращает актуальное значение ресурсов, действовавшее на заданную дату. Если он не находит запись в регистре по данной комбинации измерений точно на заданный период, то возвращается структура, содержащая значения ресурсов ближайшей более поздней записи.
Этот метод действует аналогично методу ПолучитьПоследнее, но если записи на данный момент не находится, то возвращается структура, содержащая значения ресурсов ближайшей более ранней записи.
Эти методы аналогичны методам ПолучитьПоследнее и ПолучитьПервое соответственно , но при их использовании, как правило, не указывается одно или несколько измерений. В результате возвращается не структура, как в предыдущих случаях, а таблица значений , заполненная данными найденных записей регистра сведений.
При вызове методов ПолучитьПервое, ПолучитьПоследнее, СрезПервых и СрезПоследних первый параметр может иметь тип "дата", МоментВремени или Граница, но его можно вообще не указывать, тогда будут найдены значения ресурсов из самой первой или последней записи регистра соответственно.
Продемонстрируем использование этих методов на примерах:
Пример 1. Получение курса валюты точно на заданную дату (если записи именно на эту дату нет, то в элементах структуры будут пустые значения).
Пример 2. Получение актуального курса валюты на заданную дату (если записи именно на эту дату нет, то будет найдена ближайшая более поздняя запись)
Пример 3. Получение актуальных курсов всех валют на заданную дату (отбор не указан, т.е. мы хотим получить сведения по всем значениям измерений).
Пример 4. Получение актуальных оптовых цен на товары (указан отбор по измерению "ТипЦен")
Обращение к периодическим сведениям с помощью запросов
Для получения данной информации служит виртуальная таблица среза последних/первых записей регистра сведений. По структуре она полностью идентична основной таблице регистра сведений и содержит следующие поля:
Поле | Описание |
---|---|
Набор полей, содержащий значения измерений регистра. Имена полей соответствуют именам измерений. | |
Набор полей, содержащий значения реквизитов регистра. | |
Набор полей, который содержит значения ресурсов регистра. | |
Активность | Содержит признак активности записи. Записи, для которых значение данного свойства установлено в Ложь, не будут учитываться при получении «первых» или «последних» записей регистра, а также при получении сведений на определенный момент времени. |
МоментВремени | Содержит момент времени записи регистра. |
НомерСтроки | Содержит номер строки, определяемый как порядковый номер записи в наборе записей. |
Период | Содержит период, к которому относится запись регистра. |
Регистратор | Содержит ссылку на документ-регистратор движения. |
При обращении к виртуальным таблицам СрезПервых и СрезПоследних можно указать следующие параметры:
Параметр | Описание |
---|---|
Дата | Указывается дата или момент времени, на которые будут получены сведения. Если параметр не задан, будут выбираться наиболее поздние/ранние записи. |
Условие | Указывается условие на языке запросов. Оно будет использовано для ограничения состава записей, среди которых будут выбираться наиболее поздние/ранние. Условие будет применяться к исходным записям, а не к уже отобранным. |
Приведем примеры обращения к записям регистра сведений с помощью запросов:
Пример 1. Выбрать все записи регистра сведений
Пример 2. Получить актуальный курс одной валюты на заданную дату
Пример 3. Выбрать актуальные курсы всех валют на заданную дату
Пример 4. Получить актуальный прайс-лист на заданную дату (указан определенный тип цен, например, "Розничная")