Имя: Пароль:
1C
1С v8
Общие итоги в УО
0 John83
 
11.11.14
16:43
УТ 10.3
Соединяю регистр продаж и свой РС, нужно вывести общие итоги, но что-то идея не идет..
ВЫБРАТЬ
    ПродажиОбороты.Контрагент КАК Контрагент,
    ПродажиОбороты.ДокументПродажи КАК ДокументПродажи,
    ПоказателиДляРасчетаВаловойПрибыли.Бонус КАК Бонус
ИЗ
    РегистрНакопления.Продажи.Обороты(, , , ) КАК ПродажиОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказателиДляРасчетаВаловойПрибыли КАК ПоказателиДляРасчетаВаловойПрибыли
        ПО ПродажиОбороты.Контрагент = ПоказателиДляРасчетаВаловойПрибыли.Покупатель
ИТОГИ
    ВЫБОР
        КОГДА ДокументПродажи ЕСТЬ НЕ NULL
            ТОГДА 0
        КОГДА Контрагент ЕСТЬ НЕ NULL
            ТОГДА СУММА(Бонус) / КОЛИЧЕСТВО(ДокументПродажи)
        КОГДА Контрагент ЕСТЬ NULL
                И ДокументПродажи ЕСТЬ NULL
            ТОГДА СУММА(Бонус) / КОЛИЧЕСТВО(ДокументПродажи) * КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагент)
        ИНАЧЕ 0
    КОНЕЦ КАК Бонус
ПО
    ОБЩИЕ,
    Контрагент,
    ДокументПродажи
1 John83
 
11.11.14
16:44
ТОГДА СУММА(Бонус) / КОЛИЧЕСТВО(ДокументПродажи) * КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагент)
хорошо считает, когда для каждого контрагента заполнен РС, но что делать, когда это не так?
2 Крошка Ру
 
11.11.14
16:46
(1) Предусмотреть случай когда Бонус Есть Null
3 John83
 
11.11.14
16:48
(2) типа
КОГДА Бонус ЕСТЬ NULL
  ТОГДА 0
??
не прокатывает
4 Крошка Ру
 
11.11.14
16:50
(3) Нет

ЕстьNull(Бонус,0)
5 Крошка Ру
 
11.11.14
16:51
+(4) И всегда при левом соединении, рекомендую предусматривать, что параметр из правой таблицы может быть NUll
6 John83
 
11.11.14
16:57
(4) (5) ты об этом?
ВЫБРАТЬ
    ПродажиОбороты.Контрагент КАК Контрагент,
    ПродажиОбороты.ДокументПродажи КАК ДокументПродажи,
    ЕСТЬNULL(ПоказателиДляРасчетаВаловойПрибыли.Бонус, 0) КАК Бонус
ИЗ
    РегистрНакопления.Продажи.Обороты(, , , ) КАК ПродажиОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказателиДляРасчетаВаловойПрибыли КАК ПоказателиДляРасчетаВаловойПрибыли
        ПО ПродажиОбороты.Контрагент = ПоказателиДляРасчетаВаловойПрибыли.Покупатель
ИТОГИ
    ВЫБОР
        КОГДА ДокументПродажи ЕСТЬ НЕ NULL
            ТОГДА 0
        КОГДА Контрагент ЕСТЬ НЕ NULL
            ТОГДА СУММА(Бонус) / КОЛИЧЕСТВО(ДокументПродажи)
        КОГДА Контрагент ЕСТЬ NULL
                И ДокументПродажи ЕСТЬ NULL
            ТОГДА СУММА(Бонус) / КОЛИЧЕСТВО(ДокументПродажи) * КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагент)
        ИНАЧЕ 0
    КОНЕЦ КАК Бонус
ПО
    ОБЩИЕ,
    Контрагент,
    ДокументПродажи
7 Крошка Ру
 
11.11.14
17:17
(6) Ну, главным образом, я говорил об итогах, но и в выбираемых поля, да, тоже.
8 John83
 
11.11.14
18:17
ТОГДА СУММА(естьnull(Бонус, 0)) / КОЛИЧЕСТВО(ДокументПродажи) * КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагент)
и что от этого меняется?
все равно не понял тебя
9 John83
 
12.11.14
15:42
тут получается, что надо искать количество "бонусных" покупателей, но там есть и другие поля - получится нагромождение. Может есть другие варианты?
10 John83
 
13.11.14
10:34
в итоге имеем такой вариант

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Продажи.Контрагент КАК Контрагент,
    Продажи.ДокументПродажи КАК ДокументПродажи,
    ПоказателиДляРасчетаВаловойПрибыли.Бонус КАК Бонус,
    Бонусы.КонтрагентБонус,
    Бонусы.ДокументПродажиБонус
ИЗ
    Продажи КАК Продажи
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказателиДляРасчетаВаловойПрибыли КАК ПоказателиДляРасчетаВаловойПрибыли
        ПО Продажи.Контрагент = ПоказателиДляРасчетаВаловойПрибыли.Покупатель,
    Бонусы КАК Бонусы
ИТОГИ
    ВЫБОР
        КОГДА ДокументПродажи ЕСТЬ НЕ NULL
            ТОГДА 0
        КОГДА Контрагент ЕСТЬ НЕ NULL
            ТОГДА СУММА(Бонус) / КОЛИЧЕСТВО(ДокументПродажи)
        КОГДА Контрагент ЕСТЬ NULL
                И ДокументПродажи ЕСТЬ NULL
            ТОГДА СУММА(Бонус) / МАКСИМУМ(Бонусы.ДокументПродажиБонус) * МАКСИМУМ(Бонусы.КонтрагентБонус)
        ИНАЧЕ 0
    КОНЕЦ КАК Бонус
ПО
    ОБЩИЕ,
    Контрагент,
    ДокументПродажи
11 John83
 
13.11.14
10:35
может кто-нить посоветует вариант "покрасивше"?
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn