Имя: Пароль:
1C
1С v8
Проблема с запросом, помогите разобратся
0 location
 
naïve
05.09.16
15:51
В общем проблема с запросиком. Помогите новичку разобратся, что где не так в связях. Уже всю голову сломал. ЕСЛИ поставить в последнем запросе ВЫБРАТЬ РАЗЛИЧНЫЕ то всего 30 строк, если без слова различные то 3600 строк. Собственно сам запрос: помогите плизик.


ВЫБРАТЬ
    &ОрганизацияГлавная КАК Организация,
    &ТипЦеныГО КАК ТипЦены
ПОМЕСТИТЬ ВТОрганизацииТипыЦен

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

ВЫБРАТЬ
    &ОрганизацияВторая,
    &ТипЦеныВО

ИНДЕКСИРОВАТЬ ПО
    Организация,
    ТипЦены
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Номенклатура.Артикул КАК Артикул,
    РеализацияТоваровУслугТовары.Номенклатура,
    РеализацияТоваровУслугТовары.Номенклатура.Родитель КАК ГруппаТовара,
    РеализацияТоваровУслугТовары.Ссылка.Склад,
    РеализацияТоваровУслугТовары.Ссылка КАК ДокументПродажи,
    ВЫБОР
        КОГДА РеализацияТоваровУслугТовары.Ссылка.Организация.УпрУчет
            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Организация.ГоловнаяОрганизация
        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Организация
    КОНЕЦ КАК Организация
ПОМЕСТИТЬ ВТПродажи
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    НЕ РеализацияТоваровУслугТовары.Ссылка.ПометкаУдаления
    И РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон

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

ВЫБРАТЬ
    ОтчетОРозничныхПродажах.Номенклатура.Артикул,
    ОтчетОРозничныхПродажах.Номенклатура,
    ОтчетОРозничныхПродажах.Номенклатура.Родитель,
    ОтчетОРозничныхПродажах.Ссылка.Склад,
    ОтчетОРозничныхПродажах.Ссылка,
    ВЫБОР
        КОГДА ОтчетОРозничныхПродажах.Ссылка.Организация.УпрУчет
            ТОГДА ОтчетОРозничныхПродажах.Ссылка.Организация.ГоловнаяОрганизация
        ИНАЧЕ ОтчетОРозничныхПродажах.Ссылка.Организация
    КОНЕЦ
ИЗ
    Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажах
ГДЕ
    ОтчетОРозничныхПродажах.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон
    И НЕ ОтчетОРозничныхПродажах.Ссылка.ПометкаУдаления
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТПродажи.Номенклатура,
    ВТПродажи.Организация
ПОМЕСТИТЬ ВТНоменклатура
ИЗ
    ВТПродажи КАК ВТПродажи
;

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

СГРУППИРОВАТЬ ПО
    ПоступлениеТоваровУслугТовары.Ссылка,
    ПоступлениеТоваровУслугТовары.Номенклатура,
    ВЫБОР
        КОГДА ПоступлениеТоваровУслугТовары.Ссылка.Организация.УпрУчет
            ТОГДА ПоступлениеТоваровУслугТовары.Ссылка.Организация.ГоловнаяОрганизация
        ИНАЧЕ ПоступлениеТоваровУслугТовары.Ссылка.Организация
    КОНЕЦ
;

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТаблицаНоменклатуры.Номенклатура,
    ТаблицаНоменклатуры.ТипЦены
ПОМЕСТИТЬ ВТСпецификацииНаДату
ИЗ
    (ВЫБРАТЬ
        ВТНоменклатура.Номенклатура КАК Номенклатура,
        ВТОрганизацииТипыЦен.ТипЦены КАК ТипЦены
    ИЗ
        ВТНоменклатура КАК ВТНоменклатура
            ЛЕВОЕ СОЕДИНЕНИЕ ВТОрганизацииТипыЦен КАК ВТОрганизацииТипыЦен
            ПО ВТНоменклатура.Организация = ВТОрганизацииТипыЦен.Организация) КАК ТаблицаНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ ВТЦеныНоменклатурыСрез КАК ВТЦеныНоменклатурыСрез
        ПО ТаблицаНоменклатуры.Номенклатура = ВТЦеныНоменклатурыСрез.Номенклатура
            И ТаблицаНоменклатуры.ТипЦены = ВТЦеныНоменклатурыСрез.ТипЦен
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТСпецификацииНаДату.Номенклатура,
    ВТСпецификацииНаДату.ТипЦены,
    ВТЦеныНоменклатурыСрез.Цена
ПОМЕСТИТЬ ВТЦенаСпецификации
ИЗ
    ВТСпецификацииНаДату КАК ВТСпецификацииНаДату
        ЛЕВОЕ СОЕДИНЕНИЕ ВТЦеныНоменклатурыСрез КАК ВТЦеныНоменклатурыСрез
        ПО ВТСпецификацииНаДату.Номенклатура = ВТЦеныНоменклатурыСрез.Номенклатура
            И ВТСпецификацииНаДату.ТипЦены = ВТЦеныНоменклатурыСрез.ТипЦен
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПоступлениеТоваровУслугТовары.Номенклатура,
    СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК Количество,
    СУММА(ПоступлениеТоваровУслугТовары.Сумма) КАК Сумма
ПОМЕСТИТЬ ВтСгруппированныеЦены
ИЗ
    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТНоменклатура КАК ВТНоменклатура
        ПО ПоступлениеТоваровУслугТовары.Номенклатура = ВТНоменклатура.Номенклатура

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

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ВТПродажи.Артикул,
    ВТПродажи.Номенклатура,
    ВТПродажи.ГруппаТовара,
    ВТПродажи.Склад,
    ВТПродажи.ДокументПродажи,
    ВЫБОР
        КОГДА ВтСредЦенаПостуления.СредняяЦена = 0
            ТОГДА 0
        ИНАЧЕ ВтСредЦенаПостуления.СредняяЦена
    КОНЕЦ КАК СреднеучетнаяЦенаПрихода
ИЗ
    ВТПродажи КАК ВТПродажи
        ЛЕВОЕ СОЕДИНЕНИЕ ВтСредЦенаПостуления КАК ВтСредЦенаПостуления
        ПО ВТПродажи.Номенклатура = ВтСредЦенаПостуления.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ ВТЦенаСпецификации КАК ВТЦенаСпецификации
        ПО ВТПродажи.Номенклатура = ВТЦенаСпецификации.Номенклатура
ГДЕ
    ВТПродажи.Номенклатура = &Номенклатура
1 polosov
 
05.09.16
15:57
Чего хотел то?
2 mkalimulin
 
05.09.16
15:59
(0) А в чем вопрос? РАЗЛИЧНЫЕ убирает дубли.
Вот если бы с РАЗЛИЧНЫМИ было 3600, а без них 30 строк, тогда был бы вопрос.
3 mkalimulin
 
05.09.16
16:00
+(2) Ты не ломай голову, а лучше потренируйся.
http://catalog.mista.ru/public/533557/
4 location
 
naïve
05.09.16
16:03
(2) Так вроде ж не корректно если результат без выбрать различные выдает 3600 строк. Это ж на одной номенклатуре так, сколько ж будет данный отчет формироваться если их больше 1000 и вообще сформируется ли он когда нибудь, поэтому и прошу помощи.
5 igork1966
 
05.09.16
16:06
Вот тут нужно "РАЗЛИЧНЫЕ"

ВЫБРАТЬ
    ВТПродажи.Номенклатура,
    ВТПродажи.Организация
ПОМЕСТИТЬ ВТНоменклатура
ИЗ
    ВТПродажи КАК ВТПродажи
;

иначе при соединении записи будут множится
6 location
 
naïve
05.09.16
16:09
(5) спс, с данной штукой получилось уже 240 строк и запрос значительно быстрее отработал, но еще строки повтоярются (
7 igork1966
 
05.09.16
16:14
Количество записей умножается там где на одну номенклатуру несколько организаций:

ИЗ
    (ВЫБРАТЬ РАЗЛИЧНЫЕ
        ВТНоменклатура.Номенклатура КАК Номенклатура,
        ВТНоменклатура.Организация КАК Организация
    ИЗ
        ВТНоменклатура КАК ВТНоменклатура) КАК НоменклатураУн
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период010816, ) КАК ЦеныНоменклатурыСрезПоследних
        ПО НоменклатураУн.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
8 ejikbeznojek
 
05.09.16
16:16
Организацию в суммируемое поле переводи
Максимум (Организация)
xD
9 igork1966
 
05.09.16
16:16
И кстати, получать данные (для отчета?) из документов, как-бы сильно нехорошо
10 igork1966
 
05.09.16
16:17
Судя по всему автору стоит почитать умных книжек по SQL
11 location
 
naïve
05.09.16
16:24
(8) Перевел Организацию в суммируемое поле но кол-во строк осталось прежним 240 шт.
12 location
 
naïve
05.09.16
16:25
(9) как бы да, но все документе в базе не проведены.
13 location
 
naïve
05.09.16
16:26
(12) это база как черновик, там все без движений, но данные нужно достать из документов.
14 location
 
naïve
05.09.16
16:30
(7) у меня только может быть 2 организации на одну номенклатуру, но в регистре цены номенклатуры нет организации.
15 igork1966
 
05.09.16
16:41
(14) В выражении ВЫБРАТЬ там нет организации. Значит записей будет больше чем ожидалось.
16 igork1966
 
05.09.16
16:41
(15) + или должно быть так:

ИЗ
    (ВЫБРАТЬ РАЗЛИЧНЫЕ
        ВТНоменклатура.Номенклатура КАК Номенклатура
    ИЗ
        ВТНоменклатура КАК ВТНоменклатура) КАК НоменклатураУн
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период010816, ) КАК ЦеныНоменклатурыСрезПоследних
        ПО НоменклатураУн.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
17 location
 
naïve
05.09.16
16:48
(16) добавлял сюда РАЗЛИЧНЫЕ количество строк осталось неизменным
18 Catseye
 
05.09.16
17:00
Если в РегистрСведений.ЦеныНоменклатуры есть измерение организация, то добавь в условие соединения отбор по организации
ВЫБРАТЬ
    НоменклатураУн.Номенклатура КАК Номенклатура,
    ЦеныНоменклатурыСрезПоследних.ТипЦен КАК ТипЦен,
    ЦеныНоменклатурыСрезПоследних.Цена
ПОМЕСТИТЬ ВТЦеныНоменклатурыСрез
ИЗ
    (ВЫБРАТЬ РАЗЛИЧНЫЕ
        ВТНоменклатура.Номенклатура КАК Номенклатура,
        ВТНоменклатура.Организация КАК Организация
    ИЗ
        ВТНоменклатура КАК ВТНоменклатура) КАК НоменклатураУн
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период010816, ) КАК ЦеныНоменклатурыСрезПоследних
        ПО НоменклатураУн.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
             И НоменклатураУн.Организация= ЦеныНоменклатурыСрезПоследних.Организация
19 Catseye
 
05.09.16
17:03
Соответственно и ниже, где идет соединение с таблицами по документам в условиях соединений должен быть отбор по организациям
Закон Брукера: Даже маленькая практика стоит большой теории.