|   |   | 
| 
 | Вопрос по запросу | ☑ | ||
|---|---|---|---|---|
| 0
    
        IVT_2009 07.07.20✎ 10:54 | 
        Есть простой запрос , результат которого показывает остаток в магазине в разрезе характеристик товара , которому присвоен штрих код.
 Если просто выполнить запрос: ВЫБРАТЬ Штрихкоды.Владелец КАК Владелец, Штрихкоды.Характеристика КАК Характеристика ИЗ РегистрСведений.Штрихкоды КАК Штрихкоды ГДЕ Штрихкоды.Штрихкод = &Штрихкод выдает три позиции товара с характеристиками. Хотим знать остаток: ВЫБРАТЬ шкОтбор.Владелец КАК Владелец, шкОтбор.Характеристика КАК Характеристика, ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток ИЗ (ВЫБРАТЬ Штрихкоды.Владелец КАК Владелец, Штрихкоды.Характеристика КАК Характеристика ИЗ РегистрСведений.Штрихкоды КАК Штрихкоды ГДЕ Штрихкоды.Штрихкод = &Штрихкод) КАК шкОтбор ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки ПО (шкОтбор.Владелец = ТоварыНаСкладахОстатки.Номенклатура И шкОтбор.Характеристика = ТоварыНаСкладахОстатки.Характеристика) ГДЕ ТоварыНаСкладахОстатки.Склад = &Склад в запрос соединяем левым соединением отбор товара для данного штрих кода и регистр остатка по полу товар и характеристика. В результате две позиции товара, должно показать три. почему так? Технически левое соединение главной таблицы с 3 мя записями и подчиненной с двумя должно дать на выходе три записи , но дает только две. Запрос для 1с розница | |||
| 1
    
        Джинн 07.07.20✎ 10:57 | 
        Запрос к регистру накопления, а к нему левым соединением штрихкоды. И научитесь пользоваться виртуальными таблицами.     | |||
| 2
    
        asady 07.07.20✎ 10:59 | 
        (0)
 ГДЕ ТоварыНаСкладахОстатки.Склад = &Склад это перенеси в ПВТ | |||
| 3
    
        acht 07.07.20✎ 10:59 | 
        (0) Вся магия здесь:
 ГДЕ ТоварыНаСкладахОстатки.Склад = &Склад | |||
| 4
    
        unregistered 07.07.20✎ 10:59 | 
        (0) Про условие забыли.
 ГДЕ 
Это условие отравляет всю логику Ваших рассуждений. | |||
| 5
    
        IVT_2009 07.07.20✎ 11:00 | 
        (1) я специально не стал тут их использовать. Сейчас перепишу - посмотрю на результат.
 Основной таблице должен быть отбор товара , так как интересны позиции без остатков так же. | |||
| 6
    
        unregistered 07.07.20✎ 11:00 | 
        А вообще соглашусь с (1). Запрос - *авно.     | |||
| 7
    
        IVT_2009 07.07.20✎ 11:01 | 
        (4) оно отбирает две записи , которые связаны с тремя основной таблицы.     | |||
| 8
    
        unregistered 07.07.20✎ 11:02 | 
        (7) Совершенно верно. Но тогда почему вы ждёте три записи на выходе, если сами же ставите условие, что нужны только две?     | |||
| 9
    
        Джинн 07.07.20✎ 11:03 | 
        (5) Если интересны позиции без остатков, то запрос к справочнику номенклатуры. Зачем к остаткам тогда обращаться?     | |||
| 10
    
        unregistered 07.07.20✎ 11:04 | 
        Короче. Изучите что такое параметры виртуальных таблиц и разберитесь - где нужно ставить условия, где параметры, а где использовать временные таблицы.     | |||
| 11
    
        IVT_2009 07.07.20✎ 11:05 | 
        (9) нужны все позиции по заданному штрих коду , где есть остатки и где их нет.
 Видится отбор этих позиций по РС штрих коду и потом связь с регистром остатков левым соединением Остатки интересны по текущему магазину. Очевидно что их предварительно по магазину отобрать а потом связать результат то же не очень идея | |||
| 12
    
        IVT_2009 07.07.20✎ 11:11 | 
        Такой запрос отработал правильно , но он мне честно говоря не нравится
 ВЫБРАТЬ шкОтбор.Владелец КАК Владелец, шкОтбор.Характеристика КАК Характеристика ПОМЕСТИТЬ втШк ИЗ (ВЫБРАТЬ Штрихкоды.Владелец КАК Владелец, Штрихкоды.Характеристика КАК Характеристика ИЗ РегистрСведений.Штрихкоды КАК Штрихкоды ГДЕ Штрихкоды.Штрихкод = &Штрихкод) КАК шкОтбор ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток, ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, ТоварыНаСкладахОстатки.Характеристика КАК Характеристика ПОМЕСТИТЬ выбОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки ГДЕ ТоварыНаСкладахОстатки.Склад = &Склад ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втШк.Владелец КАК Владелец, втШк.Характеристика КАК Характеристика, выбОстаток.КоличествоОстаток КАК КоличествоОстаток ИЗ втШк КАК втШк ЛЕВОЕ СОЕДИНЕНИЕ выбОстаток КАК выбОстаток ПО втШк.Владелец = выбОстаток.Номенклатура И втШк.Характеристика = выбОстаток.Характеристика вопрос , чем подзапрос отличается от виртуальной таблицы в данном случае ? (опыт написания SQL запросов с 1997 года) | |||
| 13
    
        asady 07.07.20✎ 11:14 | 
        (12) после 97 года чему-нить еще научились?
 тебе написали уже ПВТ - параметры виртуальной таблицы - заполни! зачем временные таблицы насоздавал? | |||
| 14
    
        IVT_2009 07.07.20✎ 11:19 | 
        Такой запрос , то же показал правильный результат
 ВЫБРАТЬ шкОтбор.Владелец КАК Владелец, шкОтбор.Характеристика КАК Характеристика, ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток ИЗ (ВЫБРАТЬ Штрихкоды.Владелец КАК Владелец, Штрихкоды.Характеристика КАК Характеристика ИЗ РегистрСведений.Штрихкоды КАК Штрихкоды ГДЕ Штрихкоды.Штрихкод = &Штрихкод) КАК шкОтбор ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&период, Склад = &склад) КАК ТоварыНаСкладахОстатки ПО (шкОтбор.Владелец = ТоварыНаСкладахОстатки.Номенклатура) И (шкОтбор.Характеристика = ТоварыНаСкладахОстатки.Характеристика) | |||
| 15
    
        IVT_2009 07.07.20✎ 11:23 | 
        (13) понял. Спасибо! все заработало как надо.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |