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

Особенность получения среза последних записей в регистре сведений

Исходные данные

В тестовой конфигурации у нас есть периодический регистр сведений «ЦеныНоменклатуры» со следующими исходными данными:

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

На рисунке представлена также структура метаданных регистра. Как мы видим, регистр содержит измерение «Товар» с типом ссылки на справочник «Товары», а также числовой ресурс «Цена» и реквизит «СтараяЦена».

Допустим, в отчете нам нужно получить срез последних записей для товаров и их цен с условием, что старая цена меньше или равно 50.

Два варианта запроса

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

Обратите внимание на условие в секции «ГДЕ». В этом и заключается главная ошибка! Этот запрос не вернет ни одной записи, и вот почему: при использовании виртуальных таблиц, в нашем случае «СрезПоследних», сначала выполняется выборка данных из базы по условиям, описанным в виртуальной таблице, а затем выполняются действия, описанные в тексте запроса (группировки, условия в секции «ГДЕ», сортировка и т.д.).

Поэтому в нашем примере запрос и не возвращает результат. Сначала он получает срез последних, а уже после устанавливает условие на реквизит «СтараяЦена». Вот так это выглядит на схеме:

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

Чтобы правильно решить задачу, условие на реквизит «СтараяЦена» нужно перенести в условия виртуальной таблицы. Вот так будет выглядеть правильный текст запроса:

Теперь запрос получит правильные данные, поскольку срез последних цен будет получать уже с учетом условия по реквизиту «СтараяЦена».

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

Результаты

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

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

Источник

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

рубрики: Виртуальные таблицы | Дата: 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С:ИТС

Источник

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

Почему срез последних в запросе возвращает две записи по одному измерению?
Мне всегда казалось что такой запрос должен возвращать одну запись.

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

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

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

Вот что написано в документации про регистр сведений:

А вот что про регистр накопления:

(9) чем отличаются фразы?
1. По каждой комбинации измерений
2. По каждой комбинации измерений, выбранных в запросе

И, кстати, вот что написано в синтакс-помощнике: «Записи подбираются для каждого сочетания из ВСЕХ Имеющихся значений измерений регистра.»

Т.е. не из выбранных, а имеющихся

(11)Если у вы изначально знаете по каким измерениям вам надо срез последних (надо понимать, что б получить 1 запись, надо указать все измерения) то срез последних всё же подойдет.
А если вы не знаете по каким измерениям вам надо срез(знаете только 1 измерение), будьте готовы получить надцать записей. Ведь программа не может за вас додумать что вам конкретно надо, а уже эти записи фильтруйте/группируйте как хотите.

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

Теперь то я буду аккуратнее обращаться со срезом последних =)

(15)Всё верно, вот только если четко задать эти измерения то получишь 1 строку 🙂

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

Источник

Срез последних в запросе за период, с периодичностью месяц

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

1. Задаем параметры в шапке документа (Номенклатура, ДатаНачала, ДатаОкончания).

3. Табличное поле заполняется последней ценой каждого месяца периода.

Скачать файлы

Специальные предложения

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

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

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

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

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

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

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

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

Если нужен срез последних, то тоже нужно поменять запрос так, как я сказал. Иначе ваша ошибка будет размножаться.

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

Автор комментария (6) не применял данное решение, а написал свое собственное, насколько я смог понять.

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

Источник

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

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