ZUBR @ Вчера, 17:43
,
На примере этого запроса:
ТекстЗапросаАкс =
"
|Период с НачДата по КонДата;
|ОбрабатыватьДокументы Проведенные;
|СтатусЗаказа = Документ.РасходнаяНакладная.СтатусЗаказа;
|Товар = Документ.РасходнаяНакладная.Товар;
|СуммаСНДС = Документ.РасходнаяНакладная.СуммаСНДС;
|Функция СумАкс = Сумма(СуммаСНДС);
|Группировка Товар Без Групп;
|Условие (СтатусЗаказа = Перечисление.Статусы.Акс);";
Запрос.Выполнить(ТекстЗапросаАкс); //*1
Пока Запрос.Группировка() = 1 Цикл //*2
СумАкс = Запрос.СумАкс;
КонецЦикла;
Сообщить("Сумма акс:"+СумАкс); //*3
//*1 - на этой строке у нас выполняется запрос и мы получаем таблицу с колонками "Товар" и "СумАкс" в которой строк будет столько, сколько разных товаров мы продали за период
пусть будет 3 строки: Товар1 на сумму 5000,00, Товар2 - 7000,00, Товар3- 3000,00
//*2 - в цикле мы обходим строки этой талицы, т.е. код внутри цикла выполнится 3 раза. Если мы условно уберем цикл, то наш код (напишу со значениями которые записываем в переменную) будет выглядеть примерно так:
СумАкс = 5000;
СумАкс = 7000;
СумАкс = 3000;
т.е. мы в одну переменную просто три раза присваиваем разные значения
и вот когда мы доходим до //*3 - у нас будет СумАкс = 3000; - именно последнее значение которое мы туда записали.
А если сделаем так:
СумАкс = 0;
Пока Запрос.Группировка() = 1 Цикл
СумАкс = СумАкс + Запрос.СумАкс;
КонецЦикла;
Сообщить("Сумма акс:"+СумАкс);
после выхода из цикла у нас СумАкс = 15000,00.
Если у вас на выходе получается сумма, то это магия или я совсем ничего не понимаю в 1С 7.7)))
PS. Ваш вариант сработает в случае, если во всей выборке запроса будет всего 1 товар(точнее во всех документах из выборки будет одинаковый товар) и цикл выполнится 1 раз