1с получитьпоследнее не работает

СрезПоследних ИЛИ ПолучитьПоследнее ?

Прошу прощения.
В типовом Срезе отбор по измерениям (даже без пропусков) также попадает в остаточный индексный скан.

Да, метод Ненавижу выигрывает всегда.
Просто ему не надо добавлять индекс на ресурс.

Особенности методов менеджера регистра сведений

У объекта РегистрСведенийМенеджер имеется набор методов для доступа к данным регистра сведений.

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

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

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

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

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

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

Источник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Особенности методов менеджера регистра сведений

У объекта РегистрСведенийМенеджер имеется набор методов для доступа к данным регистра сведений.

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

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

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

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

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

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

Источник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Читайте также:  Где отремонтировать клавиатуру ноутбука
Оцените статью