|
Товары без движения за период с остатком на складе | ☑ | ||
---|---|---|---|---|
0
Yunniy_Proger
23.03.23
✎
12:32
|
Добрый день!
Делаю запрос по получению товаров за период без движениями у которых остаток на складе больше 0. Проблема в том , что если за этот период приход и расход одинаковый , то оборот считается 0 и запрос срабатывает не так, как нужно. Подскажите пожалуйста, что мне добавить ,чтобы приходов и расходов по складу не было за выбранный период. ВЫБРАТЬ НоменклатураСпр.Ссылка КАК Номенклатура, ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад, ТоварыНаСкладахОстаткиИОбороты.ВНаличииПриход КАК ВНаличииПриход, ТоварыНаСкладахОстаткиИОбороты.ВНаличииРасход КАК ВНаличииРасход, ТоварыНаСкладахОстаткиИОбороты.ВНаличииОборот КАК ВНаличииОборот, ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток КАК ВНаличииНачальныйОстаток, ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток ИЗ Справочник.Номенклатура КАК НоменклатураСпр ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты ПО (НоменклатураСпр.Ссылка = ТоварыНаСкладахОстаткиИОбороты.Номенклатура) ГДЕ ТоварыНаСкладахОстаткиИОбороты.ВНаличииОборот = 0 И ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток > 0 ИТОГИ СУММА(ВНаличииКонечныйОстаток) ПО Склад |
|||
1
Волшебник
23.03.23
✎
12:33
|
ГДЕ Приход = 0 И Расход = 0
|
|||
2
Yunniy_Proger
23.03.23
✎
12:43
|
(1) Ничего не показывает так
|
|||
3
Волшебник
23.03.23
✎
12:44
|
Действительно. Вам нужно условие на IS NULL
|
|||
4
Волшебник
23.03.23
✎
12:45
|
Нужно 2 левых соединения. Первое даёт остатки, а по второму добавить условие на IS NULL
|
|||
5
azernot
23.03.23
✎
12:53
|
Зачем вообще в запросе соединение? Всё можно получить из одной таблицы РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты
|
|||
6
Fish
23.03.23
✎
13:02
|
(5) Не получится, т.к. нужно выбрать товары, у которых не было движения за период, т.е. в ОстаткиИОбороты пусто.
|
|||
7
Yunniy_Proger
23.03.23
✎
13:09
|
(4) Не совсем понял, два соединения каких, ну первое Левое НоменклатураСпр по ТоварыНаСкладахНоменклатура , а второе какое?
|
|||
8
Irbis
23.03.23
✎
13:09
|
При левом соединении иногда имеет смысл и конструкцию типа ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.ВНаличииПриход, 0) КАК ВНаличииПриход применять
|
|||
9
lodger
23.03.23
✎
13:10
|
(4) вроде 1 достаточно?
1) Остатки(&КонецПериода, Склад = &Склад) 2) Обороты(&НачалоПериода, &КонецПериода, Авто, Склад = &Склад) и в ГДЕ КоличествоОборот ЕСТЬ NULL |
|||
10
azernot
23.03.23
✎
13:13
|
(6) ОстаткиИОбороты за период в целом выдаст данные об остатках даже если оборотов не было.
|
|||
11
ptiz
23.03.23
✎
13:15
|
(0) Если был Приход 10 шт и Расход 10 шт, то поможет (1).
Если был Приход 10 шт и Приход -10 шт, то поможет только обращение к физ.таблице движений. |
|||
12
Yunniy_Proger
23.03.23
✎
13:15
|
(9) Отдельно присоединять остатки и отдельно обороты?
|
|||
13
Yunniy_Proger
23.03.23
✎
13:18
|
(11) Да, приход есть с минусом
|
|||
14
Волшебник
23.03.23
✎
13:22
|
(12) да
|
|||
15
lodger
23.03.23
✎
16:43
|
(11) зачем сразу лезть в большую табу, если в Обороты все равно будет строчка?
|
|||
16
НафНаф
23.03.23
✎
16:45
|
(15) какие ваши доказательства?
|
|||
17
lodger
23.03.23
✎
17:37
|
(16) Конcоль Запросов в помощь, друг!
|
|||
18
eddy_n
23.03.23
✎
21:08
|
1. Выбираем из Оборотов всю номенклатуру, где был приход или расход. Помещаем во ВТ.
2. Выбираем из Остатков всю номенклатуру, где был остаток и которая не входит в том массив номенклатуры, что присутствует во ВТ. |
|||
19
Гена
23.03.23
✎
21:43
|
Чисто алгоритмически я пошёл бы по пути двух обращений, предложенных (4).
Какие точно нам не нужны? Если начальный остаток не равен конечному = сто пудов были движения. 1. Выбираем только те, для которых Нач = Кон и не равно нулю любой из них на вкус автора 2. Из полученной выборки выбираем тех, у кого Приход = 0 Почему достаточно? Потому что приход +/- тоже наш = была коррекция и в реале прихода не было. (Ну или Расход = 0 на вкус автора) |
|||
20
Yunniy_Proger
27.03.23
✎
12:24
|
(14)
В таком запросе все равно по итогу выводится товар, у которого был одинаковый приход и расход , то есть оборот есть null ВЫБРАТЬ НоменклатураСпр.Ссылка КАК Номенклатура, ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены, ЦеныНоменклатурыСрезПоследних.Цена КАК Цена, ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Остаток, ТоварыНаСкладахОстатки.Склад КАК СкладОрганизации ИЗ Справочник.Номенклатура КАК НоменклатураСпр ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних ПО (НоменклатураСпр.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура) ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки ПО (НоменклатураСпр.Ссылка = ТоварыНаСкладахОстатки.Номенклатура) ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Обороты(&НачалоПериода, &КонецПериода, Авто, Склад = &Склад) КАК ТоварыНаСкладахОбороты ПО (НоменклатураСпр.Ссылка = ТоварыНаСкладахОбороты.Номенклатура) ГДЕ ТоварыНаСкладахОбороты.ВНаличииОборот ЕСТЬ NULL И ТоварыНаСкладахОстатки.ВНаличииОстаток > 0 |
|||
21
Yunniy_Proger
27.03.23
✎
13:00
|
(15) что за строчка такая?
|
|||
22
Eiffil123
27.03.23
✎
14:08
|
(0) ВЫБРАТЬ
ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура, ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты ГДЕ ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток <> 0 И ТоварыНаСкладахОстаткиИОбороты.ВНаличииПриход = 0 И ТоварыНаСкладахОстаткиИОбороты.ВНаличииРасход = 0 |
|||
23
lodger
27.03.23
✎
14:26
|
(20) у тебя во фразе " у которого был одинаковый приход и расход , то есть оборот есть null"
логическая нестыковка. у которого был одинаковый приход и расход, то есть оборот = 0. а null, это когда вообще никаких приход и расход не было. |
|||
24
Yunniy_Proger
30.03.23
✎
10:41
|
(22) Вроде бы сработало. Спасибо!!!
|
|||
25
lodger
30.03.23
✎
16:16
|
(24) а теперь сравни (22) и (20)
найди разницу. посмотри движения разницы в РН. думой. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |