Вопрос по пакетному запросу в СКД

1. golovinaea 30.01.18 14:36 Сейчас в теме
Добрый день, коллеги!
Платформа 8.3.10.2561, конфигурация Управление торговлей 11.1.10.103
Подскажите пожалуйста не могу сообразить с запросом. Пишу следующий запрос в СКД:
ВЫБРАТЬ
	ТоварыНаСкладахОстатки.Номенклатура,
	ТоварыНаСкладахОстатки.ВНаличииОстаток
ПОМЕСТИТЬ Остаток
ИЗ
	РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
;

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

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

На последнем этапе хочу получить цену, номер и дату последнего поступления, но по текущему коду получаю информацию по первому поступлению. Подскажите как переделать запрос. Заранее спасибо.
+
По теме из базы знаний
Найденные решения
3. Pavean 30.01.18 18:11 Сейчас в теме
Если Я правильно понял то вам надо делать соединение не со всей таблицей ПоступлениеТоваровУслуг а с аналогом среза последних. Должно получиться что-то вроде:
Выбрать
    ПоступлениеТоваровУслугТовары.Номенклатура,
    ПоступлениеТоваровУслугТовары.Цена КАК Цена,
    ПоступлениеТоваровУслугТовары.Ссылка.Номер КАК Номер,
    ПоступлениеТоваровУслугТовары.Ссылка.Дата КАК Дата
ИЗ
    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
Внутреннее соединение
   (Выбрать
        ПоступлениеТоваровУслугТовары.Номенклатура,
        Максимум(ПоступлениеТоваровУслугТовары .Дата) КАК МаксимальнаяДатаПоступления
   ИЗ
        Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
   Сгруппировать ПО ПоступлениеТоваровУслугТовары.Номенклатура) КАК НоменклатураСМаксимальнойДатойПоступления 
   По  ПоступлениеТоваровУслугТовары.Номенклатура = НоменклатураСМаксимальнойДатойПоступления 
       И ПоступлениеТоваровУслугТовары.Ссылка.Дата = НоменклатураСМаксимальнойДатойПоступления.МаксимальнаяДатаПоступления
Показать

Писал прямо здесь. За корректность синтаксиса и прочего не ручаюсь.
+
5. Pavean 31.01.18 11:55 Сейчас в теме
(4)Думаю да. Собственно мой запрос из (3) должен возвращать нужную вам таблицу. С ней надо соединить остальной запрос.
ВЫБРАТЬ
	ТоварыНаСкладахОстатки.Номенклатура,
	ТоварыНаСкладахОстатки.ВНаличииОстаток
ПОМЕСТИТЬ Остаток
ИЗ
	РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
;

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Остаток.Номенклатура КАК Номенклатура,
	Остаток.ВНаличииОстаток КАК Остаток,
	ЕСТЬNULL(Обороты.ВНаличииПриход, 0) КАК Приход,
	ЕСТЬNULL(Обороты.ВНаличииРасход, 0) КАК Расход,
	ВложенныйЗапрос.Цена,
	ВложенныйЗапрос.МаксимальнаяДатаПоступления КАК ДатаПоследнегоПоступления,
	ВложенныйЗапрос.Номер
ИЗ
	Остаток КАК Остаток
		ЛЕВОЕ СОЕДИНЕНИЕ Обороты КАК Обороты
		ПО Остаток.Номенклатура = Обороты.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
			ПоступлениеТоваровУслугТовары.Цена КАК Цена,
			ПоступлениеТоваровУслуг.Номер КАК Номер,
			ПоступлениеТоваровУслуг.Дата КАК МаксимальнаяДатаПоступления
		ИЗ
			Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
				ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
				ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
				ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
					ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
					МАКСИМУМ(ПоступлениеТоваровУслугТовары.Ссылка.Дата) КАК МаксимальнаяДатаПоступления
				ИЗ
					Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
				ГДЕ
					ПоступлениеТоваровУслугТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
				
				СГРУППИРОВАТЬ ПО
					ПоступлениеТоваровУслугТовары.Номенклатура) КАК НоменклатураСМаксимальнойДатойПоступления
				ПО ПоступлениеТоваровУслугТовары.Номенклатура = НоменклатураСМаксимальнойДатойПоступления.Номенклатура
					И (ПоступлениеТоваровУслуг.Дата = НоменклатураСМаксимальнойДатойПоступления.МаксимальнаяДатаПоступления)) КАК ВложенныйЗапрос
		ПО Остаток.Номенклатура = ВложенныйЗапрос.Номенклатура
Показать
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. golovinaea 30.01.18 17:21 Сейчас в теме
Собственно вопрос в том, как сделать сортировку таблицы, которую я прикручиваю через левое соединение.
+
3. Pavean 30.01.18 18:11 Сейчас в теме
Если Я правильно понял то вам надо делать соединение не со всей таблицей ПоступлениеТоваровУслуг а с аналогом среза последних. Должно получиться что-то вроде:
Выбрать
    ПоступлениеТоваровУслугТовары.Номенклатура,
    ПоступлениеТоваровУслугТовары.Цена КАК Цена,
    ПоступлениеТоваровУслугТовары.Ссылка.Номер КАК Номер,
    ПоступлениеТоваровУслугТовары.Ссылка.Дата КАК Дата
ИЗ
    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
Внутреннее соединение
   (Выбрать
        ПоступлениеТоваровУслугТовары.Номенклатура,
        Максимум(ПоступлениеТоваровУслугТовары .Дата) КАК МаксимальнаяДатаПоступления
   ИЗ
        Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
   Сгруппировать ПО ПоступлениеТоваровУслугТовары.Номенклатура) КАК НоменклатураСМаксимальнойДатойПоступления 
   По  ПоступлениеТоваровУслугТовары.Номенклатура = НоменклатураСМаксимальнойДатойПоступления 
       И ПоступлениеТоваровУслугТовары.Ссылка.Дата = НоменклатураСМаксимальнойДатойПоступления.МаксимальнаяДатаПоступления
Показать

Писал прямо здесь. За корректность синтаксиса и прочего не ручаюсь.
+
4. golovinaea 31.01.18 10:19 Сейчас в теме
(3) Павел, спасибо! То, что надо!
В результате запрос выглядит так:

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

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

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

Но если я пытаюсь вывести Цену и Номер (или Ссылку) он мне соответственно дает данные о всех поступлениях и я понимаю почему. Чтобы получить данные из документа по последнему поступлению надо сделать еще одно соединение? Пока не понимаю как.
+
5. Pavean 31.01.18 11:55 Сейчас в теме
(4)Думаю да. Собственно мой запрос из (3) должен возвращать нужную вам таблицу. С ней надо соединить остальной запрос.
ВЫБРАТЬ
	ТоварыНаСкладахОстатки.Номенклатура,
	ТоварыНаСкладахОстатки.ВНаличииОстаток
ПОМЕСТИТЬ Остаток
ИЗ
	РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
;

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Остаток.Номенклатура КАК Номенклатура,
	Остаток.ВНаличииОстаток КАК Остаток,
	ЕСТЬNULL(Обороты.ВНаличииПриход, 0) КАК Приход,
	ЕСТЬNULL(Обороты.ВНаличииРасход, 0) КАК Расход,
	ВложенныйЗапрос.Цена,
	ВложенныйЗапрос.МаксимальнаяДатаПоступления КАК ДатаПоследнегоПоступления,
	ВложенныйЗапрос.Номер
ИЗ
	Остаток КАК Остаток
		ЛЕВОЕ СОЕДИНЕНИЕ Обороты КАК Обороты
		ПО Остаток.Номенклатура = Обороты.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
			ПоступлениеТоваровУслугТовары.Цена КАК Цена,
			ПоступлениеТоваровУслуг.Номер КАК Номер,
			ПоступлениеТоваровУслуг.Дата КАК МаксимальнаяДатаПоступления
		ИЗ
			Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
				ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
				ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
				ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
					ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
					МАКСИМУМ(ПоступлениеТоваровУслугТовары.Ссылка.Дата) КАК МаксимальнаяДатаПоступления
				ИЗ
					Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
				ГДЕ
					ПоступлениеТоваровУслугТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
				
				СГРУППИРОВАТЬ ПО
					ПоступлениеТоваровУслугТовары.Номенклатура) КАК НоменклатураСМаксимальнойДатойПоступления
				ПО ПоступлениеТоваровУслугТовары.Номенклатура = НоменклатураСМаксимальнойДатойПоступления.Номенклатура
					И (ПоступлениеТоваровУслуг.Дата = НоменклатураСМаксимальнойДатойПоступления.МаксимальнаяДатаПоступления)) КАК ВложенныйЗапрос
		ПО Остаток.Номенклатура = ВложенныйЗапрос.Номенклатура
Показать
+
6. golovinaea 31.01.18 13:25 Сейчас в теме
(5) То что надо. Огонь! Спасибо огроменное!
+
Внимание! Тема сдана в архив

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