Cрез последних своими руками

1. user1931214 29.11.23 10:46 Сейчас в теме
Задача состоит в следующем: Создать таблицу значений, передать её на вход в запрос, и для каждой строки определить цену на данный момент.
Я сделал таблицу, и заполнил её:
КвалификаторыСтроки = Новый КвалификаторыСтроки(50);
   
    ТаблицаНоменклатуры = Новый ТаблицаЗначений;
    ТаблицаНоменклатуры.Колонки.Добавить("Номенклатура",     Новый ОписаниеТипов("Строка", ,КвалификаторыСтроки));
    ТаблицаНоменклатуры.Колонки.Добавить("Цена",        Новый ОписаниеТипов("Число"));
   //ТаблицаНоменклатуры.Колонки.Добавить("Цена1",    Новый ОписаниеТипов("Число"));
    ТаблицаНоменклатуры.Колонки.Добавить("Период",    Новый ОписаниеТипов("Дата"));

     
    НоваяСтрока = ТаблицаНоменклатуры.Добавить();
    НоваяСтрока.Номенклатура = "Ручка";
    НоваяСтрока.Цена = "50";
   НоваяСтрока.Период = "20230101";
   
    НоваяСтрока = ТаблицаНоменклатуры.Добавить();
    НоваяСтрока.Номенклатура = "Карандаш";
    НоваяСтрока.Цена = "100";
   НоваяСтрока.Период = "20230102";

    НоваяСтрока = ТаблицаНоменклатуры.Добавить();
    НоваяСтрока.Номенклатура = "Ручка";
    НоваяСтрока.Цена = "150";
   НоваяСтрока.Период = "20230103";
   
   НоваяСтрока = ТаблицаНоменклатуры.Добавить();
    НоваяСтрока.Номенклатура = "Ручка";
    НоваяСтрока.Цена = "240";
   НоваяСтрока.Период = "20230105";
   
   НоваяСтрока = ТаблицаНоменклатуры.Добавить();
    НоваяСтрока.Номенклатура = "Ручка";
    НоваяСтрока.Цена = "210";
   НоваяСтрока.Период = "20230106";

Написал следующий запрос:

Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВременнаяТаблица.Номенклатура КАК Номенклатура,
		|	ВременнаяТаблица.Цена КАК Цена,
		|	ВременнаяТаблица.Период КАК Период
		|ПОМЕСТИТЬ ВТНоменклатура
		|ИЗ
		|	&ВременнаяТаблица КАК ВременнаяТаблица
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ВТНоменклатура.Номенклатура КАК Номенклатура,
		|	ВТНоменклатура.Цена КАК Цена,
		|	ВТНоменклатура1.Цена КАК Цена1,
		|	МАКСИМУМ(ВТНоменклатура.Период) КАК Период,
		|	ВТНоменклатура1.Период КАК Период1
		|ПОМЕСТИТЬ ВТПериод
		|ИЗ
		|	ВТНоменклатура КАК ВТНоменклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТНоменклатура КАК ВТНоменклатура1
		|		ПО ВТНоменклатура.Номенклатура = ВТНоменклатура1.Номенклатура
		|			И ВТНоменклатура.Период >= ВТНоменклатура1.Период
		|
		|СГРУППИРОВАТЬ ПО
		|	ВТНоменклатура.Цена,
		|	ВТНоменклатура1.Цена,
		|	ВТНоменклатура.Номенклатура,
		|	ВТНоменклатура1.Период
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ВТПериод.Номенклатура КАК Номенклатура,
		|	ВТПериод.Цена КАК Цена,
		|	ВТПериод.Цена1 КАК Цена1,
		|	ВТПериод.Период КАК Период,
		|	ВТПериод.Период1 КАК Период1
		|ИЗ
		|	ВТПериод КАК ВТПериод
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТНоменклатура КАК ВТНоменклатура
		|		ПО ВТПериод.Номенклатура = ВТНоменклатура.Номенклатура
		|ГДЕ
		|	ВТПериод.Номенклатура = ВТНоменклатура.Номенклатура";
	
    Запрос.УстановитьПараметр("ВременнаяТаблица", ТаблицаНоменклатуры);
	Запрос.УстановитьПараметр("Период", ТекущаяДата());


     
Выборка = Запрос.Выполнить().Выгрузить();
	
ТабРеквизит.Загрузить(Выборка);
Показать

Выводит неккоректно. как мне изменить код?
Прикрепленные файлы:
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 35 29.11.23 10:47 Сейчас в теме
(1)Поиск в яндексе по фразе "Срез последних на каждую дату в запросе" вам поможет.
3. Said-We 29.11.23 12:22 Сейчас в теме
(1) https://forum.infostart.ru/forum9/topic306404/
На прошлой неделе автор тоже искал. И так почти каждую неделю. :-)

Это на позапрошлой....
https://forum.infostart.ru/forum9/topic305872/
4. starik-2005 3057 29.11.23 15:08 Сейчас в теме
ВЫБРАТЬ
  Период,
  Измерение,
  Ресурс
ИЗ РегистрСведений.МойРегистр КАК Регистр
ГДЕ 
  Период В (ВЫБРАТЬ Максимум(Период) ИЗ РегистрСведений.МойРегистр КАК Регистр1 Где Регистр1.Измерение = Регистр.Измерение)
Почему это работает быстро? Потому, что измерение и период входят в индекс. Ну и если измерений несколько - они нужны все.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот