Что значит срез последних

Профессия — 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

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

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

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

Один комментарий на «“Срез последних”»

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

Источник

Срез первых и срез последних

Тип: Дата; МоментВремени; Граница.
Определяет момент времени, заканчивая которым необходимо выбрать записи.
Если параметр не указан, то будут возвращены значения ресурсов самой последней записи регистра.
Тип: Структура.
Структура, содержащая отбор по измерениям и реквизитам регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры — задает отбираемое по данному измерению значение.
Структура дополнительно может иметь элементы, соответствующие разделителям регистра с уровнем разделения НезависимоИСовместно, в состав которых входит регистр. Если такой элемент структуры задан для используемого в сеансе разделителя, значение для этого элемента должно совпадать со значением разделителя, иначе будет вызвано исключение.
Если параметр не указан, то отбор не используется.
Возвращаемое значение:

Тип: ТаблицаЗначений.
Таблица значений, заполненная данными найденных записей регистра сведений.
Описание:

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

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Примечание:

Применим только для периодических регистров сведений.
Пример:

Тип: Дата; МоментВремени; Граница.
Определяет момент времени, начиная с которого необходимо выбрать записи.
Если параметр не указан, то будут получены записи без ограничения по времени.
Тип: Структура.
Структура, содержащая отбор по измерениям и реквизитам регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры — задает отбираемое по данному измерению значение.
Структура дополнительно может иметь элементы, соответствующие разделителям регистра с уровнем разделения НезависимоИСовместно, в состав которых входит регистр. Если такой элемент структуры задан для используемого в сеансе разделителя, значение для этого элемента должно совпадать со значением разделителя, иначе будет вызвано исключение.
Если параметр не указан, то отбор не используется.
Возвращаемое значение:

Тип: ТаблицаЗначений.
Таблица значений, заполненная данными найденных записей регистра сведений.
Описание:

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

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Примечание:

Применим только для периодических регистров сведений.
Пример:

Источник

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

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

Срез последних можно получить несколькими способами:

  • При помощи метода СрезПоследних менеджера регистра сведений;
  • При помощи запроса;

Получить срез последних на дату при помощи метода СрезПоследних

Рассмотрим на примере получение среза на дату по регистру ЦеныНоменклатуры, по конкретной заданной номенклатуре при помощи метода СрезПоследних.

  • КонецПериода — дата на которую делается срез;
  • Отбор — структура с отбором по измерениям регистра;

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

Пример. Пусть в переменной Номенклатура хранится позиция номенклатуры по которой необходимо получить данные, а в переменной Дата хранится дата на которую необходимо получить цены. Данный пример подходит для конфигурации Бухгалтерия (ред. 2.0 / 3.0).

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

Рассмотрим пример среза последних по регистру сведений в запросе. Для примера возьмем регистр ЦеныНоменклатуры из конфигурации Бухгалтерия (ред. 2.0 / 3.0). В запросе будем использовать виртуальную таблицу СрезПоследних нужного регистра. В первый параметр таблицы передается дата, на которую необходим срез, во втором можно задать произвольное условие для полей регистра.

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

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

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

Вкратце принцип действия данного механизма следующий:

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

Если хотите подробней узнать о периодических регистрах сведений зайдите на сайт 1С:ИТС

Источник

Получение данных из регистра сведений в 1С 8.3

Выборка из регистра сведений

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

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

Для выборки из подчиненного регистра сведений используется метод ВыбратьПоРегистратору. Параметром передается ссылка на регистратор:

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

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

Получение данных из регистра сведений

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

Если регистр сведений периодический, то первым параметром нужно передать период записи. Если нет ни одной записи с таким периодом, то будет получена запись с минимальным периодом:

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

Если попытаться получить данные на 15 апреля методом Получить, то будет получена нулевая цена, потому что именно за 15 апреля нет записи в регистре сведений:

Чтобы получить последнее значение ресурсов регистра сведений на указанную дату можно воспользоваться методом ПолучитьПоследнее:

Также есть обратный метод ПолучитьПервое, который получает первое установленное значение ресурса после переданной параметром даты:

Срез последних

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

Добавим в регистр еще несколько записей:

Получим срез на 15 апреля:

Будет получена следующая таблица значений:

Период Товар ТипЦен Цена
10.04.2021 Тумбочка Оптовая 20
10.04.2021 Шкаф Оптовая 200

Алгоритм выполнения данного метода следующий:

    Получается выборка из регистра сведений, у которых поле Период

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

Рассмотрим использование данной таблицы на примере:

В параметрах можно использовать произвольные отборы по любым измерениям, реквизитам и ресурсам:

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

Также отбор через параметры виртуальной таблицы и в предложении ГДЕ может приводить к разным результатам запроса. Например, нужно получить все товары, на которые когда либо была установлена цена в 100 рублей. Если установить отбор в параметрах виртуальной таблицы:

То в результате будет получен Шкаф, на который была установлена цена в 100 рублей 1 апреля:

А если установить отбор в предложении ГДЕ:

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

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

Итоги регистра сведений

В настройках периодического регистра сведений, на закладке Прочее можно включить использование итогов Разрешить итоги: срез первых и Разрешить итоги:срез последних:

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

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

Источник

Оцените статью