Имя: Пароль:
1C
 
Доработка запроса
0 yuran9393
 
03.05.25
11:27
Добрый день!
Просьба помочь с доработкой запроса, задача состоит в том, чтобы при выполнении запроса, при наличии нескольких записей по одному объекту выводить только последнюю по дате "ДатаВыгрузки".
Подскажите пожалуйста как реализовать, пробовал по разному, выводит всегда все записи по одному объекту.
ВЫБРАТЬ
	ЭДО_Состояние.Объект КАК Объект,
	ЭДО_Состояние.ТипДокумента КАК ТипДокумента,
	ЭДО_Состояние.ДатаВыгрузки КАК ДатаВыгрузки,
	ЭДО_Состояние.ДатаСтатуса КАК ДатаСтатуса,
	ЭДО_Состояние.СтатусДокумента КАК СтатусДокумента,
	РАЗНОСТЬДАТ(ЭДО_Состояние.ДатаВыгрузки, &ТекДата, ДЕНЬ) КАК ПрошлоДней
ИЗ
	РегистрСведений.ЭДО_Состояние КАК ЭДО_СостояниеВыгруженныхДокументов
ГДЕ
	ЭДО_Состояние.ТипДокумента В(&ТипыДокументов)
	И НЕ ЭДО_Состояние.СтатусДокумента В (&СписокСтатусов_Завершение)
	И РАЗНОСТЬДАТ(ЭДО_Состояние.ДатаВыгрузки, &ТекДата, ДЕНЬ) <= &ДнейСМоментаВыгрузкиНеБолее
1 Kongo2019
 
03.05.25
00:52
(0) Выбрать Первые 1

И сортировку по дате
2 PR
 
03.05.25
00:53
(0) Сделай временную таблицу с полями Объект и ДатаВыгрузки и сверни по объекту и максимуму даты выгрузки
Потом основную таблицу соединяй со временной таблицей по этим двум полям
При условии, что у тебя в основной таблице нет двух записей с одинаковыми объектом и датой выгрузки, конечно
Если есть, то сначала основную таблицу сверни по этим двум полям, чтобы убрать дубли
3 yuran9393
 
03.05.25
12:18
ВЫБРАТЬ
	ЭДО_СостояниеВыгруженныхДокументов.Объект КАК Объект,
	МАКСИМУМ(ЭДО_СостояниеВыгруженныхДокументов.ДатаВыгрузки) КАК ДатаВыгрузки
ПОМЕСТИТЬ ВТ_времянка
ИЗ
	РегистрСведений.ЭДО_СостояниеВыгруженныхДокументов КАК ЭДО_СостояниеВыгруженныхДокументов

СГРУППИРОВАТЬ ПО
	ЭДО_СостояниеВыгруженныхДокументов.Объект
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ЭДО_СостояниеВыгруженныхДокументов.Объект КАК Объект,
	ЭДО_СостояниеВыгруженныхДокументов.ДатаСтатуса КАК ДатаСтатуса,
	ЭДО_СостояниеВыгруженныхДокументов.СтатусДокумента КАК СтатусДокумента,
	ЭДО_СостояниеВыгруженныхДокументов.ДатаВыгрузки КАК ДатаВыгрузки,
	РАЗНОСТЬДАТ(ЭДО_СостояниеВыгруженныхДокументов.ДатаВыгрузки, &ТекДата, ДЕНЬ) КАК ПрошлоДней
ИЗ
	РегистрСведений.ЭДО_СостояниеВыгруженныхДокументов КАК ЭДО_СостояниеВыгруженныхДокументов
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_времянка КАК ВТ_времянка
		ПО ЭДО_СостояниеВыгруженныхДокументов.Объект = ВТ_времянка.Объект
			И ЭДО_СостояниеВыгруженныхДокументов.ДатаВыгрузки = ВТ_времянка.ДатаВыгрузки
			И ЭДО_СостояниеВыгруженныхДокументов.ТипДокумента В(&ТипыДокументов)
			И НЕ ЭДО_СостояниеВыгруженныхДокументов.СтатусДокумента В (&СписокСтатусов_Завершение)
			И РАЗНОСТЬДАТ(ЭДО_СостояниеВыгруженныхДокументов.ДатаВыгрузки, &ТекДата, ДЕНЬ) <= &ДнейСМоментаВыгрузкиНеБолее


При такой записи запрос отрабатывает корректно, но заметно выросло время выполнения запроса
4 lEvGl
 
гуру
03.05.25
12:31
(3) добавьте фильтра в запрос с группировкой, зачем всю таблицу выбирать
потом выбирать можно из нее же и к ней соединением дотянуть нужные поля
5 yuran9393
 
03.05.25
13:21
(4) Сделал, получилось, спасибо большое