Остаток с минимальной датой и остаток с максимальной датой отдельными строками в запросе

1. prog2019 47 09.09.20 09:04 Сейчас в теме
В запросе нужно получить отдельными строками остаток с минимальной датой и остаток с максимальной датой.
Это поля "НачальныйОстатокКоличество" и "КонечныйОстатокКоличество" во временных таблицах "ВремТабНачальныйОстаток" и "ВремТабКонечныйОстаток".

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

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

ВЫБРАТЬ РАЗЛИЧНЫЕ
	ДанныеПроизводственногоКалендаря.Дата КАК ДатаКалендаря
ПОМЕСТИТЬ ВремТабДатыКалендаря
ИЗ
	РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
ГДЕ
	ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &НачалоПериода И &КонецПериода
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
	ТоварыНаСкладахОстаткиИОбороты.ПериодДень КАК Период
ПОМЕСТИТЬ ВремТабДатыДвижений
ИЗ
	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , ) КАК ТоварыНаСкладахОстаткиИОбороты
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ВремТабДатыКалендаря.ДатаКалендаря КАК ДатаКалендаря,
	ВремТабДатыДвижений.Номенклатура КАК Номенклатура,
	МАКСИМУМ(ВремТабДатыДвижений.Период) КАК ДатаОстатка
ПОМЕСТИТЬ ВремТабДатыОстатков
ИЗ
	ВремТабДатыКалендаря КАК ВремТабДатыКалендаря
		ЛЕВОЕ СОЕДИНЕНИЕ ВремТабДатыДвижений КАК ВремТабДатыДвижений
		ПО ВремТабДатыКалендаря.ДатаКалендаря >= ВремТабДатыДвижений.Период

СГРУППИРОВАТЬ ПО
	ВремТабДатыКалендаря.ДатаКалендаря,
	ВремТабДатыДвижений.Номенклатура
;

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВремТабОстаткиЦены.Номенклатура КАК Номенклатура,
	ВремТабОстаткиЦены.ДатаОстатка КАК ДатаОстатка,
	ВремТабОстаткиЦены.ОстатокЗаДень КАК НачальныйОстатокКоличество,
	ВремТабОстаткиЦены.Цена КАК Цена
ПОМЕСТИТЬ ВремТабНачальныйОстаток
ИЗ
	ВремТабОстаткиЦены КАК ВремТабОстаткиЦены
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			МИНИМУМ(ВремТабОстаткиЦены.ДатаОстатка) КАК ДатаОстатка
		ИЗ
			ВремТабОстаткиЦены КАК ВремТабОстаткиЦены) КАК ВложенныйЗапрос
		ПО ВремТабОстаткиЦены.ДатаОстатка = ВложенныйЗапрос.ДатаОстатка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВремТабОстаткиЦены.Номенклатура КАК Номенклатура,
	ВремТабОстаткиЦены.ДатаОстатка КАК ДатаОстатка,
	ВремТабОстаткиЦены.ОстатокЗаДень КАК КонечныйОстатокКоличество,
	ВремТабОстаткиЦены.Цена КАК Цена
ПОМЕСТИТЬ ВремТабКонечныйОстаток
ИЗ
	ВремТабОстаткиЦены КАК ВремТабОстаткиЦены
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			МАКСИМУМ(ВремТабОстаткиЦены.ДатаОстатка) КАК ДатаОстатка
		ИЗ
			ВремТабОстаткиЦены КАК ВремТабОстаткиЦены) КАК ВложенныйЗапрос
		ПО ВремТабОстаткиЦены.ДатаОстатка = ВложенныйЗапрос.ДатаОстатка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ВремТабОстаткиЦены.Номенклатура КАК Номенклатура,
	ВремТабОстаткиЦены.ДатаОстатка КАК ДатаОстатка,
	ВремТабОстаткиЦены.ОстатокЗаДень КАК ОстатокЗаДень,
	ВремТабОстаткиЦены.Цена КАК Цена,
	1 КАК ДеньГдеБылОстаток
ПОМЕСТИТЬ ВремТабВыбранныеОстаткиПоДням
ИЗ
	ВремТабОстаткиЦены КАК ВремТабОстаткиЦены
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВремТабВыбранныеОстаткиПоДням.Номенклатура КАК Номенклатура,
	СУММА(ВремТабВыбранныеОстаткиПоДням.ОстатокЗаДень) КАК ОстатокЗаВсеДни,
	ВремТабВыбранныеОстаткиПоДням.Цена КАК Цена,
	СУММА(ВремТабВыбранныеОстаткиПоДням.ДеньГдеБылОстаток) КАК ДниГдеБылОстаток
ПОМЕСТИТЬ ВремТабСгруппированныеОстатки
ИЗ
	ВремТабВыбранныеОстаткиПоДням КАК ВремТабВыбранныеОстаткиПоДням

СГРУППИРОВАТЬ ПО
	ВремТабВыбранныеОстаткиПоДням.Номенклатура,
	ВремТабВыбранныеОстаткиПоДням.Цена
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ВремТабСгруппированныеОстатки.Номенклатура КАК Номенклатура,
	ВремТабНачальныйОстаток.НачальныйОстатокКоличество КАК НачальныйОстатокКоличество,
	ВремТабНачальныйОстаток.НачальныйОстатокКоличество * ВремТабНачальныйОстаток.Цена КАК НачальныйОстатокСумма,
	ВремТабКонечныйОстаток.КонечныйОстатокКоличество КАК КонечныйОстатокКоличество,
	ВремТабКонечныйОстаток.КонечныйОстатокКоличество * ВремТабКонечныйОстаток.Цена КАК КонечныйОстатокСумма,
	ВЫБОР
		КОГДА ВремТабСгруппированныеОстатки.ДниГдеБылОстаток - 1 > 1
			ТОГДА ЕСТЬNULL((ВремТабСгруппированныеОстатки.ОстатокЗаВсеДни - ВремТабНачальныйОстаток.НачальныйОстатокКоличество / 2 - ВремТабКонечныйОстаток.КонечныйОстатокКоличество / 2) / (ВремТабСгруппированныеОстатки.ДниГдеБылОстаток - 1), 0)
		КОГДА ВремТабСгруппированныеОстатки.ДниГдеБылОстаток - 1 = 1
			ТОГДА ЕСТЬNULL(ВремТабСгруппированныеОстатки.ОстатокЗаВсеДни, 0)
		ИНАЧЕ 0
	КОНЕЦ КАК СреднийТоварныйЗапасКоличество,
	ВЫБОР
		КОГДА ВремТабСгруппированныеОстатки.ДниГдеБылОстаток - 1 > 1
			ТОГДА ЕСТЬNULL((ВремТабСгруппированныеОстатки.ОстатокЗаВсеДни - ВремТабНачальныйОстаток.НачальныйОстатокКоличество / 2 - ВремТабКонечныйОстаток.КонечныйОстатокКоличество / 2) * ВремТабСгруппированныеОстатки.Цена / (ВремТабСгруппированныеОстатки.ДниГдеБылОстаток - 1), 0)
		КОГДА ВремТабСгруппированныеОстатки.ДниГдеБылОстаток - 1 = 1
			ТОГДА ЕСТЬNULL(ВремТабСгруппированныеОстатки.ОстатокЗаВсеДни * ВремТабСгруппированныеОстатки.Цена, 0)
		ИНАЧЕ 0
	КОНЕЦ КАК СреднийТоварныйЗапасСумма
ПОМЕСТИТЬ ВремТабСреднийТоварныйЗапас
ИЗ
	ВремТабСгруппированныеОстатки КАК ВремТабСгруппированныеОстатки
		ЛЕВОЕ СОЕДИНЕНИЕ ВремТабНачальныйОстаток КАК ВремТабНачальныйОстаток
		ПО ВремТабСгруппированныеОстатки.Номенклатура = ВремТабНачальныйОстаток.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ ВремТабКонечныйОстаток КАК ВремТабКонечныйОстаток
		ПО ВремТабСгруппированныеОстатки.Номенклатура = ВремТабКонечныйОстаток.Номенклатура
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 09.09.20 09:34 Сейчас в теме
(1) Запрос не смотрел, но нужно делать объединением запросов, а не соединением
3. M_A_D 184 09.09.20 09:39 Сейчас в теме
(1)
Сейчас некоторые позиции номенклатуры не выбираются, не могу понять почему.


Не совсем понимаю ваш вопрос.... В вашем запросе нет ни одного отбора по номенклатуре....

И не совсем понимаю из описания зачем громоздить кучу ВТ, если можно сделать все через объединение запросов:
ВЫБРАТЬ
	ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
	ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток,
	NULL КАК ВНаличииКонечныйОстаток
ИЗ
	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты КАК ТоварыНаСкладахОстаткиИОбороты
ГДЕ
	ТоварыНаСкладахОстаткиИОбороты.Номенклатура = &Номенклатура
	И ТоварыНаСкладахОстаткиИОбороты.Склад = &Склад

ОБЪЕДИНИТЬ ВСЕ

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


Это писано под УТ, можете тестировать в консоли запросов отработает.


И еще хочу заметить что подсчет дней УТ ведет иначе, с человеческой логикой не имеет ни какой связи....
Если остаток в течении дня не менялся, то остаток на этот день в регистре накопления будет равен НУЛЮ....
запрос на получение дней наличия товара нужно составлять сложнее....

ВЫБРАТЬ
	0 КАК Поле1
ПОМЕСТИТЬ ВТЦифры

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	5

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	7

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	8

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	9
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	10 * ВТЦифры.Поле1 + ВТЦифры1.Поле1 КАК Поле1
ПОМЕСТИТЬ ВТДвузначные
ИЗ
	ВТЦифры КАК ВТЦифры,
	ВТЦифры КАК ВТЦифры1
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	100 * ВТДвузначные.Поле1 + ВТДвузначные1.Поле1 КАК Поле1
ПОМЕСТИТЬ ВТТрехзначные
ИЗ
	ВТДвузначные КАК ВТДвузначные,
	ВТДвузначные КАК ВТДвузначные1
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ) КАК Поле1
ПОМЕСТИТЬ ВТНачальнаяДата
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДОБАВИТЬКДАТЕ(ВТНачальнаяДата.Поле1, ДЕНЬ, ВТТрехзначные.Поле1) КАК НачалоДня
ПОМЕСТИТЬ ВТДатыПериода
ИЗ
	ВТНачальнаяДата КАК ВТНачальнаяДата
		ПОЛНОЕ СОЕДИНЕНИЕ ВТТрехзначные КАК ВТТрехзначные
		ПО (ИСТИНА)
ГДЕ
	ДОБАВИТЬКДАТЕ(ВТНачальнаяДата.Поле1, ДЕНЬ, ВТТрехзначные.Поле1) МЕЖДУ &Дата1 И ВЫБОР
			КОГДА &Дата2 > &ТекДата
				ТОГДА &ТекДата
			ИНАЧЕ &Дата2
		КОНЕЦ
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТоварыНаСкладахОбороты.Номенклатура,
	ТоварыНаСкладахОбороты.ВНаличииОборот,
	ТоварыНаСкладахОбороты.Период,
	ТоварыНаСкладахОбороты.Склад
ПОМЕСТИТЬ ВТДвижениеТовара
ИЗ
	РегистрНакопления.ТоварыНаСкладах.Обороты(
			&Дата1,
			&Дата2,
			День,
			Склад В ИЕРАРХИИ (&Склад)
				И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыНаСкладахОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ТоварыНаСкладахОстатки.Номенклатура,
	ТоварыНаСкладахОстатки.ВНаличииОстаток,
	ДОБАВИТЬКДАТЕ(&Дата1, ДЕНЬ, -1),
	ТоварыНаСкладахОстатки.Склад
ИЗ
	РегистрНакопления.ТоварыНаСкладах.Остатки(
			&Дата1,
			Склад В ИЕРАРХИИ (&Склад)
				И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыНаСкладахОстатки
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТДатыПериода.НачалоДня,
	ВТДвижениеТовара.Номенклатура,
	СУММА(ЕСТЬNULL(ВТДвижениеТовара.ВНаличииОборот, 0)) КАК Поле1,
	ВТДвижениеТовара.Склад
ИЗ
	ВТДатыПериода КАК ВТДатыПериода
		ЛЕВОЕ СОЕДИНЕНИЕ ВТДвижениеТовара КАК ВТДвижениеТовара
		ПО (КОНЕЦПЕРИОДА(ВТДатыПериода.НачалоДня, ДЕНЬ) >= ВТДвижениеТовара.Период)

СГРУППИРОВАТЬ ПО
	ВТДатыПериода.НачалоДня,
	ВТДвижениеТовара.Номенклатура,
	ВТДвижениеТовара.Склад
Показать


вот примерно что-то такое должно быть.... и это только запрос на получение остатка на каждый день(на конец дня, конечный остаток)...
4. prog2019 47 09.09.20 09:53 Сейчас в теме
(3) В моем запросе выбираются строки с каждой датой остатков, которая есть в регистре. Нужен не просто начальный и конечный остаток, как обычно. Нужны именно все записи из регистра, в которых реально хранятся остатки в регистре. То есть, например, пятого числа было 10 штук, двенадцатого числа было 17 штук и так далее. Так хочет бухгалтерия. Это потом будет использоваться для полной формулы расчета среднего товарного запаса.

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

СТЗ = [(ТОВ1 / 2) + ТОВ2 + ТОВ3 + (ТОВ (ДЕНЬ) / 2)] / (ДНИ – 1), где:

СТЗ — средний товарный запас;
ТОВ1, ТОВ2, ТОВ3 — товарный запас, соответственно, в 1-й, 2-й и 3-й день анализируемого периода;
ТОВ (ДЕНЬ) — товарный запас в последний день анализируемого периода;
ДНИ — общее количество дней в анализируемом периоде.

Пример:
Допустим, в фирме есть ТЗ (телевизоры):
в 1-й день — 100 единиц товара (телевизоров);
во 2-й — 120;
в 3-й — 170;
в 4-й — 70;
в 5-й — 120.

Если задействовать указанную формулу расчета товарного запаса в среднем выражении, то соответствующий показатель за 5 дней составит:

СТЗ = [(100 / 2) + 120 + 170 + 70 + (120 / 2)] / (5 – 1) = 117,5 телевизоров.
5. PhoenixAOD 62 09.09.20 09:59 Сейчас в теме
(4)это старая задача решений ее уже овердофига и тут и в тырнетах, https://infostart.ru/public/518415/ вот как вариант
7. prog2019 47 09.09.20 10:27 Сейчас в теме
(5) То, что есть в этих примерах, в моем запросе тоже есть. Это как раз не проблема. И мой запрос, кстати, работает быстро, несмотря на то, что таблиц несколько. Так что, в этом смысле мой запрос вполне нормальный.

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

Этого нет в приведенных примерах.

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

Бухгалтерия хочет, чтобы в одну строку отчета запихнули сразу несколько сложных формул.
11. PhoenixAOD 62 09.09.20 10:57 Сейчас в теме
(7)ка квариант попробвать поработать с групиировками в настройках СКД, не самого отчета а именно в таблице, там группировки указать
13. prog2019 47 09.09.20 11:17 Сейчас в теме
(11) Пробовали мы настраивать в СКД.
Изначально это и делалось в СКД, но потом пришлось от СКД отказаться. В запросе 12 временных таблиц и конечная. СКД даже не находит поля остатков из-за этого. Пробовали прописать поля, не получилось.

Сейчас во внешней обработке запрос.
6. M_A_D 184 09.09.20 10:25 Сейчас в теме
(4) вы описали все верно, только сформируйте ваш же запрос по 1 позиции и возьмите период в котором есть дни когда товар не двигался (небыло ни прихода ни расхода). Эти дни вы потеряете, т.е. отчет не выведет эти дни....
Т.к. в регистре накоплений информация посвляется только тогда, когда ДВИЖЕНИЕ БЫЛО.
Поясняю о чем я говорю наглядко:
День1 остаток 10шт
День2 остаток 9шт(был расход)
День10 остаток 5шт(Снова был расход)

Третий день - Девятый день не отобразился т.к. расхода небыло, но остаток в эти дени = 9-ти штукам.
Получается, при подсчете среднего запаса за 10 дней, по вашему запросу вы учтете только остаток 3-х дней
По вашему запросу СТЗ = 1,8шт ( (10/2 + 9 + 5/2)/10-1 )
По правильному СТЗ должен быть = 8,8шт. ( (10/2 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 5/2) / 10-1 )
И такая разница всего за интервал в 10 дней....
8. prog2019 47 09.09.20 10:30 Сейчас в теме
(6) Ну конечно же я это предусмотрел.
В отдельной колонке я храню количество дней.
Это вообще не проблема.

Делить надо не на "10-1", а на "3-1".
9. M_A_D 184 09.09.20 10:41 Сейчас в теме
(8)
Делить надо не на "10-1", а на "3-1".

В день 4 остаток был 9 штук, как и во второй, и в пятый и в третий и в шестой и так до девятого)

я ваш запрос проверил только до дат движения....
Теперь понятно все.

Возьмет эти даты во ВТ, сделайте сортировку по дате и получите первую запись, получите дату начала и дату конца)
10. prog2019 47 09.09.20 10:54 Сейчас в теме
(9) Я бы рад отсортировать, только во временной таблице не получается. Выбираю, например, МИНИМУМ, у некоторой номенклатуры это срабатывает, а у некоторой - нет. А если делать левое соединение во вложенном запросе, то выбираются все строки с этой номенклатурой, а не одна минимальная.

В интернете нет решения такой ситуации.
12. DanDy 52 09.09.20 11:15 Сейчас в теме
(10)Ну так и возьмите таблицу со всеми датами (поместите её во временную, назовем её ВТ)
Далее во вложенном группируем нашу ВТ по нужным полям а дату берём Минимум/Максимум
И потом внутренним соединением ВТ с результатом вложенного запроса получим нужную нам строку из ВТ.
14. prog2019 47 09.09.20 11:19 Сейчас в теме
(12) Я пробовал по-разному, не получилось.

Можете код написать в моем запросе?
15. DanDy 52 09.09.20 11:26 Сейчас в теме
(14) Немного упростил, не стал брать весь ваш запрос. Но думаю принцип понятен и на этом примере.
"ВЫБРАТЬ РАЗЛИЧНЫЕ
|	ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
|	ТоварыНаСкладахОстаткиИОбороты.ПериодДень КАК Период,
|	ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток
|ПОМЕСТИТЬ ВремТабДатыДвижений
|ИЗ
|	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , ) КАК ТоварыНаСкладахОстаткиИОбороты
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|	ВремТабДатыДвижений.Номенклатура КАК Номенклатура,
|	МИНИМУМ(ВремТабДатыДвижений.Период) КАК МинимумДата,
|	МАКСИМУМ(ВремТабДатыДвижений.Период) КАК МаксимумДата
|ПОМЕСТИТЬ МаксМинДаты
|ИЗ
|	ВремТабДатыДвижений КАК ВремТабДатыДвижений
|
|СГРУППИРОВАТЬ ПО
|	ВремТабДатыДвижений.Номенклатура
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|	ВремТабДатыДвижений.Период КАК Период,
|	ВремТабДатыДвижений.Номенклатура КАК Номенклатура,
|	ВремТабДатыДвижений.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток_ПерваяДата,
|	NULL КАК ВНаличииКонечныйОстаток_ПоследняяДата
|ИЗ
|	ВремТабДатыДвижений КАК ВремТабДатыДвижений
|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ МаксМинДаты КАК МаксМинДаты
|		ПО ВремТабДатыДвижений.Номенклатура = МаксМинДаты.Номенклатура
|			И ВремТабДатыДвижений.Период = МаксМинДаты.МинимумДата
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|	ВремТабДатыДвижений.Период,
|	ВремТабДатыДвижений.Номенклатура,
|	NULL,
|	ВремТабДатыДвижений.ВНаличииКонечныйОстаток
|ИЗ
|	ВремТабДатыДвижений КАК ВремТабДатыДвижений
|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ МаксМинДаты КАК МаксМинДаты
|		ПО ВремТабДатыДвижений.Номенклатура = МаксМинДаты.Номенклатура
|			И ВремТабДатыДвижений.Период = МаксМинДаты.МаксимумДата"
Показать


Для красоты конечно можно получившееся свернуть, и т.д. ну это не суть)))
prog2019; +1 Ответить
17. prog2019 47 14.09.20 08:37 Сейчас в теме
(15) Спасибо! Направление мысли оказалось правильным.
18. DanDy 52 14.09.20 10:16 Сейчас в теме
(17)Да не за что, обращайтесь)
16. M_A_D 184 09.09.20 12:28 Сейчас в теме
(14)
написал через объединение, попробуйте, тут только часть вашего запроса, но думаю вам поможет:
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ДанныеПроизводственногоКалендаря.Дата КАК ДатаКалендаря
ПОМЕСТИТЬ ВремТабДатыКалендаря
ИЗ
	РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
ГДЕ
	ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &НачалоПериода И &КонецПериода
;

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ВремТабДатыКалендаря.ДатаКалендаря КАК ДатаКалендаря,
	ВремТабДатыДвижений.Номенклатура КАК Номенклатура,
	МАКСИМУМ(ВремТабДатыДвижений.Период) КАК ДатаОстатка
ПОМЕСТИТЬ ВТ1
ИЗ
	ВремТабДатыКалендаря КАК ВремТабДатыКалендаря
		ЛЕВОЕ СОЕДИНЕНИЕ ВремТабДатыДвижений КАК ВремТабДатыДвижений
		ПО ВремТабДатыКалендаря.ДатаКалендаря >= ВремТабДатыДвижений.Период

СГРУППИРОВАТЬ ПО
	ВремТабДатыКалендаря.ДатаКалендаря,
	ВремТабДатыДвижений.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ1.Номенклатура,
	МИНИМУМ(ВТ1.ДатаОстатка) КАК ДатаОстатка
ИЗ
	ВТ1 КАК ВТ1

СГРУППИРОВАТЬ ПО
	ВТ1.Номенклатура

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ВТ1.Номенклатура,
	МАКСИМУМ(ВТ1.ДатаОстатка)
ИЗ
	ВТ1 КАК ВТ1

СГРУППИРОВАТЬ ПО
	ВТ1.Номенклатура
Показать
19. prog2019 47 14.09.20 16:14 Сейчас в теме
Случайно обнаружил, что всё-таки можно сортировать во временной таблице.
Информацию об этом даёт сама 1С в сообщении об ошибке при попытке сортировки во временной таблице.

Для этого нужно написать:

ВЫБРАТЬ ПЕРВЫЕ 1000000000

УПОРЯДОЧИТЬ ПО Номенклатура
20. slasher777 29.09.20 20:11 Сейчас в теме
Сформируйте запрос по 1 позиции и возьмите период в котором есть дни когда товар не двигался (не было ни прихода ни расхода). Эти дни вы потеряете, т.е. отчет не выведет эти дни. Т.к. в регистре накоплений информация появляется
Оставьте свое сообщение

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