Шаг 257 - Что делать, если нужно получить сгруппированные данные

Данный вопрос стал после того, как я увидел новый авансовый отчет. Вот примерно такой он.

257_1.gif (5453 b)

Обратите внимание на ту гадость, что нам в начале нужно получить сводные данные. То есть даже, если все делать руками, то придется два раза проходить по таблице. Но и сам язык 1C совсем не C++ для таких операций. Ведь счетов может быть много и они могут быть совершенно разные. Выход в такой ситуации в использовании запроса к самому себе.

Запрос = СоздатьОбъект("Запрос");
	ТекстЗапроса =
	"//{{ЗАПРОС(Сформировать)
	|Период с (ТекущийДокумент()) по (ТекущийДокумент());
	|ОбрабатыватьДокументы все;
	|КоррСчет = Документ.АвансовыйОтчет.СчетДляАванса.Счет;
	|НДС = Документ.АвансовыйОтчет.СуммаНДС;
	|Сумма = Документ.АвансовыйОтчет.СуммаСНДС;
	|Функция ИтогоПоСчету = Сумма(Сумма);
	|Функция НДСПоСчету = Сумма(НДС);
	|Группировка КоррСчет;
	|"//}}ЗАПРОС

Обратите внимание, что запрос идет к текущему документу. Вот такая хитрость. В нем же и указана группировка, чтобы получать сводные параметры по отчету. Дальше можно перебирать сгруппированные данные.

Пока Запрос.Группировка("КоррСчет") = 1 Цикл  
	Т.ВывестиСекцию("Секция_9");
КонецЦикла;

И выводить. Но при таком подходе документ должен быть записан. Читайте "Шаг 256 - Программно пишем документ".


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.