Имя: Пароль:
1C
1С v8
Товары без движения за период с остатком на складе
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)
найди разницу. посмотри движения разницы в РН. думой.