Имя: Пароль:
1C
1С v8
вывод в отчете номенклатуры без характеристик.
0 Ramundo
 
08.01.14
15:41
ВЫБРАТЬ
    ТоварыВЯчейкахОстатки.Номенклатура КАК Номенклатура,
    ТоварыВЯчейкахОстатки.Ячейка,
    ТоварыВЯчейкахОстатки.ВНаличииОстаток КАК Остаток,
    ТоварыВЯчейкахОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдИзмерения,
    ТоварыВЯчейкахОстатки.Характеристика,
    ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
    РегистрНакопления.ТоварыВЯчейках.Остатки КАК ТоварыВЯчейкахОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
        ПО ТоварыВЯчейкахОстатки.Характеристика.Наименование = ЦеныНоменклатурыСрезПоследних.Характеристика.Наименование
ГДЕ
    ЦеныНоменклатурыСрезПоследних.ВидЦены.Наименование = "Розничная"

Запрос выводит только номенклатуру, у которой есть характеристики и установлена розничная цена. Как вытащить те товары, у которых эти данные не указаны?
1 Eugeneer
 
08.01.14
15:43
Полное содениение
2 Eugeneer
 
08.01.14
15:44
Твой запрос выводит только те которые есть на остатках.

Да еще условие ПО сделано черех опу.
3 Ramundo
 
08.01.14
15:46
А по чему соединять, если делать полное соединение?
4 Eugeneer
 
08.01.14
15:47
ПО
ТоварыВЯчейкахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
И
ТоварыВЯчейкахОстатки.Характеристика= ЦеныНоменклатурыСрезПоследних.Характеристика
5 Eugeneer
 
08.01.14
15:48
(3) по номенклатуре и характеристикам - ссылкам.
а ты по наименованию характеристики соединяешь - грубейшая ошибка.

Полное - это если тебе надо вывести все и которых нет на остатках.
Левое если только те что на остатках - но опять таки с правильным соединением а не то чт оу тебя.
6 Eugeneer
 
08.01.14
15:50
Но еще не все.
Полное выведет еще и позиции у которых есть цена.

Если надо же вывести вообще полностью все товары с характерситиками и без, вне зависимости от остатков и цен,
то надо делать

1) запрос по справочнику номенклатуры
2) К нему же - соединение с характеристиками всеми


далее к этому двойному запросу добавлять отдельно запросы по осткткам и ценам с помощью конструкции ОБЪЕДИНИТЬ ВСЕ
7 Ramundo
 
08.01.14
15:54
Соединил вот так:

    ТоварыВЯчейкахОстатки.Номенклатура КАК Номенклатура,
    ТоварыВЯчейкахОстатки.Ячейка,
    ТоварыВЯчейкахОстатки.ВНаличииОстаток КАК Остаток,
    ТоварыВЯчейкахОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдИзмерения,
    ТоварыВЯчейкахОстатки.Характеристика,
    ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
    РегистрНакопления.ТоварыВЯчейках.Остатки КАК ТоварыВЯчейкахОстатки
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
        ПО ТоварыВЯчейкахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
            И ТоварыВЯчейкахОстатки.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика
ГДЕ
    ЦеныНоменклатурыСрезПоследних.ВидЦены.Наименование = "Розничная"

Одна задача выполнена, то есть товар без характеристик отображается. Но товар без розничной цены нет. Плюс, после нужных данных в конце отчета выдаются пустые строки, в которых только все значения розничных цен.
8 catena
 
08.01.14
16:30
(7)Чтобы отображался товар без розничной цены, надо ГДЕ засунуть в условия соединения.
9 Eugeneer
 
08.01.14
16:32
(7) читай (6)
Тебе нужен теперь совершенно другой запрос как я описал. Он сложнее.
10 Eugeneer
 
08.01.14
16:32
(8) товаров без цен в регистре может тупо не быть.
Тк в регистре только то что регистрировалось.
11 Eugeneer
 
08.01.14
16:35
(7) естественно так и будет. У тебя нигде не стоит упорядочивания по номенклатуре.


Плюс ПОЛНОЕ СОЕДИНЕНИЕ. А у тебя


ТоварыВЯчейкахОстатки.Номенклатура КАК Номенклатура,
    ТоварыВЯчейкахОстатки.Ячейка,
    ТоварыВЯчейкахОстатки.ВНаличииОстаток КАК Остаток,
    ТоварыВЯчейкахОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдИзмерения,
    ТоварыВЯчейкахОстатки.Характеристика,
    ЦеныНоменклатурыСрезПоследних.Цена


А это значит что у тебя выводится все заполненное только у тех у которыхз есть остатки, а у тех кто нету остатков в таблицу только одна цена и выйдет.
12 Eugeneer
 
08.01.14
16:36
Тебе теперь точно надо переписывать все целиком под (6)
13 Eugeneer
 
08.01.14
16:40
ВЫБРАТЬ
        ВложенныйЗапрос.Номенклатура КАК Номенклатура,
        ВложенныйЗапрос.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
        СУММА(ВложенныйЗапрос.КоличествоОстаток) КАК КоличествоОстаток
    ИЗ
        (ВЫБРАТЬ
            СпрНоменклатура.Ссылка КАК Номенклатура,
            ХарактеристикиНоменклатуры.Ссылка КАК ХарактеристикаНоменклатуры,
            0 КАК КоличествоОстаток
        ИЗ
            Справочник.Номенклатура КАК СпрНоменклатура
                ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
                ПО СпрНоменклатура.Ссылка = ХарактеристикиНоменклатуры.Владелец
        ГДЕ
            СпрНоменклатура.ЭтоГруппа = ЛОЖЬ
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            ЗапасыНаСкладах.Номенклатура,
            ЗапасыНаСкладах.Характеристика,
            ЗапасыНаСкладах.ВНаличииОстаток
        ИЗ
            РегистрНакопления.ТоварыНаСкладах.Остатки(, {(Склад) КАК Склад}) КАК ЗапасыНаСкладах) КАК ВложенныйЗапрос
14 Eugeneer
 
08.01.14
16:41
К этому вложенному левым добавишь цены и получишь то что надо.
С тебя пузырь.
А то чувствую хрен бы ты чо сделал.
15 Ramundo
 
08.01.14
16:47
(12) Блин, Спасибо! Ща буду разбираться) Это просто мой второй отчет)

А вообще, так ради интереса, если бы оставить вот так:

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

То выходит, что все отображается норм, только нет позиций номенклатуры, у которых не указана розничная. Вообще, часто бывает, что на складе лежит товар, для которого какой-либо вид цен не указан?
16 Eugeneer
 
08.01.14
17:17
(15) ну а почему нет. оприходовали а цены не назначили. запросто.
17 Ramundo
 
08.01.14
21:27
(8) Не подскажешь как?
18 catena
 
09.01.14
05:55
(10)Может. Но запрос (7) выводит только товар с розничной ценой, надо же человеку понять - почему.

(17)Условие на левую таблицу превращает твое полное соединение вовсе в правое. Потому что сначала происходит соединение, а потом на получившуюся выборку накладывается условие. Если переместить условие на вид цены из ГДЕ в ПО, порядок действий будет обратный.
19 WildSery
 
09.01.14
10:33
(18) Не в правое, а во внутреннее.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн