Товары без движения

1. ghostrid3r 11.09.18 12:13 Сейчас в теме
Добрый день, уважаемые форумчане.
Помогите решить проблему следующего характера.
Суть необходимо получить все товары по которым не было движений за период, а также те товары которых есть в справочнике номенклатуры, но на складах их количество равно 0.

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

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

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

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

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

Показать


В первом запросе выбрал остаткииобороты по товарам на складах с условием что количество конечный остаток больше нуля, и вторым условием что количество приход и количество расход =0.
во втором запросе левым соединением к справочнику номенклатуры прицепил тот же регистр остатков и оборотов по товарам, но уже с отбором что количество конечный остаток равно 0 и второе условие такое же.
Вроде все правильно работало, но появилась такая ситуация.
На склад был приход товаров и возврат, в итоге количество конечный остаток стало равно 0 и выполнился запрос 2 когда количество остаток равно 0 и соединяется с номенклатурой.
Подскажите как правильно написать данный запрос, чтобы исключить такие ситуации, т.к. если в вирт таблице конечный остаток за период 0, он не показывает, что были приходы и расходы.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. config 191 11.09.18 12:17 Сейчас в теме
Надо сначала обходить справочник номенклатуры, а затем обращаться к остаткам
3. ghostrid3r 11.09.18 12:23 Сейчас в теме
(2)
ну так и есть вроде во втором обьединении
4. ghostrid3r 11.09.18 14:01 Сейчас в теме
возврат делает приход с минусовым количеством, в итоге данных в регистре нет, если не использовать периодичность
как можно по другому выйти из ситуации?
5. YannikAlx 43 11.09.18 14:26 Сейчас в теме
ГДЕ
ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
И ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход = 0
{ГДЕ

"...и вторым условием что количество приход и количество расход =0...."


Нестыковочка получается в описании и реализации все по разному
6. ghostrid3r 11.09.18 14:53 Сейчас в теме
(5) ну я написал так.
все суть в том чтобы показать товары:
1) которые есть на складе, и по которым не было движений (получается надо и расход и приход проверять)
2) товары из справочника номенклатуры которых нет на складах, и за выбранный период по ним так же не было движений.
7. ghostrid3r 11.09.18 14:54 Сейчас в теме
если есть вариант лучшей организации запроса, помогите напишите или опишите.
8. YannikAlx 43 11.09.18 17:02 Сейчас в теме
И регистр вы прицепили к Номенклатуре уже другой а не "ТОТ ЖЕ"...
В первом РегистрНакопления.ПартииТоваровНаСкладах
Во втором РегистрНакопления.ТоварыНаСкладах

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

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

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

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

СГРУППИРОВАТЬ ПО
	СпрНоменклатура.Ссылка,
	ТоварыНаСкладахОстаткиИОбороты.Склад
Показать
10. ghostrid3r 12.09.18 08:17 Сейчас в теме
(9)
в этом же запросе, такой же косяк как и у меня.
т.е. движения по товару были но конечный остаток равен 0, а по товару был приход и возврат.
без периодичности данные не покажет, всегда пусто, что можно придумать?
11. YannikAlx 43 12.09.18 09:08 Сейчас в теме
Покажите движения по этому товару, чтобы я мог смоделировать.
Именно все движения, сфоткайте экран с отчетом

Потому как я тестировал на все вами описанные ситуации - все четко работает.
17. ghostrid3r 12.09.18 10:57 Сейчас в теме
(11)
вот движения
Прикрепленные файлы:
12. independ 1522 12.09.18 09:25 Сейчас в теме
Простой вариант, дполнительные условия можно потом прицепить
ВЫБРАТЬ
	ТоварыНаСкладахОстатки.Номенклатура
ПОМЕСТИТЬ ВТ_ОстаткиОбороты
ИЗ
	РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки

ОБЪЕДИНИТЬ

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Номенклатура.Ссылка
ИЗ
	Справочник.Номенклатура КАК Номенклатура
ГДЕ
	НЕ Номенклатура.Ссылка В
				(ВЫБРАТЬ
					ВТ_ОстаткиОбороты.Номенклатура
				ИЗ
					ВТ_ОстаткиОбороты КАК ВТ_ОстаткиОбороты)
	И НЕ Номенклатура.ЭтоГруппа
Показать
13. YannikAlx 43 12.09.18 09:31 Сейчас в теме
(12) Вообще непонятно - к чему эта виртуальная таблица?
Быстрее - нет, меньше ресурсов - нет, читабельнее - нет...
Зачем воообще выбирать абсолютно все обороты из регистра и лепить в виртуалку???
14. pm74 199 12.09.18 10:04 Сейчас в теме
(12) условия забыли в первой ВТ
сорри глупость написал
15. YannikAlx 43 12.09.18 10:27 Сейчас в теме
16. YannikAlx 43 12.09.18 10:36 Сейчас в теме
Под ваше условие убрал лишние условия - из первой части остатки не нужно проверять а во второй не нужно проверять обороты

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

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

	

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

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

СГРУППИРОВАТЬ ПО
	СпрНоменклатура.Ссылка,
	ТоварыНаСкладахОстаткиИОбороты.Склад ,
	ТоварыНаСкладахОстаткиИОбороты.ВНаличииОборот
Показать
18. ghostrid3r 12.09.18 11:03 Сейчас в теме
(16)
делаю простой запрос

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


c периодичностью "ДЕНЬ" я вижу приход в этом периоде, как только убираю периодичность запрос выдает пустой результат
Оставьте свое сообщение

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