Имя: Пароль:
1C
1С v8
Как в запросе получить итоговую сумму по группировкам?
0 sapravka
 
07.10.14
03:08
Здравствуйте.
Если что не так написал, прошу сильно не ругать.

Возникла необходимость получить итоги по группировкам с отборам, например группировка  по Видам номенклатуры: То есть, получить все данные, сумму продаж всех товаров с видом номенклатура НАПИТКИ.

Подскажите, как из запроса получить данные в переменную?

Вот делаю запрос:


Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("НачалоПериода", ЭтотОбъект.НачалоПериода);
    Запрос.УстановитьПараметр("КонецПериода", ЭтотОбъект.КонецПериода);
    Запрос.Текст ="ВЫБРАТЬ
                  |    ПродажиЧекККМИДляОтчета.Период,
                  |    ПродажиЧекККМИДляОтчета.Регистратор,
                  |    ПродажиЧекККМИДляОтчета.Склад,
                  |    ПродажиЧекККМИДляОтчета.Номенклатура,
                  |    ПродажиЧекККМИДляОтчета.ВидыНоменклатуры КАК ВидыНоменклатуры,
                  |    ПродажиЧекККМИДляОтчета.Количество,
                  |    ПродажиЧекККМИДляОтчета.Цена,
                  |    ПродажиЧекККМИДляОтчета.Сумма КАК Сумма
                  |ИЗ
                  |    РегистрНакопления.ПродажиЧекККМИДляОтчета КАК ПродажиЧекККМИДляОтчета
                  |ГДЕ
                  |    ПродажиЧекККМИДляОтчета.Период МЕЖДУ &НачалоПериода И &КонецПериода
                  |ИТОГИ
                  |    СУММА(Сумма)
                  |ПО
                  |    ВидыНоменклатуры";
    РезультатЗапроса = Запрос.Выполнить();
    Шапка = РезультатЗапроса.Выбрать();
    Шапка.Следующий();
    
    
    
    Как в данном запросе получить в переменные:

    А = получить сумму по ВидыНоменклатуры НАПИТКИ;
    В = получить сумму по ВидыНоменклатуры СЫРЫ;
       С = и так далее

А так же в переменную:
Д - общую сумму по данному запросу?
1 Metman
 
07.10.14
04:21
Сделай обход по группировкам.
2 Metman
 
07.10.14
04:22
РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам)
3 sapravka
 
07.10.14
08:43
(2) Вот  так нужно написать  в конце запроса:

Шапка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);    Шапка.Следующий();

Подскажите пожалуйста еще:
Как в данном запросе получить в переменные:

    А = получить сумму по ВидыНоменклатуры НАПИТКИ;
    В = получить сумму по ВидыНоменклатуры СЫРЫ;
    С = и так далее

А так же в переменную:

    Д - общую сумму по данному запросу?
4 Peltzer
 
07.10.14
08:46
Закладка Итоги в конструкторе запросов в помощь
5 sapravka
 
07.10.14
08:52
(4) Вот прописал на закладке Итоги в конструкторе запросов:

http://i67.fastpic.ru/big/2014/1007/59/454e9bc3e8f440a2b0a58191ec960659.jpg
6 Metman
 
07.10.14
09:34
(3) я тебе это и сказал.
Пока Шапка.Следующий() Цикл
.....
КонецЦикла;
7 sapravka
 
07.10.14
09:46
//Как тут сумму получить, вот в этом:
Пока Шапка.Следующий() Цикл
    //Пробывал вот так, но получает сумму последней строчки проданной номенклатуры:
        Если Шапка.ВидыНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоКоду("000000001") Тогда
            А = Шапка.Сумма;
        КонецЕсли;
    //А хотелось бы получить сумму всей проданной номенклатуры по Справочники.ВидыНоменклатуры.НайтиПоКоду("000000001")
КонецЦикла;
8 Peltzer
 
07.10.14
10:02
Галочка "Общие итоги" в конструкторе запросов даст сумму итого.
9 sapravka
 
07.10.14
15:58
(8) поставил!
В консоли запросов все нормально выводит, а вот как это программно получить?
10 azeml
 
07.10.14
16:20
(9) я делал отдельным вложенным запросом! Все работало без проблем!
11 sapravka
 
07.10.14
16:21
(10) Можно пример в студию....
12 azeml
 
07.10.14
16:50
(11)   "ВЫБРАТЬ
                  |    ПродажиЧекККМИДляОтчета.Период,
                  |    ПродажиЧекККМИДляОтчета.Регистратор,
                  |    ПродажиЧекККМИДляОтчета.Склад,
                  |    ПродажиЧекККМИДляОтчета.Номенклатура,
                  |    ПродажиЧекККМИДляОтчета.ВидыНоменклатуры КАК ВидыНоменклатуры,
                  |    ПродажиЧекККМИДляОтчета.Количество,
                  |    ПродажиЧекККМИДляОтчета.Цена,
                  |    ПродажиЧекККМИДляОтчета.Сумма КАК Сумма,
          |    ВложенныйЗапрос.Сумма2 КАК Сумма2
                  |ИЗ
          |ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                  |            СУММА(ПродажиЧекККМИДляОтчета.Сумма) КАК Сумма2,
                  |            ПродажиЧекККМИДляОтчета.Ссылка КАК Ссылка
                  |        ИЗ
                  |            РегистрНакопления.ПродажиЧекККМИДляОтчета КАК ПродажиЧекККМИДляОтчета
                  |        
                  |        СГРУППИРОВАТЬ ПО
                  |            ПродажиЧекККМИДляОтчета.Ссылка) КАК ВложенныйЗапрос
                  |        ПО ПродажиЧекККМИДляОтчета.Ссылка = ВложенныйЗапрос.Ссылка
                  |    РегистрНакопления.ПродажиЧекККМИДляОтчета КАК ПродажиЧекККМИДляОтчета
                  |ГДЕ
                  |    ПродажиЧекККМИДляОтчета.Период МЕЖДУ &НачалоПериода И &КонецПериода
                  |ИТОГИ
                  |    СУММА(Сумма)
          |    СУММА(Сумма2)
                  |ПО
                  |    ВидыНоменклатуры";

вроде так!
Делаешь вложений запрос в нем сумму поля и в основном запросе тоже сумму делаешь!
13 sapravka
 
07.10.14
19:42
(12) Попробовал написать  ЗАПРОС как в (12)  , но выдает ошибку:

Неверное присоединение
<<?>>ВНУТРЕННЕЕ СОЕДИНЕНИЕ(ВЫБРАТЬ
14 vicof
 
07.10.14
20:21
"Пробывал"
У меня мозг в трубочку сворачивается от таких слов.
(13) Ну укажи источник данных. Ты не клон LivingStar ?
15 azeml
 
07.10.14
23:26
(13) конструктор сделай вложений запрос