Что есть срез последних в платформе (1Cv8)?

Материал из КинтВики
Перейти к: навигация, поиск


Что есть срез последних в платформе?

Источник: http://www.kb.mista.ru/article.php?id=92

ВЫБРАТЬ
  Рег.Период,
  Рег.Измерение,
  Рег.Ресурс
ИЗ
  РегситрСведений.ПериодическийРегистр.СрезПоследних(&Дата) КАК Рег


В зависимости от периодичности регистра (по времени, по позизии регистратора) ВТ разворачивается в следующий запрос:

По времени (год, месяц, ... секунда)

ВЫБРАТЬ
 Таблица3.Ресурс,
 Таблица3.Измерение,
 Таблица3.Период
ИЗ
 (ВЫБРАТЬ
  Таблица1.Измерение КАК Измерение,
  МАКСИМУМ(Таблица1.Период) КАК Период
 ИЗ
  РегистрСведений.ПериодическийРегистр КАК Таблица1
ГДЕ
  Таблица1.Период <= &Дата
 СГРУППИРОВАТЬ ПО
  Таблица1.Измерение) КАК Таблица2
  ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПериодическийРегистр КАК Таблица3
  ПО Таблица2.Измерение= Таблица3.Измерение
   И Таблица2.Период = Таблица3.Период


По позиции регистратора

В данном случае нужно еще раз обернуть выборку

ВЫБРАТЬ
 Таблица5.Ресурс,
 Таблица5.Измерение,
 Таблица5.Период,
 Таблица5.Регистратор
ИЗ
(ВЫБРАТЬ
 МАКСИМУМ(Таблица3.Регистратор) КАК Регистратор,
 Таблица3.Измерение
ИЗ
 (ВЫБРАТЬ
  Таблица1.Измерение КАК Измерение,
  МАКСИМУМ(Таблица1.Период) КАК Период
 ИЗ
  РегистрСведений.ПериодическийРегистр КАК Таблица1
ГДЕ
  Таблица1.Период <= &Дата
 СГРУППИРОВАТЬ ПО
  Таблица1.Измерение) КАК Таблица2
  ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПериодическийРегистр КАК Таблица3
  ПО Таблица2.Измерение= Таблица3.Измерение
   И Таблица2.Период = Таблица3.Период
СГРУППИРОВАТЬ ПО
  Таблица3.Измерение) КАК Таблица4
  ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПериодическийРегистр КАК Таблица5
  ПО Таблица4.Измерение = Таблица5.Измерение
   И Таблица4.Регистратор = Таблица5.Регистратор

Все это можно увидеть посмотрев технологический журнал с включенным режимом протоколирования запросов


Возможности оптимизации запроса к регистру актуальности

Возможно, такой запрос будет выполняться оптимальнее среза последних + фильтр по актуальности

ВЫБРАТЬ
  Таблица1.Измерение КАК Измерение,
  Таблица1.Актуальность,
  МАКСИМУМ(Таблица1.Период) КАК Период
 ИЗ
  РегистрСведений.ПериодическийРегистр КАК Таблица1
ГДЕ
  Таблица1.Период <= &Дата
СГРУППИРОВАТЬ ПО
  Таблица1.Измерение, Таблица1.Актуальность
ИМЕЮЩИЕ
 Таблица1.Актуальность = Истина

--Павел Лазарев 11:37, 19 июня 2009 (SAMST) такой запрос неправильно работает :)


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

ВЫБРАТЬ
	АктуальныеЭлементы.Домен
ИЗ
	(ВЫБРАТЬ
		АктуальностьДомена.Домен КАК Домен,
		МАКСИМУМ(АктуальностьДомена.Период) КАК Период
	ИЗ
		РегистрСведений.АктуальностьДомена КАК АктуальностьДомена
	ГДЕ
		АктуальностьДомена.Период <= &НаДату
	
	СГРУППИРОВАТЬ ПО
		АктуальностьДомена.Домен) КАК ПоследниеЭлементы

	ВНУТРЕННЕЕ СОЕДИНЕНИЕ 

	(ВЫБРАТЬ
		АктуальностьДомена.Домен КАК Домен,
		АктуальностьДомена.Период КАК Период
	ИЗ
		РегистрСведений.АктуальностьДомена КАК АктуальностьДомена
	ГДЕ
		АктуальностьДомена.Актуальность) КАК АктуальныеЭлементы
	
	ПО ПоследниеЭлементы.Домен = АктуальныеЭлементы.Домен
		И ПоследниеЭлементы.Период = АктуальныеЭлементы.Период