8.х Функция Среднее в итогах запроса

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем mhl, 10 апр 2017.

  1. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    443
    Симпатии:
    1
    Баллы:
    29
    Здравствуйте.
    Вот кусок запроса:
    Код:
    |ИТОГИ
        |    СУММА(Продано),
        |    СРЕДНЕЕ(ЦенаРеализации),
        |    СРЕДНЕЕ(ЦенаБазовая),
        |    СУММА(СуммаБазЦена),
        |    СУММА(СуммаТекЦена),
        |    СРЕДНЕЕ(СреднееОЦ),
        |    СУММА(СуммаПоСреднейОЦ)
        |ПО
        |    ТипОдеждыДФ,
        |    Модель";
    
    Далее идет выборка

    Код:
    ВыборкаТипыОдежды =  РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаТипыОдежды.Следующий() Цикл
             ОбластьТипыОдежды.Параметры.Заполнить(ВыборкаТипыОдежды);
             ТабДок.Вывести(ОбластьТипыОдежды, ВыборкаТипыОдежды.Уровень(), ,Ложь);
    
             ВыборкаМодели = ВыборкаТипыОдежды.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
             Пока ВыборкаМодели.Следующий() Цикл
                    ОбластьМодели.Параметры.Заполнить(ВыборкаМодели);
                   ТабДок.Вывести(ОбластьМодели, ВыборкаМодели.Уровень(), ,Ложь);
    
                   ВыборкаТовары = ВыборкаМодели.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                       Пока ВыборкаТовары.Следующий() Цикл
                                ОбластьТовары.Параметры.Заполнить(ВыборкаТовары);
                                ТабДок.Вывести(ОбластьТовары, ВыборкаТовары.Уровень(), ,Ложь);
                       КонецЦикла;
             КонецЦикла;
    КонецЦикла;
    В итоге выходит следующее:
    Поле ЦенаРеализации
    ТипОдежды 20,49
    Модель1 18,99

    Номенклатура 18,99
    Модель2 20,99
    Номенклатура 20,99
    Номенклатура 20,99
    Номенклатура 20,99

    Среднее по типу одежды должно быть (18,99+20,99)/2 = 19,99
    Но у меня считает по номенклатуре.
    Как можно сделать чтобы среднее считалось по строкам моделей?

    Заранее спасибо.
  2. 1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    162
    Баллы:
    104
    Выложи результат запроса, а то нечитабельно.
    Покажи весь запрос, может агрегирование неверное, может есть показатели с null, отсюда среднее неверно считается - значения нет, а поле есть.
  3. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    443
    Симпатии:
    1
    Баллы:
    29
    Код:
    "ВЫБРАТЬ
        |    ВложенныйЗапрос.МодельИзмерение КАК МодельИзмерение,
        |    ЦеныМоделиСрезПоследних.Цена КАК Цена,
        |    ЦеныМоделиСрезПоследних.ТипСкидок КАК ТипСкидок
        |ПОМЕСТИТЬ ТЗЦеныРеализация
        |ИЗ
        |    (ВЫБРАТЬ
        |        ЦеныМоделиСрезПоследних.Модель КАК МодельИзмерение,
        |        МАКСИМУМ(ЦеныМоделиСрезПоследних.Период) КАК Период
        |    ИЗ
        |        РегистрСведений.ЦеныМодели.СрезПоследних(&ДатаКон, ) КАК ЦеныМоделиСрезПоследних
        |    ГДЕ
        |        ЦеныМоделиСрезПоследних.ТипЦен = &ЦенаРеал
        |
        |    СГРУППИРОВАТЬ ПО
        |        ЦеныМоделиСрезПоследних.Модель) КАК ВложенныйЗапрос
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныМодели.СрезПоследних(&ДатаКон, ) КАК ЦеныМоделиСрезПоследних
        |        ПО ВложенныйЗапрос.МодельИзмерение = ЦеныМоделиСрезПоследних.Модель
        |            И ВложенныйЗапрос.Период = ЦеныМоделиСрезПоследних.Период
        |ГДЕ
        |    ЦеныМоделиСрезПоследних.ТипЦен = &ЦенаРеал
        |
        |СГРУППИРОВАТЬ ПО
        |    ЦеныМоделиСрезПоследних.Цена,
        |    ВложенныйЗапрос.МодельИзмерение,
        |    ЦеныМоделиСрезПоследних.ТипСкидок
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВложенныйЗапрос.МодельИзмерение КАК МодельИзмерение,
        |    ЦеныМоделиСрезПоследних.Цена КАК Цена
        |ПОМЕСТИТЬ ТЗЦеныБазовые
        |ИЗ
        |    (ВЫБРАТЬ
        |        ЦеныМоделиСрезПоследних.Модель КАК МодельИзмерение,
        |        МАКСИМУМ(ЦеныМоделиСрезПоследних.Период) КАК Период
        |    ИЗ
        |        РегистрСведений.ЦеныМодели.СрезПоследних(&ДатаКон, ) КАК ЦеныМоделиСрезПоследних
        |    ГДЕ
        |        ЦеныМоделиСрезПоследних.ТипЦен = &ЦенаРеал
        |        И ЦеныМоделиСрезПоследних.ТипСкидок = &База
        |
        |    СГРУППИРОВАТЬ ПО
        |        ЦеныМоделиСрезПоследних.Модель) КАК ВложенныйЗапрос
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныМодели.СрезПоследних(&ДатаКон, ) КАК ЦеныМоделиСрезПоследних
        |        ПО ВложенныйЗапрос.МодельИзмерение = ЦеныМоделиСрезПоследних.Модель
        |            И ВложенныйЗапрос.Период = ЦеныМоделиСрезПоследних.Период
        |ГДЕ
        |    ЦеныМоделиСрезПоследних.ТипЦен = &ЦенаРеал
        |    И ЦеныМоделиСрезПоследних.ТипСкидок = &База
        |
        |СГРУППИРОВАТЬ ПО
        |    ЦеныМоделиСрезПоследних.Цена,
        |    ВложенныйЗапрос.МодельИзмерение
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ПродажаИМаржаОбороты.Номенклатура.Модель КАК Модель,
        |    ВЫБОР
        |        КОГДА ПродажаИМаржаОбороты.СуммаОборот / (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход) - 0.1 = ТЗЦеныРеализация.Цена - 0.1
        |            ТОГДА ПродажаИМаржаОбороты.СуммаОборот / (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход)
        |        ИНАЧЕ ПродажаИМаржаОбороты.СуммаОборот
        |    КОНЕЦ КАК ЦенаПродажи,
        |    ВЫБОР
        |        КОГДА ПродажаИМаржаОбороты.Номенклатура.Модель.ТипОдеждыДеФакто = ЗНАЧЕНИЕ(Справочник.ТипыОдеждыДеФакто.ПустаяСсылка)
        |            ТОГДА ПродажаИМаржаОбороты.Номенклатура.Модель.ТипОдежды.Наименование
        |        ИНАЧЕ ПродажаИМаржаОбороты.Номенклатура.Модель.ТипОдеждыДеФакто.Наименование
        |    КОНЕЦ КАК ТипОдеждыДФ,
        |    СУММА(ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход) КАК Продано,
        |    ТЗЦеныРеализация.Цена КАК ЦенаРеализации,
        |    ТЗЦеныБазовые.Цена КАК ЦенаБазовая,
        |    СУММА(ТЗЦеныБазовые.Цена * (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход)) КАК СуммаБазЦена,
        |    СУММА(ТЗЦеныРеализация.Цена * (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход)) КАК СуммаТекЦена,
        //|    ПродажаИМаржаОбороты.Номенклатура,
        |    ВЫБОР
        |            КОГДА ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход = 0
        |                ТОГДА 0
        |            ИНАЧЕ ВЫБОР
        |                    КОГДА ПродажаИМаржаОбороты.СуммаОборот / (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход) - 0.1 = ТЗЦеныРеализация.Цена - 0.1
        |                        ТОГДА ПродажаИМаржаОбороты.СуммаОборот / (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход)
        |                    ИНАЧЕ
        |                        Выбор Когда (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход) > 1  Тогда
        |                            ПродажаИМаржаОбороты.СуммаОборот / (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход)
        |                        Иначе ПродажаИМаржаОбороты.СуммаОборот
        |                    Конец
        |                КОНЕЦ
        |        КОНЕЦ КАК СреднееОЦ,
        |СУММА((ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход) *     ВЫБОР
        |            КОГДА ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход = 0
        |                ТОГДА 0
        |            ИНАЧЕ ВЫБОР
        |                    КОГДА ПродажаИМаржаОбороты.СуммаОборот / (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход) - 0.1 = ТЗЦеныРеализация.Цена - 0.1
        |                        ТОГДА ПродажаИМаржаОбороты.СуммаОборот / (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход)
        |                    ИНАЧЕ
        |                        Выбор Когда (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход) > 1  Тогда
        |                            ПродажаИМаржаОбороты.СуммаОборот / (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход)
        |                        Иначе ПродажаИМаржаОбороты.СуммаОборот
        |                    Конец
        |                КОНЕЦ
        |        КОНЕЦ) КАК СуммаПоСреднейОЦ
        |ИЗ
        |    РегистрНакопления.ПродажаИМаржа.Обороты(&ДатаНач, &ДатаКон, Регистратор, ) КАК ПродажаИМаржаОбороты
        |        ЛЕВОЕ СОЕДИНЕНИЕ ТЗЦеныРеализация КАК ТЗЦеныРеализация
        |        ПО ПродажаИМаржаОбороты.Номенклатура.Модель = ТЗЦеныРеализация.МодельИзмерение
        |        ЛЕВОЕ СОЕДИНЕНИЕ ТЗЦеныБазовые КАК ТЗЦеныБазовые
        |        ПО ПродажаИМаржаОбороты.Номенклатура.Модель = ТЗЦеныБазовые.МодельИзмерение
        |
        |СГРУППИРОВАТЬ ПО
        |    ПродажаИМаржаОбороты.Номенклатура.Модель,
        |    ВЫБОР
        |            КОГДА ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход = 0
        |                ТОГДА 0
        |            ИНАЧЕ ВЫБОР
        |                    КОГДА ПродажаИМаржаОбороты.СуммаОборот / (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход) - 0.1 = ТЗЦеныРеализация.Цена - 0.1
        |                        ТОГДА ПродажаИМаржаОбороты.СуммаОборот / (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход)
        |                    ИНАЧЕ
        |                        Выбор Когда (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход) > 1  Тогда
        |                            ПродажаИМаржаОбороты.СуммаОборот / (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход)
        |                        Иначе ПродажаИМаржаОбороты.СуммаОборот
        |                    Конец
        |                КОНЕЦ
        |        КОНЕЦ,
        |    ВЫБОР
        |        КОГДА ПродажаИМаржаОбороты.Номенклатура.Модель.ТипОдеждыДеФакто = ЗНАЧЕНИЕ(Справочник.ТипыОдеждыДеФакто.ПустаяСсылка)
        |            ТОГДА ПродажаИМаржаОбороты.Номенклатура.Модель.ТипОдежды.Наименование
        |        ИНАЧЕ ПродажаИМаржаОбороты.Номенклатура.Модель.ТипОдеждыДеФакто.Наименование
        |    КОНЕЦ,
        |    ТЗЦеныРеализация.Цена,
        |    ВЫБОР
        |        КОГДА ПродажаИМаржаОбороты.СуммаОборот / (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход) - 0.1 = ТЗЦеныРеализация.Цена - 0.1
        |            ТОГДА ПродажаИМаржаОбороты.СуммаОборот / (ПродажаИМаржаОбороты.КоличествоПриход - ПродажаИМаржаОбороты.КоличествоРасход)
        |        ИНАЧЕ ПродажаИМаржаОбороты.СуммаОборот
        |    КОНЕЦ,
        |    ТЗЦеныБазовые.Цена,
        //|    ПродажаИМаржаОбороты.Номенклатура
        |ИТОГИ
        |    СУММА(Продано),
        |    СРЕДНЕЕ(ЦенаРеализации),
        |    СРЕДНЕЕ(ЦенаБазовая),
        |    СУММА(СуммаБазЦена),
        |    СУММА(СуммаТекЦена),
        |    СРЕДНЕЕ(СреднееОЦ),
        |    СУММА(СуммаПоСреднейОЦ)
        |ПО
        |    ТипОдеждыДФ,
        |    Модель"
    --- Объединение сообщений, 10 апр 2017 ---
    тут еще вот какая ситуация. У номенклатуры цены нет. Цена есть у модели. Т.е. запрос ставит на строку товара цену из модели.
    Последнее редактирование: 10 апр 2017
  4. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    443
    Симпатии:
    1
    Баллы:
    29
    Решил данную проблему другим путём. Всё же хотелось бы узнать, можно ли сделать это в запросе?

Поделиться этой страницей