Срез последних как сделать

Срез последних как сделать

Срез последних на каждую дату в запросе

Получение актуальных данных из регистра сведений на дату, получаемую в самом запросе Автор статьи: Rovan | Редакторы: Гений 1С, acsent, Defender aka LINN, Asmody, BabySG, ILM, Schwomulurn, АЛьФ, Vladal, Волшебник, Gimalaj
Последняя редакция №29 от 12.08.19 | История
URL: http://kb.mista.ru/article.php?id=92

Ключевые слова: СрезПоследних, внутри, запрос, периодический, регистр сведений

Существует несколько способов получить нужные данные.

Непосредственно в запросе

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

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

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

Для общего развития:
Что есть срез последних в платформе?

В зависимости от периодичности регистра (по времени, по позиции регистратора) ВТ разворачивается в
следующий запрос:
1. По времени (год, месяц, . секунда)

2. По позиции регистратора
В данном случае нужно еще раз обернуть выборку

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

Система компоновки данных

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

Для примера сделаем отчет — список заказов покупателей.

Для этого создадим набор данных «Документы» — запрос:

Для того, чтобы потом успешно связать наборы данных, в запрос необходимо включить поля «Дата» и
«ВалютаДокумента». Чтобы они не появлялись в списке доступных полей, если это необходимо, их можно
убрать, установив флажки ограничений в таблице «Поля» схемы компоновки. В остальном запрос вряд ли
требует комментариев.
http://defender_aka_linn.users.photofile.ru/photo/defender_aka_linn/150041386/154871726.jpg

Для того, чтобы получить информацию о курсах валют, добавим второй набор данных — запрос «Курсы
валют»:

В этом запросе имеются 2 параметра: «Дата» и «Валюта». Эти параметры будут установлены СКД при
соединении наборов. Кроме того, параметр «Дата» указан в выбранных полях — это нужно для соединения
таблиц.
В этом запросе необходимо отключить галочку «Автозаполнение».
Для ненужный полей «Дата» и «Валюта» также устанавливаем флажки ограничений, чтобы они не появлялись
в доступных полях.
http://defender_aka_linn.users.photofile.ru/photo/defender_aka_linn/150041386/154871728.jpg

Перейдем к соединению наборов. На странице «Связи наборов данных» добавим 2 связи:
1. Источник связи — набор «Документы», приемник — набор «Курсы валют». Выражение источник — «Дата»,
выражение приемник — «Дата», Параметр — «Дата»
2. Источник связи — набор «Документы», приемник — набор «Курсы валют». Выражение источник —
«ВалютаДокумента», выражение приемник — «Валюта», Параметр — «Валюта»
http://defender_aka_linn.users.photofile.ru/photo/defender_aka_linn/150041386/154871729.jpg

Главное здесь — параметры связи. При соединении наборов данных, если указан параметр, СКД передает в подчиненный набор (в нашем случае — запрос «Курсы валют») параметры, указанные в соединении.
Значениями параметров будут значения соответствующих полей набора-источника.

Источник

Профессия — 1С

  • Excel (2)
  • Интеграция (6)
  • Виртуальные таблицы (3)

рубрики: Виртуальные таблицы | Дата: 3 февраля, 2017

Для периодических регистров сведений доступны две виртуальные таблицы: СрезПервых и СрезПоследних Рассмотрим работу с этими виртуальными таблицами с использованием языка запросов 1С. Гораздо чаще применяется СрезПоследних, поэтому с него и начнем.

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


В регистре имеются следующие записи

Период Товар Поставщик Сумма
01.01.2017 Карандаш ООО «Леспром» 10
25.01.2017 Карандаш ООО «Леспром» 15
01.01.2017 Карандаш ПАО «Канцтовары» 27
01.02.2017 Карандаш ПАО «Канцтовары» 31
03.01.2017 Ручка ПАО «Канцтовары» 137
01.02.2017 Ручка ПАО «Канцтовары» 145

Для начала получим срез последних без использования параметров выполнив вот такой запрос

Так как параметры не указаны срез выполняется на текущую дату – 01.02.2017. В результате получаем вот такую таблицу

Период Товар Поставщик Сумма
25.01.2017 Карандаш ООО «Леспром» 15
01.02.2017 Карандаш ПАО «Канцтовары» 31
01.02.2017 Ручка ПАО «Канцтовары» 145

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

Перед выполнением запроса в него конечно же надо передать параметр &ДатаСреза. Теперь результат запроса будет выглядеть так

Период Товар Поставщик Сумма
01.01.2017 Карандаш ООО «Леспром» 10
01.01.2017 Карандаш ПАО «Канцтовары» 27
03.01.2017 Ручка ПАО «Канцтовары» 137

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

В итоге получим только одну запись

Период Товар Поставщик Сумма
01.01.2017 Карандаш ПАО «Канцтовары» 27

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

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

Источник

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

Многие программисты, знакомые с версией 7.7 и желающие освоить версию 8, спрашивают, куда делись периодические реквизиты справочников и периодические константы. А если их нет, то какой механизм их заменяет? В 1С:Предприятии 8 для хранения истории изменения значений предназначены периодические регистры сведений.

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

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

  • в пределах секунды,
  • в пределах дня,
  • в пределах месяца,
  • в пределах квартала,
  • в пределах года,
  • по позиции регистратора (доступен, если режим записи у регистра — «Подчинение регистратору»).

Обратите внимание, что тип ресурса сведений может быть как примитивный (число, строка, дата, булево), так и ссылочный (СправочникСсылка, ДокументСсылка, ПеречислениеСсылка и т.д.). Более того, в регистре сведений можно хранить даже картинки и другие неструктурированные сведения, поскольку можно создать ресурс типа «ХранилищеЗначения».

Самый простой пример периодического регистра сведений — КурсыВалют. Этот регистр сведений хранит курсы всех валют на каждый день. Структура регистра представлена ниже:

Подробная информация о структуре регистра сведений КурсыВалют приведена в следующей таблице:

Измерения: Валюты тип «СправочникСсылка.Валюты», ведущее, запрет незаполненных значений
Ресурсы: тип «число», длина 15, точность 4, неотрицательное
тип «число», длина 10, точность 0, неотрицательное
Периодичность В пределах дня
Режим записи Независимый

Данные в этот регистр сведений можно вводить вручную с помощью формы списка.

ВНИМАНИЕ. В регистр сведений с определенной периодичностью, не равной «По позиции регистратору», нельзя ввести две записи с одинаковым набором измерений и периодом, т.е. нельзя ввести два курса одной валюты в один день. Если периодичность записи регистра имеет значение «По позиции регистратора», то ключ уникальности записи также содержит и ссылку на документ-регистратор, т.е. в таком регистре не может существовать две записи с одинаковым набором измерений, периодом и регистратором. Это неотъемлемое свойство регистра сведений, отличающее его от остальных регистров.

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

Обращение к периодическим сведениям с помощью методов

Объект РегистрСведенийМенеджер позволяет обращаться к «итогам» регистра. Под «итогами» периодического регистра сведений понимаются первые или последние значения ресурсов по указанным измерениям. При этом применяются следующие методы:

Возвращает в виде структуры значения ресурсов одной записи регистра, соответствующей указанным значениям всех (!) измерений регистра и периоду.

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

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

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

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

Продемонстрируем использование этих методов на примерах:

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

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

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

Пример 4. Получение актуальных оптовых цен на товары (указан отбор по измерению «ТипЦен»)

Обращение к периодическим сведениям с помощью запросов

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

Метод Описание
Поле Описание
Набор полей, содержащий значения измерений регистра. Имена полей соответствуют именам измерений.
Набор полей, содержащий значения реквизитов регистра.
Набор полей, который содержит значения ресурсов регистра.
Активность Содержит признак активности записи. Записи, для которых значение данного свойства установлено в Ложь, не будут учитываться при получении «первых» или «последних» записей регистра, а также при получении сведений на определенный момент времени.
МоментВремени Содержит момент времени записи регистра.
НомерСтроки Содержит номер строки, определяемый как порядковый номер записи в наборе записей.
Период Содержит период, к которому относится запись регистра.
Регистратор Содержит ссылку на документ-регистратор движения.

При обращении к виртуальным таблицам СрезПервых и СрезПоследних можно указать следующие параметры:

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

Приведем примеры обращения к записям регистра сведений с помощью запросов:

Пример 1. Выбрать все записи регистра сведений

Пример 2. Получить актуальный курс одной валюты на заданную дату

Пример 3. Выбрать актуальные курсы всех валют на заданную дату

Пример 4. Получить актуальный прайс-лист на заданную дату (указан определенный тип цен, например, «Розничная»)

Источник

Читайте также:  Как сделать блестящие поделки
Поделиться с друзьями
Ответ и точка