Имя: Пароль:
1C
1С v8
Запрос по остаткам
,
0 progaoff
 
12.11.20
14:00
ПОМЕСТИТЬ ВТ_ОстаткиТоваров
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
                &Период,
                Склад В (&МассивСкладов)
                    И НЕ СерияНоменклатуры.БракОписан) КАК ТоварыНаСкладахОстатки
            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
            ПО ТоварыНаСкладахОстатки.Склад = Склады.Ссылка
                И ТоварыВРезервеНаСкладахОстатки.Склад = Склады.Ссылка
        ПО СпрНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
                &Период,
                Склад В (&МассивСкладов)
                    И НЕ СерияНоменклатуры.БракОписан) КАК ТоварыВРезервеНаСкладахОстатки
        ПО СпрНоменклатура.Ссылка = ТоварыВРезервеНаСкладахОстатки.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПоставщикам.Остатки(&Период, НЕ ЗаказПоставщику.Склад В (&ДальниеСклады)) КАК ЗаказыПоставщикамОстатки
        ПО СпрНоменклатура.Ссылка = ЗаказыПоставщикамОстатки.Номенклатура

Добрый день, подскажите, есть запрос, пытаюсь соединение по складам сделать, пишет - Поле не найдено "ТоварыВРезервеНаСкладахОстатки.Склад"
Что не так делаю? Заранее благодарен
1 ДенисЧ
 
12.11.20
14:05
Я тоже в приведённом запросе этого поля не нашёл...
Рад, что хоть твоя 1с со мной на одной волне...
2 lodger
 
12.11.20
14:07
ну смотри.
сперва к Справочник.Номенклатура приделан РегистрНакопления.ТоварыНаСкладах.Остатки
а к ним Справочник.Склады
при чем тут ТоварыВРезервеНаСкладахОстатки.Склад?
3 progaoff
 
12.11.20
14:10
(1) ))) Как его связать?
4 ДенисЧ
 
12.11.20
14:12
(3) Попробуй вот это видеоруководство
https://www.youtube.com/watch?v=tJi3zi4yVWM
5 youalex
 
12.11.20
14:14
И ТоварыВРезервеНаСкладахОстатки.Склад = Склады.Ссылка

у тебя на этот момент еще соединения с РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки нет , и псевдонима ТоварыВРезервеНаСкладахОстатки, соответственно тоже
6 progaoff
 
12.11.20
14:45
(5) да это я уже понял.
7 progaoff
 
12.11.20
14:50
Теперь бы понять как соединение сделать верно.
8 youalex
 
12.11.20
14:54
Для начала нужно понять, зачем тебе это соединение
9 progaoff
 
12.11.20
15:16
(8) В разрезе склада увидеть свободный остаток
10 youalex
 
12.11.20
15:28
Нулевые остатки тоже нужно видеть?
11 progaoff
 
12.11.20
15:35
(10) ага
12 progaoff
 
12.11.20
15:45
ВЫБРАТЬ
    СпрНоменклатура.Ссылка КАК Номенклатура,
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК ОстатокНаСкладе,
    ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) КАК РезервПодРозницу,
    ЕСТЬNULL(ЗаказыПоставщикамОстатки.КоличествоОстаток, 0) КАК ЗаказаноПоставщикам,
    Склады.Ссылка КАК Склад
ПОМЕСТИТЬ ВТ_ОстаткиТоваров
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
                &Период,
                Склад В (&МассивСкладов)
                    И НЕ СерияНоменклатуры.БракОписан) КАК ТоварыНаСкладахОстатки
            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
            ПО ТоварыНаСкладахОстатки.Склад = Склады.Ссылка
                И ТоварыНаСкладахОстатки.Склад = Склады.Ссылка
        ПО СпрНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
                &Период,
                Склад В (&МассивСкладов)
                    И НЕ СерияНоменклатуры.БракОписан) КАК ТоварыВРезервеНаСкладахОстатки
        ПО СпрНоменклатура.Ссылка = ТоварыВРезервеНаСкладахОстатки.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПоставщикам.Остатки(&Период, НЕ ЗаказПоставщику.Склад В (&ДальниеСклады)) КАК ЗаказыПоставщикамОстатки
        ПО СпрНоменклатура.Ссылка = ЗаказыПоставщикамОстатки.Номенклатура
ГДЕ
    НЕ СпрНоменклатура.ПометкаУдаления
    И НЕ СпрНоменклатура.ЭтоГруппа
    И НЕ СпрНоменклатура.СтатусНеПоставляется
    И СпрНоменклатура.Ссылка В ИЕРАРХИИ(&ГруппаБытоваяТехника)
Вот что было.
13 youalex
 
12.11.20
15:50
Тогда тебе надо кросс-джойн номенклатуры со складами, а потом уже к этой матрице Номенклатура/Склад цеплять таблицы остатков
14 progaoff
 
12.11.20
16:50
(13) не совсем понял
15 Said_We
 
12.11.20
17:05
(13) Нееее....
Сначала надо в подзапрос или ВТ засунуть номенклатуру с фильтрами СпрНоменклатура.Ссылка В ИЕРАРХИИ(&ГруппаБытоваяТехника)
Далее при сборе всех остатков по всем регистрам тоже этот фильтр на номенклатуру использовать.
А потом уже что-то с чем-то связывать. Но вместо трех джоинов можно использовать только один. Сначала остатки объединить и свернуть по номенклатуре.
16 youalex
 
12.11.20
17:15
(15) Так ему остатки нужны в разрезе Склад/Номенклатура, как я понял. Иначе из-за чего весь сыр-бор? )  
С фильтрами - да.
В ВТ лучше запихивать не Номенклатуру, а данные таблиц остатков, а к Номенклатура/Склад уже цеплять эти ВТ с остатками
17 lodger
 
12.11.20
21:00
(15)
интересно, быстрее
"Сначала остатки объединить и свернуть по Склад/Номенклатура."
или просто приджоинить к таблице остатков таблицу резервов?
например, от запроса мне нужны те и другие цифры отдельно, а заниматься их анализом будем уже в коде.
18 Said_We
 
13.11.20
09:43
(17) Конечно отдельно так же как в (0). В чем проблема-то?
19 Said_We
 
13.11.20
09:45
(17) Отдельно как в (12). Склад, номенклатура и три поля с разными остатками...
20 Said_We
 
13.11.20
10:50
Это как суть описанного (15) в первом приближении - не проверял и писал ручками. Мог что-то "написать" :-)
Не знаю я что там за дальние склады... И почему по резервам нет фильтра "В (&МассивСкладов)". Я не разбирался в логике что необходимо вытащить. Вот как в (12), только переписал.
Получилось примерно так:
-------------------------------------

ВЫБРАТЬ
    СпрНоменклатура.Ссылка КАК Номенклатура
Поместить ВТ_Номенклатура
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
ГДЕ
    СпрНоменклатура.Ссылка В ИЕРАРХИИ(&ГруппаБытоваяТехника)
    И НЕ СпрНоменклатура.СтатусНеПоставляется
    И НЕ СпрНоменклатура.ЭтоГруппа
    И НЕ СпрНоменклатура.ПометкаУдаления
;

ВЫБРАТЬ
    ВложенныйЗапрос.Склад КАК Склад,
    ВТ_Номенклатура.Номенклатура КАК Номенклатура,
    ЕСТЬNULL(ВложенныйЗапрос.ОстатокНаСкладе, 0) КАК ОстатокНаСкладе,
    ЕСТЬNULL(ВложенныйЗапрос.РезервПодРозницу, 0) КАК РезервПодРозницу,
    ЕСТЬNULL(ВложенныйЗапрос.ЗаказаноПоставщикам, 0) КАК ЗаказаноПоставщикам
ИЗ
    ВТ_Номенклатура КАК ВТ_Номенклатура

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

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

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

ВЫБРАТЬ
        ТоварыВРезервеНаСкладах.ЗаказПоставщику.Склад,
        ТоварыВРезервеНаСкладах.Номенклатура КАК Номенклатура,
        0,
        0,
        ТоварыВРезервеНаСкладах.КоличествоОстаток
    ИЗ
        РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
                &Период,
                НЕ ЗаказПоставщику.Склад В (&ДальниеСклады)
                    И Номенклатура В (ВЫБРАТЬ т.Номенклатура ИЗ ВТ_Номенклатура КАК т)
                    И НЕ СерияНоменклатуры.БракОписан) КАК ТоварыВРезервеНаСкладах
    ) КАК ВложенныйЗапрос
СГРУППИРОВАТЬ ПО
        ВложенныйЗапрос.Склад КАК Склад,
        ВложенныйЗапрос.Номенклатура
    ) КАК ВложенныйЗапрос
    ПО ВТ_Номенклатура.Номенклатура = ВложенныйЗапрос.Номенклатура
21 Said_We
 
13.11.20
10:52
Ну да в запросе по резервам лишнее условие: "И НЕ СерияНоменклатуры.БракОписан".
22 Said_We
 
13.11.20
10:52
В общем суть нарисовал для (0) далее осталось проверить и может что подправить.
23 progaoff
 
13.11.20
10:56
(22) Вот спасибо)
24 Said_We
 
13.11.20
11:07
(23) Проверил?
25 progaoff
 
13.11.20
11:17
(24) Смотрю.
26 progaoff
 
13.11.20
11:19
На скобку матерится,
СГРУППИРОВАТЬ ПО
        ВложенныйЗапрос.Склад КАК Склад,
27 Ненавижу 1С
 
гуру
13.11.20
11:21
конфигурация какая хоть?
28 progaoff
 
13.11.20
11:22
ка 1.1
29 progaoff
 
13.11.20
11:33
(24) матерится из начально ЛЕВОЕ СОЕДИНЕНИЕ
        (ВложенныйЗапрос.Склад КАК Склад,
30 lubitelxml
 
13.11.20
11:52
(29) там "Выбрать" пропущено похоже
31 progaoff
 
13.11.20
11:59
(30) Это я уже понял.
СГРУППИРОВАТЬ ПО
        ВложенныйЗапрос.Склад КАК Склад,
Дальше сюда матерится на скобку
32 Said_We
 
13.11.20
12:01
"ВложенныйЗапрос.Склад КАК Склад," в группировке нет КАК. Замени на "ВложенныйЗапрос.Склад,"
33 Said_We
 
13.11.20
12:15
Ещё где-то ругается?
34 progaoff
 
13.11.20
12:21
(33) Все, спасибо. Плохо быть по пояс деревянным))
35 progaoff
 
24.11.20
16:38
Блин, я конечно понимаю что туплю)) но нужен еще хелб по этой проблеме, дело в том, что запрос не выдает склады где товара нет совсем.
36 lubitelxml
 
24.11.20
16:40
(35) сначала выбери запросом все склады, и соедини левым твою результирующую таблицу по полю склад
37 progaoff
 
24.11.20
17:39
(36) пытался, не получается( все равно результат без 0
38 progaoff
 
24.11.20
18:14
ВЫБРАТЬ
    МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период,
    ЦеныНоменклатуры.ТипЦен КАК ТипЦен,
    ЦеныНоменклатуры.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ВТ_ПоследниеЦены
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ГДЕ
    ЦеныНоменклатуры.ТипЦен = &БазоваяРРЦ
    И ЦеныНоменклатуры.Период <= &Период

СГРУППИРОВАТЬ ПО
    ЦеныНоменклатуры.ТипЦен,
    ЦеныНоменклатуры.Номенклатура

ИНДЕКСИРОВАТЬ ПО
    Период,
    ТипЦен,
    Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_ПоследниеЦены.Период КАК Период,
    ВТ_ПоследниеЦены.ТипЦен КАК ТипЦен,
    ВТ_ПоследниеЦены.Номенклатура КАК Номенклатура,
    ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ВТ_АктуальныеТоварыСЦеной
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ПоследниеЦены КАК ВТ_ПоследниеЦены
        ПО ЦеныНоменклатуры.Период = ВТ_ПоследниеЦены.Период
            И ЦеныНоменклатуры.Номенклатура = ВТ_ПоследниеЦены.Номенклатура
            И ЦеныНоменклатуры.ТипЦен = ВТ_ПоследниеЦены.ТипЦен
ГДЕ
    ЦеныНоменклатуры.Цена <> 0

ИНДЕКСИРОВАТЬ ПО
    Период,
    ТипЦен,
    Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Склады.Ссылка КАК Склад
ПОМЕСТИТЬ ВТ_Склады
ИЗ
    Справочник.Склады КАК Склады
ГДЕ
    Склады.Ссылка В(&МассивСкладов)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    СпрНоменклатура.Ссылка КАК Номенклатура
ПОМЕСТИТЬ ВТ_Номенклатура
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
ГДЕ
    СпрНоменклатура.Ссылка В ИЕРАРХИИ(&ГруппаБытоваяТехника)
    И НЕ СпрНоменклатура.ЭтоГруппа
    И НЕ СпрНоменклатура.ПометкаУдаления
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_АктуальныеТоварыСЦеной.Номенклатура КАК Номенклатура,
    ВТ_АктуальныеТоварыСЦеной.Цена КАК Цена,
    ВТ.ОстатокНаСкладе КАК ОстатокНаСкладе,
    ВТ.РезервПодРозницу КАК РезервПодРозницу,
    ВТ.ЗаказаноПоставщикам КАК ЗаказаноПоставщикам,
    ВЫБОР
        КОГДА ВТ.ОстатокНаСкладе - ВТ.РезервПодРозницу > 0
            ТОГДА "В наличии"
        КОГДА ВТ.ОстатокНаСкладе - ВТ.РезервПодРозницу <= 0
                И ВТ.ЗаказаноПоставщикам > 0
            ТОГДА "Ожидается"
        ИНАЧЕ "Под заказ"
    КОНЕЦ КАК Статус,
    ВТ_АктуальныеТоварыСЦеной.Номенклатура.Код КАК Код,
    ВТ.ОстатокНаСкладе - ВТ.РезервПодРозницу КАК Количество,
    ВТ_Склады.Склад КАК Склад
ИЗ
    ВТ_АктуальныеТоварыСЦеной КАК ВТ_АктуальныеТоварыСЦеной
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ
            ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Склады КАК ВТ_Склады
            ПО ВТ.Склад = ВТ_Склады.Склад
        ПО ВТ_АктуальныеТоварыСЦеной.Номенклатура = ВТ.Номенклатура
39 Said_We
 
24.11.20
20:53
(38) Склады основная таблица. И к ней уже всё что нужно.....
40 progaoff
 
26.11.20
10:50
(39) Да нифффффига не получается, уже который день мучаюсь с этим запросом