Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Вопрос по запросу

Вопрос по запросу
Я
   IVT_2009
 
07.07.20 - 10:54
Есть простой запрос , результат которого показывает остаток в магазине в разрезе характеристик товара , которому присвоен штрих код.

Если просто выполнить запрос:

ВЫБРАТЬ
        Штрихкоды.Владелец КАК Владелец,
        Штрихкоды.Характеристика КАК Характеристика
    ИЗ
        РегистрСведений.Штрихкоды КАК Штрихкоды
    ГДЕ
        Штрихкоды.Штрихкод = &Штрихкод

выдает три позиции товара с характеристиками. Хотим знать остаток:

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

в запрос соединяем левым соединением отбор товара для данного штрих кода и регистр остатка
по полу товар и характеристика. В результате две позиции товара, должно показать три.
почему так?

Технически левое соединение главной таблицы с 3 мя записями и подчиненной с двумя должно дать на выходе три записи , но дает только две. Запрос для 1с розница
   Джинн
 
1 - 07.07.20 - 10:57
Запрос к регистру накопления, а к нему левым соединением штрихкоды. И научитесь пользоваться виртуальными таблицами.
   asady
 
2 - 07.07.20 - 10:59
(0)
ГДЕ
    ТоварыНаСкладахОстатки.Склад = &Склад
это перенеси в ПВТ
   acht
 
3 - 07.07.20 - 10:59
(0) Вся магия здесь:

ГДЕ
    ТоварыНаСкладахОстатки.Склад = &Склад
   unregistered
 
4 - 07.07.20 - 10:59
(0) Про условие забыли.

ГДЕ 
     ТоварыНаСкладахОстатки.Склад = &Склад


Это условие отравляет всю логику Ваших рассуждений.
   IVT_2009
 
5 - 07.07.20 - 11:00
(1) я специально не стал тут их использовать. Сейчас перепишу - посмотрю на результат.
Основной таблице должен быть отбор товара , так как интересны позиции без остатков так же.
   unregistered
 
6 - 07.07.20 - 11:00
А вообще соглашусь с (1). Запрос - *авно.
   IVT_2009
 
7 - 07.07.20 - 11:01
(4) оно отбирает две записи , которые связаны с тремя основной таблицы.
   unregistered
 
8 - 07.07.20 - 11:02
(7) Совершенно верно. Но тогда почему вы ждёте три записи на выходе, если сами же ставите условие, что нужны только две?
   Джинн
 
9 - 07.07.20 - 11:03
(5) Если интересны позиции без остатков, то запрос к справочнику номенклатуры. Зачем к остаткам тогда обращаться?
   unregistered
 
10 - 07.07.20 - 11:04
Короче. Изучите что такое параметры виртуальных таблиц и разберитесь - где нужно ставить условия, где параметры, а где использовать временные таблицы.
   IVT_2009
 
11 - 07.07.20 - 11:05
(9) нужны все позиции по заданному штрих коду , где есть остатки и где их нет.
Видится отбор этих позиций по РС штрих коду и потом связь с регистром остатков левым соединением
Остатки интересны по текущему магазину. Очевидно что их предварительно по магазину отобрать а потом связать результат то же не очень идея
   IVT_2009
 
12 - 07.07.20 - 11:11
Такой запрос отработал правильно , но он мне честно говоря не нравится

ВЫБРАТЬ
    шкОтбор.Владелец КАК Владелец,
    шкОтбор.Характеристика КАК Характеристика
ПОМЕСТИТЬ втШк
ИЗ
    (ВЫБРАТЬ
        Штрихкоды.Владелец КАК Владелец,
        Штрихкоды.Характеристика КАК Характеристика
    ИЗ
        РегистрСведений.Штрихкоды КАК Штрихкоды
    ГДЕ
        Штрихкоды.Штрихкод = &Штрихкод) КАК шкОтбор
;

////////////////////////////////////////////////////////////////////////////////

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

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    втШк.Владелец КАК Владелец,
    втШк.Характеристика КАК Характеристика,
    выбОстаток.КоличествоОстаток КАК КоличествоОстаток
ИЗ
    втШк КАК втШк
        ЛЕВОЕ СОЕДИНЕНИЕ выбОстаток КАК выбОстаток
        ПО втШк.Владелец = выбОстаток.Номенклатура
            И втШк.Характеристика = выбОстаток.Характеристика

вопрос , чем подзапрос отличается от виртуальной таблицы в данном случае ?
(опыт написания SQL запросов с 1997 года)
   asady
 
13 - 07.07.20 - 11:14
(12) после 97 года чему-нить еще научились?
тебе написали уже ПВТ - параметры виртуальной таблицы - заполни!
зачем временные таблицы насоздавал?
   IVT_2009
 
14 - 07.07.20 - 11:19
Такой запрос , то же показал правильный результат

ВЫБРАТЬ
    шкОтбор.Владелец КАК Владелец,
    шкОтбор.Характеристика КАК Характеристика,
    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
ИЗ
    (ВЫБРАТЬ
        Штрихкоды.Владелец КАК Владелец,
        Штрихкоды.Характеристика КАК Характеристика
    ИЗ
        РегистрСведений.Штрихкоды КАК Штрихкоды
    ГДЕ
        Штрихкоды.Штрихкод = &Штрихкод) КАК шкОтбор
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&период, Склад = &склад) КАК ТоварыНаСкладахОстатки
        ПО (шкОтбор.Владелец = ТоварыНаСкладахОстатки.Номенклатура)
            И (шкОтбор.Характеристика = ТоварыНаСкладахОстатки.Характеристика)
   IVT_2009
 
15 - 07.07.20 - 11:23
(13) понял. Спасибо! все заработало как надо.

Список тем форума
Рекламное место пустует  Рекламное место пустует
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.