Что такое срез первых и срез последних 1с

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

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

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

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

Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 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с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1с

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

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

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

Источник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Что такое срез первых и срез последних 1с

Описание:

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

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

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

Если регистр не периодический, то поле «Период» для него не создается. В приведенном примере регистр «ЦеныКонкурентов» может быть непериодическим, если мы не хотим хранить историю изменения цен, а хотим иметь только актуальные цены. Тогда функция регистра сможет ответить на вопрос «какая сейчас цена у такого-то конкурента на такой-то товар», но не сможет ответить на вопрос «какая была цена у такого-то конкурента на такой-то товар в начале года».

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

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

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

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

Эти два варианта влияют на способ внесения информации, а не на основную логику работы регистра.

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

Источник

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

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

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

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

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

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

Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1с

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

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

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

Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1с

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Регистры сведений. За кулисами

На старт

Больше года назад сайт был закрыт. Некоторые из его материалов будут реанимированы на Инфостарт.

В нескольких статьях будут представлены основные сведения о внутреннем устройстве регистров сведений, о SQL-запросах платформы при работе с ними и их изменение в зависимости от настроек регистра. Рассмотрим некоторые особенности с выходом платформы 8.3 и совсем немного об оптимизации работы с ними.

Структура хранения

Поговорим о регистрах сведений. Но нЧто такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1се о на настройках и их правильном использовании, а о скрытой от разработчиков стороне СУБД. Рассмотрим? как регистры сведений хранятся в базе данных.

Что там в базе

Структура таблиц, используемая для хранения данных и настроек регистра сведений, меняется в зависимости от настроек объекта метаданных в конфигураторе. Следующие настройки влияют на то, как будет платформ 1С:Предприятие 8.x хранить данные в базе:

Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1с

Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1сРассмотрим влияние этих настроек с простого примера. В тестовой базе у нас есть непериодический регистр сведений «Настройки»:

Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1сЕдинственное измерение «СтаутсТовара» ссылается на перечисление, все ресурсы имеют примитивные типы. Структура хранения такого регистра ограничивается только одной таблицей в базе данных:

Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1с

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

Рассмотрим еще один простой пример.

Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1сСтруктура метаданных этого регистра также достаточно простая: измерение «Товар», ссылающееся на справочник «Товары», и ресурс «Статус», ссылающееся на перечисление «СтатусыТоваров». Отличие настроек этого регистра от предыдущего кроется в параметре «Периодичность», которая теперь установлена в значение «В пределах дня». Структура таблицы в базе для этого регистра будет следующей:

Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1сКроме полей измерений и ресурсов в таблицу добавлено поле «Period», в котором хранится значение даты и времени записи. Вне зависимости от значения периодичности структура таблицы регистра не изменится. Если же обратно поменять периодичность в значение «Непериодический», то из структуры таблицы будет удалено поле «Period».Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1с

Если для регистра поставить настройку «Режим записи» в «Подчиненный регистратору», то в таблицу дополнительно добавится поле «RecorderRRef», в котором будет хранится ссылка на документ-регистратор, а также поле «LineNo» (Номер строки) и «Active» (Активность). Отдельно этот пример рассматривать не будем. Давайте лучше посмотрим на структуру периодического регистра сведений с включенной опцией хранения итогов среза последних:

Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1с

Как раньше и было сказано, в таблице содержатся поля измерений и ресурсов регистра. Т.к. регистр подчинен регистратору, то в состав полей добавлено поле «RecorderRRef», в котором хранится ссылка на документ-регистратор. Периодичность у регистра установлена в «По позиции регистратора», но поле «Period» в таблице все равно осталось. При такой настройке в этом поле хранится дата и время документа.

Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1с

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

Также бы выглядела и таблица итого среза первых, только хранила бы она срез первых записей в раЧто такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1сзрезе периодов. О плюсах использования таблиц итого регистров сведений мы поговорим позже.

Отдельно стоит упомянуть о таблице настроек хранения итогов регистра сведений. Для последнего примера эта таблица выглядит так (см. след. скриншот).

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

Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1с

Таблица настроек хранения итогов добавляется для регистра сведений, если значение периодичности регистра отличается от значения «Непериодический».

Рассмотрим пример формирования платформой таблиц итогов среза первых и среза последних.

Пример формирования таблиц итогов

Например, таблица движений регистра «Цены номенклатуры», который мы рассматривали в предыдущем примере, содержит следующие записи:

Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1сТогда таблица итогов среза последних записей будет выглядеть так:

Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1сТо есть в таблицу попали последние по периоду записи в разрезе измерений регистра. По такому же принципу формируется таблица итогов среза первых, только берутся самые первые записи в таблице движений:

Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1сТаким образом, таблицы итогов позволяют значительно ускорить выполнения запросов получения срезов последних / первых записей регистров. Подробнее об этом мы поговорим в следующей части статьи.

Пойдем дальше

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

Далее мы отловим SQL Profiler’ом запросы, которые формирует платформа 1С:Предприятие к СУБД при работе с регистрами сведений.

Запросы платформы

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

Непериодический регистр

В тестовой конфигурации у нас есть простой непериодический регистр «Настройки»:

Если мы сделаем запрос к таблице регистра с отбором по полю «УчитыватьВДокументахПоступления», то получаем простейший SQL-запрос:

В запросе выбираются поля регистра, а в секции WHERE устанавливается отбор по полю. Рассмотрим примеры с периодическим регистром.

Периодический регистрЧто такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1с

Тестовая база содержит периодический регистр:

Как было сказано ранее, такие регистры могут иметь на стороне СУБД несколько таблиц:

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

Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1с

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

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

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

В версии 8.3 появились новые настройки, позволяющие избежать проблем с производительностью.

Особенности платформы 8.3

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

Что такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1с

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

В примере, к подзапросу присоединяется левым соединением таблица справочника «Товары» для получения представления товара (Наименования).

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

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

Свой запрос для среза последних

Написание собственного запроса для получения среза последних записей для 1С:Предприятия.

О чем идет речь

Ранее мы рассмотрели SQL-запросы, которые формирует платформа 1С:Предприятие при работе с регистрами сведений в зависимости от их настроек. Особый интерес вызывает запрос для получения среза первых / последних записей без использования таблицы итогов.

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

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

Пример запроса среза последних

Для получения среза последних записей напишем следующий запрос:

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

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

Отборы устанавливаются в той части запроса, где идет получение максимальных периодов по разрезам регистра сведений. Если мы посмотрим на SQL-запрос платформы в этом случае, то соединений с подзапросами мы не увидим:

1. Запрос получения макс. периодов

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

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

Срез первых записей

Попробуйте самостоятельно написать такой запрос и поэкспериментировать с результатом.

ФинишЧто такое срез первых и срез последних 1с. Смотреть фото Что такое срез первых и срез последних 1с. Смотреть картинку Что такое срез первых и срез последних 1с. Картинка про Что такое срез первых и срез последних 1с. Фото Что такое срез первых и срез последних 1с

На этом небольшая заметка по внутреннему устройству регистров сведений подошла к концу. За бортом осталось множество вопросов:

Официальная документация, публикация от Сергея Носкова и Ваши собственные эксперименты всегда помогут ответить на все возникшие вопросы.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *