Имя: Пароль:
1C
1С v8
Почему запрос не работает?
0 tciban
 
25.11.14
10:29
Уважаемые коллеги! Туплю! Объясните почему запрос не работает?
Типовая УТ 10.3
Вот сам запрос:
ВЫБРАТЬ
    ЗатратыСделки.СуммаОборот КАК СуммаЗатрат,
    СУММА(ПродажиОбороты.СтоимостьОборот) КАК СтоимостьОборот,
    СУММА(ПродажиСебестоимостьОбороты.СтоимостьОборот) КАК СебестоимостьОборот
ИЗ
    РегистрНакопления.Продажи.Обороты(, , , ЗаказПокупателя = &Сделка) КАК ПродажиОбороты,
    РегистрНакопления.ПродажиСебестоимость.Обороты(, , , ЗаказПокупателя = &Сделка) КАК ПродажиСебестоимостьОбороты,
    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары,
    (ВЫБРАТЬ
        СУММА(ЗатратыОбороты.СуммаОборот) КАК СуммаОборот
    ИЗ
        РегистрНакопления.Затраты.Обороты(, , , Заказ = &Сделка) КАК ЗатратыОбороты) КАК ЗатратыСделки
ГДЕ
    ЗаказПокупателяТовары.Ссылка = &Сделка

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

СГРУППИРОВАТЬ ПО
    ЗатратыСделки.СуммаОборот
1 mikecool
 
25.11.14
10:30
а надо то что получить?
2 mikecool
 
25.11.14
10:31
1) нет соединения таблиц, как минимум
3 mikecool
 
25.11.14
10:32
+2 от этого(возможно) идет иннер джойн, смотреть в профилере
4 tciban
 
25.11.14
10:35
Забыл добавить - не работает если нет ни одной записи в регистре затрат по данному заказу покупателя (который параметр Сделка).
5 mikecool
 
25.11.14
10:36
(4) добавь связи между таблицами
6 tciban
 
25.11.14
10:43
Тогда нужно ли сделать связи между двумя другими таблицами? Между ПродажиОбороты и ПродажиСебестоимостьОбороты?
7 mikecool
 
25.11.14
10:43
(6) как угодно можно делать, конструктор не даст добавить неправильную связь
8 tciban
 
25.11.14
10:48
Вот так работает, но еще вопрос - где ставить ЕСТЬNULL(- до СУММА или после?
ВЫБРАТЬ
    СУММА(ПродажиОбороты.СтоимостьОборот) КАК СтоимостьОборот,
    СУММА(ПродажиСебестоимостьОбороты.СтоимостьОборот) КАК СебестоимостьОборот,
    ЕСТЬNULL(СУММА(ЗатратыОбороты.СуммаОборот),0) КАК СуммаОборот
ИЗ
    РегистрНакопления.Продажи.Обороты(, , , ЗаказПокупателя = &Сделка) КАК ПродажиОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Затраты.Обороты(, , , Заказ = &Сделка) КАК ЗатратыОбороты
        ПО ПродажиОбороты.ЗаказПокупателя = ЗатратыОбороты.Заказ,
    РегистрНакопления.ПродажиСебестоимость.Обороты(, , , ЗаказПокупателя = &Сделка) КАК ПродажиСебестоимостьОбороты
9 tciban
 
25.11.14
10:49
И все же не могу понять, зачем связи, ведь есть же отбор по виртуальной таблице регистра! Объясните дураку на пальцах?
10 Banned
 
25.11.14
10:50
(9) Объясняю на пальцах. Средний видишь? )))
связи нужны. Это аксиома.
11 tciban
 
25.11.14
10:52
(10) "связи нужны. Это аксиома." Я в первом посте привел пример запроса, который работает без связей. Так что не аксиома. Потому и хочу понять зачем они?
12 Ёпрст
 
гуру
25.11.14
10:54
(11) в первом посте cross join + условие в where
13 tciban
 
25.11.14
10:54
Да, строка "ГДЕ
    ЗаказПокупателяТовары.Ссылка = &Сделка" - это лишнее, забыл убрать. Первоначальный запрос был сложнее, я на форуме самую суть оставил, что бы не замусоривать вопрос :)
14 Ёпрст
 
гуру
25.11.14
10:54
на досуге, почитайте, что это...
15 tciban
 
25.11.14
10:56
(14) А что почитать то на досуге? Или про что? Что есть "cross join" по русски?
16 Ёпрст
 
гуру
25.11.14
10:56
(15) да.
17 tciban
 
25.11.14
10:59
(16) Я хотел спросить "Что есть "cross join" по русски?", а не почитать ли про это :)
18 tciban
 
25.11.14
11:00
(16) а вопрос мой в (15) бвл - где почитать. ссылочку бы неплохо...
19 vicof
 
25.11.14
11:01
(18) в гугле SQL для чайников за 21 день
20 tciban
 
25.11.14
11:04
По поводу связей - приймем это за аксиому, да... А где все таки ставить ЕСТЬNULL(- до СУММА или после?
21 vicof
 
25.11.14
11:07
(20) для начала нужно понять, как работают соединения и агрегатные функции
Программист всегда исправляет последнюю ошибку.