Не выводятся значения из последней таблицы набора данных СКД при отборе.

1. BAIKOVIT 25.06.20 03:13 Сейчас в теме
Здравствуйте. Столкнулся с проблемой при разработке отчета на СКД. Написал отчет. Вроде ничего сложного. Суть отчета следующая: вывести продажи, нормы запасов (из созданного регистра сведений), остатки. Сделано было через объединение запросов. Затем появилась необходимость в этом универсальном отчете добавить еще и колонку остаток на складе снабжения. Соответственно решено было добавить в объединение еще одну таблицу, где будет происходить соединение. Все было сделано и при проверке через консоль запросов выдовало нужный результат. Затем было это все добавлено и настроено в СКД. И если не использовать отбор то все работает. Но при отборе по "Складу", пропадают значения колонки "Остаток снабжения", а еще к тому же появляется какая-то пустая строка.

Сам запрос:
ВЫБРАТЬ
	ПродажиОбороты.Склад КАК Склад,
	ПродажиОбороты.Номенклатура КАК Номенклатура,
	ПродажиОбороты.КоличествоОборот КАК КоличествоПродано,
	ПродажиОбороты.СтоимостьОборот КАК СуммаПродано,
	0 КАК КоличествоОстаток,
	0 КАК СуммаОстаток,
	0 КАК НормаЗапаса,
	ДАТАВРЕМЯ(1, 1, 1) КАК ДатаПоступления,
	ДАТАВРЕМЯ(1, 1, 1) КАК ДатаПродажиПоследнейЕдиницы,
	0 КАК ОстатокСнаб
{ВЫБРАТЬ
	Склад.*,
	Номенклатура.*}
ИЗ
	РегистрНакопления.Продажи.Обороты(
			&НачалоПериода,
			КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ),
			Период,
			Склад <> ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
				И НЕ Склад В (&СкладыБрака)
				И Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга)) КАК ПродажиОбороты

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

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

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

ВЫБРАТЬ
	НормыЗапасовТоваров.Магазин.СкладПродажи,
	НормыЗапасовТоваров.Номенклатура,
	0,
	0,
	0,
	0,
	НормыЗапасовТоваров.НормаЗапаса,
	ДАТАВРЕМЯ(1, 1, 1),
	ДАТАВРЕМЯ(1, 1, 1),
	0
ИЗ
	РегистрСведений.НормыЗапасовТоваров КАК НормыЗапасовТоваров
ГДЕ
	НЕ НормыЗапасовТоваров.Магазин.СкладПродажи В (&СкладыБрака)

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

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

СГРУППИРОВАТЬ ПО
	ТоварыНаСкладахОбороты.Склад,
	ТоварыНаСкладахОбороты.Номенклатура

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

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

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

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

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


Ниже представлены картинки с результатом формирования (Картинка 1 и 2) и самим настройками СКД.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
3. toypaul 63 25.06.20 08:32 Сейчас в теме
Далее здесь

{ВЫБРАТЬ
Склад.*,
Номенклатура.*}

заменить на

{ВЫБРАТЬ
Склад.* КАК СкладОсновной,
Номенклатура.*}

и во все виртуальные таблицы кроме последней в условия добавить к основным условиям примерно так

РегистрНакопления.ТоварыНаСкладах.Остатки(, {(Склад.*) КАК СкладОсновной} НЕ Склад В (&СкладыБрака))

и чтобы понимать что происходит прочитать весь цикл статей https://infostart.ru/public/1219807/
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. toypaul 63 25.06.20 08:25 Сейчас в теме
это что за галиматья?

НЕ Склады.Ссылка В (&мИсклСклады)
И Склады.Ссылка <> &СкладСнаб
И НЕ Склады.Ссылка В (&СкладыБрака)
И НЕ Склады.ПометкаУдаления
И Склады.Магазин.Родитель = ЗНАЧЕНИЕ(Справочник.Магазины.ПустаяСсылка)
И НЕ Склады.Магазин.ПометкаУдаления

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

РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Склад = &СкладСнаб)
4. BAIKOVIT 25.06.20 10:58 Сейчас в теме
(2) Галиматья вынужденная.

А по поводу достаточно выбрать остатки. Недостаточно. Ибо необходимо именно чтобы остаток по снабжению, был напротив каждого склада. А не только напротив Склада снабжения. Хотя может я недопонимаю чего.

За статьи огромное спасибо. Даже не знал как написать запрос, чтобы найти такое.

По заменам в запросе - спасибо большое. Попробую сделать.
5. toypaul 63 25.06.20 11:35 Сейчас в теме
(4)
А не только напротив Склада снабжения. Хотя может я недопонимаю чего.


понял. тогда и к последней части тоже нужно "приладить" место отбора по складу
3. toypaul 63 25.06.20 08:32 Сейчас в теме
Далее здесь

{ВЫБРАТЬ
Склад.*,
Номенклатура.*}

заменить на

{ВЫБРАТЬ
Склад.* КАК СкладОсновной,
Номенклатура.*}

и во все виртуальные таблицы кроме последней в условия добавить к основным условиям примерно так

РегистрНакопления.ТоварыНаСкладах.Остатки(, {(Склад.*) КАК СкладОсновной} НЕ Склад В (&СкладыБрака))

и чтобы понимать что происходит прочитать весь цикл статей https://infostart.ru/public/1219807/
6. BAIKOVIT 06.09.20 20:53 Сейчас в теме
(3) Еще вопрос касаемо расшифровки. Дорвался только сегодня.
Вот запрос СКД:
ВЫБРАТЬ
	ПродажиОбороты.Склад КАК Склад,
	ПродажиОбороты.Номенклатура КАК Номенклатура,
	ПродажиОбороты.КоличествоОборот КАК КоличествоПродано,
	ПродажиОбороты.СтоимостьОборот КАК СуммаПродано,
	0 КАК КоличествоОстаток,
	0 КАК СуммаОстаток,
	0 КАК НормаЗапаса,
	ДАТАВРЕМЯ(1, 1, 1) КАК ДатаПоступления,
	ДАТАВРЕМЯ(1, 1, 1) КАК ДатаПродажиПоследнейЕдиницы,
	0 КАК ОстатокСнаб,
	0 КАК ВПути
{ВЫБРАТЬ
	Склад.*,
	Номенклатура.*,
	КоличествоПродано,
	СуммаПродано,
	КоличествоОстаток,
	СуммаОстаток,
	НормаЗапаса,
	ДатаПоступления,
	ДатаПродажиПоследнейЕдиницы,
	ОстатокСнаб,
	ВПути}
ИЗ
	РегистрНакопления.Продажи.Обороты(
			&НачалоПериода,
			КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ),
			Период,
			Склад <> ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
				И НЕ Склад В (&СкладыБрака)
				И Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга)) КАК ПродажиОбороты
{ГДЕ
	ПродажиОбороты.Склад.*,
	ПродажиОбороты.Номенклатура.*}

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

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

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

ВЫБРАТЬ
	НормыЗапасовТоваров.Магазин.СкладПродажи,
	НормыЗапасовТоваров.Номенклатура,
	0,
	0,
	0,
	0,
	НормыЗапасовТоваров.НормаЗапаса,
	ДАТАВРЕМЯ(1, 1, 1),
	ДАТАВРЕМЯ(1, 1, 1),
	0,
	0
ИЗ
	РегистрСведений.НормыЗапасовТоваров КАК НормыЗапасовТоваров
ГДЕ
	НЕ НормыЗапасовТоваров.Магазин.СкладПродажи В (&СкладыБрака)
{ГДЕ
	НормыЗапасовТоваров.Магазин.СкладПродажи.* КАК Склад,
	НормыЗапасовТоваров.Номенклатура.*}

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

ВЫБРАТЬ
	ТоварыНаСкладахОбороты.Склад,
	ТоварыНаСкладахОбороты.Номенклатура,
	0,
	0,
	0,
	0,
	0,
	МАКСИМУМ(ВЫБОР
			КОГДА ТоварыНаСкладахОбороты.Регистратор.ДатаСоздания = ДАТАВРЕМЯ(1, 1, 1)
				ТОГДА ТоварыНаСкладахОбороты.Период
			ИНАЧЕ ТоварыНаСкладахОбороты.Регистратор.ДатаСоздания
		КОНЕЦ),
	ДАТАВРЕМЯ(1, 1, 1),
	0,
	0
ИЗ
	РегистрНакопления.ТоварыНаСкладах.Обороты(ДОБАВИТЬКДАТЕ(&Период, МЕСЯЦ, -12), &КонецПериода, Запись, НЕ Склад В (&СкладыБрака)) КАК ТоварыНаСкладахОбороты
ГДЕ
	(ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПриходныйОрдерНаТовары
			ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваров)
{ГДЕ
	ТоварыНаСкладахОбороты.Склад.*,
	ТоварыНаСкладахОбороты.Номенклатура.*}

СГРУППИРОВАТЬ ПО
	ТоварыНаСкладахОбороты.Склад,
	ТоварыНаСкладахОбороты.Номенклатура

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

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

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

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

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

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

ВЫБРАТЬ
	ТоварыВПутиОстатки.СкладПолучатель,
	ТоварыВПутиОстатки.Номенклатура,
	0,
	0,
	0,
	0,
	0,
	0,
	0,
	0,
	ТоварыВПутиОстатки.КоличествоОстаток
ИЗ
	РегистрНакопления.ТоварыВПути.Остатки(
			&Период,
			НЕ СкладПолучатель В (&СкладыБрака)
				И НЕ СкладОтправитель В (&СкладыБрака)) КАК ТоварыВПутиОстатки
{ГДЕ
	ТоварыВПутиОстатки.СкладПолучатель.* КАК Склад,
	ТоварыВПутиОстатки.Номенклатура.*}
Показать


и Проблема в том, что при расшифровке по номенклатуре на колонку "В пути" не применяется отбор. Ну т.е. по регистру накоплений ТоварыВПути. Пример на картинке ниже.
В чем может быть проблема? Статьи читал.
Прикрепленные файлы:
Оставьте свое сообщение

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