Перейти к содержимому

Что такое срез последних по регистру сведений 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

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

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

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

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

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

1. Методы менеджера регистра сведений. 2. Запрос регистра сведений. При использовании технологии хранения информации в базе данных, иногда требуется не только знать актуальную информацию на данный момент, но и то какое значение было актуальным в определенное время. Поэтому в данной статье мы поговорим о периодических регистрах сведений, которые обеспечивают именно эту возможность. Для более предметного рассмотрения на примерах будет использоваться регистр “ЦеныНоменклатуры”, но это же применимо и к другим периодическим регистрам сведений. Прежде всего, необходимо понимать, что такое измерения, и что такое ресурсы. Измерения – это то, в разрезе чего хранится информация. То есть в данном случае мы смотрим цены в разрезе номенклатуры и типов цен. Соответственно, номенклатура и тип цен являются измерениями. Ресурсы непосредственно хранят интересующую нас информацию. Мы хотим знать цену для определенной номенклатуры. Следовательно, цена – это ресурс. Помимо этого, надо понимать, что такое периодичность. Именно эта возможность регистра сведений позволяет хранить не только фактическую информацию на данный момент, но и узнавать интересующие нас значения в разрезе времени. Получить срез последних на дату из регистра сведений можно двумя способами: с помощью метода менеджера регистра сведений и с помощью запроса регистра сведений.

1. Методы менеджера регистра сведений

Результат = РегистрыСведений.ИмяРегистраСведений.СрезПоследних (, ); Конец периода – Дата среза. Отбор – отбор по измерениям регистра сведений (Структура). Результат – Итог (Таблица значений) Подобным образом работает метод: Результат = РегистрыСведений.ИмяРегистраСведений.ПолучитьПоследнее (, ).

2. Запрос регистра сведений

Так как мы работаем с периодическим регистром сведений, у нас появляется возможность работать с двумя виртуальными таблицами: “СрезПервых” и “СрезПоследних”. Таблицы СрезПервых и СрезПоследних
Таблицы СрезПервых и СрезПоследних
Соответственно, работая с ними, можно получить необходимую Вам информацию. Нас интересует “СрезПоследних”. При выведении данной виртуальной таблицы регистра с помощью запроса в результате будет последнее значение ресурса, принадлежащее измерению. Но, к примеру, нам необходимо узнать, какая цена была в конкретный день. В случае получения среза на дату необходимо указать в запросе дату. Дату в запросе указываем в параметрах виртуальной таблицы.
Как указать дату в запросе?
Как указать дату в запросе?
Таким образом меняя этот параметр можно выводить срез на разные даты. В дальнейшем можно вносить дополнительные настройки для конкретизации выводимых данных, но это уже другая история. Зная вышеперечисленные способы, можно подобрать именно тот, который подходит именно под Вашу задачу или Ваш конкретный случай. Специалист компании «Кодерлайн» Романенков Марк

Вас могут заинтересовать следующие статьи:

94 [PROP_CODE] => TAGS2 [TITLE] => Вас могут заинтересовать следующие семинары: ) —> 95 [PROP_CODE] => TAGS [TITLE] => Вас могут заинтересовать следующие вебинары: ) —> Как сделать в 1С [1] => 1С: Конвертация данных [2] => Конвертация данных [3] => Обмен между базами [4] => Закрытие месяца [5] => Оценка задач [6] => Отчеты в 1С [7] => Моделирование [8] => HTTP [9] => Управление проектами [10] => БУ [11] => com-объекты [12] => 1С: WMS Управление складом [13] => РСБУ [14] => 1С: Сценарное тестирование [15] => Запросы 1С [16] => LINUX [17] => WEB [18] => Оптимизация [19] => 1С:Зарплата и Управление Персоналом [20] => Excel [21] => 1С: ERP [22] => ADO [23] => 1С:Управление производственным предприятием [24] => Внедрение [25] => Продажи [26] => Отчетность [27] => 1С: Розница [28] => 1С: CRM [29] => 1С:Бухгалтерия [30] => 1С:Комплексная автоматизация [31] => Производство [32] => Интеграция 1С [33] => Налоги [34] => Отпуск [35] => MS SQL Server [36] => Расширение конфигурации [37] => МСФО [38] => СКД [39] => Word [40] => WEB-сервисы 1С [41] => Внедрение ERP [42] => Перенос данных [43] => Торговое оборудование [44] => Лизинг [45] => 1С:Управление нашей фирмой [46] => Администрирование 1С [47] => 1С: Колледж [48] => Правила обмена [49] => 1С: Платформа ) —>

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

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

РегистрСведенийМенеджер.<Имя регистра сведений>.СрезПоследних (InformationRegisterManager.<Имя регистра сведений>.SliceLast)
РегистрСведенийМенеджер. <Имя регистра сведений>(InformationRegisterManager.<Имя регистра сведений>)
СрезПоследних (SliceLast)
Синтаксис:

Тип: Дата; МоментВремени; Граница.
Определяет момент времени, заканчивая которым необходимо выбрать записи.
Если параметр не указан, то будут возвращены значения ресурсов самой последней записи регистра.
(необязательный)

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

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

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

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

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

МаркетингЦен = РегистрыСведений.МаркетингЦен;
ТекущиеЦеныКонкурентов = МаркетингЦен.СрезПоследних(ТекущаяДата());

РегистрСведенийМенеджер.<Имя регистра сведений>.СрезПервых (InformationRegisterManager.<Имя регистра сведений>.SliceFirst)
РегистрСведенийМенеджер. <Имя регистра сведений>(InformationRegisterManager.<Имя регистра сведений>)
СрезПервых (SliceFirst)
Синтаксис:

Тип: Дата; МоментВремени; Граница.
Определяет момент времени, начиная с которого необходимо выбрать записи.
Если параметр не указан, то будут получены записи без ограничения по времени.
(необязательный)

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

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

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

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

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

МаркетингЦен = РегистрыСведений.МаркетингЦен;
ОбновленныеСегодняЦены = МаркетингЦен.СрезПервых(ТекущаяДата());

Чтение(СрезПоследних) и Запись Регистра Сведений подчиненного регистратору(Обработка проведения)

Для чтения данных из регистра сведений необходимо создать новый отбор и воспользоваться методами СрезПервых или СрезПоследних или использовать запрос как показано в примере обработки далее. Пример кода иллюстрирует эти методы:
Код 1C v 8.х

 Отбор = Новый Структура("ТипЦен, Номенклатура"); 
Отбор.ТипЦен = ТипЦены; // Какой тип цены
Отбор.Номенклатура = Номенклатура; // Для какой номенклатуры
// Цена в регистре сведений до Рабочей даты включительно
Цена = РегистрыСведений.ЦеныНоменклатуры.СрезПоследних( РабочаяДата(), Отбор);

Для записи в подчиненный регистратору регистр сведений Цены номенклатуры 1С использует механизмы проведения, а именно процедуру Обработка Проведения, которые можно сформировать в конфигураторе, используя помощник — конструктор движений:
Код 1C v 8.х

Аренда 1С в облаке

 Процедура Обработка Проведения(Отказ, Режим) 
Для Каждого ТекСтрокаТовары Из Товары Цикл
// регистр Цены Номенклатуры
Движение = Движения.ЦеныНоменклатуры.Добавить();
Движение.Период = Дата;
Движение.ТипЦен = ТекСтрокаТовары.ТипЦен;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.ХарактеристикаНоменклатуры = ТекСтрокаТовары.ХарактеристикаНоменклатуры;
Движение.Валюта = ТекСтрокаТовары.Валюта;
Движение.Цена = ТекСтрокаТовары.Цена;
Движение.ЕдиницаИзмерения = ТекСтрокаТовары.ЕдиницаИзмерения;
Движение.ПроцентСкидкиНаценки = ТекСтрокаТовары.ПроцентСкидкиНаценки;
Движение.СпособРасчетаЦены = ТекСтрокаТовары.СпособРасчетаЦены;
КонецЦикла;
КонецПроцедуры

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

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